def __init__(self, parent=None):
        self.wMutex = Lock()
        QtGui.QWidget.__init__(self, parent)
        self.setWindowTitle("&Linux Download Manager")
        p = QtGui.QPixmap(os.getcwd() + "/image/close.png")

        self.goTerminate = 0

        self.PARTS = 10
        self.timer = QtCore.QTimer()
        self.links = 0
        self.trayIcon = QtGui.QSystemTrayIcon(self)

        self.dLocation = "/home"
        loc = ""
        if os.path.exists(os.getcwd() + "/Locale/desF"):
            f = open(os.getcwd() + "/Locale/desF", "r")
            loc = f.read()
            f.close()
        if len(loc) > 0:
            if os.path.exists(loc):
                self.dLocation = loc

        self.dLoads = {}
        self.posMove = None
        self.setMouseTracking(1)
        self.setWindowFlags(QtCore.Qt.FramelessWindowHint)

        ldmLbl = QtGui.QLabel(self)

        cBox = QtGui.QComboBox(self)
        cBox.setToolTip("Fuzzy Partitioning")
        cBox.addItem("Partition")
        cBox.addItem("No Part 1")
        cBox.addItem("Few 5")
        cBox.addItem("Some 10")
        cBox.addItem("More 15")
        cBox.addItem("SuperSonic 20")

        cBox.setFrame(True)

        self.menuBtn = QtGui.QPushButton(self)
        minimize = QtGui.QPushButton(self)
        close = QtGui.QPushButton(self)
        YDldr = QtGui.QPushButton(self)
        ODldr = QtGui.QPushButton(self)
        Grbr = QtGui.QPushButton(self)
        credit = QtGui.QPushButton(self)

        self.pref = NetworkProxy(None, os.getcwd(), "&LDM")
        self.tabWidget = TabWidget(self.wMutex, self)

        self.createMenu()
        self.addTrayIcon()

        credit.setText("Credit")
        ldmLbl.setText("& Linux Download Manager")

        YDldr.setStyleSheet("background-image:url(" + os.getcwd() + "/image/Ytdlr.png);border-width:2px;")
        ODldr.setStyleSheet("background-image:url(" + os.getcwd() + "/image/ODld.png);border-width:2px;")
        Grbr.setStyleSheet("background-image:url(" + os.getcwd() + "/image/Grabber.png);border-width:2px;")
        ldmLbl.setStyleSheet("font-size:25px;font-family:lucida calligraphy;color:grey;")
        minimize.setStyleSheet("background-image:url(" + os.getcwd() + "/image/minimize.png);border-width:2px;")
        close.setStyleSheet("background-image:url(" + os.getcwd() + "/image/close.png);border-width:2px;")

        ldmLbl.setGeometry(250, 10, 400, 30)
        self.menuBtn.setGeometry(20, 20, 30, 20)
        cBox.setGeometry(10, 45, 100, 20)
        minimize.setGeometry(675, 0, 35, 22)
        close.setGeometry(710, 0, 35, 22)
        YDldr.setGeometry(10, 70, 100, 90)
        ODldr.setGeometry(10, 160, 100, 90)
        Grbr.setGeometry(10, 250, 100, 90)
        credit.setGeometry(10, 360, 100, 30)

        self.tabWidget.setGeometry(120, 40, 620, 350)

        self.resize(760, 400)
        self.trayIcon.show()

        self.connect(cBox, QtCore.SIGNAL("activated(int)"), self.sayIndex)
        self.connect(close, QtCore.SIGNAL("clicked()"), self.goToTray)
        self.connect(credit, QtCore.SIGNAL("clicked()"), self.creditMsg)
        self.connect(minimize, QtCore.SIGNAL("clicked()"), self.showMinimized)
        self.connect(Grbr, QtCore.SIGNAL("clicked()"), self.runSiteGrabber)
        self.connect(YDldr, QtCore.SIGNAL("clicked()"), self.YoutubeLinkDownload)
        self.connect(ODldr, QtCore.SIGNAL("clicked()"), self.fetchAndSaveUrl)
        self.connect(self.timer, QtCore.SIGNAL("timeout()"), self.regulateDownload)
        self.timer.start(2000)
    def __init__(self, parent=None):
        self.wMutex = Lock()
        QtGui.QWidget.__init__(self, parent)
        self.setWindowTitle('&Linux Download Manager')
        p = QtGui.QPixmap(os.getcwd() + '/image/close.png')

        self.goTerminate = 0

        self.PARTS = 10
        self.timer = QtCore.QTimer()
        self.links = 0
        self.trayIcon = QtGui.QSystemTrayIcon(self)

        self.dLocation = '/home'
        loc = ''
        if os.path.exists(os.getcwd() + '/Locale/desF'):
            f = open(os.getcwd() + '/Locale/desF', 'r')
            loc = f.read()
            f.close()
        if len(loc) > 0:
            if os.path.exists(loc):
                self.dLocation = loc

        self.dLoads = {}
        self.posMove = None
        self.setMouseTracking(1)
        self.setWindowFlags(QtCore.Qt.FramelessWindowHint)

        ldmLbl = QtGui.QLabel(self)

        cBox = QtGui.QComboBox(self)
        cBox.setToolTip('Fuzzy Partitioning')
        cBox.addItem('Partition')
        cBox.addItem('No Part 1')
        cBox.addItem('Few 5')
        cBox.addItem('Some 10')
        cBox.addItem('More 15')
        cBox.addItem('SuperSonic 20')

        cBox.setFrame(True)

        self.menuBtn = QtGui.QPushButton(self)
        minimize = QtGui.QPushButton(self)
        close = QtGui.QPushButton(self)
        YDldr = QtGui.QPushButton(self)
        ODldr = QtGui.QPushButton(self)
        Grbr = QtGui.QPushButton(self)
        credit = QtGui.QPushButton(self)

        self.pref = NetworkProxy(None, os.getcwd(), '&LDM')
        self.tabWidget = TabWidget(self.wMutex, self)

        self.createMenu()
        self.addTrayIcon()

        credit.setText('Credit')
        ldmLbl.setText('& Linux Download Manager')

        YDldr.setStyleSheet('background-image:url(' + os.getcwd() +
                            '/image/Ytdlr.png);border-width:2px;')
        ODldr.setStyleSheet('background-image:url(' + os.getcwd() +
                            '/image/ODld.png);border-width:2px;')
        Grbr.setStyleSheet('background-image:url(' + os.getcwd() +
                           '/image/Grabber.png);border-width:2px;')
        ldmLbl.setStyleSheet(
            'font-size:25px;font-family:lucida calligraphy;color:grey;')
        minimize.setStyleSheet('background-image:url(' + os.getcwd() +
                               '/image/minimize.png);border-width:2px;')
        close.setStyleSheet('background-image:url(' + os.getcwd() +
                            '/image/close.png);border-width:2px;')

        ldmLbl.setGeometry(250, 10, 400, 30)
        self.menuBtn.setGeometry(20, 20, 30, 20)
        cBox.setGeometry(10, 45, 100, 20)
        minimize.setGeometry(675, 0, 35, 22)
        close.setGeometry(710, 0, 35, 22)
        YDldr.setGeometry(10, 70, 100, 90)
        ODldr.setGeometry(10, 160, 100, 90)
        Grbr.setGeometry(10, 250, 100, 90)
        credit.setGeometry(10, 360, 100, 30)

        self.tabWidget.setGeometry(120, 40, 620, 350)

        self.resize(760, 400)
        self.trayIcon.show()

        self.connect(cBox, QtCore.SIGNAL('activated(int)'), self.sayIndex)
        self.connect(close, QtCore.SIGNAL('clicked()'), self.goToTray)
        self.connect(credit, QtCore.SIGNAL('clicked()'), self.creditMsg)
        self.connect(minimize, QtCore.SIGNAL('clicked()'), self.showMinimized)
        self.connect(Grbr, QtCore.SIGNAL('clicked()'), self.runSiteGrabber)
        self.connect(YDldr, QtCore.SIGNAL('clicked()'),
                     self.YoutubeLinkDownload)
        self.connect(ODldr, QtCore.SIGNAL('clicked()'), self.fetchAndSaveUrl)
        self.connect(self.timer, QtCore.SIGNAL('timeout()'),
                     self.regulateDownload)
        self.timer.start(2000)
