Example #1
0
    def refresh(self):
        self.disks = list()
        self.mdisks = Disks()
        for disk in self.mdisks.disks:
            capacity = '%d MB' % (disk[1] / 1048576)
            self.disks.append(DiskEntry(disk[3], capacity, disk[2]))

        self['menu'].setList(self.disks)
Example #2
0
 def mkfs(self):
     disks = Disks()
     ret = disks.mkfs(self.disk[5][self.index][0][:3], self.index + 1)
     if ret == 0:
         self.session.open(MessageBox, _('Format terminated with success'), MessageBox.TYPE_INFO)
     elif ret == -2:
         self.session.open(MessageBox, _('Cannot format current drive.\nA record in progress, timeshit or some external tools (like samba, swapfile and nfsd) may cause this problem.\nPlease stop this actions/applications and try again'), MessageBox.TYPE_ERROR)
     else:
         self.session.open(MessageBox, _('Error formatting disk. The disk may be damaged'), MessageBox.TYPE_ERROR)
Example #3
0
	def chkfs(self):
		disks = Disks()
		ret = disks.chkfs(self.disk[5][self.index][0][:3], self.index+1)
		if ret == 0:
			self.session.open(MessageBox, _("Check disk terminated with success"), MessageBox.TYPE_INFO)
		elif ret == -1:
			self.session.open(MessageBox, _("Cannot umount current drive.\nA record in progress, timeshit or some external tools (like samba and nfsd) may cause this problem.\nPlease stop this actions/applications and try again"), MessageBox.TYPE_ERROR)
		else:
			self.session.open(MessageBox, _("Error checking disk. The disk may be damaged"), MessageBox.TYPE_ERROR)
Example #4
0
    def refresh(self):
        self.disks = list()

        self.mdisks = Disks()
        for disk in self.mdisks.disks:
            capacity = "%d MB" % (disk[1] / (1024 * 1024))
            self.disks.append(DiskEntry(disk[3], capacity, disk[2]))

        self["menu"].setList(self.disks)
 def chkfs(self):
     disks = Disks()
     ret = disks.chkfs(self.disk[5][self.index][0][:3], self.index + 1)
     if ret == 0:
         self.session.open(MessageBox,
                           _('Check disk terminated with success'),
                           MessageBox.TYPE_INFO)
     elif ret == -1:
         self.session.open(
             MessageBox,
             _('Cannot umount current drive.\nA record in progress, timeshit or some external tools (like samba, swapfile and nfsd) may cause this problem.\nPlease stop this actions/applications and try again'
               ), MessageBox.TYPE_ERROR)
     else:
         self.session.open(
             MessageBox, _('Error checking disk. The disk may be damaged'),
             MessageBox.TYPE_ERROR)
Example #6
0
 def mkfs(self):
     disks = Disks()
     ret = disks.mkfs(self.disk[5][self.index][0][:3], self.index + 1,
                      self.fstype)
     if ret == 0:
         self.session.open(MessageBox, _("Format terminated with success"),
                           MessageBox.TYPE_INFO)
     elif ret == -2:
         self.session.open(
             MessageBox,
             _("Cannot format current drive.\nA record in progress, timeshit or some external tools (like samba and nfsd) may cause this problem.\nPlease stop this actions/applications and try again"
               ), MessageBox.TYPE_ERROR)
     else:
         self.session.open(
             MessageBox,
             _("Error formatting disk. The disk may be damaged"),
             MessageBox.TYPE_ERROR)
Example #7
0
    def refresh(self):
        self.disks = list()
        self.mdisks = Disks()
        for disk in self.mdisks.disks:
            capacity = '%d MB' % (disk[1] / 1048576)
            self.disks.append(DiskEntry(disk[3], capacity, disk[2]))

        self['menu'].setList(self.disks)
Example #8
0
	def refresh(self):
		self.disks = list ()
		
		self.mdisks = Disks()
		for disk in self.mdisks.disks:
			capacity = "%d MB" % (disk[1] / (1024 * 1024))
			self.disks.append(DiskEntry(disk[3], capacity, disk[2]))
			
		self["menu"].setList(self.disks)
