2022-11-28 23:09:00 +00:00
|
|
|
# Python imports
|
|
|
|
|
|
|
|
# Lib imports
|
|
|
|
import gi
|
|
|
|
gi.require_version('Gtk', '3.0')
|
2022-11-29 04:34:13 +00:00
|
|
|
from gi.repository import Gtk
|
|
|
|
from gi.repository import Gio
|
2022-11-28 23:09:00 +00:00
|
|
|
|
|
|
|
# Application imports
|
|
|
|
|
|
|
|
|
2022-12-04 08:45:26 +00:00
|
|
|
|
|
|
|
|
2022-11-28 23:09:00 +00:00
|
|
|
class IOWidget(Gtk.Box):
|
|
|
|
"""docstring for IOWidget"""
|
|
|
|
|
|
|
|
def __init__(self, action, file):
|
|
|
|
super(IOWidget, self).__init__()
|
|
|
|
self._action = action
|
|
|
|
self._file = file
|
|
|
|
self._basename = self._file.get_basename()
|
|
|
|
|
|
|
|
self.cancle_eve = Gio.Cancellable.new()
|
|
|
|
self.progress = None
|
|
|
|
|
|
|
|
self._setup_styling()
|
|
|
|
self._setup_signals()
|
|
|
|
self._load_widgets()
|
|
|
|
|
|
|
|
self.show_all()
|
|
|
|
|
|
|
|
|
|
|
|
def _setup_styling(self):
|
|
|
|
self.set_orientation(1)
|
|
|
|
|
|
|
|
def _setup_signals(self):
|
|
|
|
...
|
|
|
|
|
|
|
|
def _load_widgets(self):
|
|
|
|
stats = Gtk.Box()
|
|
|
|
label = Gtk.Label()
|
|
|
|
cncl_button = Gtk.Button(label="Cancel")
|
|
|
|
del_button = Gtk.Button(label="Clear")
|
|
|
|
self.progress = Gtk.ProgressBar()
|
|
|
|
|
|
|
|
label.set_label(self._basename)
|
|
|
|
self.progress.set_show_text(True)
|
|
|
|
self.progress.set_text(f"{self._action.upper()}ING")
|
|
|
|
stats.set_orientation(0)
|
|
|
|
|
|
|
|
stats.pack_end(del_button, False, False, 5)
|
|
|
|
del_button.connect("clicked", self.delete_self, ())
|
|
|
|
|
|
|
|
if not self._action in ("create", "rename"):
|
|
|
|
stats.pack_end(cncl_button, False, False, 5)
|
|
|
|
cncl_button.connect("clicked", self.do_cancel, *(self, self.cancle_eve))
|
|
|
|
|
|
|
|
stats.add(self.progress)
|
|
|
|
self.add(label)
|
|
|
|
self.add(stats)
|
|
|
|
|
|
|
|
def do_cancel(self, widget, container, eve):
|
2023-02-24 05:03:29 +00:00
|
|
|
logger.info(f"Canceling: [{self._action}] of {self._basename} ...")
|
2022-11-28 23:09:00 +00:00
|
|
|
eve.cancel()
|
|
|
|
|
|
|
|
def update_progress(self, current, total, eve=None):
|
|
|
|
self.progress.set_fraction(current/total)
|
|
|
|
|
|
|
|
def finish_callback(self, file, task=None, eve=None):
|
2022-11-29 04:34:13 +00:00
|
|
|
if self._action == "move" or self._action == "rename":
|
2022-11-28 23:09:00 +00:00
|
|
|
status = self._file.move_finish(task)
|
|
|
|
if self._action == "copy":
|
|
|
|
status = self._file.copy_finish(task)
|
|
|
|
|
|
|
|
if status:
|
|
|
|
self.delete_self()
|
|
|
|
else:
|
2023-02-24 05:03:29 +00:00
|
|
|
logger.info(f"{self._action} of {self._basename} failed...")
|
2022-11-28 23:09:00 +00:00
|
|
|
|
|
|
|
def delete_self(self, widget=None, eve=None):
|
|
|
|
self.get_parent().remove(self)
|