diff options
author | Maia Kozheva <sikon@ubuntu.com> | 2009-11-20 18:22:19 +0600 |
---|---|---|
committer | Maia Kozheva <sikon@ubuntu.com> | 2009-11-20 18:22:19 +0600 |
commit | 263b32f108c15cd1c55a8f4eb4704fac6553f1ac (patch) | |
tree | 1c49e7848aa2d3d64a9d9b96b8852cb1884da2f7 /src/mplayerversion.cpp |
Imported Upstream version 0.6.8
Diffstat (limited to 'src/mplayerversion.cpp')
-rw-r--r-- | src/mplayerversion.cpp | 137 |
1 files changed, 137 insertions, 0 deletions
diff --git a/src/mplayerversion.cpp b/src/mplayerversion.cpp new file mode 100644 index 0000000..1444413 --- /dev/null +++ b/src/mplayerversion.cpp @@ -0,0 +1,137 @@ +/* smplayer, GUI front-end for mplayer. + Copyright (C) 2006-2009 Ricardo Villalba <rvm@escomposlinux.org> + + 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include "mplayerversion.h" +#include "global.h" +#include "preferences.h" + +#include <QRegExp> + +using namespace Global; + +int MplayerVersion::mplayerVersion(QString string) { + //static QRegExp rx_mplayer_revision("^MPlayer (\\S+)-SVN-r(\\d+)-(.*)"); + static QRegExp rx_mplayer_revision("^MPlayer (.*)-r(\\d+)(.*)"); + static QRegExp rx_mplayer_version("^MPlayer ([a-z,0-9,.]+)-(.*)"); + static QRegExp rx_mplayer_git("^MPlayer GIT(.*)"); +#ifndef Q_OS_WIN + static QRegExp rx_mplayer_version_ubuntu("^MPlayer (\\d):(\\d)\\.(\\d)~(.*)"); +#endif + + int mplayer_svn = 0; + +#ifdef Q_OS_WIN + // Hack to recognize mplayer 1.0rc2 from CCCP: + if (string.startsWith("MPlayer CCCP ")) { + string.remove("CCCP "); + qDebug("MplayerVersion::mplayerVersion: removing CCCP: '%s'", string.toUtf8().data()); + } +#else + // Hack to recognize mplayer 1.0rc1 from Ubuntu: + if (rx_mplayer_version_ubuntu.indexIn(string) > -1) { + int v1 = rx_mplayer_version_ubuntu.cap(2).toInt(); + int v2 = rx_mplayer_version_ubuntu.cap(3).toInt(); + QString rest = rx_mplayer_version_ubuntu.cap(4); + //qDebug("%d - %d - %d", rx_mplayer_version_ubuntu.cap(1).toInt(), v1 , v2); + string = QString("MPlayer %1.%2%3").arg(v1).arg(v2).arg(rest); + qDebug("MplayerVersion::mplayerVersion: line converted to '%s'", string.toUtf8().data()); + } +#endif + + if (rx_mplayer_revision.indexIn(string) > -1) { + mplayer_svn = rx_mplayer_revision.cap(2).toInt(); + qDebug("MplayerVersion::mplayerVersion: MPlayer SVN revision found: %d", mplayer_svn); + } + else + if (rx_mplayer_version.indexIn(string) > -1) { + QString version = rx_mplayer_version.cap(1); + qDebug("MplayerVersion::mplayerVersion: MPlayer version found: %s", version.toUtf8().data()); + mplayer_svn = 0; + if (version == "1.0rc3") mplayer_svn = MPLAYER_1_0_RC3_SVN; + else + if (version == "1.0rc2") mplayer_svn = MPLAYER_1_0_RC2_SVN; + else + if (version == "1.0rc1") mplayer_svn = MPLAYER_1_0_RC1_SVN; + else qWarning("MplayerVersion::mplayerVersion: unknown MPlayer version"); + } + else + if (rx_mplayer_git.indexIn(string) > -1) { + qDebug("MplayerVersion::mplayerVersion: MPlayer from git. Assuming >= 1.0rc3"); + mplayer_svn = MPLAYER_1_0_RC3_SVN; + } + + if (pref) { + pref->mplayer_detected_version = mplayer_svn; + } + + return mplayer_svn; +} + +bool MplayerVersion::isMplayerAtLeast(int mplayer_svn, int svn_revision) { + qDebug("MplayerVersion::isMplayerAtLeast: comparing %d with %d", svn_revision, mplayer_svn); + + if (mplayer_svn == -1) { + qWarning("MplayerVersion::isMplayerAtLeast: no version found!"); + } + else + if (mplayer_svn == 0) { + qWarning("MplayerVersion::isMplayerAtLeast: version couldn't be parsed!"); + } + + if (mplayer_svn <= 0) { + qWarning("MplayerVersion::isMplayerAtLeast: assuming that the mplayer version is less than %d", svn_revision); + return false; + } + + return (mplayer_svn >= svn_revision); +} + +bool MplayerVersion::isMplayerAtLeast(int svn_revision) { + if (pref->mplayer_detected_version >= MPLAYER_1_0_RC1_SVN) { + // SVN version seems valid + if (pref->mplayer_user_supplied_version != -1) { + qDebug("MplayerVersion::isMplayerAtLeast: using the parsed svn version from mplayer output"); + qDebug("MplayerVersion::isMplayerAtLeast: and clearing the previously user supplied version"); + pref->mplayer_user_supplied_version = -1; + } + return isMplayerAtLeast(pref->mplayer_detected_version, svn_revision); + } + else + if (pref->mplayer_user_supplied_version != -1) { + qDebug("MplayerVersion::isMplayerAtLeast: no parsed version, using user supplied version"); + return isMplayerAtLeast(pref->mplayer_user_supplied_version, svn_revision); + } + else { + qWarning("MplayerVersion::isMplayerAtLeast: there's no parsed version nor user supplied version!"); + return isMplayerAtLeast(pref->mplayer_detected_version, svn_revision); + } +} + +QString MplayerVersion::toString(int svn_revision) { + QString version; + + switch (svn_revision) { + case MPLAYER_1_0_RC1_SVN: version = QString("1.0rc1"); break; + case MPLAYER_1_0_RC2_SVN: version = QString("1.0rc2"); break; + case MPLAYER_1_0_RC3_SVN: version = QString("1.0rc3"); break; + default : version = QString("SVN r%1").arg(svn_revision); + } + + return version; +} + |