Example #9
0
    def __init__(self, session, args = 0):
        self.session = session
        Screen.__init__(self, session)
        self.disks = list()
        self.mdisks = Disks()
        for disk in self.mdisks.disks:
            capacity = '%d MB' % (disk[1] / 1048576)
            self.disks.append(DiskEntry(disk[3], capacity, disk[2]))

        self['menu'] = ExtrasList(self.disks)
        self['key_red'] = Button(_('Partitions'))
        self['key_green'] = Button('Info')
        self['key_yellow'] = Button(_('Initialize'))
        self['key_blue'] = Button(_('Exit'))
        self['actions'] = ActionMap(['OkCancelActions', 'ColorActions'], {'blue': self.quit,
         'yellow': self.yellow,
         'green': self.green,
         'red': self.red,
         'cancel': self.quit}, -2)
        self.onShown.append(self.setWindowTitle)
Example #10
0
    def __init__(self, session, args=0):
        self.session = session

        Screen.__init__(self, session)
        self.disks = list()

        self.mdisks = Disks()
        for disk in self.mdisks.disks:
            capacity = "%d MB" % (disk[1] / (1024 * 1024))
            self.disks.append(DiskEntry(disk[3], capacity, disk[2]))

        self["menu"] = List(self.disks)
        self["key_red"] = Button(_("Mounts"))
        self["key_green"] = Button(_("Info"))
        self["key_yellow"] = Button(_("Initialize"))
        self["key_blue"] = Button(_("Exit"))
        self["actions"] = ActionMap(
            ["OkCancelActions", "ColorActions"], {
                "blue": self.quit,
                "yellow": self.yellow,
                "green": self.green,
                "red": self.red,
                "cancel": self.quit,
            }, -2)
Example #11
0
    def __init__(self, session, args = 0):
        self.session = session
        Screen.__init__(self, session)
        self.disks = list()
        self.mdisks = Disks()
        for disk in self.mdisks.disks:
            capacity = '%d MB' % (disk[1] / 1048576)
            self.disks.append(DiskEntry(disk[3], capacity, disk[2]))

        self['menu'] = ExtrasList(self.disks)
        self['key_red'] = Button(_('Partitions'))
        self['key_green'] = Button('Info')
        self['key_yellow'] = Button(_('Initialize'))
        self['key_blue'] = Button(_('Exit'))
        self['actions'] = ActionMap(['OkCancelActions', 'ColorActions'], {'blue': self.quit,
         'yellow': self.yellow,
         'green': self.green,
         'red': self.red,
         'cancel': self.quit}, -2)
        self.onShown.append(self.setWindowTitle)
Example #12
0
	def __init__(self, session):
		Screen.__init__(self, session)
		self.mdisks = Disks()
		self.mountpoints = MountPoints()
		self.mountpoints.read()
		self.disks = list ()
		self.mounts = list ()
		for disk in self.mdisks.disks:
			if disk[2] == True:
				diskname = disk[3]
				for partition in disk[5]:
					mp = ""
					rmp = ""
					try:
						mp = self.mountpoints.get(partition[0][:3], int(partition[0][3:]))
						rmp = self.mountpoints.getRealMount(partition[0][:3], int(partition[0][3:]))
					except Exception, e:
						pass
					if len(mp) > 0:
						self.disks.append(MountEntry(disk[3], "P.%s (Fixed: %s)" % (partition[0][3:], mp)))
						self.mounts.append(mp)
					elif len(rmp) > 0:
						self.disks.append(MountEntry(disk[3], "P.%s (Fast: %s)" % (partition[0][3:], rmp)))
						self.mounts.append(rmp)
Example #13
0
	def __init__(self, session, args = 0):
		self.session = session
		
		Screen.__init__(self, session)
		self.disks = list ()
		
		self.mdisks = Disks()
		for disk in self.mdisks.disks:
			capacity = "%d MB" % (disk[1] / (1024 * 1024))
			self.disks.append(DiskEntry(disk[3], capacity, disk[2]))
		
		self["menu"] = List(self.disks)
		self["key_red"] = Button(_("Mounts"))
		self["key_green"] = Button(_("Info"))
		self["key_yellow"] = Button(_("Initialize"))
		self["key_blue"] = Button(_("Exit"))
		self["actions"] = ActionMap(["OkCancelActions", "ColorActions"],
		{
			"blue": self.quit,
			"yellow": self.yellow,
			"green": self.green,
			"red": self.red,
			"cancel": self.quit,
		}, -2)
Example #14
0
class HddSetup(Screen):
	def __init__(self, session, args = 0):
		self.session = session
		
		Screen.__init__(self, session)
		self.disks = list ()
		
		self.mdisks = Disks()
		for disk in self.mdisks.disks:
			capacity = "%d MB" % (disk[1] / (1024 * 1024))
			self.disks.append(DiskEntry(disk[3], capacity, disk[2]))
		
		self["menu"] = List(self.disks)
		self["key_red"] = Button(_("Mounts"))
		self["key_green"] = Button(_("Info"))
		self["key_yellow"] = Button(_("Initialize"))
		self["key_blue"] = Button(_("Exit"))
		self["actions"] = ActionMap(["OkCancelActions", "ColorActions"],
		{
			"blue": self.quit,
			"yellow": self.yellow,
			"green": self.green,
			"red": self.red,
			"cancel": self.quit,
		}, -2)
	
	def isExt4Supported(self):
		return "ext4" in open("/proc/filesystems").read()
		
	def mkfs(self):
		self.formatted += 1
		return self.mdisks.mkfs(self.mdisks.disks[self.sindex][0], self.formatted, self.fsresult)
		
	def refresh(self):
		self.disks = list ()
		
		self.mdisks = Disks()
		for disk in self.mdisks.disks:
			capacity = "%d MB" % (disk[1] / (1024 * 1024))
			self.disks.append(DiskEntry(disk[3], capacity, disk[2]))
			
		self["menu"].setList(self.disks)
		
	def checkDefault(self):
		mp = MountPoints()
		mp.read()
		if not mp.exist("/hdd"):
			mp.add(self.mdisks.disks[self.sindex][0], 1, "/hdd")
			mp.write()
			mp.mount(self.mdisks.disks[self.sindex][0], 1, "/hdd")
			os.system("/bin/mkdir /hdd/movie")
			os.system("/bin/mkdir /hdd/music")
			os.system("/bin/mkdir /hdd/picture")
		
	def format(self, result):
		if result != 0:
			self.session.open(MessageBox, _("Cannot format partition %d" % self.formatted), MessageBox.TYPE_ERROR)
		if self.result == 0:
			if self.formatted > 0:
				self.checkDefault()
				self.refresh()
				return
		elif self.result > 0 and self.result < 3:
			if self.formatted > 1:
				self.checkDefault()
				self.refresh()
				return
		elif self.result == 3:
			if self.formatted > 2:
				self.checkDefault()
				self.refresh()
				return
		elif self.result == 4:
			if self.formatted > 3:
				self.checkDefault()
				self.refresh()
				return
				
		self.session.openWithCallback(self.format, ExtraActionBox, "Formatting partition %d" % (self.formatted + 1), "Initialize disk", self.mkfs)
		
	def fdiskEnded(self, result):
		if result == 0:
			self.format(0)
		elif result == -1:
			self.session.open(MessageBox, _("Cannot umount device.\nA record in progress, timeshit or some external tools (like samba and nfsd) may cause this problem.\nPlease stop this actions/applications and try again"), MessageBox.TYPE_ERROR)
		else:
			self.session.open(MessageBox, _("Partitioning failed!"), MessageBox.TYPE_ERROR)

	def fdisk(self):
		return self.mdisks.fdisk(self.mdisks.disks[self.sindex][0], self.mdisks.disks[self.sindex][1], self.result, self.fsresult)

	def initialaze(self, result):
		if not self.isExt4Supported():
			result += 1
			
		if result != 4:
			self.fsresult = result
			self.formatted = 0
			mp = MountPoints()
			mp.read()
			mp.deleteDisk(self.mdisks.disks[self.sindex][0])
			mp.write()
			self.session.openWithCallback(self.fdiskEnded, ExtraActionBox, "Partitioning...", "Initialize disk", self.fdisk)
		
	def chooseFSType(self, result):
		if result != 5:
			self.result = result
			if self.isExt4Supported():
				self.session.openWithCallback(self.initialaze, ExtraMessageBox, "Format as", "HDD Partitioner",
											[ [ "Ext4", "partitionmanager.png" ],
											[ "Ext3", "partitionmanager.png" ],
											[ "NTFS", "partitionmanager.png" ],
											[ "Fat32", "partitionmanager.png" ],
											[ "Cancel", "cancel.png" ],
											], 1, 4)
			else:
				self.session.openWithCallback(self.initialaze, ExtraMessageBox, "Format as", "HDD Partitioner",
											[ [ "Ext3", "partitionmanager.png" ],
											[ "NTFS", "partitionmanager.png" ],
											[ "Fat32", "partitionmanager.png" ],
											[ "Cancel", "cancel.png" ],
											], 1, 3)
				
		
	def yellow(self):
		if len(self.mdisks.disks) > 0:
			self.sindex = self['menu'].getIndex()
			self.session.openWithCallback(self.chooseFSType, ExtraMessageBox, "Please select your preferred configuration.", "HDD Partitioner",
										[ [ "One partition", "partitionmanager.png" ],
										[ "Two partitions (50% - 50%)", "partitionmanager.png" ],
										[ "Two partitions (75% - 25%)", "partitionmanager.png" ],
										[ "Three partitions (33% - 33% - 33%)", "partitionmanager.png" ],
										[ "Four partitions (25% - 25% - 25% - 25%)", "partitionmanager.png" ],
										[ "Cancel", "cancel.png" ],
										], 1, 5)
		
	def green(self):
		if len(self.mdisks.disks) > 0:
			self.sindex = self['menu'].getIndex()
			self.session.open(HddInfo, self.mdisks.disks[self.sindex][0])
		
	def red(self):
		if len(self.mdisks.disks) > 0:
			self.sindex = self['menu'].getIndex()
			if len(self.mdisks.disks[self.sindex][5]) == 0:
				self.session.open(MessageBox, _("You need to initialize your storage device first"), MessageBox.TYPE_ERROR)
			else:
				self.session.open(HddPartitions, self.mdisks.disks[self.sindex])
		
	def quit(self):
		self.close()
