diff options
Diffstat (limited to 'ubuntu/maverick/applications/kaffeine/debian/install-codecs')
-rw-r--r-- | ubuntu/maverick/applications/kaffeine/debian/install-codecs | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/ubuntu/maverick/applications/kaffeine/debian/install-codecs b/ubuntu/maverick/applications/kaffeine/debian/install-codecs new file mode 100644 index 000000000..271285c4e --- /dev/null +++ b/ubuntu/maverick/applications/kaffeine/debian/install-codecs @@ -0,0 +1,145 @@ +#!/usr/bin/python +import sys,os +import gettext +import apt +from PyQt4.QtCore import * +from PyQt4.QtGui import * + +gettext.textdomain('kaffeine-install-codecs') + +def _(string): + return unicode(gettext.gettext(string), 'utf-8') + +if len(sys.argv) < 2: + sys.exit(1) + +class InstallerOpProgress(apt.OpProgress): + def __init__(self, installer): + self.installer = installer + + def update(self, percent): + self.installer.progress.setValue(percent) + QApplication.processEvents() + + def done(self): + self.installer.progress.setValue(100) + QApplication.processEvents() + +class CodecInstallerWidget(QDialog, apt.OpProgress): + def __init__(self): + QDialog.__init__(self) + self.setWindowTitle(_('Kaffeine codec installer')) + self.setModal(True) + self.status = QLabel() + self.status.setAlignment(Qt.AlignHCenter | Qt.AlignVCenter) + self.progress = QProgressBar() + layout = QVBoxLayout() + layout.addWidget(self.status) + layout.addWidget(self.progress) + self.setLayout(layout) + self.setStatus(_('Initializing...')) + + desktop = QApplication.desktop() + self.setMinimumWidth(desktop.width() / 3) + self.adjustSize() + self.move((desktop.width()-self.width()) / 2, + (desktop.height()-self.height()) / 2) + self.show() + self.run() + + def setStatus(self, text): + self.status.setText('<i>' + text + '</i>') + QApplication.processEvents() + + def init_apt_cache(self): + self.setStatus(_('Preparing...')) + self.apt_cache = apt.Cache(InstallerOpProgress(self)) + + def run(self): + if sys.argv[1] == 'ffmpeg': + self.installer = self.install_ffmpeg + elif sys.argv[1] == 'dvdcss': + self.installer = self.install_dvdcss + else: + QMessageBox.critical(self, _('Error'), _('Unknown codec type')) + QApplication.exit(1) + return + + if not self.installer(): + QApplication.exit(1) + return + + os.system('dcop kaffeine KaffeineIface reloadEngine') + os.system('dcop kaffeine KaffeineIface play') + QApplication.exit(0) + + def check_already_installed(self, pkg): + if pkg and pkg.isInstalled: + QMessageBox.critical(self, _('Error'), _('Codec package is already installed')) + QApplication.exit(1) + return True + return False + + def install_ffmpeg(self): + self.init_apt_cache() + pkg = self.search_pkg('libxine','-ffmpeg') + + if self.check_already_installed(pkg): + return False + + confirm = QMessageBox.question(self, _('Codec not found'), + _('Kaffeine does not have a codec ' + 'installed to play this file. ' + 'Do you want to install the codecs?'), + QMessageBox.Yes | QMessageBox.No) + if (confirm == QMessageBox.No): + QApplication.exit(1) + return False + + self.setStatus(_('Installing...')) + QApplication.processEvents() + self.install_cache_package(pkg) + return True + + def install_cache_package(self, pkg): + if os.system('kdesu -d \'adept_batch install ' + pkg.name + '\'') != 0: + QApplication.exit(1) + return + + def search_pkg(self, prefix, suffix = ''): + for pkg in self.apt_cache: + if pkg.name.startswith(prefix) and pkg.name.endswith(suffix): + return pkg + return None + + def install_dvdcss(self): + self.init_apt_cache() + pkg = self.search_pkg('libdvdcss') + + if self.check_already_installed(pkg): + return False + + answer = QMessageBox.question(self, _('Codec not found'), + _('LibDVDCSS (http://www.videolan.org/developers/libdvdcss.html) ' + 'is about to be installed, it allows you to watch encrypted DVD ' + 'videos. This is illegal in some countries which ' + 'require decryption to be authorised by the copyright holder. ' + 'Do you want to install this package?'), + QMessageBox.Yes | QMessageBox.No) + if (answer == QMessageBox.No): + QApplication.exit(1) + return False + + self.setStatus(_('Installing...')) + QApplication.processEvents() + + distro_arch = os.popen('dpkg --print-installation-architecture').read() + distro_arch = distro_arch[:-1] # remove trailing newline + libdvdcss_url = 'http://kubuntu.org/packages/libdvdcss-' + distro_arch + '.deb' + os.system('kfmclient exec ' + libdvdcss_url) + return True + +app = QApplication(sys.argv) +window = CodecInstallerWidget() +window.exec_() + |