forked from royqh1979/RedPanda-CPP
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathvisithistorymanager.h
56 lines (47 loc) · 1.51 KB
/
visithistorymanager.h
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
#ifndef VISITHISTORYMANAGER_H
#define VISITHISTORYMANAGER_H
#include <QJsonArray>
#include <QList>
#include <QString>
#include <memory>
struct VisitRecord {
QString filename;
qint64 timestamp;
};
using PVisitRecord = std::shared_ptr<VisitRecord>;
struct VisitHistory{
qint64 timestamp;
QList<PVisitRecord> files;
QList<PVisitRecord> projects;
};
using PVisitHistory = std::shared_ptr<VisitHistory>;
class VisitHistoryManager
{
public:
VisitHistoryManager(const QString& filename);
const QList<PVisitRecord> &files() const;
const QList<PVisitRecord> &projects() const;
void clearFiles();
void clearProjects();
bool addFile(const QString& filename);
void removeFile(const QString& filename);
bool addProject(const QString& filename);
void removeProject(const QString& filename);
void save();
void load();
private:
PVisitHistory doLoad(const QString& filename, qint64 criteriaTime);
QList<PVisitRecord> fromJson(const QJsonArray &array, qint64 criteriaTime);
void mergeRead(QList<PVisitRecord>& target, const QList<PVisitRecord>& readed);
QJsonArray toJson(const QList<PVisitRecord>& list);
bool doAdd(QList<PVisitRecord> &list, const QString& filename, int maxCount);
void doRemove(QList<PVisitRecord> &list, const QString& filename);
private:
QList<PVisitRecord> mFiles;
QList<PVisitRecord> mProjects;
qint64 mLastLoadtime;
QString mSaveFilename;
int mMaxFileCount;
int mMaxProjectCount;
};
#endif // VISITHISTORYMANAGER_H