Exemplo n.º 1
0
 def getFileUrls(self, url, segment, unmute):
     original = Utils.joinUrl(url, segment.fileName)
     unmuted = Utils.joinUrl(url, segment.getUnmutedFileName())
     muted = Utils.joinUrl(url, segment.getMutedFileName())
     if segment.muted:
         if not unmute:
             return [unmuted, muted, original]
     return [original, unmuted, muted]
Exemplo n.º 2
0
 def setAds(self):
     adArea = self.findChildren(QtWidgets.QWidget,
                                QtCore.QRegExp("^adArea_\d+$"))
     adGroup = self.findChildren(QtWidgets.QWidget,
                                 QtCore.QRegExp("^adGroup_\d+$"))
     if AdManager.Config.SHOW:
         for widget in adArea:
             Utils.setPlaceholder(
                 widget,
                 AdManager.Ad(minimumSize=widget.minimumSize(),
                              responsive=True))
     else:
         for widget in adArea + adGroup:
             widget.setParent(None)
Exemplo n.º 3
0
 def download(self):
     with self.actionLock:
         if self.status.terminateState.isProcessing():
             return
         self.FFmpeg = FFmpeg(self.setup.downloadInfo.getUrl(),
                              self.setup.downloadInfo.getAbsoluteFileName())
     self.status.setDownloading()
     self.syncStatus()
     for progress in self.FFmpeg.output():
         time = progress.get("time")
         if time != None:
             self.progress.seconds = Utils.toSeconds(
                 *time.split(".")[0].split(":"))
         size = progress.get("size") or progress.get("Lsize")
         if size != None:
             self.progress.totalSize = Utils.formatByteSize(size)
             self.progress.size = self.progress.totalSize
         self.syncProgress()
Exemplo n.º 4
0
 def setupSegmentDownload(self):
     try:
         self.tempDirectory = TempManager.createTempDirectory(self.setup.downloadInfo.directory)
     except:
         raise Exceptions.FileSystemError
     self.playlist = Playlist(
         self.setup.downloadInfo.getUrl(),
         Utils.joinPath(self.tempDirectory.name, "{}.m3u8".format(Config.PLAYLIST_FILE_NAME))
     )
     self.playlist.setRange(*self.setup.downloadInfo.range)
     self.syncPlaylistProgress()
Exemplo n.º 5
0
 def downloadSegments(self):
     url = self.setup.downloadInfo.getUrl().rsplit("/", 1)[0]
     processedFiles = []
     with self.actionLock:
         self.taskManager.taskCompleteSignal.connect(self.segmentDownloadResult)
         self.taskManager.ifPaused.connect(self.taskPaused)
         self.taskManager.start()
     while self.status.terminateState.isFalse():
         self.status.setDownloading()
         self.syncStatus()
         for segment in self.playlist.getSegments():
             if segment.fileName not in processedFiles:
                 processedFiles.append(segment.fileName)
                 segmentDownloader = SegmentDownloader(
                     url=url,
                     segment=segment,
                     unmute=self.setup.unmuteVideo,
                     saveAs=Utils.joinPath(self.tempDirectory.name, segment.fileName),
                     priority=self.setup.priority + 1 if self.status.isUpdateFound() else self.setup.priority
                 )
                 self.taskManager.add(task=segmentDownloader)
         self.taskManager.waitForDone()
         if not (self.setup.updateTrack and self.playlist.timeRange.timeTo == None):
             break
         self.status.setWaiting()
         waitEnd = time.time() + Config.UPDATE_TRACK_DURATION
         while True:
             prevWaiting = self.status.getWaitingTime()
             self.status.setWaitingTime(math.ceil(waitEnd - time.time()))
             if self.status.getWaitingTime() != prevWaiting:
                 self.syncStatus()
             if self.status.getWaitingTime() <= 0 or self.status.terminateState.isProcessing() or self.status.isDownloadSkipped():
                 break
             if self.status.isWaitingSkipped():
                 self.status.setSkipWaiting(False)
                 break
             time.sleep(0.1)
         self.status.setWaitingTime(None)
         self.status.setUpdating()
         self.syncStatus()
         if self.status.terminateState.isProcessing() or self.status.isDownloadSkipped():
             break
         prevFiles = self.playlist.getFileList()
         try:
             self.playlist.updatePlaylist()
             self.syncPlaylistProgress()
             if prevFiles == self.playlist.getFileList():
                 break
             else:
                 self.status.setUpdateFound()
         except:
             break
