@@ -47,6 +47,24 @@ class CopyClipboardSelection : public AbstractAction {
4747
4848class SaveClipboardSelectionToFileAction : public AbstractAction {
4949 ClipboardHistoryEntry m_entry;
50+ QString m_saveDirectoryMode;
51+ QString m_saveCustomDirectory;
52+ QString m_saveFileNameMode;
53+
54+ QString kindToken () const {
55+ switch (m_entry.kind ) {
56+ case ClipboardOfferKind::Image:
57+ return " image" ;
58+ case ClipboardOfferKind::File:
59+ return " file" ;
60+ case ClipboardOfferKind::Link:
61+ return " link" ;
62+ case ClipboardOfferKind::Text:
63+ return " text" ;
64+ default :
65+ return " entry" ;
66+ }
67+ }
5068
5169 static QStringList uriLines (const QByteArray &data) {
5270 QString const text = QString::fromUtf8 (data);
@@ -117,6 +135,11 @@ class SaveClipboardSelectionToFileAction : public AbstractAction {
117135 }
118136
119137 QString defaultFileStem (const QByteArray &data) const {
138+ if (m_saveFileNameMode == " timestamp" ) {
139+ auto dt = QDateTime::fromSecsSinceEpoch (m_entry.updatedAt );
140+ return QString (" clipboard-%1-%2" ).arg (kindToken ()).arg (dt.toString (" yyyyMMdd-HHmmss" ));
141+ }
142+
120143 if (m_entry.kind == ClipboardOfferKind::Image) {
121144 auto dt = QDateTime::fromSecsSinceEpoch (m_entry.updatedAt );
122145 return QString (" clipboard-image-%1" ).arg (dt.toString (" yyyyMMdd-HHmmss" ));
@@ -144,6 +167,17 @@ class SaveClipboardSelectionToFileAction : public AbstractAction {
144167 }
145168
146169 QString saveDirectoryPath () const {
170+ if (m_saveDirectoryMode == " custom" ) {
171+ QString const custom = m_saveCustomDirectory.trimmed ();
172+ if (!custom.isEmpty ()) return custom;
173+ }
174+
175+ if (m_saveDirectoryMode == " home" ) {
176+ auto folder = homeDir ();
177+ if (!folder.empty ()) return QString::fromStdString (folder.string ());
178+ return QDir::homePath ();
179+ }
180+
147181 auto folder = downloadsFolder ();
148182 std::error_code ec;
149183 if (folder.empty () || !std::filesystem::is_directory (folder, ec)) { folder = homeDir (); }
@@ -209,8 +243,12 @@ class SaveClipboardSelectionToFileAction : public AbstractAction {
209243 }
210244
211245public:
212- explicit SaveClipboardSelectionToFileAction (const ClipboardHistoryEntry &entry)
213- : AbstractAction(" Save to file" , BuiltinIcon::SaveDocument), m_entry(entry) {}
246+ SaveClipboardSelectionToFileAction (const ClipboardHistoryEntry &entry, QString saveDirectoryMode,
247+ QString saveCustomDirectory, QString saveFileNameMode)
248+ : AbstractAction(" Save to file" , BuiltinIcon::SaveDocument), m_entry(entry),
249+ m_saveDirectoryMode (std::move(saveDirectoryMode)),
250+ m_saveCustomDirectory(std::move(saveCustomDirectory)),
251+ m_saveFileNameMode(std::move(saveFileNameMode)) {}
214252};
215253
216254class RemoveSelectionAction : public AbstractAction {
0 commit comments