Example #15
0
class HddSetup(Screen):

    def __init__(self, session, args = 0):
        self.session = session
        Screen.__init__(self, session)
        self.disks = list()
        self.mdisks = Disks()
        for disk in self.mdisks.disks:
            capacity = '%d MB' % (disk[1] / 1048576)
            self.disks.append(DiskEntry(disk[3], capacity, disk[2]))

        self['menu'] = ExtrasList(self.disks)
        self['key_red'] = Button(_('Partitions'))
        self['key_green'] = Button('Info')
        self['key_yellow'] = Button(_('Initialize'))
        self['key_blue'] = Button(_('Exit'))
        self['actions'] = ActionMap(['OkCancelActions', 'ColorActions'], {'blue': self.quit,
         'yellow': self.yellow,
         'green': self.green,
         'red': self.red,
         'cancel': self.quit}, -2)
        self.onShown.append(self.setWindowTitle)

    def setWindowTitle(self):
        self.setTitle(_('Devicemanager Main'))

    def mkfs(self):
        self.formatted += 1
        return self.mdisks.mkfs(self.mdisks.disks[self.sindex][0], self.formatted)

    def refresh(self):
        self.disks = list()
        self.mdisks = Disks()
        for disk in self.mdisks.disks:
            capacity = '%d MB' % (disk[1] / 1048576)
            self.disks.append(DiskEntry(disk[3], capacity, disk[2]))

        self['menu'].setList(self.disks)

    def checkDefault(self):
        mp = MountPoints()
        mp.read()
        if not mp.exist('/hdd'):
            mp.add(self.mdisks.disks[self.sindex][0], 1, '/hdd')
            mp.write()
            mp.mount(self.mdisks.disks[self.sindex][0], 1, '/hdd')
            os.system('/bin/mkdir /hdd/movie')
            os.system('/bin/mkdir /hdd/music')
            os.system('/bin/mkdir /hdd/picture')

    def format(self, result):
        if result != 0:
            self.session.open(MessageBox, _('Cannot format partition %d' % self.formatted), MessageBox.TYPE_ERROR)
        if self.result == 0:
            if self.formatted > 0:
                self.checkDefault()
                self.refresh()
                return
        elif self.result > 0 and self.result < 3:
            if self.formatted > 1:
                self.checkDefault()
                self.refresh()
                return
        elif self.result == 3:
            if self.formatted > 2:
                self.checkDefault()
                self.refresh()
                return
        elif self.result == 4:
            if self.formatted > 3:
                self.checkDefault()
                self.refresh()
                return
        self.session.openWithCallback(self.format, ExtraActionBox, _('Formatting partition %d') % (self.formatted + 1), 'Initialize disk', self.mkfs)

    def fdiskEnded(self, result):
        if result == 0:
            self.format(0)
        elif result == -1:
            self.session.open(MessageBox, _('Cannot umount device.\nA record in progress, timeshit or some external tools (like samba, swapfile and nfsd) may cause this problem.\nPlease stop this actions/applications and try again'), MessageBox.TYPE_ERROR)
        else:
            self.session.open(MessageBox, _('Partitioning failed!'), MessageBox.TYPE_ERROR)

    def fdisk(self):
        return self.mdisks.fdisk(self.mdisks.disks[self.sindex][0], self.mdisks.disks[self.sindex][1], self.result)

    def initialaze(self, result):
        if result != 5:
            self.result = result
            self.formatted = 0
            mp = MountPoints()
            mp.read()
            mp.deleteDisk(self.mdisks.disks[self.sindex][0])
            mp.write()
            self.session.openWithCallback(self.fdiskEnded, ExtraActionBox, _('Partitioning...'), _('Initialize disk'), self.fdisk)

    def yellow(self):
        if len(self.mdisks.disks) > 0:
            self.sindex = self['menu'].getSelectedIndex()
            self.session.openWithCallback(self.initialaze, ExtraMessageBox, _('Please select your preferred configuration.'), _('HDD Partitioner'), [[_('One partition'), 'partitionmanager.png'],
             [_('Two partitions (50% - 50%)'), 'partitionmanager.png'],
             [_('Two partitions (75% - 25%)'), 'partitionmanager.png'],
             [_('Three partitions (33% - 33% - 33%)'), 'partitionmanager.png'],
             [_('Four partitions (25% - 25% - 25% - 25%)'), 'partitionmanager.png'],
             [_('Cancel'), 'cancel.png']], 1, 5)

    def green(self):
        if len(self.mdisks.disks) > 0:
            self.sindex = self['menu'].getSelectedIndex()
            self.session.open(HddInfo, self.mdisks.disks[self.sindex][0])

    def red(self):
        if len(self.mdisks.disks) > 0:
            self.sindex = self['menu'].getSelectedIndex()
            self.session.open(HddPartitions, self.mdisks.disks[self.sindex])

    def quit(self):
        self.close()
