File indexing completed on 2024-06-23 05:18:32
0001 /* 0002 * SPDX-FileCopyrightText: 2010 Thomas McGuire <mcguire@kde.org> 0003 * 0004 * SPDX-License-Identifier: LGPL-2.1-or-later 0005 */ 0006 #include "inserttextfilejob.h" 0007 0008 #include <QTextEdit> 0009 0010 #include "messagecomposer_debug.h" 0011 #include <KIO/TransferJob> 0012 0013 #include <QPointer> 0014 #include <QStringDecoder> 0015 0016 using namespace MessageComposer; 0017 class MessageComposer::InsertTextFileJobPrivate 0018 { 0019 public: 0020 InsertTextFileJobPrivate(QTextEdit *editor, const QUrl &url) 0021 : mEditor(editor) 0022 , mUrl(url) 0023 { 0024 } 0025 0026 QPointer<QTextEdit> mEditor; 0027 QUrl mUrl; 0028 QString mEncoding; 0029 QByteArray mFileData; 0030 }; 0031 0032 InsertTextFileJob::InsertTextFileJob(QTextEdit *editor, const QUrl &url) 0033 : KJob(editor) 0034 , d(new MessageComposer::InsertTextFileJobPrivate(editor, url)) 0035 { 0036 } 0037 0038 InsertTextFileJob::~InsertTextFileJob() = default; 0039 0040 void InsertTextFileJob::slotFileData(KIO::Job *job, const QByteArray &data) 0041 { 0042 Q_UNUSED(job) 0043 d->mFileData += data; 0044 } 0045 0046 void InsertTextFileJob::slotGetJobFinished(KJob *job) 0047 { 0048 if (job->error()) { 0049 qCWarning(MESSAGECOMPOSER_LOG) << job->errorString(); 0050 setError(job->error()); 0051 setErrorText(job->errorText()); 0052 emitResult(); 0053 return; 0054 } 0055 0056 if (d->mEditor) { 0057 if (!d->mEncoding.isEmpty()) { 0058 QStringDecoder fileCodec(d->mEncoding.toLatin1().constData()); 0059 if (fileCodec.isValid()) { 0060 d->mEditor->textCursor().insertText(fileCodec.decode(d->mFileData.data())); 0061 } else { 0062 d->mEditor->textCursor().insertText(QString::fromLocal8Bit(d->mFileData.data())); 0063 } 0064 } else { 0065 d->mEditor->textCursor().insertText(QString::fromLocal8Bit(d->mFileData.data())); 0066 } 0067 } 0068 0069 emitResult(); 0070 } 0071 0072 void InsertTextFileJob::setEncoding(const QString &encoding) 0073 { 0074 d->mEncoding = encoding; 0075 } 0076 0077 void InsertTextFileJob::start() 0078 { 0079 KIO::TransferJob *job = KIO::get(d->mUrl); 0080 connect(job, &KIO::TransferJob::result, this, &InsertTextFileJob::slotGetJobFinished); 0081 connect(job, &KIO::TransferJob::data, this, &InsertTextFileJob::slotFileData); 0082 job->start(); 0083 } 0084 0085 #include "moc_inserttextfilejob.cpp"