// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- const Gio = imports.gi.Gio; const GLib = imports.gi.GLib; const Lang = imports.lang; const Shell = imports.gi.Shell; const Signals = imports.signals; const ProviderIface = ; const Provider = new Gio.DBusProxyClass({ Name: 'RealmdProvider', Interface: ProviderIface, _init: function() { this.parent({ g_bus_type: Gio.BusType.SYSTEM, g_name: 'org.freedesktop.realmd', g_object_path: '/org/freedesktop/realmd' }); } }); const ServiceIface = ; const Service = new Gio.DBusProxyClass({ Name: 'RealmdService', Interface: ServiceIface, _init: function(service) { this.parent({ g_bus_type: Gio.BusType.SYSTEM, g_name: 'org.freedesktop.realmd', g_object_path: service }); } }); const RealmIface = ; const Realm = new Gio.DBusProxyClass({ Name: 'RealmdRealm', Interface: RealmIface, _init: function(realm) { this.parent({ g_bus_type: Gio.BusType.SYSTEM, g_name: 'org.freedesktop.realmd', g_object_path: realm }); } }); const Manager = new Lang.Class({ Name: 'Manager', _init: function(parentActor) { this._aggregateProvider = new Provider(); this._aggregateProvider.init(null); this._realms = {}; this._aggregateProvider.connect('g-properties-changed', Lang.bind(this, function(proxy, properties) { if ('Realms' in properties.deep_unpack()) this._reloadRealms(); })); }, _reloadRealms: function() { let realmPaths = this._aggregateProvider.Realms; if (!realmPaths) return; for (let i = 0; i < realmPaths.length; i++) { let realm = new Realm(realmPaths[i]); realm.init_async(GLib.PRIORITY_DEFAULT, null, Lang.bind(this, this._onRealmLoaded)); } }, _reloadRealm: function(realm) { if (!realm.Configured) { if (this._realms[realm.get_object_path()]) delete this._realms[realm.get_object_path()]; return; } this._realms[realm.get_object_path()] = realm; this._updateLoginFormat(); }, _onRealmLoaded: function(realm, result) { try { realm.init_finish(result); } catch(e) { return; } this._reloadRealm(realm); realm.connect('g-properties-changed', Lang.bind(this, function(proxy, properties) { if ('Configured' in properties.deep_unpack()) this._reloadRealm(); })); }, _updateLoginFormat: function() { let newLoginFormat; for (let realmPath in this._realms) { let realm = this._realms[realmPath]; if (realm.LoginFormats && realm.LoginFormats.length > 0) { newLoginFormat = realm.LoginFormats[0]; break; } } if (this._loginFormat != newLoginFormat) { this._loginFormat = newLoginFormat; this.emit('login-format-changed', newLoginFormat); } }, get loginFormat() { if (this._loginFormat !== undefined) return this._loginFormat; this._updateLoginFormat(); return this._loginFormat; } }); Signals.addSignalMethods(Manager.prototype)