예제 #1
0
	def __init__ (self, filename, path, parent = None):
		QtGui.QDialog.__init__ (self, parent)

		self.examfile = os.path.join (path, filename)
		if path == "" or filename == "" or not os.path.exists (path) or not os.path.isdir (path) or not os.path.isfile (self.examfile):
			msg = CommonError (self.tr ("File invalid."))
			msg.exec_()
			QtGui.qApp.postEvent (self, QtGui.QCloseEvent())
			return

		self.ui = Ui_player()
		self.ui.setupUi (self)
		self.setWindowFlags (QtCore.Qt.FramelessWindowHint)

		self.leftclicked = False

		winid = self.ui.frameaudio.winId()
		pythonapi.PyCObject_AsVoidPtr.restype = c_void_p
		pythonapi.PyCObject_AsVoidPtr.argtypes = [py_object]
		self.windowId = pythonapi.PyCObject_AsVoidPtr (winid)

		self.ui.frameaudio.mouseReleaseEvent = self.frameMouseRelease

		self.player = Player (self.windowId, self.ui.Sliderprogress.minimum(), self.ui.Sliderprogress.maximum(), self.ui.slidervolume.minimum(), self.ui.slidervolume.maximum())

		self.ui.buttonplayerplay.clicked.connect (self.player.playclickedsignal)
		self.ui.buttonplayerstop.clicked.connect (self.player.stopclickedsignal)
		self.ui.buttonplayerbackward.clicked.connect (self.player.backwardclickedsignal)
		self.ui.buttonplayerforward.clicked.connect (self.player.forwardclickedsignal)
		self.ui.buttonvolume.clicked.connect (self.player.muteornotsignal)
		self.ui.Sliderprogress.valueChanged.connect (self.player.sliderseekvaluesignal)
		self.ui.slidervolume.valueChanged.connect (self.player.slidervolumevaluesignal)

		self.player.updatelabelduration.connect (self.updatelabelduration)
		self.player.updatesliderseek.connect (self.updatesliderseek)
		self.player.updateslidervolume.connect (self.updateslidervolume)
		self.player.setbuttonplay.connect (self.playersetbuttonplay)
		self.player.setbuttonpause.connect (self.playersetbuttonpause)

		self.player.startworker()
		self.player.playurisignal.emit (self.examfile)

		self.ui.label_3.setText (QtCore.QFileInfo (self.examfile).fileName())
		self.ui.label_3.setAlignment (QtCore.Qt.AlignHCenter)

		self.ui.lineeditduration.setEnabled (False)
예제 #2
0
	def on_buttonpreview_clicked (self):

		self.splitchoose = SplitNotChosen
		self.ui.lineeditstarttime.setEnabled (False)
		self.ui.lineeditendtime.setEnabled (False)

		starttime = str2time (self.ui.lineeditstarttime.text())
		stoptime = str2time (self.ui.lineeditendtime.text())
		if starttime < 0 or stoptime <= starttime:
			msg = CommonError (self.tr ("Start time or stop time invalid."))
			msg.exec_()
			self.ui.buttoncancelbrowse.clicked.emit()
			return

		self.player.setloopsignal.emit (self.ui.lineeditstarttime.text(), self.ui.lineeditendtime.text())

		self.ui.buttonpreview.hide()
		self.ui.buttoncancelbrowse.show()
예제 #3
0
    def on_buttonsave_clicked(self):
        if not os.path.isdir(self.ui.lineeditcaveroute.text()):
            self.on_buttonbrowse_clicked()
        else:
            self.splitpath = self.ui.lineeditcaveroute.text()

        self.splitfile = self.ui.lineeditcartoonname.text()

        if self.splitpath == "" or self.splitfile == "":
            return
        elif len(self.splitfile) > 255:
            msg = CommonError(self.tr("Filename too long."))
            msg.exec_()
            return

        self.totranscode = self.ui.checkBox.isChecked()

        self.accept()
예제 #4
0
	def on_buttonsave_clicked (self):
		if not os.path.isdir (self.ui.lineeditcaveroute.text()):
			self.on_buttonbrowse_clicked()
		else:
			self.splitpath = self.ui.lineeditcaveroute.text()

		self.splitfile = self.ui.lineeditcartoonname.text()

		if self.splitpath == "" or self.splitfile == "":
			return
		elif len (self.splitfile) > 255:
			msg = CommonError (self.tr ("Filename too long."))
			msg.exec_()
			return

		self.totranscode = self.ui.checkBox.isChecked()

		self.accept()
예제 #5
0
    def on_buttonconvert_clicked(self):
        model = self.ui.treeView.model()

        if os.path.isdir(self.ui.lineeditoutputroute.text()):
            self.transferpath = self.ui.lineeditoutputroute.text()
        else:
            self.on_buttonbrowse_clicked()

        if self.transferpath == "":
            msg = CommonError(self.tr("Please input output path"))
            msg.exec_()
            return

        self.files = []

        for i in xrange(model.rowCount()):
            f = model.data(model.index(i, 0))
            if os.path.isfile(f):
                self.files.append(f)

        self.accept()
