Skip to content

Commit

Permalink
itemsync: Fix changing synced items
Browse files Browse the repository at this point in the history
Fixes for example tagging/untagging synced items.
  • Loading branch information
hluk committed Apr 14, 2024
1 parent e36d03c commit 314aa42
Show file tree
Hide file tree
Showing 7 changed files with 23 additions and 8 deletions.
8 changes: 5 additions & 3 deletions plugins/itemsync/filewatcher.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ const QLatin1String mimeNoSave(COPYQ_MIME_PREFIX_ITEMSYNC "no-save");
const QLatin1String mimeSyncPath(COPYQ_MIME_PREFIX_ITEMSYNC "sync-path");
const QLatin1String mimeNoFormat(COPYQ_MIME_PREFIX_ITEMSYNC "no-format");
const QLatin1String mimeUnknownFormats(COPYQ_MIME_PREFIX_ITEMSYNC "unknown-formats");
const QLatin1String mimePrivatePrefix(COPYQ_MIME_PREFIX_ITEMSYNC_PRIVATE);
const QLatin1String mimePrivateSyncPrefix(COPYQ_MIME_PREFIX_ITEMSYNC_PRIVATE);
const QLatin1String mimeOldBaseName(COPYQ_MIME_PREFIX_ITEMSYNC_PRIVATE "old-basename");
const QLatin1String mimeHashPrefix(COPYQ_MIME_PREFIX_ITEMSYNC_PRIVATE "hash");

Expand Down Expand Up @@ -647,6 +647,8 @@ void FileWatcher::updateItems()
const QModelIndex index = m_model->index(row, 0);
if ( !oldBaseName(index).isEmpty() )
m_batchIndexData.append(index);
else
COPYQ_LOG_VERBOSE("Would create item");
}

m_lastBatchIndex = -1;
Expand Down Expand Up @@ -836,7 +838,7 @@ void FileWatcher::updateIndexData(const QModelIndex &index, QVariantMap *itemDat

const QVariantMap mimeToExtension = itemData->value(mimeExtensionMap).toMap();
for ( auto it = mimeToExtension.begin(); it != mimeToExtension.end(); ++it ) {
if ( !it.key().startsWith(COPYQ_MIME_PREFIX_ITEMSYNC) ) {
if ( !it.key().startsWith(COPYQ_MIME_PREFIX_ITEMSYNC) && !it.key().startsWith(COPYQ_MIME_PRIVATE_PREFIX) ) {
const QString ext = it.value().toString();
const Hash hash = calculateHash(itemData->value(it.key()).toByteArray());
const QString mime = mimeHashPrefix + ext;
Expand Down Expand Up @@ -896,7 +898,7 @@ void FileWatcher::saveItems(int first, int last, UpdateType updateType)
while (it.hasNext()) {
const auto item = it.next();
const QString &format = item.key();
if ( format.startsWith(COPYQ_MIME_PREFIX_ITEMSYNC) )
if ( format.startsWith(COPYQ_MIME_PREFIX_ITEMSYNC) || format.startsWith(COPYQ_MIME_PRIVATE_PREFIX) )
continue; // skip internal data

const QByteArray bytes = it.value().toByteArray();
Expand Down
4 changes: 2 additions & 2 deletions plugins/itemsync/filewatcher.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,15 @@ struct Ext;
struct BaseNameExtensions;

#define COPYQ_MIME_PREFIX_ITEMSYNC COPYQ_MIME_PREFIX "itemsync-"
#define COPYQ_MIME_PREFIX_ITEMSYNC_PRIVATE COPYQ_MIME_PREFIX "itemsync-private-"
#define COPYQ_MIME_PREFIX_ITEMSYNC_PRIVATE COPYQ_MIME_PRIVATE_PREFIX "itemsync-"
extern const QLatin1String mimeExtensionMap;
extern const QLatin1String mimeBaseName;
extern const QLatin1String mimeNoSave;
extern const QLatin1String mimeSyncPath;
extern const QLatin1String mimeNoFormat;
extern const QLatin1String mimeUnknownFormats;

extern const QLatin1String mimePrivatePrefix;
extern const QLatin1String mimePrivateSyncPrefix;
extern const QLatin1String mimeOldBaseName;
extern const QLatin1String mimeHashPrefix;

Expand Down
2 changes: 1 addition & 1 deletion plugins/itemsync/itemsync.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -483,7 +483,7 @@ QVariantMap ItemSyncSaver::copyItem(const QAbstractItemModel &, const QVariantMa
QVariantMap copiedItemData;
for (auto it = itemData.begin(); it != itemData.constEnd(); ++it) {
const auto &format = it.key();
if ( !format.startsWith(mimePrivatePrefix) )
if ( !format.startsWith(mimePrivateSyncPrefix) )
copiedItemData[format] = it.value();
}

Expand Down
1 change: 1 addition & 0 deletions src/common/mimetypes.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

#include <QLatin1String>

const QLatin1String mimePrivatePrefix(COPYQ_MIME_PRIVATE_PREFIX);
const QLatin1String mimeText("text/plain");
const QLatin1String mimeTextUtf8("text/plain;charset=utf-8");
const QLatin1String mimeHtml("text/html");
Expand Down
3 changes: 3 additions & 0 deletions src/common/mimetypes.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@
class QLatin1String;

#define COPYQ_MIME_PREFIX "application/x-copyq-"
// Prefix for MIME format not visible to user for data private to plugins.
#define COPYQ_MIME_PRIVATE_PREFIX COPYQ_MIME_PREFIX "private-"
extern const QLatin1String mimePrivatePrefix;
extern const QLatin1String mimeText;
extern const QLatin1String mimeTextUtf8;
extern const QLatin1String mimeHtml;
Expand Down
6 changes: 4 additions & 2 deletions src/common/textdata.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,11 @@ QString escapeHtmlSpaces(const QString &str)

bool isPluginFormat(const QString &mime)
{
return mime.startsWith(mimePluginPrefix)
return mime.startsWith(mimePrivatePrefix) || (
mime.startsWith(mimePluginPrefix)
&& mime.size() > mimePluginPrefix.size()
&& mime[mimePluginPrefix.size()] != '-';
&& mime[mimePluginPrefix.size()] != '-'
);
}

} // namespace
Expand Down
7 changes: 7 additions & 0 deletions src/item/clipboarditem.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,14 @@ bool ClipboardItem::setData(const QVariantMap &data)
if (m_data == data)
return false;

const auto oldData = m_data;
m_data = data;

for (auto it = oldData.constBegin(); it != oldData.constEnd(); ++it) {
if (it.key().startsWith(mimePrivatePrefix) && !m_data.contains(it.key()))
m_data[it.key()] = it.value();
}

invalidateDataHash();
return true;
}
Expand Down

0 comments on commit 314aa42

Please sign in to comment.