Skip to content

Commit

Permalink
Fix: many linux issues
Browse files Browse the repository at this point in the history
  • Loading branch information
DUB1401 committed Feb 4, 2024
1 parent a941e27 commit 8e48420
Showing 12 changed files with 54 additions and 65 deletions.
4 changes: 2 additions & 2 deletions Build/build.bat
Original file line number Diff line number Diff line change
@@ -2,7 +2,7 @@
cd ..\

:: Сборка приложения.
pyinstaller --distpath %~dp0\Release --i icon.ico --version-file Build\metadata.txt --onefile "PornHub Downloader.py"
pyinstaller --distpath %~dp0\Release --i icon.ico --version-file Build\metadata.txt --onefile main.py

:: Копирование в директорию сборки необходимых компонентов приложения.
xcopy /Y /I yt-dlp Build\Release\yt-dlp
@@ -11,4 +11,4 @@ xcopy /Y Settings.json Build\Release
xcopy /Y icon.ico Build\Release

:: Удаление файлов сборки приложения.
rmdir /q /s "Build\PornHub Downloader"
rmdir /q /s Build\main
10 changes: 5 additions & 5 deletions Build/metadata.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
VSVersionInfo(
ffi=FixedFileInfo(
filevers=(1, 3, 1, 0),
prodvers=(1, 3, 1, 0),
filevers=(1, 3, 2, 0),
prodvers=(1, 3, 2, 0),
mask=0x3f,
flags=0x0,
OS=0x40004,
@@ -16,11 +16,11 @@ VSVersionInfo(
u'040904B0',
[StringStruct(u'CompanyName', u'DUB1401'),
StringStruct(u'FileDescription', u'PornHub video downloader.'),
StringStruct(u'FileVersion', u'1.3.1'),
StringStruct(u'LegalCopyright', u'Copyright © DUB1401. 2023.'),
StringStruct(u'FileVersion', u'1.3.2'),
StringStruct(u'LegalCopyright', u'Copyright © DUB1401. 2023-2024.'),
StringStruct(u'OriginalFilename', u'PornHub Downloader.exe'),
StringStruct(u'ProductName', u'PornHub Downloader'),
StringStruct(u'ProductVersion', u'1.3.1')])
StringStruct(u'ProductVersion', u'1.3.2')])
])
]
)
2 changes: 1 addition & 1 deletion LICENSE
Original file line number Diff line number Diff line change
@@ -186,7 +186,7 @@
same "printed page" as the copyright notice for easier
identification within third-party archives.

Copyright © 2023. DUB1401.
Copyright © 2023-2024. DUB1401.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
17 changes: 9 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
@@ -3,23 +3,24 @@

## Порядок установки и использования | Исполняемый файл Windows
1. Загрузить последний релиз исполняемой версии. Распаковать.
2. Запустить _PornHub Downloader.exe_. Вставить в поле ввода список ссылок на видео и нажать кнопку загрузки.
2. Запустить _main.exe_. Вставить в поле ввода список ссылок на видео и нажать кнопку загрузки.
3. Дождаться скачивания видео в папку _Downloads_, в директории скрипта.

