1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
#include "mainwindow.h"
#include <QApplication>
#include <QStatusBar>
#include <QDir>
#include <QDesktopServices>
#include "config.h"
#include "server.h"
#include "library.h"
#include "libraryinitthread.h"
#include "malclient.h"
#include "mplayer.h"
#include "mpv.h"
#include "omxplayer.h"
#include "metadataparseravconv.h"
#include "thumbnailcreatoravconv.h"
#include "transmissionclient.h"
#include "snapshotwallpapergenerator.h"
#include "nyaarss.h"
#include <string.h>
#include <curl/curl.h>
#include <locale.h>
int main(int argc, char *argv[]) {
// TODO move argument parsing partly back here, since it calls exit(0)
BaseConfig config(argc, argv);
QApplication a(argc, argv, !config.getNoGui());
curl_global_init(CURL_GLOBAL_SSL);
bool noInitFail = true;
Library library(config.libraryPath());
noInitFail *= library.initDirectory();
if (!noInitFail) {
return 2;
}
MainWindow w(library);
if (!config.getNoGui()) {
if (config.getFullScreen()) {
w.showFullScreen();
} else {
w.show();
}
}
VideoPlayer* player;
// omx support is dead
// if (config.omxPlayerIsInstalled()) {
// player = new Omxplayer(library, config);
// } else {
// player = new Mplayer(library, config, config.getMplayerConfigConstRef());
// }
// numeric locale c is required by mpv to do anything
setlocale(LC_NUMERIC, "C");
#ifdef USE_MPV
player = new Mpv(library, config);
#else
// this requires mplayer2
// mplayer2 is no longer in development and packages for distros are dying
player = new Mplayer(library, config, config.getMplayerConfigConstRef());
#endif
MetaDataParserAvconv metaDataParser(config.getAvconvConfigConstRef());
ThumbnailCreatorAvconv thumbnailCreator(config.getAvconvConfigConstRef());
player->setMetaDataParser(&metaDataParser);
player->setThumbnailCreator(&thumbnailCreator);
library.setMetaDataParser(&metaDataParser);
library.addWallpaperDownloader(new SnapshotWallpaperGenerator::Client(metaDataParser, thumbnailCreator));
// TODO move into the thread
const RssConfig& rssConfig = config.getRssConfigConstRef();
TransmissionClient transmission;
NyaaRss::Client nyaaClient(transmission, library, rssConfig);
TorrentRss::Thread rssThread(nyaaClient);
rssThread.start(QThread::LowestPriority);
//nyaaClient.moveToThread(&rssThread);
nyaaClient.connectLibrary();
#ifdef SERVER_PUBLIC_ROOT
QDir publicDir = QDir(SERVER_PUBLIC_ROOT);
#else
QDir publicDir = QDir::current();
publicDir.cd("public");
#endif
qDebug() << "server dir" << publicDir.absoluteFilePath(".");
Server s(publicDir.path(), w, library, player);
const int port = s.start(config.serverPort());
if (config.getAutoOpenBrowser()) {
QString url(QString("http://localhost:%1").arg(port));
QDesktopServices::openUrl(url);
}
library.initWallpaperDownloaders();
library.watchFilesystem();
library.initOnlineSync(config);
LibraryInitThread initThread(library, config, QThread::currentThread());
initThread.start(QThread::HighestPriority);
w.setPage("MainPage", QString("Launched on port %1").arg(port));
int returnCode = a.exec();
library.write(); // write before exit
rssThread.toldToStop = true;
rssThread.wait();
return returnCode;
}