summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorphintuka <phintuka>2008-05-07 13:27:15 +0000
committerphintuka <phintuka>2008-05-07 13:27:15 +0000
commitfd541a7bae9981c0e17fbeb986e29dbcad68b45b (patch)
tree7bd015e02eae21f29442b6af2e6e8ba467759c59 /tools
parent2665d73ede11d161e222546ac97226ef6e358bc5 (diff)
downloadxineliboutput-fd541a7bae9981c0e17fbeb986e29dbcad68b45b.tar.gz
xineliboutput-fd541a7bae9981c0e17fbeb986e29dbcad68b45b.tar.bz2
Added metainfo menuxineliboutput-1_0_1
(Patch from Petri Helin)
Diffstat (limited to 'tools')
-rw-r--r--tools/metainfo_menu.c94
-rw-r--r--tools/metainfo_menu.h38
2 files changed, 132 insertions, 0 deletions
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_