-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMusicPlayerLogic.cpp
More file actions
74 lines (59 loc) · 1.85 KB
/
MusicPlayerLogic.cpp
File metadata and controls
74 lines (59 loc) · 1.85 KB
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
#include "MusicPlayerLogic.h"
#include "Constants.h"
#include <QDir>
#include <QFileInfo>
#include <QRandomGenerator>
#include <algorithm>
MusicPlayerLogic::MusicPlayerLogic()
: musicFolder(DEFAULT_PATH) {
loadMusicFiles();
}
/*
* The randomization algoritm's functions
*/
void MusicPlayerLogic::setMusicFolder(const QString &folder) {
musicFolder = folder;
loadMusicFiles();
history.clear();
}
QString MusicPlayerLogic::getMusicFolder() const {
return musicFolder;
}
QStringList MusicPlayerLogic::getMusicFiles() const {
return musicFiles;
}
bool MusicPlayerLogic::loadMusicFiles() {
QDir dir(musicFolder);
musicFiles = dir.entryList(SUPPORTED_FORMATS, QDir::Files);
return !musicFiles.isEmpty();
}
QString MusicPlayerLogic::chooseNextFile() {
cleanHistory();
QStringList recentFiles;
for (const auto &t : history)
recentFiles.append(QFileInfo(t.filePath).fileName());
QStringList candidates;
for (const QString &f : musicFiles)
if (!recentFiles.contains(f))
candidates.append(f);
if (candidates.isEmpty()) {
history.clear();
candidates = musicFiles;
}
if (candidates.isEmpty())
return QString();
int idx = QRandomGenerator::global()->bounded(candidates.size());
return QDir(musicFolder).filePath(candidates.at(idx));
}
void MusicPlayerLogic::addToHistory(const QString &filePath) {
history.append({filePath, QDateTime::currentDateTime()});
cleanHistory();
}
void MusicPlayerLogic::cleanHistory() {
QDateTime now = QDateTime::currentDateTime();
history.erase(std::remove_if(history.begin(), history.end(),
[now](const PlayedTrack &t){
return t.playedAt.msecsTo(now) > 10 * 60 * 1000;
}),
history.end());
}