+// old db settings:
+// "Type" => "sqlite"
+bool Core::initStorage(QVariantMap dbSettings, bool setup) {
+ QString backend = dbSettings["Backend"].toString();
+ if(backend.isEmpty()) {
+ //qWarning() << "No storage backend selected!";
+ return configured = false;
+ }
+
+ if(_storageBackends.contains(backend)) {
+ storage = _storageBackends[backend];
+ } else {
+ qWarning() << "Selected storage backend is not available:" << backend;
+ return configured = false;
+ }
+ if(!storage->init(dbSettings)) {
+ if(!setup || !(storage->setup(dbSettings) && storage->init(dbSettings))) {
+ qWarning() << "Could not init storage!";
+ storage = 0;
+ return configured = false;
+ }
+ }
+ // delete all other backends
+ foreach(Storage *s, _storageBackends.values()) {
+ if(s != storage) s->deleteLater();
+ }
+ _storageBackends.clear();
+
+ connect(storage, SIGNAL(bufferInfoUpdated(UserId, const BufferInfo &)), this, SIGNAL(bufferInfoUpdated(UserId, const BufferInfo &)));
+ return configured = true;
+}
+
+void Core::syncStorage() {
+ QMutexLocker locker(&mutex);
+ if(storage) storage->sync();
+}
+
+/*** Storage Access ***/
+void Core::setUserSetting(UserId userId, const QString &settingName, const QVariant &data) {
+ QMutexLocker locker(&mutex);
+ instance()->storage->setUserSetting(userId, settingName, data);
+}
+
+QVariant Core::getUserSetting(UserId userId, const QString &settingName, const QVariant &data) {
+ QMutexLocker locker(&mutex);
+ return instance()->storage->getUserSetting(userId, settingName, data);
+}
+
+bool Core::createNetwork(UserId user, NetworkInfo &info) {
+ QMutexLocker locker(&mutex);
+ NetworkId networkId = instance()->storage->createNetwork(user, info);
+ if(!networkId.isValid())
+ return false;
+
+ info.networkId = networkId;
+ return true;
+}
+
+bool Core::updateNetwork(UserId user, const NetworkInfo &info) {
+ QMutexLocker locker(&mutex);
+ return instance()->storage->updateNetwork(user, info);
+}
+
+bool Core::removeNetwork(UserId user, const NetworkId &networkId) {
+ QMutexLocker locker(&mutex);
+ return instance()->storage->removeNetwork(user, networkId);
+}
+
+QList<NetworkInfo> Core::networks(UserId user) {
+ QMutexLocker locker(&mutex);
+ return instance()->storage->networks(user);
+}
+
+NetworkId Core::networkId(UserId user, const QString &network) {
+ QMutexLocker locker(&mutex);
+ return instance()->storage->getNetworkId(user, network);
+}
+
+QList<NetworkId> Core::connectedNetworks(UserId user) {
+ QMutexLocker locker(&mutex);
+ return instance()->storage->connectedNetworks(user);
+}
+
+void Core::setNetworkConnected(UserId user, const NetworkId &networkId, bool isConnected) {
+ QMutexLocker locker(&mutex);
+ return instance()->storage->setNetworkConnected(user, networkId, isConnected);
+}
+
+QHash<QString, QString> Core::persistentChannels(UserId user, const NetworkId &networkId) {
+ QMutexLocker locker(&mutex);
+ return instance()->storage->persistentChannels(user, networkId);
+}
+
+void Core::setChannelPersistent(UserId user, const NetworkId &networkId, const QString &channel, bool isJoined) {
+ QMutexLocker locker(&mutex);
+ return instance()->storage->setChannelPersistent(user, networkId, channel, isJoined);
+}
+
+void Core::setPersistentChannelKey(UserId user, const NetworkId &networkId, const QString &channel, const QString &key) {
+ QMutexLocker locker(&mutex);
+ return instance()->storage->setPersistentChannelKey(user, networkId, channel, key);
+}
+
+BufferInfo Core::bufferInfo(UserId user, const NetworkId &networkId, BufferInfo::Type type, const QString &buffer) {
+ QMutexLocker locker(&mutex);
+ return instance()->storage->getBufferInfo(user, networkId, type, buffer);
+}
+
+BufferInfo Core::getBufferInfo(UserId user, const BufferId &bufferId) {
+ QMutexLocker locker(&mutex);
+ return instance()->storage->getBufferInfo(user, bufferId);
+}
+
+MsgId Core::storeMessage(const Message &message) {
+ QMutexLocker locker(&mutex);
+ return instance()->storage->logMessage(message);
+}
+
+QList<Message> Core::requestMsgs(UserId user, BufferId buffer, int lastmsgs, int offset) {
+ QMutexLocker locker(&mutex);
+ return instance()->storage->requestMsgs(user, buffer, lastmsgs, offset);
+}
+
+QList<Message> Core::requestMsgs(UserId user, BufferId buffer, QDateTime since, int offset) {
+ QMutexLocker locker(&mutex);
+ return instance()->storage->requestMsgs(user, buffer, since, offset);
+}
+
+QList<Message> Core::requestMsgRange(UserId user, BufferId buffer, int first, int last) {
+ QMutexLocker locker(&mutex);
+ return instance()->storage->requestMsgRange(user, buffer, first, last);
+}
+
+QList<BufferInfo> Core::requestBuffers(UserId user) {
+ QMutexLocker locker(&mutex);
+ return instance()->storage->requestBuffers(user);
+}
+
+QList<BufferId> Core::requestBufferIdsForNetwork(UserId user, NetworkId networkId) {
+ QMutexLocker locker(&mutex);
+ return instance()->storage->requestBufferIdsForNetwork(user, networkId);
+}
+
+bool Core::removeBuffer(const UserId &user, const BufferId &bufferId) {
+ QMutexLocker locker(&mutex);
+ return instance()->storage->removeBuffer(user, bufferId);
+}
+
+BufferId Core::renameBuffer(const UserId &user, const NetworkId &networkId, const QString &newName, const QString &oldName) {
+ QMutexLocker locker(&mutex);
+ return instance()->storage->renameBuffer(user, networkId, newName, oldName);
+}
+
+void Core::setBufferLastSeenMsg(UserId user, const BufferId &bufferId, const MsgId &msgId) {
+ QMutexLocker locker(&mutex);
+ return instance()->storage->setBufferLastSeenMsg(user, bufferId, msgId);
+}
+
+QHash<BufferId, MsgId> Core::bufferLastSeenMsgIds(UserId user) {
+ QMutexLocker locker(&mutex);
+ return instance()->storage->bufferLastSeenMsgIds(user);
+}
+
+/*** Network Management ***/