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,