├── .github └── FUNDING.yml ├── LICENSE ├── README.md ├── compile-davinci-helper.sh ├── create_archive.sh ├── davinci-helper-2.4.7.tar.gz ├── davinci-helper.spec ├── davinci-helper ├── LICENSE ├── README.md ├── add_gettext.sh ├── convert_po.sh ├── data │ ├── LICENSE │ ├── css │ │ └── style.css │ ├── desktop │ │ ├── com.davinci.helper.app.desktop │ │ ├── com.davinci.helper.app.metainfo.xml │ │ ├── com.davinci.helper.app.svg │ │ └── davinci_helper_icon.svg │ ├── icons │ │ ├── dark_mode │ │ │ ├── function_1.svg │ │ │ ├── function_2.svg │ │ │ ├── function_3.svg │ │ │ ├── function_4.svg │ │ │ ├── function_5.svg │ │ │ └── function_6.svg │ │ ├── davinci_helper_icon.svg │ │ ├── function_icons │ │ │ ├── error.svg │ │ │ ├── folder.svg │ │ │ ├── success.svg │ │ │ └── warning.svg │ │ ├── main_icons │ │ │ ├── ffmpeg_icon.jpg │ │ │ ├── function_1.svg │ │ │ ├── function_2.svg │ │ │ ├── function_3.svg │ │ │ ├── function_4.svg │ │ │ └── function_5.svg │ │ └── white_mode │ │ │ ├── function_1.svg │ │ │ ├── function_2.svg │ │ │ ├── function_3.svg │ │ │ ├── function_4.svg │ │ │ ├── function_5.svg │ │ │ └── function_6.svg │ ├── polkit │ │ ├── com.davinci.helper.app.policy │ │ └── com.davinci.helper.app.rules │ ├── settings │ │ └── davinci_helper_settings │ └── ui │ │ ├── check_update_dialog.ui │ │ ├── converter_dialog.ui │ │ ├── ffmpeg_install.ui │ │ ├── file_error_dialog.ui │ │ ├── file_size_warning_dialog.ui │ │ ├── function_1.ui │ │ ├── function_2.ui │ │ ├── function_3.ui │ │ ├── function_4.ui │ │ ├── function_5.ui │ │ ├── loading.ui │ │ ├── main.ui │ │ ├── module_install_error_dialog.ui │ │ ├── setting_management_dialog.ui │ │ ├── start_screen.ui │ │ └── welcome_dialog.ui ├── davinci_helper │ ├── __init__.py │ ├── functions │ │ ├── __init__.py │ │ ├── gui │ │ │ ├── __init__.py │ │ │ ├── about_dialog_gui.py │ │ │ ├── check_update_dialog_gui.py │ │ │ ├── converter_dialog_gui.py │ │ │ ├── ffmpeg_install_gui.py │ │ │ ├── file_error_dialog_gui.py │ │ │ ├── file_size_warning_dialog_gui.py │ │ │ ├── function_1_gui.py │ │ │ ├── function_2_gui.py │ │ │ ├── function_3_gui.py │ │ │ ├── function_4_gui.py │ │ │ ├── function_5_gui.py │ │ │ ├── loading_gui.py │ │ │ ├── module_install_error_dialog_guy.py │ │ │ ├── settings_management_dialog_gui.py │ │ │ ├── start_screen_gui.py │ │ │ └── welcome_dialog_gui.py │ │ └── logic │ │ │ ├── __init__.py │ │ │ ├── app_info.py │ │ │ ├── check_update.py │ │ │ ├── conversion_settings.py │ │ │ ├── function_1.py │ │ │ ├── function_2.py │ │ │ ├── function_3.py │ │ │ ├── function_4.py │ │ │ ├── install_ffmpeg.py │ │ │ ├── setting_management.py │ │ │ └── utility.py │ └── main.py ├── generate_pot.sh ├── locale │ ├── davinci-helper.pot │ └── it │ │ └── LC_MESSAGES │ │ ├── davinci-helper.mo │ │ └── davinci-helper.po └── pyproject.toml └── screenshot ├── 01.png ├── 01_alt.png ├── 02.png ├── 03.png ├── 04.png ├── 05.png ├── 06.png ├── git_hub_thumbnail.png └── git_hub_wiki_thumbnail.png /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: [h3rz3n] 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: # Replace with a single Ko-fi username 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry 12 | polar: # Replace with a single Polar username 13 | buy_me_a_coffee: herzen # Replace with a single Buy Me a Coffee username 14 | thanks_dev: # Replace with a single thanks.dev username 15 | custom: ['https://www.paypal.com/donate/?hosted_button_id=CPCG2RFAV82T8'] # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] 16 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | Banner 3 |

4 | 5 |

6 | 7 | 8 | Latest Release 9 | 10 | 11 | 12 | License 13 | 14 | 15 | 16 | Issues 17 | 18 | 19 | 20 | Pull Requests 21 | 22 | 23 | 24 | Stars 25 | 26 | 27 | 28 | Forks 29 | 30 | 31 | 32 | Fedora COPR enabled 33 | 34 |

35 | 36 | ## What is DaVinci Helper? 37 | 38 | **DaVinci Helper** is a companion app that simplifies the installation and use of BlackMagic DaVinci Resolve (both Free and Studio versions) on Linux. 39 | The app is written in Python and features a modern GTK4 + Adwaita interface. 40 | 41 | > **Currently, DaVinci Helper officially supports only Fedora Linux** (all spins and derivatives). 42 | > If the project receives good feedback, I plan to release a version for Debian-based systems like Ubuntu and Linux Mint. 43 | 44 |

45 | Screenshot 46 |

47 | 48 | --- 49 | 50 | ## Main Features 51 | 52 | DaVinci Helper will help you with: 53 | - Installing all the required dependencies to get DaVinci Resolve running smoothly 54 | - Launching the official DaVinci Resolve installation wizard 55 | - Applying essential post-install tweaks so that DaVinci Resolve works out of the box 56 | - Installing the necessary GPU drivers to ensure your graphics card works correctly with DaVinci Resolve 57 | - Converting videos for compatibility with DaVinci Resolve Free 58 | 59 | --- 60 | 61 | ## Supported DaVinci Resolve Versions 62 | 63 | - **DaVinci Resolve 18.x.y** 64 | - **DaVinci Resolve 19.x.y** 65 | - **DaVinci Resolve 20.x.y** 66 | - Both Free and Studio versions are supported. 67 | 68 | --- 69 | 70 | ## Supported Operating Systems 71 | 72 | Tested and working on: 73 | - Fedora Rawhide (experimental) 74 | - Fedora 42 (all spins) 75 | - Fedora 41 (all spins) 76 | - Fedora 40 (all spins) 77 | - Nobara 41 78 | - Nobara 40 79 | - Ultramarine Linux 40 (experimental) 80 | - Ultramarine Linux 41 (experimental) 81 | - Ultramarine Linux 42 (experimental) 82 | 83 | --- 84 | 85 | ## Supported GPUs 86 | 87 | - **Nvidia:** Desktop/mobile GPUs from the 1000 series to 5000 series 88 | - **AMD:** Dedicated GPUs from 5000 to 9000 series, plus iGPUs 780M, 880M, 890M 89 | - **Intel:** Intel ARC GPUs and some integrated GPUs 90 | 91 | --- 92 | 93 | ## Supported Languages 94 | 95 | - English 96 | - Italian 97 | - French (Coming soon) 98 | - Spanish (Coming soon) 99 | - German (Coming soon) 100 | - Japanese (Coming soon) 101 | 102 | --- 103 | 104 | ## How to Install DaVinci Helper on Fedora-based Distros 105 | 106 | The easiest way to install and keep DaVinci Helper updated is by enabling the project’s COPR repository and installing it via DNF. 107 | 108 | ### 1. Enable the COPR Repository 109 | 110 | Open a terminal and run: 111 | ``` 112 | sudo dnf copr enable -y herzen/davinci-helper 113 | ``` 114 | 115 | ### 2. Install DaVinci Helper 116 | 117 | Then, install the app with: 118 | ``` 119 | sudo dnf install -y davinci-helper 120 | ``` 121 | 122 | 123 | --- 124 | 125 | ## How to Use DaVinci Helper 126 | 127 | A complete, step-by-step tutorial is available [here](https://github.com/H3rz3n/How-install-DaVinci-Resolve-in-Fedora-Linux). 128 | 129 | --- 130 | 131 | ## Want to Contribute? 132 | 133 | You can help DaVinci Helper grow by: 134 | - [Testing GPU drivers](https://github.com/H3rz3n/davinci-helper/discussions) 135 | - Translating the app into your language 136 | - [Making a donation](https://www.paypal.com/donate/?hosted_button_id=CPCG2RFAV82T8) to support ongoing maintenance and development 137 | 138 | --- 139 | 140 | ## Project Roadmap 141 | 142 | All details about upcoming features and plans are available on the [Project Roadmap page](https://github.com/H3rz3n/davinci-helper/wiki/Project-roadmap). 143 | 144 | --- 145 | 146 |





147 | 148 | **Tags:** 149 | davinci resolve; davinci; resolve; linux; davinci resolve linux; davinci resolve fedora; davinci fedora; how install davinci linux; how install davinci fedora; how fix davinci linux; how fix davinci fedora; davinci fedora error; davinci linux error; fedora error; fedora davinci error; davinci fedora does not start; davinci linux gpu error; davinci fedora gpu error; davinci fedora zlib; davinci fedora mesa-libGLU; davinci fedora libraries; davinci fedora does not start; davinci fedora don't start; 150 | -------------------------------------------------------------------------------- /compile-davinci-helper.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/bash 2 | clear 3 | version="2.4.7" 4 | 5 | if [ -d "/home/$USER/build_davinci_helper" ]; then 6 | rm -rf "/home/$USER/build_davinci_helper" 7 | fi 8 | 9 | mkdir -p "/home/$USER/build_davinci_helper" 10 | cp -r * "/home/$USER/build_davinci_helper" 11 | cd "/home/$USER/build_davinci_helper" 12 | 13 | mv davinci-helper davinci-helper-${version} 14 | 15 | tar -cvzf davinci-helper-${version}.tar.gz davinci-helper-${version} 16 | 17 | mv davinci-helper-${version}.tar.gz "/home/$USER/rpmbuild/SOURCES/" 18 | rpmbuild -bb davinci-helper.spec 19 | 20 | 21 | sudo dnf remove -y davinci-helper 22 | sudo dnf install -y /home/$USER/rpmbuild/RPMS/noarch/davinci-helper-${version}-1.noarch.rpm --disablerepo=* 23 | 24 | 25 | #cp /home/$USER/rpmbuild/RPMS/noarch/davinci-helper-${version}-1.noarch.rpm /home/$USER/Pubblici/Test_Davinci_Helper 26 | #cd .. 27 | #rm -rf "/home/$USER/build_davinci_helper" 28 | #rm "/home/$USER/rpmbuild/SOURCES/davinci-helper-${version}.tar.gz" 29 | 30 | 31 | -------------------------------------------------------------------------------- /create_archive.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/bash 2 | clear 3 | version="2.4.7" 4 | 5 | mv davinci-helper davinci-helper-${version} 6 | tar -cvzf davinci-helper-${version}.tar.gz davinci-helper-${version} 7 | mv davinci-helper-${version} davinci-helper 8 | -------------------------------------------------------------------------------- /davinci-helper-2.4.7.tar.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/H3rz3n/davinci-helper/21cf55b1c91aa4042675cd9b337708b5a4477788/davinci-helper-2.4.7.tar.gz -------------------------------------------------------------------------------- /davinci-helper.spec: -------------------------------------------------------------------------------- 1 | # NAME OF THE APP EXECUTABLE 2 | Name: davinci-helper 3 | 4 | # APP VERSION 5 | Version: 2.4.7 6 | 7 | # RELEASE AND DISTRIBUTION VERSION 8 | Release: 1 9 | 10 | # SHORT SUMMARY OF WHAT THE APP DOES 11 | Summary: The best DaVinci Resolve companion app on Linux 12 | 13 | # PUBBLICATION LICENSE 14 | License: GPL-3.0 15 | 16 | # WEB ADDRESS OF THE APP GITHUB 17 | URL: https://github.com/H3rz3n/davinci-helper 18 | 19 | # COMPILATION SOURCE https://github.com/H3rz3n/davinci-helper/blob/testing/ 20 | Source0: %{name}-%{version}.tar.gz 21 | 22 | # COMPILATION ARCHITECTURE 23 | BuildArch: noarch 24 | 25 | # DEPENDENCIES REQUIRED FOR COMPILATION 26 | BuildRequires: gtk4-devel 27 | BuildRequires: libadwaita-devel 28 | BuildRequires: python3-devel 29 | BuildRequires: python3-pip 30 | BuildRequires: python3-setuptools 31 | BuildRequires: python3-wheel 32 | BuildRequires: pyproject-rpm-macros 33 | 34 | # DEPENDENCIES REQUIRED FOR EXECUTION 35 | Requires: gtk4 36 | Requires: libadwaita 37 | 38 | # DISABLING THE AUTOMATIC DEPENDENCIES GENERATOR 39 | %undefine __python_requires 40 | %{?python_disable_dependency_generator} 41 | 42 | # REMOVING SHEBANG OPTIONS 43 | %undefine _py3_shebang_s 44 | %undefine _py3_shebang_P 45 | 46 | # APP FUNCTIONS DESCRIPTION 47 | %description 48 | DaVinci Helper is the ultimate app to help you install and run DaVinci Resolve on Fedora Linux. 49 | 50 | # PREPARATION OPERATIONS FOR COMPILATION 51 | %prep 52 | %autosetup 53 | 54 | # APP COMPILATION 55 | %build 56 | %pyproject_wheel 57 | 58 | # APP INSTALLATION 59 | %install 60 | %pyproject_install 61 | 62 | install -Dm644 %{_builddir}/%{name}-%{version}/data/desktop/com.davinci.helper.app.desktop %{buildroot}%{_datadir}/applications/com.davinci.helper.app.desktop 63 | install -Dm644 %{_builddir}/%{name}-%{version}/data/desktop/com.davinci.helper.app.svg %{buildroot}%{_datadir}/icons/hicolor/scalable/apps/com.davinci.helper.app.svg 64 | install -Dm644 %{_builddir}/%{name}-%{version}/data/desktop/com.davinci.helper.app.svg %{buildroot}%{_datadir}/app-info/icons/hicolor/scalable/apps/com.davinci.helper.app.svg 65 | install -Dm644 %{_builddir}/%{name}-%{version}/data/desktop/com.davinci.helper.app.metainfo.xml %{buildroot}%{_metainfodir}/com.davinci.helper.app.metainfo.xml 66 | 67 | install -Dm644 %{_builddir}/%{name}-%{version}/data/polkit/com.davinci.helper.app.policy %{buildroot}/%{_datadir}/polkit-1/actions/com.davinci.helper.app.policy 68 | install -Dm644 %{_builddir}/%{name}-%{version}/data/polkit/com.davinci.helper.app.rules %{buildroot}/%{_datadir}/polkit-1/rules.d/com.davinci.helper.app.rules 69 | 70 | # LIST OF FILES INSTALLED BY THE APP AND THEIR LOCATIONS INSIDE THE SYSTEM 71 | %files 72 | 73 | # LIST OF FILES INCLUDED IN THE EQUIPMENT OF THE PACKAGE AND THEIR POSITION 74 | %license LICENSE 75 | %doc README.md 76 | 77 | # LIST OF THE INSTALLED DIRECTORY AND THEIR POSITION 78 | %{python3_sitelib}/davinci_helper* 79 | %{_datadir}/davinci-helper/* 80 | 81 | # LIST OF THE INSTALLED FILES AND THEIR POSITION 82 | %{_bindir}/%{name} 83 | %{_datadir}/applications/com.davinci.helper.app.desktop 84 | %{_datadir}/icons/hicolor/scalable/apps/com.davinci.helper.app.svg 85 | %{_datadir}/app-info/icons/hicolor/scalable/apps/com.davinci.helper.app.svg 86 | %{_metainfodir}/com.davinci.helper.app.metainfo.xml 87 | %{_datadir}/polkit-1/actions/com.davinci.helper.app.policy 88 | %{_datadir}/polkit-1/rules.d/com.davinci.helper.app.rules 89 | 90 | # POST INSTALLATION OPERATIONS 91 | %post 92 | update-desktop-database &> /dev/null || : 93 | sudo systemctl restart polkit 94 | 95 | # CHANGELOG OF THE VERSION 96 | %changelog 97 | 98 | * Thu May 08 2025 Lorenzo Maiuri - 2.4.7-1 99 | - Fixed a major typo in the source code. 100 | 101 | * Thu May 08 2025 Lorenzo Maiuri - 2.4.6-1 102 | - Resolved installation issues with FFMPEG in certain configurations. 103 | 104 | * Fri May 03 2025 Lorenzo Maiuri - 2.4.4-1 105 | - Resolved installation issues with AMD GPU drivers in certain configurations. 106 | 107 | * Fri May 02 2025 Lorenzo Maiuri - 2.4.3-3 108 | - Fixed AMD GPU drivers installation. 109 | 110 | * Fri Feb 07 2025 Lorenzo Maiuri - 2.4.0-1 111 | - Improved video converter performance and compatibility. 112 | 113 | * Fri Feb 07 2025 Lorenzo Maiuri - 2.3.5-1 114 | - Fixed polkit not restarting after app installation. 115 | 116 | 117 | 118 | -------------------------------------------------------------------------------- /davinci-helper/README.md: -------------------------------------------------------------------------------- 1 | ## What is DaVinci Helper : 2 | DaVinci Helper is a companion app that will simplify the installation and the use of BlackMagic DaVinci Resolve on Linux. This app is written using Python and has a GUI based on GTK4 and Adwaita. 3 | 4 | Currently **this program supports only Fedora Linux** in all his spins and derivatives. If the project will receive good feedback by the community I will make a version for Debian-based systems like Linux Mint and Ubuntu. 5 | 6 | ## What this app does : 7 | DaVinci Helper will help you with : 8 | - The installation of all the necessary dependencies to correctly install and start DaVinci Resolve 9 | - Starting the official installation wizard 10 | - Applying all the necessary post install tricks to properly start DaVinci Resolve 11 | - Installing the necessary GPU drivers to make to correctly use your graphic card with DaVinci Resolve 12 | 13 | 14 | ## What OSs are currently supported : 15 | Currently the app was tested only on these OSs : 16 | - Fedora 40 - All spins 17 | - Fedora 39 - All spins 18 | - Fedora 38 - All spins 19 | - Nobara 40 20 | - Nobara 39 21 | - Nobara 38 22 | 23 | ## What version of DaVinci are currently supported : 24 | Currently the app support only DaVinci Resolve 18.x.y. In the future will be added the support for DaVinci Resolve 19. 25 | 26 | ## What GPUs are currently supported ? 27 | In this first releases only Nvidia GPUs will be supported because we don't have any AMD or Intel GPU where to test on. If you have and AMD or Intel GPU and want to support the project please help use testing the drivers or provide as an already working solution. 28 | 29 | ## Supported localization : 30 | - English 31 | - Italian 32 | - French (Coming soon) 33 | - Spanish (Coming soon) 34 | - German (Coming soon) 35 | - Japanese (Coming soon) 36 | 37 | ## I want to contribute to the project, what can I do ? 38 | If you want to contribute to this project you can help us [testing the GPU drivers](https://github.com/H3rz3n/davinci-helper/discussions), translating the app or [making a donation](https://www.paypal.com/donate/?hosted_button_id=CPCG2RFAV82T8) to support the work needed for the maintenance and the continue update to keep up with the latest DaVinci version. 39 | -------------------------------------------------------------------------------- /davinci-helper/add_gettext.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # MERGING THE NEW TEMPLATE LINES IN THE TRANSLATION FILE 4 | msgmerge --update --no-fuzzy-matching locale/it/LC_MESSAGES/davinci-helper.po locale/davinci-helper.pot 5 | 6 | # DELETING OLD TRANSLATION LINE UNUSED 7 | msgattrib --no-obsolete locale/it/LC_MESSAGES/davinci-helper.po -o locale/it/LC_MESSAGES/davinci-helper.po -------------------------------------------------------------------------------- /davinci-helper/convert_po.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Trova e compila tutti i file .po in tutte le sottocartelle 4 | find locale -name "*.po" | while read -r po_file; do 5 | # Determina la cartella di destinazione per il file .mo 6 | mo_file="${po_file%.po}.mo" 7 | 8 | # Compila il file .po in .mo 9 | msgfmt "$po_file" -o "$mo_file" 10 | 11 | echo "Compilato: $po_file -> $mo_file" 12 | done -------------------------------------------------------------------------------- /davinci-helper/data/desktop/com.davinci.helper.app.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Type=Application 3 | Version=2.4.0 4 | Name=DaVinci Helper 5 | Exec=davinci-helper 6 | Icon=com.davinci.helper.app.svg 7 | Terminal=false 8 | Type=Application 9 | Categories=Utility;Settings; 10 | Keywords=Video;Editing;DaVinci;Resolve 11 | -------------------------------------------------------------------------------- /davinci-helper/data/desktop/com.davinci.helper.app.metainfo.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | com.davinci.helper.app 8 | 9 | 10 | 11 | 12 | DaVinci Helper 13 | 14 | 15 | 16 | 17 | The best DaVinci Resolve companion app on Linux 18 | 19 | 20 | 21 | 22 | CC0-1.0 23 | 24 | 25 | 26 | 27 | GPL-3.0 28 | 29 | 30 | 31 | 32 | com.davinci.helper.app 33 | 34 | 35 | 36 | 37 | 38 | 39 |

This app is created with the purpose of making it easier for Linux users to install and use DaVinci Resolve.

40 |

Features :

41 |

Automatic and dynamic dependecies installation

42 |

DaVinci Resolve installation wizard easy start

43 |

Application of post install patch

44 |

Easy GPU Driver installation

45 |

Easy video conversion for DaVinci Resolve Free

. 46 |

Visit the project GitHub page for more information.

47 | 48 | 49 |
50 | 51 | 52 | 53 | 54 | com.davinci.helper.app.desktop 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | https://github.com/H3rz3n/davinci-helper/blob/main/screenshot/01.png?raw=true 64 | App homepage 65 | 66 | 67 | 68 | https://github.com/H3rz3n/davinci-helper/blob/main/screenshot/02.png?raw=true 69 | Dependecies assistant 70 | 71 | 72 | 73 | https://github.com/H3rz3n/davinci-helper/blob/main/screenshot/03.png?raw=true 74 | Installer starter 75 | 76 | 77 | 78 | https://github.com/H3rz3n/davinci-helper/blob/main/screenshot/04.png?raw=true 79 | Post-installation fix applicator 80 | 81 | 82 | 83 | https://github.com/H3rz3n/davinci-helper/blob/main/screenshot/05.png?raw=true 84 | GPU driver assistant 85 | 86 | 87 | 88 | https://github.com/H3rz3n/davinci-helper/blob/main/screenshot/06.png?raw=true 89 | Video coverter 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | https://github.com/H3rz3n/davinci-helper 99 | 100 | 101 | https://github.com/H3rz3n/davinci-helper/issues 102 | 103 | 104 | https://www.paypal.com/donate/?hosted_button_id=CPCG2RFAV82T8 105 | 106 | 107 | https://github.com/H3rz3n/davinci-helper/ 108 | 109 | 110 | 111 | 112 | 113 | Lorenzo Maiuri 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | davinci-helper 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 |

This new version of the app comes with the following changes :

140 |

- Improved video converter performance and compatibility.

141 | 142 | 143 |
144 | 145 | 146 |
147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 |

This new version of the app comes with the following changes :

155 |

- Fixed polkit not restarting after app installation.

