provide a new Layouts::Storage singleton
--this class will be the replacement for layout::storage and will be responsible for any containment actions for all layouts either loaded or offloaded. Through this refactor loading and checking CentralLayouts should become lighter and also memory efficientpull/19/head
parent
9ff834ccae
commit
d97fe4c59c
@ -0,0 +1,107 @@
|
||||
/*
|
||||
* Copyright 2020 Michail Vourlakos <mvourlakos@gmail.com>
|
||||
*
|
||||
* This file is part of Latte-Dock
|
||||
*
|
||||
* Latte-Dock is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* Latte-Dock is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "storage.h"
|
||||
|
||||
// local
|
||||
#include "../layout/storage.h"
|
||||
|
||||
// Qt
|
||||
#include <QDebug>
|
||||
#include <QDir>
|
||||
#include <QFile>
|
||||
#include <QFileInfo>
|
||||
|
||||
// KDE
|
||||
#include <KConfigGroup>
|
||||
#include <KSharedConfig>
|
||||
|
||||
// Plasma
|
||||
#include <Plasma>
|
||||
#include <Plasma/Applet>
|
||||
#include <Plasma/Containment>
|
||||
|
||||
namespace Latte {
|
||||
namespace Layouts {
|
||||
|
||||
Storage::Storage()
|
||||
{
|
||||
qDebug() << " >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> LAYOUTS::STORAGE, TEMP DIR ::: " << m_storageTmpDir.path();
|
||||
}
|
||||
|
||||
Storage::~Storage()
|
||||
{
|
||||
}
|
||||
|
||||
Storage *Storage::self()
|
||||
{
|
||||
static Storage store;
|
||||
return &store;
|
||||
}
|
||||
|
||||
bool Storage::isWritable(const Layout::GenericLayout *layout) const
|
||||
{
|
||||
QFileInfo layoutFileInfo(layout->file());
|
||||
|
||||
if (layoutFileInfo.exists() && !layoutFileInfo.isWritable()) {
|
||||
return false;
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
bool Storage::isLatteContainment(Plasma::Containment *containment) const
|
||||
{
|
||||
if (!containment) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (containment->pluginMetaData().pluginId() == "org.kde.latte.containment") {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Storage::isLatteContainment(const KConfigGroup &group) const
|
||||
{
|
||||
QString pluginId = group.readEntry("plugin", "");
|
||||
return pluginId == "org.kde.latte.containment";
|
||||
}
|
||||
|
||||
void Storage::lock(Layout::GenericLayout *layout) const
|
||||
{
|
||||
QFileInfo layoutFileInfo(layout->file());
|
||||
|
||||
if (layoutFileInfo.exists() && layoutFileInfo.isWritable()) {
|
||||
QFile(layout->file()).setPermissions(QFileDevice::ReadUser | QFileDevice::ReadGroup | QFileDevice::ReadOther);
|
||||
}
|
||||
}
|
||||
|
||||
void Storage::unlock(Layout::GenericLayout *layout) const
|
||||
{
|
||||
QFileInfo layoutFileInfo(layout->file());
|
||||
|
||||
if (layoutFileInfo.exists() && !layoutFileInfo.isWritable()) {
|
||||
QFile(layout->file()).setPermissions(QFileDevice::ReadUser | QFileDevice::WriteUser | QFileDevice::ReadGroup | QFileDevice::ReadOther);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -0,0 +1,66 @@
|
||||
/*
|
||||
* Copyright 2020 Michail Vourlakos <mvourlakos@gmail.com>
|
||||
*
|
||||
* This file is part of Latte-Dock
|
||||
*
|
||||
* Latte-Dock is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* Latte-Dock is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef LAYOUTSSTORAGE_H
|
||||
#define LAYOUTSSTORAGE_H
|
||||
|
||||
// Qt
|
||||
#include <QTemporaryDir>
|
||||
|
||||
// KDE
|
||||
#include <KConfigGroup>
|
||||
|
||||
// Plasma
|
||||
#include <Plasma/Containment>
|
||||
|
||||
namespace Latte {
|
||||
namespace Layout {
|
||||
class GenericLayout;
|
||||
}
|
||||
}
|
||||
|
||||
namespace Latte {
|
||||
namespace Layouts {
|
||||
|
||||
class Storage
|
||||
{
|
||||
|
||||
public:
|
||||
static Storage *self();
|
||||
~Storage();
|
||||
|
||||
bool isWritable(const Layout::GenericLayout *layout) const;
|
||||
bool isLatteContainment(Plasma::Containment *containment) const;
|
||||
bool isLatteContainment(const KConfigGroup &group) const;
|
||||
|
||||
void lock(Layout::GenericLayout *layout) const; //! make it only read-only
|
||||
void unlock(Layout::GenericLayout *layout) const; //! make it writable which it should be the default
|
||||
|
||||
private:
|
||||
Storage();
|
||||
|
||||
private:
|
||||
QTemporaryDir m_storageTmpDir;
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue