From f33b64c265c1140b746ae6f9bb39f7479b2448ce Mon Sep 17 00:00:00 2001 From: Berk Ozkutuk Date: Sat, 19 Feb 2022 00:43:13 +0300 Subject: [PATCH] clipgrab: supply yt-dlp dependency from nixpkgs --- pkgs/applications/video/clipgrab/default.nix | 11 ++- .../video/clipgrab/yt-dlp-path.patch | 86 +++++++++++++++++++ 2 files changed, 96 insertions(+), 1 deletion(-) create mode 100644 pkgs/applications/video/clipgrab/yt-dlp-path.patch diff --git a/pkgs/applications/video/clipgrab/default.nix b/pkgs/applications/video/clipgrab/default.nix index 287557d6f53e..2bd30c9e5291 100644 --- a/pkgs/applications/video/clipgrab/default.nix +++ b/pkgs/applications/video/clipgrab/default.nix @@ -1,6 +1,7 @@ { lib, fetchurl, makeDesktopItem, ffmpeg , qmake, qttools, mkDerivation , qtbase, qtdeclarative, qtlocation, qtquickcontrols2, qtwebchannel, qtwebengine +, yt-dlp }: mkDerivation rec { @@ -16,7 +17,15 @@ mkDerivation rec { buildInputs = [ ffmpeg qtbase qtdeclarative qtlocation qtquickcontrols2 qtwebchannel qtwebengine ]; nativeBuildInputs = [ qmake qttools ]; - postPatch = lib.optionalString (ffmpeg != null) '' + patches = [ + ./yt-dlp-path.patch + ]; + + postPatch = '' + substituteInPlace youtube_dl.cpp \ + --replace 'QString YoutubeDl::path = QString();' \ + 'QString YoutubeDl::path = QString("${yt-dlp}/bin/yt-dlp");' + '' + lib.optionalString (ffmpeg != null) '' substituteInPlace converter_ffmpeg.cpp \ --replace '"ffmpeg"' '"${ffmpeg.bin}/bin/ffmpeg"' \ --replace '"ffmpeg ' '"${ffmpeg.bin}/bin/ffmpeg ' diff --git a/pkgs/applications/video/clipgrab/yt-dlp-path.patch b/pkgs/applications/video/clipgrab/yt-dlp-path.patch new file mode 100644 index 000000000000..5a9a4b6dcc48 --- /dev/null +++ b/pkgs/applications/video/clipgrab/yt-dlp-path.patch @@ -0,0 +1,86 @@ +--- a/main.cpp ++++ b/main.cpp +@@ -91,14 +91,5 @@ int main(int argc, char *argv[]) + w.show(); + } + +- QTimer::singleShot(0, [=] { +- cg->getUpdateInfo(); +- QObject::connect(cg, &ClipGrab::updateInfoProcessed, [cg] { +- bool force = QSettings().value("forceYoutubeDlDownload", false).toBool(); +- if (force) QSettings().setValue("forceYoutubeDlDownload", false); +- cg->downloadYoutubeDl(force); +- }); +- }); +- + return app.exec(); + } +--- a/youtube_dl.cpp ++++ b/youtube_dl.cpp +@@ -8,52 +8,16 @@ YoutubeDl::YoutubeDl() + QString YoutubeDl::path = QString(); + + QString YoutubeDl::find(bool force) { +- if (!force && !path.isEmpty()) return path; +- +- // Prefer downloaded youtube-dl +- QString localPath = QStandardPaths::locate(QStandardPaths::AppDataLocation, "yt-dlp"); +- QProcess* process = instance(localPath, QStringList() << "--version"); +- process->start(); +- process->waitForFinished(); +- process->deleteLater(); +- if (process->state() != QProcess::NotRunning) process->kill(); +- if (process->exitCode() == QProcess::ExitStatus::NormalExit) { +- path = localPath; +- return path; +- } +- +- // Try system-wide youtube-dlp installation +- QString globalPath = QStandardPaths::findExecutable("yt-dlp"); +- process = instance(globalPath, QStringList() << "--version"); +- process->start(); +- process->waitForFinished(); +- process->deleteLater(); +- if (process->state() != QProcess::NotRunning) process->kill(); +- if (process->exitCode() == QProcess::ExitStatus::NormalExit) { +- path = globalPath; +- return path; +- } +- +- return ""; ++ // We supply yt-dlp from nixpkgs, so the downloading ++ // machinery is not needed anymore. ++ (void)force; ++ return path; + } + + QProcess* YoutubeDl::instance(QStringList arguments) { +- return instance(find(), arguments); +-} +- +-QProcess* YoutubeDl::instance(QString path, QStringList arguments) { + QProcess *process = new QProcess(); + +- QString execPath = QCoreApplication::applicationDirPath(); +- QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); +- env.insert("PATH", execPath + ":" + env.value("PATH")); +- process->setEnvironment(env.toStringList()); +- +- #if defined Q_OS_WIN +- process->setProgram(execPath + "/python/python.exe"); +- #else +- process->setProgram(QStandardPaths::findExecutable("python3")); +- #endif ++ process->setProgram(path); + + QSettings settings; + QStringList proxyArguments; +@@ -81,7 +45,7 @@ QProcess* YoutubeDl::instance(QString path, QStringList arguments) { + networkArguments << "--force-ipv4"; + } + +- process->setArguments(QStringList() << path << arguments << proxyArguments << networkArguments); ++ process->setArguments(QStringList() << arguments << proxyArguments << networkArguments); + return process; + } +