summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile5
-rw-r--r--media_player.c11
-rw-r--r--media_player.h4
-rw-r--r--menu.c53
-rw-r--r--tools/metainfo_menu.c94
-rw-r--r--tools/metainfo_menu.h38
6 files changed, 149 insertions, 56 deletions
diff --git a/Makefile b/Makefile
index 0be21b4a..cbeb6547 100644
--- a/Makefile
+++ b/Makefile
@@ -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; }
};
diff --git a/menu.c b/menu.c
index 0ec859ff..2395f223 100644
--- a/menu.c
+++ b/menu.c
@@ -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_