simplify shares map create/sync in settings window

pull/11/head
Michail Vourlakos 5 years ago
parent 4de91c535c
commit 4437472fa9

@ -127,6 +127,38 @@ const Layout LayoutsTable::operator[](const uint &index) const
return m_layouts[index]; return m_layouts[index];
} }
QStringList LayoutsTable::allSharesIds() const
{
QStringList sharesIds;
for(int i=0; i<m_layouts.count(); ++i) {
if (m_layouts[i].isShared()) {
for(int j=0; j<m_layouts[i].shares.count(); ++j) {
sharesIds << m_layouts[i].shares[j];
}
}
}
return sharesIds;
}
QStringList LayoutsTable::allSharesNames() const
{
QStringList sharesNames;
for(int i=0; i<m_layouts.count(); ++i) {
if (m_layouts[i].isShared()) {
for(int j=0; j<m_layouts[i].shares.count(); ++j) {
QString shareId = m_layouts[i].shares[j];
int sid = indexOf(shareId);
sharesNames << m_layouts[sid].editedName();
}
}
}
return sharesNames;
}
LayoutsTable LayoutsTable::subtracted(const LayoutsTable &rhs) const LayoutsTable LayoutsTable::subtracted(const LayoutsTable &rhs) const
{ {
LayoutsTable subtract; LayoutsTable subtract;
@ -144,6 +176,26 @@ LayoutsTable LayoutsTable::subtracted(const LayoutsTable &rhs) const
return subtract; return subtract;
} }
Latte::Layouts::SharesMap LayoutsTable::sharesMap() const
{
Latte::Layouts::SharesMap map;
for(int i=0; i<m_layouts.count(); ++i) {
if (m_layouts[i].isShared()) {
QStringList sharesNames;
for(int j=0; j<m_layouts[i].shares.count(); ++j) {
QString shareId = m_layouts[i].shares[j];
int sid = indexOf(shareId);
sharesNames << m_layouts[sid].editedName();
}
map[m_layouts[i].editedName()] = sharesNames;
}
}
return map;
}
bool LayoutsTable::contains(const QString &id) const bool LayoutsTable::contains(const QString &id) const
{ {

@ -21,8 +21,11 @@
#ifndef SETTINGSDATALAYOUTSTABLE_H #ifndef SETTINGSDATALAYOUTSTABLE_H
#define SETTINGSDATALAYOUTSTABLE_H #define SETTINGSDATALAYOUTSTABLE_H
// local
#include "layoutdata.h" #include "layoutdata.h"
#include "../../layouts/synchronizer.h"
// Qt
#include <QList> #include <QList>
namespace Latte { namespace Latte {
@ -50,6 +53,10 @@ public:
LayoutsTable subtracted(const LayoutsTable &rhs) const; LayoutsTable subtracted(const LayoutsTable &rhs) const;
QStringList allSharesIds() const;
QStringList allSharesNames() const;
Latte::Layouts::SharesMap sharesMap() const;
bool contains(const QString &id) const; bool contains(const QString &id) const;
bool rowExists(const int &row) const; bool rowExists(const int &row) const;

@ -40,6 +40,7 @@
#include "delegates/checkboxdelegate.h" #include "delegates/checkboxdelegate.h"
#include "delegates/layoutnamedelegate.h" #include "delegates/layoutnamedelegate.h"
#include "delegates/shareddelegate.h" #include "delegates/shareddelegate.h"
#include "tools/settingstools.h"
// Qt // Qt
#include <QButtonGroup> #include <QButtonGroup>
@ -944,7 +945,11 @@ void SettingsDialog::addLayoutForFile(QString file, QString layoutName, bool new
void SettingsDialog::loadSettings() void SettingsDialog::loadSettings()
{ {
m_model->clear(); m_model->clear();
m_sharesMap.clear();
//! The shares map needs to be constructed for start/scratch.
//! We start feeding information with layout_names and during the process
//! we update them to valid layout_ids
Layouts::SharesMap sharesMap;
int i = 0; int i = 0;
QStringList brokenLayouts; QStringList brokenLayouts;
@ -981,7 +986,7 @@ void SettingsDialog::loadSettings()
//! create initial SHARES maps //! create initial SHARES maps
QString shared = central->sharedLayoutName(); QString shared = central->sharedLayoutName();
if (!shared.isEmpty()) { if (!shared.isEmpty()) {
m_sharesMap[shared].append(original.id); sharesMap[shared].append(original.id);
} }
layoutsBuffer << original; layoutsBuffer << original;
@ -1001,26 +1006,26 @@ void SettingsDialog::loadSettings()
QStringList tempSharedNames; QStringList tempSharedNames;
//! remove these records after updating //! remove these records after updating
for (QHash<const QString, QStringList>::iterator i=m_sharesMap.begin(); i!=m_sharesMap.end(); ++i) { for (QHash<const QString, QStringList>::iterator i=sharesMap.begin(); i!=sharesMap.end(); ++i) {
tempSharedNames << i.key(); tempSharedNames << i.key();
} }
//! update keys //! update keys
for (QHash<const QString, QStringList>::iterator i=m_sharesMap.begin(); i!=m_sharesMap.end(); ++i) { for (QHash<const QString, QStringList>::iterator i=sharesMap.begin(); i!=sharesMap.end(); ++i) {
QString shareid = layoutsBuffer.idForOriginalName(i.key()); QString shareid = layoutsBuffer.idForOriginalName(i.key());
if (!shareid.isEmpty()) { if (!shareid.isEmpty()) {
m_sharesMap[shareid] = i.value(); sharesMap[shareid] = i.value();
} }
} }
//! remove deprecated keys //! remove deprecated keys
for (const auto &key : tempSharedNames) { for (const auto &key : tempSharedNames) {
m_sharesMap.remove(key); sharesMap.remove(key);
} }
qDebug() << "SHARES MAP ::: " << m_sharesMap; qDebug() << "SHARES MAP ::: " << sharesMap;
for (QHash<const QString, QStringList>::iterator i=m_sharesMap.begin(); i!=m_sharesMap.end(); ++i) { for (QHash<const QString, QStringList>::iterator i=sharesMap.begin(); i!=sharesMap.end(); ++i) {
layoutsBuffer[i.key()].shares = i.value(); layoutsBuffer[i.key()].shares = i.value();
} }
@ -1626,42 +1631,29 @@ void SettingsDialog::syncActiveShares()
return; return;
} }
QHash<const QString, QStringList> currentSharesIdMap; Settings::Data::LayoutsTable currentLayoutsData = m_model->currentData();
Layouts::SharesMap currentSharesNamesMap;
for (int i = 0; i < m_model->rowCount(); ++i) { Layouts::SharesMap currentSharesNamesMap = currentLayoutsData.sharesMap();
if (isShared(i)) { QStringList originalSharesIds = o_layoutsOriginalData.allSharesIds();
QString id = m_model->data(m_model->index(i, IDCOLUMN), Qt::DisplayRole).toString(); QStringList currentSharesIds = currentLayoutsData.allSharesIds();
QString name = m_model->data(m_model->index(i, NAMECOLUMN), Qt::DisplayRole).toString();
QStringList shareIds = m_model->data(m_model->index(i, SHAREDCOLUMN), Qt::UserRole).toStringList();
QStringList shareNames;
for (const auto &shareid : shareIds) { QStringList deprecatedSharesIds = Latte::subtracted(originalSharesIds, currentSharesIds);
QString shareName = nameForId(shareid); QStringList deprecatedSharesNames;
shareNames << shareName;
}
currentSharesIdMap[id] = shareIds; for(int i=0; i<deprecatedSharesIds.count(); ++i) {
currentSharesNamesMap[name] = shareNames; QString shareId = deprecatedSharesIds[i];
}
}
QStringList deprecatedShares; if (currentLayoutsData.contains(shareId)) {
deprecatedSharesNames << currentLayoutsData[shareId].editedName();
for (const auto &oldSharesIds : m_sharesMap) { } else if (o_layoutsOriginalData.contains(shareId)) {
for(const auto &oldId : oldSharesIds) { deprecatedSharesNames << o_layoutsOriginalData[shareId].editedName();
QString oldShareName = nameForId(oldId);
if (!m_corona->layoutsManager()->synchronizer()->mapHasRecord(oldShareName, currentSharesNamesMap)) {
deprecatedShares << oldShareName;
}
} }
} }
qDebug() << " CURRENT SHARES ID MAP :: " << currentSharesIdMap; qDebug() << " CURRENT SHARES NAMES MAP :: " << currentSharesNamesMap;
m_corona->layoutsManager()->synchronizer()->syncActiveShares(currentSharesNamesMap, deprecatedShares); qDebug() << " DEPRECATED SHARES ::";
m_sharesMap.clear(); m_corona->layoutsManager()->synchronizer()->syncActiveShares(currentSharesNamesMap, deprecatedSharesNames);
m_sharesMap = currentSharesIdMap;
} }
bool SettingsDialog::idExistsInModel(QString id) bool SettingsDialog::idExistsInModel(QString id)

@ -157,8 +157,6 @@ private:
Settings::Controller::Layouts *m_layoutsController{nullptr}; Settings::Controller::Layouts *m_layoutsController{nullptr};
Ui::SettingsDialog *ui; Ui::SettingsDialog *ui;
//! SharedLayout #settingsid, Shares #settingsid
QHash<const QString, QStringList> m_sharesMap;
QHash<const QString, Latte::CentralLayout *> m_layouts; QHash<const QString, Latte::CentralLayout *> m_layouts;
QList<int> o_settingsOriginalData; QList<int> o_settingsOriginalData;

@ -43,4 +43,17 @@ QPalette::ColorGroup colorGroup(const QStyleOptionViewItem &option)
} }
} }
QStringList subtracted(const QStringList &original, const QStringList &current)
{
QStringList subtract;
for(int i=0; i<original.count(); ++i) {
if (!current.contains(original[i])) {
subtract << original[i];
}
}
return subtract;
}
} }

@ -30,6 +30,10 @@ namespace Latte {
bool isSelected(const QStyleOptionViewItem &option); bool isSelected(const QStyleOptionViewItem &option);
QPalette::ColorGroup colorGroup(const QStyleOptionViewItem &option); QPalette::ColorGroup colorGroup(const QStyleOptionViewItem &option);
//! strings that even though they were initially at original list
//! now they are not present to current list
QStringList subtracted(const QStringList &original, const QStringList &current);
} }
#endif #endif

Loading…
Cancel
Save