예제 #6
0
	def on_buttonconvert_clicked (self):
		model = self.ui.treeView.model()

		if os.path.isdir (self.ui.lineeditoutputroute.text()):
			self.transferpath = self.ui.lineeditoutputroute.text()
		else:
			self.on_buttonbrowse_clicked()

		if self.transferpath == "":
			msg = CommonError (self.tr ("Please input output path"))
			msg.exec_()
			return

		self.files = []

		for i in xrange (model.rowCount()):
			f = model.data (model.index (i, 0))
			if os.path.isfile (f):
				self.files.append (f)

		self.accept()
예제 #7
0
	def verifiedtask (self, row, params, verified):

		self.srcfiles[row]['effective'] = verified
		self.srcfiles[row].update (params)

		if not verified:
			return

		num = 0
		for i in xrange (self.items):
			if self.srcfiles[i].get ('effective'):
				num += 1
		self.effectives = num

		if self.effectives == 1:
			self.params = params
		elif self.effectives > 1:
			if not self.checkcompat (self.params, params):
				self.srcfiles[self.items - 1]['effective'] = False
				self.effectives -= 1
				msg = CommonError (self.tr ("Media type not compatible."))
				msg.exec_()
				self.removerowsignal.emit (row)
예제 #8
0
    def verifiedtask(self, row, params, verified):

        self.srcfiles[row]['effective'] = verified
        self.srcfiles[row].update(params)

        if not verified:
            return

        num = 0
        for i in xrange(self.items):
            if self.srcfiles[i].get('effective'):
                num += 1
        self.effectives = num

        if self.effectives == 1:
            self.params = params
        elif self.effectives > 1:
            if not self.checkcompat(self.params, params):
                self.srcfiles[self.items - 1]['effective'] = False
                self.effectives -= 1
                msg = CommonError(self.tr("Media type not compatible."))
                msg.exec_()
                self.removerowsignal.emit(row)
예제 #9
0
def Cartoon():

    app = QtGui.QApplication(sys.argv)
    app.setWindowIcon(QtGui.QIcon(':/images/icon.ico'))

    scr = QtGui.QApplication.desktop().screenGeometry()

    QtGui.QApplication.setQuitOnLastWindowClosed(False)

    locale = QtCore.QLocale.system().name()
    appTranslator = QtCore.QTranslator()
    if appTranslator.load(":/cartoon_" + locale):
        app.installTranslator(appTranslator)

    islogin = False

    l = Login()
    l.move(scr.center() - l.rect().center())

    while not islogin:

        if not l.exec_() == QtGui.QDialog.Accepted:
            QtGui.qApp.quit()

        ll = LoginList(l.username, l.password, et99.et_init())
        ll.move(l.pos() + l.rect().center() - ll.rect().center())
        ret = ll.exec_()

        if ret == QtGui.QDialog.Accepted:
            islogin = True
        else:
            l.show()
            l.ui.lineeditcpid.setFocus()

            if ret == QtGui.QDialog.Rejected:
                pe = PasswordError()
            else:
                pe = CommonError(
                    QtGui.qApp.tr(
                        "Connection failed. Please try again later."))
            pe.move(l.pos() + l.rect().center() - pe.rect().center())
            pe.exec_()
            islogin = False

    w = MainWindow(ll.rpc, ll.rpcworker, ll.params)
    w.move(scr.center() - w.rect().center())
    w.show()

    sys.exit(app.exec_())
예제 #10
0
	def on_buttonsave_clicked (self):
		if not self.playerfile:
			return

		self.splitchoose = SplitNotChosen

		starttime = str2time (self.ui.lineeditstarttime.text())
		stoptime = str2time (self.ui.lineeditendtime.text())
		duration = stoptime - starttime
		if starttime < 0 or duration <= 0:
			msg = CommonError (self.tr ("Start time or stop time invalid."))
			msg.exec_()
			return

		if self.ui.checkboxleadertitle.isChecked():
			title = self.ui.lineeditleadertitle.text()
			if len (title) > 63:
				msg = CommonError (self.tr ("Movie title too long."))
				msg.exec_()
				return
		else:
			title = None

		timestring = "%s -- %s" % (time2str (starttime), time2str (stoptime))

		ss = SaveSplit (self.params['LastSplitPath'])
		ss.move (self.pos() + self.rect().center() - ss.rect().center())
		if not ss.exec_() == QtGui.QDialog.Accepted:
			return

		outputfile = os.path.join (ss.splitpath, ss.splitfile)

		self.splitter = VideoSplitter (self.playerfile, outputfile, starttime, duration, title, ss.totranscode, self.player.params, self)
		self.splitter.addtranscode.connect (self.addtranscode)
		self.splitter.startnewsplit.connect (self.newsplitted)
		self.splitter.startworker (timestring)

		self.splitprog = SplitProg()
		self.splitprog.move (self.pos() + self.rect().center() - self.splitprog.rect().center())
		self.splitter.updatemodel.connect (self.splitprog.setprogressbar)
		self.splitter.finished.connect (self.splitprog.accept)

		if not self.splitprog.exec_() == QtGui.QDialog.Accepted:
			self.splitter.finished.emit()
