From 0f2419d011cfabab29877773e34a58c0144c93f0 Mon Sep 17 00:00:00 2001 From: No roads left Date: Tue, 15 Mar 2022 01:51:08 +0530 Subject: [PATCH 1/2] Fixed the code, as per gnome extension guidelines. Removed all the global object creation. Export classes instead on objects. --- App.js | 34 +++++++++++++++++++ AppController.js | 70 +++++++++++++++++++-------------------- AppSettingsModel.js | 13 ++++---- commands.sh | 1 + extension.js | 21 ++++++++---- net/DeviceModel.js | 13 ++++---- net/DeviceMonitor.js | 12 +++---- net/NetworkMonitor.js | 34 +++++++++---------- prefs.js | 11 +++--- ui/AppView.js | 19 ++++++----- ui/MainPanel.js | 4 +-- ui/PopupView.js | 60 ++++++++++++++++----------------- utils/Broadcasters.js | 32 ++++++++++++++++++ utils/EventBroadcaster.js | 6 ++-- utils/GenUtils.js | 1 - utils/Logger.js | 4 +-- 16 files changed, 206 insertions(+), 129 deletions(-) create mode 100644 App.js create mode 100644 utils/Broadcasters.js diff --git a/App.js b/App.js new file mode 100644 index 0000000..7671770 --- /dev/null +++ b/App.js @@ -0,0 +1,34 @@ +const ExtensionUtils = imports.misc.extensionUtils; +const Me = ExtensionUtils.getCurrentExtension(); + +const { AppController } = Me.imports.AppController; +const { AppSettingsModel } = Me.imports.AppSettingsModel; +const { DeviceModel } = Me.imports.net.DeviceModel; +const { NetworkMonitor } = Me.imports.net.NetworkMonitor; +const { DeviceMonitor } = Me.imports.net.DeviceMonitor; +const { Logger } = Me.imports.utils.Logger; + +class AppClass { + + constructor() { + const logger = new Logger(); + const appSettingsModel = new AppSettingsModel(logger); + appSettingsModel.init(); + const deviceMonitor = new DeviceMonitor(logger); + const networkMonitor = new NetworkMonitor(logger, appSettingsModel); + const deviceModel = new DeviceModel(logger, deviceMonitor, networkMonitor); + this._appController = new AppController(logger, appSettingsModel, deviceModel); + } + + start() { + this._appController.init(); + this._appController.show(); + } + + stop() { + this._appController.hide(); + this._appController.deinit(); + } +} + +var App = AppClass; \ No newline at end of file diff --git a/AppController.js b/AppController.js index 2d166bb..72d2d47 100644 --- a/AppController.js +++ b/AppController.js @@ -3,16 +3,14 @@ const Mainloop = imports.mainloop; const ExtensionUtils = imports.misc.extensionUtils; const Me = ExtensionUtils.getCurrentExtension(); -const { appView } = Me.imports.ui.AppView; -const { logger } = Me.imports.utils.Logger; +const { AppView } = Me.imports.ui.AppView; const { DeviceModel } = Me.imports.net.DeviceModel; -const { appSettingsModel } = Me.imports.AppSettingsModel; const { DisplayMode } = Me.imports.utils.Constants; const { bytesSpeedToString } = Me.imports.utils.GenUtils; const { bytesToString } = Me.imports.utils.GenUtils; const { getNextResetTime } = Me.imports.utils.DateTimeUtils; -const { titleClickedMessageBroadcaster } = Me.imports.utils.EventBroadcaster; +const { getTitleClickedMessageBroadcaster } = Me.imports.utils.Broadcasters; const kOneMinuteInMilliSeconds = 60 * 1000; @@ -21,39 +19,41 @@ const kOneMinuteInMilliSeconds = 60 * 1000; * refreshing view and pushing model updates to UI. */ -class AppController { +class AppControllerClass { - constructor() { + constructor(logger, appSettingsModel, deviceModel) { + this._logger = logger; + this._appSettingsModel = appSettingsModel; + this._deviceModel = deviceModel; + this._appView = new AppView(logger, appSettingsModel); this._refreshTimeout = undefined; this._minuteTimeout = undefined; this._rightClickSubscribeHandle = undefined; this._settingsSubscribeHandle = undefined; - this._deviceModel = new DeviceModel(); } init() { - appSettingsModel.init(); // TODO: remove update() call from here and move device reset time to DeviceMonitor. this.update(); this.resetIfRequired(); this._rightClickSubscribeHandle = this.onRightClick.bind(this); - titleClickedMessageBroadcaster.subscribe(this._rightClickSubscribeHandle); + getTitleClickedMessageBroadcaster().subscribe(this._rightClickSubscribeHandle); this._settingsSubscribeHandle = this.onSettingChanged.bind(this); - appSettingsModel.subscribe(this._settingsSubscribeHandle); + this._appSettingsModel.subscribe(this._settingsSubscribeHandle); this.installTimers(); } deinit() { - titleClickedMessageBroadcaster.unsubscribe(this._rightClickSubscribeHandle); + getTitleClickedMessageBroadcaster().unsubscribe(this._rightClickSubscribeHandle); this._rightClickSubscribeHandle = undefined; - appSettingsModel.unsubscribe(this._settingsSubscribeHandle); + this._appSettingsModel.unsubscribe(this._settingsSubscribeHandle); this._settingsSubscribeHandle = undefined; - appSettingsModel.deinit(); + this._appSettingsModel.deinit(); this.uninstallTimers(); } installTimers() { - const { refreshInterval } = appSettingsModel; + const { refreshInterval } = this._appSettingsModel; this._refreshTimeout = Mainloop.timeout_add(refreshInterval, this.onRefreshTimeout.bind(this)); this._minuteTimeout = Mainloop.timeout_add(kOneMinuteInMilliSeconds, this.onEveryMinute.bind(this)); } @@ -70,15 +70,15 @@ class AppController { } show() { - appView.show(); + this._appView.show(); } hide() { - appView.hide(); + this._appView.hide(); } _getActiveDeviceName() { - const userPreferedDevice = appSettingsModel.preferedDeviceName; + const userPreferedDevice = this._appSettingsModel.preferedDeviceName; if (this._deviceModel.hasDevice(userPreferedDevice)) { return userPreferedDevice; } @@ -86,11 +86,11 @@ class AppController { } update() { - const { displayMode, refreshInterval, displayBytes } = appSettingsModel; - //logger.debug(`displayMode : ${displayMode}`); + const { displayMode, refreshInterval, displayBytes } = this._appSettingsModel; + //this._logger.debug(`displayMode : ${displayMode}`); this._deviceModel.update(refreshInterval, displayBytes); const activeDevice = this._getActiveDeviceName(); - //logger.debug(`activeDevice: ${activeDevice}`); + //this._logger.debug(`activeDevice: ${activeDevice}`); let titleStr = "----"; switch(displayMode) { case DisplayMode.TOTAL_SPEED: @@ -131,27 +131,27 @@ class AppController { break; } } - appView.setTitleText(titleStr); - appView.update(this._deviceModel); + this._appView.setTitleText(titleStr); + this._appView.update(this._deviceModel); // Debugging // const upload = this._deviceModel.getUploadSpeed(activeDevice); // const download = this._deviceModel.getDownloadSpeed(activeDevice); // const totalData = this._deviceModel.getTotalDataUsage(activeDevice); - // logger.debug(`upload: ${upload} download: ${download} totalData: ${totalData}`); + // this._logger.debug(`upload: ${upload} download: ${download} totalData: ${totalData}`); // const uploadStr = bytesSpeedToString(upload, displayBytes); // const downloadStr = bytesSpeedToString(download, displayBytes); // const totalDataStr = bytesToString(totalData); - // logger.debug(`deviceName: ${activeDevice} upload: ${uploadStr} download: ${downloadStr} totalData: ${totalDataStr}`); + // this._logger.debug(`deviceName: ${activeDevice} upload: ${uploadStr} download: ${downloadStr} totalData: ${totalDataStr}`); } resetIfRequired() { const now = new Date(); const activeDevice = this._getActiveDeviceName(); - const lastResetedAt = appSettingsModel.getLastResetDateTime(activeDevice); - const newResetTime = getNextResetTime(lastResetedAt, appSettingsModel); - //logger.log(`oldResetTime: ${lastResetedAt}`); - //logger.log(`newResetTime: ${newResetTime}`); + const lastResetedAt = this._appSettingsModel.getLastResetDateTime(activeDevice); + const newResetTime = getNextResetTime(lastResetedAt, this._appSettingsModel); + //this._logger.log(`oldResetTime: ${lastResetedAt}`); + //this._logger.log(`newResetTime: ${newResetTime}`); if (now.getTime() >= newResetTime.getTime()) { // crossed the mark, Time to reset network stats this._deviceModel.resetAll(); @@ -160,21 +160,21 @@ class AppController { // #region Event handlers onRefreshTimeout() { - //logger.debug("tick"); + //this._logger.debug("tick"); try { this.update(); } catch(err) { - logger.error(`ERROR: ${err.toString()} TRACE: ${err.stack}`); + this._logger.error(`ERROR: ${err.toString()} TRACE: ${err.stack}`); } return true; } onEveryMinute() { - //logger.debug("every 1 minutes"); + //this._logger.debug("every 1 minutes"); try { this.resetIfRequired(); } catch(err) { - logger.error(`ERROR: ${err.toString()} TRACE: ${err.stack}`); + this._logger.error(`ERROR: ${err.toString()} TRACE: ${err.stack}`); } return true; } @@ -187,7 +187,7 @@ class AppController { onRightClick({button}) { if (button === "right") { // cycle through the modes - let { displayMode } = appSettingsModel; + let { displayMode } = this._appSettingsModel; switch(displayMode) { default: case DisplayMode.TOTAL_SPEED: @@ -216,11 +216,11 @@ class AppController { break; } } - appSettingsModel.displayMode = displayMode; + this._appSettingsModel.displayMode = displayMode; this.update(); } } // #endregion Event handlers } -var appController = new AppController; \ No newline at end of file +var AppController = AppControllerClass; \ No newline at end of file diff --git a/AppSettingsModel.js b/AppSettingsModel.js index aaac1d0..0b242c2 100644 --- a/AppSettingsModel.js +++ b/AppSettingsModel.js @@ -17,9 +17,10 @@ const kSchemaName = "org.gnome.shell.extensions.network-stats"; /* * AppSettingsModel represents application setttings and user prefrences. */ -class AppSettingsModel { +class AppSettingsModelClass { - constructor() { + constructor(logger) { + this._logger = logger; this._schema = undefined; this._settingListeners = []; this._refreshInterval = kRefreshInterval; @@ -39,7 +40,7 @@ class AppSettingsModel { this.load(); this._settingsC = this.schema.connect("changed", () => { // setting changed - get the new values - logger.info("Prefrences/Settings value changed"); + this._logger.info("Prefrences/Settings value changed"); this.load(); this.notifyListerners(); }); @@ -75,8 +76,8 @@ class AppSettingsModel { this._preferedDeviceName = this.schema.get_string(SettingKeys.PREFERED_DEVICE); this._displayBytes = this.schema.get_boolean(SettingKeys.DISPLAY_BYTES); this._showIcon = this.schema.get_boolean(SettingKeys.SHOW_ICON); - // logger.debug(`new values [ refreshInterval: ${this._refreshInterval} displayMode: ${this._displayMode} resetTime: ${this._resetHours} : ${this._resetMinutes}]`); - // logger.debug(`deivicesInfoMap ${str}`); + // this._logger.debug(`new values [ refreshInterval: ${this._refreshInterval} displayMode: ${this._displayMode} resetTime: ${this._resetHours} : ${this._resetMinutes}]`); + // this._logger.debug(`deivicesInfoMap ${str}`); } save() { @@ -207,4 +208,4 @@ class AppSettingsModel { } } -var appSettingsModel = new AppSettingsModel; \ No newline at end of file +var AppSettingsModel = AppSettingsModelClass; \ No newline at end of file diff --git a/commands.sh b/commands.sh index 1d00805..68a1c94 100644 --- a/commands.sh +++ b/commands.sh @@ -48,6 +48,7 @@ pack() { gnome-extensions pack \ --force \ + --extra-source=App.js \ --extra-source=AppController.js \ --extra-source=AppSettingsModel.js \ --extra-source=AUTHORS \ diff --git a/extension.js b/extension.js index 89edf5a..3886998 100644 --- a/extension.js +++ b/extension.js @@ -2,22 +2,29 @@ const ExtensionUtils = imports.misc.extensionUtils; const Me = ExtensionUtils.getCurrentExtension(); -const { logger } = Me.imports.utils.Logger; -const { appController } = Me.imports.AppController; +const { Logger } = Me.imports.utils.Logger; +const { App } = Me.imports.App; +const { initBrodcasters, deinitBrodcasters } = Me.imports.utils.Broadcasters; const Prefs = Me.imports.prefs; +let logger = undefined; +let app = undefined; function init() { - logger.info(`initializing ${Me.metadata.name}`); + logger = new Logger; + logger.info(`initializing 1 ${Me.metadata.name}`); } function enable() { logger.info(`enabling ${Me.metadata.name}`); - appController.init(); - appController.show(); + initBrodcasters(); + app = new App(); + app.start(); } function disable() { logger.info(`disabling ${Me.metadata.name}`); - appController.hide(); - appController.deinit(); + app.stop(); + deinitBrodcasters(); + app = undefined; + logger = undefined; } diff --git a/net/DeviceModel.js b/net/DeviceModel.js index 03cc247..24837a8 100644 --- a/net/DeviceModel.js +++ b/net/DeviceModel.js @@ -15,13 +15,14 @@ const { bytesToString } = Me.imports.utils.GenUtils; class DeviceModelClass { - constructor() { + constructor(logger, deviceMonitor, networkMonitor) { this._upload = 0; this._download = 0; this._stats = {}; this._statsText = {}; - this._deviceMonitor = new DeviceMonitor(); - this._networkMonitor = new NetworkMonitor(); + this._logger = logger; + this._deviceMonitor = deviceMonitor; + this._networkMonitor = networkMonitor; } getUploadSpeed(deviceName) { @@ -84,7 +85,7 @@ class DeviceModelClass { deviceLogs } = this._networkMonitor.getStats(); - //logger.debug(`defaultGateway: ${this._deviceMonitor.getActiveDeviceName()}`); + //this._logger.debug(`defaultGateway: ${this._deviceMonitor.getActiveDeviceName()}`); if (!error) { const stats = {}; const statsText = {}; @@ -130,13 +131,13 @@ class DeviceModelClass { second: "2-digit" }), }; - //logger.debug(`${name} => upload: ${upSpeed} download: ${downSpeed} total: ${totalData}`); + //this._logger.debug(`${name} => upload: ${upSpeed} download: ${downSpeed} total: ${totalData}`); } } this._stats = stats; this._statsText = statsText; } else { - logger.debug(error); + this._logger.debug(error); } } diff --git a/net/DeviceMonitor.js b/net/DeviceMonitor.js index 3d436ed..4ab5600 100644 --- a/net/DeviceMonitor.js +++ b/net/DeviceMonitor.js @@ -4,7 +4,6 @@ const NetworkManager = imports.gi.NM; const ExtensionUtils = imports.misc.extensionUtils; const Me = ExtensionUtils.getCurrentExtension(); -const { logger } = Me.imports.utils.Logger; const { DeviceType } = Me.imports.utils.Constants; @@ -16,7 +15,8 @@ const { DeviceType } = Me.imports.utils.Constants; class DeviceMonitorClass { - constructor() { + constructor(logger) { + this._logger = logger; this._client = NetworkManager.Client.new(null); this._devices = {}; this._defaultGw = ""; @@ -97,7 +97,7 @@ class DeviceMonitorClass { const devices = []; for (let index = 2; index < lines.length - 1; ++index) { const line = lines[index].trim(); - logger.debug(`${index} - ${line}`); + this._logger.debug(`${index} - ${line}`); const fields = line.split(/[^A-Za-z0-9_-]+/); const deviceName = fields[0]; @@ -139,7 +139,7 @@ class DeviceMonitorClass { this._defaultGw = params[0]; } } - logger.debug(`default gateway: ${this._defaultGw}`); + this._logger.debug(`default gateway: ${this._defaultGw}`); } _connectDeviceStateChangeSignals() { @@ -178,14 +178,14 @@ class DeviceMonitorClass { ipConfig = device.get_ip6_config(); if (ipConfig == null) { - logger.info(`No config found for device '${device.get_iface()}'`); + this._logger.info(`No config found for device '${device.get_iface()}'`); addresses[0] = "-"; return addresses; } const netMgrAddresses = ipConfig.get_addresses(); if (netMgrAddresses.length == 0) { - logger.info(`No IP addresses found for device '${device.get_iface()}'`); + this._logger.info(`No IP addresses found for device '${device.get_iface()}'`); addresses[0] = "-"; return addresses; } diff --git a/net/NetworkMonitor.js b/net/NetworkMonitor.js index ef5a538..b5dab65 100644 --- a/net/NetworkMonitor.js +++ b/net/NetworkMonitor.js @@ -6,13 +6,13 @@ const ByteArray = imports.byteArray; const ExtensionUtils = imports.misc.extensionUtils; const Me = ExtensionUtils.getCurrentExtension(); -const { logger } = Me.imports.utils.Logger; -const { deviceResetMessageBroadcaster } = Me.imports.utils.EventBroadcaster; -const { appSettingsModel } = Me.imports.AppSettingsModel; +const { getDeviceResetMessageBroadcaster } = Me.imports.utils.Broadcasters; class NetworkMonitorClass { - constructor() { + constructor(logger, appSettingsModel) { + this._logger = logger; + this._appSettingsModel = appSettingsModel; this._deviceLogs = {}; this.init(); } @@ -20,11 +20,11 @@ class NetworkMonitorClass { init() { // load from preferences const now = new Date(); - appSettingsModel.load(); - const {devicesInfoMap} = appSettingsModel; + this._appSettingsModel.load(); + const {devicesInfoMap} = this._appSettingsModel; for (const name in devicesInfoMap) { const { resetedAt, initialReading } = devicesInfoMap[name]; - logger.info(`init - ${name} - ${resetedAt} - ${initialReading}`); + this._logger.info(`init - ${name} - ${resetedAt} - ${initialReading}`); if (resetedAt) { this._deviceLogs[name] = { resetedAt: new Date(resetedAt) || now, @@ -33,24 +33,24 @@ class NetworkMonitorClass { }; } } - deviceResetMessageBroadcaster.subscribe(this.resetDeviceLogs.bind(this)); + getDeviceResetMessageBroadcaster().subscribe(this.resetDeviceLogs.bind(this)); } resetDeviceLogs({name}) { - logger.info(`Reset the logs for device ${name}`); + this._logger.info(`Reset the logs for device ${name}`); this._deviceLogs[name] = {...this._deviceLogs[name], reset: true }; - appSettingsModel.replaceDeviceInfo(name, { resetedAt: new Date().toString() }); + this._appSettingsModel.replaceDeviceInfo(name, { resetedAt: new Date().toString() }); } resetAll() { - logger.info(`Restting all devices at ${new Date().toString()}`); + this._logger.info(`Restting all devices at ${new Date().toString()}`); const infoMap = {}; const currTime = new Date().toString(); for (const name in this._deviceLogs) { this._deviceLogs[name].reset = true; infoMap[name] = { resetedAt: currTime }; } - appSettingsModel.devicesInfoMap = infoMap; + this._appSettingsModel.devicesInfoMap = infoMap; } _needReset(deviceName) { @@ -71,7 +71,7 @@ class NetworkMonitorClass { const deviceLogs = {}; for (let index = 2; index < lines.length - 1; ++index) { const line = lines[index].trim(); - //logger.debug(`${index} - ${line}`); + //this._logger.debug(`${index} - ${line}`); const fields = line.split(/[^A-Za-z0-9_-]+/); const deviceName = fields[0]; @@ -81,7 +81,7 @@ class NetworkMonitorClass { const sent = parseInt(fields[9]); const received = parseInt(fields[1]); if (this._needReset(deviceName)) { - logger.debug(`reset - ${deviceName}`); + this._logger.debug(`reset - ${deviceName}`); deviceLogs[deviceName] = { name: deviceName, sent, @@ -95,7 +95,7 @@ class NetworkMonitorClass { reset: false }; // write to app settings/prefs - appSettingsModel.updateDeviceInfo(deviceName, { + this._appSettingsModel.updateDeviceInfo(deviceName, { initialReading: deviceLogs[deviceName].initialReading, resetedAt: deviceLogs[deviceName].resetedAt.toString(), }); @@ -120,11 +120,11 @@ class NetworkMonitorClass { }; if (deviceLogs[deviceName].totalData < 0) { - logger.info("Reset due to -ve reading, may be a wrap around."); + this._logger.info("Reset due to -ve reading, may be a wrap around."); deviceLogs[deviceName].reset = true; } } - //logger.debug(`up: ${sent} down: ${received}`); + //this._logger.debug(`up: ${sent} down: ${received}`); } this._deviceLogs = deviceLogs; diff --git a/prefs.js b/prefs.js index b486c50..22b503b 100644 --- a/prefs.js +++ b/prefs.js @@ -13,7 +13,7 @@ const { SettingKeys } = Me.imports.utils.Constants; const { kSchemaName } = Me.imports.utils.Constants; const { setTimeout } = Me.imports.utils.DateTimeUtils; const { isGtk3, addChildToBox } = Me.imports.utils.GtkUtils; -const { logger } = Me.imports.utils.Logger; +const { Logger } = Me.imports.utils.Logger; const { appSettingsModel } = Me.imports.AppSettingsModel; @@ -78,6 +78,7 @@ const SettingRowOrder = Object.freeze({ class PrefsApp { constructor() { + this._logger = new Logger; this._rows = {}; this.main = new Gtk.Grid({ margin_top: 10, @@ -125,7 +126,7 @@ class PrefsApp { _hideRow(row) { const label = this.main.get_child_at(0, row); const input = this.main.get_child_at(1, row); - //logger.log(`${row}. label: ${label} input: ${input}`); + //this._logger.log(`${row}. label: ${label} input: ${input}`); if (label) { this.main.remove(label); } @@ -136,7 +137,7 @@ class PrefsApp { _showRow(row) { const { label, input } = this._rows[row]; - //logger.log(`${row}. label: ${label} input: ${input}`); + //this._logger.log(`${row}. label: ${label} input: ${input}`); if (!label.parent && !input.parent) { this.main.attach(label, 0, row, 1, 1); this.main.attach(input, 1, row, 1, 1); @@ -378,7 +379,7 @@ class PrefsApp { updateControls() { const resetSchedule = this.schema.get_string(SettingKeys.RESET_SCHEDULE); - //logger.log(`resetSchedule: ${resetSchedule}`); + //this._logger.log(`resetSchedule: ${resetSchedule}`); switch(resetSchedule) { default: case ResetSchedule.DAILY: @@ -419,6 +420,7 @@ class PrefsApp { /** Initialize language/locale */ function init() { + const logger = new Logger; logger.debug("init"); const localeDir = Me.dir.get_child("locale"); if (localeDir.query_exists(null)) { @@ -428,6 +430,7 @@ function init() { /** Build settings view */ function buildPrefsWidget() { + const logger = new Logger; logger.debug("buildPrefsWidget"); const widget = new PrefsApp(); if (isGtk3()) { diff --git a/ui/AppView.js b/ui/AppView.js index 925bde2..9298e38 100644 --- a/ui/AppView.js +++ b/ui/AppView.js @@ -3,9 +3,7 @@ const Clutter = imports.gi.Clutter; const ExtensionUtils = imports.misc.extensionUtils; const Me = ExtensionUtils.getCurrentExtension(); - -const { logger } = Me.imports.utils.Logger; -const { mainPanel } = Me.imports.ui.MainPanel; +const { MainPanel } = Me.imports.ui.MainPanel; const { PopupView } = Me.imports.ui.PopupView; @@ -13,9 +11,12 @@ const { PopupView } = Me.imports.ui.PopupView; * AppView class is manager class for managing UI show/hide/enable/disable. */ -class AppView { +class AppViewClass { - constructor() { + constructor(logger, appSettingsModel) { + this._logger = logger; + this._appSettingsModel = appSettingsModel; + this._mainPanel = new MainPanel(); this.createLayout(); } @@ -60,14 +61,14 @@ class AppView { } showDropDown() { - logger.debug("Show the drop down", this); + this._logger.debug("Show the drop down", this); } show() { if (!this._popupView) { - this._popupView = new PopupView; + this._popupView = new PopupView(this._logger, this._appSettingsModel); } - mainPanel.addToStatusArea(this._popupView); + this._mainPanel.addToStatusArea(this._popupView); } hide() { @@ -78,4 +79,4 @@ class AppView { } } -var appView = new AppView \ No newline at end of file +var AppView = AppViewClass; \ No newline at end of file diff --git a/ui/MainPanel.js b/ui/MainPanel.js index 81cb029..1e4e3c3 100644 --- a/ui/MainPanel.js +++ b/ui/MainPanel.js @@ -4,7 +4,7 @@ const Main = imports.ui.main; * MainPanel class manager class for adding removing things from panel. */ -class MainPanel { +class MainPanelClass { addChild(child){ Main.panel._rightBox.insert_child_at_index(child, 0); @@ -23,4 +23,4 @@ class MainPanel { } } -var mainPanel = new MainPanel; \ No newline at end of file +var MainPanel = MainPanelClass; \ No newline at end of file diff --git a/ui/PopupView.js b/ui/PopupView.js index b38f221..4a76bdf 100644 --- a/ui/PopupView.js +++ b/ui/PopupView.js @@ -9,16 +9,14 @@ const { CheckBox } = imports.ui.checkBox; const ExtensionUtils = imports.misc.extensionUtils; const Me = ExtensionUtils.getCurrentExtension(); -const { logger } = Me.imports.utils.Logger; const { getDeviceIcon, getIconPath } = Me.imports.utils.GenUtils; const { ExpandableMenuItem } = Me.imports.ui.ExpandableMenuItem; const { ExpandableDeviceMenuItem } = Me.imports.ui.ExpandableDeviceMenuItem; const { DeviceMenuTitleItem } = Me.imports.ui.DeviceMenuTitleItem; const { DeviceType } = Me.imports.utils.Constants; const { DisplayMode } = Me.imports.utils.Constants; -const { appSettingsModel } = Me.imports.AppSettingsModel; -const { deviceResetMessageBroadcaster } = Me.imports.utils.EventBroadcaster; -const { titleClickedMessageBroadcaster } = Me.imports.utils.EventBroadcaster; +const { getDeviceResetMessageBroadcaster } = Me.imports.utils.Broadcasters; +const { getTitleClickedMessageBroadcaster } = Me.imports.utils.Broadcasters; const Gettext = imports.gettext; const _ = Gettext.domain("network-stats").gettext; @@ -32,9 +30,10 @@ class PopupViewClass extends PanelMenu.Button { // Constructor /** @override */ - _init() { + _init(logger, appSettingsModel) { super._init(0); - + this._logger = logger; + this._appSettingsModel = appSettingsModel; this._menuItems = {}; const mainLabel = new St.Label({ @@ -53,7 +52,7 @@ class PopupViewClass extends PanelMenu.Button { const topBox = new St.BoxLayout(); topBox.add_actor(this._mainLabel); - if (appSettingsModel.showIcon === true) { + if (this._appSettingsModel.showIcon === true) { topBox.add_actor(this._mainIcon); } this.add_actor(topBox); @@ -171,28 +170,28 @@ class PopupViewClass extends PanelMenu.Button { box.add_child(this._settings); this._totalSpeed.connect("button-press-event", () => { - //logger.debug("total speed button pressed"); - appSettingsModel.displayMode = DisplayMode.TOTAL_SPEED; + //this._logger.debug("total speed button pressed"); + this._appSettingsModel.displayMode = DisplayMode.TOTAL_SPEED; this.updateGroupButtonsState(); }); this._downloadSpeed.connect("button-press-event", () => { - //logger.debug("download speed button pressed"); - appSettingsModel.displayMode = DisplayMode.DOWNLOAD_SPEED; + //this._logger.debug("download speed button pressed"); + this._appSettingsModel.displayMode = DisplayMode.DOWNLOAD_SPEED; this.updateGroupButtonsState(); }); this._uploadSpeed.connect("button-press-event", () => { - //logger.debug("upload speed button pressed"); - appSettingsModel.displayMode = DisplayMode.UPLOAD_SPEED; + //this._logger.debug("upload speed button pressed"); + this._appSettingsModel.displayMode = DisplayMode.UPLOAD_SPEED; this.updateGroupButtonsState(); }); this._bothSpeed.connect("button-press-event", () => { - //logger.debug("upload speed button pressed"); - appSettingsModel.displayMode = DisplayMode.BOTH_SPEED; + //this._logger.debug("upload speed button pressed"); + this._appSettingsModel.displayMode = DisplayMode.BOTH_SPEED; this.updateGroupButtonsState(); }); this._dataUsage.connect("button-press-event", () => { - //logger.debug("total data button pressed"); - appSettingsModel.displayMode = DisplayMode.TOTAL_DATA; + //this._logger.debug("total data button pressed"); + this._appSettingsModel.displayMode = DisplayMode.TOTAL_DATA; this.updateGroupButtonsState(); }); this.updateGroupButtonsState(); @@ -222,13 +221,13 @@ class PopupViewClass extends PanelMenu.Button { // separator item //this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); this.connect('button-press-event', this.onMainButtonClicked.bind(this)); - this._settingsListener = appSettingsModel.subscribe(() => { + this._settingsListener = this._appSettingsModel.subscribe(() => { this.updateGroupButtonsState(); }); } updateGroupButtonsState() { - const { displayMode } = appSettingsModel; + const { displayMode } = this._appSettingsModel; this.toggleButtonState(this._totalSpeed, displayMode == DisplayMode.TOTAL_SPEED); this.toggleButtonState(this._uploadSpeed, displayMode == DisplayMode.UPLOAD_SPEED); this.toggleButtonState(this._downloadSpeed, displayMode == DisplayMode.DOWNLOAD_SPEED); @@ -237,13 +236,14 @@ class PopupViewClass extends PanelMenu.Button { } onMainButtonClicked(_button, event) { - //logger.debug(event); + //this._logger.debug(event); + const broadcaster = getTitleClickedMessageBroadcaster(); if (event.get_button() == 1) { - titleClickedMessageBroadcaster.broadcast({ button: "left" }); + broadcaster.broadcast({ button: "left" }); } else if (event.get_button() == 2) { - titleClickedMessageBroadcaster.broadcast({ button: "middle" }); + broadcaster.broadcast({ button: "middle" }); } else if (event.get_button() == 3) { - titleClickedMessageBroadcaster.broadcast({ button: "right" }); + broadcaster.broadcast({ button: "right" }); } } @@ -288,25 +288,25 @@ class PopupViewClass extends PanelMenu.Button { device.iconPath = iconPath; if (!menuItem) { menuItem = new ExpandableDeviceMenuItem(device, { - defaultDeviceName: appSettingsModel.preferedDeviceName, + defaultDeviceName: this._appSettingsModel.preferedDeviceName, onResetClicked: this.onResetClicked.bind(this, device.name), onMarkDefaultClicked: this.onMarkDefaultClicked.bind(this, device.name) }); this.menu.addMenuItem(menuItem); this._menuItems[device.name] = menuItem; } else { - menuItem.update(device, appSettingsModel.preferedDeviceName); + menuItem.update(device, this._appSettingsModel.preferedDeviceName); } } onResetClicked(name) { - logger.info(`Reset the device : ${name}`); - deviceResetMessageBroadcaster.broadcast({ name }); + this._logger.info(`Reset the device : ${name}`); + getDeviceResetMessageBroadcaster().broadcast({ name }); } onMarkDefaultClicked(name) { - logger.info(`Mark the device "${name}" as default`); - appSettingsModel.preferedDeviceName = name; + this._logger.info(`Mark the device "${name}" as default`); + this._appSettingsModel.preferedDeviceName = name; } setTitleText(text) { @@ -336,7 +336,7 @@ class PopupViewClass extends PanelMenu.Button { this._totalSpeed = undefined; this._bothSpeed = undefined; this._dataUsage = undefined; - appSettingsModel.unsubscribe(this._settingsListener); + this._appSettingsModel.unsubscribe(this._settingsListener); this._settingsListener = undefined; super.destroy(); } diff --git a/utils/Broadcasters.js b/utils/Broadcasters.js new file mode 100644 index 0000000..88ea465 --- /dev/null +++ b/utils/Broadcasters.js @@ -0,0 +1,32 @@ +const ExtensionUtils = imports.misc.extensionUtils; +const Me = ExtensionUtils.getCurrentExtension(); +const { EventBroadcaster } = Me.imports.utils.EventBroadcaster; + +var deviceResetMessageBroadcaster; +var titleClickedMessageBroadcaster; + +function initBrodcasters() { + if (!deviceResetMessageBroadcaster) { + deviceResetMessageBroadcaster = new EventBroadcaster(); + } + if (!titleClickedMessageBroadcaster) { + titleClickedMessageBroadcaster = new EventBroadcaster(); + } +} + +function deinitBrodcasters() { + if (deviceResetMessageBroadcaster) { + deviceResetMessageBroadcaster = undefined; + } + if (titleClickedMessageBroadcaster) { + titleClickedMessageBroadcaster = undefined; + } +} + +function getDeviceResetMessageBroadcaster() { + return deviceResetMessageBroadcaster; +} + +function getTitleClickedMessageBroadcaster() { + return titleClickedMessageBroadcaster; +} diff --git a/utils/EventBroadcaster.js b/utils/EventBroadcaster.js index db16e3f..93bd1a9 100644 --- a/utils/EventBroadcaster.js +++ b/utils/EventBroadcaster.js @@ -3,7 +3,7 @@ * EventBroadcaster class can be inherited to create a new type of event broadcaster. */ -class EventBroadcaster { +class EventBroadcasterClass { constructor() { this._listeners = []; @@ -30,6 +30,4 @@ class EventBroadcaster { } } } - -var deviceResetMessageBroadcaster = new EventBroadcaster(); -var titleClickedMessageBroadcaster = new EventBroadcaster(); \ No newline at end of file +var EventBroadcaster = EventBroadcasterClass; \ No newline at end of file diff --git a/utils/GenUtils.js b/utils/GenUtils.js index 243506d..6f3421e 100644 --- a/utils/GenUtils.js +++ b/utils/GenUtils.js @@ -2,7 +2,6 @@ const ExtensionUtils = imports.misc.extensionUtils; const Me = ExtensionUtils.getCurrentExtension(); const { DeviceType } = Me.imports.utils.Constants; const { TypeUtils } = Me.imports.utils.TypeUtils; -const { appSettingsModel } = Me.imports.AppSettingsModel; /** diff --git a/utils/Logger.js b/utils/Logger.js index 84a5c37..f91b4d0 100644 --- a/utils/Logger.js +++ b/utils/Logger.js @@ -8,7 +8,7 @@ const Me = ExtensionUtils.getCurrentExtension(); * Utility class for logging. */ -class Logger { +class LoggerClass { constructor() { this.test = "Hello"; } @@ -55,4 +55,4 @@ class Logger { } }; -var logger = new Logger; \ No newline at end of file +var Logger = LoggerClass; \ No newline at end of file From b21dbd8cbecd8c29f96d145bee45dd823bd3bb6b Mon Sep 17 00:00:00 2001 From: No roads left Date: Thu, 17 Mar 2022 00:24:56 +0530 Subject: [PATCH 2/2] Release version 12 --- metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/metadata.json b/metadata.json index 4f684d9..1c034be 100644 --- a/metadata.json +++ b/metadata.json @@ -20,5 +20,5 @@ "41" ], "url" : "https://github.com/noroadsleft000/gnome-network-stats", - "version": 11 + "version": 12 }