source: smplayer/trunk/src/mplayerversion.cpp@ 148

Last change on this file since 148 was 142, checked in by Silvan Scherrer, 12 years ago

SMPlayer: update trunk to 0.8.5

  • Property svn:eol-style set to LF
File size: 7.0 KB
Line 
1/* smplayer, GUI front-end for mplayer.
2 Copyright (C) 2006-2013 Ricardo Villalba <rvm@users.sourceforge.net>
3
4 This program is free software; you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation; either version 2 of the License, or
7 (at your option) any later version.
8
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
13
14 You should have received a copy of the GNU General Public License
15 along with this program; if not, write to the Free Software
16 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17*/
18
19#include "mplayerversion.h"
20#include "global.h"
21#include "preferences.h"
22
23#include <QRegExp>
24
25using namespace Global;
26
27QString MplayerVersion::mplayer2_version;
28bool MplayerVersion::is_mplayer2 = false;
29
30int MplayerVersion::mplayerVersion(QString string) {
31 //static QRegExp rx_mplayer_revision("^MPlayer (\\S+)-SVN-r(\\d+)-(.*)");
32 static QRegExp rx_mplayer_revision("^MPlayer (.*)[-\\.]r(\\d+)(.*)");
33 static QRegExp rx_mplayer_version("^MPlayer ([a-z,0-9,.]+)-(.*)");
34 static QRegExp rx_mplayer_git("^MPlayer GIT(.*)", Qt::CaseInsensitive);
35 static QRegExp rx_mplayer_version_final("1.0rc([0-9])");
36 static QRegExp rx_mplayer2_version("^MPlayer2 (.*) \\(C\\).*", Qt::CaseInsensitive);
37#ifndef Q_OS_WIN
38 static QRegExp rx_mplayer_version_ubuntu("^MPlayer (\\d):(\\d)\\.(\\d)~(.*)");
39 static QRegExp rx_mplayer_revision_ubuntu("^MPlayer svn r(\\d+) (.*)");
40 static QRegExp rx_mplayer_version_mandriva("^MPlayer ([a-z0-9\\.]+)-\\d+\\.([a-z0-9]+)\\.[\\d\\.]+[a-z]+[\\d\\.]+-(.*)");
41#endif
42
43 int mplayer_svn = 0;
44 mplayer2_version = QString::null;
45 is_mplayer2 = false;
46
47#ifdef Q_OS_WIN
48 // Hack to recognize mplayer 1.0rc2 from CCCP:
49 if (string.startsWith("MPlayer CCCP ")) {
50 string.remove("CCCP ");
51 qDebug("MplayerVersion::mplayerVersion: removing CCCP: '%s'", string.toUtf8().data());
52 }
53#else
54 // Hack to recognize mplayer 1.0rc1 from Ubuntu:
55 if (rx_mplayer_version_ubuntu.indexIn(string) > -1) {
56 int v1 = rx_mplayer_version_ubuntu.cap(2).toInt();
57 int v2 = rx_mplayer_version_ubuntu.cap(3).toInt();
58 QString rest = rx_mplayer_version_ubuntu.cap(4);
59 //qDebug("%d - %d - %d", rx_mplayer_version_ubuntu.cap(1).toInt(), v1 , v2);
60 string = QString("MPlayer %1.%2%3").arg(v1).arg(v2).arg(rest);
61 qDebug("MplayerVersion::mplayerVersion: line converted to '%s'", string.toUtf8().data());
62 }
63 else
64 if (rx_mplayer_revision_ubuntu.indexIn(string) > -1) {
65 int svn = rx_mplayer_revision_ubuntu.cap(1).toInt();
66 QString rest = rx_mplayer_revision_ubuntu.cap(2);
67 string = QString("MPlayer SVN-r%1-%2").arg(svn).arg(rest);
68 qDebug("MplayerVersion::mplayerVersion: line converted to '%s'", string.toUtf8().data());
69 }
70
71 // Hack to recognize mplayer version from Mandriva:
72 if (rx_mplayer_version_mandriva.indexIn(string) > -1) {
73 QString v1 = rx_mplayer_version_mandriva.cap(1);
74 QString v2 = rx_mplayer_version_mandriva.cap(2);
75 QString rest = rx_mplayer_version_mandriva.cap(3);
76 string = QString("MPlayer %1%2-%3").arg(v1).arg(v2).arg(rest);
77 qDebug("MplayerVersion::mplayerVersion: line converted to '%s'", string.toUtf8().data());
78 }
79#endif
80
81 if (rx_mplayer_git.indexIn(string) > -1) {
82 qDebug("MplayerVersion::mplayerVersion: MPlayer from git. Assuming >= 1.0rc3");
83 mplayer_svn = MPLAYER_1_0_RC3_SVN;
84 }
85 else
86 if (rx_mplayer_revision.indexIn(string) > -1) {
87 mplayer_svn = rx_mplayer_revision.cap(2).toInt();
88 qDebug("MplayerVersion::mplayerVersion: MPlayer SVN revision found: %d", mplayer_svn);
89 }
90 else
91 if (rx_mplayer_version.indexIn(string) > -1) {
92 QString version = rx_mplayer_version.cap(1);
93 qDebug("MplayerVersion::mplayerVersion: MPlayer version found: %s", version.toUtf8().data());
94 mplayer_svn = 0;
95
96 if (version == "1.1") mplayer_svn = MPLAYER_1_1;
97 else
98 if (version == "1.0rc4") mplayer_svn = MPLAYER_1_0_RC4_SVN;
99 else
100 if (version == "1.0rc3") mplayer_svn = MPLAYER_1_0_RC3_SVN;
101 else
102 if (version == "1.0rc2") mplayer_svn = MPLAYER_1_0_RC2_SVN;
103 else
104 if (version == "1.0rc1") mplayer_svn = MPLAYER_1_0_RC1_SVN;
105 else
106 if(rx_mplayer_version_final.indexIn(version) > -1 && rx_mplayer_version_final.cap(1).toInt() > 3)
107 mplayer_svn = MPLAYER_1_0_RC3_SVN; //version is > 1.0rc3, so treat as 1.0rc3 since support for later versions is not yet implemented
108
109 else
110 qWarning("MplayerVersion::mplayerVersion: unknown MPlayer version");
111
112 }
113 else
114 if (rx_mplayer2_version.indexIn(string) > -1) {
115 mplayer2_version = rx_mplayer2_version.cap(1);
116 qDebug("MplayerVersion::mplayerVersion: MPlayer2 version found: %s", mplayer2_version.toUtf8().data());
117 is_mplayer2 = true;
118 mplayer_svn = MPLAYER_1_0_RC4_SVN; // simulates mplayer 1.0rc4
119 }
120
121 if (pref) {
122 pref->mplayer_detected_version = mplayer_svn;
123 pref->mplayer_is_mplayer2 = is_mplayer2;
124 pref->mplayer2_detected_version = mplayer2_version;
125 }
126
127 return mplayer_svn;
128}
129
130bool MplayerVersion::isMplayerAtLeast(int mplayer_svn, int svn_revision) {
131 qDebug("MplayerVersion::isMplayerAtLeast: comparing %d with %d", svn_revision, mplayer_svn);
132
133 if (mplayer_svn == -1) {
134 qWarning("MplayerVersion::isMplayerAtLeast: no version found!");
135 }
136 else
137 if (mplayer_svn == 0) {
138 qWarning("MplayerVersion::isMplayerAtLeast: version couldn't be parsed!");
139 }
140
141 if (mplayer_svn <= 0) {
142 qWarning("MplayerVersion::isMplayerAtLeast: assuming that the mplayer version is less than %d", svn_revision);
143 return false;
144 }
145
146 return (mplayer_svn >= svn_revision);
147}
148
149bool MplayerVersion::isMplayerAtLeast(int svn_revision) {
150 if (pref->mplayer_detected_version >= MPLAYER_1_0_RC1_SVN) {
151 // SVN version seems valid
152 if (pref->mplayer_user_supplied_version != -1) {
153 qDebug("MplayerVersion::isMplayerAtLeast: using the parsed svn version from mplayer output");
154 qDebug("MplayerVersion::isMplayerAtLeast: and clearing the previously user supplied version");
155 pref->mplayer_user_supplied_version = -1;
156 }
157 return isMplayerAtLeast(pref->mplayer_detected_version, svn_revision);
158 }
159 else
160 if (pref->mplayer_user_supplied_version != -1) {
161 qDebug("MplayerVersion::isMplayerAtLeast: no parsed version, using user supplied version");
162 return isMplayerAtLeast(pref->mplayer_user_supplied_version, svn_revision);
163 }
164 else {
165 qWarning("MplayerVersion::isMplayerAtLeast: there's no parsed version nor user supplied version!");
166 return isMplayerAtLeast(pref->mplayer_detected_version, svn_revision);
167 }
168}
169
170QString MplayerVersion::toString(int svn_revision) {
171 QString version;
172
173 switch (svn_revision) {
174 case MPLAYER_1_0_RC1_SVN: version = QString("1.0rc1"); break;
175 case MPLAYER_1_0_RC2_SVN: version = QString("1.0rc2"); break;
176 case MPLAYER_1_0_RC3_SVN: version = QString("1.0rc3"); break;
177 case MPLAYER_1_0_RC4_SVN: version = QString("1.0rc4"); break;
178 case MPLAYER_1_1: version = QString("1.1"); break;
179 default : version = QString("SVN r%1").arg(svn_revision);
180 }
181
182 return version;
183}
184
Note: See TracBrowser for help on using the repository browser.