g_filename_from_uri and GFile

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()

seruria

一年で 8500yen しか課金していないのにセルリアを持っていてごめんよ!
いやそれは関係なくて、ウチ姫を知らないとワカンナイし。

g_filename_from_uri 関数は AFC の URI を変換できない。
この関数はファイルが存在するかどうかは関係ないからかな。

一手間増えても素直に GFile を使ったほうが良いようです。
実際にアクセスするか変換するだけかの違いがモロにでるのね。

ところで変換されたフルパスがナンジャコリャに見えるけど。

mount

普通にマウントされているんだなぁこれが。
なのに Shotwell ではインポートがエラーになるのは何故だろう?

まあ自分は Nautilus で DnD して保存で充分なんだけどne!