diff --git a/Project/GNU/PKGBUILD b/Project/GNU/PKGBUILD index 7f8339afa..9132488a9 100644 --- a/Project/GNU/PKGBUILD +++ b/Project/GNU/PKGBUILD @@ -2,7 +2,7 @@ # Maintainer: MediaArea.net SARL # Contributor: hydro -pkgname=('mediainfo' 'mediainfo-gui') +pkgname=('mediainfo' 'mediainfo-gui' 'mediainfo-nautilus-plugin' 'mediainfo-nemo-plugin') pkgver=19.09 pkgrel=1 pkgdesc="supplies technical and tag information about a video or audio file" @@ -11,7 +11,6 @@ license=('GPL') source=(${pkgname}_${pkgver}.orig.tar.xz) md5sums=('00000000000000000000000000000000') arch=('i686' 'x86_64') - depends=('libzen>=0.4.37' 'libmediainfo>=19.09' 'wxgtk' 'libsm' 'desktop-file-utils') prepare() { @@ -48,3 +47,28 @@ package_mediainfo-gui() { make DESTDIR="${pkgdir}" install } +package_mediainfo-nautilus-plugin() { + pkgdesc="${pkgdesc} (Nautilus plugin)" + depends=('python-mediainfo' 'python-nautilus') + + install -m 0755 -d ${pkgdir}/usr/share/nautilus-python/extensions/mediainfo/ui/ + install -m 0755 -d ${pkgdir}/usr/share/nautilus-python/extensions/mediainfo/locale/ + install -m 0644 "${srcdir}"/MediaInfo/Source/Resource/Plugin/Language/*.csv ${pkgdir}/usr/share/nautilus-python/extensions/mediainfo/locale/ + install -m 0644 "${srcdir}"/MediaInfo/Source/Plugins/FMS/ui.glade ${pkgdir}/usr/share/nautilus-python/extensions/mediainfo/ui/ + install -m 0644 "${srcdir}"/MediaInfo/Source/Plugins/FMS/__init__.py ${pkgdir}/usr/share/nautilus-python/extensions/mediainfo/ + install -m 0644 "${srcdir}"/MediaInfo/Source/Plugins/FMS/tab.py ${pkgdir}/usr/share/nautilus-python/extensions/mediainfo/ + install -m 0644 "${srcdir}"/MediaInfo/Source/Plugins/FMS/nautilus-mediainfo.py ${pkgdir}/usr/share/nautilus-python/extensions/ +} + +package_mediainfo-nemo-plugin() { + pkgdesc="${pkgdesc} (Nemo plugin)" + depends=('python-mediainfo' 'nemo-python') + + install -m 0755 -d ${pkgdir}/usr/share/nemo-python/extensions/mediainfo/ui/ + install -m 0755 -d ${pkgdir}/usr/share/nemo-python/extensions/mediainfo/locale/ + install -m 0644 "${srcdir}"/MediaInfo/Source/Resource/Plugin/Language/*.csv ${pkgdir}/usr/share/nemo-python/extensions/mediainfo/locale/ + install -m 0644 "${srcdir}"/MediaInfo/Source/Plugins/FMS/ui.glade ${pkgdir}/usr/share/nemo-python/extensions/mediainfo/ui/ + install -m 0644 "${srcdir}"/MediaInfo/Source/Plugins/FMS/__init__.py ${pkgdir}/usr/share/nemo-python/extensions/mediainfo/ + install -m 0644 "${srcdir}"/MediaInfo/Source/Plugins/FMS/tab.py ${pkgdir}/usr/share/nemo-python/extensions/mediainfo/ + install -m 0644 "${srcdir}"/MediaInfo/Source/Plugins/FMS/nemo-mediainfo.py ${pkgdir}/usr/share/nemo-python/extensions/ +} diff --git a/Project/GNU/mediainfo.spec b/Project/GNU/mediainfo.spec index 316aca0b9..92d4873eb 100644 --- a/Project/GNU/mediainfo.spec +++ b/Project/GNU/mediainfo.spec @@ -191,6 +191,54 @@ This package includes the graphical user interface. %{gui_description} %endif +%if ! 0%{?rhel} && ! 0%{?sles_version} && ! 0%{?sle_version} +%global fms_description MediaInfo is a convenient unified display of the most relevant technical\ +and tag data for video and audio files.\ +\ +What information can I get from MediaInfo?\ +* General: title, author, director, album, track number, date, duration...\ +* Video: codec, aspect, fps, bitrate...\ +* Audio: codec, sample rate, channels, language, bitrate...\ +* Text: language of subtitle\ +* Chapters: number of chapters, list of chapters\ +\ +DivX, XviD, H263, H.263, H264, x264, ASP, AVC, iTunes, MPEG-1,\ +MPEG1, MPEG-2, MPEG2, MPEG-4, MPEG4, MP4, M4A, M4V, QuickTime,\ +RealVideo, RealAudio, RA, RM, MSMPEG4v1, MSMPEG4v2, MSMPEG4v3,\ +VOB, DVD, WMA, VMW, ASF, 3GP, 3GPP, 3GP2\ +\ +What format (container) does MediaInfo support?\ +* Video: MKV, OGM, AVI, DivX, WMV, QuickTime, Real, MPEG-1,\ + MPEG-2, MPEG-4, DVD (VOB) (Codecs: DivX, XviD, MSMPEG4, ASP,\ + H.264, AVC...)\ +* Audio: OGG, MP3, WAV, RA, AC3, DTS, AAC, M4A, AU, AIFF\ +* Subtitles: SRT, SSA, ASS, SAMI\ +\ +This package includes the plugin for nautilus-based files managers. + +%package nautilus-plugin +Summary: Supplies technical and tag information about a video or audio file (Nautilus plugin) +Group: Applications/Multimedia +Requires: %{libzen_name}%{?_isa} >= %{libzen_version} +Requires: %{libmediainfo_name}%{?_isa} >= %{libmediainfo_version} +Requires: nautilus-python +Requires: python3-mediainfo + +%description nautilus-plugin +%{fms_description} + +%package nemo-plugin +Summary: Supplies technical and tag information about a video or audio file (Nemo plugin) +Group: Applications/Multimedia +Requires: %{libzen_name}%{?_isa} >= %{libzen_version} +Requires: %{libmediainfo_name}%{?_isa} >= %{libmediainfo_version} +Requires: python3-nemo +Requires: python3-mediainfo + +%description nemo-plugin +%{fms_description} +%endif + %prep %setup -q -n MediaInfo sed -i 's/.$//' *.txt *.html Release/*.txt @@ -239,6 +287,24 @@ pushd Project/GNU/GUI make install DESTDIR=%{buildroot} popd +%if ! 0%{?rhel} && ! 0%{?sles_version} && ! 0%{?sle_version} +install -m 0755 -d %{buildroot}%{_datadir}/nautilus-python/extensions/mediainfo/ui/ +install -m 0755 -d %{buildroot}%{_datadir}/nautilus-python/extensions/mediainfo/locale/ +install -m 0644 Source/Resource/Plugin/Language/*.csv %{buildroot}%{_datadir}/nautilus-python/extensions/mediainfo/locale/ +install -m 0644 Source/Plugins/FMS/ui.glade %{buildroot}%{_datadir}/nautilus-python/extensions/mediainfo/ui/ +install -m 0644 Source/Plugins/FMS/__init__.py %{buildroot}%{_datadir}/nautilus-python/extensions/mediainfo/ +install -m 0644 Source/Plugins/FMS/tab.py %{buildroot}%{_datadir}/nautilus-python/extensions/mediainfo/ +install -m 0644 Source/Plugins/FMS/nautilus-mediainfo.py %{buildroot}%{_datadir}/nautilus-python/extensions/ + +install -m 0755 -d %{buildroot}%{_datadir}/nemo-python/extensions/mediainfo/ui/ +install -m 0755 -d %{buildroot}%{_datadir}/nemo-python/extensions/mediainfo/locale/ +install -m 0644 Source/Resource/Plugin/Language/*.csv %{buildroot}%{_datadir}/nemo-python/extensions/mediainfo/locale/ +install -m 0644 Source/Plugins/FMS/ui.glade %{buildroot}%{_datadir}/nemo-python/extensions/mediainfo/ui/ +install -m 0644 Source/Plugins/FMS/__init__.py %{buildroot}%{_datadir}/nemo-python/extensions/mediainfo/ +install -m 0644 Source/Plugins/FMS/tab.py %{buildroot}%{_datadir}/nemo-python/extensions/mediainfo/ +install -m 0644 Source/Plugins/FMS/nemo-mediainfo.py %{buildroot}%{_datadir}/nemo-python/extensions/ +%endif + %if %{undefined fedora_version} || 0%{?fedora_version} < 26 rm -fr %{buildroot}%{_datadir}/metainfo install -dm 755 %{buildroot}%{_datadir}/appdata/ @@ -318,6 +384,46 @@ install -m 644 Project/GNU/GUI/mediainfo-gui.metainfo.xml %{buildroot}%{_datadir %{gui_files} %endif +%if ! 0%{?rhel} && ! 0%{?sles_version} && ! 0%{?sle_version} +%define nautilus_files %defattr(-,root,root,-)\ +%if 0%{?fedora_version} || 0%{?centos_version} >= 700 || 0%{?rhel_version} >= 700\ +%license License.html\ +%else\ +%doc License.html\ +%endif\ +%dir %{_datadir}/nautilus-python\ +%dir %{_datadir}/nautilus-python/extensions\ +%{_datadir}/nautilus-python/extensions/nautilus-mediainfo.py\ +%dir %{_datadir}/nautilus-python/extensions/mediainfo\ +%{_datadir}/nautilus-python/extensions/mediainfo/*.py\ +%dir %{_datadir}/nautilus-python/extensions/mediainfo/ui\ +%{_datadir}/nautilus-python/extensions/mediainfo/ui/*.glade\ +%dir %{_datadir}/nautilus-python/extensions/mediainfo/locale\ +%{_datadir}/nautilus-python/extensions/mediainfo/locale/*.csv + +%files nautilus-plugin +%{nautilus_files} + +%define nemo_files %defattr(-,root,root,-)\ +%if 0%{?fedora_version} || 0%{?centos_version} >= 700 || 0%{?rhel_version} >= 700\ +%license License.html\ +%else\ +%doc License.html\ +%endif\ +%dir %{_datadir}/nemo-python\ +%dir %{_datadir}/nemo-python/extensions\ +%{_datadir}/nemo-python/extensions/nemo-mediainfo.py\ +%dir %{_datadir}/nemo-python/extensions/mediainfo\ +%{_datadir}/nemo-python/extensions/mediainfo/*.py\ +%dir %{_datadir}/nemo-python/extensions/mediainfo/ui\ +%{_datadir}/nemo-python/extensions/mediainfo/ui/*.glade\ +%dir %{_datadir}/nemo-python/extensions/mediainfo/locale\ +%{_datadir}/nemo-python/extensions/mediainfo/locale/*.csv + +%files nemo-plugin +%{nemo_files} +%endif + %changelog * Thu Jan 01 2009 MediaArea.net SARL - %{mediainfo_version} - See History.txt for more info and real dates diff --git a/Project/OBS/deb9.debian/control b/Project/OBS/deb9.debian/control index 70367a742..ddf10c7d4 100644 --- a/Project/OBS/deb9.debian/control +++ b/Project/OBS/deb9.debian/control @@ -117,3 +117,47 @@ Description: graphical utility for reading information from audio/video files - Subtitles: SRT, SSA, ASS, SAMI... . This package contains the debugging symbols of the graphical user interface. + +Package: mediainfo-nautilus-plugin +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends}, python-nautilus, python-mediainfodll, libmediainfo0v5 (>= 19.09), libzen0v5 (>= 0.4.37) +Description: Nautilus plugin for reading information from audio/video files using MediaInfo + MediaInfo is a utility used for retrieving technical information and other + metadata about audio or video files. + . + A non-exhaustive list of the information MediaInfo can retrieve from media + files include: + - General: title, author, director, album, track number, date, duration... + - Video: codec, aspect, fps, bitrate... + - Audio: codec, sample rate, channels, language, bitrate... + - Text: language of subtitle + - Chapters: number of chapters, list of chapters + . + MediaInfo supports the following formats: + - Video: MKV, OGM, AVI, DivX, WMV, QuickTime, Real, MPEG-1, MPEG-2, + MPEG-4, DVD (VOB)... + - Video Codecs: DivX, XviD, MSMPEG4, ASP, H.264, AVC...) + - Audio: OGG, MP3, WAV, RA, AC3, DTS, AAC, M4A, AU, AIFF... + - Subtitles: SRT, SSA, ASS, SAMI... + +Package: mediainfo-nemo-plugin +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends}, python-nemo, python3-mediainfodll, libmediainfo0v5 (>= 19.09), libzen0v5 (>= 0.4.37) +Description: Nemo plugin for reading information from audio/video files using MediaInfo + MediaInfo is a utility used for retrieving technical information and other + metadata about audio or video files. + . + A non-exhaustive list of the information MediaInfo can retrieve from media + files include: + - General: title, author, director, album, track number, date, duration... + - Video: codec, aspect, fps, bitrate... + - Audio: codec, sample rate, channels, language, bitrate... + - Text: language of subtitle + - Chapters: number of chapters, list of chapters + . + MediaInfo supports the following formats: + - Video: MKV, OGM, AVI, DivX, WMV, QuickTime, Real, MPEG-1, MPEG-2, + MPEG-4, DVD (VOB)... + - Video Codecs: DivX, XviD, MSMPEG4, ASP, H.264, AVC...) + - Audio: OGG, MP3, WAV, RA, AC3, DTS, AAC, M4A, AU, AIFF... + - Subtitles: SRT, SSA, ASS, SAMI... diff --git a/Project/OBS/deb9.debian/mediainfo-nautilus-plugin.install b/Project/OBS/deb9.debian/mediainfo-nautilus-plugin.install new file mode 100644 index 000000000..2245df80f --- /dev/null +++ b/Project/OBS/deb9.debian/mediainfo-nautilus-plugin.install @@ -0,0 +1,5 @@ +/usr/share/nautilus-python/extensions/mediainfo/ui/ui.glade +/usr/share/nautilus-python/extensions/mediainfo/locale/*.csv +/usr/share/nautilus-python/extensions/mediainfo/__init__.py +/usr/share/nautilus-python/extensions/mediainfo/tab.py +/usr/share/nautilus-python/extensions/nautilus-mediainfo.py diff --git a/Project/OBS/deb9.debian/mediainfo-nemo-plugin.install b/Project/OBS/deb9.debian/mediainfo-nemo-plugin.install new file mode 100644 index 000000000..15b6b71ae --- /dev/null +++ b/Project/OBS/deb9.debian/mediainfo-nemo-plugin.install @@ -0,0 +1,5 @@ +/usr/share/nemo-python/extensions/mediainfo/ui/ui.glade +/usr/share/nemo-python/extensions/mediainfo/locale/*.csv +/usr/share/nemo-python/extensions/mediainfo/__init__.py +/usr/share/nemo-python/extensions/mediainfo/tab.py +/usr/share/nemo-python/extensions/nemo-mediainfo.py diff --git a/Project/OBS/deb9.debian/rules b/Project/OBS/deb9.debian/rules index 5a2c211f5..8a775bb81 100755 --- a/Project/OBS/deb9.debian/rules +++ b/Project/OBS/deb9.debian/rules @@ -18,6 +18,15 @@ override_dh_auto_build: override_dh_auto_install: $(call auto_build_cmd,dh_auto_install) + for fms in nautilus nemo ; do \ + install -m 0755 -d $(CURDIR)/debian/tmp/usr/share/"$$fms"-python/extensions/mediainfo/ui/;\ + install -m 0644 Source/Plugins/FMS/ui.glade $(CURDIR)/debian/tmp/usr/share/"$$fms"-python/extensions/mediainfo/ui/ui.glade; \ + install -m 0755 -d $(CURDIR)/debian/tmp/usr/share/"$$fms"-python/extensions/mediainfo/locale/; \ + install -m 0644 Source/Resource/Plugin/Language/*.csv $(CURDIR)/debian/tmp/usr/share/"$$fms"-python/extensions/mediainfo/locale/; \ + install -m 0644 Source/Plugins/FMS/__init__.py $(CURDIR)/debian/tmp/usr/share/"$$fms"-python/extensions/mediainfo/; \ + install -m 0644 Source/Plugins/FMS/tab.py $(CURDIR)/debian/tmp/usr/share/"$$fms"-python/extensions/mediainfo/; \ + install -m 0644 Source/Plugins/FMS/"$$fms"-mediainfo.py $(CURDIR)/debian/tmp/usr/share/"$$fms"-python/extensions/; \ + done override_dh_auto_clean: $(call auto_build_cmd,dh_auto_clean) diff --git a/Project/OBS/deb9.dsc b/Project/OBS/deb9.dsc index 5680c3842..452d0472e 100644 --- a/Project/OBS/deb9.dsc +++ b/Project/OBS/deb9.dsc @@ -1,6 +1,6 @@ Format: 3.0 (quilt) Source: mediainfo -Binary: mediainfo, mediainfo-dbg, mediainfo-gui, mediainfo-gui-dbg +Binary: mediainfo, mediainfo-dbg, mediainfo-gui, mediainfo-gui-dbg, mediainfo-nautilus-plugin, mediainfo-nemo-plugin Architecture: any Version: 19.09-1deb9 Maintainer: MediaArea.net SARL @@ -12,6 +12,8 @@ Build-Depends: debhelper (>= 9), dh-autoreconf, libmediainfo-dev (>= 19.09), lib Package-List: mediainfo deb utils optional arch=any mediainfo-gui deb utils optional arch=any + mediainfo-nautilus-plugin deb utils optional arch=any + mediainfo-nemo-plugin deb utils optional arch=any Checksums-Sha1: 0000000000000000000000000000000000000000 000000 mediainfo_19.09.orig.tar.xz 0000000000000000000000000000000000000000 000000 mediainfo_19.09-1deb9.debian.tar.xz diff --git a/Source/Plugins/FMS/__init__.py b/Source/Plugins/FMS/__init__.py new file mode 100644 index 000000000..82405cdcb --- /dev/null +++ b/Source/Plugins/FMS/__init__.py @@ -0,0 +1,5 @@ +## Copyright (c) MediaArea.net SARL. All Rights Reserved. + # + # Use of this source code is governed by a BSD-style license that can + # be found in the License.html file in the root of the source tree. + ## diff --git a/Source/Plugins/FMS/nautilus-mediainfo.py b/Source/Plugins/FMS/nautilus-mediainfo.py new file mode 100644 index 000000000..928da1dd5 --- /dev/null +++ b/Source/Plugins/FMS/nautilus-mediainfo.py @@ -0,0 +1,45 @@ +## Copyright (c) MediaArea.net SARL. All Rights Reserved. + # + # Use of this source code is governed by a BSD-style license that can + # be found in the License.html file in the root of the source tree. + ## + +import locale, os, subprocess +from mediainfo.tab import * + +try: + from urllib import unquote +except ImportError: + from urllib.parse import unquote + +from gi.repository import GObject, Gtk, Nautilus + +class MediainfoPropertyPage(GObject.GObject, Nautilus.PropertyPageProvider): + def get_property_pages(self, files): + # TODO: handle multiples files + if len(files) != 1: + return + + file = files[0] + if file.get_uri_scheme() != 'file': + return + + if file.is_directory(): + return + + filename = unquote(file.get_uri()[7:]) + + try: + filename = filename.decode("utf-8") + except: + pass + + self.tab = MediaInfoTab(filename) + + if not self.tab.accepted: + return + + self.label = Gtk.Label('MediaInfo') + self.label.show() + + return Nautilus.PropertyPage(name="NautilusPython::mediainfo", label=self.label, page=self.tab.mainWindow), diff --git a/Source/Plugins/FMS/nemo-mediainfo.py b/Source/Plugins/FMS/nemo-mediainfo.py new file mode 100644 index 000000000..5f0a9c395 --- /dev/null +++ b/Source/Plugins/FMS/nemo-mediainfo.py @@ -0,0 +1,48 @@ +## Copyright (c) MediaArea.net SARL. All Rights Reserved. + # + # Use of this source code is governed by a BSD-style license that can + # be found in the License.html file in the root of the source tree. + ## + +import locale, os, subprocess +from mediainfo.tab import * + +try: + from urllib import unquote +except ImportError: + from urllib.parse import unquote + +from gi.repository import GObject, Gtk, Nemo + +class MediainfoPropertyPage(GObject.GObject, Nemo.PropertyPageProvider, Nemo.NameAndDescProvider): + def get_property_pages(self, files): + # TODO: handle multiples files + if len(files) != 1: + return + + file = files[0] + if file.get_uri_scheme() != 'file': + return + + if file.is_directory(): + return + + filename = unquote(file.get_uri()[7:]) + + try: + filename = filename.decode("utf-8") + except: + pass + + self.tab = MediaInfoTab(filename) + + if not self.tab.accepted: + return + + self.property_label = Gtk.Label('MediaInfo') + self.property_label.show() + + return Nemo.PropertyPage(name="NemoPython::mediainfo", label=self.property_label, page=self.tab.mainWindow), + + def get_name_and_desc(self): + return [("Nemo MediaInfo Tab:::Dispay technical informations about media files")] diff --git a/Source/Plugins/FMS/tab.py b/Source/Plugins/FMS/tab.py new file mode 100644 index 000000000..fe6a0fde8 --- /dev/null +++ b/Source/Plugins/FMS/tab.py @@ -0,0 +1,212 @@ +## Copyright (c) MediaArea.net SARL. All Rights Reserved. + # + # Use of this source code is governed by a BSD-style license that can + # be found in the License.html file in the root of the source tree. + ## + +import locale, os, subprocess, csv + +try: + from MediaInfoDLL import * +except ImportError: + from MediaInfoDLL3 import * + +try: + from urllib import unquote +except ImportError: + from urllib.parse import unquote + +from gi.repository import GObject, Gtk + +# generic class for all nautillus-based fms +class MediaInfoTab: + def __init__(self, filename): + self.filename = filename + self.MI = MediaInfo() + self.boxes = [] + + # set mediainfo locale if available + lang = locale.getdefaultlocale()[0] + locale_path = os.path.join(os.path.dirname(__file__), "locale") + self.locale_file = os.path.join(locale_path, lang + ".csv") + if(not os.path.isfile(self.locale_file)): + self.locale_file = os.path.join(locale_path, lang.split("_")[0] + ".csv") + if(not os.path.isfile(self.locale_file)): + self.locale_file = "" + + if len(self.locale_file) > 0: + self.MI.Option_Static("Language", "file://{}".format(self.locale_file)) + + # parse file + self.MI.Open(self.filename) + + self.MI.Option("Inform", "Text") + text = self.MI.Inform() + + self.accepted = False + + for kind in range(Stream.Video, Stream.Max): + if self.MI.Count_Get(kind) > 0: + self.accepted = True + break + + self.create_boxes() + self.MI.Close() + + # create ui + self.ui_file = os.path.join(os.path.dirname(__file__), "ui", "ui.glade") + self.builder = Gtk.Builder() + self.builder.add_from_file(self.ui_file) + + self.mainWindow = self.builder.get_object("mainWindow") + self.easyView = self.builder.get_object("easyView") + self.textView = self.builder.get_object("textView") + + # easyView + items = {} + for box in self.boxes: + if not box['kind'] in items: + new = Gtk.Box(Gtk.Orientation.HORIZONTAL) + new.set_homogeneous(True) + new.show() + items[box['kind']] = new + + self.easyView.pack_start(new, False, True, 5) + + frame = Gtk.Frame() + frame.set_label(box['kind']) + frame.set_label_align(0.02, 0.5) + frame.show() + + content = Gtk.Box(Gtk.Orientation.HORIZONTAL) + content.set_homogeneous(True) + content.show() + + for column in box['columns']: + label = Gtk.Label() + label.set_text(column) + label.set_xalign(0.0) + label.set_yalign(0.0) + label.set_line_wrap(True) + label.show() + + content.pack_start(label, True, True, 2) + + frame.add(content) + items[box['kind']].pack_start(frame, True, True, 5) + + # textView + self.textView.get_buffer().set_text(text) + + # link to MediaInfo + if any(os.access(os.path.join(path, "mediainfo-gui"), os.X_OK) for path in os.environ['PATH'].split(os.pathsep)): + button = Gtk.Button() + button.set_label("Open in MediaInfo") + button.connect("clicked", self.mediainfo_open) + button.show() + + self.mainWindow.pack_start(button, False, False, 5) + + def summary_get(self, kind, pos): + self.MI.Option("Inform", "Summary") + return self.MI.Get(kind, pos, "Inform") + + def translated_name_get (self, name): + if len(self.locale_file) > 0: + with open(self.locale_file, 'r') as locale: + data = csv.DictReader(locale,fieldnames=["name", "value"], restkey="extra", restval="", delimiter=";") + for line in data: + if line.get("name") == name: + return line.get("value", name) + + return name + + def name_get(self, kind): + if kind == Stream.General: return self.translated_name_get("General") + elif kind == Stream.Video: return self.translated_name_get("Video") + elif kind == Stream.Audio: return self.translated_name_get("Audio") + elif kind == Stream.Text: return self.translated_name_get("Text") + elif kind == Stream.Other: return self.translated_name_get("Other") + elif kind == Stream.Image: return self.translated_name_get("Image") + elif kind == Stream.Menu: return self.translated_name_get("Menu") + else: return "Unknown" + + def boxes_count_get(self, kind): + if kind == Stream.General: return 1 + elif kind == Stream.Video: return 1 + elif kind == Stream.Audio: return 2 + elif kind == Stream.Text: return 3 + elif kind == Stream.Image: return 1 + else: return 0 + + def lines_count_get(self, kind): + if kind == Stream.General: return 5 + elif kind == Stream.Video: return 2 + elif kind == Stream.Audio: return 2 + elif kind == Stream.Text: return 2 + elif kind == Stream.Image: return 2 + else: return 0 + + def create_boxes(self): + for kind in range(Stream.General, Stream.Max): + count = self.boxes_count_get(kind) + if count == 0: continue + for pos in range(0, count): + box = self.create_box(kind, pos) + if len(box) != 0: + self.boxes.append(box) + + def create_box(self, kind, pos): + content = {} + summary = self.summary_get(kind, pos) + + if(kind == Stream.General): + for index in range(Stream.Video, Stream.Max): + if self.MI.Count_Get(index) == 0: + continue + + z1 = self.MI.Get(index, 0, "StreamKind", Info.Measure) + "StreamCount" + z2 = " " + self.MI.Get(index, 0, "StreamKind", Info.Text) + " stream" + z3 = self.MI.Get(index, 0, "StreamKind", Info.Text) + "_Format_WithHint_List" + + summary += "\n" + summary += self.MI.Get(index, 0, z1) + z2 + ": " + self.MI.Get(0, 0, z3) + + content["columns"] = [summary, self.tags_get_general()] + content["kind"] = self.name_get(kind) + elif len(summary) > 0 and self.lines_count_get(kind) > 0: + content["columns"] = [summary] + content["kind"] = self.name_get(kind) + + return content + + def tags_get_general(self): + toReturn = "" + + pos = 94 # title_pos + max = self.MI.Count_Get(Stream.General, 0) + lines = 0 + while pos < max: + z1 = self.MI.GetI(Stream.General, 0, pos) + options = self.MI.GetI(Stream.General, 0, pos, Info.Options) + + if len(options) > InfoOption.ShowInInform and options[InfoOption.ShowInInform] == 'Y' and len(z1) > 0: + z2 = self.MI.GetI(Stream.General, 0, pos, Info.Name_Text) + if len(z2) == 0: + z2 = self.MI.GetI(Stream.General, 0, pos, Info.Name) + z2 += ": " + z1 + + if len(toReturn) > 0: + toReturn += "\n" + toReturn += z2 + + lines += 1 + if lines >= self.lines_count_get(Stream.General): + break + + pos += 1 + + return toReturn + + def mediainfo_open(self, widget): + subprocess.Popen(["mediainfo-gui", self.filename]) diff --git a/Source/Plugins/FMS/ui.glade b/Source/Plugins/FMS/ui.glade new file mode 100644 index 000000000..0bfbe7c9a --- /dev/null +++ b/Source/Plugins/FMS/ui.glade @@ -0,0 +1,65 @@ + + + True + False + vertical + + + True + False + center + stack1 + + + False + True + 0 + + + + + True + False + + + True + False + vertical + + + + + + page0 + Easy + + + + + True + True + + + + True + True + False + True + + + + + page1 + Text + 1 + + + + + True + True + 1 + + + +