Skip to content

Commit

Permalink
Remove deprecated TreeView instead of GTK4 ColumnView
Browse files Browse the repository at this point in the history
  • Loading branch information
dmzoneill committed May 8, 2024
1 parent 966ecd7 commit 041cee4
Show file tree
Hide file tree
Showing 29 changed files with 857 additions and 816 deletions.
39 changes: 20 additions & 19 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,16 @@ package_version := $(shell cat control | grep Version | sed 's/Version: //')
DEB_FILENAME := $(deb_package_name)_$(package_version).deb
RPM_FILENAME := $(rpm_package_name)-$(package_version)

clearlog:
required:
pip3 install -r requirements.txt


clearlog: required
truncate -s 0 d_fake_seeder/log.log

lint: clearlog
@which black > /dev/null || \
( \
pip3 install black flake8 isort \
)

echo "Running lint commands..."
touch .last_run
black -v --line-length=90 .
flake8 --max-line-length=90
find . -iname "*.py" -exec isort --profile=black --df {} \;
Expand All @@ -39,7 +40,7 @@ ui-build: icons
sed -i 's/xml:base="[^"]*"//g' d_fake_seeder/ui/generated.xml

clean_settings:
jq '.torrents = {}' d_fake_seeder/config/settings.json > temp.json && mv temp.json d_fake_seeder/config/settings.json
jq '.torrents = {}' ~/.config/dfakeseeder/settings.json > temp.json && mv temp.json ~/.config/dfakeseeder/settings.json

run: ui-build
-ln -s $$(pwd)/d_fake_seeder/dfakeseeder.desktop ~/.local/share/applications/dfakeseeder.desktop 2>/dev/null
Expand All @@ -61,6 +62,18 @@ run-debug: ui-build
}
$(MAKE) clean_settings;

clean:
- sudo rm -rvf log.log
- sudo rm -rvf d_fake_seeder/log.log
- sudo rm -rvf dist
- sudo rm -rvf .pytest_cache
- sudo find . -type d -iname __pycache__ -exec rm -rf {} \;
- sudo rm -rvf debbuild
- sudo rm -rvf rpmbuild
- sudo rm -rvf *.deb
- sudo rm -rvf *.rpm
$(MAKE) lint

valgrind: ui-build
-ln -s $$(pwd)/d_fake_seeder/dfakeseeder.desktop ~/.local/share/applications/dfakeseeder.desktop 2>/dev/null
-ps aux | grep "dfakeseeder.py" | awk '{print $$2}' | xargs kill -9
Expand Down Expand Up @@ -143,18 +156,6 @@ docker-hub: xhosts
docker-ghcr: xhosts
docker run --rm --net=host --env="DISPLAY" --volume="\$$HOME/.Xauthority:/root/.Xauthority:rw" --volume="/tmp/.X11-unix:/tmp/.X11-unix" -it ghcr.io/dfakeseeder

clean:
- sudo rm -rvf log.log
- sudo rm -rvf d_fake_seeder/log.log
- sudo rm -rvf dist
- sudo rm -rvf .pytest_cache
- sudo find . -type d -iname __pycache__ -exec rm -rf {} \;
- sudo rm -rvf debbuild
- sudo rm -rvf rpmbuild
- sudo rm -rvf *.deb
- sudo rm -rvf *.rpm
$(MAKE) lint

translatepy:
xgettext --verbose --language=Python --keyword=_ --output=d_fake_seeder/locale/dfakeseederpy.pot d_fake_seeder/dfakeseeder.py
#msginit --no-translator --output-file=d_fake_seeder/locale/en_US/LC_MESSAGES/en_USpy.po --input=d_fake_seeder/locale/dfakeseederpy.pot --locale=en_US
Expand Down
File renamed without changes.
48 changes: 48 additions & 0 deletions d_fake_seeder/lib/component/component.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
from abc import ABC, abstractmethod

from lib.logger import logger


class Component(ABC):
@staticmethod
def to_str(bind, from_value):
return str(from_value)

@abstractmethod
def handle_model_changed(self, source, data_obj, data_changed):
logger.debug(
"Component Model changed",
extra={"class_name": self.__class__.__name__},
)

@abstractmethod
def handle_attribute_changed(self, source, key, value):
logger.debug(
"Component Attribute changed",
extra={"class_name": self.__class__.__name__},
)

