Created
April 23, 2017 08:32
-
-
Save redstoneleo/0faa008394f7f6ece9eb52cc900e9c48 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# print('(QProcess)---------------',self.findChildren(QProcess)) | |
arguments = ['-f', 'concat', '-safe', '-1', '-i', fp.name, '-y', '-c', 'copy', absoluteFileName] | |
# print(os.path.join(os.getcwd(), 'ffmpeg'), ' '.join(arguments)) | |
# self.process.finished.connect(self.mergeFinished(self.process)) | |
# process.destroyed.connect(self.onProcessDestroyed) | |
if self.process.state()==QProcess.NotRunning: | |
self.process.start(os.path.join(os.getcwd(), 'ffmpeg'), arguments) | |
else: | |
self.process.tasks.add(sourceUrl) | |
else: # 301未知协议处理不? | |
print('------------downloadFinished----', reply.error(), reply.errorString(), fileName) | |
# logging.error('-----------downloadFinished-----{}\n{}\n{}'.format(reply.error(), reply.errorString(), fileName)) | |
def mergeFinished(self, process): | |
# print('mergeFinished---------', exitCode, exitStatus) | |
if process.exitStatus() == QProcess.NormalExit: | |
process.close() | |
# print(process) | |
arguments = process.arguments() | |
# del process#py方面进一步帮助清理,以便后面不占用合并好的文件和碎片文件 | |
absoluteFileName = arguments[-1] | |
fileName = os.path.basename(absoluteFileName) | |
sourceUrl = self.fileName2sourceUrl.get(fileName) # 不pop,以免造成 KeyError: '蜡笔小新剧场版 2003年 风起云涌光荣烧肉之路.f4v' in on_pauseTasks_triggered,不用管这个字典了,占不了多少内存的,留着反而可以避免错误 | |
self.finishedTasks[fileName] = sourceUrl # 必须要在shutil.move之前,否则发生self.fileSystemWatcher.directoryChanged.connect(self.removeFinishedTasksMap),导致最终合并的时候因为没有最后下载完成的文件作为key,发生keyError | |
try: | |
shutil.move(absoluteFileName, self.finishedDir) # 还是必须合并完成再移动,直接把合并的半成品文件放到finishedDir可能会致使用户播放不了半成品文件(失误啊!) | |
except FileNotFoundError as e: | |
errorMsg = str(process.readAllStandardError(), 'utf8') | |
logging.error('FileNotFoundError------------{}\n{}'.format(e, errorMsg)) | |
QTimer.singleShot(10000, lambda: shutil.move(absoluteFileName, self.finishedDir)) | |
except PermissionError as e: | |
logging.error('PermissionError------------{}'.format(e)) | |
process.deleteLater() # Qt方面删除,解除process里的FFmpeg占用,既然结束了无论如何都是要删除的 | |
del process # py方面进一步帮助清理,以便后面不占用合并好的文件和碎片文件 | |
print('self.findChildren(QProcess)-----PermissionError----------', self.findChildren(QProcess)) | |
QTimer.singleShot(3000, lambda: shutil.move(absoluteFileName, self.finishedDir)) | |
except shutil.Error as e: # 结束目录里已经有同名文件 | |
logging.error('shutil.Error------------{}'.format(e)) | |
os.remove(os.path.join(self.finishedDir, fileName)) | |
QTimer.singleShot(3000, lambda: shutil.move(absoluteFileName, self.finishedDir)) | |
else: | |
self.trayIcon.showMessage('下载成功!', fileName) | |
self.resetModel(sourceUrl) # 上面转移好文件后从下载列表里去掉正在下载的任务,必须放在下面这个清楚残留文件之前 | |
process.deleteLater() # Qt方面删除,解除process里的FFmpeg占用,既然结束了无论如何都是要删除的 | |
del process # py方面进一步帮助清理,以便下面不占用合并好的文件和碎片文件 | |
f = self.sourceUrl2UnmergedFiles.pop(sourceUrl) | |
self.deleteFileList(f) | |
if self.unfinishedUrls == set(): # 确保这个dir无残留,不能放在resetModel里,因为那个在合并之前就会执行了 | |
self.deleteFileList([entry.path for entry in os.scandir(self.unfinishedDir)]) | |
# print('mergeFinished---deleteFileList------', f) | |
# print('self.unfinishedUrls == set()----------------',self.unfinishedUrls) | |
os.remove(arguments[-5]) # 移除tempFile |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment