Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

persepolis: ZHF: fix build and runtime errors on darwin #266050

Merged
merged 5 commits into from
Nov 12, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions maintainers/maintainer-list.nix
Original file line number Diff line number Diff line change
Expand Up @@ -7486,6 +7486,13 @@
githubId = 1550265;
name = "Dominic Steinitz";
};
iFreilicht = {
github = "iFreilicht";
githubId = 9742635;
matrix = "@ifreilicht:matrix.org";
email = "[email protected]";
name = "Felix Uhl";
};
ifurther = {
github = "ifurther";
githubId = 55025025;
Expand Down
Original file line number Diff line number Diff line change
@@ -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)

Original file line number Diff line number Diff line change
@@ -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)

Original file line number Diff line number Diff line change
@@ -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)

Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
---
persepolis/scripts/mainwindow.py | 2 +-
persepolis/scripts/useful_tools.py | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/persepolis/scripts/mainwindow.py b/persepolis/scripts/mainwindow.py
index d21f3f4..a0e3674 100644
--- a/persepolis/scripts/mainwindow.py
+++ b/persepolis/scripts/mainwindow.py
@@ -161,7 +161,7 @@ class CheckVersionsThread(QThread):

else:
pipe = subprocess.Popen(
- [ffmpeg_path, '-version'],
+ ['ffmpeg', '-version'],
stdout=subprocess.PIPE,
stdin=subprocess.PIPE,
stderr=subprocess.PIPE,
diff --git a/persepolis/scripts/useful_tools.py b/persepolis/scripts/useful_tools.py
index b780967..31733eb 100644
--- a/persepolis/scripts/useful_tools.py
+++ b/persepolis/scripts/useful_tools.py
@@ -342,7 +342,7 @@ def muxer(parent, video_finder_dictionary):
current_directory = os.path.dirname(cwd)
ffmpeg_path = os.path.join(current_directory, 'ffmpeg')

- pipe = subprocess.Popen([ffmpeg_path, '-i', video_file_path,
+ pipe = subprocess.Popen(['ffmpeg', '-i', video_file_path,
'-i', audio_file_path,
'-c', 'copy',
'-shortest',
--
2.39.3 (Apple Git-145)

34 changes: 27 additions & 7 deletions pkgs/tools/networking/persepolis/default.nix
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
{ lib, stdenv, buildPythonApplication, fetchFromGitHub
{ lib
, stdenv
, buildPythonApplication
, fetchFromGitHub
, aria
, ffmpeg
, libnotify
, pulseaudio
, psutil
Expand All @@ -9,7 +13,7 @@
, setuptools
, sound-theme-freedesktop
, wrapQtAppsHook
, youtube-dl
, yt-dlp
}:

buildPythonApplication rec {
Expand All @@ -26,10 +30,27 @@ buildPythonApplication rec {
# see: https://github.com/persepolisdm/persepolis/blob/3.2.0/setup.py#L130
doCheck = false;

preBuild=''
preBuild=
# Make setup automatic
''
substituteInPlace setup.py --replace "answer = input(" "answer = 'y'#"
'' +
# Replace abandoned youtube-dl with maintained fork yt-dlp. Fixes https://github.com/persepolisdm/persepolis/issues/930,
# can be removed if that issue is fixed and/or https://github.com/persepolisdm/persepolis/pull/936 is merged
''
substituteInPlace setup.py ./persepolis/scripts/video_finder_addlink.py --replace \
"import youtube_dl" "import yt_dlp as youtube_dl"
'';

patches = lib.optionals stdenv.isDarwin [
# Upstream is abandonware, the last commit to master was on 2021-08-26.
# If it is forked or picked up again, consider upstreaming these patches.
./0001-Allow-building-on-darwin.patch
./0002-Fix-startup-crash-on-darwin.patch
./0003-Search-PATH-for-aria2c-on-darwin.patch
./0004-Search-PATH-for-ffmpeg-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
Expand All @@ -46,7 +67,7 @@ buildPythonApplication rec {

# feed args to wrapPythonApp
makeWrapperArgs = [
"--prefix PATH : ${lib.makeBinPath [aria libnotify ]}"
"--prefix PATH : ${lib.makeBinPath [ aria ffmpeg libnotify ]}"
"\${qtWrapperArgs[@]}"
];

Expand All @@ -58,14 +79,13 @@ buildPythonApplication rec {
setproctitle
setuptools
sound-theme-freedesktop
youtube-dl
yt-dlp
];

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 = [ ];
maintainers = with maintainers; [ iFreilicht ];
};
}