Erste Version
This commit is contained in:
commit
e5944d9b97
74 files changed
+30486
No files matched your search
@@ -0,0 +1,109 @@
|
||||
# ADF Manager
|
||||
|
||||
Grafisches Frontend für [`xdftool`](https://github.com/cnvogelg/amitools) (Teil von amitools) zum Verwalten von Amiga-Disk-Images (ADF) unter Linux. Gedacht als Ersatz für das mühsame Einzel-Kopieren per Kommandozeile, wenn sich ADFs nicht bequem mounten lassen.
|
||||
|
||||
Teil von **Projekt Hirnfrei**. Entwickler: Dany Thinnes.
|
||||
|
||||
## Funktionen
|
||||
|
||||
- **Zwei-Spalten-Ansicht:** links der Inhalt der ADF, rechts ein Ordner auf dem PC
|
||||
- Navigation in beiden Ansichten per Doppelklick (links auch in ADF-Unterordner, `..` führt eine Ebene hoch)
|
||||
- **ADF → PC:** ein oder mehrere Einträge (auch ganze Ordner) in den rechts angezeigten PC-Ordner kopieren
|
||||
- **PC → ADF:** ein oder mehrere Dateien/Ordner in den links angezeigten ADF-Ordner kopieren. Existiert ein Eintrag bereits in der ADF, wird er nach Rückfrage vorher gelöscht
|
||||
- Löschen, Umbenennen und Anlegen von Ordnern in der ADF
|
||||
- Alle Einträge eines Vorgangs werden in **einem** `xdftool`-Aufruf verarbeitet (schnell auch bei vielen Dateien)
|
||||
- Versteckte Dateien auf der PC-Seite ein-/ausblendbar
|
||||
- Spaltenbreiten frei einstellbar; Fenstergröße und Spaltenbreiten werden gespeichert
|
||||
- **Auswerfen:** Liegt die ADF auf einer SD-Karte oder einem anderen Wechseldatenträger, kann das Medium direkt aus dem Programm ausgehängt und abgeschaltet werden
|
||||
- Protokollfenster mit den ausgeführten `xdftool`-Befehlen und deren Ausgabe
|
||||
|
||||
## Abhängigkeiten
|
||||
|
||||
### Zur Laufzeit
|
||||
|
||||
| Paket | Zweck |
|
||||
|-------|-------|
|
||||
| `amitools` (liefert `xdftool`) | Eigentliche Arbeit an den ADF-Images. Die reine Python-Variante genügt, `vamos` wird nicht benötigt |
|
||||
| `udisks2` (optional) | Nur für die Funktion „Auswerfen“ (`udisksctl`) |
|
||||
|
||||
`xdftool` muss im `PATH` liegen. Alternativ kann der Pfad im Programm unter *Datei → xdftool-Pfad …* eingestellt werden.
|
||||
|
||||
### Zum Bauen
|
||||
|
||||
- C++17-Compiler (GCC oder Clang)
|
||||
- CMake ≥ 3.16
|
||||
- Qt 6 (Modul *Widgets*)
|
||||
|
||||
## Installation von xdftool
|
||||
|
||||
Unter Arch Linux ist Python „externally managed“, daher am besten isoliert installieren:
|
||||
|
||||
```
|
||||
sudo pacman -S python-pipx
|
||||
pipx install amitools
|
||||
```
|
||||
|
||||
(Alternativ in einem eigenen virtualenv mit `pip install amitools`.) Danach sollte `xdftool` im Terminal verfügbar sein:
|
||||
|
||||
```
|
||||
xdftool --help
|
||||
```
|
||||
|
||||
## Bauen (Linux / Arch)
|
||||
|
||||
```
|
||||
sudo pacman -S --needed base-devel cmake qt6-base
|
||||
git clone <Repository-URL> adfmanager
|
||||
cd adfmanager
|
||||
cmake -B build -DCMAKE_BUILD_TYPE=Release
|
||||
cmake --build build
|
||||
```
|
||||
|
||||
Starten:
|
||||
|
||||
```
|
||||
./build/adfmanager [datei.adf]
|
||||
```
|
||||
|
||||
Eine ADF kann optional als Kommandozeilenargument übergeben werden.
|
||||
|
||||
## Bedienung
|
||||
|
||||
1. **ADF öffnen …** und ein Image wählen (`.adf`, `.ADF`, `.adz`).
|
||||
2. Links den gewünschten ADF-Ordner öffnen, rechts den PC-Ordner wählen (**Ordner wählen …** oder per Doppelklick navigieren).
|
||||
3. Einträge markieren (Mehrfachauswahl mit Strg/Umschalt) und über die Pfeil-Buttons in der Mitte kopieren.
|
||||
4. Das Ziel beim Kopieren **in** die ADF ist immer der links angezeigte Ordner („Aktueller ADF-Ordner“).
|
||||
|
||||
## Hinweise
|
||||
|
||||
- **Änderungen werden direkt in die ADF geschrieben.** Für wichtige Images vorher eine Sicherungskopie anlegen.
|
||||
- Das Programm wertet die Ausgabe von `xdftool <image> list` aus. Sollte der Baum leer bleiben, steht die Rohausgabe im Protokollfenster. Das ist hilfreich, falls eine andere amitools-Version ein anderes Ausgabeformat verwendet.
|
||||
- Unterstützt werden die Dateisysteme, die `xdftool` beherrscht (OFS/FFS-Disketten-Images).
|
||||
- Die „Auswerfen“-Erkennung ist eine Heuristik: Als Wechseldatenträger gelten Medien mit gesetztem *removable*-Flag, SD-Karten am eingebauten Kartenleser und USB-Datenträger. Systemverzeichnisse (`/`, `/home`, …) werden nie angeboten.
|
||||
|
||||
## Windows (ungetestet)
|
||||
|
||||
> **Hinweis:** Dieser Abschnitt ist unverifiziert. Das Programm wurde bisher ausschließlich unter Linux (Arch) getestet.
|
||||
|
||||
Der Quellcode verwendet ausschließlich Qt und ist plattformneutral, sollte sich also mit CMake und Qt 6 auch unter Windows bauen lassen. Zu beachten:
|
||||
|
||||
- `xdftool` ist ein Python-Programm. Laut amitools-Dokumentation ist Windows „heavily untested“, die reine Python-Variante (`pip install amitools`) soll aber für alle Werkzeuge außer `vamos` funktionieren. Python (≥ 3.8) muss installiert sein; `pip` legt `xdftool.exe` im `Scripts`-Ordner der Python-Installation ab. Liegt dieser nicht im `PATH`, den Pfad im Programm einstellen.
|
||||
- Die Funktion „Auswerfen“ ist unter Windows nicht verfügbar (Button bleibt deaktiviert).
|
||||
|
||||
Beispiel für den Build (Qt aus dem Qt-Installer, Pfad anpassen):
|
||||
|
||||
```
|
||||
cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH=C:/Qt/6.x.x/mingw_64
|
||||
cmake --build build
|
||||
windeployqt build/adfmanager.exe
|
||||
```
|
||||
|
||||
## Lizenz
|
||||
|
||||
Copyright (C) 2026 Dany Thinnes
|
||||
|
||||
Dieses Programm ist freie Software: Sie können es unter den Bedingungen der GNU General Public License, wie von der Free Software Foundation veröffentlicht, weitergeben und/oder modifizieren, entweder gemäß Version 3 der Lizenz oder (nach Ihrer Wahl) jeder späteren Version.
|
||||
|
||||
Die Veröffentlichung erfolgt in der Hoffnung, dass es Ihnen von Nutzen sein wird, aber **ohne jede Gewährleistung**; sogar ohne die implizite Gewährleistung der MARKTFÄHIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. Details finden Sie in der GNU General Public License (siehe Datei `LICENSE`).
|
||||
|
||||
SPDX-License-Identifier: GPL-3.0-or-later
|
||||
Reference in new issue
Block a user