├── .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 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
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 |
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 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/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 |
17 |
18 |
19 | true
20 |
21 |
22 | true
23 |
24 |
25 | true
26 |
27 |
28 | false
29 |
30 |
31 | center
32 |
33 |
34 | center
35 |
36 |
37 | true
38 |
39 |
40 | true
41 |
42 |
43 | Loading_Grid
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 | center
52 |
53 |
54 | center
55 |
56 |
57 | Loading_Spinner
58 |
59 |
60 |
61 |
62 |
63 | 0
64 |
65 |
66 | 0
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 | true
81 |
82 |
83 | true
84 |
85 |
86 | Loading_Text_Container
87 |
88 |
89 |
90 |
91 |
92 | 0
93 |
94 |
95 | 1
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 | center
107 |
108 |
109 | true
110 |
111 |
112 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
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 |
17 |
18 |
19 | true
20 |
21 |
22 | true
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 | true
36 |
37 |
38 | false
39 |
40 |
41 | center
42 |
43 |
44 | center
45 |
46 |
47 | true
48 |
49 |
50 | true
51 |
52 |
53 | Start_Screen_Section_1_Grid
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 | Start_Screen_Section_1_Icon
62 |
63 |
64 |
65 |
66 |
67 | 0
68 |
69 |
70 | 0
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 | center
85 |
86 |
87 | true
88 |
89 |
90 |
96 |
97 |
98 |
99 |
100 |
101 | 0
102 |
103 |
104 | 1
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 | center
119 |
120 |
121 | true
122 |
123 |
124 |
130 |
131 |
132 |
133 |
134 |
135 | 0
136 |
137 |
138 | 2
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 | horizontal
153 |
154 |
155 | center
156 |
157 |
158 | Start_Screen_Section_1_Button_Box_1
159 |
160 |
161 |
162 |
163 |
164 | 0
165 |
166 |
167 | 3
168 |
169 |
170 |
171 |
172 |
173 |
174 |
175 |
176 |
177 | Start_Screen_Section_1_Button
178 |
179 |
180 |
181 |
182 |
183 |
184 |
185 |
186 |
187 |
188 |
189 |
190 |
191 | Start_Screen_Section_1_Button
192 |
193 |
194 |
195 |
196 |
197 |
198 |
199 |
200 |
201 |
202 |
203 |
204 |
205 | Start_Screen_Section_1_Button
206 |
207 |
208 |
209 |
210 |
211 |
212 |
213 |
214 |
215 |
216 |
217 |
218 |
219 | Start_Screen_Section_1_Button
220 |
221 |
222 |
223 |
224 |
225 |
226 |
227 |
228 |
229 |
230 |
231 |
232 |
233 | Start_Screen_Section_1_Button
234 |
235 |
236 |
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 |
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
--------------------------------------------------------------------------------