## Порядок установки и использования | Скрипт Python
1. Загрузить последний релиз скрипта. Распаковать.
2. Установить Python версии не старше 3.10. Рекомендуется добавить в PATH.
3. В среду исполнения установить следующие пакеты: [pyinstaller](https://github.com/pyinstaller/pyinstaller), [requests](https://github.com/psf/requests), [pyqt6](https://www.riverbankcomputing.com/software/pyqt/).
3. В среду исполнения установить следующие пакеты: [pyinstaller](https://github.com/pyinstaller/pyinstaller), [pyperclip](https://github.com/asweigart/pyperclip), [requests](https://github.com/psf/requests), [pyqt6](https://www.riverbankcomputing.com/software/pyqt/).
```
pip install pyinstaller
pip install pyperclip
pip install requests
pip install pyqt6
```
Либо установить сразу все пакеты при помощи следующей команды, выполненной из директории скрипта.
```
pip install -r requirements.txt
```
4. Запустить _PornHub Downloader.py_. Вставить в поле ввода список ссылок на видео и нажать кнопку загрузки.
4. Запустить _main.py_. Вставить в поле ввода список ссылок на видео и нажать кнопку загрузки.
5. Дождаться скачивания видео в папку _Downloads_, в директории скрипта.

# Скриншот
@@ -37,11 +38,11 @@ pip install -r requirements.txt
Доступные локализации: `EN`, `DE`, `PL`, `RU`, `UK`.

## Версии поставляемых бинарных файлов
| Файл | Версия | Источник |
|---------|-------------------------------|--------------------------------------------------------------------|
| yt-dlp | _2023.07.06_ | [ссылка](https://github.com/yt-dlp/yt-dlp/releases/tag/2023.07.06) |
| ffmpeg | _6.0 2023-03-04 (essentials)_ | [ссылка](https://github.com/GyanD/codexffmpeg/releases/tag/6.0) |
| ffprobe | _6.0 2023-03-04 (essentials)_ | [ссылка](https://github.com/GyanD/codexffmpeg/releases/tag/6.0) |
| Файл | Версия | Источник |
|-------------|-------------------------------|--------------------------------------------------------------------|
| yt-dlp | _2023.12.30_ | [ссылка](https://github.com/yt-dlp/yt-dlp/releases/tag/2023.12.30) |
| ffmpeg.exe | _6.0 2023-03-04 (essentials)_ | [ссылка](https://github.com/GyanD/codexffmpeg/releases/tag/6.0) |
| ffprobe.exe | _6.0 2023-03-04 (essentials)_ | [ссылка](https://github.com/GyanD/codexffmpeg/releases/tag/6.0) |

# Благодарность
* [@yt-dlp](https://github.com/yt-dlp) – библиотека загрузки потокового видео.
3 changes: 1 addition & 2 deletions Settings.json
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
{
"sort-by-models": false,
"save-directory": "",
"theme": 2,
"cuality": 2,
"debug": false,
"debug": true,
"advertisement": "https://xn--80aaalhzvfe9b4a.xn--80asehdb/"
}
6 changes: 3 additions & 3 deletions Source/Locale.py
Original file line number Diff line number Diff line change
@@ -62,7 +62,7 @@
"Разрешение загружаемого видео.",
"Тема",
"Стиль окна программы.",
"Сортировать по моделям"
"По моделям"
],
"UK": [
"Реклама",
@@ -77,7 +77,7 @@
"Роздільна здатність завантажуваного відео.",
"Тема",
"Стиль вікна програми.",
"Сортувати за моделями"
"За моделями"
]
}

@@ -89,7 +89,7 @@
# Если устройство работает под управлением ОС семейства Linux.
if sys.platform in ["linux", "linux2"]:
# Получение тега текущего языка.
LanguageTag = locale.getlocale().split('_')[0].upper()
LanguageTag = locale.getlocale()[0].split('_')[0].upper()

# Если устройство работает под управлением ОС семейства Windows.
elif sys.platform == "win32":
27 changes: 3 additions & 24 deletions Source/MainWindow.py
Original file line number Diff line number Diff line change
@@ -51,11 +51,6 @@ class MainWindow(QMainWindow):
# >>>>> ОБРАБОТЧИКИ СИГНАЛОВ <<<<< #
#==========================================================================================#

# Изменяет тему оформления.
def __ChangeTheme(self):
# Установка системного стиля и цветовой схемы.
self.__Application.setStyle(QStyleFactory.keys()[self.__Settings["theme"]])

# Очищает все данные процесса.
def __Clear(self):
self.Input.clear()
@@ -157,7 +152,7 @@ def __SaveSetting(self, Key: str, Value):
Bufer = self.__Settings.copy()

# Удаление пути к стандартной папке загрузок.
if Bufer["save-directory"] == os.getcwd() + "\\Downloads":
if Bufer["save-directory"] == os.getcwd() + "/Downloads":
Bufer["save-directory"] = ""

# Сохранение настройки.
@@ -241,9 +236,9 @@ def __CreateBasicUI(self):
# Создание объекта GUI: ссылка на GitHub.
self.Link = QLabel(self)
self.Link.linkActivated.connect(self.__OpenGitHub)
self.Link.move(1030, 690)
self.Link.setText("<a href=\"https://github.com/DUB1401/PornHub-Downloader\">GitHub</a>")
self.Link.adjustSize()
self.Link.move(1080 - self.Link.size().width() - 10, 690)

# Создание объекта GUI: поле псевдоконсольного вывода.
self.Output = QTextEdit(self)
@@ -297,20 +292,6 @@ def __CreateSettingsGroupUI(self):
CualitySelecter.resize(180, 40)
CualitySelecter.setToolTip(CURRENT_LOCALE[9])

# Создание объекта GUI: заголовок выбора темы.
ThemeTitle = QLabel(self)
ThemeTitle.setText(f"{CURRENT_LOCALE[10]}:")
ThemeTitle.adjustSize()

# Создание объекта GUI: селектор темы.
ThemeSelecter = QComboBox(self)
ThemeSelecter.addItems(QStyleFactory.keys())
ThemeSelecter.setCurrentIndex(self.__Settings["theme"])
ThemeSelecter.currentIndexChanged.connect(lambda: self.__SaveSetting("theme", ThemeSelecter.currentIndex()))
ThemeSelecter.currentIndexChanged.connect(self.__ChangeTheme)
ThemeSelecter.resize(180, 20)
ThemeSelecter.setToolTip(CURRENT_LOCALE[11])

# Создание объекта GUI: флаговая кнопка включения сортировки по моделям.
SortByModel = QCheckBox(self)
SortByModel.clicked.connect(lambda: self.__SaveSetting("sort-by-models", SortByModel.isChecked()))
@@ -322,8 +303,6 @@ def __CreateSettingsGroupUI(self):
#---> Добавление объектов GUI в слой.
#==========================================================================================#
SettingsLayout.addWidget(SortByModel)
SettingsLayout.addWidget(ThemeTitle)
SettingsLayout.addWidget(ThemeSelecter)
SettingsLayout.addWidget(CualityTitle)
SettingsLayout.addWidget(CualitySelecter)
SettingsLayout.addStretch()
@@ -340,7 +319,7 @@ def __EndDownloading(self, ExitCode: int):
self.Print("<b style=\"color: green;\">Done!</b> (" + self.__FormatExecutionTime(round(float(time.time() - self.__StartTime), 2)) + ")", True)

else:
self.Print("<b style=\"color: red;\">Error!</b> See CMD output for more information.", True)
self.Print("<b style=\"color: red;\">Error!</b> See CLI output for more information.", True)

# Удаление первого в очереди URL.
self.Input.setText('\n'.join(self.Input.toPlainText().split('\n')[1:]))
36 changes: 24 additions & 12 deletions Source/yt_dlp.py
Original file line number Diff line number Diff line change
@@ -45,25 +45,37 @@ def __init__(self, SaveDirectory: str, Link: str, SortByUploader: bool, Cuality:

# Возвращает словарь описания предварительного процессирования yt-dlp.
def dump(self) -> dict:
# Получение дампа через вывод yt-dlp.
self.__Dump = json.loads(subprocess.getoutput(f"{self.__CurrentDirectory}\\yt-dlp\\yt-dlp --dump-json {self.__Link}"))
# Дампирование видео.
Result = subprocess.getoutput(f"{self.__CurrentDirectory}/yt-dlp/yt-dlp --dump-json {self.__Link}")

# Если нет ошибки дампирования.
if Result.startswith("ERROR") == False:
print(Result)
# Получение дампа через вывод yt-dlp.
self.__Dump = json.loads(Result)

return self.__Dump

# Запускает выполнение команды.
def run(self):
# Дампирование видео.
self.dump()
# Получение имени файла и расширения.
Filename = self.__Dump["filename"]
# Получение имени загрузившего для сортировки.
Uploader = "\\" + self.__Dump["uploader"]
Result = self.dump()
# Код выполнения.
ExitCode = 1

# Если дампирование успешно.
if Result != None:
# Получение имени файла и расширения.
Filename = self.__Dump["filename"]
# Получение имени загрузившего для сортировки.
Uploader = "/" + self.__Dump["uploader"]

# Если сортировка отключена, обнулить загрузившего.
if self.__SortByUploader == False:
Uploader = ""
# Если сортировка отключена, обнулить загрузившего.
if self.__SortByUploader == False:
Uploader = ""

# Выполнение команды.
ExitCode = os.system(f"{self.__CurrentDirectory}\\yt-dlp\\yt-dlp -f \"bv*[height<={self.__Cuality}]+ba/b[height<={self.__Cuality}]\" -o \"{self.__SaveDirectory}{Uploader}\\{Filename}\" {self.__Link}")
# Выполнение команды.
ExitCode = os.system(f"{self.__CurrentDirectory}/yt-dlp/yt-dlp -f \"bv*[height<={self.__Cuality}]+ba/b[height<={self.__Cuality}]\" -o \"{self.__SaveDirectory}{Uploader}/{Filename}\" {self.__Link}")

# Генерация сигнала с завершающим кодом приложения.
self.finished.emit(ExitCode)
13 changes: 5 additions & 8 deletions PornHub Downloader.py → main.py
Original file line number Diff line number Diff line change
@@ -14,8 +14,7 @@
# Минимальная требуемая версия Python.
PythonMinimalVersion = (3, 10)
# Проверка соответствия.
if sys.version_info < PythonMinimalVersion:
sys.exit("Python %s.%s or later is required.\n" % PythonMinimalVersion)
if sys.version_info < PythonMinimalVersion: sys.exit("Python %s.%s or later is required.\n" % PythonMinimalVersion)

#==========================================================================================#
# >>>>> ЧТЕНИЕ НАСТРОЕК <<<<< #
@@ -30,8 +29,8 @@
}
# Словарь важных значений.
ComData = {
"version": "1.3.1",
"copyright": "Copyright © 2023. DUB1401."
"version": "1.3.2",
"copyright": "Copyright © 2023-2024. DUB1401."
}

# Проверка доступности файла настроек.
@@ -45,7 +44,7 @@
# Если директория для загрузки не указана.
if Settings["save-directory"] == "":
# Формирование пути.
Settings["save-directory"] = os.getcwd() + "\\Downloads"
Settings["save-directory"] = os.getcwd() + "/Downloads"

# Если стандартной папки не существует, то создать.
if os.path.exists("Downloads") == False:
@@ -56,7 +55,7 @@
raise Exception("Settings.json file not found.")

# Если не включён режим отладки, то свернуть консоль при запуске.
if Settings["debug"] == False:
if Settings["debug"] == False and sys.platform == "win32":
ctypes.windll.user32.ShowWindow(ctypes.windll.kernel32.GetConsoleWindow(), 6)

#==========================================================================================#
@@ -65,8 +64,6 @@

# Создание экземпляра приложения.
Application = QApplication(sys.argv)
# Установка системного стиля и цветовой схемы.
Application.setStyle(QStyleFactory.keys()[Settings["theme"]])
# Установка икноки.
Application.setWindowIcon(QtGui.QIcon("icon.ico"))
# Открытие главного окна.
1 change: 1 addition & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
pyinstaller
pyperclip
requests
pyqt6
Binary file added yt-dlp/yt-dlp
Binary file not shown.
Binary file removed yt-dlp/yt-dlp.exe
Binary file not shown.

0 comments on commit 8e48420

Please sign in to comment.