[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [kbibtex/kbibtex/0.7] src: Zotero::API instance managed through QSharedPointer
From: Thomas Fischer <fischer () unix-ag ! uni-kl ! de>
Date: 2016-11-26 21:53:23
Message-ID: E1cAkuR-0006Wb-VV () code ! kde ! org
[Download RAW message or body]
Git commit 117fd986420f2dc1f3751bc5dbdbd5aabeb080da by Thomas Fischer.
Committed on 26/11/2016 at 21:34.
Pushed by thomasfischer into branch 'kbibtex/0.7'.
Zotero::API instance managed through QSharedPointer
In order to address issues where stale instances of Zotero::API are
used, the single instance of this class, which is used in a number
of other classes, is encapsulated in a QSharedPointer to keep track
of which other objects are still using this instance.
Manual forward-port of commit 0ac3b8a4cab0875114ce83379 from branch
'kbibtex/0.6'.
M +3 -3 src/networking/zotero/collection.cpp
M +2 -1 src/networking/zotero/collection.h
M +4 -4 src/networking/zotero/groups.cpp
M +2 -1 src/networking/zotero/groups.h
M +3 -3 src/networking/zotero/items.cpp
M +1 -1 src/networking/zotero/items.h
M +3 -3 src/networking/zotero/tags.cpp
M +2 -1 src/networking/zotero/tags.h
M +20 -6 src/program/docklets/zoterobrowser.cpp
https://commits.kde.org/kbibtex/117fd986420f2dc1f3751bc5dbdbd5aabeb080da
diff --git a/src/networking/zotero/collection.cpp \
b/src/networking/zotero/collection.cpp index 69dec22..f4440bd 100644
--- a/src/networking/zotero/collection.cpp
+++ b/src/networking/zotero/collection.cpp
@@ -39,12 +39,12 @@ private:
Zotero::Collection *p;
public:
- Zotero::API *api;
+ QSharedPointer<Zotero::API> api;
static const QString top;
KUrl queuedRequestZoteroUrl;
- Private(API *a, Zotero::Collection *parent)
+ Private(QSharedPointer<Zotero::API> a, Zotero::Collection *parent)
: p(parent), api(a) {
initialized = false;
busy = false;
@@ -83,7 +83,7 @@ public:
const QString Zotero::Collection::Private::top = QLatin1String("top");
-Collection::Collection(API *api, QObject *parent)
+Collection::Collection(QSharedPointer<Zotero::API> api, QObject *parent)
: QObject(parent), d(new Zotero::Collection::Private(api, this))
{
d->collectionToLabel[Private::top] = i18n("Library");
diff --git a/src/networking/zotero/collection.h b/src/networking/zotero/collection.h
index 1bb8247..822d084 100644
--- a/src/networking/zotero/collection.h
+++ b/src/networking/zotero/collection.h
@@ -20,6 +20,7 @@
#include <QObject>
#include <QScopedPointer>
+#include <QSharedPointer>
#include <KUrl>
@@ -37,7 +38,7 @@ class KBIBTEXNETWORKING_EXPORT Collection : public QObject
{
Q_OBJECT
public:
- Collection(API *api, QObject *parent);
+ Collection(QSharedPointer<Zotero::API> api, QObject *parent);
~Collection();
bool initialized() const;
diff --git a/src/networking/zotero/groups.cpp b/src/networking/zotero/groups.cpp
index 5bbe145..5abcd39 100644
--- a/src/networking/zotero/groups.cpp
+++ b/src/networking/zotero/groups.cpp
@@ -35,10 +35,10 @@ private:
Zotero::Groups *p;
public:
- API *api;
+ QSharedPointer<Zotero::API> api;
KUrl queuedRequestZoteroUrl;
- Private(API *a, Zotero::Groups *parent)
+ Private(QSharedPointer<Zotero::API> a, Zotero::Groups *parent)
: p(parent), api(a) {
initialized = false;
busy = false;
@@ -59,11 +59,11 @@ public:
}
};
-Groups::Groups(API *api, QObject *parent)
+Groups::Groups(QSharedPointer<Zotero::API> api, QObject *parent)
: QObject(parent), d(new Zotero::Groups::Private(api, this))
{
KUrl url = api->baseUrl();
- Q_ASSERT_X(url.path().contains(QLatin1String("users/")), "Groups::Groups(API \
*api, QObject *parent)", "Provided base URL does not contain 'users/' as expected"); \
+ Q_ASSERT_X(url.path().contains(QLatin1String("users/")), \
"Groups::Groups(QSharedPointer<Zotero::API> api, QObject *parent)", "Provided base \
URL does not contain 'users/' as expected"); url.addPath(QLatin1String("/groups"));
if (d->api->inBackoffMode() && d->queuedRequestZoteroUrl.isEmpty()) {
d->queuedRequestZoteroUrl = url;
diff --git a/src/networking/zotero/groups.h b/src/networking/zotero/groups.h
index ff081fb..0ff843b 100644
--- a/src/networking/zotero/groups.h
+++ b/src/networking/zotero/groups.h
@@ -20,6 +20,7 @@
#include <QObject>
#include <QMap>
+#include <QSharedPointer>
#include "kbibtexnetworking_export.h"
@@ -35,7 +36,7 @@ class KBIBTEXNETWORKING_EXPORT Groups : public QObject
{
Q_OBJECT
public:
- explicit Groups(API *api, QObject *parent = NULL);
+ explicit Groups(QSharedPointer<Zotero::API> api, QObject *parent = NULL);
~Groups();
bool initialized() const;
diff --git a/src/networking/zotero/items.cpp b/src/networking/zotero/items.cpp
index 675719e..4bc41c2 100644
--- a/src/networking/zotero/items.cpp
+++ b/src/networking/zotero/items.cpp
@@ -38,10 +38,10 @@ private:
Zotero::Items *p;
public:
- API *api;
+ QSharedPointer<Zotero::API> api;
KUrl queuedRequestZoteroUrl;
- Private(API *a, Zotero::Items *parent)
+ Private(QSharedPointer<Zotero::API> a, Zotero::Items *parent)
: p(parent), api(a) {
/// nothing
}
@@ -66,7 +66,7 @@ public:
}
};
-Items::Items(API *api, QObject *parent)
+Items::Items(QSharedPointer<Zotero::API> api, QObject *parent)
: QObject(parent), d(new Zotero::Items::Private(api, this))
{
/// nothing
diff --git a/src/networking/zotero/items.h b/src/networking/zotero/items.h
index f2c6aec..01ef040 100644
--- a/src/networking/zotero/items.h
+++ b/src/networking/zotero/items.h
@@ -39,7 +39,7 @@ class KBIBTEXNETWORKING_EXPORT Items : public QObject
{
Q_OBJECT
public:
- explicit Items(API *api, QObject *parent = NULL);
+ explicit Items(QSharedPointer<Zotero::API> api, QObject *parent = NULL);
~Items();
void retrieveItemsByCollection(const QString &collectionId);
diff --git a/src/networking/zotero/tags.cpp b/src/networking/zotero/tags.cpp
index 210aecf..671d1fb 100644
--- a/src/networking/zotero/tags.cpp
+++ b/src/networking/zotero/tags.cpp
@@ -35,10 +35,10 @@ private:
Zotero::Tags *p;
public:
- API *api;
+ QSharedPointer<Zotero::API> api;
KUrl queuedRequestZoteroUrl;
- Private(API *a, Zotero::Tags *parent)
+ Private(QSharedPointer<Zotero::API> a, Zotero::Tags *parent)
: p(parent), api(a) {
initialized = false;
busy = false;
@@ -59,7 +59,7 @@ public:
}
};
-Tags::Tags(API *api, QObject *parent)
+Tags::Tags(QSharedPointer<Zotero::API> api, QObject *parent)
: QObject(parent), d(new Zotero::Tags::Private(api, this))
{
diff --git a/src/networking/zotero/tags.h b/src/networking/zotero/tags.h
index 7ee2fa3..118a11a 100644
--- a/src/networking/zotero/tags.h
+++ b/src/networking/zotero/tags.h
@@ -20,6 +20,7 @@
#include <QObject>
#include <QMap>
+#include <QSharedPointer>
#include "kbibtexnetworking_export.h"
@@ -35,7 +36,7 @@ class KBIBTEXNETWORKING_EXPORT Tags : public QObject
{
Q_OBJECT
public:
- explicit Tags(API *api, QObject *parent = NULL);
+ explicit Tags(QSharedPointer<Zotero::API> api, QObject *parent = NULL);
~Tags();
bool initialized() const;
diff --git a/src/program/docklets/zoterobrowser.cpp \
b/src/program/docklets/zoterobrowser.cpp index ca0dc9c..0487be6 100644
--- a/src/program/docklets/zoterobrowser.cpp
+++ b/src/program/docklets/zoterobrowser.cpp
@@ -63,7 +63,7 @@ public:
Zotero::TagModel *tagModel;
Zotero::Collection *collection;
Zotero::CollectionModel *collectionModel;
- Zotero::API *api;
+ QSharedPointer<Zotero::API> api;
bool needToApplyCredentials;
SearchResults *searchResults;
@@ -84,13 +84,20 @@ public:
static const QString walletFolderOAuth, walletEntryKBibTeXZotero, \
walletKeyZoteroId, walletKeyZoteroApiKey;
Private(SearchResults *sr, ZoteroBrowser *parent)
- : p(parent), \
config(KSharedConfig::openConfig(QLatin1String("kbibtexrc"))), items(NULL), \
groups(NULL), tags(NULL), tagModel(NULL), collection(NULL), collectionModel(NULL), \
api(NULL), needToApplyCredentials(true), searchResults(sr), \
comboBoxGroupListInitialized(false), nonBusyCursor(p->cursor()), wallet(NULL) { + \
: p(parent), config(KSharedConfig::openConfig(QLatin1String("kbibtexrc"))), \
items(NULL), groups(NULL), tags(NULL), tagModel(NULL), collection(NULL), \
collectionModel(NULL), needToApplyCredentials(true), searchResults(sr), \
comboBoxGroupListInitialized(false), nonBusyCursor(p->cursor()), wallet(NULL) { \
setupGUI(); }
~Private() {
if (wallet != NULL)
delete wallet;
+ if (items != NULL) delete items;
+ if (groups != NULL) delete groups;
+ if (tags != NULL) delete tags;
+ if (tagModel != NULL) delete tagModel;
+ if (collection != NULL) delete collection;
+ if (collectionModel != NULL) delete collectionModel;
+ api.clear();
}
void setupGUI()
@@ -297,15 +304,21 @@ void ZoteroBrowser::applyCredentials()
int groupId = \
d->comboBoxGroupList->itemData(d->comboBoxGroupList->currentIndex()).toInt(&ok); if \
(!ok) groupId = -1;
- d->api->deleteLater();
+ disconnect(d->tags, SIGNAL(finishedLoading()), this, \
SLOT(reenableWidget())); + disconnect(d->items, SIGNAL(stoppedSearch(int)), \
this, SLOT(reenableWidget())); + disconnect(d->items, \
SIGNAL(foundElement(QSharedPointer<Element>)), this, \
SLOT(showItem(QSharedPointer<Element>))); + disconnect(d->tagModel, \
SIGNAL(modelReset()), this, SLOT(modelReset())); + \
disconnect(d->collectionModel, SIGNAL(modelReset()), this, SLOT(modelReset())); +
d->collection->deleteLater();
d->items->deleteLater();
d->tags->deleteLater();
d->collectionModel->deleteLater();
d->tagModel->deleteLater();
+ d->api.clear();
const bool makeGroupRequest = d->radioGroupLibrary->isChecked() && groupId > \
0;
- d->api = new Zotero::API(makeGroupRequest ? Zotero::API::GroupRequest : \
Zotero::API::UserRequest, makeGroupRequest ? groupId : userId, \
d->lineEditApiKey->text(), this); + d->api = QSharedPointer<Zotero::API>(new \
Zotero::API(makeGroupRequest ? Zotero::API::GroupRequest : Zotero::API::UserRequest, \
makeGroupRequest ? groupId : userId, apiKey, this)); d->items = new \
Zotero::Items(d->api, this); d->tags = new Zotero::Tags(d->api, this);
d->tagModel = new Zotero::TagModel(d->tags, this);
@@ -345,10 +358,11 @@ void ZoteroBrowser::retrieveGroupList() {
d->comboBoxGroupList->clear();
d->comboBoxGroupListInitialized = false;
- d->api->deleteLater();
+ disconnect(d->groups, SIGNAL(finishedLoading()), this, \
SLOT(gotGroupList())); d->groups->deleteLater();
+ d->api.clear();
- d->api = new Zotero::API(Zotero::API::UserRequest, userId, \
d->lineEditApiKey->text(), this); + d->api = QSharedPointer<Zotero::API>(new \
Zotero::API(Zotero::API::UserRequest, userId, d->lineEditApiKey->text(), this)); \
d->groups = new Zotero::Groups(d->api, this);
connect(d->groups, SIGNAL(finishedLoading()), this, SLOT(gotGroupList()));
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic