clipgrab: supply yt-dlp dependency from nixpkgs

This commit is contained in:
Berk Ozkutuk 2022-02-19 00:43:13 +03:00
parent 3ddc71525f
commit f33b64c265
2 changed files with 96 additions and 1 deletions

View File

@ -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 '

View File

@ -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;
}