Skip to content

Commit 809e644

Browse files
authored
Merge pull request #491 from YACReader/develop
9.16.2
2 parents 446f63b + 16e1be1 commit 809e644

15 files changed

Lines changed: 111 additions & 45 deletions

.github/workflows/build.yml

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -321,7 +321,7 @@ jobs:
321321
artifact-configuration-slug: 'zipped-files'
322322
github-artifact-id: ${{ steps.upload_executables.outputs.artifact-id }}
323323
wait-for-completion: true
324-
wait-for-completion-timeout-in-seconds: "3600"
324+
wait-for-completion-timeout-in-seconds: "7200"
325325
output-artifact-directory: release64/signed
326326

327327
- name: Replace with signed executables
@@ -374,7 +374,7 @@ jobs:
374374
artifact-configuration-slug: 'zipped-files'
375375
github-artifact-id: ${{ steps.upload_unsigned.outputs.artifact-id }}
376376
wait-for-completion: true
377-
wait-for-completion-timeout-in-seconds: "3600"
377+
wait-for-completion-timeout-in-seconds: "7200"
378378
output-artifact-directory: ci/win/Output/signed
379379

380380
- name: Replace with signed installer
@@ -487,7 +487,7 @@ jobs:
487487
artifact-configuration-slug: 'zipped-files'
488488
github-artifact-id: ${{ steps.upload_executables.outputs.artifact-id }}
489489
wait-for-completion: true
490-
wait-for-completion-timeout-in-seconds: "3600"
490+
wait-for-completion-timeout-in-seconds: "7200"
491491
output-artifact-directory: release64/signed
492492

493493
- name: Replace with signed executables
@@ -540,7 +540,7 @@ jobs:
540540
artifact-configuration-slug: 'zipped-files'
541541
github-artifact-id: ${{ steps.upload_unsigned.outputs.artifact-id }}
542542
wait-for-completion: true
543-
wait-for-completion-timeout-in-seconds: "3600"
543+
wait-for-completion-timeout-in-seconds: "7200"
544544
output-artifact-directory: ci/win/Output/signed
545545

546546
- name: Replace with signed installer
@@ -636,6 +636,7 @@ jobs:
636636
artifact-configuration-slug: 'zipped-files'
637637
github-artifact-id: ${{ steps.upload_executables.outputs.artifact-id }}
638638
wait-for-completion: true
639+
wait-for-completion-timeout-in-seconds: "7200"
639640
output-artifact-directory: 'release/signed'
640641

641642
- name: Replace executables with signed versions
@@ -683,6 +684,7 @@ jobs:
683684
artifact-configuration-slug: 'zipped-files'
684685
github-artifact-id: ${{ steps.upload_unsigned.outputs.artifact-id }}
685686
wait-for-completion: true
687+
wait-for-completion-timeout-in-seconds: "7200"
686688
output-artifact-directory: 'ci/win/Output/signed'
687689

688690
- name: Replace with signed installer and cleanup
@@ -772,7 +774,7 @@ jobs:
772774
artifact-configuration-slug: 'zipped-files'
773775
github-artifact-id: ${{ steps.upload_executables.outputs.artifact-id }}
774776
wait-for-completion: true
775-
wait-for-completion-timeout-in-seconds: "3600"
777+
wait-for-completion-timeout-in-seconds: "7200"
776778
output-artifact-directory: release/signed
777779

778780
- name: Replace with signed executables
@@ -825,7 +827,7 @@ jobs:
825827
artifact-configuration-slug: 'zipped-files'
826828
github-artifact-id: ${{ steps.upload_unsigned.outputs.artifact-id }}
827829
wait-for-completion: true
828-
wait-for-completion-timeout-in-seconds: "3600"
830+
wait-for-completion-timeout-in-seconds: "7200"
829831
output-artifact-directory: ci/win/Output/signed
830832

831833
- name: Replace with signed installer

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,13 @@
22

33
Version counting is based on semantic versioning (Major.Feature.Patch)
44

5+
## 9.16.2
6+
7+
### YACReaderLibrary
8+
* New customizable User Agent string to use it with Comic Vine. It can be set in YACReaderLibrary.ini in the [ComicVine] section using the `COMIC_VINE_USER_AGENT` key.
9+
* Prevent crash when opening the folders context menu if a folder is not selected.
10+
* Fix crash when using the `Set type` menu on libraries.
11+
512
## 9.16.1
613

714
### YACReaderLibrary

YACReaderLibrary/comic_vine/comic_vine_all_volume_comics_retriever.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
#include <QJsonDocument>
88
#include <QJsonObject>
99

10-
ComicVineAllVolumeComicsRetriever::ComicVineAllVolumeComicsRetriever(const QString &volumeURLString, QObject *parent)
11-
: QObject(parent), volumeURLString(volumeURLString)
10+
ComicVineAllVolumeComicsRetriever::ComicVineAllVolumeComicsRetriever(const QString &volumeURLString, const QString &userAgent, QObject *parent)
11+
: QObject(parent), volumeURLString(volumeURLString), userAgent(userAgent)
1212
{
1313
}
1414

@@ -19,7 +19,7 @@ void ComicVineAllVolumeComicsRetriever::getAllVolumeComics()
1919

2020
void ComicVineAllVolumeComicsRetriever::getAllVolumeComics(int range)
2121
{
22-
HttpWorker *search = new HttpWorker(volumeURLString.arg(range));
22+
HttpWorker *search = new HttpWorker(volumeURLString.arg(range), userAgent);
2323
connect(search, &HttpWorker::dataReady, this, &ComicVineAllVolumeComicsRetriever::appendVolumeComicsInfo);
2424
connect(search, &HttpWorker::timeout, this, &ComicVineAllVolumeComicsRetriever::timeOut);
2525
connect(search, &HttpWorker::timeout, this, &ComicVineAllVolumeComicsRetriever::finished);

YACReaderLibrary/comic_vine/comic_vine_all_volume_comics_retriever.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ class ComicVineAllVolumeComicsRetriever : public QObject
77
{
88
Q_OBJECT
99
public:
10-
explicit ComicVineAllVolumeComicsRetriever(const QString &volumeURLString, QObject *parent = nullptr);
10+
explicit ComicVineAllVolumeComicsRetriever(const QString &volumeURLString, const QString &userAgent, QObject *parent = nullptr);
1111
void getAllVolumeComics();
1212

1313
protected:
@@ -21,6 +21,7 @@ protected slots:
2121

2222
protected:
2323
QString volumeURLString;
24+
QString userAgent;
2425
QList<QByteArray> jsonResponses;
2526

2627
QString consolidateJSON();

YACReaderLibrary/comic_vine/comic_vine_client.cpp

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ ComicVineClient::ComicVineClient(QObject *parent)
6060
settings = new QSettings(YACReader::getSettingsPath() + "/YACReaderLibrary.ini", QSettings::IniFormat); // TODO unificar la creación del fichero de config con el servidor
6161
settings->beginGroup("ComicVine");
6262
baseURL = settings->value(COMIC_VINE_BASE_URL, "https://comicvine.gamespot.com/api").toString();
63+
userAgent = settings->value(COMIC_VINE_USER_AGENT, DEFAULT_USER_AGENT).toString();
6364
}
6465

6566
ComicVineClient::~ComicVineClient()
@@ -70,7 +71,9 @@ ComicVineClient::~ComicVineClient()
7071
// CV_SEARCH
7172
void ComicVineClient::search(const QString &query, int page)
7273
{
73-
HttpWorker *search = new HttpWorker(QString(CV_SEARCH).replace(CV_WEB_ADDRESS, baseURL).replace(CV_API_KEY, settings->value(COMIC_VINE_API_KEY, CV_API_KEY_DEFAULT).toString()).arg(query).arg(page));
74+
HttpWorker *search = new HttpWorker(
75+
QString(CV_SEARCH).replace(CV_WEB_ADDRESS, baseURL).replace(CV_API_KEY, settings->value(COMIC_VINE_API_KEY, CV_API_KEY_DEFAULT).toString()).arg(query).arg(page),
76+
userAgent);
7477
connect(search, &HttpWorker::dataReady, this, &ComicVineClient::proccessVolumesSearchData);
7578
connect(search, &HttpWorker::timeout, this, &ComicVineClient::timeOut);
7679
connect(search, &QThread::finished, search, &QObject::deleteLater);
@@ -80,7 +83,9 @@ void ComicVineClient::search(const QString &query, int page)
8083
// CV_EXACT_VOLUME_SEARCH
8184
void ComicVineClient::searchExactVolume(const QString &query, int page)
8285
{
83-
HttpWorker *search = new HttpWorker(QString(CV_EXACT_VOLUME_SEARCH).replace(CV_WEB_ADDRESS, baseURL).replace(CV_API_KEY, settings->value(COMIC_VINE_API_KEY, CV_API_KEY_DEFAULT).toString()).arg(query).arg((page - 1) * 100));
86+
HttpWorker *search = new HttpWorker(
87+
QString(CV_EXACT_VOLUME_SEARCH).replace(CV_WEB_ADDRESS, baseURL).replace(CV_API_KEY, settings->value(COMIC_VINE_API_KEY, CV_API_KEY_DEFAULT).toString()).arg(query).arg((page - 1) * 100),
88+
userAgent);
8489
connect(search, &HttpWorker::dataReady, this, &ComicVineClient::proccessVolumesSearchData);
8590
connect(search, &HttpWorker::timeout, this, &ComicVineClient::timeOut);
8691
connect(search, &QThread::finished, search, &QObject::deleteLater);
@@ -119,7 +124,9 @@ void ComicVineClient::proccessComicDetailData(const QByteArray &data)
119124
// CV_SERIES_DETAIL
120125
void ComicVineClient::getSeriesDetail(const QString &id)
121126
{
122-
HttpWorker *search = new HttpWorker(QString(CV_SERIES_DETAIL).replace(CV_WEB_ADDRESS, baseURL).replace(CV_API_KEY, settings->value(COMIC_VINE_API_KEY, CV_API_KEY_DEFAULT).toString()).arg(id));
127+
HttpWorker *search = new HttpWorker(
128+
QString(CV_SERIES_DETAIL).replace(CV_WEB_ADDRESS, baseURL).replace(CV_API_KEY, settings->value(COMIC_VINE_API_KEY, CV_API_KEY_DEFAULT).toString()).arg(id),
129+
userAgent);
123130
connect(search, &HttpWorker::dataReady, this, &ComicVineClient::proccessSeriesDetailData);
124131
connect(search, &HttpWorker::timeout, this, &ComicVineClient::timeOut);
125132
connect(search, &QThread::finished, search, &QObject::deleteLater);
@@ -128,7 +135,7 @@ void ComicVineClient::getSeriesDetail(const QString &id)
128135

129136
void ComicVineClient::getSeriesCover(const QString &url)
130137
{
131-
auto search = new HttpWorker(url);
138+
auto search = new HttpWorker(url, userAgent);
132139
connect(search, &HttpWorker::dataReady, this, &ComicVineClient::seriesCover);
133140
connect(search, &HttpWorker::timeout, this, &ComicVineClient::timeOut); // TODO
134141
connect(search, &QThread::finished, search, &QObject::deleteLater);
@@ -138,7 +145,9 @@ void ComicVineClient::getSeriesCover(const QString &url)
138145
// CV_COMIC_IDS
139146
void ComicVineClient::getVolumeComicsInfo(const QString &idVolume, int page)
140147
{
141-
HttpWorker *search = new HttpWorker(QString(CV_COMICS_INFO).replace(CV_WEB_ADDRESS, baseURL).replace(CV_API_KEY, settings->value(COMIC_VINE_API_KEY, CV_API_KEY_DEFAULT).toString()).arg(idVolume).arg((page - 1) * 100));
148+
HttpWorker *search = new HttpWorker(
149+
QString(CV_COMICS_INFO).replace(CV_WEB_ADDRESS, baseURL).replace(CV_API_KEY, settings->value(COMIC_VINE_API_KEY, CV_API_KEY_DEFAULT).toString()).arg(idVolume).arg((page - 1) * 100),
150+
userAgent);
142151
connect(search, &HttpWorker::dataReady, this, &ComicVineClient::processVolumeComicsInfo);
143152
connect(search, &HttpWorker::timeout, this, &ComicVineClient::timeOut); // TODO
144153
connect(search, &QThread::finished, search, &QObject::deleteLater);
@@ -148,7 +157,7 @@ void ComicVineClient::getVolumeComicsInfo(const QString &idVolume, int page)
148157
void ComicVineClient::getAllVolumeComicsInfo(const QString &idVolume)
149158
{
150159
QString url = QString(CV_COMICS_INFO).replace(CV_WEB_ADDRESS, baseURL).replace(CV_API_KEY, settings->value(COMIC_VINE_API_KEY, CV_API_KEY_DEFAULT).toString()).arg(idVolume);
151-
auto comicsRetriever = new ComicVineAllVolumeComicsRetriever(url);
160+
auto comicsRetriever = new ComicVineAllVolumeComicsRetriever(url, userAgent);
152161

153162
connect(comicsRetriever, &ComicVineAllVolumeComicsRetriever::allVolumeComicsInfo, this, &ComicVineClient::volumeComicsInfo);
154163
connect(comicsRetriever, &ComicVineAllVolumeComicsRetriever::finished, this, &ComicVineClient::finished);
@@ -168,7 +177,9 @@ void ComicVineClient::getComicId(const QString &id, int comicNumber)
168177
// CV_COMIC_DETAIL
169178
QByteArray ComicVineClient::getComicDetail(const QString &id, bool &outError, bool &outTimeout)
170179
{
171-
HttpWorker *search = new HttpWorker(QString(CV_COMIC_DETAIL).replace(CV_WEB_ADDRESS, baseURL).replace(CV_API_KEY, settings->value(COMIC_VINE_API_KEY, CV_API_KEY_DEFAULT).toString()).arg(id));
180+
HttpWorker *search = new HttpWorker(
181+
QString(CV_COMIC_DETAIL).replace(CV_WEB_ADDRESS, baseURL).replace(CV_API_KEY, settings->value(COMIC_VINE_API_KEY, CV_API_KEY_DEFAULT).toString()).arg(id),
182+
userAgent);
172183

173184
// connect(search,SIGNAL(dataReady(const QByteArray &)),this,SLOT(proccessComicDetailData(const QByteArray &)));
174185
// connect(search,SIGNAL(timeout()),this,SIGNAL(timeOut()));
@@ -186,7 +197,9 @@ QByteArray ComicVineClient::getComicDetail(const QString &id, bool &outError, bo
186197
// CV_COMIC_DETAIL
187198
void ComicVineClient::getComicDetailAsync(const QString &id)
188199
{
189-
HttpWorker *search = new HttpWorker(QString(CV_COMIC_DETAIL).replace(CV_WEB_ADDRESS, baseURL).replace(CV_API_KEY, settings->value(COMIC_VINE_API_KEY, CV_API_KEY_DEFAULT).toString()).arg(id));
200+
HttpWorker *search = new HttpWorker(
201+
QString(CV_COMIC_DETAIL).replace(CV_WEB_ADDRESS, baseURL).replace(CV_API_KEY, settings->value(COMIC_VINE_API_KEY, CV_API_KEY_DEFAULT).toString()).arg(id),
202+
userAgent);
190203

191204
connect(search, &HttpWorker::dataReady, this, &ComicVineClient::proccessComicDetailData);
192205
connect(search, &HttpWorker::timeout, this, &ComicVineClient::timeOut);
@@ -197,7 +210,9 @@ void ComicVineClient::getComicDetailAsync(const QString &id)
197210
// CV_STORY_ARC_DETAIL
198211
QByteArray ComicVineClient::getStoryArcDetail(const QString &id, bool &outError, bool &outTimeout)
199212
{
200-
HttpWorker *search = new HttpWorker(QString(CV_STORY_ARC_DETAIL).replace(CV_WEB_ADDRESS, baseURL).replace(CV_API_KEY, settings->value(COMIC_VINE_API_KEY, CV_API_KEY_DEFAULT).toString()).arg(id));
213+
HttpWorker *search = new HttpWorker(
214+
QString(CV_STORY_ARC_DETAIL).replace(CV_WEB_ADDRESS, baseURL).replace(CV_API_KEY, settings->value(COMIC_VINE_API_KEY, CV_API_KEY_DEFAULT).toString()).arg(id),
215+
userAgent);
201216

202217
// connect(search,SIGNAL(dataReady(const QByteArray &)),this,SLOT(proccessComicDetailData(const QByteArray &)));
203218
// connect(search,SIGNAL(timeout()),this,SIGNAL(timeOut()));
@@ -214,7 +229,7 @@ QByteArray ComicVineClient::getStoryArcDetail(const QString &id, bool &outError,
214229

215230
void ComicVineClient::getComicCover(const QString &url)
216231
{
217-
auto search = new HttpWorker(url);
232+
auto search = new HttpWorker(url, userAgent);
218233
connect(search, &HttpWorker::dataReady, this, &ComicVineClient::comicCover);
219234
connect(search, &HttpWorker::timeout, this, &ComicVineClient::timeOut); // TODO
220235
connect(search, &QThread::finished, search, &QObject::deleteLater);

YACReaderLibrary/comic_vine/comic_vine_client.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,5 +45,6 @@ protected slots:
4545
protected:
4646
QSettings *settings;
4747
QString baseURL;
48+
QString userAgent;
4849
};
4950
#endif // COMIC_VINE_CLIENT_H

YACReaderLibrary/db/folder_model.cpp

Lines changed: 43 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,35 @@ void FolderModel::takeUpdatedChildrenInfo(FolderItem *parent, const QModelIndex
315315
}
316316
}
317317

318+
Folder FolderModel::folderFromItem(FolderItem *folderItem)
319+
{
320+
auto name = folderItem->data(FolderModel::Name).toString();
321+
auto parentItem = folderItem->parent();
322+
323+
QString path;
324+
if (parentItem == nullptr) {
325+
parentItem = rootItem;
326+
path = "/";
327+
} else {
328+
path = parentItem->data(Columns::Path).toString() + "/" + name;
329+
}
330+
331+
auto folder = Folder(folderItem->id,
332+
parentItem->id,
333+
name,
334+
path,
335+
folderItem->data(Columns::Completed).toBool(),
336+
folderItem->data(Columns::Finished).toBool(),
337+
folderItem->data(Columns::NumChildren).toInt(),
338+
folderItem->data(Columns::FirstChildHash).toString(),
339+
folderItem->data(Columns::CustomImage).toString(),
340+
folderItem->data(Columns::Type).value<YACReader::FileType>(),
341+
folderItem->data(Columns::Added).toLongLong(),
342+
folderItem->data(Columns::Updated).toLongLong());
343+
344+
return folder;
345+
}
346+
318347
void FolderModel::reload(const QModelIndex &index)
319348
{
320349
// TODO: reload just the content under index for better efficiency
@@ -790,25 +819,23 @@ FolderModel *FolderModel::getSubfoldersModel(const QModelIndex &mi)
790819
return model;
791820
}
792821

822+
Folder FolderModel::getRootFolder()
823+
{
824+
if (this->rootItem == nullptr) {
825+
return Folder();
826+
}
827+
828+
return folderFromItem(this->rootItem);
829+
}
830+
793831
Folder FolderModel::getFolder(const QModelIndex &mi)
794832
{
795-
auto folderItem = static_cast<FolderItem *>(mi.internalPointer());
796-
auto name = folderItem->data(FolderModel::Name).toString();
797-
auto parentItem = folderItem->parent();
798-
auto folder = Folder(folderItem->id,
799-
parentItem->id,
800-
name,
801-
folderItem->parent()->data(Columns::Path).toString() + "/" + name,
802-
folderItem->data(Columns::Completed).toBool(),
803-
folderItem->data(Columns::Finished).toBool(),
804-
folderItem->data(Columns::NumChildren).toInt(),
805-
folderItem->data(Columns::FirstChildHash).toString(),
806-
folderItem->data(Columns::CustomImage).toString(),
807-
folderItem->data(Columns::Type).value<YACReader::FileType>(),
808-
folderItem->data(Columns::Added).toLongLong(),
809-
folderItem->data(Columns::Updated).toLongLong());
833+
if (!mi.isValid()) {
834+
return Folder();
835+
}
810836

811-
return folder;
837+
auto folderItem = static_cast<FolderItem *>(mi.internalPointer());
838+
return folderFromItem(folderItem);
812839
}
813840

814841
QModelIndex FolderModel::getIndexFromFolderId(qulonglong folderId, const QModelIndex &parent)

YACReaderLibrary/db/folder_model.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ class FolderModel : public QAbstractItemModel
7676
QStringList getSubfoldersNames(const QModelIndex &mi);
7777
FolderModel *getSubfoldersModel(const QModelIndex &mi); // it creates a model that contains just the direct subfolders
7878

79+
Folder getRootFolder();
7980
Folder getFolder(const QModelIndex &mi);
8081
QModelIndex getIndexFromFolderId(qulonglong folderId, const QModelIndex &parent = QModelIndex());
8182
QModelIndex getIndexFromFolder(const Folder &folder, const QModelIndex &parent = QModelIndex());
@@ -133,6 +134,8 @@ public slots:
133134
// parent contains the current data in the model (parentModelIndex is its index), updated contains fresh info loaded from the DB,
134135
void takeUpdatedChildrenInfo(FolderItem *parent, const QModelIndex &parentModelIndex, FolderItem *updated);
135136

137+
Folder folderFromItem(FolderItem *item);
138+
136139
FolderItem *rootItem; // items tree
137140
QMap<unsigned long long int, FolderItem *> items; // items lookup
138141

YACReaderLibrary/library_window.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -608,8 +608,7 @@ void LibraryWindow::createMenus()
608608
auto typeMenu = new QMenu(tr("Set type"), selectedLibrary);
609609

610610
connect(typeMenu, &QMenu::aboutToShow, this, [=]() {
611-
auto rootIndex = foldersModel->index(0, 0);
612-
auto folder = foldersModel->getFolder(rootIndex);
611+
auto folder = foldersModel->getRootFolder();
613612
setupActions(folder.type);
614613
});
615614

@@ -2594,6 +2593,9 @@ void LibraryWindow::showFoldersContextMenu(const QPoint &point)
25942593
{
25952594
QModelIndex sourceMI = foldersModelProxy->mapToSource(foldersView->indexAt(point));
25962595

2596+
if (!sourceMI.isValid())
2597+
return;
2598+
25972599
auto folder = foldersModel->getFolder(sourceMI);
25982600

25992601
actions.setFolderAsNormalAction->setCheckable(true);

common/check_new_version.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
#include "check_new_version.h"
22

3+
#include "yacreader_global.h"
4+
35
#include <QUrl>
46
#include <QtGlobal>
57
#include <QStringList>
@@ -14,7 +16,7 @@
1416
#define PREVIOUS_VERSION_TESTING "6.0.0"
1517

1618
HttpVersionChecker::HttpVersionChecker()
17-
: HttpWorker("https://raw.githubusercontent.com/YACReader/yacreader/master/common/yacreader_global.h")
19+
: HttpWorker("https://raw.githubusercontent.com/YACReader/yacreader/master/common/yacreader_global.h", DEFAULT_USER_AGENT)
1820
{
1921
connect(this, &HttpVersionChecker::dataReady, this, QOverload<const QByteArray &>::of(&HttpVersionChecker::checkNewVersion));
2022
}

0 commit comments

Comments
 (0)