Compare commits
No commits in common. "743b476d38f1bfbce0a512b705a1ab78fbd714f4" and "dc6477019d5e6c47eb040781e8c088ec82761d5a" have entirely different histories.
743b476d38
...
dc6477019d
5 changed files with 6 additions and 58 deletions
|
@ -1,5 +1,3 @@
|
||||||
⚠️ This repository has moved to https://git.jeena.net/jeena/recoder
|
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="src/resources/net.jeena.Recoder.svg" width="120" height="120" alt="Recoder logo">
|
<img src="src/resources/net.jeena.Recoder.svg" width="120" height="120" alt="Recoder logo">
|
||||||
</p>
|
</p>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
[project]
|
[project]
|
||||||
name = "recoder"
|
name = "recoder"
|
||||||
version = "1.1.0"
|
version = "1.0.1"
|
||||||
description = "A GTK4 video transcoding GUI application"
|
description = "A GTK4 video transcoding GUI application"
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
authors = [{name = "Jeena", email = "hello@jeena.net"}]
|
authors = [{name = "Jeena", email = "hello@jeena.net"}]
|
||||||
|
@ -24,4 +24,4 @@ include-package-data = true
|
||||||
where = ["src"]
|
where = ["src"]
|
||||||
|
|
||||||
[tool.setuptools.package-data]
|
[tool.setuptools.package-data]
|
||||||
recoder = ["resources.gresource"]
|
recoder = ["resources.gresource"]
|
|
@ -10,22 +10,12 @@ class DropHandler:
|
||||||
self._accepting = self._compute_accept()
|
self._accepting = self._compute_accept()
|
||||||
self.app_state_manager.connect("notify::state", self.on_state_changed)
|
self.app_state_manager.connect("notify::state", self.on_state_changed)
|
||||||
|
|
||||||
# --- Drag & Drop ---
|
|
||||||
self.drop_target = Gtk.DropTarget.new(Gio.File, Gdk.DragAction.COPY)
|
self.drop_target = Gtk.DropTarget.new(Gio.File, Gdk.DragAction.COPY)
|
||||||
self.drop_target.connect("enter", self.on_drop_enter)
|
self.drop_target.connect("enter", self.on_drop_enter)
|
||||||
self.drop_target.connect("leave", self.on_drop_leave)
|
self.drop_target.connect("leave", self.on_drop_leave)
|
||||||
self.drop_target.connect("drop", self.on_drop)
|
self.drop_target.connect("drop", self.on_drop)
|
||||||
self.w.overlay.add_controller(self.drop_target)
|
|
||||||
|
|
||||||
# --- Clipboard Paste (Ctrl+V) ---
|
self.w.overlay.add_controller(self.drop_target)
|
||||||
self.shortcut_ctrl_v = Gtk.ShortcutController()
|
|
||||||
self.shortcut_ctrl_v.add_shortcut(
|
|
||||||
Gtk.Shortcut.new(
|
|
||||||
Gtk.ShortcutTrigger.parse_string("<Ctrl>V"),
|
|
||||||
Gtk.CallbackAction.new(self.on_paste_clipboard)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
self.w.add_controller(self.shortcut_ctrl_v)
|
|
||||||
|
|
||||||
def _compute_accept(self):
|
def _compute_accept(self):
|
||||||
return self.app_state_manager.state not in {
|
return self.app_state_manager.state not in {
|
||||||
|
@ -43,7 +33,7 @@ class DropHandler:
|
||||||
else:
|
else:
|
||||||
self.w.overlay.remove_controller(self.drop_target)
|
self.w.overlay.remove_controller(self.drop_target)
|
||||||
|
|
||||||
# ---------------- Drag & Drop ----------------
|
|
||||||
def on_drop_enter(self, *_):
|
def on_drop_enter(self, *_):
|
||||||
if not self._accepting:
|
if not self._accepting:
|
||||||
return False
|
return False
|
||||||
|
@ -57,45 +47,10 @@ class DropHandler:
|
||||||
def on_drop(self, _, value, __, ___):
|
def on_drop(self, _, value, __, ___):
|
||||||
if not self._accepting:
|
if not self._accepting:
|
||||||
return False
|
return False
|
||||||
self._start_processing(value)
|
|
||||||
return True
|
|
||||||
|
|
||||||
# ---------------- Clipboard Paste ----------------
|
|
||||||
def on_paste_clipboard(self, *_):
|
|
||||||
if not self._accepting:
|
|
||||||
return True
|
|
||||||
|
|
||||||
clipboard = self.w.get_clipboard()
|
|
||||||
clipboard.read_text_async(None, self._on_clipboard_text_ready)
|
|
||||||
return True
|
|
||||||
|
|
||||||
def _on_clipboard_text_ready(self, clipboard, res):
|
|
||||||
try:
|
|
||||||
text = clipboard.read_text_finish(res)
|
|
||||||
except GLib.Error:
|
|
||||||
return
|
|
||||||
|
|
||||||
if not text:
|
|
||||||
return
|
|
||||||
|
|
||||||
# take the first non-empty line only
|
|
||||||
uri = next((u.strip() for u in text.splitlines() if u.strip()), None)
|
|
||||||
if not uri:
|
|
||||||
return
|
|
||||||
|
|
||||||
if uri.startswith("file://"):
|
|
||||||
gfile = Gio.File.new_for_uri(uri)
|
|
||||||
else:
|
|
||||||
gfile = Gio.File.new_for_path(uri)
|
|
||||||
|
|
||||||
self._start_processing(gfile)
|
|
||||||
|
|
||||||
# ---------------- Shared ----------------
|
|
||||||
def _start_processing(self, value):
|
|
||||||
if self.w.drop_hint.get_parent():
|
if self.w.drop_hint.get_parent():
|
||||||
self.w.overlay.remove_overlay(self.w.drop_hint)
|
self.w.overlay.remove_overlay(self.w.drop_hint)
|
||||||
self.w.drop_hint.set_visible(False)
|
self.w.drop_hint.set_visible(False)
|
||||||
self.w.progress_bar.set_visible(True)
|
self.w.progress_bar.set_visible(True)
|
||||||
self.w.progress_bar.set_fraction(0.0)
|
self.w.progress_bar.set_fraction(0.0)
|
||||||
GLib.idle_add(partial(self.w.process_drop_value, value))
|
GLib.idle_add(partial(self.w.process_drop_value, value))
|
||||||
|
return True
|
||||||
|
|
|
@ -58,10 +58,5 @@
|
||||||
<p>Fix bad video quality.</p>
|
<p>Fix bad video quality.</p>
|
||||||
</description>
|
</description>
|
||||||
</release>
|
</release>
|
||||||
<release version="1.1.0" date="2025-08-24">
|
|
||||||
<description>
|
|
||||||
<p>Add possibility to Ctrl-v a path instead only drag and drop.</p>
|
|
||||||
</description>
|
|
||||||
</release>
|
|
||||||
</releases>
|
</releases>
|
||||||
</component>
|
</component>
|
||||||
|
|
|
@ -144,7 +144,7 @@
|
||||||
|
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel">
|
<object class="GtkLabel">
|
||||||
<property name="label">Drop video file or folder here, or press Ctrl+V to paste a path</property>
|
<property name="label">Drop video files or folders here to get started</property>
|
||||||
<style>
|
<style>
|
||||||
<class name="dim-label"/>
|
<class name="dim-label"/>
|
||||||
</style>
|
</style>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue