1 /*
2     *
3     * This file is a part of Libcprime.
4     * Library for saving activites and bookmarks, share file and more.
5 	* Copyright 2019 CuboCore Group
6     *
7 
8     *
9     * This program is free software; you can redistribute it and/or modify
10     * it under the terms of the GNU General Public License as published by
11     * the Free Software Foundation; either version 3 of the License, or
12     * (at your option) any later version.
13     *
14 
15     *
16     * This program is distributed in the hope that it will be useful,
17     * but WITHOUT ANY WARRANTY; without even the implied warranty of
18     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19     * GNU General Public License for more details.
20     *
21 
22     *
23     * You should have received a copy of the GNU General Public License
24     * along with this program; if not, vsit http://www.gnu.org/licenses/.
25     *
26 */
27 
28 
29 #include <QSettings>
30 #include <QDateTime>
31 
32 #include "filefunc.h"
33 #include "variables.h"
34 #include "pinmanage.h"
35 
36 
PinManage()37 PinManage::PinManage()
38 {
39 	CPrime::FileUtils::setupFolder(CPrime::FolderSetup::ConfigFolder);
40 	pinSettings = new QSettings(CPrime::Variables::CC_PinsFilePath(), QSettings::NativeFormat);
41 }
42 
~PinManage()43 PinManage::~PinManage()
44 {
45 	delete pinSettings;
46 }
47 
getPinSections()48 QStringList PinManage::getPinSections()
49 {
50 	QStringList sections = pinSettings->childGroups();
51 	if (sections.isEmpty())
52 		addSection("Speed Dial");
53 
54 	return pinSettings->childKeys();
55 }
56 
getPinNames(const QString & sectionName)57 QStringList PinManage::getPinNames(const QString &sectionName)
58 {
59 	pinSettings->beginGroup(sectionName);
60 	QStringList list = pinSettings->childKeys();
61 	pinSettings->endGroup();
62 	return list;
63 }
64 
addSection(const QString & sectionName)65 void PinManage::addSection(const QString &sectionName)
66 {
67 	// Create a section on General group
68 	pinSettings->setValue(sectionName, 0); // '0' doesn't mean anything
69 	pinSettings->sync();
70 }
71 
addPin(const QString & sectionName,const QString & pinName,const QString & pinpath)72 void PinManage::addPin(const QString &sectionName, const QString &pinName, const QString &pinpath)
73 {
74 	QString value = pinpath + "\t\t\t" + QDateTime::currentDateTime().toString("hh.mm.ss - dd.MM.yyyy");
75 	pinSettings->setValue(QString("%1/%2").arg(sectionName).arg(pinName), value);
76 	pinSettings->sync();
77 }
78 
delSection(const QString & sectionName)79 void PinManage::delSection(const QString &sectionName)
80 {
81 	pinSettings->remove(sectionName);
82 	pinSettings->sync();
83 }
84 
delPin(const QString & pinName,const QString & section)85 void PinManage::delPin(const QString &pinName, const QString &section)
86 {
87 	pinSettings->remove(QString("%1/%2").arg(section).arg(pinName));
88 	pinSettings->sync();
89 }
90 
editPin(const QString & sectionName,const QString & pinName,const QString & pinpath)91 void PinManage::editPin(const QString &sectionName, const QString &pinName, const QString &pinpath)
92 {
93     addPin(sectionName, pinName, pinpath);
94 }
95 
changeAll(const QString & oldSectionName,const QString & oldpinName,const QString & sectionName,const QString & pinName,const QString & pinValue)96 void PinManage::changeAll(const QString &oldSectionName, const QString &oldpinName,
97 						  const QString &sectionName, const QString &pinName, const QString &pinValue)
98 {
99     delPin(oldpinName, oldSectionName);
100     addPin(sectionName, pinName, pinValue);
101 }
102 
pinPath(const QString & sectionName,const QString & pinName)103 QString PinManage::pinPath(const QString &sectionName, const QString &pinName)
104 {
105     QStringList values(pinValues(sectionName, pinName).split("\t\t\t"));
106     return values.at(0);
107 }
108 
piningTime(const QString & sectionName,const QString & pinName)109 QString PinManage::piningTime(const QString &sectionName, const QString &pinName)
110 {
111     QStringList values(pinValues(sectionName, pinName).split("\t\t\t"));
112     return values.at(1);
113 }
114 
checkingPinName(const QString & sectionName,const QString & pinName)115 QString PinManage::checkingPinName(const QString &sectionName, const QString &pinName)
116 {
117     if (getPinNames(sectionName).contains(pinName, Qt::CaseInsensitive)) {
118         return "Pin exists.";
119     } else {
120         return "";
121     }
122 }
123 
124 // Check on specific section
checkingPinPath(const QString & sectionn,const QString & pinpath)125 QString PinManage::checkingPinPath(const QString &sectionn, const QString &pinpath)
126 {
127 	Q_FOREACH (const QString &bName, getPinNames(sectionn)) {
128 		if (!pinpath.compare(pinPath(sectionn, bName))) {
129 			return QString("'%1' \nexists in %2 section.").arg(bName).arg(sectionn);
130 		}
131 	}
132 
133 	return "";
134 }
135 
136 // Check all section
checkingPinPathEx(const QString & pinpath)137 QString PinManage::checkingPinPathEx(const QString &pinpath)
138 {
139 	QString message;
140 	Q_FOREACH (const QString &section, getPinSections()) {
141 		message = checkingPinPath(section, pinpath);
142 		if (message.count())
143 			break;
144 	}
145 	return message;
146 }
147 
pinValues(const QString & sectionName,const QString & pinName) const148 QString PinManage::pinValues(const QString &sectionName, const QString &pinName) const
149 {
150 	return pinSettings->value(QString("%1/%2").arg(sectionName).arg(pinName)).toString();
151 }
152