diff --git a/bindings/dbus-xml/org-asuslinux-anime-4.xml b/bindings/dbus-xml/org-asuslinux-anime-4.xml index f75c27a1..044330a5 100644 --- a/bindings/dbus-xml/org-asuslinux-anime-4.xml +++ b/bindings/dbus-xml/org-asuslinux-anime-4.xml @@ -59,7 +59,7 @@ system-status animations --> - + diff --git a/desktop-extensions/gnome/schemas/org.gnome.shell.extensions.asusctl-gex.gschema.xml b/desktop-extensions/gnome/schemas/org.gnome.shell.extensions.asusctl-gex.gschema.xml index 0a2f755b..d7b1560f 100644 --- a/desktop-extensions/gnome/schemas/org.gnome.shell.extensions.asusctl-gex.gschema.xml +++ b/desktop-extensions/gnome/schemas/org.gnome.shell.extensions.asusctl-gex.gschema.xml @@ -7,6 +7,9 @@ false + + false + 100 diff --git a/desktop-extensions/gnome/src/extension.ts b/desktop-extensions/gnome/src/extension.ts index a2651d60..4e5338e6 100644 --- a/desktop-extensions/gnome/src/extension.ts +++ b/desktop-extensions/gnome/src/extension.ts @@ -14,11 +14,13 @@ import { QuickPanelOd } from './modules/quick_toggles/panel_od'; import { IndicateMiniLed } from './modules/indicators/mini_led'; import { QuickMiniLed } from './modules/quick_toggles/mini_led'; import { SliderChargeLevel } from './modules/sliders/charge'; +import { QuickAnimePower } from './modules/quick_toggles/anime_power'; class Extension { private _indicateMiniLed: typeof IndicateMiniLed; private _quickMiniLed: typeof QuickMiniLed; private _quickPanelOd: typeof QuickPanelOd; + private _quickAnimePower: typeof QuickAnimePower; private _sliderCharge: typeof SliderChargeLevel; public _dbus_power!: Power; @@ -30,6 +32,7 @@ class Extension { this._indicateMiniLed = null; this._quickMiniLed = null; this._quickPanelOd = null; + this._quickAnimePower = null; this._sliderCharge = null; this.dbus_supported = new Supported(); @@ -59,6 +62,11 @@ class Extension { this._quickPanelOd = new QuickPanelOd(this.dbus_platform); } } + if (this.dbus_supported.supported.anime_ctrl) { + if (this._quickAnimePower == null) { + this._quickAnimePower = new QuickAnimePower(this._dbus_anime); + } + } if (this.dbus_supported.supported.charge_ctrl.charge_level_set) { if (this._sliderCharge == null) { this._sliderCharge = new SliderChargeLevel(this._dbus_power); @@ -79,6 +87,10 @@ class Extension { this._quickPanelOd.destroy(); this._quickPanelOd = null; } + if (this._quickAnimePower != null) { + this._quickAnimePower.destroy(); + this._quickAnimePower = null; + } if (this._sliderCharge != null) { this._sliderCharge.destroy(); this._sliderCharge = null; diff --git a/desktop-extensions/gnome/src/modules/dbus/animatrix.ts b/desktop-extensions/gnome/src/modules/dbus/animatrix.ts index a3a3ae41..d66748d8 100644 --- a/desktop-extensions/gnome/src/modules/dbus/animatrix.ts +++ b/desktop-extensions/gnome/src/modules/dbus/animatrix.ts @@ -31,7 +31,7 @@ export class AnimeDbus extends DbusBase { if (this.deviceState.display_enabled !== state) { this.deviceState.display_enabled = state; } - return this.dbus_proxy.SetOnOffSync(state); + return this.dbus_proxy.SetEnableDisplaySync(state); } catch (e) { //@ts-ignore log(`AniMe DBus set power failed!`, e); @@ -53,7 +53,29 @@ export class AnimeDbus extends DbusBase { } } - _parseDeviceState(input: String) { + public getDeviceState() { + if (this.isRunning()) { + try { + let _data = this.dbus_proxy.DeviceStateSync(); + if (_data.length > 0) { + this.deviceState.display_enabled = _data[0]; + this.deviceState.display_brightness = Brightness[_data[1] as Brightness]; + this.deviceState.builtin_anims_enabled = _data[2]; + this.deviceState.builtin_anims.boot = AnimBooting[_data[3][0] as AnimBooting]; + this.deviceState.builtin_anims.awake = AnimAwake[_data[3][1] as AnimAwake]; + this.deviceState.builtin_anims.sleep = AnimSleeping[_data[3][2] as AnimSleeping]; + this.deviceState.builtin_anims.shutdown = AnimShutdown[_data[3][2] as AnimShutdown]; + // this._parseDeviceStateString(_data); + } + } catch (e) { + //@ts-ignore + log(`Failed to fetch DeviceState!`, e); + } + } + return this.deviceState; + } + + _parseDeviceStateString(input: String) { let valueString: string = ''; for (const [_key, value] of Object.entries(input)) { @@ -81,20 +103,6 @@ export class AnimeDbus extends DbusBase { } } - public getDeviceState() { - if (this.isRunning()) { - try { - let _data = this.dbus_proxy.DeviceStateSync(); - if (_data.length > 0) { - this._parseDeviceState(_data); - } - } catch (e) { - //@ts-ignore - log(`Failed to fetch DeviceState!`, e); - } - } - return this.deviceState; - } async start() { await super.start(); @@ -104,9 +112,9 @@ export class AnimeDbus extends DbusBase { "NotifyDeviceState", (proxy: any = null, name: string, data: string) => { if (proxy) { - this._parseDeviceState(data); + this._parseDeviceStateString(data); //@ts-ignore - log(`NotifyDeviceState has changed to ${data}% (${name}).`); + log(`NotifyDeviceState has changed to ${data}`); } } ); diff --git a/desktop-extensions/gnome/src/modules/quick_toggles/anime_power.ts b/desktop-extensions/gnome/src/modules/quick_toggles/anime_power.ts new file mode 100644 index 00000000..162ee3a7 --- /dev/null +++ b/desktop-extensions/gnome/src/modules/quick_toggles/anime_power.ts @@ -0,0 +1,54 @@ +declare const imports: any; + +import { AnimeDbus } from "../dbus/animatrix"; +import { addQuickSettingsItems } from "../helpers"; + +const { GObject, Gio } = imports.gi; +const ExtensionUtils = imports.misc.extensionUtils; + +const { QuickToggle } = imports.ui.quickSettings; + +export const QuickAnimePower = GObject.registerClass( + class QuickAnimePower extends QuickToggle { + private _dbus_anime: AnimeDbus; + + constructor(dbus_anime: AnimeDbus) { + super({ + title: 'AniMatrix Power', + iconName: 'selection-mode-symbolic', + toggleMode: true, + }); + this._dbus_anime = dbus_anime; + this.label = 'AniMatrix Power'; + this._settings = ExtensionUtils.getSettings(); + + this.connectObject( + 'destroy', () => this._settings.run_dispose(), + 'clicked', () => this._toggleMode(), + this); + + this.connect('destroy', () => { + this.destroy(); + }); + + this._settings.bind('anime-power', + this, 'checked', + Gio.SettingsBindFlags.DEFAULT); + + this._sync(); + + addQuickSettingsItems([this]); + } + + _toggleMode() { + this._dbus_anime.setEnableDisplay(this.checked); + this._sync(); + } + + _sync() { + this._dbus_anime.getDeviceState(); + const checked = this._dbus_anime.deviceState.display_enabled; + if (this.checked !== checked) + this.set({ checked }); + } + }); \ No newline at end of file