Exemplo n.º 6
0
 def encode(self):
     with self.actionLock:
         if self.status.terminateState.isProcessing():
             return
         self.status.setEncoding()
         self.syncStatus()
         self.FFmpeg = FFmpeg(self.playlist.filePath, self.setup.downloadInfo.getAbsoluteFileName())
     processingFile = None
     for progress in self.FFmpeg.output():
         file = progress.get("file")
         if file != None:
             if processingFile != None:
                 self.removeFile(processingFile)
             processingFile = file
         time = progress.get("time")
         if time != None:
             self.progress.seconds = Utils.toSeconds(*time.split(".")[0].split(":"))
         size = progress.get("size") or progress.get("Lsize")
         if size != None:
             self.progress.totalSize = Utils.formatByteSize(size)
             self.progress.size = self.progress.totalSize
         self.syncProgress()
Exemplo n.º 7
0
 def getAbsoluteFileName(self):
     return "{}.{}".format(Utils.joinPath(self.directory, self.fileName),
                           self.fileFormat)
Exemplo n.º 8
0
 def createFileName(self):
     return Utils.getValidFileName(
         Utils.injectionSafeFormat(self.getFileNameTemplate(),
                                   **self.getFileNameTemplateVariables()))
Exemplo n.º 9
0
 def handleDownloadResult(self, downloader):
     if downloader.status.terminateState.isTrue():
         error = downloader.status.getError()
         if error != None:
             if error == Exceptions.FileSystemError:
                 Utils.info(*Messages.INFO.FILE_SYSTEM_ERROR)
             elif error == Exceptions.NetworkError:
                 Utils.info(*Messages.INFO.NETWORK_ERROR)
             else:
                 Utils.info(*Messages.INFO.DOWNLOAD_ERROR)
     elif DB.general.isAutoCloseEnabled(
     ) and not downloader.setup.downloadInfo.type.isClip():
         App.exit()
     else:
         fileName = downloader.setup.downloadInfo.getAbsoluteFileName()
         if Utils.ask("download-complete",
                      "{}\n\n{}".format(T("#Download completed."),
                                        fileName),
                      okText="open",
                      cancelText="ok"):
             try:
                 Utils.openFile(fileName)
             except:
                 Utils.info(*Messages.INFO.FILE_NOT_FOUND)
Exemplo n.º 10
0
 def removeFile(self, fileName):
     try:
         Utils.removeFile(fileName)
     except:
         pass
Exemplo n.º 11
0
def loadUi(ui_name):
    try:
        UiClass = uic.loadUiType("{}.ui".format(
            Utils.joinPath(Config.UI_ROOT, ui_name)))[0]
    except:
        raise Exceptions.FileSystemError

    class UiManager(UiClass):
        def __init__(self, useWindowGeometry=True):
            self.useWindowGeometry = useWindowGeometry
            self.setupUi(self)
            self.setupUiLayout()
            self.ignoreKeys = []

        def setupUiLayout(self):
            if isinstance(self, QtWidgets.QMainWindow) or isinstance(
                    self, QtWidgets.QDialog):
                self.setWindowIcon(QtGui.QIcon(Config.ICON_IMAGE))
                title = self.windowTitle()
                if title == "":
                    self.setWindowTitle(Config.APP_NAME)
                else:
                    self.setWindowTitle("{} - {}".format(
                        Config.APP_NAME, T(title)))
                self.setWindowFlag(QtCore.Qt.WindowContextHelpButtonHint,
                                   False)
                if self.useWindowGeometry:
                    windowGeometry = DB.temp.getWindowGeometry(
                        self.__class__.__name__)
                    if windowGeometry != None:
                        self.restoreGeometry(
                            QtCore.QByteArray.fromBase64(windowGeometry))
            self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
            self.setAds()
            self.setFont(Translator.getFont())
            for widget in self.findChildren(QtWidgets.QTextBrowser):
                widget.setFont(Translator.getDocFont(widget.font()))
            for widget in self.findChildren(QtWidgets.QLabel):
                widget.setFont(Translator.getFont(widget.font()))

        def setAds(self):
            adArea = self.findChildren(QtWidgets.QWidget,
                                       QtCore.QRegExp("^adArea_\d+$"))
            adGroup = self.findChildren(QtWidgets.QWidget,
                                        QtCore.QRegExp("^adGroup_\d+$"))
            if AdManager.Config.SHOW:
                for widget in adArea:
                    Utils.setPlaceholder(
                        widget,
                        AdManager.Ad(minimumSize=widget.minimumSize(),
                                     responsive=True))
            else:
                for widget in adArea + adGroup:
                    widget.setParent(None)

        def ignoreKey(self, *args):
            for key in args:
                self.ignoreKeys.append(key)

        def keyPressEvent(self, event):
            if event.key() in self.ignoreKeys:
                return event.ignore()
            else:
                return self.keyPressEvent(event)

        def done(self, *args, **kwargs):
            self.saveWindow()
            return self.done(*args, **kwargs)

        def saveWindow(self):
            if self.useWindowGeometry:
                DB.temp.setWindowGeometry(
                    self.__class__.__name__,
                    self.saveGeometry().toBase64().data())

    return UiManager