@abstractmethod
def handle_settings_changed(self, source, data_obj, data_changed):
logger.debug(
"Component settings changed",
extra={"class_name": self.__class__.__name__},
)

@abstractmethod
def update_view(self, model, torrent, attribute):
logger.debug(
"Component update view",
extra={"class_name": self.__class__.__name__},
)

def set_model(self, model):
self.model = model
# subscribe to model changes
self.model.connect("data-changed", self.handle_model_changed)

def model_selection_changed(self, source, model, torrent):
logger.debug(
"Model selection changed",
extra={"class_name": self.__class__.__name__},
)
Original file line number Diff line number Diff line change
@@ -1,16 +1,18 @@
import logging

import gi
from lib.component.component import Component
from lib.logger import logger
from lib.settings import Settings
from lib.torrent.model.attributes import Attributes

gi.require_version("Gdk", "4.0")
gi.require_version("Gtk", "4.0")

from gi.repository import GLib, Gtk # noqa
from gi.repository import GLib, GObject, Gtk # noqa


class Notebook:
class Notebook(Component):
def __init__(self, builder, model):
logger.info(
"Notebook view startup",
Expand All @@ -19,11 +21,8 @@ def __init__(self, builder, model):
self.builder = builder
self.model = model

self.selected_path = None

self.notebook = self.builder.get_object("notebook1")
self.torrents_treeview = self.builder.get_object("treeview1")
self.peers_treeview = self.builder.get_object("peers_treeview")
self.peers_columnview = self.builder.get_object("peers_columnview")
self.log_scroll = self.builder.get_object("log_scroll")
self.log_viewer = self.builder.get_object("log_viewer")
self.setup_log_viewer_handler(self.log_viewer)
Expand Down Expand Up @@ -55,12 +54,6 @@ def __init__(self, builder, model):
# self.notebook.page_num(label_widget.get_parent())
# )

# Connect the signals
self.selection = self.torrents_treeview.get_selection()
self.selection.connect("changed", self.on_selection_changed)
# self.torrents_treeview.connect("row-activated",
# self.on_row_activated)

# subscribe to settings changed
self.settings = Settings.get_instance()
self.settings.connect("attribute-changed", self.handle_settings_changed)
Expand All @@ -69,9 +62,6 @@ def __init__(self, builder, model):
self.status_grid_child = None
self.options_grid_children = []

def set_model(self, model):
self.model = model

# def on_size_allocate(self, widget, allocation):
# adj = self.log_scroll.get_vadjustment()
# adj.set_value(adj.get_upper() - adj.get_page_size())
Expand Down Expand Up @@ -99,62 +89,18 @@ def update_text_buffer(self, text_view, msg):
start_iter = buffer.get_iter_at_line(end_line - 1000)
buffer.delete(start_iter, buffer.get_start_iter())

def get_selected_torrent(self):
logger.info(
"Notebook get selected torrent",
extra={"class_name": self.__class__.__name__},
)

# Get the currently selected item
selection = self.torrents_treeview.get_selection()
lmodel, tree_iter = selection.get_selected()

if tree_iter is None:
return

# Get the index of the selected item
index = int(lmodel.get_path(tree_iter).get_indices()[0]) + 1

# Remove the torrent from self.model.torrent_list
for torrent in self.model.torrent_list:
if torrent.id == index:
return torrent

return False

def on_selection_changed(self, selection):
logger.debug(
"Notebook selection changed",
extra={"class_name": self.__class__.__name__},
)
model, iter = selection.get_selected()
if iter is not None:
self.selected_path = model.get_path(iter)

if self.selected_path is None:
return

if iter is None:
return

torrent = model.get_path(iter).get_indices()[0]
if torrent is not None:
self.update_notebook_status(torrent)
self.update_notebook_options(torrent)
self.update_notebook_peers(torrent)

def update_notebook_peers(self, id):
logger.info(
"Notebook update peers",
extra={"class_name": self.__class__.__name__},
)
torrent = self.model.get_liststore_item(id)

store = self.peers_treeview.get_model()
store = self.peers_columnview.get_model()

if store is None:
store = Gtk.ListStore(str, str, float, float, float)
self.peers_treeview.set_model(store)
self.peers_columnview.set_model(store)

num_rows = len(store)
num_peers = len(torrent.get_seeder().peers)
Expand All @@ -171,7 +117,7 @@ def update_notebook_peers(self, id):
row = [str(peer), client, 0.0, 0.0, 0.0]
store.append(row)

self.peers_treeview.set_model(store)
self.peers_columnview.set_model(store)

def update_notebook_options(self, torrent):
grid = self.builder.get_object("options_grid")
Expand All @@ -181,21 +127,14 @@ def update_notebook_options(self, torrent):
child.unparent()
self.options_grid_children = []

source = None
for torrent_obj in self.model.torrent_list:
if torrent_obj.id == torrent + 1:
source = torrent_obj
break

def on_value_changed(widget, *args):
attribute = args[-1]
if isinstance(widget, Gtk.Switch):
value = widget.get_active()
else:
adjustment = widget.get_adjustment()
value = adjustment.get_value()
setattr(source, attribute, value)
source.emit("attribute-changed", source, {attribute: value})
setattr(torrent, attribute, value)

row = 0
for index, attribute in enumerate(self.settings.editwidgets):
Expand All @@ -207,13 +146,13 @@ def on_value_changed(widget, *args):
dynamic_widget.set_visible(True)
dynamic_widget.set_hexpand(True)
if isinstance(dynamic_widget, Gtk.Switch):
dynamic_widget.set_active(getattr(source, attribute))
dynamic_widget.set_active(getattr(torrent, attribute))
# Connect "state-set" signal for Gtk.Switch
dynamic_widget.connect("state-set", on_value_changed, attribute)
else:
adjustment = Gtk.Adjustment(
value=getattr(source, attribute),
upper=getattr(source, attribute) * 10,
value=getattr(torrent, attribute),
upper=getattr(torrent, attribute) * 10,
lower=0,
step_increment=1,
page_increment=10,
Expand Down Expand Up @@ -245,8 +184,6 @@ def update_notebook_status(self, torrent):
extra={"class_name": self.__class__.__name__},
)

compatible_attributes, store = self.model.get_liststore()

if self.status_grid_child is not None:
self.status_tab.remove(self.status_grid_child)
self.status_grid_child.unparent()
Expand All @@ -257,6 +194,11 @@ def update_notebook_status(self, torrent):
self.status_grid_child.set_vexpand(True)
self.status_grid_child.set_visible(True)

ATTRIBUTES = Attributes
compatible_attributes = [
prop.name.replace("-", "_") for prop in GObject.list_properties(ATTRIBUTES)
]

# Create columns and add them to the TreeView
for attribute_index, attribute in enumerate(compatible_attributes):
row = attribute_index
Expand All @@ -268,8 +210,7 @@ def update_notebook_status(self, torrent):
labeln.set_size_request(80, -1)
self.status_grid_child.attach(labeln, 0, row, 1, 1)

selected_iter = store.get_iter(self.selected_path)
val = str(store.get_value(selected_iter, attribute_index))
val = torrent.get_property(attribute)
labelv = Gtk.Label(label=val, xalign=0)
labelv.set_visible(True)
# labelv.set_margin_left(10)
Expand All @@ -280,12 +221,35 @@ def update_notebook_status(self, torrent):

self.status_tab.append(self.status_grid_child)

def update_view(self, model, _, torrent, attribute):
def update_view(self, model, torrent, attribute):
pass

def handle_settings_changed(self, source, key, value):
logger.debug(
"Torrents view settings changed",
extra={"class_name": self.__class__.__name__},
)
# print(key + " = " + value)

def handle_model_changed(self, source, data_obj, data_changed):
logger.info(
"Notebook settings changed",
extra={"class_name": self.__class__.__name__},
)
# print(key + " = " + value)

def handle_attribute_changed(self, source, key, value):
logger.debug(
"Attribute changed",
extra={"class_name": self.__class__.__name__},
)

def model_selection_changed(self, source, model, torrent):
logger.debug(
"Model selection changed",
extra={"class_name": self.__class__.__name__},
)
if torrent is not None:
self.update_notebook_status(torrent)
self.update_notebook_options(torrent)
self.update_notebook_peers(torrent.id)

0 comments on commit 041cee4

Please sign in to comment.