How to display an OSD message from a thread?

Message ID 200511221036.11203.mhahn@reel-multimedia.com
State New
Headers

Commit Message

Markus Hahn Nov. 22, 2005, 9:36 a.m. UTC
  Am Freitag, 18. November 2005 16:32 schrieb Christian Wieninger:
> 'm trying to display an OSD message from a separate thread within a plugin
> to indicate when some background action has finished.

Some Plugin try this and failed. But it is easy to send a signal 
or flag to your main thread. 
my patch of dvd Plugin: 

regards movimax
  

Comments

Christian Wieninger Nov. 22, 2005, 9:59 a.m. UTC | #1
Hi,

Markus Hahn schrieb:
 > Some Plugin try this and failed. But it is easy to send a signal
 > or flag to your main thread.
 > my patch of dvd Plugin:
 >
 > regards movimax

thanks! But the problem is, that the user can be anywhere when the 
thread has finished. In any other plugin or in one of VDR's menus.
So handling the message only in my plugin won't be a solution.
I do it now with SVDRP. Perhaps there will be a better solution in one 
the next VDR releases.

Thanks for your help!

BR,

Christian
  

Patch

diff -Nu /home/markus/svn-vdr/vdr-plugins/src/dvd-cvs/dvd.c dvd-cvs/dvd.c
--- /home/markus/svn-vdr/vdr-plugins/src/dvd-cvs/dvd.c	2005-09-26 18:44:47.000000000 +0200
+++ dvd-cvs/dvd.c	2005-09-28 19:56:12.000000000 +0200
@@ -118,8 +118,3 @@ 
 }
 
 VDRPLUGINCREATOR(cPluginDvd); // Don't touch this!
-
-
-
-
-
diff -Nu /home/markus/svn-vdr/vdr-plugins/src/dvd-cvs/dvd.h dvd-cvs/dvd.h
--- /home/markus/svn-vdr/vdr-plugins/src/dvd-cvs/dvd.h	2005-09-26 18:44:47.000000000 +0200
+++ dvd-cvs/dvd.h	2005-09-28 20:24:13.000000000 +0200
@@ -24,7 +24,7 @@ 
 
 static const char *VERSION        = "0.3.6-b03";
 static const char *DESCRIPTION    = "Plugin.DVD$turn VDR into an (almost) full featured DVD player";
-static const char *MAINMENUENTRY  = "Plugin.DVD$DVD";
+static const char *MAINMENUENTRY  = "Plugin.DVD$DVD/HD-DVD";
 
 // --- cPluginDvd ------------------------------------------------------------
 
diff -Nu /home/markus/svn-vdr/vdr-plugins/src/dvd-cvs/i18n.c dvd-cvs/i18n.c
--- /home/markus/svn-vdr/vdr-plugins/src/dvd-cvs/i18n.c	2005-09-26 18:44:47.000000000 +0200
+++ dvd-cvs/i18n.c	2005-09-28 20:05:26.000000000 +0200
@@ -40,30 +40,30 @@ 
 
 const tI18nPhrase DvdPhrases[] = {
     {
-    "Plugin.DVD$DVD",                                       // English
-        "DVD",                                              // Deutsch
-        "DVD",                                              // Slovenski
-        "DVD",                                              // Italiano
-        "DVD",                                              // Nederlands
-        "DVD",                                              // Português
-        "DVD",                                              // Français
-        "DVD",                                              // Norsk
-        "DVD",                                              // suomi
-        "DVD",                                              // Polski
-        "DVD",                                              // Español
-        "DVD",                                              // ÅëëçíéêÜ (Greek)
-        "DVD",                                              // Svenska
-        "DVD",                                              // Romaneste
-        "DVD",                                              // Magyar
-        "DVD",                                              // Català
-        "DVD",                                              // ÀãááÚØÙ (Russian)
-        "DVD",                                              // Hrvatski (Croatian)
-        "DVD",                                              // Eesti
-        "DVD",                                              // Dansk
+    "Plugin.DVD$DVD/HD-DVD",                                       // English
+        "DVD/HD-DVD",                                              // Deutsch
+        "DVD/HD-DVD",                                              // Slovenski
+        "DVD/HD-DVD",                                              // Italiano
+        "DVD/HD-DVD",                                              // Nederlands
+        "DVD/HD-DVD",                                              // Português
+        "DVD/HD-DVD",                                              // Français
+        "DVD/HD-DVD",                                              // Norsk
+        "DVD/HD-DVD",                                              // suomi
+        "DVD/HD-DVD",                                              // Polski
+        "DVD/HD-DVD",                                              // Español
+        "DVD/HD-DVD",                                              // ÅëëçíéêÜ (Greek)
+        "DVD/HD-DVD",                                              // Svenska
+        "DVD/HD-DVD",                                              // Romaneste
+        "DVD/HD-DVD",                                              // Magyar
+        "DVD/HD-DVD",                                              // Català
+        "DVD/HD-DVD",                                              // ÀãááÚØÙ (Russian)
+        "DVD/HD-DVD",                                              // Hrvatski (Croatian)
+        "DVD/HD-DVD",                                              // Eesti
+        "DVD/HD-DVD",                                              // Dansk
     },
     {
     "Plugin.DVD$turn VDR into an (almost) full featured DVD player",    // English
-        "",                                                             // Deutsch
+        "Erweitert den VDR zu einen DVD Spieler",  // Deutsch
         "",                                                             // Slovenski
         "",                                                             // Italiano
         "",                                                             // Nederlands
Gemeinsame Unterverzeichnisse: /home/markus/svn-vdr/vdr-plugins/src/dvd-cvs/patches und dvd-cvs/patches.
diff -Nu /home/markus/svn-vdr/vdr-plugins/src/dvd-cvs/player-dvd.c dvd-cvs/player-dvd.c
--- /home/markus/svn-vdr/vdr-plugins/src/dvd-cvs/player-dvd.c	2005-09-27 18:11:07.000000000 +0200
+++ dvd-cvs/player-dvd.c	2005-09-29 14:18:39.000000000 +0200
@@ -316,11 +316,14 @@ 
     SetTitleInfoString();
     SetTitleString();
     SetAspectString();
+	 message = 0;
 }
 
 cDvdPlayer::~cDvdPlayer()
 {
     DEBUGDVD("destructor cDvdPlayer::~cDvdPlayer()\n");
+	 if (message)
+		PrintMsg(message);
     Detach();
     Save();
     delete []event_buf;
@@ -594,6 +597,8 @@ 
 
     if (dvdnav_open(&nav, const_cast<char *>(cDVD::getDVD()->DeviceName())) != DVDNAV_STATUS_OK) {
         //Skins.Message(mtError, tr("Error.DVD$Error opening DVD!"));
+		  message = 1;
+		  
         esyslog("ERROR: dvd-plugin cannot open dvdnav device %s -> input thread ended (pid=%d) !", const_cast<char *>(cDVD::getDVD()->DeviceName()), getpid());
         active = running = false;
         nav=NULL;
@@ -980,6 +985,7 @@ 
       // as it would bypass dvdnav_free_cache_block
       if (dvdnav_get_next_cache_block(nav, &cache_ptr, &event, &len) != DVDNAV_STATUS_OK) {
         //  Skins.Message(mtError, tr("Error.DVD$Error fetching data from DVD!"));
+            message = 2;
           esyslog("ERROR: %s\n",tr("Error.DVD$Error fetching data from DVD!"));
           active = running = false;
           nav=NULL;
@@ -1852,6 +1858,7 @@ 
 	        dvdnav_stop(nav);
         else
             running = false;
+
         Cancel(3);
         running = false;
         active = false;
@@ -1949,6 +1956,7 @@ 
        }
 }
 
+
 void cDvdPlayer::Backward(void)
 {
      if(!DVDActiveAndRunning()) return;
@@ -1998,6 +2006,15 @@ 
        }
 }
 
+
+void cDvdPlayer::PrintMsg(int message)
+{
+	switch (message) {
+	    case 1 : Skins.Message(mtError, tr("Error.DVD$Error opening DVD!")); return; 
+		 case 2 : Skins.Message(mtError, tr("Error.DVD$Error fetching data from DVD!")); return;
+	}
+}
+		
 inline int cDvdPlayer::GetProgramNumber() const
 {
 	return lastCellEventInfo.pgN;
Dateien /home/markus/svn-vdr/vdr-plugins/src/dvd-cvs/.player-dvd.c.swp und dvd-cvs/.player-dvd.c.swp sind verschieden.
diff -Nu /home/markus/svn-vdr/vdr-plugins/src/dvd-cvs/player-dvd.h dvd-cvs/player-dvd.h
--- /home/markus/svn-vdr/vdr-plugins/src/dvd-cvs/player-dvd.h	2005-09-26 18:44:47.000000000 +0200
+++ dvd-cvs/player-dvd.h	2005-09-28 19:23:03.000000000 +0200
@@ -71,7 +71,8 @@ 
     int hsize;
     int vsize;
     int vaspect;
-
+    int message; 
+	  
     cIframeAssembler *iframeAssembler;
     int IframeCnt;
     uint8_t * event_buf;
@@ -241,6 +242,7 @@ 
     char * GetTitleInfoString( void ) const ;
     char * GetAspectString( void ) const ;
 
+	 void PrintMsg(int message); 
     int GetProgramNumber() const ;
     int GetCellNumber() const ;
 
diff -Nu /home/markus/svn-vdr/vdr-plugins/src/dvd-cvs/setup-dvd.c dvd-cvs/setup-dvd.c
--- /home/markus/svn-vdr/vdr-plugins/src/dvd-cvs/setup-dvd.c	2005-09-26 18:44:47.000000000 +0200
+++ dvd-cvs/setup-dvd.c	2005-09-28 20:04:56.000000000 +0200
@@ -58,7 +58,7 @@ 
 cMenuSetupDVD::cMenuSetupDVD(void)
 {
     data = DVDSetup;
-    SetSection(tr("Plugin.DVD$DVD"));
+    SetSection(tr("Plugin.DVD$DVD/HD-DVD"));
     Add(new cMenuEditStraItem(tr("Setup.DVD$Preferred menu language"),     &data.MenuLanguage,  I18nNumLanguages, I18nLanguages()));
     Add(new cMenuEditStraItem(tr("Setup.DVD$Preferred audio language"),    &data.AudioLanguage, I18nNumLanguages, I18nLanguages()));
     Add(new cMenuEditStraItem(tr("Setup.DVD$Preferred subtitle language"), &data.SpuLanguage,   I18nNumLanguages, I18nLanguages()));
Gemeinsame Unterverzeichnisse: /home/markus/svn-vdr/vdr-plugins/src/dvd-cvs/.svn und dvd-cvs/.svn.