summaryrefslogtreecommitdiff
path: root/client/js/controllers/post_upload_controller.js
diff options
context:
space:
mode:
authorHunternif <hunternif@gmail.com>2019-04-10 21:25:15 +0700
committerHunternif <hunternif@gmail.com>2019-04-10 22:15:30 +0700
commit8904d6c9d83af79c67f4dc8da56bba844298782f (patch)
tree430936387b740ce6dfa3c852b8a30b10530450ac /client/js/controllers/post_upload_controller.js
parent9c1db76434312c3dcfcb8b075cd79fd8a7e5fd12 (diff)
client/upload: add checkboxes to copy common tags to existing posts
Diffstat (limited to 'client/js/controllers/post_upload_controller.js')
-rw-r--r--client/js/controllers/post_upload_controller.js24
1 files changed, 21 insertions, 3 deletions
diff --git a/client/js/controllers/post_upload_controller.js b/client/js/controllers/post_upload_controller.js
index ccd6f94..4868042 100644
--- a/client/js/controllers/post_upload_controller.js
+++ b/client/js/controllers/post_upload_controller.js
@@ -59,7 +59,7 @@ class PostUploadController {
e.detail.uploadables.reduce(
(promise, uploadable) =>
promise.then(() => this._uploadSinglePost(
- uploadable, e.detail.skipDuplicates)),
+ uploadable, e.detail.skipDuplicates, e.detail.copyTagsToOriginals)),
Promise.resolve())
.then(() => {
this._view.clearMessages();
@@ -86,7 +86,7 @@ class PostUploadController {
});
}
- _uploadSinglePost(uploadable, skipDuplicates) {
+ _uploadSinglePost(uploadable, skipDuplicates, copyTagsToOriginals) {
progress.start();
let reverseSearchPromise = Promise.resolve();
if (!uploadable.lookalikesConfirmed) {
@@ -99,13 +99,18 @@ class PostUploadController {
if (searchResult) {
// notify about exact duplicate
if (searchResult.exactPost) {
- if (skipDuplicates) {
+ if (copyTagsToOriginals) {
+ return this._copyTagsToOriginalAndSave(uploadable, searchResult.exactPost);
+ } else if (skipDuplicates) {
this._view.removeUploadable(uploadable);
return Promise.resolve();
} else {
let error = new Error('Post already uploaded ' +
`(@${searchResult.exactPost.id})`);
error.uploadable = uploadable;
+ error.similarPosts = [
+ {distance: 0, post: searchResult.exactPost}
+ ];
return Promise.reject(error);
}
}
@@ -119,6 +124,8 @@ class PostUploadController {
error.similarPosts = searchResult.similarPosts;
return Promise.reject(error);
}
+ } else if (uploadable.foundOriginal) {
+ return this._copyTagsToOriginalAndSave(uploadable, uploadable.foundOriginal);
}
// no duplicates, proceed with saving
@@ -153,6 +160,17 @@ class PostUploadController {
post.newContent = uploadable.url || uploadable.file;
return post;
}
+
+ _copyTagsToOriginalAndSave(uploadable, original) {
+ uploadable.tags.map(tag => original.tags.addByName(tag));
+ let savePromise = original.save()
+ .then(() => {
+ this._view.removeUploadable(uploadable);
+ return Promise.resolve();
+ });
+ this._lastCancellablePromise = savePromise;
+ return savePromise;
+ }
}
module.exports = router => {