1 /* 2 SPDX-FileCopyrightText: 2012-2021 Laurent Montel <montel@kde.org> 3 4 SPDX-License-Identifier: GPL-2.0-or-later 5 */ 6 7 #include "utils.h" 8 9 #include <MailCommon/MailUtil> 10 #include <PimCommon/PimUtil> 11 12 #include <QSettings> 13 14 #include <KLocalizedString> 15 #include <KZip> 16 #include <QTemporaryFile> 17 18 #include <Akonadi/AgentManager> 19 #include <QStandardPaths> 20 storeAddressbook()21QString Utils::storeAddressbook() 22 { 23 return QStringLiteral("backupaddressbook/"); 24 } 25 storeAlarm()26QString Utils::storeAlarm() 27 { 28 return QStringLiteral("backupalarm/"); 29 } 30 storeCalendar()31QString Utils::storeCalendar() 32 { 33 return QStringLiteral("backupcalendar/"); 34 } 35 backupnote()36QString Utils::backupnote() 37 { 38 return QStringLiteral("backupnote/"); 39 } 40 storeMails()41QString Utils::storeMails() 42 { 43 return QStringLiteral("backupmail/"); 44 } 45 exportDataTypeFileName()46QString Utils::exportDataTypeFileName() 47 { 48 return QStringLiteral("exportdatatype.xml"); 49 } 50 currentArchiveVersion()51int Utils::currentArchiveVersion() 52 { 53 // Increase it when we add major feature! 54 return 2; 55 } 56 transportsPath()57QString Utils::transportsPath() 58 { 59 return QStringLiteral("transports/"); 60 } 61 resourcesPath()62QString Utils::resourcesPath() 63 { 64 return QStringLiteral("resources/"); 65 } 66 identitiesPath()67QString Utils::identitiesPath() 68 { 69 return QStringLiteral("identities/"); 70 } 71 mailsPath()72QString Utils::mailsPath() 73 { 74 return QStringLiteral("mails/"); 75 } 76 configsPath()77QString Utils::configsPath() 78 { 79 return QStringLiteral("configs/"); 80 } 81 akonadiPath()82QString Utils::akonadiPath() 83 { 84 return QStringLiteral("akonadi/"); 85 } 86 dataPath()87QString Utils::dataPath() 88 { 89 return QStringLiteral("data/"); 90 } 91 calendarPath()92QString Utils::calendarPath() 93 { 94 return QStringLiteral("calendar/"); 95 } 96 addressbookPath()97QString Utils::addressbookPath() 98 { 99 return QStringLiteral("addressbook/"); 100 } 101 alarmPath()102QString Utils::alarmPath() 103 { 104 return QStringLiteral("alarm/"); 105 } 106 notePath()107QString Utils::notePath() 108 { 109 return QStringLiteral("note/"); 110 } 111 prefixAkonadiConfigFile()112QString Utils::prefixAkonadiConfigFile() 113 { 114 return QStringLiteral("agent_config_"); 115 } 116 infoPath()117QString Utils::infoPath() 118 { 119 return QStringLiteral("information/"); 120 } 121 akonadiAgentName(const QString & configPath)122QString Utils::akonadiAgentName(const QString &configPath) 123 { 124 QSettings settings(configPath, QSettings::IniFormat); 125 const QString name = settings.value(QStringLiteral("Agent/Name")).toString(); 126 return name; 127 } 128 openZip(const QString & filename,QString & errorMsg)129KZip *Utils::openZip(const QString &filename, QString &errorMsg) 130 { 131 KZip *zip = new KZip(filename); 132 const bool result = zip->open(QIODevice::ReadOnly); 133 if (!result) { 134 errorMsg = i18n("Archive cannot be opened in read mode."); 135 qCWarning(PIMDATAEXPORTERCORE_LOG) << "Impossible to open archive: " << filename << "zip error : " << zip->errorString(); 136 delete zip; 137 return nullptr; 138 } 139 return zip; 140 } 141 storeDataExportInfo(KZip * archive,const QString & exportInfoFileName)142void Utils::storeDataExportInfo(KZip *archive, const QString &exportInfoFileName) 143 { 144 if (!exportInfoFileName.isEmpty()) { 145 const bool fileAdded = archive->addLocalFile(exportInfoFileName, Utils::infoPath() + Utils::exportDataTypeFileName()); 146 if (!fileAdded) { 147 qCDebug(PIMDATAEXPORTERCORE_LOG) << "storeDataExportInfo can't add to archive" << Utils::infoPath() + Utils::exportDataTypeFileName(); 148 } 149 } 150 } 151 addVersion(KZip * archive)152void Utils::addVersion(KZip *archive) 153 { 154 QTemporaryFile tmp; 155 tmp.open(); 156 const bool fileAdded = archive->addLocalFile(tmp.fileName(), Utils::infoPath() + QStringLiteral("VERSION_%1").arg(currentArchiveVersion())); 157 if (!fileAdded) { 158 // TODO add i18n ? 159 qCDebug(PIMDATAEXPORTERCORE_LOG) << "version file can not add to archive"; 160 } 161 } 162 archiveVersion(KZip * archive)163int Utils::archiveVersion(KZip *archive) 164 { 165 const KArchiveEntry *informationFile = archive->directory()->entry(Utils::infoPath() + QStringLiteral("VERSION_2")); 166 if (informationFile && informationFile->isFile()) { 167 return 2; 168 } 169 informationFile = archive->directory()->entry(Utils::infoPath() + QStringLiteral("VERSION_1")); 170 if (informationFile && informationFile->isFile()) { 171 return 1; 172 } 173 // TODO add more version when new version 174 return 0; 175 } 176 appTypeToI18n(AppsType type)177QString Utils::appTypeToI18n(AppsType type) 178 { 179 switch (type) { 180 case KMail: 181 return i18n("KMail"); 182 case KAddressBook: 183 return i18n("KAddressBook"); 184 case KAlarm: 185 return i18n("KAlarm"); 186 case KOrganizer: 187 return i18n("KOrganizer"); 188 case KNotes: 189 return i18n("KNotes"); 190 case Akregator: 191 return i18n("Akregator"); 192 case Unknown: 193 break; 194 } 195 qCDebug(PIMDATAEXPORTERCORE_LOG) << " type unknown " << type; 196 return QString(); 197 } 198 storedTypeToI18n(StoredType type)199QString Utils::storedTypeToI18n(StoredType type) 200 { 201 switch (type) { 202 case None: 203 return QString(); 204 case Identity: 205 return i18n("Identity"); 206 case Mails: 207 return i18n("Mails"); 208 case MailTransport: 209 return i18n("Mail Transport"); 210 case Resources: 211 return i18n("Resources"); 212 case Config: 213 return i18n("Config"); 214 case Data: 215 return i18n("Data"); 216 } 217 qCDebug(PIMDATAEXPORTERCORE_LOG) << " type unknown " << type; 218 return QString(); 219 } 220 listOfResource()221QVector<Utils::AkonadiInstanceInfo> Utils::listOfResource() 222 { 223 QVector<Utils::AkonadiInstanceInfo> instanceInfoList; 224 Akonadi::AgentManager *manager = Akonadi::AgentManager::self(); 225 const Akonadi::AgentInstance::List list = manager->instances(); 226 instanceInfoList.reserve(list.count()); 227 for (const Akonadi::AgentInstance &agent : list) { 228 Utils::AkonadiInstanceInfo info; 229 info.identifier = agent.identifier(); 230 info.mimeTypes = agent.type().mimeTypes(); 231 info.capabilities = agent.type().capabilities(); 232 instanceInfoList.append(info); 233 } 234 return instanceInfoList; 235 } 236 resourceNoteArchiveName()237QString Utils::resourceNoteArchiveName() 238 { 239 return QStringLiteral("notes.zip"); 240 } 241 resourceAddressbookArchiveName()242QString Utils::resourceAddressbookArchiveName() 243 { 244 return QStringLiteral("addressbook.zip"); 245 } 246 resourceAlarmArchiveName()247QString Utils::resourceAlarmArchiveName() 248 { 249 return QStringLiteral("alarm.zip"); 250 } 251 resourceCalendarArchiveName()252QString Utils::resourceCalendarArchiveName() 253 { 254 return QStringLiteral("calendar.zip"); 255 } 256 resourceMailArchiveName()257QString Utils::resourceMailArchiveName() 258 { 259 return QStringLiteral("mail.zip"); 260 } 261