예제 #11
0
    def startworker(self, filename, path):

        if not os.path.exists(path) or not os.path.isdir(path):
            msg = CommonError(self.tr("Save destination invalid."))
            msg.exec_()
            return

        if len(self.srcfiles) < 1:
            msg = CommonError(self.tr("Hasn't chosen any video clips."))
            msg.exec_()
            return

        for i in xrange(self.items):
            if self.srcfiles[i].get('effective'):
                self.defaultsrcfile = self.srcfiles[i]
                break

        dstfileinfo = QtCore.QFileInfo(os.path.join(path, filename))
        if dstfileinfo.suffix() == "":
            dstfile = "%s.%s" % (
                dstfileinfo.absoluteFilePath(),
                QtCore.QFileInfo(self.defaultsrcfile.get('srcfile')).suffix())
            dstfileinfo = QtCore.QFileInfo(dstfile)
        dstfile = QtCore.QDir.toNativeSeparators(
            dstfileinfo.absoluteFilePath())
        i = 0
        while os.path.exists(dstfile):
            i += 1
            dstfile = os.path.join(
                QtCore.QDir.toNativeSeparators(dstfileinfo.absolutePath()),
                "%s-%02d.%s" %
                (dstfileinfo.baseName(), i, dstfileinfo.suffix()))
        os.close(os.open(dstfile, os.O_CREAT))
        dstfileinfo = QtCore.QFileInfo(dstfile)

        self.dstfile = QtCore.QDir.toNativeSeparators(
            dstfileinfo.absoluteFilePath())
        self.path = QtCore.QDir.toNativeSeparators(dstfileinfo.absolutePath())
        self.filenamedecided.emit(dstfileinfo.fileName())

        self.startnewmerge.emit(self.path)
        self.dowork()
예제 #12
0
	def startworker (self, filename, path):

		if not os.path.exists (path) or not os.path.isdir (path):
			msg = CommonError (self.tr ("Save destination invalid."))
			msg.exec_()
			return

		if len (self.srcfiles) < 1:
			msg = CommonError (self.tr ("Hasn't chosen any video clips."))
			msg.exec_()
			return

		for i in xrange (self.items):
			if self.srcfiles[i].get ('effective'):
				self.defaultsrcfile = self.srcfiles[i]
				break

		dstfileinfo = QtCore.QFileInfo (os.path.join (path, filename))
		if dstfileinfo.suffix() == "":
			dstfile = "%s.%s" % (dstfileinfo.absoluteFilePath(), QtCore.QFileInfo (self.defaultsrcfile.get ('srcfile')).suffix())
			dstfileinfo = QtCore.QFileInfo (dstfile)
		dstfile = QtCore.QDir.toNativeSeparators (dstfileinfo.absoluteFilePath())
		i = 0
		while os.path.exists (dstfile):
			i += 1
			dstfile = os.path.join (QtCore.QDir.toNativeSeparators (dstfileinfo.absolutePath()),
					"%s-%02d.%s" % (dstfileinfo.baseName(), i, dstfileinfo.suffix()))
		os.close (os.open (dstfile, os.O_CREAT))
		dstfileinfo = QtCore.QFileInfo (dstfile)

		self.dstfile = QtCore.QDir.toNativeSeparators (dstfileinfo.absoluteFilePath())
		self.path = QtCore.QDir.toNativeSeparators (dstfileinfo.absolutePath())
		self.filenamedecided.emit (dstfileinfo.fileName())

		self.startnewmerge.emit (self.path)
		self.dowork()
예제 #13
0
	def on_buttonstart_clicked (self):
		filename = self.ui.lineeditfilenameblank.text()
		path = self.ui.lineeditsaveblank.text()

		if filename == "":
			msg = CommonError (self.tr ("Please input output filename"))
			msg.exec_()
			return
		elif len (filename) > 255:
			msg = CommonError (self.tr ("Filename too long."))
			msg.exec_()
			return
		
		if path == "":
			msg = CommonError (self.tr ("Please input output path"))
			msg.exec_()
			return

		self.merger.startsignal.emit (filename, path)
		self.blockmergeelements()
예제 #14
0
	def lostconnection (self):
		msg = CommonError (self.tr ("Lost connection to server. Exiting..."))
		msg.exec_()
		QtGui.qApp.quit()