diff --git a/freon@UshakovVasilii_Github.yahoo.com/extension.js b/freon@UshakovVasilii_Github.yahoo.com/extension.js
index 05c42fe..6465c68 100644
--- a/freon@UshakovVasilii_Github.yahoo.com/extension.js
+++ b/freon@UshakovVasilii_Github.yahoo.com/extension.js
@@ -5,18 +5,16 @@ const PopupMenu = imports.ui.popupMenu;
const Main = imports.ui.main;
const Util = imports.misc.util;
const Mainloop = imports.mainloop;
-const Shell = imports.gi.Shell;
const Clutter = imports.gi.Clutter;
const Gio = imports.gi.Gio;
const Me = imports.misc.extensionUtils.getCurrentExtension();
const Convenience = Me.imports.convenience;
const Utilities = Me.imports.utilities;
+const UDisks2 = Me.imports.udisks2;
const Gettext = imports.gettext.domain(Me.metadata['gettext-domain']);
const _ = Gettext.gettext;
-let settings;
-
const FreonItem = new Lang.Class({
Name: 'FreonItem',
Extends: PopupMenu.PopupBaseMenuItem,
@@ -24,12 +22,7 @@ const FreonItem = new Lang.Class({
_init: function(gIcon, label, value) {
this.parent();
this._hasMainDot = false;
-
- this.connect('activate', function () {
- settings.set_string('main-sensor', label);
- });
this._label = label;
- this._value = value;
this.actor.add(new St.Icon({ style_class: 'system-status-icon', gicon : gIcon}));
this.actor.add(new St.Label({text: label}), {x_fill: true, expand: true});
@@ -51,6 +44,10 @@ const FreonItem = new Lang.Class({
this.setOrnament(PopupMenu.Ornament.NONE);
},
+ getLabel: function() {
+ return this._label;
+ },
+
setValue: function(value) {
this._valueLabel.text = value;
}
@@ -58,7 +55,6 @@ const FreonItem = new Lang.Class({
const FreonMenuButton = new Lang.Class({
Name: 'FreonMenuButton',
-
Extends: PanelMenu.Button,
_init: function(){
@@ -70,6 +66,8 @@ const FreonMenuButton = new Lang.Class({
this._hddtempOutput = '';
this._aticonfigOutput = '';
+ this._settings = Convenience.getSettings();
+
this._sensorIcons = {
temperature : Gio.icon_new_for_string(Me.path + '/icons/sensors-temperature-symbolic.svg'),
voltage : Gio.icon_new_for_string(Me.path + '/icons/sensors-voltage-symbolic.svg'),
@@ -81,27 +79,20 @@ const FreonMenuButton = new Lang.Class({
this.actor.add_actor(this.statusLabel);
this.sensorsArgv = Utilities.detectSensors();
- if(settings.get_boolean('show-hdd-temp'))
- this.hddtempArgv = Utilities.detectHDDTemp();
- if(settings.get_boolean('show-aticonfig-temp'))
+ this._initDriveUtility();
+ if(this._settings.get_boolean('show-aticonfig-temp'))
this.aticonfigArgv = Utilities.detectAtiConfig();
- this.udisksProxies = [];
- Utilities.UDisks.get_drive_ata_proxies(Lang.bind(this, function(proxies) {
- this.udisksProxies = proxies;
- this._updateDisplay(this._sensorsOutput, this._hddtempOutput, this._aticonfigOutput);
- }));
-
this._settingChangedSignals = [];
this._addSettingChangedSignal('update-time', Lang.bind(this, this._updateTimeChanged));
this._addSettingChangedSignal('unit', Lang.bind(this, this._querySensors));
this._addSettingChangedSignal('show-label', Lang.bind(this, this._querySensors));
this._addSettingChangedSignal('main-sensor', Lang.bind(this, this._querySensors));
this._addSettingChangedSignal('show-decimal-value', Lang.bind(this, this._querySensors));
- this._addSettingChangedSignal('show-hdd-temp', Lang.bind(this, this._showHddTempChanged));
this._addSettingChangedSignal('show-fan-rpm', Lang.bind(this, this._querySensors));
this._addSettingChangedSignal('show-voltage', Lang.bind(this, this._querySensors));
this._addSettingChangedSignal('show-aticonfig-temp', Lang.bind(this, this._showAtiConfigChanged));
+ this._addSettingChangedSignal('drive-utility', Lang.bind(this, this._driveUtilityChanged));
this.connect('destroy', Lang.bind(this, this._onDestroy));
@@ -111,25 +102,45 @@ const FreonMenuButton = new Lang.Class({
this._addTimer();
},
- _updateTimeChanged : function(){
- //global.log('[FREON] readd timer');
+ _driveUtilityChanged : function(){
+ this._destroyDriveUtility();
+ this._initDriveUtility();
+ this._querySensors();
+ },
+ _initDriveUtility : function(){
+ switch(this._settings.get_string('drive-utility')){
+ case 'hddtemp':
+ this.hddtempArgv = Utilities.detectHDDTemp();
+ break;
+ case 'udisks2':
+ this._udisks2 = new UDisks2.UDisks2(Lang.bind(this, function() {
+ this._updateDisplay();
+ }));
+ break;
+ }
+ },
+
+ _destroyDriveUtility : function(){
+ if(this._udisks2){
+ this._udisks2.destroy();
+ this._udisks2 = null;
+ }
+ this.hddtempArgv = null;
+ },
+
+ _updateTimeChanged : function(){
Mainloop.source_remove(this._timeoutId);
this._addTimer();
},
- _showHddTempChanged : function(){
- this.hddtempArgv = settings.get_boolean('show-hdd-temp') ? Utilities.detectHDDTemp() : undefined;
- this._querySensors();
- },
-
_showAtiConfigChanged : function(){
- this.aticonfigArgv = settings.get_boolean('show-aticonfig-temp') ? Utilities.detectAtiConfig() : undefined;
+ this.aticonfigArgv = this._settings.get_boolean('show-aticonfig-temp') ? Utilities.detectAtiConfig() : undefined;
this._querySensors();
},
_addTimer : function(){
- this._timeoutId = Mainloop.timeout_add_seconds(settings.get_int('update-time'), Lang.bind(this, function (){
+ this._timeoutId = Mainloop.timeout_add_seconds(this._settings.get_int('update-time'), Lang.bind(this, function (){
this._querySensors();
// readd to update queue
return true;
@@ -137,23 +148,15 @@ const FreonMenuButton = new Lang.Class({
},
_addSettingChangedSignal : function(key, callback){
- this._settingChangedSignals.push(settings.connect('changed::' + key, callback));
+ this._settingChangedSignals.push(this._settings.connect('changed::' + key, callback));
},
_onDestroy: function(){
- for each (let proxy in this.udisksProxies){
- if(proxy.drive){
- proxy.drive.run_dispose();
- }
- if(proxy.ata){
- proxy.ata.run_dispose();
- }
- }
-
+ this._destroyDriveUtility();
Mainloop.source_remove(this._timeoutId);
for each (let signal in this._settingChangedSignals){
- settings.disconnect(signal);
+ this._settings.disconnect(signal);
};
},
@@ -162,47 +165,48 @@ const FreonMenuButton = new Lang.Class({
if (this.sensorsArgv){
new Utilities.Future(this.sensorsArgv, Lang.bind(this,function(stdout){
this._sensorsOutput = stdout;
- this._updateDisplay(this._sensorsOutput, this._hddtempOutput, this._aticonfigOutput);
+ this._updateDisplay();
}));
}
- if (settings.get_boolean('show-hdd-temp') && this.hddtempArgv){
+ if (this._settings.get_string('drive-utility') == 'hddtemp' && this.hddtempArgv){
new Utilities.Future(this.hddtempArgv, Lang.bind(this,function(stdout){
this._hddtempOutput = stdout;
- this._updateDisplay(this._sensorsOutput, this._hddtempOutput, this._aticonfigOutput);
+ this._updateDisplay();
}));
}
- if (settings.get_boolean('show-aticonfig-temp') && this.aticonfigArgv){
+ if (this._settings.get_boolean('show-aticonfig-temp') && this.aticonfigArgv){
new Utilities.Future(this.aticonfigArgv, Lang.bind(this,function(stdout){
this._aticonfigOutput = stdout;
- this._updateDisplay(this._sensorsOutput, this._hddtempOutput, this._aticonfigOutput);
+ this._updateDisplay();
}));
}
},
- _updateDisplay: function(sensors_output, hddtemp_output, aticonfig_output){
+ _updateDisplay: function(){
let tempInfo = [];
let fanInfo = [];
let voltageInfo = [];
- tempInfo = Utilities.parseSensorsOutput(sensors_output,Utilities.parseSensorsTemperatureLine);
+ tempInfo = Utilities.parseSensorsOutput(this._sensorsOutput,Utilities.parseSensorsTemperatureLine);
tempInfo = tempInfo.filter(Utilities.filterTemperature);
- if (settings.get_boolean('show-fan-rpm')){
- fanInfo = Utilities.parseSensorsOutput(sensors_output,Utilities.parseFanRPMLine);
+ if (this._settings.get_boolean('show-fan-rpm')){
+ fanInfo = Utilities.parseSensorsOutput(this._sensorsOutput,Utilities.parseFanRPMLine);
fanInfo = fanInfo.filter(Utilities.filterFan);
}
- if (settings.get_boolean('show-voltage')){
- voltageInfo = Utilities.parseSensorsOutput(sensors_output,Utilities.parseVoltageLine);
+ if (this._settings.get_boolean('show-voltage')){
+ voltageInfo = Utilities.parseSensorsOutput(this._sensorsOutput,Utilities.parseVoltageLine);
}
- if(settings.get_boolean('show-hdd-temp') && this.hddtempArgv)
- tempInfo = tempInfo.concat(Utilities.parseHddTempOutput(hddtemp_output, !(/nc$/.exec(this.hddtempArgv[0])) ? ': ' : '|'));
+ if(this._settings.get_string('drive-utility') == 'hddtemp' && this.hddtempArgv) {
+ tempInfo = tempInfo.concat(Utilities.parseHddTempOutput(this._hddtempOutput, !(/nc$/.exec(this.hddtempArgv[0])) ? ': ' : '|'));
+ } else if(this._settings.get_string('drive-utility') == 'udisks2'){
+ tempInfo = tempInfo.concat(this._udisks2.getHDDTemp());
+ }
- if(settings.get_boolean('show-aticonfig-temp') && this.aticonfigArgv)
- tempInfo = tempInfo.concat(Utilities.parseAtiConfigOutput(aticonfig_output));
-
- tempInfo = tempInfo.concat(Utilities.UDisks.create_list_from_proxies(this.udisksProxies));
+ if(this._settings.get_boolean('show-aticonfig-temp') && this.aticonfigArgv)
+ tempInfo = tempInfo.concat(Utilities.parseAtiConfigOutput(this._aticonfigOutput));
tempInfo.sort(function(a,b) { return a['label'].localeCompare(b['label']) });
fanInfo.sort(function(a,b) { return a['label'].localeCompare(b['label']) });
@@ -245,13 +249,13 @@ const FreonMenuButton = new Lang.Class({
}
let needAppendMenuItems = false;
- let mainSensor = settings.get_string('main-sensor');
+ let mainSensor = this._settings.get_string('main-sensor');
let sensorCount = 0;
for each (let s in sensorsList) {
if(s.type != 'separator') {
sensorCount++;
if (mainSensor == s.label) {
- if(settings.get_boolean('show-label'))
+ if(this._settings.get_boolean('show-label'))
this.statusLabel.set_text('%s: %s'.format(s.label, s.value));
else
this.statusLabel.set_text(s.value);
@@ -311,12 +315,15 @@ const FreonMenuButton = new Lang.Class({
_appendMenuItems : function(sensorsList){
this._sensorMenuItems = {};
- let mainSensor = settings.get_string('main-sensor');
+ let mainSensor = this._settings.get_string('main-sensor');
for each (let s in sensorsList){
if(s.type == 'separator'){
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
} else {
let item = new FreonItem(this._sensorIcons[s.type], s.label, s.value);
+ item.connect('activate', Lang.bind(this, function (self) {
+ this._settings.set_string('main-sensor', self.getLabel());
+ }));
if (mainSensor == s.label)
item.addMainDot();
this._sensorMenuItems[s.label] = item;
@@ -346,16 +353,16 @@ const FreonMenuButton = new Lang.Class({
},
_formatTemp: function(value) {
- if (settings.get_string('unit')=='fahrenheit'){
+ if (this._settings.get_string('unit')=='fahrenheit'){
value = this._toFahrenheit(value);
}
let format = '%.1f';
- if (!settings.get_boolean('show-decimal-value')){
+ if (!this._settings.get_boolean('show-decimal-value')){
//ret = Math.round(value);
format = '%d';
}
format += '%s';
- return format.format(value, (settings.get_string('unit')=='fahrenheit') ? "\u00b0F" : "\u00b0C");
+ return format.format(value, (this._settings.get_string('unit')=='fahrenheit') ? "\u00b0F" : "\u00b0C");
}
});
@@ -363,7 +370,6 @@ let freonMenu;
function init(extensionMeta) {
Convenience.initTranslations();
- settings = Convenience.getSettings();
}
function enable() {
diff --git a/freon@UshakovVasilii_Github.yahoo.com/prefs.js b/freon@UshakovVasilii_Github.yahoo.com/prefs.js
index 70dd745..8180541 100644
--- a/freon@UshakovVasilii_Github.yahoo.com/prefs.js
+++ b/freon@UshakovVasilii_Github.yahoo.com/prefs.js
@@ -71,8 +71,34 @@ const FreonPrefsWidget = new GObject.Class({
//
- this._addSwitch({key : 'show-hdd-temp', y : i, x : 0,
- label : _('Show Drive Temperature')});
+ // HDD Temperature Utility ComboBox
+ let hddTempUtilModel = new Gtk.ListStore();
+ hddTempUtilModel.set_column_types([GObject.TYPE_STRING, GObject.TYPE_STRING]);
+
+ let hddTempUtil = new Gtk.ComboBox({model: hddTempUtilModel});
+ let hddTempUtilRenderer = new Gtk.CellRendererText();
+ hddTempUtil.pack_start(hddTempUtilRenderer, true);
+ hddTempUtil.add_attribute(hddTempUtilRenderer, 'text', 1);
+
+ let hddTempUtilItems = ['none', 'hddtemp', 'udisks2'];
+
+ hddTempUtilModel.set(hddTempUtilModel.append(), [0, 1], [hddTempUtilItems[0], 'None']);
+ hddTempUtilModel.set(hddTempUtilModel.append(), [0, 1], [hddTempUtilItems[1], 'Hddtemp']);
+ hddTempUtilModel.set(hddTempUtilModel.append(), [0, 1], [hddTempUtilItems[2], 'UDisks2']);
+
+ hddTempUtil.set_active(hddTempUtilItems.indexOf(this._settings.get_string('drive-utility')));
+
+ hddTempUtil.connect('changed', Lang.bind(this, function(entry) {
+ let [success, iter] = hddTempUtil.get_active_iter();
+ if (!success)
+ return;
+ this._settings.set_string('drive-utility', hddTempUtilModel.get_value(iter, 0))
+ }));
+
+ this.attach(new Gtk.Label({ label: _('Utility for HDD/SSD temperature'), halign : Gtk.Align.END}), 0, i, 1, 1);
+ this.attach(hddTempUtil, 1, i, 1, 1);
+
+ //
this._addSwitch({key : 'show-fan-rpm', y : i++, x : 2,
label : _('Show Fan Speed')});
@@ -80,10 +106,9 @@ const FreonPrefsWidget = new GObject.Class({
this._addSwitch({key : 'show-voltage', y : i, x : 0,
label : _('Show Power Supply Voltage')});
- this._addSwitch({key : 'show-aticonfig-temp', y : i, x : 2,
+ this._addSwitch({key : 'show-aticonfig-temp', y : i++, x : 2,
label : _('Use Catalyst'),
help : _('Show AMD video card temperature, use aticonfig from Catalyst driver.')});
-
},
_addSwitch : function(params){
diff --git a/freon@UshakovVasilii_Github.yahoo.com/schemas/gschemas.compiled b/freon@UshakovVasilii_Github.yahoo.com/schemas/gschemas.compiled
index 6e6fad0..ebcd33e 100644
Binary files a/freon@UshakovVasilii_Github.yahoo.com/schemas/gschemas.compiled and b/freon@UshakovVasilii_Github.yahoo.com/schemas/gschemas.compiled differ
diff --git a/freon@UshakovVasilii_Github.yahoo.com/schemas/org.gnome.shell.extensions.sensors.gschema.xml b/freon@UshakovVasilii_Github.yahoo.com/schemas/org.gnome.shell.extensions.sensors.gschema.xml
index aa33a37..f7e7673 100644
--- a/freon@UshakovVasilii_Github.yahoo.com/schemas/org.gnome.shell.extensions.sensors.gschema.xml
+++ b/freon@UshakovVasilii_Github.yahoo.com/schemas/org.gnome.shell.extensions.sensors.gschema.xml
@@ -12,7 +12,7 @@
'centigrade'
Unit
- The unit ('centigrade' or 'fahrenheit') the extension should display the temperature in.
+ The unit ('centigrade' or 'fahrenheit') the extension should display the temperature in
@@ -33,28 +33,28 @@
Show one digit after decimal
-
- true
- Display HDD Temp
- Display hard disk drive temperature. Requires hddtemp installed.
-
-
true
Display Fan RPM
- Display fan rotation per minute.
+ Display fan rotation per minute
true
Display voltage
- Display voltage of various components.
+ Display voltage of various components
false
Show AMD Card Temperature (Catalyst)
- Show AMD card temperature, use aticonfig from Catalyst driver.
+ Show AMD card temperature, use aticonfig from Catalyst driver
+
+
+
+ 'none'
+ Utility for detect HDD/SSD temperature
+ Utility for detect HDD/SSD temperature ('none', 'hddtemp' or 'udisks2')
diff --git a/freon@UshakovVasilii_Github.yahoo.com/udisks2.js b/freon@UshakovVasilii_Github.yahoo.com/udisks2.js
new file mode 100644
index 0000000..f90e8f3
--- /dev/null
+++ b/freon@UshakovVasilii_Github.yahoo.com/udisks2.js
@@ -0,0 +1,109 @@
+const Lang = imports.lang;
+const Gio = imports.gi.Gio;
+
+const UDisksDriveProxy = Gio.DBusProxy.makeProxyWrapper(
+' \
+ \
+ \
+ \
+');
+
+const UDisksDriveAtaProxy = Gio.DBusProxy.makeProxyWrapper(
+' \
+ \
+ \
+ \
+');
+
+// Poor man's async.js
+const Async = {
+ // mapping will be done in parallel
+ map: function(arr, mapClb /* function(in, successClb)) */, resClb /* function(result) */) {
+ let counter = arr.length;
+ let result = [];
+ for (let i = 0; i < arr.length; ++i) {
+ mapClb(arr[i], (function(i, newVal) {
+ result[i] = newVal;
+ if (--counter == 0) resClb(result);
+ }).bind(null, i)); // i needs to be bound since it will be changed during the next iteration
+ }
+ }
+}
+
+// routines for handling of udisks2
+const UDisks2 = new Lang.Class({
+ Name: 'UDisks2',
+
+ _init: function(callback) {
+ this._udisksProxies = [];
+ this._get_drive_ata_proxies(Lang.bind(this, function(proxies) {
+ this._udisksProxies = proxies;
+ callback();
+ }));
+ },
+
+ // creates a list of sensor objects from the list of proxies given
+ getHDDTemp: function() {
+ return this._udisksProxies.filter(function(proxy) {
+ // 0K means no data available
+ return proxy.ata.SmartTemperature > 0;
+ }).map(function(proxy) {
+ return {
+ label: proxy.drive.Model,
+ temp: proxy.ata.SmartTemperature - 272.15
+ };
+ });
+ },
+
+ // calls callback with [{ drive: UDisksDriveProxy, ata: UDisksDriveAtaProxy }, ... ] for every drive that implements both interfaces
+ _get_drive_ata_proxies: function(callback) {
+ Gio.DBusObjectManagerClient.new(Gio.DBus.system, 0, "org.freedesktop.UDisks2", "/org/freedesktop/UDisks2", null, null, function(src, res) {
+ try {
+ let objMgr = Gio.DBusObjectManagerClient.new_finish(res); //might throw
+
+ let objPaths = objMgr.get_objects().filter(function(o) {
+ return o.get_interface("org.freedesktop.UDisks2.Drive") != null
+ && o.get_interface("org.freedesktop.UDisks2.Drive.Ata") != null;
+ }).map(function(o) { return o.get_object_path() });
+
+ // now create the proxy objects, log and ignore every failure
+ Async.map(objPaths, function(obj, callback) {
+ // create the proxies object
+ let driveProxy = new UDisksDriveProxy(Gio.DBus.system, "org.freedesktop.UDisks2", obj, function(res, error) {
+ if (error) { //very unlikely - we even checked the interfaces before!
+ global.log('[FREON] Could not create proxy on ' + obj + ':' + error);
+ callback(null);
+ return;
+ }
+ let ataProxy = new UDisksDriveAtaProxy(Gio.DBus.system, "org.freedesktop.UDisks2", obj, function(res, error) {
+ if (error) {
+ global.log('[FREON] Could not create proxy on ' + obj + ':' + error);
+ callback(null);
+ return;
+ }
+
+ callback({ drive: driveProxy, ata: ataProxy });
+ });
+ });
+ }, function(proxies) {
+ // filter out failed attempts == null values
+ callback(proxies.filter(function(a) { return a != null; }));
+ });
+ } catch (e) {
+ global.log('[FREON] Could not find UDisks2 objects: ' + e);
+ }
+ });
+ },
+
+ destroy: function(callback) {
+ for each (let proxy in this._udisksProxies){
+ if(proxy.drive){
+ proxy.drive.run_dispose();
+ }
+ if(proxy.ata){
+ proxy.ata.run_dispose();
+ }
+ }
+ },
+
+});
diff --git a/freon@UshakovVasilii_Github.yahoo.com/utilities.js b/freon@UshakovVasilii_Github.yahoo.com/utilities.js
index 909e7e7..31d0a28 100644
--- a/freon@UshakovVasilii_Github.yahoo.com/utilities.js
+++ b/freon@UshakovVasilii_Github.yahoo.com/utilities.js
@@ -1,25 +1,10 @@
const GLib = imports.gi.GLib;
-const GObject = imports.gi.GObject;
const Gio = imports.gi.Gio;
const Lang = imports.lang;
const Me = imports.misc.extensionUtils.getCurrentExtension();
const Gettext = imports.gettext.domain(Me.metadata['gettext-domain']);
const _ = Gettext.gettext;
-const UDisksDriveProxy = Gio.DBusProxy.makeProxyWrapper(
-' \
- \
- \
- \
-');
-
-const UDisksDriveAtaProxy = Gio.DBusProxy.makeProxyWrapper(
-' \
- \
- \
- \
-');
-
function detectSensors() {
let path = GLib.find_program_in_path('sensors');
return path ? [path] : undefined;
@@ -272,78 +257,3 @@ const Future = new Lang.Class({
}
});
-// Poor man's async.js
-const Async = {
- // mapping will be done in parallel
- map: function(arr, mapClb /* function(in, successClb)) */, resClb /* function(result) */) {
- let counter = arr.length;
- let result = [];
- for (let i = 0; i < arr.length; ++i) {
- mapClb(arr[i], (function(i, newVal) {
- result[i] = newVal;
- if (--counter == 0) resClb(result);
- }).bind(null, i)); // i needs to be bound since it will be changed during the next iteration
- }
- }
-}
-
-function debug(str){
- //tail -f -n100 ~/.cache/gdm/session.log | grep temperature
- print ('LOG temperature@xtranophilist: ' + str);
-}
-
-// routines for handling of udisks2
-const UDisks = {
- // creates a list of sensor objects from the list of proxies given
- create_list_from_proxies: function(proxies) {
- return proxies.filter(function(proxy) {
- // 0K means no data available
- return proxy.ata.SmartTemperature > 0;
- }).map(function(proxy) {
- return {
- label: proxy.drive.Model,
- temp: proxy.ata.SmartTemperature - 272.15
- };
- });
- },
-
- // calls callback with [{ drive: UDisksDriveProxy, ata: UDisksDriveAtaProxy }, ... ] for every drive that implements both interfaces
- get_drive_ata_proxies: function(callback) {
- Gio.DBusObjectManagerClient.new(Gio.DBus.system, 0, "org.freedesktop.UDisks2", "/org/freedesktop/UDisks2", null, null, function(src, res) {
- try {
- let objMgr = Gio.DBusObjectManagerClient.new_finish(res); //might throw
-
- let objPaths = objMgr.get_objects().filter(function(o) {
- return o.get_interface("org.freedesktop.UDisks2.Drive") != null
- && o.get_interface("org.freedesktop.UDisks2.Drive.Ata") != null;
- }).map(function(o) { return o.get_object_path() });
-
- // now create the proxy objects, log and ignore every failure
- Async.map(objPaths, function(obj, callback) {
- // create the proxies object
- let driveProxy = new UDisksDriveProxy(Gio.DBus.system, "org.freedesktop.UDisks2", obj, function(res, error) {
- if (error) { //very unlikely - we even checked the interfaces before!
- debug("Could not create proxy on "+obj+":"+error);
- callback(null);
- return;
- }
- let ataProxy = new UDisksDriveAtaProxy(Gio.DBus.system, "org.freedesktop.UDisks2", obj, function(res, error) {
- if (error) {
- debug("Could not create proxy on "+obj+":"+error);
- callback(null);
- return;
- }
-
- callback({ drive: driveProxy, ata: ataProxy });
- });
- });
- }, function(proxies) {
- // filter out failed attempts == null values
- callback(proxies.filter(function(a) { return a != null; }));
- });
- } catch (e) {
- debug("Could not find UDisks objects: "+e);
- }
- });
- }
-};