Work on ownCloud syncing.

This commit is contained in:
Martin Rotter 2016-02-18 14:15:40 +01:00
parent 358675bb0c
commit 93bc60be9f
8 changed files with 90 additions and 37 deletions

View file

@ -85,20 +85,6 @@ FormMain::FormMain(QWidget *parent, Qt::WindowFlags f)
// Initialize the web factory. // Initialize the web factory.
WebFactory::instance()->loadState(); WebFactory::instance()->loadState();
OwnCloudNetworkFactory fac;
fac.setUrl("https://cloud.yarpen.cz");
fac.setAuthPassword("rssguard135");
fac.setAuthUsername("rssguard");
OwnCloudStatusResponse user = fac.status();
QString ver = user.version();
int aaaa = 0;
} }
FormMain::~FormMain() { FormMain::~FormMain() {

View file

@ -21,6 +21,9 @@
#include "network-web/networkfactory.h" #include "network-web/networkfactory.h"
#include "miscellaneous/application.h" #include "miscellaneous/application.h"
#include "miscellaneous/settings.h" #include "miscellaneous/settings.h"
#include "services/abstract/rootitem.h"
#include "services/owncloud/owncloudcategory.h"
#include "services/owncloud/owncloudfeed.h"
#include <QPixmap> #include <QPixmap>
@ -179,7 +182,6 @@ QString OwnCloudResponse::toString() const {
return QtJson::serializeStr(m_rawContent); return QtJson::serializeStr(m_rawContent);
} }
OwnCloudUserResponse::OwnCloudUserResponse(const QString &raw_content) : OwnCloudResponse(raw_content) { OwnCloudUserResponse::OwnCloudUserResponse(const QString &raw_content) : OwnCloudResponse(raw_content) {
} }
@ -255,13 +257,58 @@ bool OwnCloudStatusResponse::misconfiguredCron() const {
OwnCloudGetFeedsCategoriesResponse::OwnCloudGetFeedsCategoriesResponse(const QString &raw_categories, OwnCloudGetFeedsCategoriesResponse::OwnCloudGetFeedsCategoriesResponse(const QString &raw_categories,
const QString &raw_feeds) const QString &raw_feeds)
: m_contentCategories(QString()), m_contentFeeds(QString()) { : m_contentCategories(raw_categories), m_contentFeeds(raw_feeds) {
} }
OwnCloudGetFeedsCategoriesResponse::~OwnCloudGetFeedsCategoriesResponse() { OwnCloudGetFeedsCategoriesResponse::~OwnCloudGetFeedsCategoriesResponse() {
} }
RootItem *OwnCloudGetFeedsCategoriesResponse::feedsCategories(bool obtain_icons) const { RootItem *OwnCloudGetFeedsCategoriesResponse::feedsCategories(bool obtain_icons) const {
// TODO: TODO RootItem *parent = new RootItem();
return NULL; QMap<int,RootItem*> cats;
cats.insert(0, parent);
// Process categories first, then process feeds.
foreach (QVariant cat, QtJson::parse(m_contentCategories).toMap()["folders"].toList()) {
QMap<QString,QVariant> item = cat.toMap();
OwnCloudCategory *category = new OwnCloudCategory();
category->setTitle(item["name"].toString());
category->setCustomId(item["id"].toInt());
cats.insert(category->customId(), category);
// All categories in ownCloud are top-level.
parent->appendChild(category);
}
// We have categories added, now add all feeds.
foreach (QVariant fed, QtJson::parse(m_contentFeeds).toMap()["feeds"].toList()) {
QMap<QString,QVariant> item = fed.toMap();
OwnCloudFeed *feed = new OwnCloudFeed();
if (obtain_icons) {
QString icon_path = item["faviconLink"].toString();
if (!icon_path.isEmpty()) {
QByteArray icon_data;
if (NetworkFactory::downloadFile(icon_path, DOWNLOAD_TIMEOUT, icon_data).first == QNetworkReply::NoError) {
// Icon downloaded, set it up.
QPixmap icon_pixmap;
icon_pixmap.loadFromData(icon_data);
feed->setIcon(QIcon(icon_pixmap));
}
}
}
feed->setUrl(item["link"].toString());
feed->setTitle(item["title"].toString());
feed->setCustomId(item["id"].toInt());
cats.value(item["folderId"].toInt())->appendChild(feed);
}
return parent;
} }

View file

@ -21,10 +21,10 @@
#include "miscellaneous/iconfactory.h" #include "miscellaneous/iconfactory.h"
OwnCloudServiceCategory::OwnCloudServiceCategory(RootItem *parent) : Category(parent) { OwnCloudCategory::OwnCloudCategory(RootItem *parent) : Category(parent) {
// Categories in ownCloud have now icons etc. They just have titles. // Categories in ownCloud have now icons etc. They just have titles.
setIcon(qApp->icons()->fromTheme(QSL("folder-category"))); setIcon(qApp->icons()->fromTheme(QSL("folder-category")));
} }
OwnCloudServiceCategory::~OwnCloudServiceCategory() { OwnCloudCategory::~OwnCloudCategory() {
} }

View file

@ -21,10 +21,10 @@
#include "services/abstract/category.h" #include "services/abstract/category.h"
class OwnCloudServiceCategory : public Category { class OwnCloudCategory : public Category {
public: public:
explicit OwnCloudServiceCategory(RootItem *parent = NULL); explicit OwnCloudCategory(RootItem *parent = NULL);
virtual ~OwnCloudServiceCategory(); virtual ~OwnCloudCategory();
}; };
#endif // OWNCLOUDSERVICECATEGORY_H #endif // OWNCLOUDSERVICECATEGORY_H

View file

@ -23,3 +23,12 @@ OwnCloudFeed::OwnCloudFeed(RootItem *parent) : Feed(parent) {
OwnCloudFeed::~OwnCloudFeed() { OwnCloudFeed::~OwnCloudFeed() {
} }
int OwnCloudFeed::update() {
// TODO: TODO
return 0;
}
int OwnCloudFeed::messageForeignKeyId() const {
return customId();
}

View file

@ -25,6 +25,9 @@ class OwnCloudFeed : public Feed {
public: public:
explicit OwnCloudFeed(RootItem *parent = NULL); explicit OwnCloudFeed(RootItem *parent = NULL);
virtual ~OwnCloudFeed(); virtual ~OwnCloudFeed();
int update();
int messageForeignKeyId() const;
}; };
#endif // OWNCLOUDFEED_H #endif // OWNCLOUDFEED_H

View file

@ -31,7 +31,8 @@
OwnCloudServiceRoot::OwnCloudServiceRoot(RootItem *parent) OwnCloudServiceRoot::OwnCloudServiceRoot(RootItem *parent)
: ServiceRoot(parent), m_recycleBin(new OwnCloudRecycleBin(this)), m_network(new OwnCloudNetworkFactory()) { : ServiceRoot(parent), m_recycleBin(new OwnCloudRecycleBin(this)),
m_actionSyncIn(NULL), m_serviceMenu(QList<QAction*>()), m_network(new OwnCloudNetworkFactory()) {
setIcon(OwnCloudServiceEntryPoint().icon()); setIcon(OwnCloudServiceEntryPoint().icon());
} }
@ -65,24 +66,23 @@ bool OwnCloudServiceRoot::supportsCategoryAdding() const {
return false; return false;
} }
QList<QAction*> OwnCloudServiceRoot::addItemMenu() {
// TODO: TODO
return QList<QAction*>();
}
QList<QAction*> OwnCloudServiceRoot::serviceMenu() { QList<QAction*> OwnCloudServiceRoot::serviceMenu() {
// TODO: TODO if (m_serviceMenu.isEmpty()) {
return QList<QAction*>(); m_actionSyncIn = new QAction(qApp->icons()->fromTheme(QSL("item-sync")), tr("Sync in"), this);
connect(m_actionSyncIn, SIGNAL(triggered()), this, SLOT(syncIn()));
m_serviceMenu.append(m_actionSyncIn);
}
return m_serviceMenu;
} }
RecycleBin *OwnCloudServiceRoot::recycleBin() const { RecycleBin *OwnCloudServiceRoot::recycleBin() const {
// TODO: TODO return m_recycleBin;
return NULL;
} }
void OwnCloudServiceRoot::start(bool freshly_activated) { void OwnCloudServiceRoot::start(bool freshly_activated) {
// TODO: TODO loadFromDatabase();
//loadFromDatabase();
if (childCount() == 1 && child(0)->kind() == RootItemKind::Bin) { if (childCount() == 1 && child(0)->kind() == RootItemKind::Bin) {
syncIn(); syncIn();
@ -244,3 +244,9 @@ void OwnCloudServiceRoot::syncIn() {
setIcon(original_icon); setIcon(original_icon);
itemChanged(QList<RootItem*>() << this); itemChanged(QList<RootItem*>() << this);
} }
void OwnCloudServiceRoot::loadFromDatabase() {
// As the last item, add recycle bin, which is needed.
appendChild(m_recycleBin);
m_recycleBin->updateCounts(true);
}

View file

@ -38,8 +38,6 @@ class OwnCloudServiceRoot : public ServiceRoot {
bool supportsFeedAdding() const; bool supportsFeedAdding() const;
bool supportsCategoryAdding() const; bool supportsCategoryAdding() const;
QList<QAction*> addItemMenu();
QList<QAction*> serviceMenu(); QList<QAction*> serviceMenu();
RecycleBin *recycleBin() const; RecycleBin *recycleBin() const;
@ -62,7 +60,11 @@ class OwnCloudServiceRoot : public ServiceRoot {
void syncIn(); void syncIn();
private: private:
void loadFromDatabase();
OwnCloudRecycleBin *m_recycleBin; OwnCloudRecycleBin *m_recycleBin;
QAction *m_actionSyncIn;
QList<QAction*> m_serviceMenu;
OwnCloudNetworkFactory *m_network; OwnCloudNetworkFactory *m_network;
}; };