Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Merge pull request #14 from zchydem/master
[transfer-engine] Fix to account and share method list handling.
  • Loading branch information
Marko Mattila committed Nov 22, 2013
2 parents 04737e5 + 5189dd0 commit 372a993
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 6 deletions.
32 changes: 27 additions & 5 deletions src/transferengine.cpp
Expand Up @@ -45,6 +45,8 @@

#include <signal.h>

#include <Accounts/Manager>

#define SHARE_PLUGINS_PATH "/usr/lib/nemo-transferengine/plugins"
#define CONFIG_PATH "/usr/share/nemo-transferengine/nemo-transfer-engine.conf"
#define FILE_WATCHER_TIMEOUT 5000
Expand Down Expand Up @@ -153,7 +155,6 @@ TransferEnginePrivate::TransferEnginePrivate(TransferEngine *parent):
connect(m_accountManager, SIGNAL(accountCreated(Accounts::AccountId)), this, SLOT(enabledPluginsCheck()));
connect(m_accountManager, SIGNAL(accountRemoved(Accounts::AccountId)), this, SLOT(enabledPluginsCheck()));
connect(m_accountManager, SIGNAL(accountUpdated(Accounts::AccountId)), this, SLOT(enabledPluginsCheck()));
connect(m_accountManager, SIGNAL(enabledEvent(Accounts::AccountId)), this, SLOT(enabledPluginsCheck()));

// Exit safely stuff if we recieve certain signal or there are no active transfers
Q_Q(TransferEngine);
Expand Down Expand Up @@ -188,6 +189,11 @@ void TransferEnginePrivate::enabledPluginsCheck()
m_fileWatcherTimer->stop();
}

if (m_infoObjects.count() > 0) {
qWarning() << Q_FUNC_INFO << "Already quering account info" << m_infoObjects.count();
return;
}

// First clear old data
m_enabledPlugins.clear();
qDeleteAll(m_infoObjects);
Expand Down Expand Up @@ -217,13 +223,21 @@ void TransferEnginePrivate::enabledPluginsCheck()
continue;
}

// Put info object to temporary container to wait that query result
// is returned. These object will be cleaned in pluginInfoReady() slot.
if (info->ready()) {
if (info->info().count() > 0) {
m_enabledPlugins << info->info();
} else {
// Plugin has nothing to provide, just ignore it
delete info;
}
} else {
// These object will be cleaned in pluginInfoReady() slot.
m_infoObjects << info;
connect(info, SIGNAL(infoReady()), this, SLOT(pluginInfoReady()));
connect(info, SIGNAL(infoError(QString)), this, SLOT(pluginInfoError(QString)));
info->query();
}
}

if (!interface) {
qWarning() << Q_FUNC_INFO << loader.errorString();
Expand Down Expand Up @@ -608,10 +622,18 @@ void TransferEnginePrivate::updateProgress(qreal progress)
void TransferEnginePrivate::pluginInfoReady()
{
TransferPluginInfo *infoObj = qobject_cast<TransferPluginInfo*>(sender());
m_enabledPlugins << infoObj->info();

m_infoObjects.removeOne(infoObj);
QList<TransferMethodInfo> infoList = infoObj->info();
if (!infoList.isEmpty()) {
m_enabledPlugins << infoList;
}

if (m_infoObjects.removeOne(infoObj)) {
delete infoObj;
} else {
qWarning() << Q_FUNC_INFO << "Failed to remove info object!";
delete infoObj;
}

if (m_infoObjects.isEmpty()) {
Q_Q(TransferEngine);
Expand Down
4 changes: 3 additions & 1 deletion src/transferengine_p.h
Expand Up @@ -35,7 +35,9 @@
#include "mediatransferinterface.h"
#include "transfermethodinfo.h"

#include <Accounts/Manager>
namespace Accounts {
class Manager;
}

class QFileSystemWatcher;
class QTimer;
Expand Down

0 comments on commit 372a993

Please sign in to comment.