Maemo: Introduce logic for default device configuration.

This commit is contained in:
Christian Kandeler
2011-01-13 14:32:15 +01:00
parent 164cc4ff2c
commit 61cbad9612
3 changed files with 71 additions and 17 deletions

View File

@@ -300,9 +300,11 @@ void MaemoDeployStep::handleDeviceConfigurationsUpdated()
void MaemoDeployStep::setDeviceConfig(MaemoDeviceConfig::Id internalId) void MaemoDeployStep::setDeviceConfig(MaemoDeviceConfig::Id internalId)
{ {
m_deviceConfig = MaemoDeviceConfigurations::instance()->find(internalId); const MaemoDeviceConfigurations * const devConfs
if (!m_deviceConfig && MaemoDeviceConfigurations::instance()->rowCount() > 0) = MaemoDeviceConfigurations::instance();
m_deviceConfig = MaemoDeviceConfigurations::instance()->deviceAt(0); m_deviceConfig = devConfs->find(internalId);
if (!m_deviceConfig)
m_deviceConfig = devConfs->defaultDeviceConfig();
emit deviceConfigChanged(); emit deviceConfigChanged();
} }

View File

@@ -63,6 +63,7 @@ namespace {
const QLatin1String KeyFileKey("KeyFile"); const QLatin1String KeyFileKey("KeyFile");
const QLatin1String PasswordKey("Password"); const QLatin1String PasswordKey("Password");
const QLatin1String TimeoutKey("Timeout"); const QLatin1String TimeoutKey("Timeout");
const QLatin1String IsDefaultKey("IsDefault");
const QLatin1String InternalIdKey("InternalId"); const QLatin1String InternalIdKey("InternalId");
const QLatin1String DefaultKeyFilePathKey("DefaultKeyFile"); const QLatin1String DefaultKeyFilePathKey("DefaultKeyFile");
@@ -178,13 +179,18 @@ private:
MaemoDeviceConfig::Ptr MaemoDeviceConfig::create(const QString &name, MaemoDeviceConfig::Ptr MaemoDeviceConfig::create(const QString &name,
DeviceType type, Id &nextId) DeviceType type, Id &nextId)
{ {
return MaemoDeviceConfig::Ptr(new MaemoDeviceConfig(name, type, nextId)); return Ptr(new MaemoDeviceConfig(name, type, nextId));
} }
MaemoDeviceConfig::Ptr MaemoDeviceConfig::create(const QSettings &settings, MaemoDeviceConfig::Ptr MaemoDeviceConfig::create(const QSettings &settings,
Id &nextId) Id &nextId)
{ {
return MaemoDeviceConfig::Ptr(new MaemoDeviceConfig(settings, nextId)); return Ptr(new MaemoDeviceConfig(settings, nextId));
}
MaemoDeviceConfig::Ptr MaemoDeviceConfig::create(const ConstPtr &other)
{
return Ptr(new MaemoDeviceConfig(other));
} }
MaemoDeviceConfig::MaemoDeviceConfig(const QString &name, DeviceType devType, MaemoDeviceConfig::MaemoDeviceConfig(const QString &name, DeviceType devType,
@@ -193,8 +199,8 @@ MaemoDeviceConfig::MaemoDeviceConfig(const QString &name, DeviceType devType,
m_name(name), m_name(name),
m_type(devType), m_type(devType),
m_portsSpec(defaultPortsSpec(m_type)), m_portsSpec(defaultPortsSpec(m_type)),
m_internalId(nextId++), m_isDefault(false),
m_isDefault(false) m_internalId(nextId++)
{ {
m_sshParameters.host = defaultHost(m_type); m_sshParameters.host = defaultHost(m_type);
m_sshParameters.port = defaultSshPort(m_type); m_sshParameters.port = defaultSshPort(m_type);
@@ -211,8 +217,8 @@ MaemoDeviceConfig::MaemoDeviceConfig(const QSettings &settings,
m_name(settings.value(NameKey).toString()), m_name(settings.value(NameKey).toString()),
m_type(static_cast<DeviceType>(settings.value(TypeKey, DefaultDeviceType).toInt())), m_type(static_cast<DeviceType>(settings.value(TypeKey, DefaultDeviceType).toInt())),
m_portsSpec(settings.value(PortsSpecKey, defaultPortsSpec(m_type)).toString()), m_portsSpec(settings.value(PortsSpecKey, defaultPortsSpec(m_type)).toString()),
m_internalId(settings.value(InternalIdKey, nextId).toULongLong()), m_isDefault(settings.value(IsDefaultKey, false).toBool()),
m_isDefault(false) m_internalId(settings.value(InternalIdKey, nextId).toULongLong())
{ {
if (m_internalId == nextId) if (m_internalId == nextId)
++nextId; ++nextId;
@@ -227,6 +233,16 @@ MaemoDeviceConfig::MaemoDeviceConfig(const QSettings &settings,
m_sshParameters.timeout = settings.value(TimeoutKey, DefaultTimeout).toInt(); m_sshParameters.timeout = settings.value(TimeoutKey, DefaultTimeout).toInt();
} }
MaemoDeviceConfig::MaemoDeviceConfig(const MaemoDeviceConfig::ConstPtr &other)
: m_sshParameters(other->m_sshParameters),
m_name(other->m_name),
m_type(other->type()),
m_portsSpec(other->m_portsSpec),
m_isDefault(other->m_isDefault),
m_internalId(other->m_internalId)
{
}
QString MaemoDeviceConfig::portsRegExpr() QString MaemoDeviceConfig::portsRegExpr()
{ {
const QLatin1String portExpr("(\\d)+"); const QLatin1String portExpr("(\\d)+");
@@ -266,6 +282,7 @@ void MaemoDeviceConfig::save(QSettings &settings) const
settings.setValue(PasswordKey, m_sshParameters.pwd); settings.setValue(PasswordKey, m_sshParameters.pwd);
settings.setValue(KeyFileKey, m_sshParameters.privateKeyFile); settings.setValue(KeyFileKey, m_sshParameters.privateKeyFile);
settings.setValue(TimeoutKey, m_sshParameters.timeout); settings.setValue(TimeoutKey, m_sshParameters.timeout);
settings.setValue(IsDefaultKey, m_isDefault);
settings.setValue(InternalIdKey, m_internalId); settings.setValue(InternalIdKey, m_internalId);
} }
@@ -282,7 +299,7 @@ void MaemoDeviceConfigurations::replaceInstance(const MaemoDeviceConfigurations
{ {
Q_ASSERT(m_instance); Q_ASSERT(m_instance);
m_instance->beginResetModel(); m_instance->beginResetModel();
copy(other, m_instance); copy(other, m_instance, false);
m_instance->save(); m_instance->save();
m_instance->endResetModel(); m_instance->endResetModel();
emit m_instance->updated(); emit m_instance->updated();
@@ -291,14 +308,19 @@ void MaemoDeviceConfigurations::replaceInstance(const MaemoDeviceConfigurations
MaemoDeviceConfigurations *MaemoDeviceConfigurations::cloneInstance() MaemoDeviceConfigurations *MaemoDeviceConfigurations::cloneInstance()
{ {
MaemoDeviceConfigurations * const other = new MaemoDeviceConfigurations(0); MaemoDeviceConfigurations * const other = new MaemoDeviceConfigurations(0);
copy(m_instance, other); copy(m_instance, other, true);
return other; return other;
} }
void MaemoDeviceConfigurations::copy(const MaemoDeviceConfigurations *source, void MaemoDeviceConfigurations::copy(const MaemoDeviceConfigurations *source,
MaemoDeviceConfigurations *target) MaemoDeviceConfigurations *target, bool deep)
{ {
target->m_devConfigs = source->m_devConfigs; if (deep) {
foreach (const MaemoDeviceConfig::ConstPtr &devConf, source->m_devConfigs)
target->m_devConfigs << MaemoDeviceConfig::create(devConf);
} else {
target->m_devConfigs = source->m_devConfigs;
}
target->m_defaultSshKeyFilePath = source->m_defaultSshKeyFilePath; target->m_defaultSshKeyFilePath = source->m_defaultSshKeyFilePath;
target->m_nextId = source->m_nextId; target->m_nextId = source->m_nextId;
target->initShadowDevConfs(); target->initShadowDevConfs();
@@ -342,6 +364,7 @@ void MaemoDeviceConfigurations::setupShadowDevConf(int i)
shadowConf->m_sshParameters.pwd = devConf->m_sshParameters.pwd; shadowConf->m_sshParameters.pwd = devConf->m_sshParameters.pwd;
shadowConf->m_sshParameters.privateKeyFile shadowConf->m_sshParameters.privateKeyFile
= devConf->m_sshParameters.privateKeyFile; = devConf->m_sshParameters.privateKeyFile;
shadowConf->m_isDefault = devConf->m_isDefault;
shadowConf->m_internalId = devConf->m_internalId; shadowConf->m_internalId = devConf->m_internalId;
m_shadowDevConfigs[i] = shadowConf; m_shadowDevConfigs[i] = shadowConf;
} }
@@ -350,7 +373,11 @@ void MaemoDeviceConfigurations::addConfiguration(const QString &name,
MaemoDeviceConfig::DeviceType type) MaemoDeviceConfig::DeviceType type)
{ {
beginInsertRows(QModelIndex(), rowCount(), rowCount()); beginInsertRows(QModelIndex(), rowCount(), rowCount());
m_devConfigs << MaemoDeviceConfig::create(name, type, m_nextId); const MaemoDeviceConfig::Ptr devConf
= MaemoDeviceConfig::create(name, type, m_nextId);
if (m_devConfigs.isEmpty())
devConf->m_isDefault = true;
m_devConfigs << devConf;
m_shadowDevConfigs << MaemoDeviceConfig::Ptr(); m_shadowDevConfigs << MaemoDeviceConfig::Ptr();
endInsertRows(); endInsertRows();
} }
@@ -359,9 +386,15 @@ void MaemoDeviceConfigurations::removeConfiguration(int i)
{ {
Q_ASSERT(i >= 0 && i < rowCount()); Q_ASSERT(i >= 0 && i < rowCount());
beginRemoveRows(QModelIndex(), i, i); beginRemoveRows(QModelIndex(), i, i);
const bool wasDefault = deviceAt(i)->m_isDefault;
m_devConfigs.removeAt(i); m_devConfigs.removeAt(i);
m_shadowDevConfigs.removeAt(i); m_shadowDevConfigs.removeAt(i);
endRemoveRows(); endRemoveRows();
if (wasDefault && !m_devConfigs.isEmpty()) {
m_devConfigs.first()->m_isDefault = true;
const QModelIndex changedIndex = index(0, 0);
emit dataChanged(changedIndex, changedIndex);
}
} }
void MaemoDeviceConfigurations::setConfigurationName(int i, const QString &name) void MaemoDeviceConfigurations::setConfigurationName(int i, const QString &name)
@@ -412,13 +445,19 @@ void MaemoDeviceConfigurations::load()
m_defaultSshKeyFilePath m_defaultSshKeyFilePath
= settings->value(DefaultKeyFilePathKey, DefaultKeyFile).toString(); = settings->value(DefaultKeyFilePathKey, DefaultKeyFile).toString();
int count = settings->beginReadArray(ConfigListKey); int count = settings->beginReadArray(ConfigListKey);
bool hasDefault = false;
for (int i = 0; i < count; ++i) { for (int i = 0; i < count; ++i) {
settings->setArrayIndex(i); settings->setArrayIndex(i);
m_devConfigs.append(MaemoDeviceConfig::create(*settings, m_nextId)); MaemoDeviceConfig::Ptr devConf
= MaemoDeviceConfig::create(*settings, m_nextId);
hasDefault |= devConf->m_isDefault;
m_devConfigs << devConf;
} }
settings->endArray(); settings->endArray();
settings->endGroup(); settings->endGroup();
initShadowDevConfs(); initShadowDevConfs();
if (!hasDefault && !m_devConfigs.isEmpty())
m_devConfigs.first()->m_isDefault = true;
} }
MaemoDeviceConfig::ConstPtr MaemoDeviceConfigurations::deviceAt(int i) const MaemoDeviceConfig::ConstPtr MaemoDeviceConfigurations::deviceAt(int i) const
@@ -441,6 +480,16 @@ MaemoDeviceConfig::ConstPtr MaemoDeviceConfigurations::find(MaemoDeviceConfig::I
return index == -1 ? MaemoDeviceConfig::ConstPtr() : deviceAt(index); return index == -1 ? MaemoDeviceConfig::ConstPtr() : deviceAt(index);
} }
MaemoDeviceConfig::ConstPtr MaemoDeviceConfigurations::defaultDeviceConfig() const
{
foreach (const MaemoDeviceConfig::ConstPtr &devConf, m_devConfigs) {
if (devConf->m_isDefault)
return devConf;
}
Q_ASSERT(m_devConfigs.isEmpty());
return MaemoDeviceConfig::ConstPtr();
}
int MaemoDeviceConfigurations::indexForInternalId(MaemoDeviceConfig::Id internalId) const int MaemoDeviceConfigurations::indexForInternalId(MaemoDeviceConfig::Id internalId) const
{ {
for (int i = 0; i < m_devConfigs.count(); ++i) { for (int i = 0; i < m_devConfigs.count(); ++i) {

View File

@@ -114,12 +114,14 @@ private:
MaemoDeviceConfig(const QString &name, DeviceType type, Id &nextId); MaemoDeviceConfig(const QString &name, DeviceType type, Id &nextId);
MaemoDeviceConfig(const QSettings &settings, Id &nextId); MaemoDeviceConfig(const QSettings &settings, Id &nextId);
MaemoDeviceConfig(const ConstPtr &other);
MaemoDeviceConfig(const MaemoDeviceConfig &); MaemoDeviceConfig(const MaemoDeviceConfig &);
MaemoDeviceConfig &operator=(const MaemoDeviceConfig &); MaemoDeviceConfig &operator=(const MaemoDeviceConfig &);
static Ptr create(const QString &name, DeviceType type, Id &nextId); static Ptr create(const QString &name, DeviceType type, Id &nextId);
static Ptr create(const QSettings &settings, Id &nextId); static Ptr create(const QSettings &settings, Id &nextId);
static Ptr create(const ConstPtr &other);
void save(QSettings &settings) const; void save(QSettings &settings) const;
int defaultSshPort(DeviceType type) const; int defaultSshPort(DeviceType type) const;
@@ -130,8 +132,8 @@ private:
QString m_name; QString m_name;
DeviceType m_type; DeviceType m_type;
QString m_portsSpec; QString m_portsSpec;
Id m_internalId;
bool m_isDefault; bool m_isDefault;
Id m_internalId;
}; };
@@ -147,6 +149,7 @@ public:
MaemoDeviceConfig::ConstPtr deviceAt(int i) const; MaemoDeviceConfig::ConstPtr deviceAt(int i) const;
MaemoDeviceConfig::ConstPtr find(MaemoDeviceConfig::Id id) const; MaemoDeviceConfig::ConstPtr find(MaemoDeviceConfig::Id id) const;
MaemoDeviceConfig::ConstPtr defaultDeviceConfig() const;
bool hasConfig(const QString &name) const; bool hasConfig(const QString &name) const;
int indexForInternalId(MaemoDeviceConfig::Id internalId) const; int indexForInternalId(MaemoDeviceConfig::Id internalId) const;
MaemoDeviceConfig::Id internalId(MaemoDeviceConfig::ConstPtr devConf) const; MaemoDeviceConfig::Id internalId(MaemoDeviceConfig::ConstPtr devConf) const;
@@ -175,7 +178,7 @@ private:
void save(); void save();
void initShadowDevConfs(); void initShadowDevConfs();
static void copy(const MaemoDeviceConfigurations *source, static void copy(const MaemoDeviceConfigurations *source,
MaemoDeviceConfigurations *target); MaemoDeviceConfigurations *target, bool deep);
void setupShadowDevConf(int i); void setupShadowDevConf(int i);
static MaemoDeviceConfigurations *m_instance; static MaemoDeviceConfigurations *m_instance;