156 | 157 | 158 |
159 | 160 | 161 |
162 | 163 | 164 | 165 |
166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 600 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | keyboard 183 | pointing 184 | touch 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | Settings 195 | Utility 196 | 197 | 198 | 199 | 200 | 201 | 202 |
203 | -------------------------------------------------------------------------------- /davinci-helper/data/desktop/com.davinci.helper.app.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 15 | 16 | 17 | 18 | 19 | 20 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /davinci-helper/data/desktop/davinci_helper_icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 15 | 16 | 17 | 18 | 19 | 20 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /davinci-helper/data/icons/dark_mode/function_1.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /davinci-helper/data/icons/dark_mode/function_2.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /davinci-helper/data/icons/dark_mode/function_3.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /davinci-helper/data/icons/dark_mode/function_4.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /davinci-helper/data/icons/dark_mode/function_5.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /davinci-helper/data/icons/dark_mode/function_6.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /davinci-helper/data/icons/davinci_helper_icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 15 | 16 | 17 | 18 | 19 | 20 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /davinci-helper/data/icons/function_icons/error.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /davinci-helper/data/icons/function_icons/folder.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 11 | 13 | 16 | 18 | 21 | 24 | 25 | 27 | 29 | 30 | -------------------------------------------------------------------------------- /davinci-helper/data/icons/function_icons/success.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /davinci-helper/data/icons/function_icons/warning.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /davinci-helper/data/icons/main_icons/ffmpeg_icon.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/H3rz3n/davinci-helper/21cf55b1c91aa4042675cd9b337708b5a4477788/davinci-helper/data/icons/main_icons/ffmpeg_icon.jpg -------------------------------------------------------------------------------- /davinci-helper/data/icons/main_icons/function_1.svg: -------------------------------------------------------------------------------- 1 | 2 | F1 3 | 4 | 5 | 6 | 8 | 9 | -------------------------------------------------------------------------------- /davinci-helper/data/icons/main_icons/function_2.svg: -------------------------------------------------------------------------------- 1 | 2 | F2 3 | 4 | 5 | 6 | 8 | 9 | -------------------------------------------------------------------------------- /davinci-helper/data/icons/main_icons/function_3.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 11 | 13 | 16 | 18 | 21 | 24 | 25 | 27 | 29 | 30 | -------------------------------------------------------------------------------- /davinci-helper/data/icons/main_icons/function_4.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /davinci-helper/data/icons/main_icons/function_5.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /davinci-helper/data/icons/white_mode/function_1.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /davinci-helper/data/icons/white_mode/function_2.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /davinci-helper/data/icons/white_mode/function_3.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /davinci-helper/data/icons/white_mode/function_4.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /davinci-helper/data/icons/white_mode/function_5.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /davinci-helper/data/icons/white_mode/function_6.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /davinci-helper/data/polkit/com.davinci.helper.app.policy: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | Please allow DaVinci Helper to run with administrative privileges, it is required to install the dependencies and the drivers 17 | 18 | 19 | 20 | Admin authentication is required to use this function 21 | È necessario autenticarsi come admin per eseguire questa funzione 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | no 30 | 31 | 32 | 33 | no 34 | 35 | 36 | 37 | auth_admin_keep 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | /usr/bin/python 46 | /usr/lib/python*/site-packages/davinci_helper/functions/function_1.py 47 | /usr/lib/python*/site-packages/davinci_helper/functions/function_3.py 48 | /usr/lib/python*/site-packages/davinci_helper/functions/function_4.py 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | -------------------------------------------------------------------------------- /davinci-helper/data/polkit/com.davinci.helper.app.rules: -------------------------------------------------------------------------------- 1 | /* AGGIUNTA DELLA REGOLA A POLKIT PER ESEGUIRE COME ROOT SOLO LE FUNZIONI STRETTAMENTE NECESSARIE. 2 | LE CONDIZIONI NECESSARIE SONO CHE L'UTENTE FORNICA I PERMESSI DI ADMIN E CHE LA RICHIESTA VENGA DAL PROGRAMMA DAVINCI HELPER */ 3 | 4 | /* ADDING THE POLKIT RULE TO HANDLE ONLY THE FUNCTIONS THAT NEED THE ROOT ACCESS. 5 | THE NECESSARY CONDITIONS TO GRANT PERMISSION ARE THAT THE USER MUST BE AND ADMIN AND THAT TE CALL IS FROM DAVINCI HELPER*/ 6 | polkit.addRule(function(action, subject) { 7 | 8 | /* CONDIZIONE DI VERIFICA CHE SI STA UTILIZZANDO LA POLICY ACTION CORRETTA, SE LA RICHIESTA D'USO DELLE REGOLE È DELLA SESSIONE E SE IL PROCESSO ESISTE NELLA SESSIONE */ 9 | /* THIS CONDITION CHECK IF THE POLKIT IS USING THE CORRECT POLICY, IF THE RULES IS FROM A LOCAL SUBJECT AND IF THIS SUBJECT HAS A PROCESS ASSOCIATED */ 10 | if (action.id == "com.davinci.helper.app" && subject.local && subject.local.process) { 11 | 12 | /* ACQUISISCO IL NOME DEL PROCESSO CHE HA RICHIESTO L'USO DELLE REGOLE */ 13 | /* ACQUIRING THE NAME OF THE PROCESS THAT HAS MADE THE RULES REQUEST */ 14 | var exec = subject.local.process.exec; 15 | 16 | /* CHECKING IF THE PROCESS IS FROM DAVINCI HELPER*/ 17 | /* CONTROLLO SE IL PROCESSO PROVIENE DA DAVINCI HELPER */ 18 | if (exec == "/usr/bin/davinci-helper") { 19 | 20 | /* AUTORIZZO L'UTENTE AD INSERIRE LA PASSWORD PER CONTINUARE E TENGO APERTA LA SESSIONE PER 5 MINUTI */ 21 | /* AUTHORIZE THE USER TO ENTER THE PASSWORD TO CONTINUE AND KEEP THE SESSION OPEN FOR 5 MINUTES */ 22 | return polkit.Result.AUTH_SELF_kEEP; 23 | } 24 | } 25 | } 26 | ); 27 | -------------------------------------------------------------------------------- /davinci-helper/data/settings/davinci_helper_settings: -------------------------------------------------------------------------------- 1 | VERSION = v2.1.0 2 | SHOW_WELCOME_SPLASH_SCREEN = TRUE 3 | FFMPEG_INSTALLED = FALSE -------------------------------------------------------------------------------- /davinci-helper/data/ui/converter_dialog.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 650 19 | 20 | 21 | 350 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | true 50 | 51 | 52 | false 53 | 54 | 55 | center 56 | 57 | 58 | center 59 | 60 | 61 | true 62 | 63 | 64 | true 65 | 66 | 67 | Dialog_Grid 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | Dialog_Icon 77 | 78 | 79 | 80 | 81 | 82 | 0 83 | 84 | 85 | 0 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | center 100 | 101 | 102 | true 103 | 104 | 105 | title-1 106 | 107 | 108 | 109 | 110 | 111 | 0 112 | 113 | 114 | 1 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | true 129 | 130 | 131 | true 132 | 133 | 134 | Dialog_Subtitle_Container 135 | 136 | 137 | 138 | 139 | 140 | 0 141 | 142 | 143 | 2 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | center 155 | 156 | 157 | true 158 | 159 | 160 | body 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | horizontal 178 | 179 | 180 | center 181 | 182 | 183 | Dialog_Button_Box 184 | 185 | 186 | 187 | 188 | 189 | 0 190 | 191 | 192 | 3 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | Close 204 | 205 | 206 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | false 225 | 226 | 227 | Close 228 | 229 | 230 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | -------------------------------------------------------------------------------- /davinci-helper/data/ui/file_error_dialog.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 650 19 | 20 | 21 | 350 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | true 50 | 51 | 52 | false 53 | 54 | 55 | center 56 | 57 | 58 | center 59 | 60 | 61 | true 62 | 63 | 64 | true 65 | 66 | 67 | Dialog_Grid 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | Dialog_Icon 77 | 78 | 79 | 80 | 81 | 82 | 0 83 | 84 | 85 | 0 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | center 100 | 101 | 102 | true 103 | 104 | 105 | title-1 106 | 107 | 108 | 109 | 110 | 111 | 0 112 | 113 | 114 | 1 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | true 129 | 130 | 131 | true 132 | 133 | 134 | Dialog_Subtitle_Container 135 | 136 | 137 | 138 | 139 | 140 | 0 141 | 142 | 143 | 2 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | center 155 | 156 | 157 | true 158 | 159 | 160 | body 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | horizontal 178 | 179 | 180 | center 181 | 182 | 183 | Dialog_Button_Box 184 | 185 | 186 | 187 | 188 | 189 | 0 190 | 191 | 192 | 3 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | Close 204 | 205 | 206 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | -------------------------------------------------------------------------------- /davinci-helper/data/ui/loading.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 131 | 132 | 133 | 134 | 135 | -------------------------------------------------------------------------------- /davinci-helper/data/ui/setting_management_dialog.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 650 19 | 20 | 21 | 350 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | true 50 | 51 | 52 | false 53 | 54 | 55 | center 56 | 57 | 58 | center 59 | 60 | 61 | true 62 | 63 | 64 | true 65 | 66 | 67 | Dialog_Grid 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | Dialog_Icon 77 | 78 | 79 | 80 | 81 | 82 | 0 83 | 84 | 85 | 0 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | center 100 | 101 | 102 | true 103 | 104 | 105 | title-1 106 | 107 | 108 | 109 | 110 | 111 | 0 112 | 113 | 114 | 1 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | true 129 | 130 | 131 | true 132 | 133 | 134 | Dialog_Subtitle_Container 135 | 136 | 137 | 138 | 139 | 140 | 0 141 | 142 | 143 | 2 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | center 155 | 156 | 157 | true 158 | 159 | 160 | body 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | horizontal 178 | 179 | 180 | center 181 | 182 | 183 | Dialog_Button_Box 184 | 185 | 186 | 187 | 188 | 189 | 0 190 | 191 | 192 | 3 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | Close 204 | 205 | 206 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | -------------------------------------------------------------------------------- /davinci-helper/data/ui/start_screen.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 266 | 267 | 268 | 269 | 270 | 271 | -------------------------------------------------------------------------------- /davinci-helper/davinci_helper/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/H3rz3n/davinci-helper/21cf55b1c91aa4042675cd9b337708b5a4477788/davinci-helper/davinci_helper/__init__.py -------------------------------------------------------------------------------- /davinci-helper/davinci_helper/functions/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/H3rz3n/davinci-helper/21cf55b1c91aa4042675cd9b337708b5a4477788/davinci-helper/davinci_helper/functions/__init__.py -------------------------------------------------------------------------------- /davinci-helper/davinci_helper/functions/gui/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/H3rz3n/davinci-helper/21cf55b1c91aa4042675cd9b337708b5a4477788/davinci-helper/davinci_helper/functions/gui/__init__.py -------------------------------------------------------------------------------- /davinci-helper/davinci_helper/functions/gui/about_dialog_gui.py: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright 2025 Lorenzo Maiuri 3 | # Published under GPL-3.0 license 4 | # GitHub : https://github.com/H3rz3n/davinci-helper 5 | # 6 | 7 | #----------------------------------------------------------------------------------------------------- 8 | 9 | # IMPORTAZIONE DEI MODULI STANDARD 10 | # STANDARD MODULE IMPORT 11 | import sys, gi, os, threading, gettext, locale, subprocess 12 | 13 | # RICHIESTA DELLE VERSIONI DI GTK ED ADWAITA 14 | # REQUESTING THE CHOOSEN VERSION OF GTK AND ADWAITA 15 | gi.require_version('Gtk', '4.0') 16 | gi.require_version('Adw', '1') 17 | 18 | # IMPORTO I MODULI NECESSARI 19 | # IMPORTING THE NECESSARY MODULES 20 | from gi.repository import Gtk, Adw, Gdk, Pango, Gio, GLib 21 | 22 | #----------------------------------------------------------------------------------------------------- 23 | 24 | # NOT STANDARD MODULES IMPORT 25 | from ..logic import app_info 26 | 27 | #----------------------------------------------------------------------------------------------------- 28 | 29 | # DEFINING UI FILES PATH 30 | ui_path = os.path.join("/usr/share/davinci-helper/data/ui") 31 | 32 | # DEFINING ICON FILES PATH 33 | icon_path = os.path.join("/usr/share/davinci-helper/data/icons") 34 | 35 | # DEFINING TRANSLATE FILES PATH 36 | locale_path = os.path.join("/usr/share/davinci-helper/locale") 37 | 38 | #----------------------------------------------------------------------------------------------------- 39 | 40 | # ASSOCIA IL NOME DEL DIZIONARIO DI TRADUZIONE AL FILE CORRISPONDENTE PER IL MODULO LOCALE 41 | # ASSOCIATE THE NAME OF THE TRANSLATION DICTIONARY TO THIS FILE PATH FOR THE LOCALE MODULE 42 | locale.bindtextdomain('davinci-helper', locale_path) 43 | 44 | # ASSOCIA IL NOME DEL DIZIONARIO DI TRADUZIONE AL FILE CORRISPONDENTE PER IL MODULO GETTEXT 45 | # ASSOCIATE THE NAME OF TRANSLATION DICTIONARY TO THIS FILE PATH FOR THE GETTEXT MODULE 46 | gettext.bindtextdomain('davinci-helper', locale_path) 47 | 48 | # COMUMICO A GETTEXT QUALE FILE USARE PER TRADURRE IL PROGRAMMA 49 | # TELLING GETTEXT WHICH FILE TO USE FOR THE TRANSLATION OF THE APP 50 | gettext.textdomain('davinci-helper') 51 | 52 | # COMUNICO A GETTEXT IL SEGNALE DI TRADUZIONE 53 | # TELLING GETTEXT THE TRANSLATE SIGNAL 54 | _ = gettext.gettext 55 | 56 | #----------------------------------------------------------------------------------------------------- 57 | 58 | 59 | 60 | # FILE ERROR DIALOG CLASS 61 | class about_dialog_class (): 62 | 63 | # IMPORTING ATTRIBUTE AND METHODS FROM THE MAIN CLASS "ADW.APPLICATION" USING THE INIT FUNCTION AND THE SUPERCLASS 64 | def __init__(self, last_function_self): 65 | 66 | #----------------------------------------------------------------------------------------------------- 67 | 68 | # CREATING THE ABOUT DIALOG WINDOW 69 | self.dialog_window = Adw.AboutDialog() 70 | 71 | # SETTING THE APP NAME 72 | self.dialog_window.set_application_name(app_info.app_name) 73 | 74 | # SETTING THE APP VERSION 75 | self.dialog_window.set_version(app_info.app_version) 76 | 77 | # SETTING THE APP ICON 78 | self.dialog_window.set_application_icon(app_info.app_icon) 79 | 80 | # SETTING THE APP WEBSITE 81 | self.dialog_window.set_website(app_info.app_website) 82 | 83 | # SETTING THE APP DEVELOPER 84 | self.dialog_window.set_developer_name(app_info.app_developers) 85 | 86 | # SETTING THE APP CONTRIBUTORS 87 | self.dialog_window.set_developers(app_info.app_contributors) 88 | 89 | # SETTING THE APP TRANSLATOR 90 | self.dialog_window.set_translator_credits(app_info.app_translator) 91 | 92 | # SETTING THE APP LICENSE 93 | self.dialog_window.set_license(app_info.app_license) 94 | 95 | # SETTING THE APP ISSUES URL 96 | self.dialog_window.set_issue_url(app_info.app_issue_url) 97 | 98 | # SETTING THE APP COPYRIGHT 99 | self.dialog_window.set_copyright(app_info.app_copyright) 100 | 101 | #----------------------------------------------------------------------------------------------------- 102 | 103 | 104 | 105 | 106 | 107 | # FUNCTION THAT SHOWS THE DIALOG WINDOW 108 | def show_dialog (self, last_function_self): 109 | 110 | #----------------------------------------------------------------------------------------------------- 111 | 112 | # SHOWING THE WINDOW AND HER CHILDS 113 | self.dialog_window.present(last_function_self.main_window) 114 | 115 | #----------------------------------------------------------------------------------------------------- 116 | -------------------------------------------------------------------------------- /davinci-helper/davinci_helper/functions/gui/check_update_dialog_gui.py: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright 2025 Lorenzo Maiuri 3 | # Published under GPL-3.0 license 4 | # GitHub : https://github.com/H3rz3n/davinci-helper 5 | # 6 | 7 | #----------------------------------------------------------------------------------------------------- 8 | 9 | # IMPORTAZIONE DEI MODULI STANDARD 10 | # STANDARD MODULE IMPORT 11 | import sys, gi, os, threading, gettext, locale, subprocess, requests 12 | 13 | # RICHIESTA DELLE VERSIONI DI GTK ED ADWAITA 14 | # REQUESTING THE CHOOSEN VERSION OF GTK AND ADWAITA 15 | gi.require_version('Gtk', '4.0') 16 | gi.require_version('Adw', '1') 17 | 18 | # IMPORTO I MODULI NECESSARI 19 | # IMPORTING THE NECESSARY MODULES 20 | from gi.repository import Gtk, Adw, Gdk, Pango, Gio, GLib 21 | 22 | #----------------------------------------------------------------------------------------------------- 23 | 24 | # DEFINING UI FILES PATH 25 | ui_path = os.path.join("/usr/share/davinci-helper/data/ui") 26 | 27 | # DEFINING ICON FILES PATH 28 | icon_path = os.path.join("/usr/share/davinci-helper/data/icons") 29 | 30 | # DEFINING TRANSLATE FILES PATH 31 | locale_path = os.path.join("/usr/share/davinci-helper/locale") 32 | 33 | #----------------------------------------------------------------------------------------------------- 34 | 35 | # ASSOCIA IL NOME DEL DIZIONARIO DI TRADUZIONE AL FILE CORRISPONDENTE PER IL MODULO LOCALE 36 | # ASSOCIATE THE NAME OF THE TRANSLATION DICTIONARY TO THIS FILE PATH FOR THE LOCALE MODULE 37 | locale.bindtextdomain('davinci-helper', locale_path) 38 | 39 | # ASSOCIA IL NOME DEL DIZIONARIO DI TRADUZIONE AL FILE CORRISPONDENTE PER IL MODULO GETTEXT 40 | # ASSOCIATE THE NAME OF TRANSLATION DICTIONARY TO THIS FILE PATH FOR THE GETTEXT MODULE 41 | gettext.bindtextdomain('davinci-helper', locale_path) 42 | 43 | # COMUMICO A GETTEXT QUALE FILE USARE PER TRADURRE IL PROGRAMMA 44 | # TELLING GETTEXT WHICH FILE TO USE FOR THE TRANSLATION OF THE APP 45 | gettext.textdomain('davinci-helper') 46 | 47 | # COMUNICO A GETTEXT IL SEGNALE DI TRADUZIONE 48 | # TELLING GETTEXT THE TRANSLATE SIGNAL 49 | _ = gettext.gettext 50 | 51 | #----------------------------------------------------------------------------------------------------- 52 | 53 | 54 | 55 | # FILE ERROR DIALOG CLASS 56 | class check_update_dialog_class (): 57 | 58 | # IMPORTING ATTRIBUTE AND METHODS FROM THE MAIN CLASS "ADW.APPLICATION" USING THE INIT FUNCTION AND THE SUPERCLASS 59 | def __init__(self, main_self, version_number, version_changelog): 60 | 61 | #----------------------------------------------------------------------------------------------------- 62 | 63 | # GETTING THE WINDOW CONSTRUCTOR 64 | dialog = Gtk.Builder() 65 | 66 | # TELLING THE BUILDER FUNCTION THE DICTIONARY NAME TO USE FOR THE INTERFACE TRANSLATION 67 | dialog.set_translation_domain('davinci-helper') 68 | 69 | # IMPORTING THE UI FILE THAT REPRESENT THE MAIN WINDOW 70 | dialog.add_from_file(f"{ui_path}/check_update_dialog.ui") 71 | 72 | # OBTAINING THE MAIN WINDOW AND HER CHILD FROM THE UI FILE 73 | self.dialog_window = dialog.get_object("dialog_window") 74 | 75 | #----------------------------------------------------------------------------------------------------- 76 | 77 | # OBTAINING THE OBJECT AND HIS CHILD FROM THE UI FILE 78 | self.dialog_icon = dialog.get_object("dialog_icon") 79 | 80 | # OBTAINING THE OBJECT AND HIS CHILD FROM THE UI FILE 81 | self.dialog_title = dialog.get_object("dialog_title") 82 | 83 | # OBTAINING THE OBJECT AND HIS CHILD FROM THE UI FILE 84 | self.dialog_subtitle = dialog.get_object("dialog_subtitle") 85 | 86 | # OBTAINING THE OBJECT AND HIS CHILD FROM THE UI FILE 87 | self.dialog_changelog = dialog.get_object("dialog_changelog") 88 | 89 | # OBTAINING THE OBJECT AND HIS CHILD FROM THE UI FILE 90 | self.dialog_download_button = dialog.get_object("dialog_download_button") 91 | 92 | # OBTAINING THE OBJECT AND HIS CHILD FROM THE UI FILE 93 | self.dialog_close_button = dialog.get_object("dialog_close_button") 94 | 95 | # OBTAINING THE MAIN SELF FROM THE MAIN FILE 96 | self.main_self = main_self 97 | 98 | #----------------------------------------------------------------------------------------------------- 99 | 100 | # LOADING ICON FILE 101 | self.dialog_icon.set_from_file(f"{icon_path}/davinci_helper_icon.svg") 102 | 103 | # LOADING TITLE TEXT 104 | self.dialog_title.set_text(_("A new update is available")) 105 | 106 | # LOADING SUBTITLE TEXT 107 | self.dialog_subtitle.set_text(_("A new version of this app has been found.\nWe recommend you to update it before continue using it.")) 108 | 109 | # LOADING CHANGELOG TEXT 110 | self.dialog_changelog.set_text(version_changelog) 111 | 112 | # CONNECTING THE DOWNLOAD BUTTON TO THE FUNCTION 113 | self.dialog_download_button.connect('clicked', self.open_github_page) 114 | 115 | # CONNECTING THE CLOSE BUTTON TO THE FUNCTION 116 | self.dialog_close_button.connect('clicked', lambda button : self.dialog_window.close()) 117 | 118 | #----------------------------------------------------------------------------------------------------- 119 | 120 | 121 | 122 | 123 | 124 | # FUNCTION THAT OPENS THE LATEST VERSION DOWNLOAD PAGE 125 | def open_github_page(self, button) : 126 | 127 | #----------------------------------------------------------------------------------------------------- 128 | 129 | # SETTONG THE DOWNLOAD PAGE LINK 130 | url = "https://github.com/H3rz3n/davinci-helper/releases/latest" 131 | 132 | # USING GIO TO OPEN THE URL IN THE DEFAULT WEB BROWSER 133 | Gio.AppInfo.launch_default_for_uri(url) 134 | 135 | #----------------------------------------------------------------------------------------------------- 136 | 137 | 138 | 139 | 140 | 141 | # FUNCTION THAT SHOWS THE DIALOG WINDOW 142 | def show_dialog (self): 143 | 144 | #----------------------------------------------------------------------------------------------------- 145 | 146 | # SHOWING THE WINDOW AND HER CHILDS 147 | self.dialog_window.present(self.main_self.main_window) 148 | 149 | #----------------------------------------------------------------------------------------------------- 150 | 151 | 152 | 153 | 154 | 155 | 156 | -------------------------------------------------------------------------------- /davinci-helper/davinci_helper/functions/gui/file_error_dialog_gui.py: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright 2025 Lorenzo Maiuri 3 | # Published under GPL-3.0 license 4 | # GitHub : https://github.com/H3rz3n/davinci-helper 5 | # 6 | 7 | #----------------------------------------------------------------------------------------------------- 8 | 9 | # IMPORTAZIONE DEI MODULI STANDARD 10 | # STANDARD MODULE IMPORT 11 | import sys, gi, os, threading, gettext, locale, subprocess 12 | 13 | # RICHIESTA DELLE VERSIONI DI GTK ED ADWAITA 14 | # REQUESTING THE CHOOSEN VERSION OF GTK AND ADWAITA 15 | gi.require_version('Gtk', '4.0') 16 | gi.require_version('Adw', '1') 17 | 18 | # IMPORTO I MODULI NECESSARI 19 | # IMPORTING THE NECESSARY MODULES 20 | from gi.repository import Gtk, Adw, Gdk, Pango, Gio, GLib 21 | 22 | #----------------------------------------------------------------------------------------------------- 23 | 24 | # DEFINING UI FILES PATH 25 | ui_path = os.path.join("/usr/share/davinci-helper/data/ui") 26 | 27 | # DEFINING ICON FILES PATH 28 | icon_path = os.path.join("/usr/share/davinci-helper/data/icons") 29 | 30 | # DEFINING TRANSLATE FILES PATH 31 | locale_path = os.path.join("/usr/share/davinci-helper/locale") 32 | 33 | #----------------------------------------------------------------------------------------------------- 34 | 35 | # ASSOCIA IL NOME DEL DIZIONARIO DI TRADUZIONE AL FILE CORRISPONDENTE PER IL MODULO LOCALE 36 | # ASSOCIATE THE NAME OF THE TRANSLATION DICTIONARY TO THIS FILE PATH FOR THE LOCALE MODULE 37 | locale.bindtextdomain('davinci-helper', locale_path) 38 | 39 | # ASSOCIA IL NOME DEL DIZIONARIO DI TRADUZIONE AL FILE CORRISPONDENTE PER IL MODULO GETTEXT 40 | # ASSOCIATE THE NAME OF TRANSLATION DICTIONARY TO THIS FILE PATH FOR THE GETTEXT MODULE 41 | gettext.bindtextdomain('davinci-helper', locale_path) 42 | 43 | # COMUMICO A GETTEXT QUALE FILE USARE PER TRADURRE IL PROGRAMMA 44 | # TELLING GETTEXT WHICH FILE TO USE FOR THE TRANSLATION OF THE APP 45 | gettext.textdomain('davinci-helper') 46 | 47 | # COMUNICO A GETTEXT IL SEGNALE DI TRADUZIONE 48 | # TELLING GETTEXT THE TRANSLATE SIGNAL 49 | _ = gettext.gettext 50 | 51 | #----------------------------------------------------------------------------------------------------- 52 | 53 | 54 | 55 | # FILE ERROR DIALOG CLASS 56 | class file_error_dialog_class (): 57 | 58 | # IMPORTING ATTRIBUTE AND METHODS FROM THE MAIN CLASS "ADW.APPLICATION" USING THE INIT FUNCTION AND THE SUPERCLASS 59 | def __init__(self, last_function_self, error_type): 60 | 61 | #----------------------------------------------------------------------------------------------------- 62 | 63 | # GETTING THE WINDOW CONSTRUCTOR 64 | dialog = Gtk.Builder() 65 | 66 | # TELLING THE BUILDER FUNCTION THE DICTIONARY NAME TO USE FOR THE INTERFACE TRANSLATION 67 | dialog.set_translation_domain('davinci-helper') 68 | 69 | # IMPORTING THE UI FILE THAT REPRESENT THE MAIN WINDOW 70 | dialog.add_from_file(f"{ui_path}/file_error_dialog.ui") 71 | 72 | # OBTAINING THE MAIN WINDOW AND HER CHILD FROM THE UI FILE 73 | self.dialog_window = dialog.get_object("dialog_window") 74 | 75 | #----------------------------------------------------------------------------------------------------- 76 | 77 | # OBTAINING THE OBJECT AND HIS CHILD FROM THE UI FILE 78 | self.dialog_icon = dialog.get_object("dialog_icon") 79 | 80 | # OBTAINING THE OBJECT AND HIS CHILD FROM THE UI FILE 81 | self.dialog_title = dialog.get_object("dialog_title") 82 | 83 | # OBTAINING THE OBJECT AND HIS CHILD FROM THE UI FILE 84 | self.dialog_subtitle = dialog.get_object("dialog_subtitle") 85 | 86 | # OBTAINING THE OBJECT AND HIS CHILD FROM THE UI FILE 87 | self.dialog_close_button = dialog.get_object("dialog_close_button") 88 | 89 | #----------------------------------------------------------------------------------------------------- 90 | 91 | # LOADING ICON FILE 92 | self.dialog_icon.set_from_file(f"{icon_path}/function_icons/warning.svg") 93 | 94 | # LOADING TITLE TEXT 95 | self.dialog_title.set_text(_("Select a valid file !")) 96 | 97 | # CHECKING WHICH SUBTITLE TEXT HAS TO BE LOADED : 98 | if error_type == "Missing" : 99 | 100 | # DEFINING SUBTITLE TEXT 101 | subtitle_text= (_("It seems like you didn't load any file.\nPlease load a valid DaVinci Resolve installer file to continue.")) 102 | 103 | elif error_type == "Unsuitable": 104 | 105 | # DEFINING SUBTITLE TEXT 106 | subtitle_text= (_("It seems like you tried to load an usupported file.\nPlease load a valid DaVinci Resolve installer file to continue.\nIf you have renamed it, remember that the file name must\ncontain the words 'DaVinci', 'Resolve', 'Linux' inside of it\nand it must to have the '.zip' or `.run` extension.")) 107 | 108 | # LOADING SUBTITLE TEXT 109 | self.dialog_subtitle.set_text(subtitle_text) 110 | 111 | # CONNECTING THE START BUTTON TO THE FUNCTION 112 | self.dialog_close_button.connect('clicked', lambda button : self.dialog_window.close()) 113 | 114 | #----------------------------------------------------------------------------------------------------- 115 | 116 | 117 | 118 | 119 | 120 | # FUNCTION THAT SHOWS THE DIALOG WINDOW 121 | def show_dialog (self, last_function_self): 122 | 123 | #----------------------------------------------------------------------------------------------------- 124 | 125 | # SHOWING THE WINDOW AND HER CHILDS 126 | self.dialog_window.present(last_function_self.main_self.main_window) 127 | 128 | #----------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------- /davinci-helper/davinci_helper/functions/gui/file_size_warning_dialog_gui.py: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright 2025 Lorenzo Maiuri 3 | # Published under GPL-3.0 license 4 | # GitHub : https://github.com/H3rz3n/davinci-helper 5 | # 6 | 7 | #----------------------------------------------------------------------------------------------------- 8 | 9 | # IMPORTAZIONE DEI MODULI STANDARD 10 | # STANDARD MODULE IMPORT 11 | import sys, gi, os, threading, gettext, locale, subprocess 12 | 13 | # RICHIESTA DELLE VERSIONI DI GTK ED ADWAITA 14 | # REQUESTING THE CHOOSEN VERSION OF GTK AND ADWAITA 15 | gi.require_version('Gtk', '4.0') 16 | gi.require_version('Adw', '1') 17 | 18 | # IMPORTO I MODULI NECESSARI 19 | # IMPORTING THE NECESSARY MODULES 20 | from gi.repository import Gtk, Adw, Gdk, Pango, Gio, GLib 21 | 22 | #----------------------------------------------------------------------------------------------------- 23 | 24 | # DEFINING UI FILES PATH 25 | ui_path = os.path.join("/usr/share/davinci-helper/data/ui") 26 | 27 | # DEFINING ICON FILES PATH 28 | icon_path = os.path.join("/usr/share/davinci-helper/data/icons") 29 | 30 | # DEFINING TRANSLATE FILES PATH 31 | locale_path = os.path.join("/usr/share/davinci-helper/locale") 32 | 33 | #----------------------------------------------------------------------------------------------------- 34 | 35 | # ASSOCIA IL NOME DEL DIZIONARIO DI TRADUZIONE AL FILE CORRISPONDENTE PER IL MODULO LOCALE 36 | # ASSOCIATE THE NAME OF THE TRANSLATION DICTIONARY TO THIS FILE PATH FOR THE LOCALE MODULE 37 | locale.bindtextdomain('davinci-helper', locale_path) 38 | 39 | # ASSOCIA IL NOME DEL DIZIONARIO DI TRADUZIONE AL FILE CORRISPONDENTE PER IL MODULO GETTEXT 40 | # ASSOCIATE THE NAME OF TRANSLATION DICTIONARY TO THIS FILE PATH FOR THE GETTEXT MODULE 41 | gettext.bindtextdomain('davinci-helper', locale_path) 42 | 43 | # COMUMICO A GETTEXT QUALE FILE USARE PER TRADURRE IL PROGRAMMA 44 | # TELLING GETTEXT WHICH FILE TO USE FOR THE TRANSLATION OF THE APP 45 | gettext.textdomain('davinci-helper') 46 | 47 | # COMUNICO A GETTEXT IL SEGNALE DI TRADUZIONE 48 | # TELLING GETTEXT THE TRANSLATE SIGNAL 49 | _ = gettext.gettext 50 | 51 | #----------------------------------------------------------------------------------------------------- 52 | 53 | 54 | 55 | # FILE ERROR DIALOG CLASS 56 | class file_size_warning_dialog_class (): 57 | 58 | # IMPORTING ATTRIBUTE AND METHODS FROM THE MAIN CLASS "ADW.APPLICATION" USING THE INIT FUNCTION AND THE SUPERCLASS 59 | def __init__(self, last_function_self, disk_space): 60 | 61 | #----------------------------------------------------------------------------------------------------- 62 | 63 | # ROUNDING THE TAKED DISK SPACE 64 | disk_space_r = round(disk_space, 2) 65 | 66 | #----------------------------------------------------------------------------------------------------- 67 | 68 | # GETTING THE WINDOW CONSTRUCTOR 69 | dialog = Gtk.Builder() 70 | 71 | # TELLING THE BUILDER FUNCTION THE DICTIONARY NAME TO USE FOR THE INTERFACE TRANSLATION 72 | dialog.set_translation_domain('davinci-helper') 73 | 74 | # IMPORTING THE UI FILE THAT REPRESENT THE MAIN WINDOW 75 | dialog.add_from_file(f"{ui_path}/file_size_warning_dialog.ui") 76 | 77 | # OBTAINING THE MAIN WINDOW AND HER CHILD FROM THE UI FILE 78 | self.dialog_window = dialog.get_object("dialog_window") 79 | 80 | #----------------------------------------------------------------------------------------------------- 81 | 82 | # OBTAINING THE OBJECT AND HIS CHILD FROM THE UI FILE 83 | self.dialog_icon = dialog.get_object("dialog_icon") 84 | 85 | # OBTAINING THE OBJECT AND HIS CHILD FROM THE UI FILE 86 | self.dialog_title = dialog.get_object("dialog_title") 87 | 88 | # OBTAINING THE OBJECT AND HIS CHILD FROM THE UI FILE 89 | self.dialog_subtitle_1 = dialog.get_object("dialog_subtitle_1") 90 | 91 | # OBTAINING THE OBJECT AND HIS CHILD FROM THE UI FILE 92 | self.dialog_subtitle_2 = dialog.get_object("dialog_subtitle_2") 93 | 94 | # OBTAINING THE OBJECT AND HIS CHILD FROM THE UI FILE 95 | self.dialog_subtitle_3 = dialog.get_object("dialog_subtitle_3") 96 | 97 | # OBTAINING THE OBJECT AND HIS CHILD FROM THE UI FILE 98 | self.dialog_continue_button = dialog.get_object("dialog_continue_button") 99 | 100 | # OBTAINING THE OBJECT AND HIS CHILD FROM THE UI FILE 101 | self.dialog_cancel_button = dialog.get_object("dialog_cancel_button") 102 | 103 | #----------------------------------------------------------------------------------------------------- 104 | 105 | # LOADING ICON FILE 106 | self.dialog_icon.set_from_file(f"{icon_path}/function_icons/warning.svg") 107 | 108 | # LOADING TITLE TEXT 109 | self.dialog_title.set_text(_("This will need a lot of space !")) 110 | 111 | # LOADING SUBTITLE TEXT 112 | self.dialog_subtitle_1.set_text(_("The conversion of the files using the DNxHD/HR encoder will make new files fully compatible with DaVinci Resolve Free.\n\nThe use of these uncompressed sources will make your editing experience faster, but it will take a lot of disk space.\n")) 113 | 114 | # LOADING SUBTITLE TEXT 115 | self.dialog_subtitle_2.set_text(_("The estimated disk space needed to convert the files is :\n{space_placeholder}GB\n").format(space_placeholder = disk_space_r)) 116 | 117 | # LOADING SUBTITLE TEXT 118 | self.dialog_subtitle_3.set_markup(_("If you want to use less disk space please consider using\nlower video and audio settings.")) 119 | 120 | 121 | # CONNECTING THE BUTTON TO THE FUNCTION 122 | self.dialog_cancel_button.connect('clicked', lambda button : self.dialog_window.close()) 123 | 124 | #----------------------------------------------------------------------------------------------------- 125 | 126 | 127 | 128 | 129 | 130 | # FUNCTION THAT SHOWS THE DIALOG WINDOW 131 | def show_dialog (self, last_function_self): 132 | 133 | #----------------------------------------------------------------------------------------------------- 134 | 135 | # SHOWING THE WINDOW AND HER CHILDS 136 | self.dialog_window.present(last_function_self.main_self.main_window) 137 | 138 | #----------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------- /davinci-helper/davinci_helper/functions/gui/loading_gui.py: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright 2025 Lorenzo Maiuri 3 | # Pubblicato sotto licenza GPL-3.0 4 | # Published under GPL-3.0 license 5 | # GitHub : https://github.com/H3rz3n/davinci-helper 6 | # 7 | 8 | #----------------------------------------------------------------------------------------------------- 9 | 10 | # IMPORTAZIONE DEI MODULI STANDARD 11 | # STANDARD MODULE IMPORT 12 | import sys, gi, os, threading, gettext, locale, subprocess 13 | 14 | # RICHIESTA DELLE VERSIONI DI GTK ED ADWAITA 15 | # REQUESTING THE CHOOSEN VERSION OF GTK AND ADWAITA 16 | gi.require_version('Gtk', '4.0') 17 | gi.require_version('Adw', '1') 18 | 19 | # IMPORTO I MODULI NECESSARI 20 | # IMPORTING THE NECESSARY MODULES 21 | from gi.repository import Gtk, Adw, Gdk, Pango, Gio, GLib 22 | 23 | #----------------------------------------------------------------------------------------------------- 24 | 25 | # DEFINING CSS FILES PATH 26 | css_path = os.path.join("/usr/share/davinci-helper/data/css") 27 | 28 | # DEFINING UI FILES PATH 29 | ui_path = os.path.join("/usr/share/davinci-helper/data/ui") 30 | 31 | # DEFINING ICON FILES PATH 32 | icon_path = os.path.join("/usr/share/davinci-helper/data/icons") 33 | 34 | # DEFINING TRANSLATE FILES PATH 35 | locale_path = os.path.join("/usr/share/davinci-helper/locale") 36 | 37 | # DEFINING SETTINGS FILES PATH 38 | home_dir = os.path.expanduser("~") 39 | settings_path = os.path.join(f"{home_dir}/.config/davinci_helper") 40 | 41 | #----------------------------------------------------------------------------------------------------- 42 | 43 | # ASSOCIA IL NOME DEL DIZIONARIO DI TRADUZIONE AL FILE CORRISPONDENTE PER IL MODULO LOCALE 44 | # ASSOCIATE THE NAME OF THE TRANSLATION DICTIONARY TO THIS FILE PATH FOR THE LOCALE MODULE 45 | locale.bindtextdomain('davinci-helper', locale_path) 46 | 47 | # ASSOCIA IL NOME DEL DIZIONARIO DI TRADUZIONE AL FILE CORRISPONDENTE PER IL MODULO GETTEXT 48 | # ASSOCIATE THE NAME OF TRANSLATION DICTIONARY TO THIS FILE PATH FOR THE GETTEXT MODULE 49 | gettext.bindtextdomain('davinci-helper', locale_path) 50 | 51 | # COMUMICO A GETTEXT QUALE FILE USARE PER TRADURRE IL PROGRAMMA 52 | # TELLING GETTEXT WHICH FILE TO USE FOR THE TRANSLATION OF THE APP 53 | gettext.textdomain('davinci-helper') 54 | 55 | # COMUNICO A GETTEXT IL SEGNALE DI TRADUZIONE 56 | # TELLING GETTEXT THE TRANSLATE SIGNAL 57 | _ = gettext.gettext 58 | 59 | #----------------------------------------------------------------------------------------------------- 60 | 61 | 62 | 63 | # DEFINING TEMPLATE PATH 64 | @Gtk.Template(filename=f"{ui_path}/loading.ui") 65 | 66 | # CREATING TEMPLATE CLASS TO EDIT WIDGET 67 | class loading_class (Gtk.Grid): 68 | 69 | #----------------------------------------------------------------------------------------------------- 70 | 71 | # DEFINING TEMPLATE NAME 72 | __gtype_name__ = "Loading" 73 | 74 | #----------------------------------------------------------------------------------------------------- 75 | 76 | # OBTAINING THE OBJECT AND HIS CHILD FROM THE UI FILE 77 | loading_spinner = Gtk.Template.Child("loading_spinner") 78 | 79 | # OBTAINING THE OBJECT AND HIS CHILD FROM THE UI FILE 80 | loading_text = Gtk.Template.Child("loading_text") 81 | 82 | 83 | 84 | 85 | # IMPORTING ATTRIBUTES FROM PARENT CLASS 86 | def __init__(self): 87 | super().__init__() 88 | 89 | #----------------------------------------------------------------------------------------------------- 90 | 91 | # SETTING THE TEXT 92 | self.loading_text.set_text(_("The time needed to complete this task will vary on your computer and network performance.")) 93 | 94 | #----------------------------------------------------------------------------------------------------- 95 | 96 | 97 | 98 | 99 | 100 | # FUNCTION THAT STARTS THE SPINNER 101 | def start_spinner (self): 102 | 103 | #----------------------------------------------------------------------------------------------------- 104 | 105 | # STARTING THE SPINNER 106 | self.loading_spinner.start() 107 | 108 | #----------------------------------------------------------------------------------------------------- 109 | 110 | 111 | 112 | 113 | 114 | # FUNCTION THAT STOPS THE SPINNER 115 | def stop_spinner(self): 116 | 117 | #----------------------------------------------------------------------------------------------------- 118 | 119 | # STOPPING THE SPINNER 120 | self.loading_spinner.stop() 121 | 122 | #----------------------------------------------------------------------------------------------------- 123 | 124 | 125 | -------------------------------------------------------------------------------- /davinci-helper/davinci_helper/functions/gui/module_install_error_dialog_guy.py: -------------------------------------------------------------------------------- 1 | 2 | # 3 | # Copyright 2025 Lorenzo Maiuri 4 | # Published under GPL-3.0 license 5 | # GitHub : https://github.com/H3rz3n/davinci-helper 6 | # 7 | 8 | #----------------------------------------------------------------------------------------------------- 9 | 10 | # IMPORTAZIONE DEI MODULI STANDARD 11 | # STANDARD MODULE IMPORT 12 | import sys, gi, os, threading, gettext, locale, subprocess 13 | 14 | # RICHIESTA DELLE VERSIONI DI GTK ED ADWAITA 15 | # REQUESTING THE CHOOSEN VERSION OF GTK AND ADWAITA 16 | gi.require_version('Gtk', '4.0') 17 | gi.require_version('Adw', '1') 18 | 19 | # IMPORTO I MODULI NECESSARI 20 | # IMPORTING THE NECESSARY MODULES 21 | from gi.repository import Gtk, Adw, Gdk, Pango, Gio, GLib 22 | 23 | #----------------------------------------------------------------------------------------------------- 24 | 25 | # DEFINING UI FILES PATH 26 | ui_path = os.path.join("/usr/share/davinci-helper/data/ui") 27 | 28 | # DEFINING ICON FILES PATH 29 | icon_path = os.path.join("/usr/share/davinci-helper/data/icons") 30 | 31 | # DEFINING TRANSLATE FILES PATH 32 | locale_path = os.path.join("/usr/share/davinci-helper/locale") 33 | 34 | #----------------------------------------------------------------------------------------------------- 35 | 36 | # ASSOCIA IL NOME DEL DIZIONARIO DI TRADUZIONE AL FILE CORRISPONDENTE PER IL MODULO LOCALE 37 | # ASSOCIATE THE NAME OF THE TRANSLATION DICTIONARY TO THIS FILE PATH FOR THE LOCALE MODULE 38 | locale.bindtextdomain('davinci-helper', locale_path) 39 | 40 | # ASSOCIA IL NOME DEL DIZIONARIO DI TRADUZIONE AL FILE CORRISPONDENTE PER IL MODULO GETTEXT 41 | # ASSOCIATE THE NAME OF TRANSLATION DICTIONARY TO THIS FILE PATH FOR THE GETTEXT MODULE 42 | gettext.bindtextdomain('davinci-helper', locale_path) 43 | 44 | # COMUMICO A GETTEXT QUALE FILE USARE PER TRADURRE IL PROGRAMMA 45 | # TELLING GETTEXT WHICH FILE TO USE FOR THE TRANSLATION OF THE APP 46 | gettext.textdomain('davinci-helper') 47 | 48 | # COMUNICO A GETTEXT IL SEGNALE DI TRADUZIONE 49 | # TELLING GETTEXT THE TRANSLATE SIGNAL 50 | _ = gettext.gettext 51 | 52 | #----------------------------------------------------------------------------------------------------- 53 | 54 | 55 | 56 | 57 | 58 | # FILE ERROR DIALOG CLASS 59 | class module_install_error_dialog_class (): 60 | 61 | # IMPORTING ATTRIBUTE AND METHODS FROM THE MAIN CLASS "ADW.APPLICATION" USING THE INIT FUNCTION AND THE SUPERCLASS 62 | def __init__(self, last_function_self, logs): 63 | 64 | #----------------------------------------------------------------------------------------------------- 65 | 66 | # GETTING THE WINDOW CONSTRUCTOR 67 | dialog = Gtk.Builder() 68 | 69 | # TELLING THE BUILDER FUNCTION THE DICTIONARY NAME TO USE FOR THE INTERFACE TRANSLATION 70 | dialog.set_translation_domain('davinci-helper') 71 | 72 | # IMPORTING THE UI FILE THAT REPRESENT THE MAIN WINDOW 73 | dialog.add_from_file(f"{ui_path}/module_install_error_dialog.ui") 74 | 75 | # OBTAINING THE MAIN WINDOW AND HER CHILD FROM THE UI FILE 76 | self.dialog_window = dialog.get_object("dialog_window") 77 | 78 | #----------------------------------------------------------------------------------------------------- 79 | 80 | # OBTAINING THE OBJECT AND HIS CHILD FROM THE UI FILE 81 | self.dialog_icon = dialog.get_object("dialog_icon") 82 | 83 | # OBTAINING THE OBJECT AND HIS CHILD FROM THE UI FILE 84 | self.dialog_title = dialog.get_object("dialog_title") 85 | 86 | # OBTAINING THE OBJECT AND HIS CHILD FROM THE UI FILE 87 | self.dialog_subtitle = dialog.get_object("dialog_subtitle") 88 | 89 | # OBTAINING THE OBJECT AND HIS CHILD FROM THE UI FILE 90 | self.dialog_log_revealer = dialog.get_object("dialog_log_revealer") 91 | 92 | # OBTAINING THE OBJECT AND HIS CHILD FROM THE UI FILE 93 | self.dialog_log = dialog.get_object("dialog_log") 94 | 95 | # OBTAINING THE OBJECT AND HIS CHILD FROM THE UI FILE 96 | self.dialog_close_button = dialog.get_object("dialog_close_button") 97 | 98 | # OBTAINING THE OBJECT AND HIS CHILD FROM THE UI FILE 99 | self.dialog_log_button = dialog.get_object("dialog_log_button") 100 | 101 | #----------------------------------------------------------------------------------------------------- 102 | 103 | # LOADING ICON FILE 104 | self.dialog_icon.set_from_file(f"{icon_path}/function_icons/error.svg") 105 | 106 | # LOADING TITLE TEXT 107 | self.dialog_title.set_text(_("There are some missing modules")) 108 | 109 | # LOADING SUBTITLE TEXT 110 | self.dialog_subtitle.set_text(_("There was an error installing the Moviepy python module.\nPlease check the logs to have more details.")) 111 | 112 | # LOADING SUBTITLE TEXT 113 | self.dialog_log.set_text(logs) 114 | 115 | 116 | # CONNECTING THE BUTTON TO THE FUNCTION 117 | self.dialog_close_button.connect('clicked', lambda button : self.dialog_window.close()) 118 | 119 | # CONNECTING THE BUTTON TO THE FUNCTION 120 | self.dialog_log_button.connect('clicked', self.show_logs) 121 | 122 | #----------------------------------------------------------------------------------------------------- 123 | 124 | 125 | 126 | 127 | 128 | # FUNCTION THAT SHOWS THE DIALOG WINDOW 129 | def show_dialog (self, last_function_self): 130 | 131 | #----------------------------------------------------------------------------------------------------- 132 | 133 | # SHOWING THE WINDOW AND HER CHILDS 134 | self.dialog_window.present(last_function_self.main_self.main_window) 135 | 136 | #----------------------------------------------------------------------------------------------------- 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | # FUNCTION THAT AND MANAGES THE SHOW/HID MECHANISM 145 | def show_logs (self, button): 146 | 147 | #----------------------------------------------------------------------------------------------------- 148 | 149 | # ACQUIRING VIBILITY STATUS OF THE OBJECT 150 | current_visibility = self.dialog_log_revealer.get_reveal_child() 151 | 152 | #----------------------------------------------------------------------------------------------------- 153 | 154 | # CHECKING IF THE OBJECT IS VISIBLE 155 | if current_visibility == True : 156 | 157 | # HIDING THE OBJECT 158 | self.dialog_log_revealer.set_reveal_child(False) 159 | 160 | # CHANGING BUTTON LABEL 161 | self.dialog_log_button.set_label(_("Show logs")) 162 | 163 | else : 164 | 165 | # SHOWING THE OBJECT 166 | self.dialog_log_revealer.set_reveal_child(True) 167 | 168 | # CHANGING BUTTON LABEL 169 | self.dialog_log_button.set_label(_("Hide logs")) 170 | 171 | #----------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------- /davinci-helper/davinci_helper/functions/gui/settings_management_dialog_gui.py: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright 2025 Lorenzo Maiuri 3 | # Published under GPL-3.0 license 4 | # GitHub : https://github.com/H3rz3n/davinci-helper 5 | # 6 | 7 | #----------------------------------------------------------------------------------------------------- 8 | 9 | # IMPORTAZIONE DEI MODULI STANDARD 10 | # STANDARD MODULE IMPORT 11 | import sys, gi, os, threading, gettext, locale, subprocess 12 | 13 | # RICHIESTA DELLE VERSIONI DI GTK ED ADWAITA 14 | # REQUESTING THE CHOOSEN VERSION OF GTK AND ADWAITA 15 | gi.require_version('Gtk', '4.0') 16 | gi.require_version('Adw', '1') 17 | 18 | # IMPORTO I MODULI NECESSARI 19 | # IMPORTING THE NECESSARY MODULES 20 | from gi.repository import Gtk, Adw, Gdk, Pango, Gio, GLib 21 | 22 | #----------------------------------------------------------------------------------------------------- 23 | 24 | # DEFINING UI FILES PATH 25 | ui_path = os.path.join("/usr/share/davinci-helper/data/ui") 26 | 27 | # DEFINING ICON FILES PATH 28 | icon_path = os.path.join("/usr/share/davinci-helper/data/icons") 29 | 30 | # DEFINING TRANSLATE FILES PATH 31 | locale_path = os.path.join("/usr/share/davinci-helper/locale") 32 | 33 | #----------------------------------------------------------------------------------------------------- 34 | 35 | # ASSOCIA IL NOME DEL DIZIONARIO DI TRADUZIONE AL FILE CORRISPONDENTE PER IL MODULO LOCALE 36 | # ASSOCIATE THE NAME OF THE TRANSLATION DICTIONARY TO THIS FILE PATH FOR THE LOCALE MODULE 37 | locale.bindtextdomain('davinci-helper', locale_path) 38 | 39 | # ASSOCIA IL NOME DEL DIZIONARIO DI TRADUZIONE AL FILE CORRISPONDENTE PER IL MODULO GETTEXT 40 | # ASSOCIATE THE NAME OF TRANSLATION DICTIONARY TO THIS FILE PATH FOR THE GETTEXT MODULE 41 | gettext.bindtextdomain('davinci-helper', locale_path) 42 | 43 | # COMUMICO A GETTEXT QUALE FILE USARE PER TRADURRE IL PROGRAMMA 44 | # TELLING GETTEXT WHICH FILE TO USE FOR THE TRANSLATION OF THE APP 45 | gettext.textdomain('davinci-helper') 46 | 47 | # COMUNICO A GETTEXT IL SEGNALE DI TRADUZIONE 48 | # TELLING GETTEXT THE TRANSLATE SIGNAL 49 | _ = gettext.gettext 50 | 51 | #----------------------------------------------------------------------------------------------------- 52 | 53 | 54 | 55 | # FILE ERROR DIALOG CLASS 56 | class setting_management_dialog_class (): 57 | 58 | # IMPORTING ATTRIBUTE AND METHODS FROM THE MAIN CLASS "ADW.APPLICATION" USING THE INIT FUNCTION AND THE SUPERCLASS 59 | def __init__(self, main_self): 60 | 61 | #----------------------------------------------------------------------------------------------------- 62 | 63 | # GETTING THE WINDOW CONSTRUCTOR 64 | dialog = Gtk.Builder() 65 | 66 | # TELLING THE BUILDER FUNCTION THE DICTIONARY NAME TO USE FOR THE INTERFACE TRANSLATION 67 | dialog.set_translation_domain('davinci-helper') 68 | 69 | # IMPORTING THE UI FILE THAT REPRESENT THE MAIN WINDOW 70 | dialog.add_from_file(f"{ui_path}/setting_management_dialog.ui") 71 | 72 | # OBTAINING THE MAIN WINDOW AND HER CHILD FROM THE UI FILE 73 | self.dialog_window = dialog.get_object("dialog_window") 74 | 75 | #----------------------------------------------------------------------------------------------------- 76 | 77 | # OBTAINING THE OBJECT AND HIS CHILD FROM THE UI FILE 78 | self.dialog_icon = dialog.get_object("dialog_icon") 79 | 80 | # OBTAINING THE OBJECT AND HIS CHILD FROM THE UI FILE 81 | self.dialog_title = dialog.get_object("dialog_title") 82 | 83 | # OBTAINING THE OBJECT AND HIS CHILD FROM THE UI FILE 84 | self.dialog_subtitle = dialog.get_object("dialog_subtitle") 85 | 86 | # OBTAINING THE OBJECT AND HIS CHILD FROM THE UI FILE 87 | self.dialog_close_button = dialog.get_object("dialog_close_button") 88 | 89 | # OBTAINING THE MAIN SELF FROM THE MAIN FILE 90 | self.main_self = main_self 91 | 92 | #----------------------------------------------------------------------------------------------------- 93 | 94 | # LOADING ICON FILE 95 | self.dialog_icon.set_from_file(f"{icon_path}/function_icons/success.svg") 96 | 97 | # LOADING TITLE TEXT 98 | self.dialog_title.set_text(_("Settings restored successfully")) 99 | 100 | # LOADING SUBTITLE TEXT 101 | subtitle = (_('''The default app settings have been restored successfully.\nIf you are still experiencing any error or bug,\nplease contact us on the project GitHub page''')) 102 | self.dialog_subtitle.set_markup(subtitle) 103 | 104 | # CONNECTING THE START BUTTON TO THE FUNCTION 105 | self.dialog_close_button.connect('clicked', lambda button : self.dialog_window.close()) 106 | 107 | #----------------------------------------------------------------------------------------------------- 108 | 109 | 110 | 111 | 112 | 113 | 114 | # FUNCTION THAT SHOWS THE DIALOG WINDOW 115 | def show_dialog (self): 116 | 117 | #----------------------------------------------------------------------------------------------------- 118 | 119 | # SHOWING THE WINDOW AND HER CHILDS 120 | self.dialog_window.present(self.main_self.main_window) 121 | 122 | #----------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------- /davinci-helper/davinci_helper/functions/gui/start_screen_gui.py: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright 2025 Lorenzo Maiuri 3 | # Published under GPL-3.0 license 4 | # GitHub : https://github.com/H3rz3n/davinci-helper 5 | # 6 | #----------------------------------------------------------------------------------------------------- 7 | 8 | # IMPORTAZIONE DEI MODULI STANDARD 9 | # STANDARD MODULE IMPORT 10 | import sys, gi, os, threading, gettext, locale, subprocess 11 | 12 | # RICHIESTA DELLE VERSIONI DI GTK ED ADWAITA 13 | # REQUESTING THE CHOOSEN VERSION OF GTK AND ADWAITA 14 | gi.require_version('Gtk', '4.0') 15 | gi.require_version('Adw', '1') 16 | 17 | # IMPORTO I MODULI NECESSARI 18 | # IMPORTING THE NECESSARY MODULES 19 | from gi.repository import Gtk, Adw, Gdk, Pango, Gio, GLib 20 | 21 | #----------------------------------------------------------------------------------------------------- 22 | 23 | # NOT STANDARD MODULES IMPORT 24 | from .loading_gui import loading_class 25 | 26 | #----------------------------------------------------------------------------------------------------- 27 | 28 | # DEFINING CSS FILES PATH 29 | css_path = os.path.join("/usr/share/davinci-helper/data/css") 30 | 31 | # DEFINING UI FILES PATH 32 | ui_path = os.path.join("/usr/share/davinci-helper/data/ui") 33 | 34 | # DEFINING ICON FILES PATH 35 | icon_path = os.path.join("/usr/share/davinci-helper/data/icons") 36 | 37 | # DEFINING TRANSLATE FILES PATH 38 | locale_path = os.path.join("/usr/share/davinci-helper/locale") 39 | 40 | # DEFINING SETTINGS FILES PATH 41 | home_dir = os.path.expanduser("~") 42 | settings_path = os.path.join(f"{home_dir}/.config") 43 | 44 | #----------------------------------------------------------------------------------------------------- 45 | 46 | # ASSOCIA IL NOME DEL DIZIONARIO DI TRADUZIONE AL FILE CORRISPONDENTE PER IL MODULO LOCALE 47 | # ASSOCIATE THE NAME OF THE TRANSLATION DICTIONARY TO THIS FILE PATH FOR THE LOCALE MODULE 48 | locale.bindtextdomain('davinci-helper', locale_path) 49 | 50 | # ASSOCIA IL NOME DEL DIZIONARIO DI TRADUZIONE AL FILE CORRISPONDENTE PER IL MODULO GETTEXT 51 | # ASSOCIATE THE NAME OF TRANSLATION DICTIONARY TO THIS FILE PATH FOR THE GETTEXT MODULE 52 | gettext.bindtextdomain('davinci-helper', locale_path) 53 | 54 | # COMUMICO A GETTEXT QUALE FILE USARE PER TRADURRE IL PROGRAMMA 55 | # TELLING GETTEXT WHICH FILE TO USE FOR THE TRANSLATION OF THE APP 56 | gettext.textdomain('davinci-helper') 57 | 58 | # COMUNICO A GETTEXT IL SEGNALE DI TRADUZIONE 59 | # TELLING GETTEXT THE TRANSLATE SIGNAL 60 | _ = gettext.gettext 61 | 62 | #----------------------------------------------------------------------------------------------------- 63 | 64 | 65 | 66 | # DEFINING TEMPLATE PATH 67 | @Gtk.Template(filename=f"{ui_path}/start_screen.ui") 68 | 69 | # CREATING TEMPLATE CLASS TO EDIT WIDGET 70 | class start_screen_class (Gtk.ScrolledWindow): 71 | 72 | #----------------------------------------------------------------------------------------------------- 73 | 74 | # DEFINING TEMPLATE NAME 75 | __gtype_name__ = "start_screen" 76 | 77 | #----------------------------------------------------------------------------------------------------- 78 | 79 | # OBTAINING THE OBJECT AND HIS CHILD FROM THE UI FILE 80 | section_1_container = Gtk.Template.Child("section_1_container") 81 | 82 | # OBTAINING THE OBJECT AND HIS CHILD FROM THE UI FILE 83 | section_1_icon = Gtk.Template.Child("section_1_icon") 84 | 85 | # OBTAINING THE OBJECT AND HIS CHILD FROM THE UI FILE 86 | section_1_title = Gtk.Template.Child("section_1_title") 87 | 88 | # OBTAINING THE OBJECT AND HIS CHILD FROM THE UI FILE 89 | section_1_subtitle_1 = Gtk.Template.Child("section_1_subtitle_1") 90 | 91 | # OBTAINING THE OBJECT AND HIS CHILD FROM THE UI FILE 92 | section_1_function_1_button = Gtk.Template.Child("section_1_function_1_button") 93 | 94 | # OBTAINING THE OBJECT AND HIS CHILD FROM THE UI FILE 95 | section_1_function_2_button = Gtk.Template.Child("section_1_function_2_button") 96 | 97 | # OBTAINING THE OBJECT AND HIS CHILD FROM THE UI FILE 98 | section_1_function_3_button = Gtk.Template.Child("section_1_function_3_button") 99 | 100 | # OBTAINING THE OBJECT AND HIS CHILD FROM THE UI FILE 101 | section_1_function_4_button = Gtk.Template.Child("section_1_function_4_button") 102 | 103 | # OBTAINING THE OBJECT AND HIS CHILD FROM THE UI FILE 104 | section_1_function_5_button = Gtk.Template.Child("section_1_function_5_button") 105 | 106 | # OBTAINING THE OBJECT AND HIS CHILD FROM THE UI FILE 107 | section_1_function_1_button_icon = Gtk.Template.Child("section_1_function_1_button_icon") 108 | 109 | # OBTAINING THE OBJECT AND HIS CHILD FROM THE UI FILE 110 | section_1_function_2_button_icon = Gtk.Template.Child("section_1_function_2_button_icon") 111 | 112 | # OBTAINING THE OBJECT AND HIS CHILD FROM THE UI FILE 113 | section_1_function_3_button_icon = Gtk.Template.Child("section_1_function_3_button_icon") 114 | 115 | # OBTAINING THE OBJECT AND HIS CHILD FROM THE UI FILE 116 | section_1_function_4_button_icon = Gtk.Template.Child("section_1_function_4_button_icon") 117 | 118 | # OBTAINING THE OBJECT AND HIS CHILD FROM THE UI FILE 119 | section_1_function_5_button_icon = Gtk.Template.Child("section_1_function_5_button_icon") 120 | 121 | #----------------------------------------------------------------------------------------------------- 122 | 123 | 124 | 125 | # IMPORTING ATTRIBUTES FROM PARENT CLASS 126 | def __init__(self, main_self): 127 | super().__init__() 128 | 129 | #----------------------------------------------------------------------------------------------------- 130 | 131 | # GETTING THE MAIN WINDOW SELF OBJECT 132 | self.main_self = main_self 133 | 134 | #----------------------------------------------------------------------------------------------------- 135 | 136 | # GETTING THE INFO ABOUT THE SYSTEM THEME 137 | self.style_manager = Adw.StyleManager.get_default() 138 | 139 | # STARTING THE FUNCTION THAT DETECTS THE THEME AND CHAGES THE ICONS EVERY TIME THE THEME IS CHANGED 140 | self.style_manager.connect("notify::dark", lambda *args: self.apply_current_theme()) 141 | 142 | # INITIAL START OF THE DETECT THEME FUNCTION 143 | self.apply_current_theme() 144 | 145 | #----------------------------------------------------------------------------------------------------- 146 | 147 | # LOADING ICON FILE 148 | self.section_1_icon.set_from_file(f"{icon_path}/davinci_helper_icon.svg") 149 | 150 | # LOADING TITLE TEXT 151 | self.section_1_title.set_text(_("Welcome to DaVinci Helper")) 152 | 153 | # LOADING TITLE TEXT 154 | self.section_1_subtitle_1.set_text(_("The best tool for managing DaVinci Resolve on Linux")) 155 | 156 | # CONNECTING THE ICON BUTTON TO THE FUNCTION 157 | self.section_1_function_1_button.connect('clicked', lambda button : self.main_self.show_function_page("function_1")) 158 | 159 | # CONNECTING THE ICON BUTTON TO THE FUNCTION 160 | self.section_1_function_2_button.connect('clicked', lambda button : self.main_self.show_function_page("function_2")) 161 | 162 | # CONNECTING THE ICON BUTTON TO THE FUNCTION 163 | self.section_1_function_3_button.connect('clicked', lambda button : self.main_self.show_function_page("function_3")) 164 | 165 | # CONNECTING THE ICON BUTTON TO THE FUNCTION 166 | self.section_1_function_4_button.connect('clicked', lambda button : self.main_self.show_function_page("function_4")) 167 | 168 | # CONNECTING THE ICON BUTTON TO THE FUNCTION 169 | self.section_1_function_5_button.connect('clicked', lambda button : (self.main_self.choose_default_ui(), self.main_self.show_function_page("function_5"))) 170 | 171 | #----------------------------------------------------------------------------------------------------- 172 | 173 | 174 | 175 | 176 | 177 | # FUNCTION THAT DETECT EVERY THEME CHANGE AND SWITCH THE ICONS ACCORDING TO IT 178 | def apply_current_theme (self): 179 | 180 | #----------------------------------------------------------------------------------------------------- 181 | 182 | # CHECKING IF THE SYSTEM IS USING THE DARK MODE 183 | if self.main_self.style_manager.get_dark(): 184 | 185 | # SETTING THE WHITE ICON FOLDER FOR DARK MODE 186 | mode_path = "dark_mode" 187 | 188 | else : 189 | 190 | # SETTING THE DARK ICON FOLDER FOR WHITE MODE 191 | mode_path = "white_mode" 192 | 193 | #----------------------------------------------------------------------------------------------------- 194 | 195 | # SETTING THE SIDEBAR ICON 196 | self.section_1_function_1_button_icon.set_from_file(f"{icon_path}/{mode_path}/function_1.svg") 197 | 198 | # SETTING THE SIDEBAR ICON 199 | self.section_1_function_2_button_icon.set_from_file(f"{icon_path}/{mode_path}/function_2.svg") 200 | 201 | # SETTING THE SIDEBAR ICON 202 | self.section_1_function_3_button_icon.set_from_file(f"{icon_path}/{mode_path}/function_3.svg") 203 | 204 | # SETTING THE SIDEBAR ICON 205 | self.section_1_function_4_button_icon.set_from_file(f"{icon_path}/{mode_path}/function_4.svg") 206 | 207 | # SETTING THE SIDEBAR ICON 208 | self.section_1_function_5_button_icon.set_from_file(f"{icon_path}/{mode_path}/function_5.svg") 209 | 210 | #----------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------- /davinci-helper/davinci_helper/functions/gui/welcome_dialog_gui.py: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright 2025 Lorenzo Maiuri 3 | # Published under GPL-3.0 license 4 | # GitHub : https://github.com/H3rz3n/davinci-helper 5 | # 6 | 7 | #----------------------------------------------------------------------------------------------------- 8 | 9 | # IMPORTAZIONE DEI MODULI STANDARD 10 | # STANDARD MODULE IMPORT 11 | import sys, gi, os, threading, gettext, locale, subprocess 12 | 13 | # RICHIESTA DELLE VERSIONI DI GTK ED ADWAITA 14 | # REQUESTING THE CHOOSEN VERSION OF GTK AND ADWAITA 15 | gi.require_version('Gtk', '4.0') 16 | gi.require_version('Adw', '1') 17 | 18 | # IMPORTO I MODULI NECESSARI 19 | # IMPORTING THE NECESSARY MODULES 20 | from gi.repository import Gtk, Adw, Gdk, Pango, Gio, GLib 21 | 22 | #----------------------------------------------------------------------------------------------------- 23 | 24 | # DEFINING UI FILES PATH 25 | ui_path = os.path.join("/usr/share/davinci-helper/data/ui") 26 | 27 | # DEFINING ICON FILES PATH 28 | icon_path = os.path.join("/usr/share/davinci-helper/data/icons") 29 | 30 | # DEFINING TRANSLATE FILES PATH 31 | locale_path = os.path.join("/usr/share/davinci-helper/locale") 32 | 33 | # DEFINING SETTINGS FILES PATH 34 | home_dir = os.path.expanduser("~") 35 | settings_path = os.path.join(f"{home_dir}/.config") 36 | 37 | #----------------------------------------------------------------------------------------------------- 38 | 39 | # ASSOCIA IL NOME DEL DIZIONARIO DI TRADUZIONE AL FILE CORRISPONDENTE PER IL MODULO LOCALE 40 | # ASSOCIATE THE NAME OF THE TRANSLATION DICTIONARY TO THIS FILE PATH FOR THE LOCALE MODULE 41 | locale.bindtextdomain('davinci-helper', locale_path) 42 | 43 | # ASSOCIA IL NOME DEL DIZIONARIO DI TRADUZIONE AL FILE CORRISPONDENTE PER IL MODULO GETTEXT 44 | # ASSOCIATE THE NAME OF TRANSLATION DICTIONARY TO THIS FILE PATH FOR THE GETTEXT MODULE 45 | gettext.bindtextdomain('davinci-helper', locale_path) 46 | 47 | # COMUMICO A GETTEXT QUALE FILE USARE PER TRADURRE IL PROGRAMMA 48 | # TELLING GETTEXT WHICH FILE TO USE FOR THE TRANSLATION OF THE APP 49 | gettext.textdomain('davinci-helper') 50 | 51 | # COMUNICO A GETTEXT IL SEGNALE DI TRADUZIONE 52 | # TELLING GETTEXT THE TRANSLATE SIGNAL 53 | _ = gettext.gettext 54 | 55 | #----------------------------------------------------------------------------------------------------- 56 | 57 | 58 | 59 | # FILE ERROR DIALOG CLASS 60 | class welcome_dialog_class (): 61 | 62 | # IMPORTING ATTRIBUTE AND METHODS FROM THE MAIN CLASS "ADW.APPLICATION" USING THE INIT FUNCTION AND THE SUPERCLASS 63 | def __init__(self, main_self): 64 | 65 | #----------------------------------------------------------------------------------------------------- 66 | 67 | # GETTING THE WINDOW CONSTRUCTOR 68 | dialog = Gtk.Builder() 69 | 70 | # TELLING THE BUILDER FUNCTION THE DICTIONARY NAME TO USE FOR THE INTERFACE TRANSLATION 71 | dialog.set_translation_domain('davinci-helper') 72 | 73 | # IMPORTING THE UI FILE THAT REPRESENT THE MAIN WINDOW 74 | dialog.add_from_file(f"{ui_path}/welcome_dialog.ui") 75 | 76 | # OBTAINING THE MAIN WINDOW AND HER CHILD FROM THE UI FILE 77 | self.dialog_window = dialog.get_object("dialog_window") 78 | 79 | #----------------------------------------------------------------------------------------------------- 80 | 81 | # OBTAINING THE OBJECT AND HIS CHILD FROM THE UI FILE 82 | self.dialog_icon = dialog.get_object("dialog_icon") 83 | 84 | # OBTAINING THE OBJECT AND HIS CHILD FROM THE UI FILE 85 | self.dialog_title = dialog.get_object("dialog_title") 86 | 87 | # OBTAINING THE OBJECT AND HIS CHILD FROM THE UI FILE 88 | self.dialog_subtitle_1 = dialog.get_object("dialog_subtitle_1") 89 | 90 | # OBTAINING THE OBJECT AND HIS CHILD FROM THE UI FILE 91 | self.dialog_subtitle_2 = dialog.get_object("dialog_subtitle_2") 92 | 93 | # OBTAINING THE OBJECT AND HIS CHILD FROM THE UI FILE 94 | self.dialog_subtitle_3 = dialog.get_object("dialog_subtitle_3") 95 | 96 | # OBTAINING THE OBJECT AND HIS CHILD FROM THE UI FILE 97 | self.dialog_switch_label = dialog.get_object("dialog_switch_label") 98 | 99 | # OBTAINING THE OBJECT AND HIS CHILD FROM THE UI FILE 100 | self.dialog_switch = dialog.get_object("dialog_switch") 101 | 102 | # OBTAINING THE OBJECT AND HIS CHILD FROM THE UI FILE 103 | self.dialog_close_button = dialog.get_object("dialog_close_button") 104 | 105 | # OBTAINING THE MAIN SELF FROM THE MAIN FILE 106 | self.main_self = main_self 107 | 108 | #----------------------------------------------------------------------------------------------------- 109 | 110 | # LOADING ICON FILE 111 | self.dialog_icon.set_from_file(f"{icon_path}/davinci_helper_icon.svg") 112 | 113 | # LOADING TITLE TEXT 114 | self.dialog_title.set_text(_("Thank you for installing\nDaVinci Helper")) 115 | 116 | # LOADING SUBTITLE TEXT 117 | self.dialog_subtitle_1.set_text(_("Thank you for trusting us and installing DaVinci Helper. We hope that this app will make the management of DaVinci Resolve easier for you.\n")) 118 | 119 | # LOADING SUBTITLE TEXT 120 | self.dialog_subtitle_2.set_text(_("This app is not affiliated in any way with BlackMagic Design, it's only a community project and comes without any guarantees.\n")) 121 | 122 | # LOADING SUBTITLE TEXT 123 | paragraph_3 = (_('''If you find this app useful and want to improve it please consider helping us developing this app or making a donation to the project.''')) 124 | self.dialog_subtitle_3.set_markup(paragraph_3) 125 | 126 | # LOADING SUBTITLE TEXT 127 | self.dialog_switch_label.set_text(_("Don't show again")) 128 | 129 | # CONNECTING THE SWITCH TRIGGER TO THE SETTINGS CHANGE FUNCTION 130 | self.dialog_switch.connect("notify::active", self.change_visibility) 131 | 132 | # CONNECTING THE START BUTTON TO THE FUNCTION 133 | self.dialog_close_button.connect('clicked', lambda button : self.dialog_window.close()) 134 | 135 | #----------------------------------------------------------------------------------------------------- 136 | 137 | 138 | 139 | 140 | 141 | # FUNCTION THAT CHECKS IF IS NECESSARY TO SHOW THE WELCOME DIALOG 142 | def check_splash_screen (self): 143 | 144 | #----------------------------------------------------------------------------------------------------- 145 | 146 | # REAGING ONE LINE AT TIME THE SETTINGS LIST 147 | with open(f"{settings_path}/davinci_helper/davinci_helper_settings", 'r', encoding='utf-8') as file : 148 | 149 | for line in file : 150 | 151 | # CHECKING IF IS NECESSARY TO SHOW THE SPLASH SCREEN 152 | if line.find("SHOW_WELCOME_SPLASH_SCREEN") != -1 and line.find("TRUE") != -1 : 153 | 154 | # STARTING THE SPLASH SCREEN 155 | self.show_dialog() 156 | 157 | # SENDING A SIGNAL TO MAIN FUNCTION DO AVOID CONFLICTS 158 | return True 159 | 160 | #----------------------------------------------------------------------------------------------------- 161 | 162 | 163 | 164 | 165 | 166 | # FUNCTION THAT CHANGES THE SETTINGS WHEN THE SWITCH IS TRIGGERED 167 | def change_visibility (self, switch, status): 168 | 169 | #----------------------------------------------------------------------------------------------------- 170 | 171 | # RESETTING THE COUNTERS 172 | line_number = 0 173 | 174 | # REAGING ONE LINE AT TIME THE SETTINGS LIST 175 | with open(f"{settings_path}/davinci_helper/davinci_helper_settings", 'r', encoding='utf-8') as file : 176 | 177 | # ACQUIRING FILE CONTENT 178 | file_content = file.readlines() 179 | 180 | #----------------------------------------------------------------------------------------------------- 181 | 182 | # READING LINE BY LINE THE FILE DUMP 183 | for line in file_content : 184 | 185 | # FINDING THE VISIBILITY SETTINGS 186 | if line.find("SHOW_WELCOME_SPLASH_SCREEN = TRUE") != -1 : 187 | 188 | # SETTING THE SPLASH SCREEN AS HIDDEN 189 | file_content[line_number] = "SHOW_WELCOME_SPLASH_SCREEN = FALSE\n" 190 | 191 | # EXTING THE CICLE IN A SECURE WAY 192 | break 193 | 194 | elif line.find("SHOW_WELCOME_SPLASH_SCREEN = FALSE") != -1 : 195 | 196 | # SETTING THE SPLASH SCREEN AS VISIBLE 197 | file_content[line_number] = "SHOW_WELCOME_SPLASH_SCREEN = TRUE\n" 198 | 199 | # EXTING THE CICLE IN A SECURE WAY 200 | break 201 | 202 | # ADDING 1 TO THE COUNTER 203 | line_number = line_number + 1 204 | 205 | #----------------------------------------------------------------------------------------------------- 206 | 207 | # OVERWRITING THE PREVIOUS SETTINGS 208 | with open(f"{settings_path}/davinci_helper/davinci_helper_settings", 'w', encoding='utf-8') as file : 209 | 210 | # WRITING THE CONTENT INSIDE THE FILE 211 | file.writelines(file_content) 212 | 213 | #----------------------------------------------------------------------------------------------------- 214 | 215 | 216 | 217 | 218 | 219 | # FUNCTION THAT SHOWS THE DIALOG WINDOW 220 | def show_dialog (self): 221 | 222 | #----------------------------------------------------------------------------------------------------- 223 | 224 | # SHOWING THE WINDOW AND HER CHILDS 225 | self.dialog_window.present(self.main_self.main_window) 226 | 227 | #----------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------- /davinci-helper/davinci_helper/functions/logic/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/H3rz3n/davinci-helper/21cf55b1c91aa4042675cd9b337708b5a4477788/davinci-helper/davinci_helper/functions/logic/__init__.py -------------------------------------------------------------------------------- /davinci-helper/davinci_helper/functions/logic/app_info.py: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright 2025 Lorenzo Maiuri 3 | # Published under GPL-3.0 license 4 | # GitHub : https://github.com/H3rz3n/davinci-helper 5 | # 6 | 7 | #----------------------------------------------------------------------------------------------------- 8 | 9 | 10 | # APP NAME 11 | app_name = "DaVinci Helper" 12 | 13 | # APP VERSION 14 | app_version = "v2.4.7" 15 | 16 | # APP ICON 17 | app_icon = "com.davinci.helper.app" 18 | 19 | # APP WEBSITE 20 | app_website = "https://github.com/H3rz3n/davinci-helper" 21 | 22 | # APP DEVELOPERS 23 | app_developers = "Lorenzo Maiuri" 24 | 25 | # APP CONTRIBUTORS 26 | app_contributors = "" 27 | 28 | # APP TRANSLATOR 29 | app_translator = "Lorenzo Maiuri (ITA)\nCamilla Fioretti (ENG)" 30 | 31 | # APP LICENSE 32 | app_license = "gpl-3.0" 33 | 34 | # APP ISSUE URL 35 | app_issue_url = "https://github.com/H3rz3n/davinci-helper/issues" 36 | 37 | # APP COPYRIGHT 38 | with open(f"/usr/share/davinci-helper/data/LICENSE", 'r', encoding='utf-8') as file : 39 | 40 | # READING THE COPYRIGHT FILE 41 | app_copyright = file.read() 42 | -------------------------------------------------------------------------------- /davinci-helper/davinci_helper/functions/logic/check_update.py: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright 2025 Lorenzo Maiuri 3 | # Published under GPL-3.0 license 4 | # 5 | 6 | #----------------------------------------------------------------------------------------------------- 7 | 8 | # STANDARD MODULES IMPORT 9 | import sys, os, subprocess, threading, gettext, locale, requests 10 | 11 | #----------------------------------------------------------------------------------------------------- 12 | 13 | # NOT STANDARD MODULES IMPORT 14 | from ..gui.settings_management_dialog_gui import setting_management_dialog_class 15 | #----------------------------------------------------------------------------------------------------- 16 | 17 | # NOT STANDARD MODULES IMPORT 18 | from . import app_info 19 | 20 | #----------------------------------------------------------------------------------------------------- 21 | 22 | # DEFINING TRANSLATE FILES PATH 23 | locale_path = os.path.join("/usr/share/davinci-helper/locale") 24 | 25 | #----------------------------------------------------------------------------------------------------- 26 | 27 | # ASSOCIATE THE NAME OF TRANSLATION DICTIONARY TO THIS FILE PATH FOR THE LOCALE MODULE 28 | locale.bindtextdomain('davinci-helper', locale_path) 29 | 30 | # ASSOCIATE THE NAME OF TRANSLATION DICTIONARY TO THIS FILE PATH FOR THE GETTEXT MODULE 31 | gettext.bindtextdomain('davinci-helper', locale_path) 32 | 33 | # TELLING GETTEXT WHICH FILE TO USE FOR THE TRANSLATION OF THE APP 34 | gettext.textdomain('davinci-helper') 35 | 36 | # TELLING GETTEXT THE TRANSLATE SIGNAL 37 | _ = gettext.gettext 38 | 39 | #----------------------------------------------------------------------------------------------------- 40 | 41 | 42 | 43 | # FUNCTION THAT CHECKS IF THERE ARE NEW APP UPDATES 44 | def check_update (): 45 | 46 | #----------------------------------------------------------------------------------------------------- 47 | 48 | # SETTING VARIABLES DEFAULT VALUE 49 | remote_version = "" 50 | remote_changelog = "" 51 | 52 | #----------------------------------------------------------------------------------------------------- 53 | 54 | # SETTING THE ENVIRONMENT VARIABLES 55 | owner = "H3rz3n" 56 | repo = "davinci-helper" 57 | url = f"https://api.github.com/repos/{owner}/{repo}/releases/latest" 58 | 59 | #----------------------------------------------------------------------------------------------------- 60 | 61 | # GETTING IF THERE IS A WORKING INTERNET CONNECTION 62 | ping = subprocess.run("ping -c 1 1.1.1.1", shell=True, capture_output=True, text=True) 63 | 64 | # CHECKING IF THERE IS A WORKING INTERNET CONNECTION 65 | if ping.returncode == 0 : 66 | 67 | # OBTAINING THE LATEST VERSION FROM GITHUB 68 | response = requests.get(url) 69 | 70 | # CHECKING IF THE REQUEST HAD SUCCESS 71 | if response.status_code == 200: 72 | 73 | # EXTRACTING THE RESPONDE INFO IN A DICTIONARY 74 | latest_release = response.json() 75 | 76 | # EXTRACTING THE VERSION NUMBER 77 | remote_version = latest_release["tag_name"] 78 | 79 | # EXTRACTING THE REMOTE CHANGELOG NUMBER 80 | remote_changelog = latest_release["body"] 81 | 82 | 83 | # CHECKING IF THE REMOTE VERSION IS A NEW VERSIONE 84 | if app_info.app_version != remote_version : 85 | 86 | return True, remote_version, remote_changelog, app_info.app_version 87 | 88 | else : 89 | 90 | return False, remote_version, remote_changelog, app_info.app_version 91 | 92 | else : 93 | 94 | return False, remote_version, remote_changelog, app_info.app_version 95 | 96 | #----------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------- /davinci-helper/davinci_helper/functions/logic/function_2.py: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright 2025 Lorenzo Maiuri 3 | # Pubblicato sotto licenza GPL-3.0 4 | # Published under GPL-3.0 license 5 | # 6 | 7 | #----------------------------------------------------------------------------------------------------- 8 | 9 | # ERROR TAB : 10 | # EXIT 1 - IT WAS IMPOSSIBLE TO EXTRACT THE INSTALLER IN THE DESIGNED FOLDER 11 | # EXIT 2 - IT WAS IMPOSSIBLE TO START THE DAVINCI INSTALLATION WIZARD 12 | 13 | #----------------------------------------------------------------------------------------------------- 14 | 15 | # STANDARD MODULES IMPORT 16 | import sys, gi, os, subprocess, threading, locale, gettext 17 | 18 | #----------------------------------------------------------------------------------------------------- 19 | 20 | # DEFINING TRANSLATE FILES PATH 21 | locale_path = os.path.join("/usr/share/davinci-helper/locale") 22 | 23 | #----------------------------------------------------------------------------------------------------- 24 | 25 | # ASSOCIATE THE NAME OF TRANSLATION DICTIONARY TO THIS FILE PATH FOR THE LOCALE MODULE 26 | locale.bindtextdomain('davinci-helper', locale_path) 27 | 28 | # ASSOCIATE THE NAME OF TRANSLATION DICTIONARY TO THIS FILE PATH FOR THE GETTEXT MODULE 29 | gettext.bindtextdomain('davinci-helper', locale_path) 30 | 31 | # TELLING GETTEXT WHICH FILE TO USE FOR THE TRANSLATION OF THE APP 32 | gettext.textdomain('davinci-helper') 33 | 34 | # TELLING GETTEXT THE TRANSLATE SIGNAL 35 | _ = gettext.gettext 36 | 37 | #----------------------------------------------------------------------------------------------------- 38 | 39 | 40 | 41 | 42 | 43 | #----------------------------------------------------------------------------------------------------- 44 | 45 | # ACQUIRING FILE PATH FROM LAST FUNCTION 46 | file_path = sys.argv[1] 47 | 48 | #----------------------------------------------------------------------------------------------------- 49 | 50 | # CHECKING IF THE USER HAS SELECTED THE ZIP OR THE .RUN FILE 51 | if file_path.find(".run") != -1 : 52 | 53 | #----------------------------------------------------------------------------------------------------- 54 | 55 | # STARTING THE INSTALLATION WIZARD 56 | start_wizard = subprocess.run(f"SKIP_PACKAGE_CHECK=1 {file_path}",shell=True, capture_output=True, text=True) 57 | 58 | # CHECKING FOR ERRORS AFTER STARTING THE INSTALLATION WIZARD AND RETURN THEM TO THE MAIN PROGRAM 59 | if start_wizard.returncode != 0 : 60 | 61 | print(_("DEBUG : There was an error launching the DaVinci Resolve installation wizard :")) 62 | print(start_wizard.stdout) 63 | print("") 64 | print(_("Please open an issue report and paste this error code on the project GitHub page :")) 65 | print("") 66 | print("https://github.com/H3rz3n/davinci-helper/issues") 67 | print("") 68 | exit(2) 69 | 70 | else: 71 | 72 | exit(0) 73 | 74 | #----------------------------------------------------------------------------------------------------- 75 | 76 | 77 | 78 | else : 79 | 80 | #----------------------------------------------------------------------------------------------------- 81 | 82 | # ACQUIRING THE USER'S DOWNLOAD DIRECTORY 83 | download_directory = subprocess.run("xdg-user-dir DOWNLOAD", shell=True, capture_output=True, text=True) 84 | 85 | #----------------------------------------------------------------------------------------------------- 86 | 87 | # DEFINING THE INSTALLER EXTRACTION PATH 88 | folder_path = download_directory.stdout.strip() + "/davinci_resolve_installer" 89 | 90 | #----------------------------------------------------------------------------------------------------- 91 | 92 | # CREATING THE FOLDER WHERE TO EXTRACT THE INSTALLER 93 | subprocess.run(f"mkdir -p {folder_path}", shell=True, capture_output=True, text=True) 94 | 95 | #----------------------------------------------------------------------------------------------------- 96 | 97 | # INSTALLER EXTRACTION 98 | unzip = subprocess.run(f"unzip -o {file_path} -d {folder_path}",shell=True, capture_output=True, text=True) 99 | 100 | # CHECKING FOR ERRORS AFTER RUNNING THE PROGRAM AND RETURN THEM TO THE MAIN PROGRAM 101 | if unzip.returncode != 0 : 102 | 103 | print(_("DEBUG : There was an error extracting the DaVinci Resolve installer :")) 104 | print(unzip.stdout) 105 | print("") 106 | print(_("Please open an issue report and paste this error code on the project GitHub page :")) 107 | print("") 108 | print("https://github.com/H3rz3n/davinci-helper/issues") 109 | print("") 110 | exit(1) 111 | 112 | #----------------------------------------------------------------------------------------------------- 113 | 114 | # STARTING THE INSTALLATION WIZARD 115 | start_wizard = subprocess.run(f"cd {folder_path} && SKIP_PACKAGE_CHECK=1 ./*.run",shell=True, capture_output=True, text=True) 116 | 117 | # CHECKING FOR ERRORS AFTER STARTING THE INSTALLATION WIZARD AND RETURN THEM TO THE MAIN PROGRAM 118 | if start_wizard.returncode != 0 : 119 | 120 | # DELETING THE FOLDER WHERE WE EXTRACTED THE INSTALLER 121 | subprocess.run(f"rm -r {folder_path}", shell=True, capture_output=True, text=True) 122 | 123 | print(_("DEBUG : There was an error launching the DaVinci Resolve installation wizard :")) 124 | print(start_wizard.stdout) 125 | print("") 126 | print(_("Please open an issue report and paste this error code on the project GitHub page :")) 127 | print("") 128 | print("https://github.com/H3rz3n/davinci-helper/issues") 129 | print("") 130 | exit(2) 131 | 132 | else: 133 | 134 | # DELETING THE FOLDER WHERE WE EXTRACTED THE INSTALLER 135 | subprocess.run(f"rm -r {folder_path}", shell=True, capture_output=True, text=True) 136 | 137 | exit(0) 138 | 139 | #----------------------------------------------------------------------------------------------------- 140 | 141 | 142 | 143 | 144 | 145 | -------------------------------------------------------------------------------- /davinci-helper/davinci_helper/functions/logic/function_3.py: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright 2025 Lorenzo Maiuri 3 | # Pubblicato sotto licenza GPL-3.0 4 | # Published under GPL-3.0 license 5 | # 6 | 7 | #----------------------------------------------------------------------------------------------------- 8 | 9 | # ERROR TAB : 10 | # EXIT 1 - IT WAS IMPOSSIBLE TO FIND DAVINCI RESOLVE 11 | # EXIT 2 - IT WAS IMPOSSIBLE TO FIND A SUPPORTED VERSION OF DAVINCI 12 | # EXIT 3 - IT WAS IMPOSSIBLE TO CREATE THE SECURE FOLDER 13 | # EXIT 4 - IT WAS IMPOSSIBLE TO MOVE THE LIBS INSIDE THE SECURE FOLDER 14 | 15 | #----------------------------------------------------------------------------------------------------- 16 | 17 | # STANDARD MODULES IMPORT 18 | import sys, os, subprocess, threading, gettext, locale 19 | 20 | #----------------------------------------------------------------------------------------------------- 21 | 22 | # DEFINING TRANSLATE FILES PATH 23 | locale_path = os.path.join("/usr/share/davinci-helper/locale") 24 | 25 | #----------------------------------------------------------------------------------------------------- 26 | 27 | # ASSOCIATE THE NAME OF TRANSLATION DICTIONARY TO THIS FILE PATH FOR THE LOCALE MODULE 28 | locale.bindtextdomain('davinci-helper', locale_path) 29 | 30 | # ASSOCIATE THE NAME OF TRANSLATION DICTIONARY TO THIS FILE PATH FOR THE GETTEXT MODULE 31 | gettext.bindtextdomain('davinci-helper', locale_path) 32 | 33 | # TELLING GETTEXT WHICH FILE TO USE FOR THE TRANSLATION OF THE APP 34 | gettext.textdomain('davinci-helper') 35 | 36 | # TELLING GETTEXT THE TRANSLATE SIGNAL 37 | _ = gettext.gettext 38 | 39 | #----------------------------------------------------------------------------------------------------- 40 | 41 | # FUNCTION THAT CHECKS IF DAVINCI IS INSTALLED AND IF THE HIS VERSION IS SUPPORTED 42 | def check_davinci_version (): 43 | 44 | #----------------------------------------------------------------------------------------------------- 45 | 46 | # ACQUIRING DAVINCI DIRECTORY PATH 47 | davinci_folder = subprocess.run("ls /opt/", shell=True, capture_output=True, text=True ) 48 | 49 | #----------------------------------------------------------------------------------------------------- 50 | 51 | # CHECKING IF DAVINCI RESOLVE IS INSTALLED 52 | if davinci_folder.stdout.find("resolve") == -1 : 53 | 54 | # PRINTING THE ERROR MESSAGE 55 | print(_("DEBUG : It was impossible to find the DaVinci Resolve installation folder in /opt/resolve.")) 56 | print(_("If you haven't done it already, please install DaVinci Resolve and try again.")) 57 | print("") 58 | print(_("Please open an issue report and paste this error code on the project GitHub page :")) 59 | print("") 60 | print("https://github.com/H3rz3n/davinci-helper/issues") 61 | print("") 62 | exit(1) 63 | 64 | #----------------------------------------------------------------------------------------------------- 65 | 66 | # ACQUIRING INFO ABOUT WHICH VERSION OF DAVINCI IS INSTALLED 67 | davinci_info = subprocess.run("cat /opt/resolve/docs/Welcome.txt", shell=True, capture_output=True, text=True ) 68 | 69 | #----------------------------------------------------------------------------------------------------- 70 | 71 | # CHECKING WHICH VERSION OF DAVINCI IS INSTALLED 72 | if davinci_info.stdout.find("18") != -1 : 73 | 74 | # PRINTING WHICH VERSION OF DAVINCI IS IN USE 75 | print(_("DaVinci Resolve 18.x.x was found in the system")) 76 | print("") 77 | 78 | # STARTING THE FUNCTION THAT APPLYS THE DAVINCI 18 POST INSTALLATION PATCH 79 | post_installation_18_19_20() 80 | 81 | elif davinci_info.stdout.find("19") != -1 : 82 | 83 | # STAMPA LA VERSIONE DI DAVINCI IN USO 84 | # PRINTING WHICH VERSION OF DAVINCI IS IN USE 85 | print(_("DaVinci Resolve 19.x.x was found in the system")) 86 | print("") 87 | 88 | # STARTING THE FUNCTION THAT APPLYS THE DAVINCI 19 POST INSTALLATION PATCH 89 | post_installation_18_19_20() 90 | 91 | elif davinci_info.stdout.find("20") != -1 : 92 | 93 | # STAMPA LA VERSIONE DI DAVINCI IN USO 94 | # PRINTING WHICH VERSION OF DAVINCI IS IN USE 95 | print(_("DaVinci Resolve 20.x.x was found in the system")) 96 | print("") 97 | 98 | # STARTING THE FUNCTION THAT APPLYS THE DAVINCI 19 POST INSTALLATION PATCH 99 | post_installation_18_19_20() 100 | 101 | else : 102 | 103 | # PRINTING THE ERROR MESSAGE 104 | print(_("DEBUG : An installed version of DaVinci that is not currently supported was found.")) 105 | print(_("Please visit the GitHub page to find which version of DaVinci Resolve are supported.")) 106 | print("") 107 | print("https://github.com/H3rz3n/davinci-helper") 108 | print("") 109 | exit(2) 110 | 111 | #----------------------------------------------------------------------------------------------------- 112 | 113 | 114 | 115 | 116 | 117 | # FUNCTION THAT APPLYS THE DAVINCI 18 POST INSTALLATION PATCH 118 | def post_installation_18_19_20 (): 119 | 120 | #----------------------------------------------------------------------------------------------------- 121 | 122 | # READING DAVINCI RESOLVE LIBRARIES LIST 123 | lib_davinci = subprocess.run("ls /opt/resolve/libs", shell=True, capture_output=True, text=True ) 124 | 125 | # RESETTING THE COUNTER OF THE LIBRARIES TO REMOVE 126 | lib_to_move = "" 127 | 128 | # CERCO libglib* 129 | # SEARCHING FOR libglib* 130 | if lib_davinci.stdout.find("libglib") != -1 : 131 | lib_to_move = lib_to_move + " libglib*" 132 | 133 | # CERCO libgio* 134 | # SEARCHING FOR libgio* 135 | if lib_davinci.stdout.find("libgio") != -1 : 136 | lib_to_move = lib_to_move + " libgio*" 137 | 138 | # CERCO libgmodule* 139 | # SEARCHING FOR libgmodule* 140 | if lib_davinci.stdout.find("libgmodule") != -1 : 141 | lib_to_move = lib_to_move + " libgmodule*" 142 | 143 | #----------------------------------------------------------------------------------------------------- 144 | 145 | # CHECKING IF THERE ARE LIBRARIES TO REMOVE 146 | if lib_to_move == "" : 147 | 148 | # PRINTING THE MESSAGE THAT THE PROGRAM FAILED TO EXECUTE BECAUSE IT IS NOT NECESSARY 149 | print(_("The libraries were already moved inside the secure folder. There was no need to do anything.")) 150 | print("") 151 | exit(0) 152 | 153 | #----------------------------------------------------------------------------------------------------- 154 | 155 | # REMOVE EXCESS SPACE FROM THE LIST OF THE LIBRARIES TO MOVE 156 | lib_to_move = lib_to_move.lstrip(' ') 157 | 158 | # PRINTING THE WARNING MESSAGGE ABOUT THE LIBRARIES THAT WILL BE MOVED 159 | print(_("The following libraries will be moved in a secure folder :")) 160 | print(lib_to_move) 161 | print("") 162 | 163 | #----------------------------------------------------------------------------------------------------- 164 | 165 | # CREATING A SECURE FOLDER WHERE MOVE THE LIBRARIES TO REMOVE 166 | make_folder = subprocess.run("mkdir /opt/resolve/libs/disabled_libraries", shell=True, capture_output=True, text=True ) 167 | 168 | # CHECKING IF THE DISABLED LIBRARIES FOLDER HAS BEEN CREATED SUCCESSFULLY 169 | if make_folder.returncode != 0 : 170 | 171 | # PRINTING THE ERROR MESSAGE 172 | print(_("DEBUG : It was impossible to create the secure folder where to move the libraries in /opt/resolve/libs/disabled_libraries.")) 173 | print(_("Try again granting the app root permission or create it by yourself.")) 174 | print("") 175 | print(_("Please open an issue report and paste this error code on the project GitHub page :")) 176 | print("") 177 | print(make_folder.stdout) 178 | print("") 179 | print("https://github.com/H3rz3n/davinci-helper/issues") 180 | print("") 181 | exit(3) 182 | 183 | #----------------------------------------------------------------------------------------------------- 184 | 185 | # MOVING THE LIBRARIES TO DISABLED FOLDER 186 | moving_libs = subprocess.run(f"cd /opt/resolve/libs && mv {lib_to_move} /opt/resolve/libs/disabled_libraries", shell=True, capture_output=True, text=True ) 187 | 188 | # CHECKING IF THE DISABLED LIBRARIES FOLDER HAS BEEN CREATED SUCCESSFULLY 189 | if moving_libs.returncode != 0 : 190 | 191 | # PRINTING THE ERROR MESSAGE 192 | print(_("DEBUG : There was an error moving the libraries inside the secure folder in /opt/resolve/libs/disabled_libraries. Try again granting the app root permission or move it by yourself.")) 193 | print("") 194 | print(_("Please open an issue report and paste this error code on the project GitHub page :")) 195 | print("") 196 | print(moving_libs.stdout) 197 | print("") 198 | print("https://github.com/H3rz3n/davinci-helper/issues") 199 | print("") 200 | exit(4) 201 | 202 | else : 203 | 204 | # PRINTING THE MESSAGE THAT THE PROGRAM HAS BEEN EXECUTED SUCCESSFULLY 205 | print(_("The libraries were correctly moved inside the secure folder.")) 206 | print("") 207 | exit(0) 208 | 209 | #----------------------------------------------------------------------------------------------------- 210 | 211 | 212 | 213 | 214 | 215 | # STARTING THE FUNCTION THAT CHECKS IF DAVINCI IS INSTALLED AND IF THE HIS VERSION IS SUPPORTED 216 | check_davinci_version() 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | -------------------------------------------------------------------------------- /davinci-helper/davinci_helper/functions/logic/setting_management.py: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright 2025 Lorenzo Maiuri 3 | # Published under GPL-3.0 license 4 | # 5 | 6 | #----------------------------------------------------------------------------------------------------- 7 | 8 | # STANDARD MODULES IMPORT 9 | import sys, os, subprocess, threading, gettext, locale, pathlib 10 | 11 | #----------------------------------------------------------------------------------------------------- 12 | 13 | # DEFINING TRANSLATE FILES PATH 14 | locale_path = os.path.join("/usr/share/davinci-helper/locale") 15 | 16 | # DEFINING SETTINGS FILES PATH 17 | home_dir = os.path.expanduser("~") 18 | settings_path = os.path.join(f"{home_dir}/.config") 19 | 20 | #----------------------------------------------------------------------------------------------------- 21 | 22 | # ASSOCIATE THE NAME OF TRANSLATION DICTIONARY TO THIS FILE PATH FOR THE LOCALE MODULE 23 | locale.bindtextdomain('davinci-helper', locale_path) 24 | 25 | # ASSOCIATE THE NAME OF TRANSLATION DICTIONARY TO THIS FILE PATH FOR THE GETTEXT MODULE 26 | gettext.bindtextdomain('davinci-helper', locale_path) 27 | 28 | # TELLING GETTEXT WHICH FILE TO USE FOR THE TRANSLATION OF THE APP 29 | gettext.textdomain('davinci-helper') 30 | 31 | # TELLING GETTEXT THE TRANSLATE SIGNAL 32 | _ = gettext.gettext 33 | 34 | #----------------------------------------------------------------------------------------------------- 35 | 36 | 37 | 38 | # FUNCTION THAT CHEKS THE EXISTENCE OF FILES FROM A PREVIOUS INSTALLATION INSIDE THE SETTINGS FOLDER 39 | def check_settings_existence (): 40 | 41 | #----------------------------------------------------------------------------------------------------- 42 | 43 | # ACQUIRING THE EXISTENCE OF THE SETTINGS FILE 44 | flag_settings = pathlib.Path(f'{settings_path}/davinci_helper/davinci_helper_settings') 45 | 46 | #----------------------------------------------------------------------------------------------------- 47 | 48 | # CHECKING THE EXISTENCE SETTINGS FILE 49 | if not flag_settings.exists() : 50 | 51 | # STARTING THE FUNCTION THAT INSTALL THE DEFAULT SETTINGS 52 | install_default_settings() 53 | 54 | else : 55 | 56 | # ACQUIRING IF THE SETTINGS NEED TO BE REPLACED AFTER A MAJOR UPDATE 57 | unsuported, unsupported_version = check_settings_version() 58 | 59 | # CHECKING IF THE SETTINGS NEED TO BE REPLACED FOR A MAJOR UPDATE 60 | if unsuported == True : 61 | 62 | # UPDATING THE SETTINGS TO A NEW VERSION 63 | update_settings(unsupported_version) 64 | 65 | #----------------------------------------------------------------------------------------------------- 66 | 67 | 68 | 69 | 70 | 71 | # FUNCTION THAT CREATE THE SETTINGS FOLDER AND COPY INSIDE IT THE DEFAULT SETTINGS 72 | def install_default_settings (): 73 | 74 | #----------------------------------------------------------------------------------------------------- 75 | 76 | # CREATING THE SETTINGS FOLDER 77 | create_folder = subprocess.run(f"mkdir -p '{settings_path}/davinci_helper'",shell=True, text=True) 78 | 79 | # COPYING THE DEFAULT SETTINGS 80 | copy_default_settings = subprocess.run(f"cp /usr/share/davinci-helper/data/settings/davinci_helper_settings {settings_path}/davinci_helper/",shell=True, text=True) 81 | 82 | #----------------------------------------------------------------------------------------------------- 83 | 84 | 85 | 86 | 87 | 88 | # FUNCTION THAT RESTORES THE DEFAULT SETTINGS 89 | def restore_settings() : 90 | 91 | #----------------------------------------------------------------------------------------------------- 92 | 93 | # DELETING USER SETTINGS 94 | delete_user_settings = subprocess.run(f"rm {settings_path}/davinci_helper/davinci_helper_settings",shell=True, text=True) 95 | 96 | # COPYING THE DEFAULT SETTINGS 97 | copy_default_settings = subprocess.run(f"cp /usr/share/davinci-helper/data/settings/davinci_helper_settings {settings_path}/davinci_helper/",shell=True, text=True) 98 | 99 | #----------------------------------------------------------------------------------------------------- 100 | 101 | 102 | 103 | 104 | 105 | # FUNCTION THAT WILL CHECK IF CURRENTLY IS IN USE AL OLDER AND UNSUPPORTED VERSION OF THE SETTINGS 106 | def check_settings_version (): 107 | 108 | #----------------------------------------------------------------------------------------------------- 109 | 110 | # REAGING ONE LINE AT TIME THE SETTINGS LIST 111 | with open(f"{settings_path}/davinci_helper/davinci_helper_settings", 'r', encoding='utf-8') as file : 112 | 113 | # READING THE FILE 114 | lines = file.readlines() 115 | 116 | # CHECKING WHICH UI IS NECESSARY TO SHOW 117 | if lines[0].find("v2.1") == -1 : 118 | 119 | # RETURNING THAT IS CURRENTLY IN USE AN UNSUPPORTED VERSION 120 | return True, lines[0] 121 | 122 | else : 123 | 124 | # RETURNING THAT IS CURRENTLY IN USE AN SUPPORTED VERSION 125 | return False, lines[0] 126 | 127 | #----------------------------------------------------------------------------------------------------- 128 | 129 | 130 | 131 | 132 | 133 | # FUNCTION THAT WILL UPDATE AN OLD VERSION OF THE SETTINGS TO A NEWER VERSION 134 | def update_settings (unsupported_version): 135 | 136 | #----------------------------------------------------------------------------------------------------- 137 | 138 | # CHECKING FROM WHICH VERSION WE ARE UPDATING 139 | if unsupported_version.find("v1.") : 140 | 141 | # REPLACING ALL THE PREVIEWS SETTINGS BECAUSE THERE IS NOTHING IMPORTANT TO PRESERVE 142 | restore_settings() 143 | 144 | elif unsupported_version.find("v2.0.0") : 145 | 146 | # REPLACING ALL THE PREVIEWS SETTINGS BECAUSE THERE IS NOTHING IMPORTANT TO PRESERVE 147 | restore_settings() 148 | ''' 149 | elif unsupported_version.find("v3.") : 150 | ''' 151 | 152 | #----------------------------------------------------------------------------------------------------- 153 | 154 | 155 | 156 | # FUNCTION THAT WILL CHANGE THE SETTINGS OF THE UI TO SHOW WHEN THE FUNCTION IS CORRECTLY EXECUTED 157 | def flag_ffmpeg_as_installed (): 158 | 159 | #----------------------------------------------------------------------------------------------------- 160 | 161 | # RESETTING THE COUNTERS 162 | line_number = 0 163 | 164 | # REAGING ONE LINE AT TIME THE SETTINGS LIST 165 | with open(f"{settings_path}/davinci_helper/davinci_helper_settings", 'r', encoding='utf-8') as file : 166 | 167 | # ACQUIRING FILE CONTENT 168 | file_content = file.readlines() 169 | 170 | #----------------------------------------------------------------------------------------------------- 171 | 172 | # READING LINE BY LINE THE FILE DUMP 173 | for line in file_content : 174 | 175 | # FINDING THE VISIBILITY SETTINGS 176 | if line.find("FFMPEG_INSTALLED = FALSE") != -1 : 177 | 178 | # SETTING THE SPLASH SCREEN AS VISIBLE 179 | file_content[line_number] = "FFMPEG_INSTALLED = TRUE\n" 180 | 181 | # EXTING THE CICLE IN A SECURE WAY 182 | break 183 | 184 | # ADDING 1 TO THE COUNTER 185 | line_number = line_number + 1 186 | 187 | #----------------------------------------------------------------------------------------------------- 188 | 189 | # OVERWRITING THE PREVIOUS SETTINGS 190 | with open(f"{settings_path}/davinci_helper/davinci_helper_settings", 'w', encoding='utf-8') as file : 191 | 192 | # WRITING THE CONTENT INSIDE THE FILE 193 | file.writelines(file_content) 194 | 195 | #----------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------- /davinci-helper/davinci_helper/functions/logic/utility.py: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright 2025 Lorenzo Maiuri 3 | # Published under GPL-3.0 license 4 | # GitHub : https://github.com/H3rz3n/davinci-helper 5 | # 6 | 7 | #----------------------------------------------------------------------------------------------------- 8 | 9 | # STANDARD MODULES IMPORT 10 | import sys, os, subprocess, threading, gettext, locale, re 11 | 12 | #----------------------------------------------------------------------------------------------------- 13 | 14 | # DEFINING UI FILES PATH 15 | ui_path = os.path.join("/usr/share/davinci-helper/data/ui") 16 | 17 | # DEFINING ICON FILES PATH 18 | icon_path = os.path.join("/usr/share/davinci-helper/data/icons") 19 | 20 | # DEFINING TRANSLATE FILES PATH 21 | locale_path = os.path.join("/usr/share/davinci-helper/locale") 22 | 23 | #----------------------------------------------------------------------------------------------------- 24 | 25 | # ASSOCIATE THE NAME OF THE TRANSLATION DICTIONARY TO THIS FILE PATH FOR THE LOCALE MODULE 26 | locale.bindtextdomain('davinci-helper', locale_path) 27 | 28 | # ASSOCIATE THE NAME OF TRANSLATION DICTIONARY TO THIS FILE PATH FOR THE GETTEXT MODULE 29 | gettext.bindtextdomain('davinci-helper', locale_path) 30 | 31 | # TELLING GETTEXT WHICH FILE TO USE FOR THE TRANSLATION OF THE APP 32 | gettext.textdomain('davinci-helper') 33 | 34 | # TELLING GETTEXT THE TRANSLATE SIGNAL 35 | _ = gettext.gettext 36 | 37 | #----------------------------------------------------------------------------------------------------- 38 | 39 | # FUNCTION THAT CHECK WHICH VERSION OF FEDORA IS INSTALLED 40 | def check_fedora_version (): 41 | 42 | #----------------------------------------------------------------------------------------------------- 43 | 44 | # READING WHICH VERSION OF FEDORA IS INSTALLED 45 | os_info = subprocess.run("hostnamectl", shell=True, capture_output=True, text=True) 46 | 47 | # PRINTING IN THE TERMINAL THE RESULT DEPENDING ON WHETHER THERE ARE ERRORS OR NOT 48 | if os_info.returncode == 0: 49 | 50 | # CHECKING WHIC VERSION OF FEDORA IS USED 51 | if os_info.stdout.find("Fedora Linux 40") != -1 : 52 | 53 | # SETTING THE FOUND OS VERSION 54 | os_version = "Fedora Linux 40" 55 | 56 | # PRINT THE FEDORA VERSION 57 | print(_("You are using a supported OS version : {os_version_placeholder}").format(os_version_placeholder = os_version)) 58 | 59 | elif os_info.stdout.find("Fedora Linux 41") != -1 : 60 | 61 | # SETTING THE FOUND OS VERSION 62 | os_version = "Fedora Linux 41" 63 | 64 | # PRINT THE FEDORA VERSION 65 | print(_("You are using a supported OS version : {os_version_placeholder}").format(os_version_placeholder = os_version)) 66 | 67 | elif os_info.stdout.find("Fedora Linux 42") != -1 : 68 | 69 | # SETTING THE FOUND OS VERSION 70 | os_version = "Fedora Linux 42" 71 | 72 | # PRINT THE FEDORA VERSION 73 | print(_("You are using a supported OS version : {os_version_placeholder}").format(os_version_placeholder = os_version)) 74 | 75 | elif ((os_info.stdout).lower()).find("rawhide") != -1 : 76 | 77 | # SETTING THE FOUND OS VERSION 78 | os_version = "Fedora Linux Rawhide" 79 | 80 | # PRINT THE FEDORA VERSION 81 | print(_("You are using a supported OS version : {os_version_placeholder}").format(os_version_placeholder = os_version)) 82 | 83 | elif os_info.stdout.find("Nobara Linux 40") != -1 : 84 | 85 | # SETTING THE FOUND OS VERSION 86 | os_version = "Nobara Linux 40" 87 | 88 | # PRINT THE FEDORA VERSION 89 | print(_("You are using a supported OS version : {os_version_placeholder}").format(os_version_placeholder = os_version)) 90 | 91 | elif os_info.stdout.find("Nobara Linux 41") != -1 : 92 | 93 | # SETTING THE FOUND OS VERSION 94 | os_version = "Nobara Linux 41" 95 | 96 | # PRINT THE FEDORA VERSION 97 | print(_("You are using a supported OS version : {os_version_placeholder}").format(os_version_placeholder = os_version)) 98 | 99 | elif os_info.stdout.find("Nobara Linux 42") != -1 : 100 | 101 | # SETTING THE FOUND OS VERSION 102 | os_version = "Nobara Linux 42" 103 | 104 | # PRINT THE FEDORA VERSION 105 | print(_("You are using a supported OS version : {os_version_placeholder}").format(os_version_placeholder = os_version)) 106 | 107 | elif os_info.stdout.find("Ultramarine Linux 40") != -1 : 108 | 109 | # SETTING THE FOUND OS VERSION 110 | os_version = "Ultramarine Linux 40" 111 | 112 | # PRINT THE FEDORA VERSION 113 | print(_("You are using a supported OS version : {os_version_placeholder}").format(os_version_placeholder = os_version)) 114 | 115 | elif os_info.stdout.find("Ultramarine Linux 41") != -1 : 116 | 117 | # SETTING THE FOUND OS VERSION 118 | os_version = "Ultramarine Linux 41" 119 | 120 | # PRINT THE FEDORA VERSION 121 | print(_("You are using a supported OS version : {os_version_placeholder}").format(os_version_placeholder = os_version)) 122 | 123 | elif os_info.stdout.find("Ultramarine Linux 42") != -1 : 124 | 125 | # SETTING THE FOUND OS VERSION 126 | os_version = "Ultramarine Linux 42" 127 | 128 | # PRINT THE FEDORA VERSION 129 | print(_("You are using a supported OS version : {os_version_placeholder}").format(os_version_placeholder = os_version)) 130 | 131 | 132 | 133 | 134 | # RETURNS VALUE TO THE SCRIPT 135 | return os_version 136 | 137 | else: 138 | print(_("DEBUG : There was an error reading what OS is installed :")) 139 | print("") 140 | print(os_info.stderr) 141 | print("") 142 | print(_("Please open an issue report and paste this error code on the project GitHub page :")) 143 | print("") 144 | print("https://github.com/H3rz3n/davinci-helper/issues") 145 | print("") 146 | exit(1) 147 | 148 | #----------------------------------------------------------------------------------------------------- 149 | 150 | #----------------------------------------------------------------------------------------------------- 151 | 152 | # FUNCTION THAT ADDS THE RPM FUSION REPOSITORY 153 | def add_repository(): 154 | 155 | #----------------------------------------------------------------------------------------------------- 156 | 157 | # ACQUIRING IF RPM FUSION REPO IS ALREADY INSTALLED 158 | rpm_fusion_repo_check = subprocess.run("dnf repolist", shell=True, capture_output=True, text=True ) 159 | 160 | # CHECKING IF RPM FUSION REPO IS ALREADY INSTALLED 161 | if rpm_fusion_repo_check.stdout.find("rpmfusion-free") != -1 and rpm_fusion_repo_check.stdout.find("rpmfusion-nonfree"): 162 | 163 | # PRINTING THE MESSAGE 164 | print(_("The RPM Fusion repository had already been added to the system, there was no need to add it.")) 165 | print("") 166 | 167 | else : 168 | 169 | # ADDING THE RPM FUSION REPOSITORY 170 | adding_repo = subprocess.run("dnf install -y https://mirrors.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm https://mirrors.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm", shell=True, capture_output=True, text=True ) 171 | 172 | # CHECKING IF THERE WERE ERRORS 173 | if adding_repo.returncode != 0 : 174 | 175 | # PRINTING THE ERROR MESSAGE 176 | print(_("DEBUG : It was impossible to add the RPM Fusion Free and Non-Free repository.")) 177 | print(_("Check your network connection and try again or add it by yourself.")) 178 | print("") 179 | print(adding_repo.stdout) 180 | print("") 181 | print(_("Please open an issue report and paste this error code on the project GitHub page :")) 182 | print("") 183 | print("https://github.com/H3rz3n/davinci-helper/issues") 184 | print("") 185 | exit(2) 186 | 187 | else : 188 | 189 | # PRINTING THE SUCCESSFUL STATE 190 | print(_("The RPM Fusion Free and Non-Free repository have been successfully added.")) 191 | print("") 192 | 193 | #----------------------------------------------------------------------------------------------------- 194 | 195 | #----------------------------------------------------------------------------------------------------- 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | -------------------------------------------------------------------------------- /davinci-helper/generate_pot.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | find davinci_helper data -name "*.py" -o -name "*.ui" -o -name "*.xml" -o -name "*.desktop" | xargs xgettext -o locale/davinci-helper.pot 4 | 5 | # 7) Output finale 6 | echo "Nuovo file POT generato ex novo: $POT_FILE" 7 | -------------------------------------------------------------------------------- /davinci-helper/locale/it/LC_MESSAGES/davinci-helper.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/H3rz3n/davinci-helper/21cf55b1c91aa4042675cd9b337708b5a4477788/davinci-helper/locale/it/LC_MESSAGES/davinci-helper.mo -------------------------------------------------------------------------------- /davinci-helper/pyproject.toml: -------------------------------------------------------------------------------- 1 | [build-system] 2 | requires = ["setuptools", "wheel"] 3 | build-backend = "setuptools.build_meta" 4 | 5 | [project] 6 | name = "davinci-helper" 7 | version = "2.4.0" 8 | description = "A helper app to help you install DaVinci Resolve." 9 | readme = "README.md" 10 | license = {text = "GPL-3.0"} 11 | authors = [ 12 | {name = "Lorenzo Maiuri", email = "lorenzo.maiuri@ik.me.com"} 13 | ] 14 | keywords = ["davinci", "helper", "tool"] 15 | classifiers = [ 16 | "Development Status :: 5 - Production/Stable", 17 | "Topic :: Utilities", 18 | "License :: OSI Approved :: GNU General Public License v3 (GPLv3)", 19 | "Programming Language :: Python :: 3" 20 | ] 21 | dependencies = [] 22 | requires-python = ">=3.8" 23 | 24 | [project.scripts] 25 | davinci-helper = "davinci_helper.main:main" 26 | 27 | [tool.setuptools] 28 | packages = ["davinci_helper", "davinci_helper.functions", "davinci_helper.functions.logic", "davinci_helper.functions.gui"] 29 | 30 | [tool.setuptools.package-data] 31 | "*" = [ 32 | "data/css/style.css", 33 | "data/desktop/*.desktop", 34 | "data/desktop/*.xml", 35 | "data/icons/*.svg", 36 | "data/icons/dark_mode/*.svg", 37 | "data/icons/white_mode/*.svg", 38 | "data/icons/function_icons/*.svg", 39 | "data/icons/main_icons/*.svg", 40 | "data/icons/main_icons/*.jpg", 41 | "data/polkit/*.rules", 42 | "data/polkit/*.policy", 43 | "data/settings/davinci_helper_settings", 44 | "data/ui/*.ui", 45 | "data/LICENSE", 46 | "locale/it/LC_MESSAGES/davinci-helper.mo" 47 | ] 48 | 49 | [tool.setuptools.data-files] 50 | "share/davinci-helper/data/css" = ["data/css/style.css"] 51 | "share/davinci-helper/data/desktop" = [ 52 | "data/desktop/com.davinci.helper.app.desktop", 53 | "data/desktop/com.davinci.helper.app.metainfo.xml", 54 | "data/desktop/com.davinci.helper.app.svg", 55 | "data/desktop/davinci_helper_icon.svg" 56 | ] 57 | "share/davinci-helper/data/icons" = ["data/icons/davinci_helper_icon.svg"] 58 | "share/davinci-helper/data/icons/dark_mode" = [ 59 | "data/icons/dark_mode/function_1.svg", 60 | "data/icons/dark_mode/function_2.svg", 61 | "data/icons/dark_mode/function_3.svg", 62 | "data/icons/dark_mode/function_4.svg", 63 | "data/icons/dark_mode/function_5.svg", 64 | "data/icons/dark_mode/function_6.svg" 65 | ] 66 | "share/davinci-helper/data/icons/white_mode" = [ 67 | "data/icons/white_mode/function_1.svg", 68 | "data/icons/white_mode/function_2.svg", 69 | "data/icons/white_mode/function_3.svg", 70 | "data/icons/white_mode/function_4.svg", 71 | "data/icons/white_mode/function_5.svg", 72 | "data/icons/white_mode/function_6.svg" 73 | ] 74 | "share/davinci-helper/data/icons/function_icons" = [ 75 | "data/icons/function_icons/error.svg", 76 | "data/icons/function_icons/folder.svg", 77 | "data/icons/function_icons/success.svg", 78 | "data/icons/function_icons/warning.svg" 79 | ] 80 | "share/davinci-helper/data/icons/main_icons" = [ 81 | "data/icons/main_icons/function_1.svg", 82 | "data/icons/main_icons/function_2.svg", 83 | "data/icons/main_icons/function_3.svg", 84 | "data/icons/main_icons/function_4.svg", 85 | "data/icons/main_icons/function_5.svg", 86 | "data/icons/main_icons/ffmpeg_icon.jpg" 87 | ] 88 | "share/davinci-helper/data/polkit" = [ 89 | "data/polkit/com.davinci.helper.app.rules", 90 | "data/polkit/com.davinci.helper.app.policy" 91 | ] 92 | "share/davinci-helper/data/settings" = ["data/settings/davinci_helper_settings"] 93 | "share/davinci-helper/data/ui" = [ 94 | "data/ui/check_update_dialog.ui", 95 | "data/ui/converter_dialog.ui", 96 | "data/ui/ffmpeg_install.ui", 97 | "data/ui/file_error_dialog.ui", 98 | "data/ui/file_size_warning_dialog.ui", 99 | "data/ui/function_1.ui", 100 | "data/ui/function_2.ui", 101 | "data/ui/function_3.ui", 102 | "data/ui/function_4.ui", 103 | "data/ui/function_5.ui", 104 | "data/ui/loading.ui", 105 | "data/ui/main.ui", 106 | "data/ui/module_install_error_dialog.ui", 107 | "data/ui/setting_management_dialog.ui", 108 | "data/ui/start_screen.ui", 109 | "data/ui/welcome_dialog.ui" 110 | ] 111 | "share/davinci-helper/data" = ["data/LICENSE"] 112 | "share/davinci-helper/locale/it/LC_MESSAGES" = ["locale/it/LC_MESSAGES/davinci-helper.mo"] 113 | -------------------------------------------------------------------------------- /screenshot/01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/H3rz3n/davinci-helper/21cf55b1c91aa4042675cd9b337708b5a4477788/screenshot/01.png -------------------------------------------------------------------------------- /screenshot/01_alt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/H3rz3n/davinci-helper/21cf55b1c91aa4042675cd9b337708b5a4477788/screenshot/01_alt.png -------------------------------------------------------------------------------- /screenshot/02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/H3rz3n/davinci-helper/21cf55b1c91aa4042675cd9b337708b5a4477788/screenshot/02.png -------------------------------------------------------------------------------- /screenshot/03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/H3rz3n/davinci-helper/21cf55b1c91aa4042675cd9b337708b5a4477788/screenshot/03.png -------------------------------------------------------------------------------- /screenshot/04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/H3rz3n/davinci-helper/21cf55b1c91aa4042675cd9b337708b5a4477788/screenshot/04.png -------------------------------------------------------------------------------- /screenshot/05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/H3rz3n/davinci-helper/21cf55b1c91aa4042675cd9b337708b5a4477788/screenshot/05.png -------------------------------------------------------------------------------- /screenshot/06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/H3rz3n/davinci-helper/21cf55b1c91aa4042675cd9b337708b5a4477788/screenshot/06.png -------------------------------------------------------------------------------- /screenshot/git_hub_thumbnail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/H3rz3n/davinci-helper/21cf55b1c91aa4042675cd9b337708b5a4477788/screenshot/git_hub_thumbnail.png -------------------------------------------------------------------------------- /screenshot/git_hub_wiki_thumbnail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/H3rz3n/davinci-helper/21cf55b1c91aa4042675cd9b337708b5a4477788/screenshot/git_hub_wiki_thumbnail.png --------------------------------------------------------------------------------