Messagelib

inserttextfilejob.cpp
1 /*
2  * SPDX-FileCopyrightText: 2010 Thomas McGuire <[email protected]>
3  *
4  * SPDX-License-Identifier: LGPL-2.1-or-later
5  */
6 #include "inserttextfilejob.h"
7 
8 #include <QTextEdit>
9 
10 #include "messagecomposer_debug.h"
11 #include <KIO/Job>
12 
13 #include <QPointer>
14 #include <QStringDecoder>
15 
16 using namespace MessageComposer;
17 class MessageComposer::InsertTextFileJobPrivate
18 {
19 public:
20  InsertTextFileJobPrivate(QTextEdit *editor, const QUrl &url)
21  : mEditor(editor)
22  , mUrl(url)
23  {
24  }
25 
26  QPointer<QTextEdit> mEditor;
27  QUrl mUrl;
28  QString mEncoding;
29  QByteArray mFileData;
30 };
31 
32 InsertTextFileJob::InsertTextFileJob(QTextEdit *editor, const QUrl &url)
33  : KJob(editor)
34  , d(new MessageComposer::InsertTextFileJobPrivate(editor, url))
35 {
36 }
37 
38 InsertTextFileJob::~InsertTextFileJob() = default;
39 
40 void InsertTextFileJob::slotFileData(KIO::Job *job, const QByteArray &data)
41 {
42  Q_UNUSED(job)
43  d->mFileData += data;
44 }
45 
46 void InsertTextFileJob::slotGetJobFinished(KJob *job)
47 {
48  if (job->error()) {
49  qCWarning(MESSAGECOMPOSER_LOG) << job->errorString();
50  setError(job->error());
51  setErrorText(job->errorText());
52  emitResult();
53  return;
54  }
55 
56  if (d->mEditor) {
57  if (!d->mEncoding.isEmpty()) {
58  QStringDecoder fileCodec(d->mEncoding.toLatin1().constData());
59  if (fileCodec.isValid()) {
60  d->mEditor->textCursor().insertText(fileCodec.decode(d->mFileData.data()));
61  } else {
62  d->mEditor->textCursor().insertText(QString::fromLocal8Bit(d->mFileData.data()));
63  }
64  } else {
65  d->mEditor->textCursor().insertText(QString::fromLocal8Bit(d->mFileData.data()));
66  }
67  }
68 
69  emitResult();
70 }
71 
72 void InsertTextFileJob::setEncoding(const QString &encoding)
73 {
74  d->mEncoding = encoding;
75 }
76 
77 void InsertTextFileJob::start()
78 {
79  KIO::TransferJob *job = KIO::get(d->mUrl);
80  connect(job, &KIO::TransferJob::result, this, &InsertTextFileJob::slotGetJobFinished);
81  connect(job, &KIO::TransferJob::data, this, &InsertTextFileJob::slotFileData);
82  job->start();
83 }
84 
85 #include "moc_inserttextfilejob.cpp"
Simple interface that both EncryptJob and SignEncryptJob implement so the composer can extract some e...
void setErrorText(const QString &errorText)
virtual Q_SCRIPTABLE void start()=0
void result(KJob *job)
QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
QString fromLocal8Bit(const char *str, int size)
QString errorText() const
void emitResult()
virtual QString errorString() const
int error() const
void data(KIO::Job *job, const QByteArray &data)
void setError(int errorCode)
virtual QVariant get(ScriptableExtension *callerPrincipal, quint64 objId, const QString &propName)
This file is part of the KDE documentation.
Documentation copyright © 1996-2023 The KDE developers.
Generated on Tue Nov 28 2023 04:03:06 by doxygen 1.8.17 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.