Esempio n. 1
0
QStringList JAccount::updateParameters(const QVariantMap &parameters, bool forced)
{
	Q_D(JAccount);
	QStringList result;
	if (!forced && d->parameters == parameters)
		return result;
	
	if (forced)
		d->hasChangedParameters = false;
	
	QString password = parameters.value(QLatin1String("password")).toString();
	QString server = parameters.value(QLatin1String("connect-server")).toString();
	int port = parameters.value(QLatin1String("port"), -1).toInt();
	QString boshServer = parameters.value(QLatin1String("bosh-server")).toString();
	int boshPort = parameters.value(QLatin1String("bosh-port"), -1).toInt();
	QString resource = parameters.value(QLatin1String("resource")).toString();
	int priority = parameters.value(QLatin1String("priority"), 30).toInt();
	
	Presence &presence = d->client->presence();
	presence.setPriority(priority);
	if (d->client->isConnected()) {
		d->hasChangedParameters = true;
		d->client->send(presence);
		if (d->client->server() != server)
			result << QLatin1String("connect-server");
		if (d->client->port() != port)
			result << QLatin1String("port");
		if (d->client->jid().resource() != resource)
			result << QLatin1String("resource");
	} else {
		JID jid = d->client->jid();
		jid.setResource(resource);
		d->client->setServer(port < 0 ? jid.domain() : server);
		d->client->setPort(port);
	}
	d->client->setPassword(password);
	
	if (!forced) {
		Config config = Account::config();
		config.setValue(QLatin1String("resource"), resource);
		config.setValue(QLatin1String("priority"), priority);
		config.setValue(QLatin1String("autoDetect"), port < 0);
		config.setValue(QLatin1String("server"), server);
		config.setValue(QLatin1String("port"), port);
		config.setValue(QLatin1String("passwd"), password, Config::Crypted);
		config.beginGroup(QLatin1String("bosh"));
		config.setValue(QLatin1String("use"), !boshServer.isEmpty());
		config.setValue(QLatin1String("server"), boshServer);
		config.setValue(QLatin1String("port"), boshPort);
		config.endGroup();
	}
	
	d->parameters = parameters;
	emit parametersChanged(d->parameters);
	return result;
}