dot/.local/share/gnome-shell/extensions/workspaces-to-dock@passingt.../placeDisplay.js

160 lines
5.3 KiB
JavaScript
Raw Normal View History

2020-05-11 09:16:27 +00:00
/* ========================================================================================================
* placeDisplay.js
* --------------------------------------------------------------------------------------------------------
* CREDITS: This code was copied from the places status indicator extension by gcampax,
* and modified as necessary to provide places functionality for the shortcuts panel.
* https://git.gnome.org/browse/gnome-shell-extensions
* ========================================================================================================
*/
const GLib = imports.gi.GLib;
const Gio = imports.gi.Gio;
const Shell = imports.gi.Shell;
const Lang = imports.lang;
const Signals = imports.signals;
const St = imports.gi.St;
const DND = imports.ui.dnd;
const Main = imports.ui.main;
const Params = imports.misc.params;
const Search = imports.ui.search;
const Util = imports.misc.util;
const Gettext = imports.gettext.domain('gnome-shell-extensions');
const _ = Gettext.gettext;
const N_ = function(x) { return x; }
const Hostname1Iface = '<node> \
<interface name="org.freedesktop.hostname1"> \
<property name="PrettyHostname" type="s" access="read" /> \
</interface> \
</node>';
const Hostname1 = Gio.DBusProxy.makeProxyWrapper(Hostname1Iface);
var PlaceInfo = class WorkspacesToDock_PlaceInfo {
constructor(kind, file, name, icon) {
this.kind = kind;
this.file = file;
this.name = name || this._getFileName();
this.icon = icon ? new Gio.ThemedIcon({ name: icon }) : this.getIcon();
}
destroy() {
}
isRemovable() {
return false;
}
launch(timestamp, workspace) {
let targetWorkspace = workspace ? workspace : -1;
let launchContext = global.create_app_launch_context(timestamp, targetWorkspace);
try {
Gio.AppInfo.launch_default_for_uri(this.file.get_uri(),
launchContext);
} catch(e) {
if (e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_MOUNTED)) {
this.file.mount_enclosing_volume(0, null, null, function(file, result) {
file.mount_enclosing_volume_finish(result);
Gio.AppInfo.launch_default_for_uri(file.get_uri(), launchContext);
});
} else {
Main.notifyError(_("Failed to launch \"%s\"").format(this.name), e.message);
}
}
}
getIcon() {
try {
let info = this.file.query_info('standard::symbolic-icon', 0, null);
return info.get_symbolic_icon();
} catch(e) {
if (e instanceof Gio.IOErrorEnum) {
// return a generic icon for this kind
switch (this.kind) {
case 'network':
return new Gio.ThemedIcon({ name: 'folder-remote-symbolic' });
case 'devices':
return new Gio.ThemedIcon({ name: 'drive-harddisk-symbolic' });
case 'special':
case 'bookmarks':
default:
if (!this.file.is_native())
return new Gio.ThemedIcon({ name: 'folder-remote-symbolic' });
else
return new Gio.ThemedIcon({ name: 'folder-symbolic' });
}
}
}
}
_getFileName() {
try {
let info = this.file.query_info('standard::display-name', 0, null);
return info.get_display_name();
} catch(e) {
if (e instanceof Gio.IOErrorEnum) {
return this.file.get_basename();
}
}
}
};
Signals.addSignalMethods(PlaceInfo.prototype);
const DEFAULT_DIRECTORIES = [
GLib.UserDirectory.DIRECTORY_DOCUMENTS,
GLib.UserDirectory.DIRECTORY_PICTURES,
GLib.UserDirectory.DIRECTORY_MUSIC,
GLib.UserDirectory.DIRECTORY_DOWNLOAD,
GLib.UserDirectory.DIRECTORY_VIDEOS,
];
var PlacesManager = class WorkspacesToDock_PlacesManager {
constructor() {
this._places = {
special: [],
devices: [],
bookmarks: [],
network: [],
};
let homePath = GLib.get_home_dir();
this._places.special.push(new PlaceInfo('special',
Gio.File.new_for_path(homePath),
_("Home")));
let specials = [];
for (let i = 0; i < DEFAULT_DIRECTORIES.length; i++) {
let specialPath = GLib.get_user_special_dir(DEFAULT_DIRECTORIES[i]);
if (!specialPath || specialPath == homePath) // passingthru67: BUG FIX - specialPath cannot be null
continue;
let file = Gio.File.new_for_path(specialPath), info;
try {
info = new PlaceInfo('special', file);
} catch(e) {
if (e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_FOUND)) {
continue;
}
}
specials.push(info);
}
specials.sort(function(a, b) {
return GLib.utf8_collate(a.name, b.name);
});
this._places.special = this._places.special.concat(specials);
}
destroy() {
}
get(kind) {
return this._places[kind];
}
};
Signals.addSignalMethods(PlacesManager.prototype);