85 lines
2.1 KiB
JavaScript
Raw Normal View History

2024-07-08 22:46:35 +02:00
// SPDX-FileCopyrightText: GSConnect Developers https://github.com/GSConnect
//
// SPDX-License-Identifier: GPL-2.0-or-later
import Gio from 'gi://Gio';
import GLib from 'gi://GLib';
const Session = class {
constructor() {
this._connection = Gio.DBus.system;
this._session = null;
this._initAsync();
}
async _initAsync() {
try {
const reply = await this._connection.call(
'org.freedesktop.login1',
'/org/freedesktop/login1',
'org.freedesktop.login1.Manager',
'ListSessions',
null,
null,
Gio.DBusCallFlags.NONE,
-1,
null);
const sessions = reply.deepUnpack()[0];
const userName = GLib.get_user_name();
let sessionPath = '/org/freedesktop/login1/session/auto';
// eslint-disable-next-line no-unused-vars
for (const [num, uid, name, seat, objectPath] of sessions) {
if (name === userName) {
sessionPath = objectPath;
break;
}
}
this._session = new Gio.DBusProxy({
g_connection: this._connection,
g_name: 'org.freedesktop.login1',
g_object_path: sessionPath,
g_interface_name: 'org.freedesktop.login1.Session',
});
await this._session.init_async(GLib.PRIORITY_DEFAULT, null);
} catch (e) {
this._session = null;
logError(e);
}
}
get idle() {
if (this._session === null)
return false;
return this._session.get_cached_property('IdleHint').unpack();
}
get locked() {
if (this._session === null)
return false;
return this._session.get_cached_property('LockedHint').unpack();
}
get active() {
// Active if not idle and not locked
return !(this.idle || this.locked);
}
destroy() {
this._session = null;
}
};
/**
* The service class for this component
*/
export default Session;