summaryrefslogtreecommitdiff
path: root/transferengine-plugins/mastodontransferplugin
diff options
context:
space:
mode:
Diffstat (limited to 'transferengine-plugins/mastodontransferplugin')
-rw-r--r--transferengine-plugins/mastodontransferplugin/mastodonapi.cpp28
-rw-r--r--transferengine-plugins/mastodontransferplugin/mastodonapi.h5
-rw-r--r--transferengine-plugins/mastodontransferplugin/mastodonuploader.cpp70
-rw-r--r--transferengine-plugins/mastodontransferplugin/mastodonuploader.h2
4 files changed, 86 insertions, 19 deletions
diff --git a/transferengine-plugins/mastodontransferplugin/mastodonapi.cpp b/transferengine-plugins/mastodontransferplugin/mastodonapi.cpp
index a4b40a9..c12182f 100644
--- a/transferengine-plugins/mastodontransferplugin/mastodonapi.cpp
+++ b/transferengine-plugins/mastodontransferplugin/mastodonapi.cpp
@@ -108,10 +108,26 @@ bool MastodonApi::uploadImage(const QString &filePath,
return true;
}
-bool MastodonApi::postStatus(const QString &mediaId)
+bool MastodonApi::postStatus(const QString &statusText,
+ const QString &apiHost,
+ const QString &accessToken)
{
- if (mediaId.isEmpty()) {
- qWarning() << Q_FUNC_INFO << "media id is empty";
+ m_apiHost = normalizeApiHost(apiHost);
+ m_accessToken = accessToken;
+ m_statusText = statusText;
+
+ if (m_accessToken.isEmpty()) {
+ qWarning() << Q_FUNC_INFO << "missing access token";
+ return false;
+ }
+
+ return postStatusInternal(QString());
+}
+
+bool MastodonApi::postStatusInternal(const QString &mediaId)
+{
+ if (m_statusText.trimmed().isEmpty() && mediaId.isEmpty()) {
+ qWarning() << Q_FUNC_INFO << "status and media id are empty";
return false;
}
@@ -119,7 +135,9 @@ bool MastodonApi::postStatus(const QString &mediaId)
if (!m_statusText.isEmpty()) {
query.addQueryItem(QStringLiteral("status"), m_statusText);
}
- query.addQueryItem(QStringLiteral("media_ids[]"), mediaId);
+ if (!mediaId.isEmpty()) {
+ query.addQueryItem(QStringLiteral("media_ids[]"), mediaId);
+ }
const QByteArray postData = query.query(QUrl::FullyEncoded).toUtf8();
@@ -202,7 +220,7 @@ void MastodonApi::finished()
}
}
- if (!postStatus(mediaId)) {
+ if (!postStatusInternal(mediaId)) {
qWarning() << Q_FUNC_INFO << "unable to create mastodon status";
emit transferError();
}
diff --git a/transferengine-plugins/mastodontransferplugin/mastodonapi.h b/transferengine-plugins/mastodontransferplugin/mastodonapi.h
index 0ec3653..772ce89 100644
--- a/transferengine-plugins/mastodontransferplugin/mastodonapi.h
+++ b/transferengine-plugins/mastodontransferplugin/mastodonapi.h
@@ -26,6 +26,9 @@ public:
const QString &mimeType,
const QString &apiHost,
const QString &accessToken);
+ bool postStatus(const QString &statusText,
+ const QString &apiHost,
+ const QString &accessToken);
void cancelUpload();
@@ -43,7 +46,7 @@ private Q_SLOTS:
private:
static QString normalizeApiHost(const QString &rawHost);
- bool postStatus(const QString &mediaId);
+ bool postStatusInternal(const QString &mediaId);
void finishTransfer(QNetworkReply::NetworkError error, int httpCode, const QByteArray &data);
QMap<QNetworkReply*, API_CALL> m_replies;
diff --git a/transferengine-plugins/mastodontransferplugin/mastodonuploader.cpp b/transferengine-plugins/mastodontransferplugin/mastodonuploader.cpp
index d85e138..050df18 100644
--- a/transferengine-plugins/mastodontransferplugin/mastodonuploader.cpp
+++ b/transferengine-plugins/mastodontransferplugin/mastodonuploader.cpp
@@ -88,7 +88,16 @@ void MastodonUploader::startUploading()
return;
}
- postImage();
+ const QString mimeType = mediaItem()->value(MediaItem::MimeType).toString();
+ if (mimeType.startsWith(QLatin1String("image/"))) {
+ postImage();
+ } else if (mimeType.contains(QLatin1String("text/plain"))
+ || mimeType.contains(QLatin1String("text/x-url"))) {
+ postStatus();
+ } else {
+ qWarning() << Q_FUNC_INFO << "Unsupported mime type:" << mimeType;
+ setStatus(MediaTransferInterface::TransferInterrupted);
+ }
}
void MastodonUploader::transferFinished()
@@ -172,6 +181,53 @@ void MastodonUploader::postImage()
m_filePath = sourceFile;
}
+ ensureApi();
+
+ const bool ok = m_api->uploadImage(m_filePath,
+ mediaItem()->value(MediaItem::Description).toString(),
+ mediaItem()->value(MediaItem::MimeType).toString(),
+ m_accountDetails.apiHost,
+ m_accountDetails.accessToken);
+ if (ok) {
+ setStatus(MediaTransferInterface::TransferStarted);
+ } else {
+ setStatus(MediaTransferInterface::TransferInterrupted);
+ qWarning() << Q_FUNC_INFO << "Failed to upload image";
+ }
+}
+
+void MastodonUploader::postStatus()
+{
+ ensureApi();
+
+ const QVariantMap userData = mediaItem()->value(MediaItem::UserData).toMap();
+ QString statusText = userData.value(QStringLiteral("status")).toString().trimmed();
+ if (statusText.isEmpty()) {
+ statusText = mediaItem()->value(MediaItem::Description).toString().trimmed();
+ }
+ if (statusText.isEmpty()) {
+ statusText = mediaItem()->value(MediaItem::ContentData).toString().trimmed();
+ }
+
+ if (statusText.isEmpty()) {
+ qWarning() << Q_FUNC_INFO << "Failed to resolve status text";
+ setStatus(MediaTransferInterface::TransferInterrupted);
+ return;
+ }
+
+ const bool ok = m_api->postStatus(statusText,
+ m_accountDetails.apiHost,
+ m_accountDetails.accessToken);
+ if (ok) {
+ setStatus(MediaTransferInterface::TransferStarted);
+ } else {
+ setStatus(MediaTransferInterface::TransferInterrupted);
+ qWarning() << Q_FUNC_INFO << "Failed to post status";
+ }
+}
+
+void MastodonUploader::ensureApi()
+{
if (!m_api) {
m_api = new MastodonApi(m_qnam, this);
connect(m_api, &MastodonApi::transferProgressUpdated,
@@ -185,16 +241,4 @@ void MastodonUploader::postImage()
connect(m_api, &MastodonApi::credentialsExpired,
this, &MastodonUploader::credentialsExpired);
}
-
- const bool ok = m_api->uploadImage(m_filePath,
- mediaItem()->value(MediaItem::Description).toString(),
- mediaItem()->value(MediaItem::MimeType).toString(),
- m_accountDetails.apiHost,
- m_accountDetails.accessToken);
- if (ok) {
- setStatus(MediaTransferInterface::TransferStarted);
- } else {
- setStatus(MediaTransferInterface::TransferInterrupted);
- qWarning() << Q_FUNC_INFO << "Failed to upload image";
- }
}
diff --git a/transferengine-plugins/mastodontransferplugin/mastodonuploader.h b/transferengine-plugins/mastodontransferplugin/mastodonuploader.h
index b0ea263..a55c359 100644
--- a/transferengine-plugins/mastodontransferplugin/mastodonuploader.h
+++ b/transferengine-plugins/mastodontransferplugin/mastodonuploader.h
@@ -38,7 +38,9 @@ protected:
void setStatus(MediaTransferInterface::TransferStatus status);
private:
+ void ensureApi();
void postImage();
+ void postStatus();
MastodonApi *m_api;
MastodonShareServiceStatus *m_mastodonShareServiceStatus;