From 89f023360caa933e4f9f2f05666147f7db3b06bf Mon Sep 17 00:00:00 2001 From: Felix Uhl Date: Tue, 7 Nov 2023 11:59:38 +0100 Subject: [PATCH] persepolis: fix build and startup on darwin Notifications will be broken until https://github.com/NixOS/nixpkgs/issues/105156 is resolved. ZHF: #265948 --- .../0001-Allow-building-on-darwin.patch | 45 +++++++++++++++++++ .../0002-Fix-startup-crash-on-darwin.patch | 41 +++++++++++++++++ ...003-Search-PATH-for-aria2c-on-darwin.patch | 29 ++++++++++++ pkgs/tools/networking/persepolis/default.nix | 14 ++++-- 4 files changed, 126 insertions(+), 3 deletions(-) create mode 100644 pkgs/tools/networking/persepolis/0001-Allow-building-on-darwin.patch create mode 100644 pkgs/tools/networking/persepolis/0002-Fix-startup-crash-on-darwin.patch create mode 100644 pkgs/tools/networking/persepolis/0003-Search-PATH-for-aria2c-on-darwin.patch diff --git a/pkgs/tools/networking/persepolis/0001-Allow-building-on-darwin.patch b/pkgs/tools/networking/persepolis/0001-Allow-building-on-darwin.patch new file mode 100644 index 000000000000..4ddd18bbd468 --- /dev/null +++ b/pkgs/tools/networking/persepolis/0001-Allow-building-on-darwin.patch @@ -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) + diff --git a/pkgs/tools/networking/persepolis/0002-Fix-startup-crash-on-darwin.patch b/pkgs/tools/networking/persepolis/0002-Fix-startup-crash-on-darwin.patch new file mode 100644 index 000000000000..50252c8cd72a --- /dev/null +++ b/pkgs/tools/networking/persepolis/0002-Fix-startup-crash-on-darwin.patch @@ -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) + diff --git a/pkgs/tools/networking/persepolis/0003-Search-PATH-for-aria2c-on-darwin.patch b/pkgs/tools/networking/persepolis/0003-Search-PATH-for-aria2c-on-darwin.patch new file mode 100644 index 000000000000..ab3c957ef4b1 --- /dev/null +++ b/pkgs/tools/networking/persepolis/0003-Search-PATH-for-aria2c-on-darwin.patch @@ -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) + diff --git a/pkgs/tools/networking/persepolis/default.nix b/pkgs/tools/networking/persepolis/default.nix index a4ba2b4f04aa..149bc44cbb53 100644 --- a/pkgs/tools/networking/persepolis/default.nix +++ b/pkgs/tools/networking/persepolis/default.nix @@ -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; # Upstream’s build scripts check and fail on Darwin. license = licenses.gpl3; maintainers = [ ]; };