From 3462aacafb0570a5b249613a33ecb805458225d1 Mon Sep 17 00:00:00 2001 From: AkiraFukushima Date: Mon, 2 Jan 2023 22:49:39 +0900 Subject: [PATCH] [refactor] Disable reload in some timelines --- .../Contents/DirectMessages.spec.ts | 228 ------------------ .../TimelineSpace/Contents/DirectMessages.vue | 25 +- .../TimelineSpace/Contents/Home.vue | 25 +- .../TimelineSpace/Contents/Local.vue | 26 +- .../TimelineSpace/Contents/Notifications.vue | 24 +- .../TimelineSpace/Contents/Public.vue | 26 +- .../components/TimelineSpace/HeaderMenu.vue | 10 - src/renderer/components/utils/reloadable.ts | 1 - 8 files changed, 7 insertions(+), 358 deletions(-) delete mode 100644 spec/renderer/unit/store/TimelineSpace/Contents/DirectMessages.spec.ts diff --git a/spec/renderer/unit/store/TimelineSpace/Contents/DirectMessages.spec.ts b/spec/renderer/unit/store/TimelineSpace/Contents/DirectMessages.spec.ts deleted file mode 100644 index d66dc7e2..00000000 --- a/spec/renderer/unit/store/TimelineSpace/Contents/DirectMessages.spec.ts +++ /dev/null @@ -1,228 +0,0 @@ -import { Entity } from 'megalodon' -import DirectMessages, { DirectMessagesState, MUTATION_TYPES } from '@/store/TimelineSpace/Contents/DirectMessages' - -const account: Entity.Account = { - id: '1', - username: 'h3poteto', - acct: 'h3poteto@pleroma.io', - display_name: 'h3poteto', - locked: false, - created_at: '2019-03-26T21:30:32', - followers_count: 10, - following_count: 10, - statuses_count: 100, - note: 'engineer', - url: 'https://pleroma.io', - avatar: '', - avatar_static: '', - header: '', - header_static: '', - emojis: [], - moved: null, - fields: null, - bot: false -} -const status1: Entity.Status = { - id: '1', - uri: 'http://example.com', - url: 'http://example.com', - account: account, - in_reply_to_id: null, - in_reply_to_account_id: null, - reblog: null, - content: 'hoge', - plain_content: 'hoge', - created_at: '2019-03-26T21:40:32', - emojis: [], - replies_count: 0, - reblogs_count: 0, - favourites_count: 0, - reblogged: null, - favourited: null, - muted: null, - sensitive: false, - spoiler_text: '', - visibility: 'public', - media_attachments: [], - mentions: [], - tags: [], - card: null, - poll: null, - application: { - name: 'Web' - } as Entity.Application, - language: null, - pinned: null, - emoji_reactions: [], - bookmarked: false, - quote: false -} -const status2: Entity.Status = { - id: '2', - uri: 'http://example.com', - url: 'http://example.com', - account: account, - in_reply_to_id: null, - in_reply_to_account_id: null, - reblog: null, - content: 'fuga', - plain_content: 'fuga', - created_at: '2019-03-26T21:40:32', - emojis: [], - replies_count: 0, - reblogs_count: 0, - favourites_count: 0, - reblogged: null, - favourited: null, - muted: null, - sensitive: false, - spoiler_text: '', - visibility: 'public', - media_attachments: [], - mentions: [], - tags: [], - card: null, - poll: null, - application: { - name: 'Web' - } as Entity.Application, - language: null, - pinned: null, - emoji_reactions: [], - bookmarked: false, - quote: false -} - -const rebloggedStatus: Entity.Status = { - id: '3', - uri: 'http://example.com', - url: 'http://example.com', - account: account, - in_reply_to_id: null, - in_reply_to_account_id: null, - reblog: status1, - content: '', - plain_content: null, - created_at: '2019-03-31T21:40:32', - emojis: [], - replies_count: 0, - reblogs_count: 0, - favourites_count: 0, - reblogged: null, - favourited: null, - muted: null, - sensitive: false, - spoiler_text: '', - visibility: 'public', - media_attachments: [], - mentions: [], - tags: [], - card: null, - poll: null, - application: { - name: 'Web' - } as Entity.Application, - language: null, - pinned: null, - emoji_reactions: [], - bookmarked: false, - quote: false -} - -describe('TimelineSpace/Contents/DirectMessages', () => { - describe('mutations', () => { - let state: DirectMessagesState - - describe('deleteToot', () => { - describe('message is not reblogged', () => { - beforeEach(() => { - state = { - lazyLoading: false, - heading: true, - timeline: [status2, status1] - } - }) - it('should be deleted', () => { - DirectMessages.mutations![MUTATION_TYPES.DELETE_TOOT](state, status1.id) - expect(state.timeline).toEqual([status2]) - }) - }) - - describe('message is reblogged', () => { - beforeEach(() => { - state = { - lazyLoading: false, - heading: true, - timeline: [status2, rebloggedStatus] - } - }) - it('should be deleted', () => { - DirectMessages.mutations![MUTATION_TYPES.DELETE_TOOT](state, status1.id) - expect(state.timeline).toEqual([status2]) - }) - }) - }) - - describe('appendTimeline', () => { - describe('heading', () => { - describe('normal', () => { - beforeEach(() => { - state = { - lazyLoading: false, - heading: true, - timeline: [status2, status1] - } - }) - it('should be updated timeline', () => { - DirectMessages.mutations![MUTATION_TYPES.APPEND_TIMELINE](state, rebloggedStatus) - expect(state.timeline).toEqual([rebloggedStatus, status2, status1]) - }) - }) - - describe('duplicated status', () => { - beforeEach(() => { - state = { - lazyLoading: false, - heading: true, - timeline: [rebloggedStatus, status2, status1] - } - }) - it('should not be updated timeline', () => { - DirectMessages.mutations![MUTATION_TYPES.APPEND_TIMELINE](state, rebloggedStatus) - expect(state.timeline).toEqual([rebloggedStatus, status2, status1]) - }) - }) - }) - - describe('not heading', () => { - describe('normal', () => { - beforeEach(() => { - state = { - lazyLoading: false, - heading: false, - timeline: [status2, status1] - } - }) - it('should be updated timeline', () => { - DirectMessages.mutations![MUTATION_TYPES.APPEND_TIMELINE](state, rebloggedStatus) - expect(state.timeline).toEqual([rebloggedStatus, status2, status1]) - }) - }) - - describe('duplicated status', () => { - beforeEach(() => { - state = { - lazyLoading: false, - heading: false, - timeline: [rebloggedStatus, status2, status1] - } - }) - it('should not be updated timeline', () => { - DirectMessages.mutations![MUTATION_TYPES.APPEND_TIMELINE](state, rebloggedStatus) - expect(state.timeline).toEqual([rebloggedStatus, status2, status1]) - }) - }) - }) - }) - }) -}) diff --git a/src/renderer/components/TimelineSpace/Contents/DirectMessages.vue b/src/renderer/components/TimelineSpace/Contents/DirectMessages.vue index 6b6f2d11..5dc118a0 100644 --- a/src/renderer/components/TimelineSpace/Contents/DirectMessages.vue +++ b/src/renderer/components/TimelineSpace/Contents/DirectMessages.vue @@ -37,13 +37,10 @@ import { useI18next } from 'vue3-i18next' import { useRoute } from 'vue-router' import { ElMessage } from 'element-plus' import { Entity } from 'megalodon' -import useReloadable from '@/components/utils/reloadable' import Toot from '@/components/organisms/Toot.vue' import { EventEmitter } from '@/components/event' import { ACTION_TYPES, MUTATION_TYPES } from '@/store/TimelineSpace/Contents/DirectMessages' import { MUTATION_TYPES as SIDE_MENU_MUTATION } from '@/store/TimelineSpace/SideMenu' -import { MUTATION_TYPES as TIMELINE_MUTATION } from '@/store/TimelineSpace' -import { MUTATION_TYPES as HEADER_MUTATION } from '@/store/TimelineSpace/HeaderMenu' import { LocalAccount } from '~/src/types/localAccount' import { LocalServer } from '~/src/types/localServer' import { MyWindow } from '~/src/types/global' @@ -56,8 +53,7 @@ export default defineComponent({ const store = useStore() const route = useRoute() const i18n = useI18next() - const { reloadable } = useReloadable(store, route, i18n) - const { j, k, Ctrl_r } = useMagicKeys() + const { j, k } = useMagicKeys() const win = (window as any) as MyWindow const id = computed(() => parseInt(route.params.id as string)) @@ -73,7 +69,6 @@ export default defineComponent({ const timeline = computed(() => store.state.TimelineSpace.Contents.DirectMessages.timeline[id.value]) const openSideBar = computed(() => store.state.TimelineSpace.Contents.SideBar.openSideBar) - const startReload = computed(() => store.state.TimelineSpace.HeaderMenu.reload) const modalOpened = computed(() => store.getters[`TimelineSpace/Modals/modalOpened`]) const currentFocusedIndex = computed(() => timeline.value.findIndex(toot => focusedId.value === toot.uri + toot.id)) const shortcutEnabled = computed(() => !modalOpened.value) @@ -94,13 +89,6 @@ export default defineComponent({ onBeforeUnmount(() => { EventEmitter.off('focus-timeline') }) - watch(startReload, (newVal, oldVal) => { - if (!oldVal && newVal) { - reload().finally(() => { - store.commit(`TimelineSpace/HeaderMenu/${HEADER_MUTATION.CHANGE_RELOAD}`, false) - }) - } - }) watch(focusedId, (newVal, _oldVal) => { if (newVal && heading.value) { heading.value = false @@ -118,9 +106,6 @@ export default defineComponent({ whenever(logicAnd(k, shortcutEnabled), () => { focusPrev() }) - whenever(logicAnd(Ctrl_r, shortcutEnabled), () => { - reload() - }) const onScroll = (event: Event) => { // for lazyLoading @@ -163,14 +148,6 @@ export default defineComponent({ store.commit(`${space}/${MUTATION_TYPES.DELETE_TOOT}`, { statusId: message.id, accountId: account.account.id }) } } - const reload = async () => { - store.commit(`TimelineSpace/${TIMELINE_MUTATION.CHANGE_LOADING}`, true) - try { - await reloadable() - } finally { - store.commit(`TimelineSpace/${TIMELINE_MUTATION.CHANGE_LOADING}`, false) - } - } const upper = () => { scroller.value.scrollToItem(0) focusedId.value = null diff --git a/src/renderer/components/TimelineSpace/Contents/Home.vue b/src/renderer/components/TimelineSpace/Contents/Home.vue index d2743ba8..0a88ea50 100644 --- a/src/renderer/components/TimelineSpace/Contents/Home.vue +++ b/src/renderer/components/TimelineSpace/Contents/Home.vue @@ -50,9 +50,6 @@ import StatusLoading from '@/components/organisms/StatusLoading.vue' import { EventEmitter } from '@/components/event' import { ACTION_TYPES, MUTATION_TYPES } from '@/store/TimelineSpace/Contents/Home' import { MUTATION_TYPES as SIDE_MENU_MUTATION } from '@/store/TimelineSpace/SideMenu' -import { MUTATION_TYPES as TIMELINE_MUTATION } from '@/store/TimelineSpace' -import { MUTATION_TYPES as HEADER_MUTATION } from '@/store/TimelineSpace/HeaderMenu' -import useReloadable from '@/components/utils/reloadable' import { LocalAccount } from '~/src/types/localAccount' import { LocalServer } from '~/src/types/localServer' import { MyWindow } from '~/src/types/global' @@ -65,8 +62,7 @@ export default defineComponent({ const store = useStore() const route = useRoute() const i18n = useI18next() - const { reloadable } = useReloadable(store, route, i18n) - const { j, k, Ctrl_r } = useMagicKeys() + const { j, k } = useMagicKeys() const win = (window as any) as MyWindow @@ -87,7 +83,6 @@ export default defineComponent({ const timeline = computed(() => store.state.TimelineSpace.Contents.Home.timeline[id.value]) const openSideBar = computed(() => store.state.TimelineSpace.Contents.SideBar.openSideBar) - const startReload = computed(() => store.state.TimelineSpace.HeaderMenu.reload) const modalOpened = computed(() => store.getters[`TimelineSpace/Modals/modalOpened`]) const filters = computed(() => store.getters[`${space}/filters`]) const currentFocusedIndex = computed(() => timeline.value.findIndex(toot => focusedId.value === toot.uri + toot.id)) @@ -131,13 +126,6 @@ export default defineComponent({ el.scrollTop = 0 } }) - watch(startReload, (newVal, oldVal) => { - if (!oldVal && newVal) { - reload().finally(() => { - store.commit(`TimelineSpace/HeaderMenu/${HEADER_MUTATION.CHANGE_RELOAD}`, false) - }) - } - }) watch( timeline, (newState, _oldState) => { @@ -164,9 +152,6 @@ export default defineComponent({ whenever(logicAnd(k, shortcutEnabled), () => { focusPrev() }) - whenever(logicAnd(Ctrl_r, shortcutEnabled), () => { - reload() - }) const onScroll = (event: Event) => { // for lazyLoading @@ -219,14 +204,6 @@ export default defineComponent({ }, 500) }) } - const reload = async () => { - store.commit(`TimelineSpace/${TIMELINE_MUTATION.CHANGE_LOADING}`, true) - try { - await reloadable() - } finally { - store.commit(`TimelineSpace/${TIMELINE_MUTATION.CHANGE_LOADING}`, false) - } - } const upper = () => { scroller.value.scrollToItem(0) focusedId.value = null diff --git a/src/renderer/components/TimelineSpace/Contents/Local.vue b/src/renderer/components/TimelineSpace/Contents/Local.vue index 097ed279..f3f8aea4 100644 --- a/src/renderer/components/TimelineSpace/Contents/Local.vue +++ b/src/renderer/components/TimelineSpace/Contents/Local.vue @@ -39,11 +39,8 @@ import { useRoute } from 'vue-router' import { useStore } from '@/store' import Toot from '@/components/organisms/Toot.vue' import { EventEmitter } from '@/components/event' -import useReloadable from '@/components/utils/reloadable' import { ACTION_TYPES, MUTATION_TYPES } from '@/store/TimelineSpace/Contents/Local' import { MUTATION_TYPES as SIDE_MENU_MUTATION } from '@/store/TimelineSpace/SideMenu' -import { MUTATION_TYPES as TIMELINE_MUTATION } from '@/store/TimelineSpace' -import { MUTATION_TYPES as HEADER_MUTATION } from '@/store/TimelineSpace/HeaderMenu' import { LocalAccount } from '~/src/types/localAccount' import { LocalServer } from '~/src/types/localServer' import { MyWindow } from '~/src/types/global' @@ -56,8 +53,7 @@ export default defineComponent({ const store = useStore() const route = useRoute() const i18n = useI18next() - const { reloadable } = useReloadable(store, route, i18n) - const { j, k, Ctrl_r } = useMagicKeys() + const { j, k } = useMagicKeys() const win = (window as any) as MyWindow const id = computed(() => parseInt(route.params.id as string)) @@ -74,7 +70,6 @@ export default defineComponent({ const timeline = computed(() => store.state.TimelineSpace.Contents.Local.timeline[id.value]) const openSideBar = computed(() => store.state.TimelineSpace.Contents.SideBar.openSideBar) - const startReload = computed(() => store.state.TimelineSpace.HeaderMenu.reload) const modalOpened = computed(() => store.getters[`TimelineSpace/Modals/modalOpened`]) const currentFocusedIndex = computed(() => timeline.value.findIndex(toot => focusedId.value === toot.uri + toot.id)) const shortcutEnabled = computed(() => !modalOpened.value) @@ -102,13 +97,6 @@ export default defineComponent({ el.scrollTop = 0 } }) - watch(startReload, (newVal, oldVal) => { - if (!oldVal && newVal) { - reload().finally(() => { - store.commit(`TimelineSpace/HeaderMenu/${HEADER_MUTATION.CHANGE_RELOAD}`, false) - }) - } - }) watch(focusedId, (newVal, _oldVal) => { if (newVal && heading.value) { @@ -127,9 +115,6 @@ export default defineComponent({ whenever(logicAnd(k, shortcutEnabled), () => { focusPrev() }) - whenever(logicAnd(Ctrl_r, shortcutEnabled), () => { - reload() - }) const onScroll = (event: Event) => { if ( @@ -160,14 +145,7 @@ export default defineComponent({ heading.value = true } } - const reload = async () => { - store.commit(`TimelineSpace/${TIMELINE_MUTATION.CHANGE_LOADING}`, true) - try { - await reloadable() - } finally { - store.commit(`TimelineSpace/${TIMELINE_MUTATION.CHANGE_LOADING}`, false) - } - } + const updateToot = (message: Entity.Status) => { if (account.account) { store.commit(`${space}/${MUTATION_TYPES.UPDATE_TOOT}`, { status: message, accountId: account.account.id }) diff --git a/src/renderer/components/TimelineSpace/Contents/Notifications.vue b/src/renderer/components/TimelineSpace/Contents/Notifications.vue index 67a54240..044d65c9 100644 --- a/src/renderer/components/TimelineSpace/Contents/Notifications.vue +++ b/src/renderer/components/TimelineSpace/Contents/Notifications.vue @@ -46,7 +46,6 @@ import { EventEmitter } from '@/components/event' import { useStore } from '@/store' import { useRoute } from 'vue-router' import { useI18next } from 'vue3-i18next' -import useReloadable from '@/components/utils/reloadable' import { ACTION_TYPES, MUTATION_TYPES } from '@/store/TimelineSpace/Contents/Notifications' import { MUTATION_TYPES as SIDE_MENU_MUTATION } from '@/store/TimelineSpace/SideMenu' import { MUTATION_TYPES as TIMELINE_MUTATION } from '@/store/TimelineSpace' @@ -64,8 +63,7 @@ export default defineComponent({ const store = useStore() const route = useRoute() const i18n = useI18next() - const { reloadable } = useReloadable(store, route, i18n) - const { j, k, Ctrl_r } = useMagicKeys() + const { j, k } = useMagicKeys() const win = (window as any) as MyWindow @@ -83,7 +81,6 @@ export default defineComponent({ const notifications = computed(() => store.state.TimelineSpace.Contents.Notifications.notifications[id.value]) const openSideBar = computed(() => store.state.TimelineSpace.Contents.SideBar.openSideBar) - const startReload = computed(() => store.state.TimelineSpace.HeaderMenu.reload) const modalOpened = computed(() => store.getters[`TimelineSpace/Modals/modalOpened`]) const filters = computed(() => store.getters[`${space}/filters}`]) const currentFocusedIndex = computed(() => notifications.value.findIndex(notification => focusedId.value === notification.id)) @@ -114,13 +111,6 @@ export default defineComponent({ el.scrollTop = 0 } }) - watch(startReload, (newVal, oldVal) => { - if (!oldVal && newVal) { - reload().finally(() => { - store.commit(`TimelineSpace/HeaderMenu/${HEADER_MUTATION.CHANGE_RELOAD}`, false) - }) - } - }) watch( notifications, (newState, _oldState) => { @@ -148,9 +138,6 @@ export default defineComponent({ whenever(logicAnd(k, shortcutEnabled), () => { focusPrev() }) - whenever(logicAnd(Ctrl_r, shortcutEnabled), () => { - reload() - }) const onScroll = (event: Event) => { if ( @@ -203,15 +190,6 @@ export default defineComponent({ }, 500) }) } - const reload = async () => { - store.commit(`TimelineSpace/${TIMELINE_MUTATION.CHANGE_LOADING}`, true) - try { - await reloadable() - store.dispatch(`${space}/${ACTION_TYPES.RESET_BADGE}`) - } finally { - store.commit(`TimelineSpace/${TIMELINE_MUTATION.CHANGE_LOADING}`, false) - } - } const upper = () => { scroller.value.scrollToItem(0) focusedId.value = null diff --git a/src/renderer/components/TimelineSpace/Contents/Public.vue b/src/renderer/components/TimelineSpace/Contents/Public.vue index 97c9e480..6918f627 100644 --- a/src/renderer/components/TimelineSpace/Contents/Public.vue +++ b/src/renderer/components/TimelineSpace/Contents/Public.vue @@ -39,10 +39,7 @@ import { useRoute } from 'vue-router' import { useStore } from '@/store' import Toot from '@/components/organisms/Toot.vue' import { EventEmitter } from '@/components/event' -import useReloadable from '@/components/utils/reloadable' import { MUTATION_TYPES as SIDE_MENU_MUTATION } from '@/store/TimelineSpace/SideMenu' -import { MUTATION_TYPES as TIMELINE_MUTATION } from '@/store/TimelineSpace' -import { MUTATION_TYPES as HEADER_MUTATION } from '@/store/TimelineSpace/HeaderMenu' import { ACTION_TYPES, MUTATION_TYPES } from '@/store/TimelineSpace/Contents/Public' import { LocalAccount } from '~/src/types/localAccount' import { LocalServer } from '~/src/types/localServer' @@ -56,8 +53,7 @@ export default defineComponent({ const store = useStore() const route = useRoute() const i18n = useI18next() - const { reloadable } = useReloadable(store, route, i18n) - const { j, k, Ctrl_r } = useMagicKeys() + const { j, k } = useMagicKeys() const win = (window as any) as MyWindow const id = computed(() => parseInt(route.params.id as string)) @@ -73,7 +69,6 @@ export default defineComponent({ const timeline = computed(() => store.state.TimelineSpace.Contents.Public.timeline[id.value]) const openSideBar = computed(() => store.state.TimelineSpace.Contents.SideBar.openSideBar) - const startReload = computed(() => store.state.TimelineSpace.HeaderMenu.reload) const modalOpened = computed(() => store.getters[`TimelineSpace/Modals/modalOpened`]) const filters = computed(() => store.getters[`${space}/filters`]) const currentFocusedIndex = computed(() => timeline.value.findIndex(toot => focusedId.value === toot.uri + toot.id)) @@ -102,13 +97,6 @@ export default defineComponent({ el.scrollTop = 0 } }) - watch(startReload, (newVal, oldVal) => { - if (!oldVal && newVal) { - reload().finally(() => { - store.commit(`TimelineSpace/HeaderMenu/${HEADER_MUTATION.CHANGE_RELOAD}`, false) - }) - } - }) watch(focusedId, (newVal, _oldVal) => { if (newVal && heading.value) { @@ -127,9 +115,6 @@ export default defineComponent({ whenever(logicAnd(k, shortcutEnabled), () => { focusPrev() }) - whenever(logicAnd(Ctrl_r, shortcutEnabled), () => { - reload() - }) const onScroll = (event: Event) => { if ( @@ -161,14 +146,7 @@ export default defineComponent({ heading.value = true } } - const reload = async () => { - store.commit(`TimelineSpace/${TIMELINE_MUTATION.CHANGE_LOADING}`, true) - try { - await reloadable() - } finally { - store.commit(`TimelineSpace/${TIMELINE_MUTATION.CHANGE_LOADING}`, false) - } - } + const updateToot = (message: Entity.Status) => { if (account.account) { store.commit(`${space}/${MUTATION_TYPES.UPDATE_TOOT}`, { status: message, accountId: account.account.id }) diff --git a/src/renderer/components/TimelineSpace/HeaderMenu.vue b/src/renderer/components/TimelineSpace/HeaderMenu.vue index bd26f19d..a0ff9568 100644 --- a/src/renderer/components/TimelineSpace/HeaderMenu.vue +++ b/src/renderer/components/TimelineSpace/HeaderMenu.vue @@ -128,15 +128,10 @@ export default defineComponent({ } const reload = () => { switch (route.name) { - case 'home': - case 'notifications': case 'favourites': case 'bookmarks': - case 'local': - case 'public': case 'tag': case 'list': - case 'direct-messages': store.commit(`${space}/${MUTATION_TYPES.CHANGE_RELOAD}`, true) break default: @@ -145,15 +140,10 @@ export default defineComponent({ } const reloadable = () => { switch (route.name) { - case 'home': - case 'notifications': case 'favourites': case 'bookmarks': - case 'local': - case 'public': case 'tag': case 'list': - case 'direct-messages': return true default: return false diff --git a/src/renderer/components/utils/reloadable.ts b/src/renderer/components/utils/reloadable.ts index fc4bdb06..e9947824 100644 --- a/src/renderer/components/utils/reloadable.ts +++ b/src/renderer/components/utils/reloadable.ts @@ -14,7 +14,6 @@ export default function useReloadable(store: Store, route: RouteLocat }) throw err }) - await store.dispatch(`TimelineSpace/${ACTION_TYPES.FETCH_CONTENTS_TIMELINES}`) return account }