iPhone と Linux の接続は AFC プロトコルで繋る。
この URI を Gio と GLib の関数でフルパスに変換してみる。
#!/usr/bin/env python3 from gi.repository import Gtk, Gdk, GLib, Gio class DWin(Gtk.Window): def __init__(self): """ DnD Window """ Gtk.Window.__init__(self) self.connect("delete-event", Gtk.main_quit) # DnD dnd_list = Gtk.TargetEntry.new("image/jpeg", 0, 0) self.drag_dest_set( Gtk.DestDefaults.MOTION | Gtk.DestDefaults.HIGHLIGHT | Gtk.DestDefaults.DROP, [dnd_list], Gdk.DragAction.COPY ) self.drag_dest_add_uri_targets() # GtkLabel self.label = Gtk.Label("Please drop your files") self.add(self.label) # self.show_all() def do_drag_data_received(self, context, x, y, data, info, time): """ URI to FullPath Gio or GLib """ uri = data.get_uris()[0] try: # GFile f = Gio.File.new_for_uri(uri) path = f.get_path() s = "{0}\n".format(path) # GLib afc = GLib.filename_from_uri(uri)[0] s += afc except Exception as e: # Error s += e.message self.label.set_text(s) DWin() Gtk.main()
一年で 8500yen しか課金していないのにセルリアを持っていてごめんよ!
いやそれは関係なくて、ウチ姫を知らないとワカンナイし。
g_filename_from_uri 関数は AFC の URI を変換できない。
この関数はファイルが存在するかどうかは関係ないからかな。
一手間増えても素直に GFile を使ったほうが良いようです。
実際にアクセスするか変換するだけかの違いがモロにでるのね。
ところで変換されたフルパスがナンジャコリャに見えるけど。
普通にマウントされているんだなぁこれが。
なのに Shotwell ではインポートがエラーになるのは何故だろう?
まあ自分は Nautilus で DnD して保存で充分なんだけどne!