void CoreAccountModel::update(const CoreAccountModel *other) {
clear();
- beginInsertRows(QModelIndex(), 0, other->_accounts.count() -1);
+ if (other->_accounts.count() > 0) {
+ beginInsertRows(QModelIndex(), 0, other->_accounts.count() -1);
+ _accounts = other->_accounts;
+ endInsertRows();
+ }
_internalAccount = other->internalAccount();
- _accounts = other->_accounts;
- endInsertRows();
+ _removedAccounts = other->_removedAccounts;
}
void CoreAccountModel::load() {
// Make sure we have an internal account in monolithic mode
CoreAccount intAcc;
intAcc.setInternal(true);
- insertAccount(intAcc);
+ intAcc.setAccountName(tr("Internal Core"));
+ _internalAccount = createOrUpdateAccount(intAcc);
}
}
void CoreAccountModel::save() {
CoreAccountSettings s;
+ foreach(AccountId id, _removedAccounts) {
+ s.removeAccount(id);
+ }
+ _removedAccounts.clear();
foreach(const CoreAccount &acc, accounts()) {
- if(acc.isInternal())
- continue; // FIXME don't save internal for now - but make sure to handle this correctly once mono can do remotes!
- // we'll have to ensure that autoConnectAccount works with internal as well then
- QVariantMap map = acc.toVariantMap(true); // TODO Hook into kwallet/password saving stuff
+ QVariantMap map = acc.toVariantMap(false); // TODO Hook into kwallet/password saving stuff
s.storeAccountData(acc.accountId(), map);
}
}
AccountId newId = 0;
const QList<AccountId> &ids = accountIds();
for(int i = 1; ; i++) {
- if(!ids.contains(i)) {
+ if(!_removedAccounts.contains(i) && !ids.contains(i)) {
newId = i;
break;
}
void CoreAccountModel::insertAccount(const CoreAccount &acc) {
if(acc.isInternal()) {
- if(Quassel::runMode() == Quassel::Monolithic)
- return;
if(internalAccount().isValid()) {
qWarning() << "Trying to insert a second internal account in CoreAccountModel, ignoring";
return;
void CoreAccountModel::removeAccount(AccountId accId) {
takeAccount(accId);
+ _removedAccounts.insert(accId);
}
QModelIndex CoreAccountModel::accountIndex(AccountId accId) const {