Example #16
0
class HddSetup(Screen):
    def __init__(self, session, args=0):
        self.session = session

        Screen.__init__(self, session)
        self.disks = list()

        self.mdisks = Disks()
        for disk in self.mdisks.disks:
            capacity = "%d MB" % (disk[1] / (1024 * 1024))
            self.disks.append(DiskEntry(disk[3], capacity, disk[2]))

        self["menu"] = List(self.disks)
        self["key_red"] = Button(_("Mounts"))
        self["key_green"] = Button(_("Info"))
        self["key_yellow"] = Button(_("Initialize"))
        self["key_blue"] = Button(_("Exit"))
        self["actions"] = ActionMap(
            ["OkCancelActions", "ColorActions"], {
                "blue": self.quit,
                "yellow": self.yellow,
                "green": self.green,
                "red": self.red,
                "cancel": self.quit,
            }, -2)

    def isExt4Supported(self):
        return "ext4" in open("/proc/filesystems").read()

    def mkfs(self):
        self.formatted += 1
        return self.mdisks.mkfs(self.mdisks.disks[self.sindex][0],
                                self.formatted, self.fsresult)

    def refresh(self):
        self.disks = list()

        self.mdisks = Disks()
        for disk in self.mdisks.disks:
            capacity = "%d MB" % (disk[1] / (1024 * 1024))
            self.disks.append(DiskEntry(disk[3], capacity, disk[2]))

        self["menu"].setList(self.disks)

    def checkDefault(self):
        mp = MountPoints()
        mp.read()
        if not mp.exist("/hdd"):
            mp.add(self.mdisks.disks[self.sindex][0], 1, "/hdd")
            mp.write()
            mp.mount(self.mdisks.disks[self.sindex][0], 1, "/hdd")
            os.system("/bin/mkdir /hdd/movie")
            os.system("/bin/mkdir /hdd/music")
            os.system("/bin/mkdir /hdd/picture")

    def format(self, result):
        if result != 0:
            self.session.open(MessageBox,
                              _("Cannot format partition %d" % self.formatted),
                              MessageBox.TYPE_ERROR)
        if self.result == 0:
            if self.formatted > 0:
                self.checkDefault()
                self.refresh()
                return
        elif self.result > 0 and self.result < 3:
            if self.formatted > 1:
                self.checkDefault()
                self.refresh()
                return
        elif self.result == 3:
            if self.formatted > 2:
                self.checkDefault()
                self.refresh()
                return
        elif self.result == 4:
            if self.formatted > 3:
                self.checkDefault()
                self.refresh()
                return

        self.session.openWithCallback(
            self.format, ExtraActionBox,
            "Formatting partition %d" % (self.formatted + 1),
            "Initialize disk", self.mkfs)

    def fdiskEnded(self, result):
        if result == 0:
            self.format(0)
        elif result == -1:
            self.session.open(
                MessageBox,
                _("Cannot umount device.\nA record in progress, timeshit or some external tools (like samba and nfsd) may cause this problem.\nPlease stop this actions/applications and try again"
                  ), MessageBox.TYPE_ERROR)
        else:
            self.session.open(MessageBox, _("Partitioning failed!"),
                              MessageBox.TYPE_ERROR)

    def fdisk(self):
        return self.mdisks.fdisk(self.mdisks.disks[self.sindex][0],
                                 self.mdisks.disks[self.sindex][1],
                                 self.result, self.fsresult)

    def initialaze(self, result):
        if not self.isExt4Supported():
            result += 1

        if result != 4:
            self.fsresult = result
            self.formatted = 0
            mp = MountPoints()
            mp.read()
            mp.deleteDisk(self.mdisks.disks[self.sindex][0])
            mp.write()
            self.session.openWithCallback(self.fdiskEnded, ExtraActionBox,
                                          "Partitioning...", "Initialize disk",
                                          self.fdisk)

    def chooseFSType(self, result):
        if result != 5:
            self.result = result
            if self.isExt4Supported():
                self.session.openWithCallback(
                    self.initialaze, ExtraMessageBox, "Format as",
                    "HDD Partitioner", [
                        ["Ext4", "partitionmanager.png"],
                        ["Ext3", "partitionmanager.png"],
                        ["NTFS", "partitionmanager.png"],
                        ["Fat32", "partitionmanager.png"],
                        ["Cancel", "cancel.png"],
                    ], 1, 4)
            else:
                self.session.openWithCallback(
                    self.initialaze, ExtraMessageBox, "Format as",
                    "HDD Partitioner", [
                        ["Ext3", "partitionmanager.png"],
                        ["NTFS", "partitionmanager.png"],
                        ["Fat32", "partitionmanager.png"],
                        ["Cancel", "cancel.png"],
                    ], 1, 3)

    def yellow(self):
        if len(self.mdisks.disks) > 0:
            self.sindex = self['menu'].getIndex()
            self.session.openWithCallback(
                self.chooseFSType, ExtraMessageBox,
                "Please select your preferred configuration.",
                "HDD Partitioner", [
                    ["One partition", "partitionmanager.png"],
                    ["Two partitions (50% - 50%)", "partitionmanager.png"],
                    ["Two partitions (75% - 25%)", "partitionmanager.png"],
                    [
                        "Three partitions (33% - 33% - 33%)",
                        "partitionmanager.png"
                    ],
                    [
                        "Four partitions (25% - 25% - 25% - 25%)",
                        "partitionmanager.png"
                    ],
                    ["Cancel", "cancel.png"],
                ], 1, 5)

    def green(self):
        if len(self.mdisks.disks) > 0:
            self.sindex = self['menu'].getIndex()
            self.session.open(HddInfo, self.mdisks.disks[self.sindex][0])

    def red(self):
        if len(self.mdisks.disks) > 0:
            self.sindex = self['menu'].getIndex()
            if len(self.mdisks.disks[self.sindex][5]) == 0:
                self.session.open(
                    MessageBox,
                    _("You need to initialize your storage device first"),
                    MessageBox.TYPE_ERROR)
            else:
                self.session.open(HddPartitions,
                                  self.mdisks.disks[self.sindex])

    def quit(self):
        self.close()
