persepolis: fix build and startup on darwin

Notifications will be broken until
https://github.com/NixOS/nixpkgs/issues/105156 is resolved.

ZHF: #265948
This commit is contained in:
Felix Uhl 2023-11-07 11:59:38 +01:00 committed by Weijia Wang
parent e5f2b7e703
commit 89f023360c
4 changed files with 126 additions and 3 deletions

View File

@ -0,0 +1,45 @@
---
setup.py | 13 +++++--------
1 file changed, 5 insertions(+), 8 deletions(-)
diff --git a/setup.py b/setup.py
index 985d28d..933f3df 100755
--- a/setup.py
+++ b/setup.py
@@ -24,13 +24,9 @@ import shutil
# finding os platform
os_type = platform.system()
-if os_type == 'Linux' or os_type == 'FreeBSD' or os_type == 'OpenBSD':
- from setuptools import setup, Command, find_packages
- setuptools_available = True
- print(os_type + " detected!")
-else:
- print('This script is only work for GNU/Linux or BSD!')
- sys.exit(1)
+from setuptools import setup, Command, find_packages
+setuptools_available = True
+print(os_type + " detected!")
# Checking dependencies!
not_installed = ''
@@ -100,6 +96,7 @@ else:
print('paplay is found!')
# sound-theme-freedesktop
+notifications_path = ''
if os_type == 'Linux':
notifications_path = '/usr/share/sounds/freedesktop/stereo/'
elif os_type == 'FreeBSD' or os_type == 'OpenBSD':
@@ -139,7 +136,7 @@ if sys.argv[1] == "test":
DESCRIPTION = 'Persepolis Download Manager'
-if os_type == 'Linux':
+if os_type in ['Linux', 'Darwin']:
DATA_FILES = [
('/usr/share/man/man1/', ['man/persepolis.1.gz']),
('/usr/share/applications/', ['xdg/com.github.persepolisdm.persepolis.desktop']),
--
2.39.3 (Apple Git-145)

View File

@ -0,0 +1,41 @@
---
persepolis/scripts/mac_notification.py | 25 +++++++++----------------
1 file changed, 9 insertions(+), 16 deletions(-)
diff --git a/persepolis/scripts/mac_notification.py b/persepolis/scripts/mac_notification.py
index 4d69929..9a9a7cf 100644
--- a/persepolis/scripts/mac_notification.py
+++ b/persepolis/scripts/mac_notification.py
@@ -15,20 +15,13 @@
# native notification on mac! needs Xcode (latest version) installed and pyobjc
# library from pip
-import Foundation
-import AppKit
-import objc
-
-NSUserNotification = objc.lookUpClass('NSUserNotification')
-NSUserNotificationCenter = objc.lookUpClass('NSUserNotificationCenter')
-
-
def notifyMac(title, subtitle, info_text, delay=0):
- notification = NSUserNotification.alloc().init()
- notification.setTitle_(title)
- notification.setSubtitle_(subtitle)
- notification.setInformativeText_(info_text)
- notification.setDeliveryDate_(Foundation.NSDate.dateWithTimeInterval_sinceDate_(
- delay, Foundation.NSDate.date()))
- NSUserNotificationCenter.defaultUserNotificationCenter(
- ).scheduleNotification_(notification)
+ print(f"""
+Warning: Persepolis was installed from nixpkgs, which currently breaks notifications
+ on macOS. Until https://github.com/NixOS/nixpkgs/issues/105156 is resolved,
+ this cannot be fixed. The notification that should've been displayed was:
+
+ title: {title}
+ subtitle: {subtitle}
+ info_text: {info_text}
+ """)
--
2.39.3 (Apple Git-145)

View File

@ -0,0 +1,29 @@
---
persepolis/scripts/download.py | 10 +---------
1 file changed, 1 insertion(+), 9 deletions(-)
diff --git a/persepolis/scripts/download.py b/persepolis/scripts/download.py
index aaabb35..69676d3 100644
--- a/persepolis/scripts/download.py
+++ b/persepolis/scripts/download.py
@@ -72,16 +72,8 @@ def startAria():
# in macintosh
elif os_type == 'Darwin':
- if aria2_path == "" or aria2_path == None or os.path.isfile(str(aria2_path)) == False:
-
- cwd = sys.argv[0]
- current_directory = os.path.dirname(cwd)
- aria2d = os.path.join(current_directory, 'aria2c')
- else:
- aria2d = aria2_path
-
- subprocess.Popen([aria2d, '--no-conf',
+ subprocess.Popen(['aria2c', '--no-conf',
'--enable-rpc', '--rpc-listen-port=' + str(port),
'--rpc-max-request-size=2M',
'--rpc-listen-all', '--quiet=true'],
--
2.39.3 (Apple Git-145)

View File

@ -1,4 +1,7 @@
{ lib, stdenv, buildPythonApplication, fetchFromGitHub
{ lib
, stdenv
, buildPythonApplication
, fetchFromGitHub
, aria
, libnotify
, pulseaudio
@ -30,6 +33,12 @@ buildPythonApplication rec {
substituteInPlace setup.py --replace "answer = input(" "answer = 'y'#"
'';
patches = lib.optionals stdenv.isDarwin [
./0001-Allow-building-on-darwin.patch
./0002-Fix-startup-crash-on-darwin.patch
./0003-Search-PATH-for-aria2c-on-darwin.patch
];
postPatch = ''
sed -i 's|/usr/share/sounds/freedesktop/stereo/|${sound-theme-freedesktop}/share/sounds/freedesktop/stereo/|' setup.py
sed -i "s|'persepolis = persepolis.__main__'|'persepolis = persepolis.scripts.persepolis:main'|" setup.py
@ -46,7 +55,7 @@ buildPythonApplication rec {
# feed args to wrapPythonApp
makeWrapperArgs = [
"--prefix PATH : ${lib.makeBinPath [aria libnotify ]}"
"--prefix PATH : ${lib.makeBinPath [ aria libnotify ]}"
"\${qtWrapperArgs[@]}"
];
@ -64,7 +73,6 @@ buildPythonApplication rec {
meta = with lib; {
description = "Persepolis Download Manager is a GUI for aria2";
homepage = "https://persepolisdm.github.io/";
broken = stdenv.isDarwin; # Upstreams build scripts check and fail on Darwin.
license = licenses.gpl3;
maintainers = [ ];
};