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!

