+# low_device_manager module
+# Authors: Nicholas Alexander && Otacilio Lacerda
+# Module responsible for management of devices informations.
+
+import pickle
+import os
+
+from PyQt4.QtCore import *
+
+import pcsutils as utils
+from pcsdeviceinfo import PcsDeviceInfo
+from pcsdeviceutils import *
+from ui.tsuigeneralmethods import showMessageBox
+
+USER_HOST = 'root'
+HOME = os.path.expanduser("~")
+DEVICES_FILE = os.path.join(HOME, ".pcsuite/devices/.ip_list")
+
+
+class PcsDeviceManager(QObject):
+ """Class responsible for devices management such as adding and removing
+ devices, get batery, memory and name informations and saving Device objects.
+
+ The DeviceManager holds a list of Devices objects and can save and load this
+ list on a file and retrieve information about each Device.
+
+ """
+ _currentIp = None
+ def __init__(self):
+ QObject.__init__(self)
+ self._deviceList = []
+
+ # FIXME: initialize this in another place
+ utils.initDirs()
+ self.loadDevices()
+
+ self._currentIp = None
+
+ def _batteryException(self):
+ errorMessage = "Could not get device battery status, check if " +\
+ "python is installed on your device. To get information about " + \
+ "python installation visit: " +\
+ "http://pymaemo.garage.maemo.org/installation.html"
+ showMessageBox(errorMessage,
+ "Error while collecting device information")
+
+ def _addDevice(self, deviceIp):
+ """Add a new device to list connecting to it in the process.
+
+ Arguments:
+ host_ip -- The IP of the device to connect.
+
+ """
+ self.loadDevices()
+
+ deviceInfo = PcsDeviceInfo()
+ deviceInfo.ip = deviceIp
+ (deviceInfo.name, deviceInfo.system,
+ deviceInfo.ossoBackup) = queryProductInformation(deviceIp)
+ if deviceInfo.name == "NO INFORMATION":
+ return "connectException"
+ try:
+ deviceInfo.battery = float(queryDeviceBattery(deviceIp))
+ except:
+ return "batteryException"
+
+ if deviceInfo.battery < 0:
+ deviceInfo.charging = True
+
+ deviceInfo.storage = queryDeviceStorage(deviceIp)
+
+ if self.getDevice(deviceIp) != None:
+ return deviceInfo
+
+ self._deviceList.append(deviceInfo)
+ self.saveDevices()
+ return deviceInfo
+
+ def removeDevice(self, deviceIp):
+ """Remove a Device from list.
+
+ Arguments:
+ device_ip -- The IP of the device to remove
+
+ """
+ deviceInfo = self.getDevice(deviceIp)
+ if deviceInfo != -1:
+ self._deviceList.remove(deviceInfo)
+ self.saveDevices()
+ return 1
+ else:
+ raise Exception("No device with that ip was found")
+
+ def getDevices(self):
+ """Returns a list with the IP address of all devices in the object's
+ devices list.
+
+ """
+ ips = []
+ for deviceInfo in self._deviceList:
+ ips.append(deviceInfo.ip)
+ return ips
+
+ def saveDevices(self):
+ """Save the list of Device objects in DEVICES_FILE file."""
+ obj = self._deviceList
+ file = open(DEVICES_FILE, "w")
+ pickle.dump(obj, file)
+ file.close()
+
+ def loadDevices(self):
+ """Loads the list of Device objects from DEVICES_FILE path if possible."""
+
+ if os.path.exists(DEVICES_FILE):
+ file = open(DEVICES_FILE)
+ self._deviceList = pickle.load(file)
+ file.close()
+
+ def getDevice(self, ip):
+ # Returns the Device object with the provided ip
+ for deviceInfo in self._deviceList:
+ if deviceInfo.ip == ip:
+ return deviceInfo
+ return None
+
+ def setCurrentDevice (self, ip):
+ self._currentIp = ip
+
+ def getCurrentDevice(self):
+ return self.getDevice(self._currentIp)
+