Blame extensions/desktop-icons/dbusUtils.js

rpm-build d023e0
const Gio = imports.gi.Gio;
rpm-build d023e0
const GLib = imports.gi.GLib;
rpm-build d023e0
var NautilusFileOperationsProxy;
rpm-build d023e0
var FreeDesktopFileManagerProxy;
rpm-build d023e0
rpm-build d023e0
const NautilusFileOperationsInterface = `<node>
rpm-build d023e0
<interface name='org.gnome.Nautilus.FileOperations'>
rpm-build d023e0
    <method name='CopyURIs'>
rpm-build d023e0
        <arg name='URIs' type='as' direction='in'/>
rpm-build d023e0
        <arg name='Destination' type='s' direction='in'/>
rpm-build d023e0
    </method>
rpm-build d023e0
    <method name='MoveURIs'>
rpm-build d023e0
        <arg name='URIs' type='as' direction='in'/>
rpm-build d023e0
        <arg name='Destination' type='s' direction='in'/>
rpm-build d023e0
    </method>
rpm-build d023e0
    <method name='EmptyTrash'>
rpm-build d023e0
    </method>
rpm-build d023e0
    <method name='TrashFiles'>
rpm-build d023e0
        <arg name='URIs' type='as' direction='in'/>
rpm-build d023e0
    </method>
rpm-build d023e0
    <method name='CreateFolder'>
rpm-build d023e0
        <arg name='URI' type='s' direction='in'/>
rpm-build d023e0
    </method>
rpm-build d023e0
    <method name='RenameFile'>
rpm-build d023e0
        <arg name='URI' type='s' direction='in'/>
rpm-build d023e0
        <arg name='NewName' type='s' direction='in'/>
rpm-build d023e0
    </method>
rpm-build d023e0
    <method name='Undo'>
rpm-build d023e0
    </method>
rpm-build d023e0
    <method name='Redo'>
rpm-build d023e0
    </method>
rpm-build d023e0
    <property name='UndoStatus' type='i' access='read'/>
rpm-build d023e0
</interface>
rpm-build d023e0
</node>`;
rpm-build d023e0
rpm-build d023e0
const NautilusFileOperationsProxyInterface = Gio.DBusProxy.makeProxyWrapper(NautilusFileOperationsInterface);
rpm-build d023e0
rpm-build d023e0
const FreeDesktopFileManagerInterface = `<node>
rpm-build d023e0
<interface name='org.freedesktop.FileManager1'>
rpm-build d023e0
    <method name='ShowItems'>
rpm-build d023e0
        <arg name='URIs' type='as' direction='in'/>
rpm-build d023e0
        <arg name='StartupId' type='s' direction='in'/>
rpm-build d023e0
    </method>
rpm-build d023e0
    <method name='ShowItemProperties'>
rpm-build d023e0
        <arg name='URIs' type='as' direction='in'/>
rpm-build d023e0
        <arg name='StartupId' type='s' direction='in'/>
rpm-build d023e0
    </method>
rpm-build d023e0
</interface>
rpm-build d023e0
</node>`;
rpm-build d023e0
rpm-build d023e0
const FreeDesktopFileManagerProxyInterface = Gio.DBusProxy.makeProxyWrapper(FreeDesktopFileManagerInterface);
rpm-build d023e0
rpm-build d023e0
function init() {
rpm-build d023e0
    NautilusFileOperationsProxy = new NautilusFileOperationsProxyInterface(
rpm-build d023e0
        Gio.DBus.session,
rpm-build d023e0
        'org.gnome.Nautilus',
rpm-build d023e0
        '/org/gnome/Nautilus',
rpm-build d023e0
        (proxy, error) => {
rpm-build d023e0
            if (error) {
rpm-build d023e0
                log('Error connecting to Nautilus');
rpm-build d023e0
            }
rpm-build d023e0
        }
rpm-build d023e0
    );
rpm-build d023e0
rpm-build d023e0
    FreeDesktopFileManagerProxy = new FreeDesktopFileManagerProxyInterface(
rpm-build d023e0
        Gio.DBus.session,
rpm-build d023e0
        'org.freedesktop.FileManager1',
rpm-build d023e0
        '/org/freedesktop/FileManager1',
rpm-build d023e0
        (proxy, error) => {
rpm-build d023e0
            if (error) {
rpm-build d023e0
                log('Error connecting to Nautilus');
rpm-build d023e0
            }
rpm-build d023e0
        }
rpm-build d023e0
    );
rpm-build d023e0
}
rpm-build d023e0
rpm-build d023e0
function openFileWithOtherApplication(filePath) {
rpm-build d023e0
    let fdList = new Gio.UnixFDList();
rpm-build d023e0
    let channel = GLib.IOChannel.new_file(filePath, "r");
rpm-build d023e0
    fdList.append(channel.unix_get_fd());
rpm-build d023e0
    channel.set_close_on_unref(true);
rpm-build d023e0
    let builder = GLib.VariantBuilder.new(GLib.VariantType.new("a{sv}"));
rpm-build d023e0
    let options = builder.end();
rpm-build d023e0
    let parameters = GLib.Variant.new_tuple([GLib.Variant.new_string("0"),
rpm-build d023e0
                                             GLib.Variant.new_handle(0),
rpm-build d023e0
                                             options]);
rpm-build d023e0
    Gio.bus_get(Gio.BusType.SESSION, null,
rpm-build d023e0
        (source, result) => {
rpm-build d023e0
            let dbus_connection = Gio.bus_get_finish(result);
rpm-build d023e0
            dbus_connection.call_with_unix_fd_list("org.freedesktop.portal.Desktop",
rpm-build d023e0
                                                   "/org/freedesktop/portal/desktop",
rpm-build d023e0
                                                   "org.freedesktop.portal.OpenURI",
rpm-build d023e0
                                                   "OpenFile",
rpm-build d023e0
                                                   parameters,
rpm-build d023e0
                                                   GLib.VariantType.new("o"),
rpm-build d023e0
                                                   Gio.DBusCallFlags.NONE,
rpm-build d023e0
                                                   -1,
rpm-build d023e0
                                                   fdList,
rpm-build d023e0
                                                   null,
rpm-build d023e0
                                                   null);
rpm-build d023e0
        }
rpm-build d023e0
    );
rpm-build d023e0
}