Make it a proper python module
This commit is contained in:
parent
83a32712f9
commit
450de98d32
10 changed files with 160 additions and 42 deletions
28
PKGBUILD
28
PKGBUILD
|
@ -18,17 +18,25 @@ optdepends=(
|
||||||
'libcanberra: play system notification sounds'
|
'libcanberra: play system notification sounds'
|
||||||
'sound-theme-freedesktop: standard system sounds like "complete.oga"'
|
'sound-theme-freedesktop: standard system sounds like "complete.oga"'
|
||||||
)
|
)
|
||||||
makedepends=('python-setuptools')
|
makedepends=(
|
||||||
|
'python-setuptools'
|
||||||
|
'python-build'
|
||||||
|
'python-installer'
|
||||||
|
)
|
||||||
source=()
|
source=()
|
||||||
sha256sums=()
|
sha256sums=()
|
||||||
|
|
||||||
package() {
|
build() {
|
||||||
install -Dm755 "../src/app.py" "$pkgdir/usr/bin/recoder"
|
cd "$srcdir"
|
||||||
install -Dm644 "../src/config.py" "$pkgdir/usr/lib/recoder/config.py"
|
python -m build --wheel
|
||||||
install -Dm644 "../src/models.py" "$pkgdir/usr/lib/recoder/models.py"
|
|
||||||
install -Dm644 "../src/transcoder_worker.py" "$pkgdir/usr/lib/recoder/transcoder_worker.py"
|
|
||||||
install -Dm644 "../src/ui.py" "$pkgdir/usr/lib/recoder/ui.py"
|
|
||||||
install -Dm644 "../resources/net.jeena.Recoder.desktop" "$pkgdir/usr/share/applications/net.jeena.Recoder.desktop"
|
|
||||||
install -Dm644 "../resources/net.jeena.Recoder.png" "$pkgdir/usr/share/icons/hicolor/256x256/apps/net.jeena.Recoder.png"
|
|
||||||
install -Dm644 "../src/__init__.py" "$pkgdir/usr/lib/recoder/__init__.py"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
package() {
|
||||||
|
cd "$srcdir"
|
||||||
|
python -m installer --destdir="$pkgdir" dist/*.whl
|
||||||
|
|
||||||
|
install -Dm644 resources/net.jeena.Recoder.desktop \
|
||||||
|
"$pkgdir/usr/share/applications/net.jeena.Recoder.desktop"
|
||||||
|
install -Dm644 resources/net.jeena.Recoder.png \
|
||||||
|
"$pkgdir/usr/share/icons/hicolor/256x256/apps/net.jeena.Recoder.png"
|
||||||
|
}
|
97
README.md
97
README.md
|
@ -0,0 +1,97 @@
|
||||||
|
# Recoder
|
||||||
|
|
||||||
|
**Recoder** is a GTK4-based GUI application for video transcoding. It provides a clean, modern interface using Libadwaita and integrates with `ffmpeg` to convert videos with ease.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ✨ Features
|
||||||
|
|
||||||
|
- Simple and elegant GTK4 interface
|
||||||
|
- Built with Libadwaita for a native GNOME look
|
||||||
|
- Supports common video formats using `ffmpeg`
|
||||||
|
- Lightweight and fast
|
||||||
|
- System notifications on task completion
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🛠 Requirements
|
||||||
|
|
||||||
|
- Python 3.10+
|
||||||
|
- GTK4
|
||||||
|
- Libadwaita
|
||||||
|
- `ffmpeg`
|
||||||
|
- Python bindings:
|
||||||
|
- `python-gobject`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🚀 Installation (Arch Linux)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone https://github.com/jeena/recoder.git
|
||||||
|
cd recoder
|
||||||
|
makepkg -si
|
||||||
|
```
|
||||||
|
|
||||||
|
This will install Recoder system-wide using Pacman, so you can later remove it cleanly:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo pacman -R recoder
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🧪 Development Setup
|
||||||
|
|
||||||
|
If you're hacking on Recoder:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone https://github.com/jeena/recoder.git
|
||||||
|
cd recoder
|
||||||
|
python -m venv .venv
|
||||||
|
source .venv/bin/activate
|
||||||
|
pip install -e .
|
||||||
|
```
|
||||||
|
|
||||||
|
Then run:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
recoder
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📁 Project Structure
|
||||||
|
|
||||||
|
```
|
||||||
|
src/
|
||||||
|
└── recoder/
|
||||||
|
├── app.py
|
||||||
|
├── config.py
|
||||||
|
├── models.py
|
||||||
|
├── transcoder_worker.py
|
||||||
|
└── ui.py
|
||||||
|
resources/
|
||||||
|
├── net.jeena.Recoder.desktop
|
||||||
|
└── net.jeena.Recoder.png
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📦 Packaging
|
||||||
|
|
||||||
|
Recoder follows modern Python packaging using `pyproject.toml` and `setuptools`. The Arch package installs Python modules to `site-packages` and the desktop file + icon in appropriate locations.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📄 License
|
||||||
|
|
||||||
|
Licensed under the GPLv3. See `LICENSE` for details.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 👤 Author
|
||||||
|
|
||||||
|
Made by Jeena · [github.com/jeena](https://github.com/jeena)
|
13
pyproject.toml
Normal file
13
pyproject.toml
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
[project]
|
||||||
|
name = "recoder"
|
||||||
|
version = "1.0.0"
|
||||||
|
description = "A GTK4 video transcoding GUI application"
|
||||||
|
authors = [{name = "Jeena", email = "hello@jeena.net"}]
|
||||||
|
license = "GPL-3.0-or-later"
|
||||||
|
|
||||||
|
[project.scripts]
|
||||||
|
recoder = "recoder.app:main" # This creates the /usr/bin/recoder entrypoint
|
||||||
|
|
||||||
|
[build-system]
|
||||||
|
requires = ["setuptools", "wheel"]
|
||||||
|
build-backend = "setuptools.build_meta"
|
30
src/app.py
30
src/app.py
|
@ -1,30 +0,0 @@
|
||||||
#!/usr/bin/env python3
|
|
||||||
|
|
||||||
import sys
|
|
||||||
import gi
|
|
||||||
|
|
||||||
gi.require_version('Gtk', '4.0')
|
|
||||||
gi.require_version('Adw', '1')
|
|
||||||
|
|
||||||
from gi.repository import Adw, Gio
|
|
||||||
from ui import RecoderWindow
|
|
||||||
|
|
||||||
Adw.init()
|
|
||||||
|
|
||||||
class RecoderApp(Adw.Application):
|
|
||||||
def __init__(self):
|
|
||||||
super().__init__(application_id="net.jeena.Recoder",
|
|
||||||
flags=Gio.ApplicationFlags.FLAGS_NONE)
|
|
||||||
self.window = None
|
|
||||||
|
|
||||||
def do_activate(self):
|
|
||||||
if not self.window:
|
|
||||||
self.window = RecoderWindow(application=self)
|
|
||||||
self.window.present()
|
|
||||||
|
|
||||||
def main():
|
|
||||||
app = RecoderApp()
|
|
||||||
return app.run(sys.argv)
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
sys.exit(main())
|
|
30
src/recoder/app.py
Executable file
30
src/recoder/app.py
Executable file
|
@ -0,0 +1,30 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
import sys
|
||||||
|
import gi
|
||||||
|
|
||||||
|
gi.require_version('Gtk', '4.0')
|
||||||
|
gi.require_version('Adw', '1')
|
||||||
|
|
||||||
|
from gi.repository import Adw, Gio
|
||||||
|
|
||||||
|
Adw.init()
|
||||||
|
|
||||||
|
def main():
|
||||||
|
from recoder.ui import RecoderWindow # delayed import
|
||||||
|
|
||||||
|
class RecoderApp(Adw.Application):
|
||||||
|
def __init__(self):
|
||||||
|
super().__init__(application_id="net.jeena.Recoder",
|
||||||
|
flags=Gio.ApplicationFlags.FLAGS_NONE)
|
||||||
|
self.window = None
|
||||||
|
|
||||||
|
def do_activate(self):
|
||||||
|
if not self.window:
|
||||||
|
self.window = RecoderWindow(application=self)
|
||||||
|
self.window.present()
|
||||||
|
|
||||||
|
app = RecoderApp()
|
||||||
|
return app.run(sys.argv)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
sys.exit(main())
|
|
@ -7,8 +7,8 @@ gi.require_version('Adw', '1')
|
||||||
from gi.repository import Gtk, Adw, Gio, Gdk, GLib
|
from gi.repository import Gtk, Adw, Gio, Gdk, GLib
|
||||||
from functools import partial
|
from functools import partial
|
||||||
|
|
||||||
from config import load_config, save_config
|
from recoder.config import load_config, save_config
|
||||||
from transcoder_worker import TranscoderWorker
|
from recoder.transcoder_worker import TranscoderWorker
|
||||||
|
|
||||||
class RecoderWindow(Adw.ApplicationWindow):
|
class RecoderWindow(Adw.ApplicationWindow):
|
||||||
def __init__(self, **kwargs):
|
def __init__(self, **kwargs):
|
Loading…
Add table
Add a link
Reference in a new issue