diff options
-rw-r--r-- | Makefile | 5 | ||||
-rw-r--r-- | media_player.c | 11 | ||||
-rw-r--r-- | media_player.h | 4 | ||||
-rw-r--r-- | menu.c | 53 | ||||
-rw-r--r-- | tools/metainfo_menu.c | 94 | ||||
-rw-r--r-- | tools/metainfo_menu.h | 38 |
6 files changed, 149 insertions, 56 deletions
@@ -4,7 +4,7 @@ # See the main source file 'xineliboutput.c' for copyright information and # how to reach the author. # -# $Id: Makefile,v 1.37 2008-04-23 07:11:20 phintuka Exp $ +# $Id: Makefile,v 1.38 2008-05-07 13:27:15 phintuka Exp $ # # The official name of this plugin. @@ -317,7 +317,8 @@ ifeq ($(XINELIBOUTPUT_VDRPLUGIN), 1) frontend_local.o frontend_svr.o \ tools/cxsocket.o tools/udp_pes_scheduler.o \ tools/backgroundwriter.o tools/playlist.o tools/http.o \ - tools/vdrdiscovery.o tools/time_pts.o tools.o + tools/vdrdiscovery.o tools/time_pts.o tools.o \ + tools/metainfo_menu.o OBJS_MPG = black_720x576.o nosignal_720x576.o vdrlogo_720x576.o else OBJS = diff --git a/media_player.c b/media_player.c index 0392714c..ebaced6d 100644 --- a/media_player.c +++ b/media_player.c @@ -4,7 +4,7 @@ * See the main source file 'xineliboutput.c' for copyright information and * how to reach the author. * - * $Id: media_player.c,v 1.51 2008-04-03 15:32:07 phelin Exp $ + * $Id: media_player.c,v 1.52 2008-05-07 13:27:15 phintuka Exp $ * */ @@ -19,6 +19,7 @@ #include "media_player.h" #include "device.h" #include "tools/playlist.h" +#include "tools/metainfo_menu.h" #include "menu.h" #include "logdefs.h" @@ -576,8 +577,7 @@ void cXinelibPlayerControl::Hide() cOsdObject *cXinelibPlayerControl::GetInfo(void) { - /* ??? */ - return NULL; + return new cMetainfoMenu(m_Player->Playlist().Current()->Filename); } eOSState cXinelibPlayerControl::ProcessKey(eKeys Key) @@ -1192,6 +1192,11 @@ void cXinelibImagesControl::Delete(void) } } +cOsdObject *cXinelibImagesControl::GetInfo(void) +{ + return new cMetainfoMenu(m_Files[m_Index]); +} + void cXinelibImagesControl::Seek(int Rel) { if(m_Index == m_Count-1 && Rel>0) diff --git a/media_player.h b/media_player.h index 1ae6ed83..8b55fceb 100644 --- a/media_player.h +++ b/media_player.h @@ -4,7 +4,7 @@ * See the main source file 'xineliboutput.c' for copyright information and * how to reach the author. * - * $Id: media_player.h,v 1.15 2008-01-10 23:41:24 phelin Exp $ + * $Id: media_player.h,v 1.16 2008-05-07 13:27:15 phintuka Exp $ * */ @@ -117,6 +117,8 @@ class cXinelibImagesControl : public cControl virtual void Hide(void); virtual eOSState ProcessKey(eKeys Key); + virtual cOsdObject *GetInfo(void); + static void Close(void); static bool IsOpen(void) { return m_Player != NULL; } }; @@ -4,16 +4,12 @@ * See the main source file 'xineliboutput.c' for copyright information and * how to reach the author. * - * $Id: menu.c,v 1.56 2008-04-29 12:38:17 phintuka Exp $ + * $Id: menu.c,v 1.57 2008-05-07 13:27:15 phintuka Exp $ * */ #include <dirent.h> -#ifdef HAVE_EXTRACTOR_H -# include <extractor.h> -#endif - #include <vdr/config.h> #include <vdr/interface.h> #include <vdr/menu.h> @@ -24,6 +20,7 @@ #include "config.h" #include "menu.h" #include "menuitems.h" +#include "tools/metainfo_menu.h" #include "device.h" #include "media_player.h" #include "equalizer.h" @@ -333,53 +330,9 @@ eOSState cMenuBrowseFiles::Open(bool ForceOpen, bool Parent, bool Queue) eOSState cMenuBrowseFiles::Info(void) { if(GetCurrent() && !GetCurrent()->IsDir()) { -#ifdef HAVE_EXTRACTOR_H cString filename = cString::sprintf("%s/%s", m_CurrentDir, GetCurrent()->Name()); - EXTRACTOR_ExtractorList * plugins; - EXTRACTOR_KeywordList * md_list; - plugins = EXTRACTOR_loadDefaultLibraries(); - md_list = EXTRACTOR_getKeywords(plugins, *filename); - const char *key; - char * buf; - char metadata[4096]; - strcpy(metadata, ""); - while(md_list) { - if((key=EXTRACTOR_getKeywordTypeAsString(md_list->keywordType))) { - buf = strdup(md_list->keyword); - sprintf(metadata, "%s%s: %s\n", metadata, key, buf); - free(buf); - } - md_list=md_list->next; - } - EXTRACTOR_freeKeywords(md_list); - EXTRACTOR_removeAll(plugins); /* unload plugins */ - return AddSubMenu(new cMenuText(GetCurrent()->Name(), metadata)); -#else - cString cmd = cString::sprintf("'%s/%s'", m_CurrentDir, GetCurrent()->Name()); - if(xc.IsPlaylistFile(GetCurrent()->Name())) - cmd = cString::sprintf("file -b %s; cat %s", *cmd, *cmd); - else if(xc.IsAudioFile(GetCurrent()->Name())) - cmd = cString::sprintf("mp3info -x %s ; file -b %s", *cmd, *cmd); - else if(xc.IsVideoFile(GetCurrent()->Name())) - cmd = cString::sprintf("file -b %s; midentify %s", *cmd, *cmd); - else if(xc.IsImageFile(GetCurrent()->Name())) - cmd = cString::sprintf("file -b %s; identify %s", *cmd, *cmd); - else - cmd = cString::sprintf("file -b %s", *cmd); - - cPipe p; - if(p.Open(*cmd, "r")) { - char buf[4096]; - int n = fread(buf, 1, sizeof(buf)-1, p); - if(n>0) { - buf[n] = 0; - strreplace(buf, ',', '\n'); - return AddSubMenu(new cMenuText(GetCurrent()->Name(), buf)); - } - } -#endif + return AddSubMenu(new cMetainfoMenu(filename)); } - return osContinue; } diff --git a/tools/metainfo_menu.c b/tools/metainfo_menu.c new file mode 100644 index 00000000..56a3f388 --- /dev/null +++ b/tools/metainfo_menu.c @@ -0,0 +1,94 @@ +/* + * metainfo_menu.c: Media file info menu + * + * See the main source file 'xineliboutput.c' for copyright information and + * how to reach the author. + * + * $Id: metainfo_menu.c,v 1.1 2008-05-07 13:27:15 phintuka Exp $ + * + */ + +#ifdef HAVE_EXTRACTOR_H +# include <extractor.h> +#endif + +#include <vdr/status.h> + +#include "../i18n.h" +#include "../config.h" + +#include "metainfo_menu.h" + +// +// cMetainfoMenu +// + +cMetainfoMenu::cMetainfoMenu(cString Filename) : + cOsdMenu(Filename), + m_Filename(Filename) +{ + const char *Title = strrchr(Filename, '/'); + if(Title && *(Title+1)) + SetTitle(Title+1); +} + +cMetainfoMenu::~cMetainfoMenu() +{ +} + +void cMetainfoMenu::Display(void) +{ + cOsdMenu::Display(); + char metadata[4096]; +#ifdef HAVE_EXTRACTOR_H + EXTRACTOR_ExtractorList * plugins; + EXTRACTOR_KeywordList * md_list; + plugins = EXTRACTOR_loadDefaultLibraries(); + md_list = EXTRACTOR_getKeywords(plugins, m_Filename); + md_list = EXTRACTOR_removeEmptyKeywords (md_list); + md_list = EXTRACTOR_removeDuplicateKeywords(md_list, 0); + + const char *key; + char * buf; + strcpy(metadata, ""); + while(md_list) { + if((key=EXTRACTOR_getKeywordTypeAsString(md_list->keywordType))) { + buf = strdup(md_list->keyword); + sprintf(metadata, "%s%s: %s\n", metadata, key, buf); + free(buf); + } + md_list=md_list->next; + } + EXTRACTOR_freeKeywords(md_list); + EXTRACTOR_removeAll(plugins); /* unload plugins */ +#else + cString cmd = ""; + if(xc.IsPlaylistFile(m_Filename)) + cmd = cString::sprintf("file -b '%s'; cat '%s'", *m_Filename, *m_Filename); + else if(xc.IsAudioFile(m_Filename)) + cmd = cString::sprintf("mp3info -x '%s' ; file -b '%s'", *m_Filename, *m_Filename); + else if(xc.IsVideoFile(m_Filename)) + cmd = cString::sprintf("file -b '%s'; midentify '%s'", *m_Filename, *m_Filename); + else if(xc.IsImageFile(m_Filename)) + cmd = cString::sprintf("file -b '%s'; identify '%s'", *m_Filename, *m_Filename); + else + cmd = cString::sprintf("file -b '%s'", *m_Filename); + + cPipe p; + if(p.Open(*cmd, "r")) { + int n = fread(metadata, 1, sizeof(metadata)-1, p); + if(n>0) { + metadata[n] = 0; + strreplace(metadata, ',', '\n'); + } + } +#endif + DisplayMenu()->SetText(metadata, false); + cStatus::MsgOsdTextItem(cString::sprintf("%s\n%s", tr("Metainfo"), *m_Filename)); +} + +eOSState cMetainfoMenu::ProcessKey(eKeys Key) +{ + eOSState state = cOsdMenu::ProcessKey(Key); + return state; +} diff --git a/tools/metainfo_menu.h b/tools/metainfo_menu.h new file mode 100644 index 00000000..45d60f22 --- /dev/null +++ b/tools/metainfo_menu.h @@ -0,0 +1,38 @@ +/* + * metainfo_menu.h: Media file info menu + * + * See the main source file 'xineliboutput.c' for copyright information and + * how to reach the author. + * + * $Id: metainfo_menu.h,v 1.1 2008-05-07 13:27:15 phintuka Exp $ + * + */ + +#ifndef __XINELIB_INFO_MENU_H_ +#define __XINELIB_INFO_MENU_H_ + +// +// cMetainfoMenu +// + +#include <vdr/osdbase.h> + +class cMetainfoMenu : public cOsdMenu +{ + protected: + + cString m_Filename; + + public: + + cMetainfoMenu(cString Filename); + virtual ~cMetainfoMenu(); + + virtual void Display(void); + + // cOsdMenu + virtual eOSState ProcessKey(eKeys Key); + +}; + +#endif // __XINELIB_INFO_MENU_H_ |