summaryrefslogtreecommitdiff
path: root/transferengine-plugins/mastodontransferplugin/mastodonuploader.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'transferengine-plugins/mastodontransferplugin/mastodonuploader.cpp')
-rw-r--r--transferengine-plugins/mastodontransferplugin/mastodonuploader.cpp70
1 files changed, 57 insertions, 13 deletions
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";
- }
}