From 1ecb52f2a9ea422fa2e7569b451416adffadafb2 Mon Sep 17 00:00:00 2001
From: AkiraFukushima
Date: Mon, 31 Aug 2020 12:21:30 +0900
Subject: [PATCH] refs #1713 Support to add bookmark
---
.../Contents/DirectMessages.spec.ts | 2 ++
.../TimelineSpace/Contents/Favourites.spec.ts | 2 ++
.../Contents/Hashtag/Tag.spec.ts | 2 ++
.../store/TimelineSpace/Contents/Home.spec.ts | 2 ++
.../TimelineSpace/Contents/Lists/Show.spec.ts | 2 ++
.../TimelineSpace/Contents/Local.spec.ts | 2 ++
.../TimelineSpace/Contents/Mentions.spec.ts | 1 +
.../Contents/Notifications.spec.ts | 3 ++
.../TimelineSpace/Contents/Public.spec.ts | 2 ++
.../Contents/Search/Toots.spec.ts | 1 +
.../Contents/DirectMessages.spec.ts | 3 ++
.../Contents/Hashtag/Tag.spec.ts | 3 ++
.../store/TimelineSpace/Contents/Home.spec.ts | 4 +++
.../TimelineSpace/Contents/Lists/Show.spec.ts | 3 ++
.../TimelineSpace/Contents/Local.spec.ts | 3 ++
.../TimelineSpace/Contents/Mentions.spec.ts | 3 ++
.../Contents/Notifications.spec.ts | 3 ++
.../TimelineSpace/Contents/Public.spec.ts | 3 ++
src/config/locales/en/translation.json | 4 ++-
src/renderer/components/organisms/Toot.vue | 32 ++++++++++++++++++-
src/renderer/store/organisms/Toot.ts | 27 ++++++++++++++--
21 files changed, 103 insertions(+), 4 deletions(-)
diff --git a/spec/renderer/integration/store/TimelineSpace/Contents/DirectMessages.spec.ts b/spec/renderer/integration/store/TimelineSpace/Contents/DirectMessages.spec.ts
index d558392a..ea458cc8 100644
--- a/spec/renderer/integration/store/TimelineSpace/Contents/DirectMessages.spec.ts
+++ b/spec/renderer/integration/store/TimelineSpace/Contents/DirectMessages.spec.ts
@@ -76,6 +76,7 @@ const status1: Entity.Status = {
language: null,
pinned: null,
emoji_reactions: [],
+ bookmarked: false,
quote: false
}
@@ -110,6 +111,7 @@ const status2: Entity.Status = {
language: null,
pinned: null,
emoji_reactions: [],
+ bookmarked: false,
quote: false
}
diff --git a/spec/renderer/integration/store/TimelineSpace/Contents/Favourites.spec.ts b/spec/renderer/integration/store/TimelineSpace/Contents/Favourites.spec.ts
index 9602a9f0..1f274c0b 100644
--- a/spec/renderer/integration/store/TimelineSpace/Contents/Favourites.spec.ts
+++ b/spec/renderer/integration/store/TimelineSpace/Contents/Favourites.spec.ts
@@ -90,6 +90,7 @@ const status1: Entity.Status = {
language: null,
pinned: null,
emoji_reactions: [],
+ bookmarked: false,
quote: false
}
const status2: Entity.Status = {
@@ -123,6 +124,7 @@ const status2: Entity.Status = {
language: null,
pinned: null,
emoji_reactions: [],
+ bookmarked: false,
quote: false
}
diff --git a/spec/renderer/integration/store/TimelineSpace/Contents/Hashtag/Tag.spec.ts b/spec/renderer/integration/store/TimelineSpace/Contents/Hashtag/Tag.spec.ts
index dec86ac0..21cd45c6 100644
--- a/spec/renderer/integration/store/TimelineSpace/Contents/Hashtag/Tag.spec.ts
+++ b/spec/renderer/integration/store/TimelineSpace/Contents/Hashtag/Tag.spec.ts
@@ -76,6 +76,7 @@ const status1: Entity.Status = {
language: null,
pinned: null,
emoji_reactions: [],
+ bookmarked: false,
quote: false
}
const status2: Entity.Status = {
@@ -109,6 +110,7 @@ const status2: Entity.Status = {
language: null,
pinned: null,
emoji_reactions: [],
+ bookmarked: false,
quote: false
}
diff --git a/spec/renderer/integration/store/TimelineSpace/Contents/Home.spec.ts b/spec/renderer/integration/store/TimelineSpace/Contents/Home.spec.ts
index 89d08be0..6c423f66 100644
--- a/spec/renderer/integration/store/TimelineSpace/Contents/Home.spec.ts
+++ b/spec/renderer/integration/store/TimelineSpace/Contents/Home.spec.ts
@@ -75,6 +75,7 @@ const status1: Entity.Status = {
language: null,
pinned: null,
emoji_reactions: [],
+ bookmarked: false,
quote: false
}
const status2: Entity.Status = {
@@ -108,6 +109,7 @@ const status2: Entity.Status = {
language: null,
pinned: null,
emoji_reactions: [],
+ bookmarked: false,
quote: false
}
diff --git a/spec/renderer/integration/store/TimelineSpace/Contents/Lists/Show.spec.ts b/spec/renderer/integration/store/TimelineSpace/Contents/Lists/Show.spec.ts
index d39ec053..8b7aacba 100644
--- a/spec/renderer/integration/store/TimelineSpace/Contents/Lists/Show.spec.ts
+++ b/spec/renderer/integration/store/TimelineSpace/Contents/Lists/Show.spec.ts
@@ -77,6 +77,7 @@ const status1: Entity.Status = {
language: null,
pinned: null,
emoji_reactions: [],
+ bookmarked: false,
quote: false
}
@@ -111,6 +112,7 @@ const status2: Entity.Status = {
language: null,
pinned: null,
emoji_reactions: [],
+ bookmarked: false,
quote: false
}
diff --git a/spec/renderer/integration/store/TimelineSpace/Contents/Local.spec.ts b/spec/renderer/integration/store/TimelineSpace/Contents/Local.spec.ts
index cbf03e13..a3280a69 100644
--- a/spec/renderer/integration/store/TimelineSpace/Contents/Local.spec.ts
+++ b/spec/renderer/integration/store/TimelineSpace/Contents/Local.spec.ts
@@ -75,6 +75,7 @@ const status1: Entity.Status = {
language: null,
pinned: null,
emoji_reactions: [],
+ bookmarked: false,
quote: false
}
const status2: Entity.Status = {
@@ -108,6 +109,7 @@ const status2: Entity.Status = {
language: null,
pinned: null,
emoji_reactions: [],
+ bookmarked: false,
quote: false
}
diff --git a/spec/renderer/integration/store/TimelineSpace/Contents/Mentions.spec.ts b/spec/renderer/integration/store/TimelineSpace/Contents/Mentions.spec.ts
index d9aca8fb..4f68701d 100644
--- a/spec/renderer/integration/store/TimelineSpace/Contents/Mentions.spec.ts
+++ b/spec/renderer/integration/store/TimelineSpace/Contents/Mentions.spec.ts
@@ -76,6 +76,7 @@ const status: Entity.Status = {
language: null,
pinned: null,
emoji_reactions: [],
+ bookmarked: false,
quote: false
}
diff --git a/spec/renderer/integration/store/TimelineSpace/Contents/Notifications.spec.ts b/spec/renderer/integration/store/TimelineSpace/Contents/Notifications.spec.ts
index d1e05930..b184ffad 100644
--- a/spec/renderer/integration/store/TimelineSpace/Contents/Notifications.spec.ts
+++ b/spec/renderer/integration/store/TimelineSpace/Contents/Notifications.spec.ts
@@ -98,6 +98,7 @@ const status1: Entity.Status = {
language: null,
pinned: null,
emoji_reactions: [],
+ bookmarked: false,
quote: false
}
@@ -132,6 +133,7 @@ const status2: Entity.Status = {
language: null,
pinned: null,
emoji_reactions: [],
+ bookmarked: false,
quote: false
}
@@ -166,6 +168,7 @@ const rebloggedStatus: Entity.Status = {
language: null,
pinned: null,
emoji_reactions: [],
+ bookmarked: false,
quote: false
}
diff --git a/spec/renderer/integration/store/TimelineSpace/Contents/Public.spec.ts b/spec/renderer/integration/store/TimelineSpace/Contents/Public.spec.ts
index 279376b8..c2e8e51c 100644
--- a/spec/renderer/integration/store/TimelineSpace/Contents/Public.spec.ts
+++ b/spec/renderer/integration/store/TimelineSpace/Contents/Public.spec.ts
@@ -75,6 +75,7 @@ const status1: Entity.Status = {
language: null,
pinned: null,
emoji_reactions: [],
+ bookmarked: false,
quote: false
}
const status2: Entity.Status = {
@@ -108,6 +109,7 @@ const status2: Entity.Status = {
language: null,
pinned: null,
emoji_reactions: [],
+ bookmarked: false,
quote: false
}
diff --git a/spec/renderer/integration/store/TimelineSpace/Contents/Search/Toots.spec.ts b/spec/renderer/integration/store/TimelineSpace/Contents/Search/Toots.spec.ts
index f11dd0b1..c75f37a9 100644
--- a/spec/renderer/integration/store/TimelineSpace/Contents/Search/Toots.spec.ts
+++ b/spec/renderer/integration/store/TimelineSpace/Contents/Search/Toots.spec.ts
@@ -80,6 +80,7 @@ const status: Entity.Status = {
language: null,
pinned: null,
emoji_reactions: [],
+ bookmarked: false,
quote: false
}
diff --git a/spec/renderer/unit/store/TimelineSpace/Contents/DirectMessages.spec.ts b/spec/renderer/unit/store/TimelineSpace/Contents/DirectMessages.spec.ts
index 6edf435f..71b749ca 100644
--- a/spec/renderer/unit/store/TimelineSpace/Contents/DirectMessages.spec.ts
+++ b/spec/renderer/unit/store/TimelineSpace/Contents/DirectMessages.spec.ts
@@ -53,6 +53,7 @@ const status1: Entity.Status = {
language: null,
pinned: null,
emoji_reactions: [],
+ bookmarked: false,
quote: false
}
const status2: Entity.Status = {
@@ -86,6 +87,7 @@ const status2: Entity.Status = {
language: null,
pinned: null,
emoji_reactions: [],
+ bookmarked: false,
quote: false
}
@@ -120,6 +122,7 @@ const rebloggedStatus: Entity.Status = {
language: null,
pinned: null,
emoji_reactions: [],
+ bookmarked: false,
quote: false
}
diff --git a/spec/renderer/unit/store/TimelineSpace/Contents/Hashtag/Tag.spec.ts b/spec/renderer/unit/store/TimelineSpace/Contents/Hashtag/Tag.spec.ts
index 320db8b3..10cc0a47 100644
--- a/spec/renderer/unit/store/TimelineSpace/Contents/Hashtag/Tag.spec.ts
+++ b/spec/renderer/unit/store/TimelineSpace/Contents/Hashtag/Tag.spec.ts
@@ -53,6 +53,7 @@ const status1: Entity.Status = {
language: null,
pinned: null,
emoji_reactions: [],
+ bookmarked: false,
quote: false
}
const status2: Entity.Status = {
@@ -86,6 +87,7 @@ const status2: Entity.Status = {
language: null,
pinned: null,
emoji_reactions: [],
+ bookmarked: false,
quote: false
}
@@ -120,6 +122,7 @@ const rebloggedStatus: Entity.Status = {
language: null,
pinned: null,
emoji_reactions: [],
+ bookmarked: false,
quote: false
}
diff --git a/spec/renderer/unit/store/TimelineSpace/Contents/Home.spec.ts b/spec/renderer/unit/store/TimelineSpace/Contents/Home.spec.ts
index 87e0f061..096dd081 100644
--- a/spec/renderer/unit/store/TimelineSpace/Contents/Home.spec.ts
+++ b/spec/renderer/unit/store/TimelineSpace/Contents/Home.spec.ts
@@ -53,6 +53,7 @@ const status1: Entity.Status = {
language: null,
pinned: null,
emoji_reactions: [],
+ bookmarked: false,
quote: false
}
const status2: Entity.Status = {
@@ -86,6 +87,7 @@ const status2: Entity.Status = {
language: null,
pinned: null,
emoji_reactions: [],
+ bookmarked: false,
quote: false
}
@@ -289,6 +291,7 @@ describe('TimelineSpace/Contents/Home', () => {
language: null,
pinned: null,
emoji_reactions: [],
+ bookmarked: false,
quote: false
}
const favouritedStatus: Entity.Status = Object.assign(status1, {
@@ -365,6 +368,7 @@ describe('TimelineSpace/Contents/Home', () => {
language: null,
pinned: null,
emoji_reactions: [],
+ bookmarked: false,
quote: false
}
state = {
diff --git a/spec/renderer/unit/store/TimelineSpace/Contents/Lists/Show.spec.ts b/spec/renderer/unit/store/TimelineSpace/Contents/Lists/Show.spec.ts
index ca197bc7..36a2fac6 100644
--- a/spec/renderer/unit/store/TimelineSpace/Contents/Lists/Show.spec.ts
+++ b/spec/renderer/unit/store/TimelineSpace/Contents/Lists/Show.spec.ts
@@ -53,6 +53,7 @@ const status1: Entity.Status = {
language: null,
pinned: null,
emoji_reactions: [],
+ bookmarked: false,
quote: false
}
const status2: Entity.Status = {
@@ -86,6 +87,7 @@ const status2: Entity.Status = {
language: null,
pinned: null,
emoji_reactions: [],
+ bookmarked: false,
quote: false
}
@@ -120,6 +122,7 @@ const rebloggedStatus: Entity.Status = {
language: null,
pinned: null,
emoji_reactions: [],
+ bookmarked: false,
quote: false
}
diff --git a/spec/renderer/unit/store/TimelineSpace/Contents/Local.spec.ts b/spec/renderer/unit/store/TimelineSpace/Contents/Local.spec.ts
index eaae2ddd..69484513 100644
--- a/spec/renderer/unit/store/TimelineSpace/Contents/Local.spec.ts
+++ b/spec/renderer/unit/store/TimelineSpace/Contents/Local.spec.ts
@@ -53,6 +53,7 @@ const status1: Entity.Status = {
language: null,
pinned: null,
emoji_reactions: [],
+ bookmarked: false,
quote: false
}
const status2: Entity.Status = {
@@ -86,6 +87,7 @@ const status2: Entity.Status = {
language: null,
pinned: null,
emoji_reactions: [],
+ bookmarked: false,
quote: false
}
@@ -120,6 +122,7 @@ const rebloggedStatus: Entity.Status = {
language: null,
pinned: null,
emoji_reactions: [],
+ bookmarked: false,
quote: false
}
diff --git a/spec/renderer/unit/store/TimelineSpace/Contents/Mentions.spec.ts b/spec/renderer/unit/store/TimelineSpace/Contents/Mentions.spec.ts
index 00abca8b..2b28648e 100644
--- a/spec/renderer/unit/store/TimelineSpace/Contents/Mentions.spec.ts
+++ b/spec/renderer/unit/store/TimelineSpace/Contents/Mentions.spec.ts
@@ -76,6 +76,7 @@ const status1: Entity.Status = {
language: null,
pinned: null,
emoji_reactions: [],
+ bookmarked: false,
quote: false
}
@@ -110,6 +111,7 @@ const status2: Entity.Status = {
language: null,
pinned: null,
emoji_reactions: [],
+ bookmarked: false,
quote: false
}
@@ -144,6 +146,7 @@ const rebloggedStatus: Entity.Status = {
language: null,
pinned: null,
emoji_reactions: [],
+ bookmarked: false,
quote: false
}
diff --git a/spec/renderer/unit/store/TimelineSpace/Contents/Notifications.spec.ts b/spec/renderer/unit/store/TimelineSpace/Contents/Notifications.spec.ts
index 49618ffb..6f7585dd 100644
--- a/spec/renderer/unit/store/TimelineSpace/Contents/Notifications.spec.ts
+++ b/spec/renderer/unit/store/TimelineSpace/Contents/Notifications.spec.ts
@@ -76,6 +76,7 @@ const status1: Entity.Status = {
language: null,
pinned: null,
emoji_reactions: [],
+ bookmarked: false,
quote: false
}
@@ -110,6 +111,7 @@ const status2: Entity.Status = {
language: null,
pinned: null,
emoji_reactions: [],
+ bookmarked: false,
quote: false
}
@@ -144,6 +146,7 @@ const rebloggedStatus: Entity.Status = {
language: null,
pinned: null,
emoji_reactions: [],
+ bookmarked: false,
quote: false
}
diff --git a/spec/renderer/unit/store/TimelineSpace/Contents/Public.spec.ts b/spec/renderer/unit/store/TimelineSpace/Contents/Public.spec.ts
index d818f71d..71c8d2f4 100644
--- a/spec/renderer/unit/store/TimelineSpace/Contents/Public.spec.ts
+++ b/spec/renderer/unit/store/TimelineSpace/Contents/Public.spec.ts
@@ -53,6 +53,7 @@ const status1: Entity.Status = {
language: null,
pinned: null,
emoji_reactions: [],
+ bookmarked: false,
quote: false
}
const status2: Entity.Status = {
@@ -86,6 +87,7 @@ const status2: Entity.Status = {
language: null,
pinned: null,
emoji_reactions: [],
+ bookmarked: false,
quote: false
}
@@ -120,6 +122,7 @@ const rebloggedStatus: Entity.Status = {
language: null,
pinned: null,
emoji_reactions: [],
+ bookmarked: false,
quote: false
}
diff --git a/src/config/locales/en/translation.json b/src/config/locales/en/translation.json
index e0be14cf..6837096b 100644
--- a/src/config/locales/en/translation.json
+++ b/src/config/locales/en/translation.json
@@ -327,7 +327,7 @@
"reblog": "Reblog",
"fav": "Favourite",
"detail": "Toot details",
- "bookmark": "Add bookmark",
+ "bookmark": "Bookmark",
"pinned": "Pinned toot",
"poll": {
"vote": "Vote",
@@ -424,6 +424,8 @@
"unreblog_error": "Failed to unreblog",
"favourite_error": "Failed to favourite",
"unfavourite_error": "Failed to unfavourite",
+ "bookmark_error": "Failed to bookmark",
+ "unbookmark_error": "Failed to remove bookmark",
"delete_error": "Failed to delete the toot",
"search_error": "Failed to search",
"toot_error": "Failed to toot",
diff --git a/src/renderer/components/organisms/Toot.vue b/src/renderer/components/organisms/Toot.vue
index c5c4e81f..5ae388be 100644
--- a/src/renderer/components/organisms/Toot.vue
+++ b/src/renderer/components/organisms/Toot.vue
@@ -168,7 +168,8 @@
{{ favouritesCount }}
{
+ this.$emit('update', data)
+ })
+ .catch(err => {
+ console.error(err)
+ this.$message({
+ message: this.$t('message.unbookmark_error'),
+ type: 'error'
+ })
+ })
+ } else {
+ this.$store
+ .dispatch('organisms/Toot/addBookmark', message)
+ .then(data => {
+ this.$emit('update', data)
+ })
+ .catch(err => {
+ console.error(err)
+ this.$message({
+ message: this.$t('message.bookmark_error'),
+ type: 'error'
+ })
+ })
+ }
+ },
openImage(url, rawMediaList) {
const mediaList = rawMediaList.map(media => {
return media.url
diff --git a/src/renderer/store/organisms/Toot.ts b/src/renderer/store/organisms/Toot.ts
index 21c9056b..6910d663 100644
--- a/src/renderer/store/organisms/Toot.ts
+++ b/src/renderer/store/organisms/Toot.ts
@@ -46,7 +46,7 @@ const actions: ActionTree = {
dispatch('TimelineSpace/updateTootForAllTimelines', res.data, { root: true })
return res.data
},
- addFavourite: async ({ rootState, dispatch }, message: Entity.Status) => {
+ addFavourite: async ({ rootState, dispatch }, message: Entity.Status): Promise => {
const client = generator(
rootState.TimelineSpace.sns,
rootState.TimelineSpace.account.baseURL,
@@ -58,7 +58,7 @@ const actions: ActionTree = {
dispatch('TimelineSpace/updateTootForAllTimelines', res.data, { root: true })
return res.data
},
- removeFavourite: async ({ rootState, dispatch }, message: Entity.Status) => {
+ removeFavourite: async ({ rootState, dispatch }, message: Entity.Status): Promise => {
const client = generator(
rootState.TimelineSpace.sns,
rootState.TimelineSpace.account.baseURL,
@@ -69,6 +69,29 @@ const actions: ActionTree = {
dispatch('TimelineSpace/updateTootForAllTimelines', res.data, { root: true })
return res.data
},
+ addBookmark: async ({ rootState, dispatch }, message: Entity.Status): Promise => {
+ const client = generator(
+ rootState.TimelineSpace.sns,
+ rootState.TimelineSpace.account.baseURL,
+ rootState.TimelineSpace.account.accessToken,
+ rootState.App.userAgent
+ )
+ const res = await client.bookmarkStatus(message.id)
+ win.ipcRenderer.send('fav-rt-action-sound')
+ dispatch('TimelineSpace/updateTootForAllTimelines', res.data, { root: true })
+ return res.data
+ },
+ removeBookmark: async ({ rootState, dispatch }, message: Entity.Status): Promise => {
+ const client = generator(
+ rootState.TimelineSpace.sns,
+ rootState.TimelineSpace.account.baseURL,
+ rootState.TimelineSpace.account.accessToken,
+ rootState.App.userAgent
+ )
+ const res = await client.unbookmarkStatus(message.id)
+ dispatch('TimelineSpace/updateTootForAllTimelines', res.data, { root: true })
+ return res.data
+ },
deleteToot: async ({ rootState }, message: Entity.Status) => {
const client = generator(
rootState.TimelineSpace.sns,