Sindbad~EG File Manager
| Current Path : /usr/share/org.gnome.Characters/ |
|
|
| Current File : //usr/share/org.gnome.Characters/org.gnome.Characters.BackgroundService.src.gresource |
GVariant 8 (
Ե ����8 L < @ �� @ v H � ���� � L � � ��~ �
v � �! KP� �! L �! �! WL�� �! v �! �8 � �8 L �8 9 ��� 9 v 9 �F ��$0 �F L �F �F ��G� �F L G G / util.js P // -*- Mode: js; indent-tabs-mode: nil; c-basic-offset: 4; tab-width: 4 -*-
//
// Copyright (c) 2013 Giovanni Campagna <scampa.giovanni@gmail.com>
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
// * Neither the name of the GNOME Foundation nor the
// names of its contributors may be used to endorse or promote products
// derived from this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
const {Gc, Gdk, Gio, GObject, Gtk} = imports.gi;
const Lang = imports.lang;
const Params = imports.params;
const System = imports.system;
function loadUI(resourcePath, objects) {
let ui = new Gtk.Builder();
if (objects) {
for (let o in objects)
ui.expose_object(o, objects[o]);
}
ui.add_from_resource(resourcePath);
return ui;
}
function loadStyleSheet(resource) {
let provider = new Gtk.CssProvider();
provider.load_from_file(Gio.File.new_for_uri('resource://' + resource));
Gtk.StyleContext.add_provider_for_screen(Gdk.Screen.get_default(),
provider,
Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION);
}
function initActions(actionMap, simpleActionEntries, context) {
simpleActionEntries.forEach(function(entry) {
let filtered = Params.filter(entry, { activate: null,
state_changed: null,
context: null });
let action = new Gio.SimpleAction(entry);
let context = filtered.context || actionMap;
if (filtered.activate)
action.connect('activate', filtered.activate.bind(context));
if (filtered.state_changed)
action.connect('state-changed', filtered.state_changed.bind(context));
actionMap.add_action(action);
});
}
function arrayEqual(one, two) {
if (one.length != two.length)
return false;
for (let i = 0; i < one.length; i++)
if (one[i] != two[i])
return false;
return true;
}
function getSettings(schemaId, path) {
const GioSSS = Gio.SettingsSchemaSource;
let schemaSource;
if (!pkg.moduledir.startsWith('resource://')) {
// Running from the source tree
schemaSource = GioSSS.new_from_directory(pkg.pkgdatadir,
GioSSS.get_default(),
false);
} else {
schemaSource = GioSSS.get_default();
}
let schemaObj = schemaSource.lookup(schemaId, true);
if (!schemaObj) {
log('Missing GSettings schema ' + schemaId);
System.exit(1);
}
if (path === undefined)
return new Gio.Settings({ settings_schema: schemaObj });
else
return new Gio.Settings({ settings_schema: schemaObj,
path: path });
}
function assertEqual(one, two) {
if (one != two)
throw Error('Assertion failed: ' + one + ' != ' + two);
}
function assertNotEqual(one, two) {
if (one == two)
throw Error('Assertion failed: ' + one + ' == ' + two);
}
function capitalizeWord(w) {
if (w.length > 0)
return w[0].toUpperCase() + w.slice(1).toLowerCase()
return w;
}
function capitalize(s) {
return s.split(/\s+/).map(function(w) {
let acronyms = ["CJK"];
if (acronyms.indexOf(w) > -1)
return w;
let prefixes = ["IDEOGRAPH-", "SELECTOR-"];
for (let index in prefixes) {
let prefix = prefixes[index];
if (w.startsWith(prefix))
return capitalizeWord(prefix) + w.slice(prefix.length);
}
return capitalizeWord(w);
}).join(' ');
}
function toCodePoint(s) {
let codePoint = s.charCodeAt(0);
if (codePoint >= 0xD800 && codePoint <= 0xDBFF) {
let high = codePoint;
let low = s.charCodeAt(1);
codePoint = 0x10000 + (high - 0xD800) * 0x400 + (low - 0xDC00);
}
return codePoint;
}
function searchResultToArray(result) {
let characters = [];
for (let index = 0; index < result.len; index++) {
characters.push(Gc.search_result_get(result, index));
}
return characters;
}
(uuay)Characters/ service.js �
// -*- Mode: js; indent-tabs-mode: nil; c-basic-offset: 4; tab-width: 4 -*-
//
// Copyright (c) 2012 Giovanni Campagna <scampa.giovanni@gmail.com>
// Copyright (C) 2015 Daiki Ueno <dueno@src.gnome.org>
//
// Gnome Weather is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by the
// Free Software Foundation; either version 2 of the License, or (at your
// option) any later version.
//
// Gnome Weather is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with Gnome Weather; if not, write to the Free Software Foundation,
// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
pkg.initGettext();
pkg.initFormat();
pkg.require({ 'Gio': '2.0',
'GLib': '2.0',
'GObject': '2.0',
'Gtk': '3.0' });
const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib;
const Gtk = imports.gi.Gtk;
const GObject = imports.gi.GObject;
const Util = imports.util;
const SearchProvider = imports.searchProvider;
var application_id = pkg.name;
function initEnvironment() {
window.getApp = function() {
return Gio.Application.get_default();
};
}
const BackgroundService = GObject.registerClass({
// This needs to be a Gtk.Application instead of Gio.Application,
// to get Gtk.Clipboard working.
}, class BackgroundService extends Gtk.Application {
_init() {
super._init({ application_id: pkg.name,
flags: Gio.ApplicationFlags.IS_SERVICE,
inactivity_timeout: 30000 });
GLib.set_application_name(_("Characters"));
this._searchProvider = new SearchProvider.SearchProvider(this);
}
_onQuit() {
this.quit();
}
vfunc_dbus_register(connection, path) {
super.vfunc_dbus_register(connection, path);
this._searchProvider.export(connection, path);
return true;
}
/*
Can't do until GApplication is fixed.
vfunc_dbus_unregister(connection, path) {
this._searchProvider.unexport(connection);
super.vfunc_dbus_unregister(connection, path);
},
*/
vfunc_startup() {
super.vfunc_startup();
Util.initActions(this,
[{ name: 'quit',
activate: this._onQuit }]);
}
vfunc_activate() {
// do nothing, this is a background service
}
});
function main(argv) {
initEnvironment();
return (new BackgroundService()).run(argv);
}
(uuay)org/ searchProvider.js + // -*- Mode: js; indent-tabs-mode: nil; c-basic-offset: 4; tab-width: 4 -*-
//
// Copyright (c) 2013 Giovanni Campagna <scampa.giovanni@gmail.com>
// Copyright (C) 2015 Daiki Ueno <dueno@src.gnome.org>
//
// Gnome Weather is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by the
// Free Software Foundation; either version 2 of the License, or (at your
// option) any later version.
//
// Gnome Weather is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with Gnome Weather; if not, write to the Free Software Foundation,
// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
const {Gc, Gdk, Gio, GLib, GObject} = imports.gi;
const ByteArray = imports.byteArray;
const Service = imports.service;
const Util = imports.util;
const MAX_SEARCH_RESULTS = 100;
const SearchProviderInterface = ByteArray.toString(Gio.resources_lookup_data('/org/gnome/shell/ShellSearchProvider2.xml', 0).toArray());
var SearchProvider = GObject.registerClass({
Name: 'CharactersSearchProvider',
}, class SearchProvider extends GObject.Object {
_init(application) {
this._app = application;
this._impl = Gio.DBusExportedObject.wrapJSObject(SearchProviderInterface, this);
this._cancellable = new Gio.Cancellable();
}
export(connection, path) {
return this._impl.export(connection, path);
}
unexport(connection) {
return this._impl.unexport_from_connection(connection);
}
_runQuery(keywords, invocation) {
this._cancellable.cancel();
this._cancellable.reset();
let upper = keywords.map(x => x.toUpperCase());
let criteria = Gc.SearchCriteria.new_keywords(upper);
let context = new Gc.SearchContext({ criteria: criteria,
flags: Gc.SearchFlag.WORD });
context.search(
MAX_SEARCH_RESULTS,
this._cancellable,
(source_object, res, user_data) => {
let characters = [];
try {
let result = context.search_finish(res);
characters = Util.searchResultToArray(result);
} catch (e) {
log(`Failed to search by keywords: ${e.message}`);
}
invocation.return_value(new GLib.Variant('(as)', [characters]));
this._app.release();
});
}
GetInitialResultSetAsync(params, invocation) {
this._app.hold();
this._runQuery(params[0], invocation);
}
GetSubsearchResultSetAsync(params, invocation) {
this._app.hold();
this._runQuery(params[1], invocation);
}
GetResultMetas(identifiers) {
this._app.hold();
let ret = [];
for (let i = 0; i < identifiers.length; i++) {
let character = identifiers[i];
let codePoint = Util.toCodePoint(character);
let codePointHex = codePoint.toString(16).toUpperCase();
let name = Gc.character_name(character);
if (name == null)
name = _("Unknown character name");
else
name = Util.capitalize(name);
let summary = _("U+%s, %s: %s").format(codePointHex,
character,
name);
ret.push({ name: new GLib.Variant('s', name),
id: new GLib.Variant('s', identifiers[i]),
description: new GLib.Variant('s', summary),
icon: (new Gio.ThemedIcon({ name: Service.application_id })).serialize(),
clipboardText: new GLib.Variant('s', character)
});
}
this._app.release();
return ret;
}
ActivateResult(id, terms, timestamp) {
let clipboard = Gc.gtk_clipboard_get();
clipboard.set_text(id, -1);
}
_getPlatformData(timestamp) {
let display = Gdk.Display.get_default();
let context = display.get_app_launch_context();
context.set_timestamp(timestamp);
let app = Gio.DesktopAppInfo.new('org.gnome.Characters.desktop');
let id = context.get_startup_notify_id(app, []);
return {'desktop-startup-id': new GLib.Variant('s', id) };
}
_activateAction(action, parameter, timestamp) {
let wrappedParam;
if (parameter)
wrappedParam = [parameter];
else
wrappedParam = [];
Gio.DBus.session.call('org.gnome.Characters',
'/org/gnome/Characters',
'org.freedesktop.Application',
'ActivateAction',
new GLib.Variant('(sava{sv})', [action, wrappedParam,
this._getPlatformData(timestamp)]),
null,
Gio.DBusCallFlags.NONE,
-1, null, (connection, result) => {
try {
connection.call_finish(result);
} catch(e) {
log(`Failed to launch application: ${e.message}`);
}
this._app.release();
});
}
LaunchSearch(terms, timestamp) {
this._activateAction('search', new GLib.Variant('as', terms),
timestamp);
}
});
(uuay)js/ params.js �
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
// Params:
//
// A set of convenience functions for dealing with pseudo-keyword
// arguments.
//
// Examples:
//
// A function with complex arguments
// function myFunction(params) {
// params = Params.parse(params, { myFlags: Flags.NONE,
// anInt: 42,
// aString: 'hello, world!',
// });
// ... params.anInt, params.myFlags, params.aString ...
// }
// myFunction({ anInt: -1 });
//
// Extend a method to allow more params in a subclass
// The superclass can safely use Params.parse(), it won't see
// the extensions.
// const MyClass = new Lang.Class({
// ...
// method: function(params) {
// let mine = Params.filter(params, { anInt: 42 });
// this.parent(params);
// ... mine.anInt ...
// }
// });
// parse:
// @params: caller-provided parameter object, or %null
// @defaults: function-provided defaults object
//
// Examines @params and fills in default values from @defaults for
// any properties in @defaults that don't appear in @params.
// This function will throw a Error if @params contains a property
// that is not recognized. Use fill() or filter() if you don't
// want that.
//
// If @params is %null, this returns the values from @defaults.
//
// Return value: a new object, containing the merged parameters from
// @params and @defaults
function parse(params, defaults) {
let ret = {}, prop;
params = params || {};
for (prop in params) {
if (!(prop in defaults))
throw new Error('Unrecognized parameter "' + prop + '"');
ret[prop] = params[prop];
}
for (prop in defaults) {
if (!(prop in params))
ret[prop] = defaults[prop];
}
return ret;
}
// fill:
// @params: caller-provided parameter object, or %null
// @defaults: function-provided defaults object
//
// Examines @params and fills in default values from @defaults
// for any properties in @defaults that don't appear in @params.
//
// Differently from parse(), this function does not throw for
// unrecognized parameters.
//
// Return value: a new object, containing the merged parameters from
// @params and @defaults
function fill(params, defaults) {
let ret = {}, prop;
params = params || {};
for (prop in params)
ret[prop] = params[prop];
for (prop in defaults) {
if (!(prop in ret))
ret[prop] = defaults[prop];
}
return ret;
}
// filter:
// @params: caller-provided parameter object, or %null
// @defaults: function-provided defaults object
//
// Examines @params and returns an object containing the
// same properties as @defaults, but with values taken from
// @params where available.
// Then it removes from @params all matched properties.
//
// This is similar to parse(), but it accepts unknown properties
// and modifies @params for known ones.
//
// If @params is %null, this returns the values from @defaults.
//
// Return value: a new object, containing the merged parameters from
// @params and @defaults
function filter(params, defaults) {
let ret = {}, prop;
params = params || {};
for (prop in defaults) {
if (!(prop in params))
ret[prop] = defaults[prop];
}
for (prop in params) {
if (prop in defaults) {
ret[prop] = params[prop];
delete params[prop];
}
}
return ret;
}
(uuay)gnome/ BackgroundService/
Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists