source: smplayer/vendor/current/src/inforeader.cpp

Last change on this file was 186, checked in by Silvan Scherrer, 8 years ago

SMPlayer: update vendor to 17.1.0

File size: 6.4 KB
Line 
1/* smplayer, GUI front-end for mplayer.
2 Copyright (C) 2006-2017 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 "inforeader.h"
20#include "global.h"
21#include "preferences.h"
22#include "playerprocess.h"
23#include "paths.h"
24#include <QFileInfo>
25#include <QDateTime>
26#include <QSettings>
27#include <QDebug>
28
29#ifdef MPV_SUPPORT
30#include "inforeadermpv.h"
31#endif
32
33#ifdef MPLAYER_SUPPORT
34#include "inforeadermplayer.h"
35#endif
36
37#define INFOREADER_SAVE_VERSION 2
38
39using namespace Global;
40
41InfoReader * InfoReader::static_obj = 0;
42
43InfoReader * InfoReader::obj(const QString & mplayer_bin) {
44 QString player_bin = mplayer_bin;
45 if (player_bin.isEmpty()) {
46 player_bin = pref->mplayer_bin;
47 }
48 if (!static_obj) {
49 static_obj = new InfoReader(player_bin);
50 } else {
51 static_obj->setPlayerBin(player_bin);
52 }
53 return static_obj;
54}
55
56InfoReader::InfoReader(QString mplayer_bin, QObject * parent)
57 : QObject(parent)
58 , mplayer_svn(0)
59 , is_mplayer2(false)
60 , is_mpv(false)
61{
62 setPlayerBin(mplayer_bin);
63}
64
65InfoReader::~InfoReader() {
66}
67
68void InfoReader::setPlayerBin(const QString & bin) {
69 mplayerbin = bin;
70
71 QFileInfo fi(mplayerbin);
72 if (fi.exists() && fi.isExecutable() && !fi.isDir()) {
73 // mplayerbin = fi.absoluteFilePath();
74 }
75#ifdef Q_OS_LINUX
76 else {
77 QString fplayer = Helper::findExecutable(mplayerbin);
78 qDebug() << "InfoReader::setPlayerBin: fplayer:" << fplayer;
79 if (!fplayer.isEmpty()) mplayerbin = fplayer;
80 }
81#endif
82 qDebug() << "InfoReader::setPlayerBin: mplayerbin:" << mplayerbin;
83}
84
85void InfoReader::getInfo() {
86 QString inifile = Paths::configPath() + "/player_info.ini";
87 QSettings set(inifile, QSettings::IniFormat);
88
89 QString version_group = "version_" + QString::number(INFOREADER_SAVE_VERSION);
90
91 QString sname = mplayerbin;
92 sname = sname.replace("/", "_").replace("\\", "_").replace(".", "_").replace(":", "_");
93 QFileInfo fi(mplayerbin);
94 if (fi.exists()) {
95 sname += "_" + QString::number(fi.size());
96
97 qDebug() << "InfoReader::getInfo: sname:" << sname;
98
99 // Check if we already have info about the player in the ini file
100 bool got_info = false;
101 set.beginGroup(version_group +"/"+ sname);
102 if (set.value("size", -1).toInt() == fi.size()) {
103 got_info = true;
104 vo_list = convertListToInfoList(set.value("vo_list").toStringList());
105 ao_list = convertListToInfoList(set.value("ao_list").toStringList());
106 #if ALLOW_DEMUXER_CODEC_CHANGE
107 demuxer_list = convertListToInfoList(set.value("demuxer_list").toStringList());
108 vc_list = convertListToInfoList(set.value("vc_list").toStringList());
109 ac_list = convertListToInfoList(set.value("ac_list").toStringList());
110 #endif
111 vf_list = set.value("vf_list").toStringList();
112 option_list = set.value("option_list").toStringList();
113 //qDebug() << "InfoReader::getInfo: option_list:" << option_list;
114 mplayer_svn = set.value("mplayer_svn").toInt();
115 mpv_version = set.value("mpv_version").toString();
116 mplayer2_version = set.value("mplayer2_version").toString();
117 is_mplayer2 = set.value("is_mplayer2").toBool();
118 is_mpv = set.value("is_mpv").toBool();
119 }
120 set.endGroup();
121 if (got_info) {
122 qDebug() << "InfoReader::getInfo: loaded info from" << inifile;
123 return;
124 }
125 }
126
127 if (PlayerID::player(mplayerbin) == PlayerID::MPV) {
128 #ifdef MPV_SUPPORT
129 qDebug("InfoReader::getInfo: mpv");
130 InfoReaderMPV ir(mplayerbin, this);
131 ir.getInfo();
132 vo_list = ir.voList();
133 ao_list = ir.aoList();
134 #if ALLOW_DEMUXER_CODEC_CHANGE
135 demuxer_list = ir.demuxerList();
136 vc_list = ir.vcList();
137 ac_list = ir.acList();
138 #endif
139 vf_list = ir.vfList();
140 option_list = ir.optionList();
141 mplayer_svn = ir.mplayerSVN();
142 mpv_version = ir.mpvVersion();
143 mplayer2_version = "";
144 is_mplayer2 = false;
145 is_mpv = true;
146 #endif
147 } else {
148 #ifdef MPLAYER_SUPPORT
149 qDebug("InfoReader::getInfo: mplayer");
150 InfoReaderMplayer ir(mplayerbin, this);
151 ir.getInfo();
152 vo_list = ir.voList();
153 ao_list = ir.aoList();
154 #if ALLOW_DEMUXER_CODEC_CHANGE
155 demuxer_list = ir.demuxerList();
156 vc_list = ir.vcList();
157 ac_list = ir.acList();
158 #endif
159 vf_list.clear();
160 option_list.clear();
161 mplayer_svn = ir.mplayerSVN();
162 mpv_version = "";
163 mplayer2_version = ir.mplayer2Version();
164 is_mplayer2 = ir.isMplayer2();
165 is_mpv = false;
166 #endif
167 }
168
169 if (fi.exists()) {
170 qDebug() << "InfoReader::getInfo: saving info to" << inifile;
171 set.beginGroup(version_group +"/"+ sname);
172 set.setValue("size", fi.size());
173 set.setValue("date", fi.lastModified());
174 set.setValue("vo_list", convertInfoListToList(vo_list));
175 set.setValue("ao_list", convertInfoListToList(ao_list));
176 #if ALLOW_DEMUXER_CODEC_CHANGE
177 set.setValue("demuxer_list", convertInfoListToList(demuxer_list));
178 set.setValue("vc_list", convertInfoListToList(vc_list));
179 set.setValue("ac_list", convertInfoListToList(ac_list));
180 #endif
181 set.setValue("vf_list", vf_list);
182 set.setValue("option_list", option_list);
183 set.setValue("mplayer_svn", mplayer_svn);
184 set.setValue("mpv_version", mpv_version);
185 set.setValue("mplayer2_version", mplayer2_version);
186 set.setValue("is_mplayer2", is_mplayer2);
187 set.setValue("is_mpv", is_mpv);
188 set.endGroup();
189 }
190}
191
192QString InfoReader::playerVersion() {
193 QString player = QString("MPlayer SVN r%1").arg(mplayer_svn);
194
195 if (is_mplayer2) {
196 player = "MPlayer2 " + mplayer2_version;
197 }
198 else
199 if (is_mpv) {
200 player = "MPV " + mpv_version;
201 }
202
203 return player;
204}
205
206QStringList InfoReader::convertInfoListToList(InfoList l) {
207 QStringList r;
208 for (int n = 0; n < l.count(); n++) {
209 r << l[n].name() + "|" + l[n].desc();
210 }
211 return r;
212}
213
214InfoList InfoReader::convertListToInfoList(QStringList l) {
215 InfoList r;
216 for (int n = 0; n < l.count(); n++) {
217 QStringList s = l[n].split("|");
218 if (s.count() >= 2) {
219 r.append(InfoData(s[0], s[1]));
220 }
221 }
222 return r;
223}
224
225#include "moc_inforeader.cpp"
Note: See TracBrowser for help on using the repository browser.