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 "Controller.h"
#include <QDir>
#include <QFileInfo>
#include <QDirIterator>
Controller::Controller(QObject *parent) : QObject(parent),
#ifdef ENABLE_RIPPING
m_ripTask(this),
#endif
m_encodeTask(this),
m_uploadTask(this)
{
#ifdef ENABLE_RIPPING
connect(&m_ripTask, SIGNAL(completed(bool)), this, SLOT(runTasksIfTrue(bool)));
#endif
connect(&m_encodeTask, SIGNAL(completed(bool)), this, SLOT(runTasksIfTrue(bool)));
connect(&m_uploadTask, SIGNAL(completed(bool)), this, SLOT(runTasksIfTrue(bool)));
}
void Controller::runTasks()
{
foreach(Movie* movie, m_movies)
runTasks(movie);
}
void Controller::runTasksIfTrue(bool runThem)
{
if (runThem)
runTasks();
}
void Controller::runTasks(Movie *movie)
{
#ifdef ENABLE_RIPPING
if (!m_ripTask.isRunning() && m_ripTask.canRunTask(movie))
m_ripTask.runTask(movie);
#endif
if (!m_encodeTask.isRunning() && m_encodeTask.canRunTask(movie))
m_encodeTask.runTask(movie);
if (!m_uploadTask.isRunning() && m_uploadTask.canRunTask(movie))
m_uploadTask.runTask(movie);
}
bool Controller::addMovie(Movie *movie)
{
foreach (Movie *existing, m_movies) {
if (existing->title() == movie->title()) {
delete movie;
return false;
}
}
connect(movie, SIGNAL(trackSet()), this, SLOT(runTasks()));
m_movies.append(movie);
movie->setParent(this);
runTasks(movie);
return true;
}
Movie* Controller::addISO(const QString &fileName)
{
Movie *movie = new Movie(Movie::titleFromISOName(QFileInfo(fileName).baseName()), fileName, this);
if (addMovie(movie))
return movie;
else
return 0;
}
QLinkedList<Movie*> Controller::addRecursiveISOs(const QString &dirName)
{
QLinkedList<Movie*> movies;
QDirIterator dir(dirName, QStringList() << "*.iso" << "*.ISO", QDir::Files | QDir::Readable, QDirIterator::Subdirectories | QDirIterator::FollowSymlinks);
while (dir.hasNext()) {
Movie *next = addISO(dir.next());
if (next)
movies << next;
}
return movies;
}
Movie* Controller::movieForTitle(const QString &title)
{
foreach(Movie* movie, m_movies)
if (movie->title() == title)
return movie;
return 0;
}
bool Controller::removeMovie(Movie *movie)
{
if (!m_movies.removeOne(movie))
return false;
disconnect(movie, 0, 0, 0);
#ifdef ENABLE_RIPPING
if (m_ripTask.currentMovie() == movie)
m_ripTask.terminate();
#endif
if (m_encodeTask.currentMovie() == movie)
m_encodeTask.terminate();
if (m_uploadTask.currentMovie() == movie)
m_uploadTask.terminate();
runTasks();
movie->deleteLater();
return true;
}
QLinkedList<Movie*> Controller::movies() const
{
return m_movies;
}
#ifdef ENABLE_RIPPING
RipTask* Controller::ripTask() const
{
return const_cast<RipTask*>(&m_ripTask);
}
#endif
EncodeTask* Controller::encodeTask() const
{
return const_cast<EncodeTask*>(&m_encodeTask);
}
UploadTask* Controller::uploadTask() const
{
return const_cast<UploadTask*>(&m_uploadTask);
}
|