refs #1307 Disable direct, local and public timeline when initial fetch is failed

This commit is contained in:
AkiraFukushima 2020-04-01 00:05:54 +09:00
parent 3046a17fcd
commit b4542d9c6d
6 changed files with 87 additions and 57 deletions

View File

@ -18,47 +18,37 @@ const confirm = async (account: LocalAccount, proxy: ProxyConfig | false) => {
list: true
}
try {
await client.getHomeTimeline({ limit: 1 })
} catch (err) {
timelines = { ...timelines, home: false }
const notification = async () => {
return client.getNotifications({ limit: 1 }).catch(() => {
timelines = { ...timelines, notification: false, mention: false }
})
}
try {
await client.getNotifications({ limit: 1 })
} catch (err) {
timelines = { ...timelines, notification: false, mention: false }
const direct = async () => {
return client.getConversationTimeline({ limit: 1 }).catch(() => {
timelines = { ...timelines, direct: false }
})
}
try {
await client.getConversationTimeline({ limit: 1 })
} catch (err) {
timelines = { ...timelines, direct: false }
const favourite = async () => {
return client.getFavourites({ limit: 1 }).catch(() => {
timelines = { ...timelines, favourite: false }
})
}
try {
await client.getFavourites({ limit: 1 })
} catch (err) {
timelines = { ...timelines, favourite: false }
const local = async () => {
return client.getLocalTimeline({ limit: 1 }).catch(() => {
timelines = { ...timelines, local: false }
})
}
try {
await client.getLocalTimeline({ limit: 1 })
} catch (err) {
timelines = { ...timelines, local: false }
const pub = async () => {
return client.getPublicTimeline({ limit: 1 }).catch(() => {
timelines = { ...timelines, public: false }
})
}
try {
await client.getPublicTimeline({ limit: 1 })
} catch (err) {
timelines = { ...timelines, public: false }
}
try {
await client.getTagTimeline('whalebird', { limit: 1 })
} catch (err) {
timelines = { ...timelines, tag: false }
const tag = async () => {
return client.getTagTimeline('whalebird', { limit: 1 }).catch(() => {
timelines = { ...timelines, tag: false }
})
}
await Promise.all([notification(), direct(), favourite(), local(), pub(), tag()])
return timelines
}

View File

@ -46,17 +46,22 @@
<span>{{ $t('side_menu.home') }}</span>
<el-badge is-dot :hidden="!unreadHomeTimeline"> </el-badge>
</el-menu-item>
<el-menu-item :index="`/${id()}/notifications`" role="menuitem" :title="$t('side_menu.notification')">
<el-menu-item
:index="`/${id()}/notifications`"
role="menuitem"
:title="$t('side_menu.notification')"
v-if="enabledTimelines.notification"
>
<icon name="bell"></icon>
<span>{{ $t('side_menu.notification') }}</span>
<el-badge is-dot :hidden="!unreadNotifications"> </el-badge>
</el-menu-item>
<el-menu-item :index="`/${id()}/mentions`" role="menuitem" :title="$t('side_menu.mention')">
<el-menu-item :index="`/${id()}/mentions`" role="menuitem" :title="$t('side_menu.mention')" v-if="enabledTimelines.mention">
<icon name="at"></icon>
<span>{{ $t('side_menu.mention') }}</span>
<el-badge is-dot :hidden="!unreadMentions"> </el-badge>
</el-menu-item>
<el-menu-item :index="`/${id()}/direct-messages`" role="menuitem" :title="$t('side_menu.direct')">
<el-menu-item :index="`/${id()}/direct-messages`" role="menuitem" :title="$t('side_menu.direct')" v-if="enabledTimelines.direct">
<icon name="envelope"></icon>
<span>{{ $t('side_menu.direct') }}</span>
<el-badge is-dot :hidden="!unreadDirectMessagesTimeline"> </el-badge>
@ -71,16 +76,16 @@
<span>{{ $t('side_menu.follow_requests') }}</span>
<el-badge is-dot></el-badge>
</el-menu-item>
<el-menu-item :index="`/${id()}/favourites`" role="menuitem" :title="$t('side_menu.favourite')">
<el-menu-item :index="`/${id()}/favourites`" role="menuitem" :title="$t('side_menu.favourite')" v-if="enabledTimelines.favourite">
<icon name="star"></icon>
<span>{{ $t('side_menu.favourite') }}</span>
</el-menu-item>
<el-menu-item :index="`/${id()}/local`" role="menuitem" :title="$t('side_menu.local')">
<el-menu-item :index="`/${id()}/local`" role="menuitem" :title="$t('side_menu.local')" v-if="enabledTimelines.local">
<icon name="users"></icon>
<span>{{ $t('side_menu.local') }}</span>
<el-badge is-dot :hidden="!unreadLocalTimeline"> </el-badge>
</el-menu-item>
<el-menu-item :index="`/${id()}/public`" role="menuitem" :title="$t('side_menu.public')">
<el-menu-item :index="`/${id()}/public`" role="menuitem" :title="$t('side_menu.public')" v-if="enabledTimelines.public">
<icon name="globe"></icon>
<span>{{ $t('side_menu.public') }}</span>
<el-badge is-dot :hidden="!unreadPublicTimeline"> </el-badge>
@ -93,7 +98,7 @@
<icon name="hashtag"></icon>
<span>{{ $t('side_menu.hashtag') }}</span>
</el-menu-item>
<template v-for="tag in tags">
<template v-for="tag in tags" v-if="enabledTimelines.tag">
<el-menu-item
:index="`/${id()}/hashtag/${tag.tagName}`"
:class="collapse ? '' : 'sub-menu'"
@ -109,7 +114,7 @@
<icon name="list-ul"></icon>
<span>{{ $t('side_menu.lists') }}</span>
</el-menu-item>
<template v-for="list in lists">
<template v-for="list in lists" v-if="enabledTimelines.list">
<el-menu-item
:index="`/${id()}/lists/${list.id}`"
:class="collapse ? '' : 'sub-menu'"
@ -147,7 +152,8 @@ export default {
unreadFollowRequests: state => state.unreadFollowRequests,
lists: state => state.lists,
tags: state => state.tags,
collapse: state => state.collapse
collapse: state => state.collapse,
enabledTimelines: state => state.enabledTimelines
}),
...mapState({
account: state => state.TimelineSpace.account,

View File

@ -98,7 +98,7 @@ const mutations: MutationTree<DirectMessagesState> = {
}
const actions: ActionTree<DirectMessagesState, RootState> = {
fetchTimeline: async ({ commit, rootState }): Promise<Array<Entity.Status>> => {
fetchTimeline: async ({ dispatch, commit, rootState }): Promise<Array<Entity.Status>> => {
const client = generator(
rootState.TimelineSpace.sns,
rootState.TimelineSpace.account.baseURL,
@ -106,10 +106,16 @@ const actions: ActionTree<DirectMessagesState, RootState> = {
rootState.App.userAgent,
rootState.App.proxyConfiguration
)
const res = await client.getConversationTimeline({ limit: 40 })
const statuses: Array<Entity.Status> = res.data.map(con => con.last_status!)
commit(MUTATION_TYPES.UPDATE_TIMELINE, statuses)
return statuses
try {
const res = await client.getConversationTimeline({ limit: 40 })
const statuses: Array<Entity.Status> = res.data.map(con => con.last_status!)
commit(MUTATION_TYPES.UPDATE_TIMELINE, statuses)
return statuses
} catch (err) {
// Disable direct timeline
dispatch('TimelineSpace/SideMenu/disableDirect', {}, { root: true })
return []
}
},
lazyFetchTimeline: ({ state, commit, rootState }, lastStatus: Entity.Status): Promise<Array<Entity.Status> | null> => {
if (state.lazyLoading) {

View File

@ -97,7 +97,7 @@ const mutations: MutationTree<LocalState> = {
}
const actions: ActionTree<LocalState, RootState> = {
fetchLocalTimeline: async ({ commit, rootState }): Promise<Array<Entity.Status>> => {
fetchLocalTimeline: async ({ dispatch, commit, rootState }): Promise<Array<Entity.Status>> => {
const client = generator(
rootState.TimelineSpace.sns,
rootState.TimelineSpace.account.baseURL,
@ -105,9 +105,16 @@ const actions: ActionTree<LocalState, RootState> = {
rootState.App.userAgent,
rootState.App.proxyConfiguration
)
const res = await client.getLocalTimeline({ limit: 40 })
commit(MUTATION_TYPES.UPDATE_TIMELINE, res.data)
return res.data
try {
const res = await client.getLocalTimeline({ limit: 40 })
commit(MUTATION_TYPES.UPDATE_TIMELINE, res.data)
return res.data
} catch (err) {
// Disable local timeline
dispatch('TimelineSpace/SideMenu/disableLocal', {}, { root: true })
return []
}
},
lazyFetchTimeline: async ({ state, commit, rootState }, lastStatus: Entity.Status): Promise<Array<Entity.Status> | null> => {
if (state.lazyLoading) {

View File

@ -97,7 +97,7 @@ const mutations: MutationTree<PublicState> = {
}
const actions: ActionTree<PublicState, RootState> = {
fetchPublicTimeline: async ({ commit, rootState }): Promise<Array<Entity.Status>> => {
fetchPublicTimeline: async ({ dispatch, commit, rootState }): Promise<Array<Entity.Status>> => {
const client = generator(
rootState.TimelineSpace.sns,
rootState.TimelineSpace.account.baseURL,
@ -105,9 +105,15 @@ const actions: ActionTree<PublicState, RootState> = {
rootState.App.userAgent,
rootState.App.proxyConfiguration
)
const res = await client.getPublicTimeline({ limit: 40 })
commit(MUTATION_TYPES.UPDATE_TIMELINE, res.data)
return res.data
try {
const res = await client.getPublicTimeline({ limit: 40 })
commit(MUTATION_TYPES.UPDATE_TIMELINE, res.data)
return res.data
} catch (err) {
// Disable public timeline
dispatch('TimelineSpace/SideMenu/disablePublic', {}, { root: true })
return []
}
},
lazyFetchTimeline: ({ state, commit, rootState }, lastStatus: Entity.Status): Promise<Array<Entity.Status> | null> => {
if (state.lazyLoading) {

View File

@ -128,6 +128,21 @@ const actions: ActionTree<SideMenuState, RootState> = {
const timelines: EnabledTimelines = await win.ipcRenderer.invoke('confirm-timelines', account)
commit(MUTATION_TYPES.UPDATE_ENABLED_TIMELINES, timelines)
},
disableLocal: ({ commit, state }) => {
let timelines = state.enabledTimelines
timelines = { ...timelines, local: false }
commit(MUTATION_TYPES.UPDATE_ENABLED_TIMELINES, timelines)
},
disablePublic: ({ commit, state }) => {
let timelines = state.enabledTimelines
timelines = { ...timelines, public: false }
commit(MUTATION_TYPES.UPDATE_ENABLED_TIMELINES, timelines)
},
disableDirect: ({ commit, state }) => {
let timelines = state.enabledTimelines
timelines = { ...timelines, direct: false }
commit(MUTATION_TYPES.UPDATE_ENABLED_TIMELINES, timelines)
},
clearUnread: ({ commit }) => {
commit(MUTATION_TYPES.CHANGE_UNREAD_HOME_TIMELINE, false)
commit(MUTATION_TYPES.CHANGE_UNREAD_NOTIFICATIONS, false)