diff --git a/0001-Handle-encoding-exception-when-loading-bookmark-pick.patch b/0001-Handle-encoding-exception-when-loading-bookmark-pick.patch new file mode 100644 index 0000000..b4801e9 --- /dev/null +++ b/0001-Handle-encoding-exception-when-loading-bookmark-pick.patch @@ -0,0 +1,36 @@ +From 42db2659bf09478e063cce3444d1cfa392f9b7aa Mon Sep 17 00:00:00 2001 +From: mcomix3 Fedora maintainer +Date: Mon, 4 Nov 2019 14:07:16 +0900 +Subject: [PATCH] Handle encoding exception when loading bookmark pickle from + mcomix + +When loading bookmark pickle from mcomix, some exception may happen: + + File "mcomix/mcomix/bookmark_backend.py", line 148, in load_bookmarks + packs = pickle.load(fd) +UnicodeDecodeError: 'ascii' codec can't decode byte 0xe1 in position 1: ordinal not in range(128) + +This patch avoids this. +--- + mcomix/mcomix/bookmark_backend.py | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/mcomix/mcomix/bookmark_backend.py b/mcomix/mcomix/bookmark_backend.py +index 0492600..d1080be 100644 +--- a/mcomix/mcomix/bookmark_backend.py ++++ b/mcomix/mcomix/bookmark_backend.py +@@ -142,7 +142,10 @@ class __BookmarksStore(object): + mtime = os.stat(path).st_mtime + with open(path, 'rb') as fd: + version = pickle.load(fd) +- packs = pickle.load(fd) ++ try: ++ packs = pickle.load(fd) ++ except UnicodeDecodeError: ++ packs = pickle.load(fd, encoding='latin1') + + for pack in packs: + # Handle old bookmarks without date_added attribute +-- +2.23.0 + diff --git a/0002-Change-domain-name-for-gettext.patch b/0002-Change-domain-name-for-gettext.patch new file mode 100644 index 0000000..b0f1c54 --- /dev/null +++ b/0002-Change-domain-name-for-gettext.patch @@ -0,0 +1,39 @@ +From 28d7db0bbced2ceae6bf79bdd95e6d94b11e2006 Mon Sep 17 00:00:00 2001 +From: mcomix3 Fedora maintainer +Date: Mon, 4 Nov 2019 14:42:04 +0900 +Subject: [PATCH] Change domain name for gettext + +Change domain name for gettext for now. +--- + mcomix/mcomix/constants.py | 1 + + mcomix/mcomix/i18n.py | 2 +- + 2 files changed, 2 insertions(+), 1 deletion(-) + +diff --git a/mcomix/mcomix/constants.py b/mcomix/mcomix/constants.py +index a71588e..19c3eff 100644 +--- a/mcomix/mcomix/constants.py ++++ b/mcomix/mcomix/constants.py +@@ -8,6 +8,7 @@ import operator + from mcomix import tools + + APPNAME = 'MComix' ++APPNAME_DOMAIN = 'mcomix3' + VERSION = '1.3.0.dev0' + + REQUIRED_PIL_VERSION = '5.1.0' +diff --git a/mcomix/mcomix/i18n.py b/mcomix/mcomix/i18n.py +index 5d067db..96a209c 100644 +--- a/mcomix/mcomix/i18n.py ++++ b/mcomix/mcomix/i18n.py +@@ -103,7 +103,7 @@ def install_gettext(): + # Make sure GTK uses the correct language. + os.environ['LANGUAGE'] = lang + +- domain = constants.APPNAME.lower() ++ domain = constants.APPNAME_DOMAIN.lower() + + for lang in lang_identifiers: + resource_path = tools.pkg_path('messages', lang, +-- +2.23.0 + diff --git a/0003-Search-gettext-files-in-system-wide-directory.patch b/0003-Search-gettext-files-in-system-wide-directory.patch new file mode 100644 index 0000000..e80eccd --- /dev/null +++ b/0003-Search-gettext-files-in-system-wide-directory.patch @@ -0,0 +1,39 @@ +From 4d3f0e0c27ab7fd933f3654c349e7b5e00028659 Mon Sep 17 00:00:00 2001 +From: mcomix3 Fedora maintainer +Date: Mon, 4 Nov 2019 15:14:45 +0900 +Subject: [PATCH] Search gettext files in system-wide directory + +--- + mcomix/mcomix/i18n.py | 9 +++++++++ + 1 file changed, 9 insertions(+) + +diff --git a/mcomix/mcomix/i18n.py b/mcomix/mcomix/i18n.py +index 96a209c..54377d1 100644 +--- a/mcomix/mcomix/i18n.py ++++ b/mcomix/mcomix/i18n.py +@@ -5,6 +5,7 @@ import locale + import os + import sys + import threading ++import sysconfig + + try: + import chardet +@@ -114,6 +115,14 @@ def install_gettext(): + break + except IOError: + log.error('locale file: %s not found.', resource_path) ++ ++ resource_path2 = os.path.join(sysconfig.get_config_var('datarootdir'), 'locale', lang, 'LC_MESSAGES', '%s.mo' % domain) ++ try: ++ with open(resource_path2, mode = 'rb') as fp: ++ translation = gettext.GNUTranslations(fp) ++ break ++ except IOError: ++ log.error('locale file: %s not found.', resource_path2) + else: + translation = gettext.NullTranslations() + +-- +2.23.0 + diff --git a/0004-Lower-pickle-protocol-version-for-mcomix-compatibili.patch b/0004-Lower-pickle-protocol-version-for-mcomix-compatibili.patch new file mode 100644 index 0000000..46fdfb4 --- /dev/null +++ b/0004-Lower-pickle-protocol-version-for-mcomix-compatibili.patch @@ -0,0 +1,29 @@ +From 8df033bd3e2c267a21c9a646c811470d5880f1a3 Mon Sep 17 00:00:00 2001 +From: mcomix3 Fedora maintainer +Date: Mon, 4 Nov 2019 16:10:09 +0900 +Subject: [PATCH] Lower pickle protocol version for mcomix compatibility + +--- + mcomix/mcomix/bookmark_backend.py | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/mcomix/mcomix/bookmark_backend.py b/mcomix/mcomix/bookmark_backend.py +index d1080be..1ae4d2a 100644 +--- a/mcomix/mcomix/bookmark_backend.py ++++ b/mcomix/mcomix/bookmark_backend.py +@@ -187,10 +187,10 @@ class __BookmarksStore(object): + self._bookmarks = list(set(self._bookmarks + new_bookmarks)) + + with open(constants.BOOKMARK_PICKLE_PATH, 'wb') as fd: +- pickle.dump(constants.VERSION, fd, pickle.HIGHEST_PROTOCOL) ++ pickle.dump(constants.VERSION, fd, 2) + + packs = [bookmark.pack() for bookmark in self._bookmarks] +- pickle.dump(packs, fd, pickle.HIGHEST_PROTOCOL) ++ pickle.dump(packs, fd, 2) + + self._bookmarks_mtime = time.time() + +-- +2.23.0 + diff --git a/create-mcomix3-git-bare-tarball.sh b/create-mcomix3-git-bare-tarball.sh new file mode 100644 index 0000000..e00c04c --- /dev/null +++ b/create-mcomix3-git-bare-tarball.sh @@ -0,0 +1,32 @@ +#!/bin/bash + +set -x +set -e + +REPONAME=mcomix3 +GITURL=https://github.com/multiSnow/${REPONAME}.git + +DATE=$(date '+%Y%m%d') +TIME=$(date '+%H%M') + +TARNAME=${REPONAME}-${DATE}T${TIME}.tar.bz2 + +PWDDIR=$(pwd) +TMPDIR=$(mktemp -d /var/tmp/${REPONAME}-XXXXXX) +pushd $TMPDIR + +git clone --mirror $GITURL + +mkdir TMP +pushd TMP +git clone ../${REPONAME}.git +cd ${REPONAME} +git log 2>&1 | head -n 3 +echo +popd + +tar cjf ${TARNAME} ${REPONAME}.git/ + +cp -p ${TARNAME} $PWDDIR +popd +rm -rf $TMPDIR diff --git a/mcomix3.desktop b/mcomix3.desktop new file mode 100644 index 0000000..9b99ace --- /dev/null +++ b/mcomix3.desktop @@ -0,0 +1,23 @@ +[Desktop Entry] +Version=1.0 +Name=MComix3 +Name[it]=MComix3 +GenericName=Comic Book Viewer +GenericName[sv]=Serieboksläsare +GenericName[fr]=Visionneur de bandes dessinées +GenericName[de]=Comic-Betrachter +Comment=A viewer for comic book archives +Comment[it]=Un visualizzatore di fumetti +Comment[es]=Un visor de comics +Comment[sv]=En serieboksläsare +Comment[fr]=Visionneur d'images spécialisé dans la lecture des bandes dessinées +Comment[pl]=Przeglądarka komiksów +Comment[de]=Betrachter für Comic-Archive +Exec=mcomix3 %f +Icon=mcomix3 +Terminal=false +Type=Application +StartupNotify=true +Categories=Graphics;Viewer; +MimeType=application/x-cb7;application/x-ext-cb7;application/x-cbr;application/x-ext-cbr;application/x-cbt;application/x-ext-cbt;application/x-cbz;application/x-ext-cbz;application/pdf;application/x-pdf;application/x-ext-pdf;image/bmp;image/x-MS-bmp;image/x-bmp;image/gif;image/jpeg;image/png;image/tiff;image/x-portable-bitmap;image/x-portable-graymap;image/x-portable-pixmap; +X-Desktop-File-Install-Version=0.24 diff --git a/mcomix3.spec b/mcomix3.spec new file mode 100644 index 0000000..cb9912b --- /dev/null +++ b/mcomix3.spec @@ -0,0 +1,152 @@ +%global gitcommit 0405a2304c123da5d60c0df7751fbbc9ca8cb169 +%global gitdate 20190616 +%global shortcommit %(c=%{gitcommit}; echo ${c:0:7}) + +%global tarballdate 20190915 +%global tarballtime 1557 + +Name: mcomix3 +# For now, choose version 0 +Version: 0 +Release: 0.1.D%{gitdate}git%{shortcommit}%{?dist} +Summary: User-friendly, customizable image viewer for comic books +# GPL version info is from mcomix/mcomixstarter.py +License: GPLv2+ +URL: https://github.com/multiSnow/mcomix3 +# Use git repository directly - with it when modifying source +# we can do it *in git repository* and then we can directly submit +# patch to the upstream by pull request +Source0: %{name}-%{tarballdate}T%{tarballtime}.tar.bz2 +# Source0 is created by Source1 +Source1: create-mcomix3-git-bare-tarball.sh +# Some additional files +Source2: mcomix3starter.sh +# Borrow some desktop related files +Source10: mcomix3.desktop +# Patches +Patch1: 0001-Handle-encoding-exception-when-loading-bookmark-pick.patch +Patch2: 0002-Change-domain-name-for-gettext.patch +Patch3: 0003-Search-gettext-files-in-system-wide-directory.patch +Patch4: 0004-Lower-pickle-protocol-version-for-mcomix-compatibili.patch + +BuildRequires: python3-devel +#BuildRequires: %%{_bindir}/appstream-util +BuildRequires: %{_bindir}/desktop-file-install +BuildRequires: gettext +BuildRequires: git +Requires: gtk3 +Requires: python3-gobject +Requires: python3-pillow +BuildArch: noarch +%if 0%{?fedora} >= 32 +# No provides +Obsoletes: mcomix < 1.2.2 +Obsoletes: comix < 4.0.5 +%endif + + +%description +MComix3 is a user-friendly, customizable image viewer. +It is forked from MComix gtk3 branch and switch to python3. + +%prep +%setup -q -c -T -a 0 + +# Setup source git repository +git clone ./%{name}.git +cd %{name} + +git config user.name "%{name} Fedora maintainer" +git config user.email "%{name}-owner@fedoraproject.org" +git checkout -b %{version}-%{release}-fedora %{gitcommit} + +# Apply patches +cat %{PATCH1} | git am +cat %{PATCH2} | git am +cat %{PATCH3} | git am +# For now apply this +cat %{PATCH4} | git am + +%build +pushd %{name} +rm -rf localroot +mkdir localroot + +python3 installer.py --srcdir=mcomix --target=$(pwd)/localroot/ +popd + +%install +pushd %{name} +cp -p [A-Z]* .. +popd + +# Install manually... +SITETOPDIR=%{python3_sitelib}/%{name} +DSTTOPDIR=%{buildroot}${SITETOPDIR} +mkdir -p ${DSTTOPDIR} +mkdir -p ${DSTTOPDIR}/mcomix3 +mkdir -p %{buildroot}%{_datadir}/locale +mkdir -p %{buildroot}%{_datadir}/icons/hicolor/ + +pushd %{name} +rm -rf localroot.2 +cp -a localroot localroot.2 + +pushd localroot.2/mcomix + +# Wrapper script +install -cpm 0755 %{SOURCE2} ${DSTTOPDIR} +# locale files +find mcomix/messages/* -type f | while read f +do + dir=$(dirname $f) + mv $f $dir/%{name}.mo +done +mv mcomix/messages/* %{buildroot}%{_datadir}/locale/ +# duplicate icon +for dir in mcomix/images/*x*/ +do + basedir=$(basename $dir) + mkdir -p %{buildroot}%{_datadir}/icons/hicolor/$basedir/apps + cp -p $dir/*png %{buildroot}%{_datadir}/icons/hicolor/$basedir/apps/%{name}.png +done +# data files +mv mcomix/ ${DSTTOPDIR}/mcomix3/ +# Not needed +rm -f comicthumb.py +mv mcomixstarter.py ${DSTTOPDIR}/ + +# Ensure that all files are installed +popd +rmdir localroot.2/mcomix +rmdir localroot.2 + +popd +# Wrapper symlink +mkdir %{buildroot}/%{_bindir} +ln -sf ${SITETOPDIR}/mcomix3starter.sh %{buildroot}%{_bindir}/mcomix3 +# Desktop file +mkdir %{buildroot}%{_datadir}/applications +desktop-file-install \ + --remove-category Application \ + --dir %{buildroot}%{_datadir}/applications/ \ + %{SOURCE10} + +%find_lang %{name} + +%files -f %{name}.lang +%license COPYING +%doc ChangeLog +%doc README* +%doc TODO + +%{_bindir}/%{name} +%{python3_sitelib}/%{name}/ +# Do not own %%{_datadir}/icons/hicolor explicitly +%{_datadir}/icons/hicolor/*/apps/%{name}.png +%{_datadir}/applications/%{name}.desktop +# TODO: appdata file, not availale yet (should item) + +%changelog +* Mon Nov 04 2019 Mamoru TASAKA 0-0.1.D20190616git0405a23 +- Initial packaging diff --git a/mcomix3starter.sh b/mcomix3starter.sh new file mode 100644 index 0000000..05adab6 --- /dev/null +++ b/mcomix3starter.sh @@ -0,0 +1,8 @@ +#!/usr/bin/bash + +SCRIPTPATH="${BASH_SOURCE[0]}" +ABSPATH="$(readlink $SCRIPTPATH)" +SCRIPTDIR=$(cd $(dirname $ABSPATH); pwd) +export PYTHONPATH=${SCRIPTDIR}/mcomix3 + +exec $SCRIPTDIR/mcomixstarter.py