You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tde-packaging/ubuntu/maverick/applications/kaffeine/debian/install-codecs

146 lines
4.9 KiB

#!/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_()