Pimcommon

pimutil.cpp
1/*******************************************************************************
2**
3** SPDX-FileCopyrightText: 2005 Till Adam <adam@kde.org>
4**
5** SPDX-License-Identifier: GPL-2.0-or-later
6**
7*******************************************************************************/
8
9#include "pimutil.h"
10
11#include "imapresourcesettings.h"
12
13#include <KEmailAddress>
14#include <KLocalizedString>
15#include <KMessageBox>
16#include <QDesktopServices>
17#include <QFileDialog>
18
19#include <QPointer>
20#include <QTextStream>
21#include <QUrlQuery>
22#include <QWidget>
23
24#include <cerrno>
25
26OrgKdeAkonadiImapSettingsInterface *PimCommon::Util::createImapSettingsInterface(const QString &ident)
27{
28 if (isImapResource(ident)) {
29 return new OrgKdeAkonadiImapSettingsInterface(QLatin1StringView("org.freedesktop.Akonadi.Resource.") + ident,
30 QStringLiteral("/Settings"),
32 } else {
33 return nullptr;
34 }
35}
36
37void PimCommon::Util::saveTextAs(const QString &text, const QString &filter, QWidget *parent, const QUrl &url, const QString &caption)
38{
39 QPointer<QFileDialog> fdlg(new QFileDialog(parent, QString(), url.path(), filter));
40 if (!caption.isEmpty()) {
41 fdlg->setWindowTitle(caption);
42 }
43 fdlg->setAcceptMode(QFileDialog::AcceptSave);
44 if (fdlg->exec() == QDialog::Accepted) {
45 const QString fileName = fdlg->selectedFiles().at(0);
46 if (!saveToFile(fileName, text)) {
47 KMessageBox::error(parent,
48 i18n("Could not write the file %1:\n"
49 "\"%2\" is the detailed error description.",
50 fileName,
51 QString::fromLocal8Bit(strerror(errno))),
52 i18nc("@title:window", "Save File Error"));
53 }
54 }
55 delete fdlg;
56}
57
58bool PimCommon::Util::saveToFile(const QString &filename, const QString &text)
59{
60 QFile file(filename);
61 if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
62 return false;
63 }
64 QTextStream out(&file);
65 out << text;
66 file.close();
67 return true;
68}
69
70QString PimCommon::Util::loadToFile(const QString &filter, QWidget *parent, const QUrl &url, const QString &caption)
71{
72 QPointer<QFileDialog> fdlg(new QFileDialog(parent, QString(), url.path(), filter));
73 if (!caption.isEmpty()) {
74 fdlg->setWindowTitle(caption);
75 }
76 fdlg->setAcceptDrops(QFileDialog::AcceptOpen);
77 QString result;
78 if (fdlg->exec() == QDialog::Accepted) {
79 const QString fileName = fdlg->selectedFiles().at(0);
80 QFile file(fileName);
81 if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
82 KMessageBox::error(parent,
83 i18n("Could not read the file %1:\n"
84 "\"%2\" is the detailed error description.",
85 fileName,
86 QString::fromLocal8Bit(strerror(errno))),
87 i18nc("@title:window", "Load File Error"));
88 } else {
89 result = QString::fromUtf8(file.readAll());
90 file.close();
91 }
92 }
93 delete fdlg;
94 return result;
95}
96
97bool PimCommon::Util::isImapResource(const QString &identifier)
98{
99 return identifier.startsWith(KOLAB_RESOURCE_IDENTIFIER) || identifier.startsWith(IMAP_RESOURCE_IDENTIFIER)
100 || identifier.startsWith(GMAIL_RESOURCE_IDENTIFIER);
101}
102
103QUrl PimCommon::Util::generateHelpUrl(const QString &docfile, const QString &anchor)
104{
105 QUrl generatedUrl;
106 if (!docfile.isEmpty()) {
107 QUrl url;
108 url = QUrl(QStringLiteral("help:/")).resolved(QUrl(docfile));
109 if (!anchor.isEmpty()) {
110 QUrlQuery query(url);
111 query.addQueryItem(QStringLiteral("anchor"), anchor);
112 url.setQuery(query);
113 }
114 generatedUrl = std::move(url);
115 }
116 return generatedUrl;
117}
118
119void PimCommon::Util::invokeHelp(const QString &docfile, const QString &anchor)
120{
121 const QUrl url = generateHelpUrl(docfile, anchor);
122 if (!url.isEmpty()) {
123 // launch khelpcenter, or a browser for URIs not handled by khelpcenter
125 }
126}
127
128QStringList PimCommon::Util::generateEmailList(const QStringList &list)
129{
130 QString str;
131 const auto numberOfElement{list.count()};
132 for (int i = 0; i < numberOfElement; i++) {
133 QString tmpStr = list.at(i);
134 if (!tmpStr.trimmed().isEmpty()) {
135 if (!str.isEmpty()) {
136 str.append(QLatin1StringView(", "));
137 }
138 str.append(tmpStr);
139 }
140 }
142 return emails;
143}
KCODECS_EXPORT QStringList splitAddressList(const QString &aStr)
QString i18nc(const char *context, const char *text, const TYPE &arg...)
QString i18n(const char *text, const TYPE &arg...)
KSERVICE_EXPORT KService::List query(FilterFunc filterFunc)
void error(QWidget *parent, const QString &text, const QString &title, const KGuiItem &buttonOk, Options options=Notify)
KIOCORE_EXPORT QStringList list(const QString &fileClass)
QDBusConnection sessionBus()
bool openUrl(const QUrl &url)
const_reference at(qsizetype i) const const
qsizetype count() const const
QString & append(QChar ch)
const QChar at(qsizetype position) const const
QString fromLocal8Bit(QByteArrayView str)
QString fromUtf8(QByteArrayView str)
bool isEmpty() const const
bool startsWith(QChar c, Qt::CaseSensitivity cs) const const
QString trimmed() const const
bool isEmpty() const const
QString path(ComponentFormattingOptions options) const const
QUrl resolved(const QUrl &relative) const const
void setQuery(const QString &query, ParsingMode mode)
This file is part of the KDE documentation.
Documentation copyright © 1996-2024 The KDE developers.
Generated on Tue Mar 26 2024 11:17:23 by doxygen 1.10.0 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.