Anzeigezeit von Meldungen beeinflussen

  • Habe mal wieder ein 'Problem', bzw. ein paar Fragen zu den Meldungen, die vom VDR oder Skripten ausgegeben werden.

    Ist es möglich die Zeit die eine Meldung angezeigt wird zu fallweise zu verlängern wenn sehr lange Meldungen kommen wo die eingestellte Zeit nicht reicht.

    Ginge das von einem Skin aus? Oder ist das sinnvoller im VDR Core zu realisieren?

    Ich würde im Skin gerne wenn die Meldung z.B.länger als 80 Zeichen ist pro 20 Extra Zeichen eine Sekunde dran hängen (Ungetestete Idee):

    Code
        int MessageTime = cSetup::OSDMessageTime;
        const size_t MessageLength = strlen(Text);
        if (MessageLength > 80) {                           // Message is longer than 80 char
          const int ExtraTime = (MessageLength - 80) / 20;  // Extra chars: 1 sec. for each 20 char
          if (ExtraTime > 10) ExtraTime = 10;               // Max. 10 seconds
          MessageTime += ExtraTime;                         //  Add time of displaying message
        }

    Nur wie teile ich dem VDR das temporäre MessageTime mit?

    Im Skin hab ich eine displaymessage.[ch] aber habe keine Ahnung wo ich das einbauen muss.

    Oder ist das schon irgendwo mal umgesetzt worden? Vielleicht hat ja hier aus dem Forum jemand der sich wirklich auskennt eine Idee ;)

    Kanallogos: Picon.cz2VDR | Picons2VDR | MP-Logos
    Backupskripte: MV_Backup (RSync) | MV_BorgBackup (Borg)
    Skin: Skin FlatPlus

    "Es gibt keinen Grund, warum irgendjemand einen Computer in seinem Haus wollen würde."
    [Ken Olson], Präsident der Digital Equipment Corp., 1977

    VDR01 - yaVDR 0.7 (VDR 2.7.7)

    VDR 2.7.7; Gehäuse: Antec Fusion V2 Black & iMon LCD; Atric IR-Einschalter Rev. 4; Board: Intel DH77EB, Core i5-3550, GTX 1050 Ti, 8 GB RAM; DVB: 1x Digital Devices CineS2 Quad V6.5

    > Systeminfo.txt < [VDR-User #1540]

  • MegaV0lt July 14, 2024 at 8:44 AM

    Changed the title of the thread from “Amzeigezeit von Meldungen beeinflussen” to “Anzeigezeit von Meldungen beeinflussen”.
  • Nur wie teile ich dem VDR das temporäre MessageTime mit?

    Ich habe sowas zwar nicht für die MessageTime gemacht, aber schon für etwas anderes benutzt.

    Die Messagetime steht in "Setup.OSDMessageTime". Das kannst Du direkt im Plugin verwenden.

    Im Konstruktor rettest Du den Wert: "oldOSDMessageTime = Setup.OSDMessageTime;".

    Im Destruktor stellst Du den Wert wieder her: "Setup.OSDMessageTime = oldOSDMessageTime;".

    Und dann kannst Du "Setup.OSDMessageTime" so ändern wie Du willst.

    Und nicht vergessen "int oldOSDMessageTime; in die Header-Datei zu schreiben.

    Und das musst Du dann überall machen, wo eine Message ausgegeben werden soll.

    Grüße

    kamel5

    VDR 2.7.7: ASUS Prime X470-PRO, Ryzen 7 5700X, 64GB, 10TB HD mit ZFS RaidZ, GT1030, Fedora 42 Kernel 6.16 X86_64, Devicebonding 2 x 1 auf 2, TT6400, DVBSky S952 V3

    Git-Repo: gitlab.com/kamel5

  • Vielen Dank. Werde das so mal versuchen und berichten ;)

    Kanallogos: Picon.cz2VDR | Picons2VDR | MP-Logos
    Backupskripte: MV_Backup (RSync) | MV_BorgBackup (Borg)
    Skin: Skin FlatPlus

    "Es gibt keinen Grund, warum irgendjemand einen Computer in seinem Haus wollen würde."
    [Ken Olson], Präsident der Digital Equipment Corp., 1977

    VDR01 - yaVDR 0.7 (VDR 2.7.7)

    VDR 2.7.7; Gehäuse: Antec Fusion V2 Black & iMon LCD; Atric IR-Einschalter Rev. 4; Board: Intel DH77EB, Core i5-3550, GTX 1050 Ti, 8 GB RAM; DVB: 1x Digital Devices CineS2 Quad V6.5

    > Systeminfo.txt < [VDR-User #1540]

  • Vielen Dank noch mal für den Tipp

    Habe es so gemacht:

    Code
    void cFlatBaseRender::MessageSetExtraTime(const char *Text) {
        // For long messages increase 'MessageTime'
        const std::size_t MessageLength = strlen(Text);
        if (MessageLength > 80) {                        // Message is longer than 80 char
          int ExtraTime = (MessageLength - 80) / 15;     // 1 second for each 15 extra char
          if (ExtraTime > 7) ExtraTime = 7;              // Max. 7 seconds
          dsyslog("flatPlus: MessageSetExtraTime() Adding %d seconds to message time (%d)", ExtraTime, m_OSDMessageTime);
          Setup.OSDMessageTime += ExtraTime;             // Add time of displaying message
        }
    }

    Was ich nicht ganz verstehe ist, warum in displaymenu.c, displayreplay.c und so weiter auch noch 'SetMessage()' funktionen existieren?

    Kanallogos: Picon.cz2VDR | Picons2VDR | MP-Logos
    Backupskripte: MV_Backup (RSync) | MV_BorgBackup (Borg)
    Skin: Skin FlatPlus

    "Es gibt keinen Grund, warum irgendjemand einen Computer in seinem Haus wollen würde."
    [Ken Olson], Präsident der Digital Equipment Corp., 1977

    VDR01 - yaVDR 0.7 (VDR 2.7.7)

    VDR 2.7.7; Gehäuse: Antec Fusion V2 Black & iMon LCD; Atric IR-Einschalter Rev. 4; Board: Intel DH77EB, Core i5-3550, GTX 1050 Ti, 8 GB RAM; DVB: 1x Digital Devices CineS2 Quad V6.5

    > Systeminfo.txt < [VDR-User #1540]

  • Was ich nicht ganz verstehe ist, warum in displaymenu.c, displayreplay.c und so weiter auch noch 'SetMessage()' funktionen existieren?

    Weil jede dieser Klassen eine Message auf ihre spezielle Weise anzeigen kann. VDR weiß ja nicht, wo in einem bestimmten Display Platz für die Message ist.

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!