Example #17
0
class HddSetup(Screen):

    def __init__(self, session, args = 0):
        self.session = session
        Screen.__init__(self, session)
        self.disks = list()
        self.mdisks = Disks()
        for disk in self.mdisks.disks:
            capacity = '%d MB' % (disk[1] / 1048576)
            self.disks.append(DiskEntry(disk[3], capacity, disk[2]))

        self['menu'] = ExtrasList(self.disks)
        self['key_red'] = Button(_('Partitions'))
        self['key_green'] = Button('Info')
        self['key_yellow'] = Button(_('Initialize'))
        self['key_blue'] = Button(_('Exit'))
        self['actions'] = ActionMap(['OkCancelActions', 'ColorActions'], {'blue': self.quit,
         'yellow': self.yellow,
         'green': self.green,
         'red': self.red,
         'cancel': self.quit}, -2)
        self.onShown.append(self.setWindowTitle)

    def setWindowTitle(self):
        self.setTitle(_('Devicemanager Main'))

    def mkfs(self):
        self.formatted += 1
        return self.mdisks.mkfs(self.mdisks.disks[self.sindex][0], self.formatted)

    def refresh(self):
        self.disks = list()
        self.mdisks = Disks()
        for disk in self.mdisks.disks:
            capacity = '%d MB' % (disk[1] / 1048576)
            self.disks.append(DiskEntry(disk[3], capacity, disk[2]))

        self['menu'].setList(self.disks)

    def checkDefault(self):
        mp = MountPoints()
        mp.read()
        if not mp.exist('/hdd'):
            mp.add(self.mdisks.disks[self.sindex][0], 1, '/hdd')
            mp.write()
            mp.mount(self.mdisks.disks[self.sindex][0], 1, '/hdd')
            os.system('/bin/mkdir /hdd/movie')
            os.system('/bin/mkdir /hdd/music')
            os.system('/bin/mkdir /hdd/picture')

    def format(self, result):
        if result != 0:
            self.session.open(MessageBox, _('Cannot format partition %d' % self.formatted), MessageBox.TYPE_ERROR)
        if self.result == 0:
            if self.formatted > 0:
                self.checkDefault()
                self.refresh()
                return
        elif self.result > 0 and self.result < 3:
            if self.formatted > 1:
                self.checkDefault()
                self.refresh()
                return
        elif self.result == 3:
            if self.formatted > 2:
                self.checkDefault()
                self.refresh()
                return
        elif self.result == 4:
            if self.formatted > 3:
                self.checkDefault()
                self.refresh()
                return
        self.session.openWithCallback(self.format, ExtraActionBox, _('Formatting partition %d') % (self.formatted + 1), 'Initialize disk', self.mkfs)

    def fdiskEnded(self, result):
        if result == 0:
            self.format(0)
        elif result == -1:
            self.session.open(MessageBox, _('Cannot umount device.\nA record in progress, timeshit or some external tools (like samba, swapfile and nfsd) may cause this problem.\nPlease stop this actions/applications and try again'), MessageBox.TYPE_ERROR)
        else:
            self.session.open(MessageBox, _('Partitioning failed!'), MessageBox.TYPE_ERROR)

    def fdisk(self):
        return self.mdisks.fdisk(self.mdisks.disks[self.sindex][0], self.mdisks.disks[self.sindex][1], self.result)

    def initialaze(self, result):
        if result != 5:
            self.result = result
            self.formatted = 0
            mp = MountPoints()
            mp.read()
            mp.deleteDisk(self.mdisks.disks[self.sindex][0])
            mp.write()
            self.session.openWithCallback(self.fdiskEnded, ExtraActionBox, _('Partitioning...'), _('Initialize disk'), self.fdisk)

    def yellow(self):
        if len(self.mdisks.disks) > 0:
            self.sindex = self['menu'].getSelectedIndex()
            self.session.openWithCallback(self.initialaze, ExtraMessageBox, _('Please select your preferred configuration.'), _('HDD Partitioner'), [[_('One partition'), 'partitionmanager.png'],
             [_('Two partitions (50% - 50%)'), 'partitionmanager.png'],
             [_('Two partitions (75% - 25%)'), 'partitionmanager.png'],
             [_('Three partitions (33% - 33% - 33%)'), 'partitionmanager.png'],
             [_('Four partitions (25% - 25% - 25% - 25%)'), 'partitionmanager.png'],
             [_('Cancel'), 'cancel.png']], 1, 5)

    def green(self):
        if len(self.mdisks.disks) > 0:
            self.sindex = self['menu'].getSelectedIndex()
            self.session.open(HddInfo, self.mdisks.disks[self.sindex][0])

    def red(self):
        if len(self.mdisks.disks) > 0:
            self.sindex = self['menu'].getSelectedIndex()
            self.session.open(HddPartitions, self.mdisks.disks[self.sindex])

    def quit(self):
        self.close()