Via Lazarus auf Dateien auf dem Handy zugreifen [MTP] ...

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1496
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Via Lazarus auf Dateien auf dem Handy zugreifen [MTP] ...

Beitrag von corpsman »

Servus zusammen,

Unter Linux im Caja stecke ich mein Handy einfach via USB an und schon kann ich darauf zugreifen wie man das halt so gewöhnt ist.
Das Gleiche habe ich nun mittels Lazarus versucht und bin gleich mal gescheitert.

Es Stellt sich heraus, auf das Handy muss man via MTP Protokoll zugreifen ( https://forum.lazarus.freepascal.org/in ... ic=44414.0 )

Auch wenn die da alle recht begeistert sind (weil die wohl alle unter Windows arbeiten), ist das einzige was ich zum Thema Linux und Handy finde der Verweis auf die libmtp.

Also hab ich die mal eben installiert:
sudo aptitude install libmtp
und nach einem FPC-Header dafür gesucht, aber außer dem Github Projekt ( https://github.com/libmtp/libmtp ) nichts zu finden.

H2Pas scheiter kläglich an ( https://github.com/libmtp/libmtp/blob/m ... ibmtp.h.in )

Also ist Handarbeit gefragt.

Als Start habe ich mir mal https://github.com/libmtp/libmtp/blob/m ... es/files.c vorgenommen, weil es am "Kleinsten" und einfachsten erschien.

Die Angehängte Demo kann ein Handy / MTP Device öffnen und eine Dateiliste ausgeben (mehr habe ich bisher noch nicht übersetzt).

Sehr unangenehm ist, dass das MTP Device dabei nicht via OS gemountet worden sein darf, da sonst

Code: Alles auswählen

device := LIBMTP_Open_Raw_Device_Uncached(rawdevices);                
immer Nil zurück gibt, das Raus zu finden hat mich einiges an Nerven gekostet :roll:

Mein eigentliches Ziel ist es einen Plattformunabhängigen Zugriff auf das Handy in den CopyCommander ein zu bauen. Dabei gibt es dann die Folgenden Fragen:
* Hat evtl. jemand nen "fertig" portierten MTP header, dann könnte ich mir die weitere Portierungsarbeit sparen ?
* kennt jemand eine andere Lib, einen besseren Weg, am Besten Plattformunabhängig, dann könnte ich mir das Mergen der beiden Varianten sparen ?
Dateianhänge
libmtp_Beispiel.zip
(5.9 KiB) 48-mal heruntergeladen
--
Just try it

PascalDragon
Beiträge: 825
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: Via Lazarus auf Dateien auf dem Handy zugreifen [MTP] ...

Beitrag von PascalDragon »

Was, wenn du einfach vorgibst, dass der User das Dateisystem des Handys unter Linux mounten muss und deinem Programm dann den Mountpoint gibt? Oder du prüfst ab, ob es bereits gemountet, lässt dir den Mountpoint in dem Fall geben und wenn nicht mountest du es selbst über mount in eine temporäres Verzeichnis (mit unmount am Ende natürlich)? In beiden Fällen würdest du einfach mit Dateiroutinen arbeiten...

Anmerkung bzgl. h2pas: wenn du das @VERSION@ durch 1.1.20 ersetzt und die LIBMTP_FILETYPE_IS_* auskommentierst (einfach // vor alle Zeilen), dann kann h2pas den Header erfolgreich umwandeln. Die Defines kannst du dann mit eigenen Funktionen umsetzen.
FPC Compiler Entwickler

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Via Lazarus auf Dateien auf dem Handy zugreifen [MTP] ...

Beitrag von theo »

PascalDragon hat geschrieben:
Di 13. Sep 2022, 10:04
Anmerkung bzgl. h2pas: wenn du das @VERSION@ durch 1.1.20 ersetzt und die LIBMTP_FILETYPE_IS_* auskommentierst (einfach // vor alle Zeilen), dann kann h2pas den Header erfolgreich umwandeln. Die Defines kannst du dann mit eigenen Funktionen umsetzen.
Naja, h2pas erstellt dann ohne zu meckern eine Pascal Datei, aber kompilieren tut diese bei mir nicht und das scheint auch nicht mit ein paar Handgriffen behebbar zu sein.
Läuft das bei dir?

PascalDragon
Beiträge: 825
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: Via Lazarus auf Dateien auf dem Handy zugreifen [MTP] ...

Beitrag von PascalDragon »

theo hat geschrieben:
Di 13. Sep 2022, 12:03
PascalDragon hat geschrieben:
Di 13. Sep 2022, 10:04
Anmerkung bzgl. h2pas: wenn du das @VERSION@ durch 1.1.20 ersetzt und die LIBMTP_FILETYPE_IS_* auskommentierst (einfach // vor alle Zeilen), dann kann h2pas den Header erfolgreich umwandeln. Die Defines kannst du dann mit eigenen Funktionen umsetzen.
Naja, h2pas erstellt dann ohne zu meckern eine Pascal Datei, aber kompilieren tut diese bei mir nicht und das scheint auch nicht mit ein paar Handgriffen behebbar zu sein.
Läuft das bei dir?
Nein, die kompiliert auch bei mir nicht. corpsman hatte aber auch nur erwähnt, dass h2pas nicht mag. Den Rest muss man dann halt auch noch korrekt anpassen, aber ein Großteil ist dann immerhin schon konvertiert.
FPC Compiler Entwickler

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Via Lazarus auf Dateien auf dem Handy zugreifen [MTP] ...

Beitrag von theo »

PascalDragon hat geschrieben:
Di 13. Sep 2022, 13:56
Nein, die kompiliert auch bei mir nicht. corpsman hatte aber auch nur erwähnt, dass h2pas nicht mag. Den Rest muss man dann halt auch noch korrekt anpassen, aber ein Großteil ist dann immerhin schon konvertiert.
OK, ich dachte nur, du wolltest sagen, dass sich durch das Auskommentieren der von h2pas gemeldeten Fehlerstellen eine kompilierbare Unit ergibt.
Das Auskommentieren kann man sich mMn sparen.
Soviel ich sehen kann, produziert h2pas die selben Codefragmente, ob mit oder ohne Fehlermeldungen.

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1496
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Via Lazarus auf Dateien auf dem Handy zugreifen [MTP] ...

Beitrag von corpsman »

So wie ich eure Diskussion verstehe habe ich also leider nichts übersehen und selber machen ist tatsächlich angesagt ...

Meinen Usern das Mounten auf zu bürden geht, aber es ging ja darum den usern eine Erleichterung zu verschaffen, ..

Dann werde ich mal den Header weiter Portieren und schauen wie weit ich komme ;). Aktuell hab ich ihn erst mal umgebaut so dass man die Lib Dynamisch und Statisch laden kann..
--
Just try it

Benutzeravatar
h-elsner
Lazarusforum e. V.
Beiträge: 259
Registriert: Di 24. Jul 2012, 15:42
OS, Lazarus, FPC: LINUX Mint21.1, Win10, Lazarus 2.2.4, FPC3.2.2
CPU-Target: X86-64; arm 32bit
Wohnort: Illertissen
Kontaktdaten:

Re: Via Lazarus auf Dateien auf dem Handy zugreifen [MTP] ...

Beitrag von h-elsner »

Mit TDirectoryEdit oder FileOpenDialog geht es problemlos. Das Device wird ja automatisch gemounted.

Wenn ich zum Beispiel folgende "Adresse" oben im CopyComander eintrage, dann wird das Filesystem von meinem Telefon auch im CopyCommander geöffnet:
/run/user/1000/gvfs/mtp:host=SAMSUNG_SAMSUNG_Android_459157be/Phone/
Bildschirmfoto vom 2022-09-14 13-36-31.png
Bildschirmfoto vom 2022-09-14 13-36-31.png (101.67 KiB) 1504 mal betrachtet
Vielleich kannst du den Mountpoint irgendwie ermitteln und dann automatisch setzen, ohne sich mit dem ganzen MTP-Zeug beschäftigen zu müssen. Letztendlich hängt es ja doch im Filesystem, das Problem ist nur, wo.

Gruß HE

Benutzeravatar
h-elsner
Lazarusforum e. V.
Beiträge: 259
Registriert: Di 24. Jul 2012, 15:42
OS, Lazarus, FPC: LINUX Mint21.1, Win10, Lazarus 2.2.4, FPC3.2.2
CPU-Target: X86-64; arm 32bit
Wohnort: Illertissen
Kontaktdaten:

Re: Via Lazarus auf Dateien auf dem Handy zugreifen [MTP] ...

Beitrag von h-elsner »

Ich habe CopyCommander mal etwas umgebaut, sprich, die beiden Edit-Felder gegen ComboBoxen ausgetauscht und je einen SpeedButton, um das Verzeichnis zu wählen. Damit wird das Anroid-Gerät angeboten und kann ausgewählt werden. Außerdem speichert die ComboBox die letzten 10 ausgewählten Verzeichnisse. Die kann man aus der Drop-Down-Liste dann wählen.

Allerdings wird die Liste nicht in der INI-Datei gespeichert. Da du leider die SessionProperties nicht benutzt, wird das etwas mühselig, sollte aber auch kein Problem sein.
Ich habe es mal noch nicht zu GitHub hochgeladen. Du solltest es die erst mal ansehen, ob dir das überhaupt gefällt.

Gruß HE

Benutzeravatar
h-elsner
Lazarusforum e. V.
Beiträge: 259
Registriert: Di 24. Jul 2012, 15:42
OS, Lazarus, FPC: LINUX Mint21.1, Win10, Lazarus 2.2.4, FPC3.2.2
CPU-Target: X86-64; arm 32bit
Wohnort: Illertissen
Kontaktdaten:

Re: Via Lazarus auf Dateien auf dem Handy zugreifen [MTP] ...

Beitrag von h-elsner »

Und hier ist die Alternative. Das Speichern der Drop-Down-Listen geht nun auch.
CopyCommander_alternative.zip
(28.9 KiB) 60-mal heruntergeladen
Gruß HE

PS: Irgendwie bekomme ich sporadisch mit der von GitHub gezogenen Version eine Exception SIGSERV in der Function TWorkThread.GetHasQuestions: Boolean; erste Zeile.

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1496
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Via Lazarus auf Dateien auf dem Handy zugreifen [MTP] ...

Beitrag von corpsman »

Danke, ich schau es mir morgen mal an ;).
--
Just try it

PascalDragon
Beiträge: 825
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: Via Lazarus auf Dateien auf dem Handy zugreifen [MTP] ...

Beitrag von PascalDragon »

h-elsner hat geschrieben:
Mi 14. Sep 2022, 13:37
Mit TDirectoryEdit oder FileOpenDialog geht es problemlos. Das Device wird ja automatisch gemounted.

Wenn ich zum Beispiel folgende "Adresse" oben im CopyComander eintrage, dann wird das Filesystem von meinem Telefon auch im CopyCommander geöffnet:
/run/user/1000/gvfs/mtp:host=SAMSUNG_SAMSUNG_Android_459157be/Phone/
Das geht aber auch nur, wenn gvfs entsprechend eingerichtet ist.
FPC Compiler Entwickler

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Via Lazarus auf Dateien auf dem Handy zugreifen [MTP] ...

Beitrag von theo »

PascalDragon hat geschrieben:
Do 15. Sep 2022, 09:31
Das geht aber auch nur, wenn gvfs entsprechend eingerichtet ist.
Sehe ich auch so.
Bei mir steht da gar nichts in /run/user/1000/gvfs/
Das Android Phone erscheint auf OpenSUSE KDE sofort nach dem Einstöpseln als Gerät in Dolphin, noch bevor ich "Datenübertragung" auf dem Smartphone ausgewählt habe.
Wenn ich dann nach dem Einbinden in Dolphin darauf klicke, kommt ein Pfad wie:

Code: Alles auswählen

mtp:udi=/org/kde/solid/udev/sys/devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8.4/
Wenn ich einen Ordner auf dem Gerät auswähle, ändert Dolphin die Adresse in eine "Friendly Name" Form z.B.:

Code: Alles auswählen

mtp:/eSmart M3/Interner Speicher/Android/
Aus meiner Sicht alles recht undurchsichtig. "A can of worms".

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1496
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Via Lazarus auf Dateien auf dem Handy zugreifen [MTP] ...

Beitrag von corpsman »

@h-elsner
So ich hab mir mal deinen Vorschlag angesehen und vieles übernommen. Ich hoffe dass es für dich so auch I.O. ist ;)
Nachdem bei mir die nummer mit dem Speedbutton funktioniert muss ich mir nun ernsthaft überlegen ob ich mir den Stress der weiteren Portierung gebe ...

Anbei mal mein bisheriger Fortschritt falls da jemand was sucht / braucht ..
Dateianhänge
ulibmtp_static.pas
(1.18 KiB) 54-mal heruntergeladen
ulibmtp_dynamic.pas
(3.57 KiB) 43-mal heruntergeladen
ulibmtp_common.pas
(7.18 KiB) 48-mal heruntergeladen
--
Just try it

TSchnuckenbock
Beiträge: 71
Registriert: Do 20. Jul 2017, 23:47
OS, Lazarus, FPC: Win7 und Win10
CPU-Target: xxBit
Wohnort: Südheide (Schnuckenland)

Re: Via Lazarus auf Dateien auf dem Handy zugreifen [MTP] ...

Beitrag von TSchnuckenbock »

Moin,

ich wollte noch was zu h2pas und Header-Übersetzungen im Allgemein zum Besten geben.

Ich hab' in der Vergangenheit h2pas notfalls häppchenweise genutzt, also aus der C-Header irgendwas.h mir einzelne Strukturen oder Konstanten in eine separate "Headerdatei" (in C) kopiert und da dann h2pas drüberlaufen lassen.
Was dabei dann rauskommt wird in die Pascal(Delphi)-Header-Datei kopiert und ggf. manuell etwas angepasst (falls notwendig).
Und dann den nächsten Typ (das nächste Konstrukt) aus dem C-Header...

Für die Windows-Nutzer: Es gibt von Wouter Van Nifterick das Tool "C2Delphi"

https://github.com/WouterVanNifterick/C-To-Delphi

Unter "Releases" sollte die exe verfügbar sein (Zip mal öffnen).

Damit kann man auch immer mal gucken, wie ein C-Code-Schnippsel nach Delphi (Pascal) übersetzt wird.

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1496
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Via Lazarus auf Dateien auf dem Handy zugreifen [MTP] ...

Beitrag von corpsman »

@TSchnuckenbock
den Source hab ich mal überflogen leider lässt er sich nicht einfach so nach Lazarus übersetzen, und das Executable wird direkt vom Virenscanner kassier :?: Das Projekt wird schon seit 4 Jahren nicht mehr gepflegt, schade eigentlich ..
--
Just try it

Antworten