| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- // 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;
|