mirror of
https://github.com/YACReader/yacreader
synced 2025-05-27 10:50:27 -04:00
171 lines
3.8 KiB
C++
171 lines
3.8 KiB
C++
#include "bookmarks.h"
|
|
#include <QFile>
|
|
#include <QDataStream>
|
|
#include <QCoreApplication>
|
|
#include <QFileInfo>
|
|
|
|
#include <QList>
|
|
|
|
#include "yacreader_global.h"
|
|
|
|
Bookmarks::Bookmarks()
|
|
: lastPageIndex(0)
|
|
{
|
|
list.load();
|
|
}
|
|
void Bookmarks::setLastPage(int index, const QImage &page)
|
|
{
|
|
lastPageIndex = index;
|
|
lastPage = page;
|
|
}
|
|
void Bookmarks::setBookmark(int index, const QImage &page)
|
|
{
|
|
if (!bookmarks.contains(index)) {
|
|
bookmarks.insert(index, page);
|
|
latestBookmarks.push_front(index);
|
|
if (latestBookmarks.count() > 3) {
|
|
bookmarks.remove(latestBookmarks.back());
|
|
latestBookmarks.pop_back();
|
|
}
|
|
} else // udate de pixmap;
|
|
{
|
|
bookmarks[index] = page;
|
|
}
|
|
}
|
|
|
|
void Bookmarks::removeBookmark(int index)
|
|
{
|
|
bookmarks.remove(index);
|
|
}
|
|
|
|
QList<int> Bookmarks::getBookmarkPages() const
|
|
{
|
|
return bookmarks.keys();
|
|
}
|
|
|
|
QImage Bookmarks::getBookmarkPixmap(int page) const
|
|
{
|
|
return bookmarks.value(page);
|
|
}
|
|
|
|
QImage Bookmarks::getLastPagePixmap() const
|
|
{
|
|
return lastPage;
|
|
}
|
|
|
|
int Bookmarks::getLastPage() const
|
|
{
|
|
return lastPageIndex;
|
|
}
|
|
|
|
bool Bookmarks::isBookmark(int page)
|
|
{
|
|
return bookmarks.contains(page);
|
|
}
|
|
|
|
bool Bookmarks::imageLoaded(int page)
|
|
{
|
|
return !bookmarks.value(page).isNull();
|
|
}
|
|
|
|
void Bookmarks::newComic(const QString &path)
|
|
{
|
|
QFileInfo f(path);
|
|
QString comicID = f.fileName().toLower() + QString::number(f.size());
|
|
clear();
|
|
BookmarksList::Bookmark b = list.get(comicID);
|
|
comicPath = comicID;
|
|
lastPageIndex = b.lastPage;
|
|
latestBookmarks = b.bookmarks;
|
|
for (int i = 0; i < latestBookmarks.count(); i++)
|
|
bookmarks.insert(latestBookmarks.at(i), QImage());
|
|
added = b.added;
|
|
}
|
|
|
|
void Bookmarks::clear()
|
|
{
|
|
bookmarks.clear();
|
|
latestBookmarks.clear();
|
|
lastPageIndex = 0;
|
|
lastPage = QImage();
|
|
}
|
|
|
|
bool Bookmarks::load(const QList<int> &bookmarkIndexes, int lastPage)
|
|
{
|
|
lastPageIndex = lastPage;
|
|
foreach (int b, bookmarkIndexes)
|
|
if (b != -1) {
|
|
latestBookmarks.push_back(b);
|
|
bookmarks.insert(b, QImage());
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
void Bookmarks::save()
|
|
{
|
|
BookmarksList::Bookmark b;
|
|
b.lastPage = lastPageIndex;
|
|
b.bookmarks = getBookmarkPages();
|
|
|
|
BookmarksList::Bookmark previousBookmarks;
|
|
bool updated = ((previousBookmarks.lastPage != b.lastPage) || (previousBookmarks.bookmarks != b.bookmarks));
|
|
|
|
if (b.added.isNull() || updated)
|
|
b.added = QDateTime::currentDateTime();
|
|
list.add(comicPath, b);
|
|
list.save();
|
|
}
|
|
//-----------------------------------------------------------------------------
|
|
void BookmarksList::load()
|
|
{
|
|
QFile f(YACReader::getSettingsPath() + "/bookmarks.yacr");
|
|
try {
|
|
if (f.open(QIODevice::ReadOnly)) {
|
|
QDataStream dataS(&f);
|
|
dataS >> list;
|
|
f.close();
|
|
}
|
|
} catch (const std::exception &e) {
|
|
f.close();
|
|
|
|
f.remove();
|
|
}
|
|
}
|
|
|
|
void BookmarksList::save()
|
|
{
|
|
QFile f(YACReader::getSettingsPath() + "/bookmarks.yacr");
|
|
f.open(QIODevice::WriteOnly);
|
|
QDataStream dataS(&f);
|
|
if (list.count() > numMaxBookmarks)
|
|
deleteOldest(list.count() - numMaxBookmarks);
|
|
dataS << list;
|
|
f.close();
|
|
}
|
|
|
|
void BookmarksList::deleteOldest(int num)
|
|
{
|
|
Q_UNUSED(num)
|
|
QString comic;
|
|
auto date = QDate().endOfDay();
|
|
for (QMap<QString, Bookmark>::const_iterator itr = list.constBegin(); itr != list.constEnd(); itr++) {
|
|
if (itr->added < date) {
|
|
comic = itr.key();
|
|
date = itr->added;
|
|
}
|
|
}
|
|
list.remove(comic);
|
|
}
|
|
|
|
void BookmarksList::add(const QString &comicID, const Bookmark &b)
|
|
{
|
|
list.insert(comicID, b);
|
|
}
|
|
|
|
BookmarksList::Bookmark BookmarksList::get(const QString &comicID)
|
|
{
|
|
// if(list.contains(comicID)
|
|
return list.value(comicID);
|
|
}
|