Skip to content

Commit

Permalink
Merge branch 'getModems' into 'master'
Browse files Browse the repository at this point in the history
Add QOfonoManager::getModems() method

See merge request mer-core/libqofono!12
  • Loading branch information
Slava Monich committed Apr 25, 2019
2 parents e4cbbfd + 47fabc3 commit 2b18ac9
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 17 deletions.
62 changes: 45 additions & 17 deletions src/qofonomanager.cpp
Expand Up @@ -26,9 +26,40 @@ class QOfonoManager::Private

Private() : ofonoManager(NULL), available(false) {}

QString defaultModem();
void handleGetModemsReply(QOfonoManager* obj, ObjectPathPropertiesList reply);
void getModems(QOfonoManager *manager);
};

QString QOfonoManager::Private::defaultModem()
{
return modems.isEmpty() ? QString() : modems[0];
}

void QOfonoManager::Private::handleGetModemsReply(QOfonoManager* obj, ObjectPathPropertiesList reply)
{
bool wasAvailable = available;
QString prevDefault = defaultModem();
QStringList newModems;
const int n = reply.count();
for (int i = 0; i < n; i++) {
newModems.append(reply.at(i).path.path());
}
qSort(newModems);
available = true;
if (modems != newModems) {
modems = newModems;
Q_EMIT obj->modemsChanged(modems);
}
QString newDefault = defaultModem();
if (newDefault != prevDefault) {
Q_EMIT obj->defaultModemChanged(newDefault);
}
if (!wasAvailable) {
Q_EMIT obj->availableChanged(true);
}
}

void QOfonoManager::Private::getModems(QOfonoManager *manager)
{
if (ofonoManager) {
Expand Down Expand Up @@ -69,9 +100,21 @@ QStringList QOfonoManager::modems()
return d_ptr->modems;
}

QStringList QOfonoManager::getModems()
{
if (d_ptr->ofonoManager && !d_ptr->available) {
QDBusPendingReply<ObjectPathPropertiesList> reply = d_ptr->ofonoManager->GetModems();
reply.waitForFinished();
if (!reply.isError()) {
d_ptr->handleGetModemsReply(this, reply.value());
}
}
return d_ptr->modems;
}

QString QOfonoManager::defaultModem()
{
return d_ptr->modems.isEmpty() ? QString() : d_ptr->modems[0];
return d_ptr->defaultModem();
}

bool QOfonoManager::available() const
Expand Down Expand Up @@ -128,22 +171,7 @@ void QOfonoManager::onGetModemsFinished(QDBusPendingCallWatcher* watcher)
qWarning() << reply.error();
}
} else {
QString prevDefault = defaultModem();
QStringList newModems;
Q_FOREACH(ObjectPathProperties modem, reply.value()) {
newModems.append(modem.path.path());
}
qSort(newModems);
if (d_ptr->modems != newModems) {
d_ptr->modems = newModems;
Q_EMIT modemsChanged(d_ptr->modems);
}
QString newDefault = defaultModem();
if (newDefault != prevDefault) {
Q_EMIT defaultModemChanged(newDefault);
}
d_ptr->available = true;
Q_EMIT availableChanged(true);
d_ptr->handleGetModemsReply(this, reply.value());
}
}

Expand Down
1 change: 1 addition & 0 deletions src/qofonomanager.h
Expand Up @@ -35,6 +35,7 @@ class QOFONOSHARED_EXPORT QOfonoManager : public QObject
explicit QOfonoManager(QObject *parent = 0);
~QOfonoManager();

QStringList getModems(); // May block
QStringList modems();
QString defaultModem();
bool available() const;
Expand Down

0 comments on commit 2b18ac9

Please sign in to comment.