Refactor Addressbook
This commit is contained in:
@@ -18,22 +18,23 @@ AddressBookModel::~AddressBookModel() {
|
||||
}
|
||||
|
||||
void AddressBookModel::saveData() {
|
||||
AddressBook::writeToStorage(labels);
|
||||
|
||||
// Save column positions
|
||||
QSettings().setValue("addresstablegeometry", parent->horizontalHeader()->saveState());
|
||||
}
|
||||
|
||||
|
||||
void AddressBookModel::loadData() {
|
||||
labels = AddressBook::readFromStorage();
|
||||
labels = AddressBook::getInstance()->getAllAddressLabels();
|
||||
|
||||
parent->horizontalHeader()->restoreState(QSettings().value("addresstablegeometry").toByteArray());
|
||||
}
|
||||
|
||||
void AddressBookModel::addNewLabel(QString label, QString addr) {
|
||||
labels.push_back(QPair<QString, QString>(label, addr));
|
||||
AddressBook::writeToStorage(labels);
|
||||
//labels.push_back(QPair<QString, QString>(label, addr));
|
||||
AddressBook::getInstance()->addAddressLabel(label, addr);
|
||||
|
||||
labels.clear();
|
||||
labels = AddressBook::getInstance()->getAllAddressLabels();
|
||||
|
||||
dataChanged(index(0, 0), index(labels.size()-1, columnCount(index(0,0))-1));
|
||||
layoutChanged();
|
||||
@@ -43,9 +44,10 @@ void AddressBookModel::removeItemAt(int row) {
|
||||
if (row >= labels.size())
|
||||
return;
|
||||
|
||||
labels.removeAt(row);
|
||||
AddressBook::writeToStorage(labels);
|
||||
|
||||
AddressBook::getInstance()->removeAddressLabel(labels[row].first, labels[row].second);
|
||||
|
||||
labels.clear();
|
||||
labels = AddressBook::getInstance()->getAllAddressLabels();
|
||||
|
||||
dataChanged(index(0, 0), index(labels.size()-1, columnCount(index(0,0))-1));
|
||||
layoutChanged();
|
||||
@@ -86,6 +88,10 @@ QVariant AddressBookModel::headerData(int section, Qt::Orientation orientation,
|
||||
return QVariant();
|
||||
}
|
||||
|
||||
|
||||
//===============
|
||||
// AddressBook
|
||||
//===============
|
||||
void AddressBook::open(MainWindow* parent, QLineEdit* target) {
|
||||
QDialog d(parent);
|
||||
Ui_addressBook ab;
|
||||
@@ -180,31 +186,41 @@ void AddressBook::open(MainWindow* parent, QLineEdit* target) {
|
||||
};
|
||||
}
|
||||
|
||||
QList<QPair<QString, QString>> AddressBook::readFromStorage() {
|
||||
//=============
|
||||
// AddressBook singleton class
|
||||
//=============
|
||||
AddressBook* AddressBook::getInstance() {
|
||||
if (!instance)
|
||||
instance = new AddressBook();
|
||||
|
||||
return instance;
|
||||
}
|
||||
|
||||
AddressBook::AddressBook() {
|
||||
readFromStorage();
|
||||
}
|
||||
|
||||
void AddressBook::readFromStorage() {
|
||||
QFile file(AddressBook::writeableFile());
|
||||
|
||||
QList<QPair<QString, QString>> labels;
|
||||
|
||||
if (!file.exists()) {
|
||||
return labels;
|
||||
return;
|
||||
}
|
||||
|
||||
allLabels.clear();
|
||||
file.open(QIODevice::ReadOnly);
|
||||
QDataStream in(&file); // read the data serialized from the file
|
||||
QString version;
|
||||
in >> version >> labels;
|
||||
in >> version >> allLabels;
|
||||
|
||||
file.close();
|
||||
|
||||
return labels;
|
||||
}
|
||||
|
||||
|
||||
void AddressBook::writeToStorage(QList<QPair<QString, QString>> labels) {
|
||||
void AddressBook::writeToStorage() {
|
||||
QFile file(AddressBook::writeableFile());
|
||||
file.open(QIODevice::ReadWrite | QIODevice::Truncate);
|
||||
QDataStream out(&file); // we will serialize the data into the file
|
||||
out << QString("v1") << labels;
|
||||
out << QString("v1") << allLabels;
|
||||
file.close();
|
||||
}
|
||||
|
||||
@@ -221,3 +237,40 @@ QString AddressBook::writeableFile() {
|
||||
return dir.filePath(filename);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Add a new address/label to the database
|
||||
void AddressBook::addAddressLabel(QString label, QString address) {
|
||||
Q_ASSERT(Settings::isValidAddress(address));
|
||||
|
||||
allLabels.push_back(QPair<QString, QString>(label, address));
|
||||
writeToStorage();
|
||||
}
|
||||
|
||||
// Remove a new address/label from the database
|
||||
void AddressBook::removeAddressLabel(QString label, QString address) {
|
||||
// Iterate over the list and remove the label/address
|
||||
for (int i=0; i < allLabels.size(); i++) {
|
||||
if (allLabels[i].first == label && allLabels[i].second == address)
|
||||
allLabels.removeAt(i);
|
||||
writeToStorage();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// Read all addresses
|
||||
const QList<QPair<QString, QString>>& AddressBook::getAllAddressLabels() {
|
||||
return allLabels;
|
||||
}
|
||||
|
||||
// Get the label for an address
|
||||
QString AddressBook::getLabelForAddress(QString addr) {
|
||||
for (auto i : allLabels) {
|
||||
if (i.second == addr)
|
||||
return i.first;
|
||||
}
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
AddressBook* AddressBook::instance = nullptr;
|
||||
Reference in New Issue
Block a user