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.
kaffeine/kaffeine/src/instwizard.cpp

283 lines
9.9 KiB

/*
* instwizard.cpp
*
* Copyright (C) 2004-2005 Jürgen Kofler <kaffeine@gmx.net>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <tdelocale.h>
#include <kdebug.h>
#include <kprocess.h>
#include <tdeglobal.h>
#include <kstandarddirs.h>
#include <ktextbrowser.h>
#include <kservice.h>
#include <tqcheckbox.h>
#include <tqvbox.h>
#include <tqdir.h>
#include <tqfile.h>
#include <tqstringlist.h>
#include <tdeversion.h>
#include <tdeapplication.h>
//#include <xine.h>
#include "version.h"
#include "instwizard.h"
#include "instwizard.moc"
#ifdef HAVE_DVB
#include "dvbconfig.h"
#endif
void InstWizard::internalWizard()
{
setCaption(i18n("Kaffeine %1 Installation Wizard").arg(KAFFEINE_VERSION));
resize(400,400);
/************** installation check ************************/
KTextBrowser* page1 = new KTextBrowser(this);
addPage(page1, i18n("Installation Check"));
setNextEnabled(page1, true);
setBackEnabled(page1, false);
setHelpEnabled(page1, false);
setFinishEnabled(page1, false);
TQString infoString;
TQTextStream info(&infoString, IO_WriteOnly);
//KAFFEINE-PART
info << "<b>" << i18n("Kaffeine-Xine") << "...</b><br>";
KService::Ptr service = KService::serviceByDesktopName("xine_part");
if ((service) && (service->serviceTypes().contains("KaffeinePart")))
info << "<font color=\"DarkGreen\">" << i18n("Ok.") << "</font>";
else
info << "<font color=\"DarkRed\">" << i18n("Part not found. Please check your installation!") << "</font>";
//KAFFEINE-PART
info << "<br><hr><b>" << "TDE" << "...</b><br>";
info << i18n("Found version") << ": " << KDE::versionString() << "<br>";
if (KDE::version() >= TDE_MAKE_VERSION(3,2,0))
info << "<font color=\"DarkGreen\">" << i18n("Ok.") << "</font>";
else
info << "<font color=\"DarkRed\">" << i18n("Kaffeine requires TDE >= %1.").arg("3.2") << "</font>";
//XINE-LIB
//Should engine depending stuff be here?
/*
info << "<br><hr><b>" << "xine-lib" << "...</b><br>";
TQString xineVersion = xine_get_version_string();
info << i18n("Found version") << ": " << xineVersion << "<br>";
if (xine_check_version(1,0,0))
{
int major, minor, sub;
xine_get_version(&major, &minor, &sub);
if (xineVersion.contains("CVS", false))
info << "<font color=\"DarkBlue\">" << i18n("Developer version.") << "</font>";
if ((major == 1) && (minor == 0) && (sub == 0) && (xineVersion.contains("rc", false)))
{
info << "<font color=\"DarkRed\">" << i18n("Kaffeine requires xine-lib >= %1. Download the latest version here:").arg("1.0") << " <a href=\"http://www.xinehq.de\">http://www.xinehq.de</a>.</font>";
}
else
info << "<font color=\"DarkGreen\">" << i18n("Ok.") << "</font>";
}
else
info << "<font color=\"DarkRed\">" << i18n("Kaffeine requires xine-lib >= %1. Download the latest version here:").arg("1.0")
<< " <a href=\"http://www.xinehq.de\">http://www.xinehq.de</a>.</font>";
*/
//WIN32-CODECS
/*
info << "<hr><b>" << i18n("WIN32 Codecs") << "...</b><br>";
TQDir d("/usr/lib/win32");
TQStringList entries = d.entryList("wmv*");
if (entries.count())
info << "<font color=\"DarkGreen\">" << i18n("Ok.") << "</font>";
else
info << "<font color=\"DarkRed\">" << i18n("No WIN32 codecs found in /usr/lib/win32. You're not able to play Windows Media 9 files, newer Real Media files and some less common formats. Download the codecs here:")
<< " <a href=\"http://www1.mplayerhq.hu/design7/dload.html#binary_codecs\">http://www1.mplayerhq.hu/design7/dload.html#binary_codecs</a>.</font>";
*/
//LIBDVDCSS
info << "<br><hr><b>" << "libdvdcss" << "...</b><br>";
bool dvdcss = false;
TQStringList libDirs;
TQStringList entries;
TQDir d;
libDirs
<< "/" SYSTEM_LIBDIR
<< "/usr/" SYSTEM_LIBDIR
<< "/usr/local/" SYSTEM_LIBDIR
<< "/lib"
<< "/usr/lib"
<< "/usr/local/lib";
for (TQStringList::ConstIterator it = libDirs.begin(); it != libDirs.end(); ++it)
{
d = TQDir(*it);
entries = d.entryList("libdvdcss.so*");
if (entries.count())
{
dvdcss = true;
break;
}
}
if (!dvdcss)
info << "<font color=\"DarkRed\">" << i18n("libdvdcss not found. You're not able to play encrypted (most commercial) DVD's. You can get the library here (but using it may violate copyright regulations of your country!):")
<< " <a href=\"http://developers.videolan.org/libdvdcss/\">http://developers.videolan.org/libdvdcss</a>.</font>";
else
info << "<font color=\"DarkGreen\">" << i18n("Ok.") << "</font>";
//DVD-DRIVE
info << "<br><hr><b>" << i18n("DVD Drive") << "...</b><br>";
TDEProcess process;
process << "/sbin/hdparm" << "-d" << "/dev/dvd";
connect(&process, TQT_SIGNAL(receivedStdout(TDEProcess*,char*,int)), this, TQT_SLOT(slotStdout(TDEProcess*, char*, int)));
process.start(TDEProcess::Block, TDEProcess::Stdout);
if (stdout.contains('1'))
info << "<font color=\"DarkGreen\">" << i18n("Ok.") << "</font>";
else if (stdout.contains('0'))
info << "<font color=\"DarkRed\">" << i18n("DMA mode off! For smooth DVD playback run as root:") + " \"hdparm -d1 /dev/dvd\".</font>";
else
info << "<font color=\"DarkBlue\">" << i18n("Can't check DMA mode. Permission denied or no such device:")
<< " \"/dev/dvd\".</font>";
//DVB-DEVICES
#ifdef HAVE_DVB
info << "<br><hr><b>" << i18n("DVB-Device") << "...</b><br>";
if (DVBconfig::haveDvbDevice())
{
info << "<font color=\"DarkGreen\">" << i18n("Ok.") << "</font>";
}
else
{
info << "<font color=\"DarkBlue\">" << i18n("No DVB-Devices found. The DVB related functions will be hidden.") << "</font>";
}
#endif
//DISTRIBUTION
info << "<br><hr><b>" << i18n("Distribution") << "...</b><br>";
if (TQFile::exists("/etc/SuSE-release"))
{
TQFile file("/etc/SuSE-release");
file.open(IO_ReadOnly);
TQTextStream stream(&file);
info << "<font color=\"DarkBlue\">" << i18n("Found") << ": " << stream.readLine() << ". </font>"
<< i18n("The xine-lib shipped by SuSE \"may lack certain features because of legal requirements (potential patent violation)\". You should use the packages from here:")
<< " <a href=\"http://packman.links2linux.de/?action=124\">http://packman.links2linux.de</a>.";
file.close();
}
else
info << "<font color=\"DarkGreen\">" << i18n("Ok.") << "</font>";
info << "<hr><br><b>" << i18n("RESULT") << ":</b> ";
if (infoString.contains("DarkRed"))
{
info << i18n("Found some problems, but nevertheless Kaffeine might work.");
}
else
{
info << i18n("All ok!");
}
info << "<br><br";
page1->setText(infoString);
/************** installation options **********************/
TQVBox* page2 = new TQVBox(this);
page2->setSpacing(20);
TQCheckBox *m_useMMSHelper = new TQCheckBox(i18n("Use Kaffeine as helper application for mms:// (Microsoft Media) streams"), page2);
if (!locateLocal("services", "mms.protocol"))
m_useMMSHelper->setChecked(true);
TQCheckBox *m_useRTSPHelper = new TQCheckBox(i18n("Use Kaffeine as helper application for rtsp:// (Real Media and others) streams"), page2);
if (!locateLocal("services", "rtsp.protocol"))
m_useRTSPHelper->setChecked(true);
TQCheckBox *m_createDesktopIcon = new TQCheckBox(i18n("Create a Kaffeine icon on desktop"), page2);
if (!TQFile::exists( TQDir::homeDirPath() + "/Desktop/kaffeine.desktop"))
m_createDesktopIcon->setChecked(true);
addPage(page2, i18n("Installation Options"));
setNextEnabled(page2, false);
setBackEnabled(page2, true);
setHelpEnabled(page2, false);
setFinishEnabled(page2, true);
if (exec() == TQDialog::Accepted) {
kdDebug() << "WizardDialog: finished pressed" << endl;
TDEProcess process;
TQStringList dirs = TDEGlobal::dirs()->findDirs("data", "kaffeine");
TQString homePath = TDEGlobal::dirs()->localtdedir();
kdDebug() << "WizardDialog: TDE homedir: " << homePath << endl;
TQString dataPath;
if (dirs[0].left(homePath.length()) != homePath) /* global data path */
dataPath = dirs[0];
else
dataPath = dirs[1];
if (m_useMMSHelper->isChecked())
{
process << "cp" << dataPath + "mms.protocol" << locateLocal("services", "mms.protocol");
kdDebug() << "WizardDialog: cp " << dataPath + "mms.protocol" << " " << locateLocal("services", "mms.protocol") << endl;
process.start(TDEProcess::Block);
process.clearArguments();
}
if (m_useRTSPHelper->isChecked())
{
process << "cp" << dataPath + "rtsp.protocol" << locateLocal("services", "rtsp.protocol");
kdDebug() << "WizardDialog: cp " << dataPath + "rtsp.protocol" << " " << locateLocal("services", "rtsp.protocol") << endl;
process.start(TDEProcess::Block);
process.clearArguments();
}
//dirs = TDEGlobal::dirs()->findDirs("apps", "Multimedia");
dirs = TDEGlobal::dirs()->findDirs("xdgdata-apps", "kde");
if (!dirs.isEmpty())
dataPath = dirs[0];
else
kdError() << "WizardDialog: Applications path not found!" << endl;
if (m_createDesktopIcon->isChecked())
{
process << "cp" << dataPath + "kaffeine.desktop" << TQDir::homeDirPath() + "/Desktop/kaffeine.desktop";
kdDebug() << "WizardDialog: cp " << dataPath + "kaffeine.desktop" << " " << TQDir::homeDirPath() + "/Desktop/kaffeine.desktop" << endl;
process.start(TDEProcess::Block);
process.clearArguments();
}
}
}
void InstWizard::slotStdout(TDEProcess *, char *buffer, int buflen)
{
TQString output = TQString::fromLatin1(buffer, buflen);
kdDebug() << "WizardDialog: got from hdparm: " << output << "\n";
stdout.append(output);
}