Changeset 160:0d5fc1d6adc5 in SMSSender


Ignore:
Timestamp:
Dec 27, 2011 4:07:02 PM (9 years ago)
Author:
Sämy Zehnder <saemy.zehnder@…>
Branch:
default
Message:
  • When editing contacts, names which appear multiple times for the same contact are removed.
  • Names which are already assigned to contacts with a different number are adjusted when importing contacts. [Fixes #54]
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • lib/datatypes/src/scontact.cpp

    r148 r160  
    5454void SContact::setName(const QString& name){
    5555    SET_IF_DIFFERENT(name_, name.trimmed());
     56    aliases_.removeAll(name_);
    5657    emit dataChanged();
    5758}
     
    6263void SContact::setAliases(const QStringList& aliases){
    6364    SET_IF_DIFFERENT(aliases_, aliases);
     65    aliases_.removeDuplicates();
     66    aliases_.removeAll(name());
    6467    aliases_.sort();
    6568    emit dataChanged();
  • src/ui/vceditcontact/vceditcontact.cpp

    r111 r160  
    199199    }
    200200
    201     if ((ui.lstAliases->selectedItems().first()->text().trimmed() == "") ||
     201    /*if ((ui.lstAliases->selectedItems().first()->text().trimmed() == "") ||
    202202        (QMessageBox::Yes == QMessageBox::warning(this, tr("SMSSender"),
    203203                                                  tr("Do you really want to remove this alias?"),
    204204                                                  QMessageBox::Yes,
    205                                                   QMessageBox::No | QMessageBox::Default | QMessageBox::Escape))){
     205                                                  QMessageBox::No | QMessageBox::Default | QMessageBox::Escape))){*/
    206206        // Remove it from the list
    207207        ui.lstAliases->takeItem(ui.lstAliases->row(ui.lstAliases->selectedItems().first()));
    208     }
     208    /*}*/
    209209}
    210210
  • src/ui/vcimportcontacts/vcimportcontacts_page_import.cpp

    r129 r160  
    3838void VCImportContactsPageImport::initializePage() {
    3939    importedContacts_.clear();
     40
     41    namesAdjusted_ = false;
    4042
    4143    existingContacts_.clear();
     
    8183
    8284void VCImportContactsPageImport::addImportedContact(SContact* contact) {
     85    if (!contact->number().isValid()) {
     86        return;
     87    }
     88
    8389    QString number = contact->number().toString();
    8490
     
    114120void VCImportContactsPageImport::_addImportedContact(SContact* contact) {
    115121    QString number = contact->number().toString();
     122
     123    // Make the names unique, since already used names are very bad!
     124    adjustNames(contact);
    116125
    117126    // Save a list of the names of this contact
     
    158167}
    159168
     169void VCImportContactsPageImport::adjustNames(SContact* contact) {
     170    // List all contacts
     171    QList<SContact*> contacts = existingContacts_.values();
     172    contacts.append(importedContacts_.values());
     173
     174    // List all used names
     175    QStringList usedNames;
     176    foreach (SContact* c, existingContacts_) {
     177        if (contact->number() != c->number()) { // Do not check our own names
     178            usedNames.append(c->name().toLower());
     179            foreach (QString alias, c->aliases()) {
     180                usedNames.append(alias.toLower());
     181            }
     182        }
     183    }
     184
     185    // Change the names which are already in use
     186    contact->setName(getUnusedName(contact->name(), usedNames));
     187    QStringList aliases;
     188    foreach (QString alias, contact->aliases()) {
     189        aliases.append(getUnusedName(alias, usedNames));
     190    }
     191    contact->setAliases(aliases);
     192}
     193QString VCImportContactsPageImport::getUnusedName(const QString& originalName, const QStringList& usedNames) {
     194    QString name = originalName;
     195    int altId = 1;
     196    while (usedNames.contains(name.toLower())) {
     197        namesAdjusted_ = true;
     198        name = QString("%1 [%2]").arg(originalName).arg(altId++);
     199    }
     200    return name;
     201}
     202
    160203bool VCImportContactsPageImport::isComplete() const {
    161204    return runningThreads_ == 0;
    162205}
    163206
     207bool VCImportContactsPageImport::validatePage() {
     208    if (namesAdjusted_) {
     209        QMessageBox::warning(this, tr("Names adjusted"),
     210                                tr("Some contact names were already in use and have been adjusted."),
     211                                QMessageBox::Ok, QMessageBox::Ok);
     212    }
     213    return true;
     214}
    164215
    165216
  • src/ui/vcimportcontacts/vcimportcontacts_page_import.h

    r111 r160  
    3939    void initializePage();
    4040    bool isComplete() const;
     41    bool validatePage();
    4142
    4243private:
    4344    void addImportedContact(SContact* contact);
    4445    void _addImportedContact(SContact* contact);
     46
     47    void adjustNames(SContact* contact);
     48    QString getUnusedName(const QString& originalName, const QStringList& usedNames);
    4549
    4650private:
     
    5256    QMap<QString, SContact*> importedContacts_;
    5357    int  runningThreads_;
     58
     59    bool namesAdjusted_;
    5460
    5561    QMutex mutex_;
Note: See TracChangeset for help on using the changeset viewer.