class MainFrame(QtGui.QWidget):
    def __init__(self, parent=None):
        self.wMutex = Lock()
        QtGui.QWidget.__init__(self, parent)
        self.setWindowTitle("&Linux Download Manager")
        p = QtGui.QPixmap(os.getcwd() + "/image/close.png")

        self.goTerminate = 0

        self.PARTS = 10
        self.timer = QtCore.QTimer()
        self.links = 0
        self.trayIcon = QtGui.QSystemTrayIcon(self)

        self.dLocation = "/home"
        loc = ""
        if os.path.exists(os.getcwd() + "/Locale/desF"):
            f = open(os.getcwd() + "/Locale/desF", "r")
            loc = f.read()
            f.close()
        if len(loc) > 0:
            if os.path.exists(loc):
                self.dLocation = loc

        self.dLoads = {}
        self.posMove = None
        self.setMouseTracking(1)
        self.setWindowFlags(QtCore.Qt.FramelessWindowHint)

        ldmLbl = QtGui.QLabel(self)

        cBox = QtGui.QComboBox(self)
        cBox.setToolTip("Fuzzy Partitioning")
        cBox.addItem("Partition")
        cBox.addItem("No Part 1")
        cBox.addItem("Few 5")
        cBox.addItem("Some 10")
        cBox.addItem("More 15")
        cBox.addItem("SuperSonic 20")

        cBox.setFrame(True)

        self.menuBtn = QtGui.QPushButton(self)
        minimize = QtGui.QPushButton(self)
        close = QtGui.QPushButton(self)
        YDldr = QtGui.QPushButton(self)
        ODldr = QtGui.QPushButton(self)
        Grbr = QtGui.QPushButton(self)
        credit = QtGui.QPushButton(self)

        self.pref = NetworkProxy(None, os.getcwd(), "&LDM")
        self.tabWidget = TabWidget(self.wMutex, self)

        self.createMenu()
        self.addTrayIcon()

        credit.setText("Credit")
        ldmLbl.setText("& Linux Download Manager")

        YDldr.setStyleSheet("background-image:url(" + os.getcwd() + "/image/Ytdlr.png);border-width:2px;")
        ODldr.setStyleSheet("background-image:url(" + os.getcwd() + "/image/ODld.png);border-width:2px;")
        Grbr.setStyleSheet("background-image:url(" + os.getcwd() + "/image/Grabber.png);border-width:2px;")
        ldmLbl.setStyleSheet("font-size:25px;font-family:lucida calligraphy;color:grey;")
        minimize.setStyleSheet("background-image:url(" + os.getcwd() + "/image/minimize.png);border-width:2px;")
        close.setStyleSheet("background-image:url(" + os.getcwd() + "/image/close.png);border-width:2px;")

        ldmLbl.setGeometry(250, 10, 400, 30)
        self.menuBtn.setGeometry(20, 20, 30, 20)
        cBox.setGeometry(10, 45, 100, 20)
        minimize.setGeometry(675, 0, 35, 22)
        close.setGeometry(710, 0, 35, 22)
        YDldr.setGeometry(10, 70, 100, 90)
        ODldr.setGeometry(10, 160, 100, 90)
        Grbr.setGeometry(10, 250, 100, 90)
        credit.setGeometry(10, 360, 100, 30)

        self.tabWidget.setGeometry(120, 40, 620, 350)

        self.resize(760, 400)
        self.trayIcon.show()

        self.connect(cBox, QtCore.SIGNAL("activated(int)"), self.sayIndex)
        self.connect(close, QtCore.SIGNAL("clicked()"), self.goToTray)
        self.connect(credit, QtCore.SIGNAL("clicked()"), self.creditMsg)
        self.connect(minimize, QtCore.SIGNAL("clicked()"), self.showMinimized)
        self.connect(Grbr, QtCore.SIGNAL("clicked()"), self.runSiteGrabber)
        self.connect(YDldr, QtCore.SIGNAL("clicked()"), self.YoutubeLinkDownload)
        self.connect(ODldr, QtCore.SIGNAL("clicked()"), self.fetchAndSaveUrl)
        self.connect(self.timer, QtCore.SIGNAL("timeout()"), self.regulateDownload)
        self.timer.start(2000)

    def sayIndex(self, index):
        if index == 1:
            self.PARTS = 1
        elif not (index == 0):
            self.PARTS = 5 * (index - 1)

    def runingWin(self, index):
        if not (self.dLoads[index] == None):
            self.dLoads[index].flag = self.dLoads[index].flag | 0x0010

    def regulateDownload(self):
        for key in self.dLoads:
            flag = self.dLoads[key].flag
            if not (self.dLoads[key].free):
                self.tabWidget.updateEntry(
                    self.dLoads[key].getInfo(), self.dLoads[key].downloaded, self.dLoads[key].timeLeft
                )
            if flag & 0x0002:
                self.dLoads[key].free = 0
                self.dLoads[key].flag = flag & 0xFFFD
                self.dLoads[key].free = 1
                self.dLoads[key].obj.hide()
                self.downloads.delAction(key)
                self.tabWidget.updateEntry(self.dLoads[key].getInfo(), self.dLoads[key].downloaded, "0", 1)
            if flag & 0x0008:
                self.dLoads[key].obj.show()
                self.downloads.pushAction(key, self.dLoads[key].fileName, self)
                self.dLoads[key].flag = flag & 0xFFF7
                self.tabWidget.makeEntry(self.dLoads[key].getInfo())
            if flag & 0x0100:
                self.downloads.pushAction(key, self.dLoads[key].fileName, self)
                self.dLoads[key].obj.show()
                self.dLoads[key].flag = flag & 0xFEFF

            if flag & 0x0004:
                self.dLoads[key].free = 0
                self.dLoads[key].obj.hide()
                self.dLoads[key].flags = flag & 0xFFFB
                self.dLoads[key].free = 1
                self.downloads.delAction(key)
                self.tabWidget.updateEntry(self.dLoads[key].getInfo(), int(self.dLoads[key].length), "0", 1)
                self.dLoads[key].flag = flag & 0xFFFB

            if flag & 0x0040:
                self.dLoads[key].free = 1
                self.dLoads[key].clear()
                self.downloads.delAction(key)
                ok = QtGui.QMessageBox(
                    QtGui.QMessageBox.Information,
                    "Oops",
                    "Fatal Error In Download",
                    QtGui.QMessageBox.Ok,
                    self,
                    QtCore.Qt.FramelessWindowHint,
                )
                ok.exec_()
                self.dLoads[key].flag = flag & 0xFFBF

        if self.goTerminate == 1:
            if self.freeKey() == -1:
                sys.exit(0)
        self.timer.start(2000)

    def runSiteGrabber(self):
        ok = QtGui.QMessageBox(
            QtGui.QMessageBox.Information,
            "Site Grabber",
            "Sorry This facility is currently unavilable .  You may contribute for it.",
            QtGui.QMessageBox.Ok,
            self,
            QtCore.Qt.FramelessWindowHint,
        )
        ok.show()

    def freeKey(self):
        for key in self.dLoads:
            if self.dLoads[key].free == 1:
                return key
        return -1

    def loadPartition(self, url):
        pass

    def YoutubeLinkDownload(self):
        txt, ok = QtGui.QInputDialog.getText(
            self, "YouTube Link", "YTube Link:", QtGui.QLineEdit.Normal, "", QtCore.Qt.FramelessWindowHint
        )
        if ok == True:
            if txt.startsWith("https://www.youtube.com"):
                key = self.freeKey()
                if key == -1:
                    obj = Interface(self.PARTS)
                else:
                    obj = self.dLoads[key]
                    obj.PARTS = self.PARTS
                    obj.clear()
                    del self.dLoads[key]

                thread.start_new_thread(obj.start_Download, (txt, self.wMutex))
                self.dLoads[self.links] = obj
                self.links = self.links + 1
            else:
                msg = QtGui.QMessageBox(
                    QtGui.QMessageBox.Warning,
                    "Oops.",
                    "Not a valid YTube Url ",
                    QtGui.QMessageBox.Ok,
                    self,
                    QtCore.Qt.FramelessWindowHint,
                )
                msg.show()

    def downloadPartition(self, url, fileName, dt, tm, length):
        key = self.freeKey()
        if key == -1:
            obj = Interface(self.PARTS)
            key = self.links
            self.links = self.links + 1
        else:
            obj = self.dLoads[key]
            obj.PARTS = self.PARTS
            obj.clear()
            del self.dLoads[key]
        obj.url = url
        obj.fileName = fileName
        obj.dt = dt
        obj.tm = tm
        obj.length = length
        bit = 0
        if url.startswith("http://www.youtube.com"):
            bit = 1
        thread.start_new_thread(obj.start_from_Part, (self.wMutex, bit))
        self.dLoads[key] = obj

    def fetchAndSaveUrl(self, url="", bit=1):
        ok = True
        if len(url) == 0:
            url, ok = QtGui.QInputDialog.getText(
                self, "Link", "Download Link:", QtGui.QLineEdit.Normal, "", QtCore.Qt.FramelessWindowHint
            )
        if ok == True:
            key = self.freeKey()
            if key == -1:
                obj = Interface(self.PARTS)
                key = self.links
                self.links = self.links + 1
            else:
                obj = self.dLoads[key]
                obj.PARTS = self.PARTS
                obj.clear()
                del self.dLoads[key]

            thread.start_new_thread(obj.start_Download, (url, self.wMutex, bit))
            self.dLoads[key] = obj
        else:
            msg = QtGui.QMessageBox(
                QtGui.QMessageBox.Warning,
                "Oops.",
                "Not a valid Url ",
                QtGui.QMessageBox.Ok,
                self,
                QtCore.Qt.FramelessWindowHint,
            )
            msg.show()

    def createMenu(self):
        menu = QtGui.QMenu(self)

        self.downloads = Menu("Downloads", self)
        miniToTray = QtGui.QAction("Minimize To Tray", self)
        setting = QtGui.QAction("Preference", self)
        cLoc = QtGui.QAction("Change Downloads Destination", self)
        quit = QtGui.QAction("Quit", self)

        miniToTray.setShortcut("Ctrl+M")
        menu.addMenu(self.downloads)
        menu.addSeparator()
        menu.addAction(miniToTray)
        menu.addAction(setting)
        menu.addSeparator()
        menu.addAction(cLoc)
        menu.addSeparator()
        menu.addAction(quit)

        self.menuBtn.setMenu(menu)
        self.connect(miniToTray, QtCore.SIGNAL("triggered()"), self.goToTray)
        self.connect(setting, QtCore.SIGNAL("triggered()"), self.getSetting)
        self.connect(cLoc, QtCore.SIGNAL("triggered()"), self.changeLoc)
        self.connect(quit, QtCore.SIGNAL("triggered()"), self.safeExit)

    def changeLoc(self):
        data = self.dLocation
        if not (os.path.exists(data)):
            data = "/home"
        fD = QtGui.QFileDialog(self, "Get Download Destination", data, "")
        fD.setOption(QtGui.QFileDialog.ShowDirsOnly, True)
        fD.setFileMode(2)
        fD.resize(500, 300)
        fLoc = ""
        if fD.exec_():
            if len(fD.selectedFiles()) > 0:
                fLoc = fD.selectedFiles()[0]
        fLoc = str(fLoc)
        if len(fLoc) > 0:
            if os.path.exists(fLoc):
                self.dLocation = fLoc
                f = open(os.getcwd() + "/Locale/desF", "w")
                f.write(fLoc)
                f.close()
                for key in self.dLoads:
                    if not (self.dLoads[key] == None):
                        self.dLoads[key].dLocation = fLoc

    def getSetting(self):
        self.pref.show()

    def addTrayIcon(self):
        self.trayIcon.setIcon(QtGui.QIcon("image/tray.png"))

        menu = QtGui.QMenu(self)
        showWin = QtGui.QAction("Show Window", self)
        quit = QtGui.QAction("Quit", self)

        menu.addAction(showWin)
        menu.addMenu(self.downloads)
        menu.addAction(quit)

        self.trayIcon.setContextMenu(menu)
        self.connect(showWin, QtCore.SIGNAL("triggered()"), self.getOutOfTray)
        self.connect(quit, QtCore.SIGNAL("triggered()"), self.safeExit)

    def mousePressEvent(self, event):
        self.posMove = event.pos()

    def mouseMoveEvent(self, event):
        if self.posMove:
            self.move(
                self.pos().x() + event.pos().x() - self.posMove.x(), self.pos().y() + event.pos().y() - self.posMove.y()
            )

    def mouseReleaseEvent(self, event):
        self.posMove = None

    def creditMsg(self):
        ok = QtGui.QMessageBox(
            QtGui.QMessageBox.Information,
            "LDM Community",
            "By using this application you are contributing to this development.Thanks a lot for it.\nHope you'll enjoy & share your experience\n-Anand Kumar\nEfficience\nSubscribe to  (linkinAnand.blogspot.com) to get all the latest information.\nDeveloper (twitter.com/EfficienceAnand)\ncurrently at IIITA",
            QtGui.QMessageBox.Ok,
            self,
            QtCore.Qt.FramelessWindowHint,
        )
        ok.show()

    def goToTray(self):
        if self.isVisible():
            self.hide()

    def getOutOfTray(self):
        if not (self.isVisible()):
            self.show()

    def safeExit(self):
        gT = True
        for key in self.dLoads:
            if self.dLoads[key].free == 0:
                gT = False
                break
        if gT == True:
            sys.exit(0)
        else:
            msg = QtGui.QMessageBox(
                QtGui.QMessageBox.Question,
                "!!",
                "Some Download process are still running\nWould you still like to quit the application ?",
                QtGui.QMessageBox.Yes | QtGui.QMessageBox.No,
                self,
                QtCore.Qt.FramelessWindowHint,
            )
            ok = msg.exec_()
            if ok == QtGui.QMessageBox.Yes:
                self.goTerminate = True
                for key in self.dLoads:
                    self.dLoads[key].flag | 0x0080
class MainFrame(QtGui.QWidget):
    def __init__(self, parent=None):
        self.wMutex = Lock()
        QtGui.QWidget.__init__(self, parent)
        self.setWindowTitle('&Linux Download Manager')
        p = QtGui.QPixmap(os.getcwd() + '/image/close.png')

        self.goTerminate = 0

        self.PARTS = 10
        self.timer = QtCore.QTimer()
        self.links = 0
        self.trayIcon = QtGui.QSystemTrayIcon(self)

        self.dLocation = '/home'
        loc = ''
        if os.path.exists(os.getcwd() + '/Locale/desF'):
            f = open(os.getcwd() + '/Locale/desF', 'r')
            loc = f.read()
            f.close()
        if len(loc) > 0:
            if os.path.exists(loc):
                self.dLocation = loc

        self.dLoads = {}
        self.posMove = None
        self.setMouseTracking(1)
        self.setWindowFlags(QtCore.Qt.FramelessWindowHint)

        ldmLbl = QtGui.QLabel(self)

        cBox = QtGui.QComboBox(self)
        cBox.setToolTip('Fuzzy Partitioning')
        cBox.addItem('Partition')
        cBox.addItem('No Part 1')
        cBox.addItem('Few 5')
        cBox.addItem('Some 10')
        cBox.addItem('More 15')
        cBox.addItem('SuperSonic 20')

        cBox.setFrame(True)

        self.menuBtn = QtGui.QPushButton(self)
        minimize = QtGui.QPushButton(self)
        close = QtGui.QPushButton(self)
        YDldr = QtGui.QPushButton(self)
        ODldr = QtGui.QPushButton(self)
        Grbr = QtGui.QPushButton(self)
        credit = QtGui.QPushButton(self)

        self.pref = NetworkProxy(None, os.getcwd(), '&LDM')
        self.tabWidget = TabWidget(self.wMutex, self)

        self.createMenu()
        self.addTrayIcon()

        credit.setText('Credit')
        ldmLbl.setText('& Linux Download Manager')

        YDldr.setStyleSheet('background-image:url(' + os.getcwd() +
                            '/image/Ytdlr.png);border-width:2px;')
        ODldr.setStyleSheet('background-image:url(' + os.getcwd() +
                            '/image/ODld.png);border-width:2px;')
        Grbr.setStyleSheet('background-image:url(' + os.getcwd() +
                           '/image/Grabber.png);border-width:2px;')
        ldmLbl.setStyleSheet(
            'font-size:25px;font-family:lucida calligraphy;color:grey;')
        minimize.setStyleSheet('background-image:url(' + os.getcwd() +
                               '/image/minimize.png);border-width:2px;')
        close.setStyleSheet('background-image:url(' + os.getcwd() +
                            '/image/close.png);border-width:2px;')

        ldmLbl.setGeometry(250, 10, 400, 30)
        self.menuBtn.setGeometry(20, 20, 30, 20)
        cBox.setGeometry(10, 45, 100, 20)
        minimize.setGeometry(675, 0, 35, 22)
        close.setGeometry(710, 0, 35, 22)
        YDldr.setGeometry(10, 70, 100, 90)
        ODldr.setGeometry(10, 160, 100, 90)
        Grbr.setGeometry(10, 250, 100, 90)
        credit.setGeometry(10, 360, 100, 30)

        self.tabWidget.setGeometry(120, 40, 620, 350)

        self.resize(760, 400)
        self.trayIcon.show()

        self.connect(cBox, QtCore.SIGNAL('activated(int)'), self.sayIndex)
        self.connect(close, QtCore.SIGNAL('clicked()'), self.goToTray)
        self.connect(credit, QtCore.SIGNAL('clicked()'), self.creditMsg)
        self.connect(minimize, QtCore.SIGNAL('clicked()'), self.showMinimized)
        self.connect(Grbr, QtCore.SIGNAL('clicked()'), self.runSiteGrabber)
        self.connect(YDldr, QtCore.SIGNAL('clicked()'),
                     self.YoutubeLinkDownload)
        self.connect(ODldr, QtCore.SIGNAL('clicked()'), self.fetchAndSaveUrl)
        self.connect(self.timer, QtCore.SIGNAL('timeout()'),
                     self.regulateDownload)
        self.timer.start(2000)

    def sayIndex(self, index):
        if index == 1:
            self.PARTS = 1
        elif not (index == 0):
            self.PARTS = 5 * (index - 1)

    def runingWin(self, index):
        if not (self.dLoads[index] == None):
            self.dLoads[index].flag = self.dLoads[index].flag | 0x0010

    def regulateDownload(self):
        for key in self.dLoads:
            flag = self.dLoads[key].flag
            if not (self.dLoads[key].free):
                self.tabWidget.updateEntry(self.dLoads[key].getInfo(),
                                           self.dLoads[key].downloaded,
                                           self.dLoads[key].timeLeft)
            if flag & 0x0002:
                self.dLoads[key].free = 0
                self.dLoads[key].flag = flag & 0xfffd
                self.dLoads[key].free = 1
                self.dLoads[key].obj.hide()
                self.downloads.delAction(key)
                self.tabWidget.updateEntry(self.dLoads[key].getInfo(),
                                           self.dLoads[key].downloaded, '0', 1)
            if flag & 0x0008:
                self.dLoads[key].obj.show()
                self.downloads.pushAction(key, self.dLoads[key].fileName, self)
                self.dLoads[key].flag = flag & 0xfff7
                self.tabWidget.makeEntry(self.dLoads[key].getInfo())
            if flag & 0x0100:
                self.downloads.pushAction(key, self.dLoads[key].fileName, self)
                self.dLoads[key].obj.show()
                self.dLoads[key].flag = flag & 0xfeff

            if flag & 0x0004:
                self.dLoads[key].free = 0
                self.dLoads[key].obj.hide()
                self.dLoads[key].flags = flag & 0xfffb
                self.dLoads[key].free = 1
                self.downloads.delAction(key)
                self.tabWidget.updateEntry(self.dLoads[key].getInfo(),
                                           int(self.dLoads[key].length), '0',
                                           1)
                self.dLoads[key].flag = flag & 0xfffb

            if flag & 0x0040:
                self.dLoads[key].free = 1
                self.dLoads[key].clear()
                self.downloads.delAction(key)
                ok = QtGui.QMessageBox(QtGui.QMessageBox.Information, 'Oops',
                                       "Fatal Error In Download",
                                       QtGui.QMessageBox.Ok, self,
                                       QtCore.Qt.FramelessWindowHint)
                ok.exec_()
                self.dLoads[key].flag = flag & 0xffbf

        if self.goTerminate == 1:
            if self.freeKey() == -1:
                sys.exit(0)
        self.timer.start(2000)

    def runSiteGrabber(self):
        ok = QtGui.QMessageBox(
            QtGui.QMessageBox.Information, 'Site Grabber',
            "Sorry This facility is currently unavilable .  You may contribute for it.",
            QtGui.QMessageBox.Ok, self, QtCore.Qt.FramelessWindowHint)
        ok.show()

    def freeKey(self):
        for key in self.dLoads:
            if self.dLoads[key].free == 1:
                return key
        return -1

    def loadPartition(self, url):
        pass

    def YoutubeLinkDownload(self):
        txt, ok = QtGui.QInputDialog.getText(self, 'YouTube Link',
                                             'YTube Link:',
                                             QtGui.QLineEdit.Normal, '',
                                             QtCore.Qt.FramelessWindowHint)
        if ok == True:
            if txt.startsWith('https://www.youtube.com'):
                key = self.freeKey()
                if key == -1:
                    obj = Interface(self.PARTS)
                else:
                    obj = self.dLoads[key]
                    obj.PARTS = self.PARTS
                    obj.clear()
                    del self.dLoads[key]

                thread.start_new_thread(obj.start_Download, (txt, self.wMutex))
                self.dLoads[self.links] = obj
                self.links = self.links + 1
            else:
                msg = QtGui.QMessageBox(QtGui.QMessageBox.Warning, 'Oops.',
                                        "Not a valid YTube Url ",
                                        QtGui.QMessageBox.Ok, self,
                                        QtCore.Qt.FramelessWindowHint)
                msg.show()

    def downloadPartition(self, url, fileName, dt, tm, length):
        key = self.freeKey()
        if key == -1:
            obj = Interface(self.PARTS)
            key = self.links
            self.links = self.links + 1
        else:
            obj = self.dLoads[key]
            obj.PARTS = self.PARTS
            obj.clear()
            del self.dLoads[key]
        obj.url = url
        obj.fileName = fileName
        obj.dt = dt
        obj.tm = tm
        obj.length = length
        bit = 0
        if url.startswith('http://www.youtube.com'):
            bit = 1
        thread.start_new_thread(obj.start_from_Part, (self.wMutex, bit))
        self.dLoads[key] = obj

    def fetchAndSaveUrl(self, url='', bit=1):
        ok = True
        if len(url) == 0:
            url, ok = QtGui.QInputDialog.getText(self, 'Link',
                                                 'Download Link:',
                                                 QtGui.QLineEdit.Normal, '',
                                                 QtCore.Qt.FramelessWindowHint)
        if ok == True:
            key = self.freeKey()
            if key == -1:
                obj = Interface(self.PARTS)
                key = self.links
                self.links = self.links + 1
            else:
                obj = self.dLoads[key]
                obj.PARTS = self.PARTS
                obj.clear()
                del self.dLoads[key]

            thread.start_new_thread(obj.start_Download,
                                    (url, self.wMutex, bit))
            self.dLoads[key] = obj
        else:
            msg = QtGui.QMessageBox(QtGui.QMessageBox.Warning, 'Oops.',
                                    "Not a valid Url ", QtGui.QMessageBox.Ok,
                                    self, QtCore.Qt.FramelessWindowHint)
            msg.show()

    def createMenu(self):
        menu = QtGui.QMenu(self)

        self.downloads = Menu("Downloads", self)
        miniToTray = QtGui.QAction("Minimize To Tray", self)
        setting = QtGui.QAction("Preference", self)
        cLoc = QtGui.QAction("Change Downloads Destination", self)
        quit = QtGui.QAction("Quit", self)

        miniToTray.setShortcut('Ctrl+M')
        menu.addMenu(self.downloads)
        menu.addSeparator()
        menu.addAction(miniToTray)
        menu.addAction(setting)
        menu.addSeparator()
        menu.addAction(cLoc)
        menu.addSeparator()
        menu.addAction(quit)

        self.menuBtn.setMenu(menu)
        self.connect(miniToTray, QtCore.SIGNAL('triggered()'), self.goToTray)
        self.connect(setting, QtCore.SIGNAL('triggered()'), self.getSetting)
        self.connect(cLoc, QtCore.SIGNAL('triggered()'), self.changeLoc)
        self.connect(quit, QtCore.SIGNAL('triggered()'), self.safeExit)

    def changeLoc(self):
        data = self.dLocation
        if not (os.path.exists(data)):
            data = '/home'
        fD = QtGui.QFileDialog(self, 'Get Download Destination', data, '')
        fD.setOption(QtGui.QFileDialog.ShowDirsOnly, True)
        fD.setFileMode(2)
        fD.resize(500, 300)
        fLoc = ''
        if fD.exec_():
            if len(fD.selectedFiles()) > 0:
                fLoc = fD.selectedFiles()[0]
        fLoc = str(fLoc)
        if len(fLoc) > 0:
            if os.path.exists(fLoc):
                self.dLocation = fLoc
                f = open(os.getcwd() + '/Locale/desF', 'w')
                f.write(fLoc)
                f.close()
                for key in self.dLoads:
                    if not (self.dLoads[key] == None):
                        self.dLoads[key].dLocation = fLoc

    def getSetting(self):
        self.pref.show()

    def addTrayIcon(self):
        self.trayIcon.setIcon(QtGui.QIcon('image/tray.png'))

        menu = QtGui.QMenu(self)
        showWin = QtGui.QAction("Show Window", self)
        quit = QtGui.QAction("Quit", self)

        menu.addAction(showWin)
        menu.addMenu(self.downloads)
        menu.addAction(quit)

        self.trayIcon.setContextMenu(menu)
        self.connect(showWin, QtCore.SIGNAL('triggered()'), self.getOutOfTray)
        self.connect(quit, QtCore.SIGNAL('triggered()'), self.safeExit)

    def mousePressEvent(self, event):
        self.posMove = event.pos()

    def mouseMoveEvent(self, event):
        if self.posMove:
            self.move(self.pos().x() + event.pos().x() - self.posMove.x(),
                      self.pos().y() + event.pos().y() - self.posMove.y())

    def mouseReleaseEvent(self, event):
        self.posMove = None

    def creditMsg(self):
        ok = QtGui.QMessageBox(
            QtGui.QMessageBox.Information, 'LDM Community',
            "By using this application you are contributing to this development.Thanks a lot for it.\nHope you'll enjoy & share your experience\n-Anand Kumar\nEfficience\nSubscribe to  (linkinAnand.blogspot.com) to get all the latest information.\nDeveloper (twitter.com/EfficienceAnand)\ncurrently at IIITA",
            QtGui.QMessageBox.Ok, self, QtCore.Qt.FramelessWindowHint)
        ok.show()

    def goToTray(self):
        if self.isVisible():
            self.hide()

    def getOutOfTray(self):
        if not (self.isVisible()):
            self.show()

    def safeExit(self):
        gT = True
        for key in self.dLoads:
            if self.dLoads[key].free == 0:
                gT = False
                break
        if gT == True:
            sys.exit(0)
        else:
            msg = QtGui.QMessageBox(
                QtGui.QMessageBox.Question, '!!',
                "Some Download process are still running\nWould you still like to quit the application ?",
                QtGui.QMessageBox.Yes | QtGui.QMessageBox.No, self,
                QtCore.Qt.FramelessWindowHint)
            ok = msg.exec_()
            if ok == QtGui.QMessageBox.Yes:
                self.goTerminate = True
                for key in self.dLoads:
                    self.dLoads[key].flag | 0x0080