A bunch of improvements (#250)

This commit is contained in:
0xMRTT 2022-08-24 10:56:35 +02:00 committed by GitHub
commit 33603cb1b0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
16 changed files with 172 additions and 81 deletions

View file

@ -7,7 +7,6 @@ global:
sudo ninja -C builddir install
user:
meson builddiruser
meson configure builddiruser -Dprefix="$(pwd)/builddiruser/testdir"
ninja -C builddiruser install
ninja -C builddiruser run
meson builddir --prefix="$(shell pwd)/builddir/testdir" --wipe
ninja -C builddir install
ninja -C builddir run

View file

@ -21,7 +21,6 @@ read -p "Do you want to install Python requirements? (yes, no): " answer
if [[ "$answer" == "yes" ]]; then
pip3 install --user -r requirements.txt
pip3 install $(pwd)/monet/material_color_utilities_python-0.1.0-py3-none-any.whl
elif [[ "$answer" == "no" ]]; then
echo "Skipping requirements installation"
fi
@ -31,7 +30,7 @@ rm -r builddir
echo "Rebuilding"
meson builddir
meson configure builddir -Dprefix="$(pwd)/builddir/testdir"
meson configure builddir -Dprefix="$(pwd)/builddir/testdir" -Dbuildtype=debug
ninja -C builddir install
echo "Running"

View file

@ -13,9 +13,9 @@ python = import('python')
# Project information
PROJECT_URL = 'https://github.com/GradienceTeam/Gradience'
BUGTRACKER_URL = 'https://github.com/tfuxu/themeteor/issues'
BUGTRACKER_URL = 'https://github.com/GradienceTeam/Gradience/issues'
HELP_URL = 'https://github.com/orgs/GradienceTeam/discussions'
TRANSLATE_URL = 'https://www.transifex.com/Gradienceteam/Gradience'
TRANSLATE_URL = 'https://hosted.weblate.org/projects/GradienceTeam/gradience/'
# Constants
PROJECT_RDNN_NAME = 'com.github.GradienceTeam.Gradience'

View file

@ -1,3 +1,5 @@
# __init__.py
#
# Change the look of Adwaita, with ease
# Copyright (C) 2022 Gradience Team
#
@ -12,11 +14,4 @@
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
import re
from anyascii import anyascii
def to_slug_case(non_slug):
return re.sub(r"[^0-9a-z]+", "-", anyascii(non_slug).lower()).strip("-")
# along with this program. If not, see <https://www.gnu.org/licenses/>.

View file

@ -1,7 +1,7 @@
from gi.repository import Gtk, Gdk, Adw
from .constants import rootdir
from . import to_slug_case
from .modules.utils import to_slug_case, buglog
import json
import os
@ -29,7 +29,7 @@ class GradienceBuiltinPresetRow(Adw.ActionRow):
@Gtk.Template.Callback()
def on_apply_button_clicked(self, *_args):
print("apply")
buglog("apply")
self.app.load_preset_from_resource(
f"{rootdir}/presets/"

View file

@ -19,9 +19,10 @@
rootdir = '/com/github/GradienceTeam/Gradience'
app_id = '@APP_ID@'
rel_ver = '@RELEASE_VER@'
version = '@VERSION@'
build_type = '@BUILD_TYPE@'
project_url = '@PROJECT_URL@'
bugtracker_url = '@BUGTRACKER_URL@'
help_url = '@HELP_URL@'
trnaslate_url = '@TRANSLATE_URL@'
translate_url = '@TRANSLATE_URL@'

View file

@ -19,7 +19,6 @@
import sys
import json
import os
import re
import traceback
import gi
@ -32,10 +31,10 @@ from .palette_shades import GradiencePaletteShades
from .option import GradienceOption
from .app_type_dialog import GradienceAppTypeDialog
from .custom_css_group import GradienceCustomCSSGroup
from .constants import rootdir, app_id, version, bugtracker_url, help_url, project_url
from .constants import rootdir, app_id, rel_ver, version, bugtracker_url, help_url, project_url
from .welcome import GradienceWelcomeWindow
from .presets_manager_window import GradiencePresetWindow
from . import to_slug_case
from .modules.utils import to_slug_case, buglog
class GradienceApplication(Adw.Application):
@ -73,7 +72,7 @@ class GradienceApplication(Adw.Application):
self.settings.get_value("disabled-plugins"))
self.first_run = self.settings.get_boolean("first-run")
print(f"disabled plugins: {self.disabled_plugins}")
buglog(f"disabled plugins: {self.disabled_plugins}")
self.style_manager = Adw.StyleManager.get_default()
@ -127,11 +126,11 @@ class GradienceApplication(Adw.Application):
)
if self.first_run:
print("first run")
buglog("first run")
welcome = GradienceWelcomeWindow(self.win)
welcome.present()
else:
print("normal run")
buglog("normal run")
self.win.present()
def open_preset_directory(self, *_args):
@ -156,7 +155,7 @@ class GradienceApplication(Adw.Application):
)
def load_preset_from_file(self, preset_path):
print("load preset from file", preset_path)
buglog("load preset from file", preset_path)
preset_text = ""
with open(preset_path, "r", encoding="utf-8") as file:
preset_text = file.read()
@ -631,19 +630,22 @@ class GradienceApplication(Adw.Application):
# Translators: This is a place to put your credits (formats: "Name
# https://example.com" or "Name <email@example.com>", no quotes)
# and is not meant to be translated literally.
# TODO: Automate this process using CI, because not everyone knows about this
translator_credits="""Maxime V https://www.transifex.com/user/profile/Adaoh/
FineFindus https://github.com/FineFindus
Karol Lademan https://www.transifex.com/user/profile/karlod/
Monty Monteusz https://www.transifex.com/user/profile/MontyQIQI/
Renato Corrêa https://www.transifex.com/user/profile/renatocrrs/
Aggelos Tselios https://www.transifex.com/user/profile/AndroGR/
David "Daudix UFO" Lapshin https://github.com/daudix-UFO'
David "Daudix UFO" Lapshin https://github.com/daudix-UFO
0xMRTT https://github.com/0xMRTT
tfuxu https://github.com/tfuxu
Juanjo Cillero https://www.transifex.com/user/profile/renux918/
Taylan Tatlı https://www.transifex.com/user/profile/TaylanTatli34/""",
copyright="© 2022 Gradience Team",
license_type=Gtk.License.GPL_3_0,
version=version,
release_notes_version=rel_ver,
release_notes=_("""
<ul>
<li>Add AdwViewSwitcher in the header bar.</li>
@ -708,7 +710,7 @@ This app is written in Python and uses GTK 4 and libadwaita.
self.set_accels_for_action(f"app.{name}", shortcuts)
def reload_plugins(self):
print("reload plugins")
buglog("reload plugins")
self.win.plugins_group = self.win.plugins_list.to_group()
def show_adwaita_demo(self, *_args):

View file

@ -37,7 +37,16 @@ configure_file(
configure_file(
input: 'constants.py.in',
output: 'constants.py',
configuration: conf,
configuration: configuration_data({
'APP_ID': APPLICATION_ID,
'RELEASE_VER': meson.project_version(),
'VERSION': meson.project_version() + VERSION_SUFFIX,
'BUILD_TYPE': get_option('buildtype'),
'PROJECT_URL': PROJECT_URL,
'BUGTRACKER_URL': BUGTRACKER_URL,
'HELP_URL': HELP_URL,
'TRANSLATE_URL': TRANSLATE_URL
}),
install: true,
install_dir: PY_INSTALLDIR.get_install_dir() / 'gradience',
)
@ -71,4 +80,12 @@ gradience_sources = [
]
PY_INSTALLDIR.install_sources(gradience_sources, subdir: 'gradience')
#install_data(gradience_sources, install_dir: MODULE_DIR)
#install_data(gradience_sources, install_dir: MODULE_DIR)
# Install modules
gradience_modules = [
'modules/__init__.py',
'modules/utils.py'
]
PY_INSTALLDIR.install_sources(gradience_modules, subdir: 'gradience/modules')

17
src/modules/__init__.py Normal file
View file

@ -0,0 +1,17 @@
# __init__.py
#
# Change the look of Adwaita, with ease
# Copyright (C) 2022 Gradience Team
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.

35
src/modules/utils.py Normal file
View file

@ -0,0 +1,35 @@
# utils.py
#
# Change the look of Adwaita, with ease
# Copyright (C) 2022 Gradience Team
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
import re
from anyascii import anyascii
from gradience.constants import build_type
def to_slug_case(non_slug):
return re.sub(r"[^0-9a-z]+", "-", anyascii(non_slug).lower()).strip("-")
# Use it instead of print(), so there isn't any output in stdout if Gradience was build in release mode
# TODO: Can be replaced with `logging` module [https://docs.python.org/3/library/logging.html] in future
def buglog(*args):
if build_type == "debug":
message = ""
for obj in args:
message += str(obj)
return print(f"[DEBUG]: {message}")

View file

@ -1,6 +1,24 @@
# plugin_row.py
#
# Change the look of Adwaita, with ease
# Copyright (C) 2022 Gradience Team
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
from gi.repository import Gtk, Gdk, Adw
from .modules.utils import buglog
from .constants import rootdir
@ -21,14 +39,14 @@ class GradiencePluginRow(Adw.ActionRow):
@Gtk.Template.Callback()
def on_settings_plugin_clicked(self, *_args):
print("settings")
buglog("settings")
@Gtk.Template.Callback()
def on_remove_plugin_clicked(self, *_args):
print("removed")
buglog("removed")
@Gtk.Template.Callback()
def on_switch_toggled(self, *_args):
print("toggled")
buglog("toggled")
Gtk.Application.get_default().reload_plugins()

View file

@ -16,14 +16,16 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
import sys
import os
from pathlib import Path
import importlib
import pkgutil
from .plugin_row import GradiencePluginRow
from gi.repository import Gtk, Adw, Gio, Gdk
import sys
from pathlib import Path
from .modules.utils import buglog
from .plugin_row import GradiencePluginRow
class GradiencePluginsList:
@ -41,7 +43,7 @@ class GradiencePluginsList:
for plugin_id, plugin in self.discoverd_plugins.items():
self.plugins[plugin_id] = plugin.GradiencePlugin()
print(self.plugins)
buglog(self.plugins)
def load_all_custom_settings(self, settings):
for plugin_id, plugin in self.plugins.items():

View file

@ -1,7 +1,7 @@
from gi.repository import Gtk, Gdk, Adw
from .constants import rootdir
from . import to_slug_case
from .modules.utils import to_slug_case
import json
import os
@ -36,7 +36,7 @@ class GradiencePresetRow(Adw.ActionRow):
@Gtk.Template.Callback()
def on_apply_button_clicked(self, *_args):
print("apply")
buglog("apply")
self.app.load_preset_from_file(os.path.join(
os.environ.get("XDG_CONFIG_HOME",

View file

@ -24,6 +24,8 @@ import traceback
from gi.repository import GLib
from .modules.utils import buglog
class RunAsync(threading.Thread):
def __init__(self, task_func, callback=None, *args, **kwargs):
@ -44,12 +46,12 @@ class RunAsync(threading.Thread):
result = None
error = None
print(f"Running async job [{self.task_func}].")
buglog(f"Running async job [{self.task_func}].")
try:
result = self.task_func(*args, **kwargs)
except Exception as exception:
print("Error while running async job: "
buglog("Error while running async job: "
f"{self.task_func}\nException: {exception}")
error = exception
@ -57,6 +59,6 @@ class RunAsync(threading.Thread):
traceback.print_tb(trace)
traceback_info = '\n'.join(traceback.format_tb(trace))
print([str(exception), traceback_info])
buglog([str(exception), traceback_info])
self.source_id = GLib.idle_add(self.callback, result, error)
return self.source_id

View file

@ -16,10 +16,13 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
from gi.repository import Gtk, Adw, Gio, Gdk
from .constants import rootdir
import time
from gi.repository import Gtk, Adw, Gio, Gdk
from .run_async import RunAsync
from .modules.utils import buglog
from .constants import rootdir
@Gtk.Template(resource_path=f"{rootdir}/ui/welcome.ui")
@ -115,15 +118,15 @@ class GradienceWelcomeWindow(Adw.Window):
quit()
def check_adw_gtk3(self):
print("check if adw-gtk3 installed")
buglog("check if adw-gtk3 installed")
return True
def adw_gtk3(self):
if not self.check_adw_gtk3(): # install
print("install adw-gtk3")
buglog("install adw-gtk3")
def configure_system(self):
print("confiure system")
buglog("configure system")
def install_runner(self, widget):
def set_completed(result, error=False):

View file

@ -1,45 +1,40 @@
# window.py
#
# Copyright 2022 Gradience Team
# Change the look of Adwaita, with ease
# Copyright (C) 2022 Gradience Team
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so, subject to
# the following conditions:
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY
# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
# Except as contained in this notice, the name(s) of the above copyright
# holders shall not be used in advertising or otherwise to promote the sale,
# use or other dealings in this Software without prior written
# authorization.
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
import os
from gi.repository import Gtk, Adw, Gio, Gdk
from svglib.svglib import svg2rlg
from reportlab.graphics import renderPM
from material_color_utilities_python import *
from .error import GradienceError
from .settings_schema import settings_schema
from .palette_shades import GradiencePaletteShades
from .option import GradienceOption
from .app_type_dialog import GradienceAppTypeDialog
from .custom_css_group import GradienceCustomCSSGroup
from material_color_utilities_python import *
from .constants import rootdir, app_id, build_type
from .presets_manager_window import GradiencePresetWindow
from .plugins_list import GradiencePluginsList
from svglib.svglib import svg2rlg
from reportlab.graphics import renderPM
import os
from .modules.utils import buglog
from .constants import rootdir, app_id, build_type
@Gtk.Template(resource_path=f"{rootdir}/ui/window.ui")
@ -98,32 +93,38 @@ class GradienceMainWindow(Adw.ApplicationWindow):
self.get_default_wallpaper()
# FIXME: This function works only when build using meson, because Flatpak can't access host's dconf with current config/impl
def get_default_wallpaper(self):
background_settings = Gio.Settings("org.gnome.desktop.background")
if self.style_manager.get_dark():
self.monet_image_file = background_settings.get_string(
picture_uri = background_settings.get_string(
"picture-uri-dark")
else:
self.monet_image_file = background_settings.get_string(
"picture-uri-dark")
self.monet_image_file = Gio.File.new_for_uri(self.monet_image_file)
picture_uri = background_settings.get_string(
"picture-uri")
buglog(picture_uri)
self.monet_image_file = Gio.File.new_for_uri(picture_uri)
image_basename = self.monet_image_file.get_basename()
buglog(image_basename)
self.monet_file_chooser_button.set_label(image_basename)
self.monet_image_file = self.monet_image_file.get_path()
self.on_apply_button()
self.monet_file_chooser_button.set_tooltip_text(self.monet_image_file)
buglog(self.monet_image_file)
#self.on_apply_button() # Comment out for now, because it always shows that annoying toast on startup
def on_file_picker_button_clicked(self, *args):
self.monet_file_chooser_dialog.show()
def __close_window(self, widegt):
if self.get_application().is_dirty:
print("app is dirty")
buglog("app is dirty")
def on_monet_file_chooser_response(self, widget, response):
if response == Gtk.ResponseType.ACCEPT:
self.monet_image_file = self.monet_file_chooser_dialog.get_file()
image_basename = self.monet_image_file.get_basename()
self.monet_file_chooser_button.set_label(image_basename)
self.monet_file_chooser_button.set_tooltip_text(self.monet_image_file)
self.monet_file_chooser_dialog.hide()
if response == Gtk.ResponseType.ACCEPT:
@ -217,7 +218,7 @@ class GradienceMainWindow(Adw.ApplicationWindow):
renderPM.drawToFile(drawing, self.monet_image_file, fmt='PNG')
if self.monet_image_file.endswith(".xml"):
print("XML WIP")
buglog("XML WIP")
try:
self.monet_img = Image.open(self.monet_image_file)