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 ;)

  • MegaV0lt

    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.3: ASUS Prime X470-PRO, Ryzen 7 5700X, 64GB, 6TB HD, GT1030, Fedora 40 Kernel 6.11 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 ;)

  • 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?

Participate now!

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