From ee975e5854c7def11532ffb8275b37c258d308e9 Mon Sep 17 00:00:00 2001 From: wvffle Date: Tue, 9 Aug 2022 01:08:31 +0000 Subject: [PATCH] Add error handler in all unhandled places --- front/src/App.vue | 21 +++--- front/src/components/SetInstanceModal.vue | 12 ++-- front/src/components/audio/Search.vue | 4 +- front/src/components/audio/album/Widget.vue | 7 +- front/src/components/audio/artist/Widget.vue | 7 +- front/src/components/audio/podcast/Row.vue | 12 ++-- front/src/components/audio/track/Table.vue | 12 ++-- front/src/components/audio/track/Widget.vue | 7 +- front/src/components/auth/ApplicationEdit.vue | 9 ++- front/src/components/channels/UploadForm.vue | 8 ++- front/src/components/favorites/List.vue | 18 +++-- .../components/federation/LibraryWidget.vue | 5 +- front/src/components/library/AlbumBase.vue | 20 +++--- front/src/components/library/Albums.vue | 18 +++-- front/src/components/library/ArtistDetail.vue | 8 ++- front/src/components/library/Artists.vue | 25 +++---- front/src/components/library/EditCard.vue | 5 +- front/src/components/library/EditDetail.vue | 12 ++-- front/src/components/library/FileUpload.vue | 14 ++-- front/src/components/library/Home.vue | 12 ++-- front/src/components/library/Podcasts.vue | 31 +++++---- front/src/components/library/Radios.vue | 20 +++--- front/src/components/library/TrackBase.vue | 32 +++++---- front/src/components/library/TrackDetail.vue | 4 +- .../src/components/library/radios/Filter.vue | 8 ++- front/src/components/manage/ChannelsTable.vue | 14 ++-- .../components/manage/library/AlbumsTable.vue | 18 +++-- .../manage/library/ArtistsTable.vue | 16 +++-- .../manage/library/EditsCardList.vue | 26 ++++---- .../manage/library/LibrariesTable.vue | 19 +++--- .../components/manage/library/TagsTable.vue | 18 +++-- .../components/manage/library/TracksTable.vue | 18 +++-- .../manage/library/UploadsTable.vue | 22 ++++--- .../manage/moderation/AccountsTable.vue | 16 +++-- .../manage/moderation/DomainsTable.vue | 18 +++-- .../manage/moderation/NotesThread.vue | 7 +- .../manage/moderation/ReportCard.vue | 21 +++--- .../manage/moderation/UserRequestCard.vue | 11 ++-- .../manage/users/InvitationsTable.vue | 18 +++-- .../components/manage/users/UsersTable.vue | 18 +++-- front/src/composables/useErrorHandler.ts | 59 +++++++++++++++++ front/src/init/sentry.ts | 2 +- front/src/store/index.ts | 65 ++++++++++--------- front/src/views/Notifications.vue | 14 ++-- front/src/views/admin/Settings.vue | 12 ++-- front/src/views/admin/library/TrackDetail.vue | 11 ++-- .../views/admin/moderation/ReportsList.vue | 22 ++++--- .../views/admin/moderation/RequestsList.vue | 18 +++-- front/src/views/auth/ProfileBase.vue | 13 ++-- front/src/views/channels/DetailBase.vue | 26 ++++---- .../src/views/channels/SubscriptionsList.vue | 13 ++-- .../views/content/libraries/FilesTable.vue | 24 ++++--- front/src/views/content/remote/Card.vue | 18 +++-- front/src/views/library/DetailBase.vue | 16 +++-- front/src/views/library/Edit.vue | 12 ++-- front/src/views/playlists/Detail.vue | 20 +++--- front/src/views/playlists/List.vue | 9 ++- front/src/views/radios/Detail.vue | 16 +++-- 58 files changed, 602 insertions(+), 359 deletions(-) create mode 100644 front/src/composables/useErrorHandler.ts diff --git a/front/src/App.vue b/front/src/App.vue index 4bc357c44..0db4ba1b4 100644 --- a/front/src/App.vue +++ b/front/src/App.vue @@ -1,22 +1,23 @@ diff --git a/front/src/components/library/Albums.vue b/front/src/components/library/Albums.vue index afec15546..6fb0d84b5 100644 --- a/front/src/components/library/Albums.vue +++ b/front/src/components/library/Albums.vue @@ -2,19 +2,23 @@ import type { RouteWithPreferences, OrderingField } from '~/store/ui' import type { OrderingProps } from '~/composables/useOrdering' -import qs from 'qs' -import axios from 'axios' -import $ from 'jquery' import { onBeforeRouteUpdate, useRouter } from 'vue-router' import { computed, onMounted, reactive, ref, watch } from 'vue' import { useGettext } from 'vue3-gettext' +import { useStore } from '~/store' + +import axios from 'axios' +import $ from 'jquery' +import qs from 'qs' + +import TagsSelector from '~/components/library/TagsSelector.vue' import AlbumCard from '~/components/audio/album/Card.vue' import Pagination from '~/components/vui/Pagination.vue' -import TagsSelector from '~/components/library/TagsSelector.vue' -import useLogger from '~/composables/useLogger' + import useSharedLabels from '~/composables/locale/useSharedLabels' +import useErrorHandler from '~/composables/useErrorHandler' import useOrdering from '~/composables/useOrdering' -import { useStore } from '~/store' +import useLogger from '~/composables/useLogger' interface Props extends OrderingProps { defaultPage?: number @@ -91,7 +95,7 @@ const fetchData = async () => { result.value = response.data } catch (error) { - // TODO (wvffle): Handle error + useErrorHandler(error as Error) result.value = null } finally { logger.timeEnd('Fetching albums') diff --git a/front/src/components/library/ArtistDetail.vue b/front/src/components/library/ArtistDetail.vue index 209c415e2..9d2594c92 100644 --- a/front/src/components/library/ArtistDetail.vue +++ b/front/src/components/library/ArtistDetail.vue @@ -7,9 +7,11 @@ import { useStore } from '~/store' import axios from 'axios' -import AlbumCard from '~/components/audio/album/Card.vue' -import TrackTable from '~/components/audio/track/Table.vue' import LibraryWidget from '~/components/federation/LibraryWidget.vue' +import TrackTable from '~/components/audio/track/Table.vue' +import AlbumCard from '~/components/audio/album/Card.vue' + +import useErrorHandler from '~/composables/useErrorHandler' interface Props { object: Artist @@ -42,7 +44,7 @@ const loadMoreAlbums = async () => { additionalAlbums.push(...additionalAlbums.concat(response.data.results)) loadMoreAlbumsUrl.value = response.data.next } catch (error) { - // TODO (wvffle): Handle error + useErrorHandler(error as Error) } isLoadingMoreAlbums.value = false diff --git a/front/src/components/library/Artists.vue b/front/src/components/library/Artists.vue index a8ea2a136..b3f24d95e 100644 --- a/front/src/components/library/Artists.vue +++ b/front/src/components/library/Artists.vue @@ -2,20 +2,23 @@ import type { RouteWithPreferences, OrderingField } from '~/store/ui' import type { OrderingProps } from '~/composables/useOrdering' -import qs from 'qs' -import axios from 'axios' -import $ from 'jquery' - -import ArtistCard from '~/components/audio/artist/Card.vue' -import Pagination from '~/components/vui/Pagination.vue' -import TagsSelector from '~/components/library/TagsSelector.vue' -import useLogger from '~/composables/useLogger' -import useSharedLabels from '~/composables/locale/useSharedLabels' import { computed, reactive, ref, watch, onMounted } from 'vue' +import { onBeforeRouteUpdate, useRouter } from 'vue-router' import { useGettext } from 'vue3-gettext' import { useStore } from '~/store' + +import axios from 'axios' +import $ from 'jquery' +import qs from 'qs' + +import TagsSelector from '~/components/library/TagsSelector.vue' +import ArtistCard from '~/components/audio/artist/Card.vue' +import Pagination from '~/components/vui/Pagination.vue' + +import useSharedLabels from '~/composables/locale/useSharedLabels' +import useErrorHandler from '~/composables/useErrorHandler' import useOrdering from '~/composables/useOrdering' -import { onBeforeRouteUpdate, useRouter } from 'vue-router' +import useLogger from '~/composables/useLogger' interface Props extends OrderingProps { defaultPage?: number @@ -95,7 +98,7 @@ const fetchData = async () => { result.value = response.data } catch (error) { - // TODO (wvffle): Handle error + useErrorHandler(error as Error) result.value = null } finally { logger.timeEnd('Fetching artists') diff --git a/front/src/components/library/EditCard.vue b/front/src/components/library/EditCard.vue index 8cc85a89f..79cbb166d 100644 --- a/front/src/components/library/EditCard.vue +++ b/front/src/components/library/EditCard.vue @@ -11,6 +11,7 @@ import { useStore } from '~/store' import axios from 'axios' import useEditConfigs from '~/composables/moderation/useEditConfigs' +import useErrorHandler from '~/composables/useErrorHandler' interface Emits { (e: 'approved', isApproved: boolean): void @@ -126,7 +127,7 @@ const remove = async () => { await axios.delete(`mutations/${props.obj.uuid}/`) emit('deleted') } catch (error) { - // TODO (wvffle): Handle error + useErrorHandler(error as Error) } isLoading.value = false @@ -144,7 +145,7 @@ const approve = async (approved: boolean) => { emit('approved', approved) store.commit('ui/incrementNotifications', { count: -1, type: 'pendingReviewEdits' }) } catch (error) { - // TODO (wvffle): Handle error + useErrorHandler(error as Error) } isLoading.value = false diff --git a/front/src/components/library/EditDetail.vue b/front/src/components/library/EditDetail.vue index fee742306..016ff13b0 100644 --- a/front/src/components/library/EditDetail.vue +++ b/front/src/components/library/EditDetail.vue @@ -2,11 +2,15 @@ import type { EditObject, EditObjectType } from '~/composables/moderation/useEditConfigs' import type { ReviewState } from '~/types' -import axios from 'axios' -import useEditConfigs from '~/composables/moderation/useEditConfigs' -import EditCard from '~/components/library/EditCard.vue' import { computed, ref } from 'vue' +import axios from 'axios' + +import EditCard from '~/components/library/EditCard.vue' + +import useEditConfigs from '~/composables/moderation/useEditConfigs' +import useErrorHandler from '~/composables/useErrorHandler' + interface Props { object: EditObject objectType: EditObjectType @@ -32,7 +36,7 @@ const fetchData = async () => { const response = await axios.get(`mutations/${props.editId}/`) obj.value = response.data } catch (error) { - // TODO (wvffle): Handle error + useErrorHandler(error as Error) } finally { isLoading.value = false } diff --git a/front/src/components/library/FileUpload.vue b/front/src/components/library/FileUpload.vue index 059e73948..0c14b2d21 100644 --- a/front/src/components/library/FileUpload.vue +++ b/front/src/components/library/FileUpload.vue @@ -12,12 +12,14 @@ import { useStore } from '~/store' import axios from 'axios' import LibraryFilesTable from '~/views/content/libraries/FilesTable.vue' -import useWebSocketHandler from '~/composables/useWebSocketHandler' -import updateQueryString from '~/composables/updateQueryString' import FileUploadWidget from './FileUploadWidget.vue' import FsBrowser from './FsBrowser.vue' import FsLogs from './FsLogs.vue' +import useWebSocketHandler from '~/composables/useWebSocketHandler' +import updateQueryString from '~/composables/updateQueryString' +import useErrorHandler from '~/composables/useErrorHandler' + interface Emits { (e: 'uploads-finished', delta: number):void } @@ -111,7 +113,7 @@ const fetchStatus = async () => { uploads[status as keyof typeof uploads] = response.data.count } catch (error) { - // TODO (wvffle): Handle error + useErrorHandler(error as Error) } } } @@ -184,7 +186,7 @@ const fetchQuota = async () => { const response = await axios.get('users/me/') quotaStatus.value = response.data.quota_status } catch (error) { - // TODO (wvffle): Handle error + useErrorHandler(error as Error) } isLoadingQuota.value = false @@ -216,7 +218,7 @@ const fetchFilesystem = async (updateLoading: boolean) => { const response = await axios.get('libraries/fs-import', { params: { path: fsPath.join('/') } }) fsStatus.value = response.data } catch (error) { - // TODO (wvffle): Handle error + useErrorHandler(error as Error) } if (updateLoading) isLoadingFs.value = false @@ -252,7 +254,7 @@ const cancelFsScan = async () => { await axios.delete('libraries/fs-import') fetchFilesystem(false) } catch (error) { - // TODO (wvffle): Handle error + useErrorHandler(error as Error) } } diff --git a/front/src/components/library/Home.vue b/front/src/components/library/Home.vue index ceeb1e43a..bbed52395 100644 --- a/front/src/components/library/Home.vue +++ b/front/src/components/library/Home.vue @@ -1,12 +1,16 @@ diff --git a/front/src/views/admin/Settings.vue b/front/src/views/admin/Settings.vue index ee8c0c1b3..6cdc74db1 100644 --- a/front/src/views/admin/Settings.vue +++ b/front/src/views/admin/Settings.vue @@ -4,12 +4,14 @@ import type { SettingsGroup as SettingsGroupType } from '~/types' import axios from 'axios' import $ from 'jquery' +import { ref, nextTick, onMounted, computed, watch } from 'vue' +import { useCurrentElement } from '@vueuse/core' +import { useGettext } from 'vue3-gettext' +import { useRoute } from 'vue-router' + import SettingsGroup from '~/components/admin/SettingsGroup.vue' -import { useCurrentElement } from '@vueuse/core' -import { ref, nextTick, onMounted, computed, watch } from 'vue' -import { useRoute } from 'vue-router' -import { useGettext } from 'vue3-gettext' +import useErrorHandler from '~/composables/useErrorHandler' const current = ref() const settingsData = ref() @@ -150,7 +152,7 @@ const fetchSettings = async () => { const response = await axios.get('instance/admin/settings/') settingsData.value = response.data } catch (error) { - // TODO (wvffle): Handle error + useErrorHandler(error as Error) } isLoading.value = false diff --git a/front/src/views/admin/library/TrackDetail.vue b/front/src/views/admin/library/TrackDetail.vue index 853b5d936..6123e8427 100644 --- a/front/src/views/admin/library/TrackDetail.vue +++ b/front/src/views/admin/library/TrackDetail.vue @@ -1,13 +1,16 @@ diff --git a/front/src/views/playlists/List.vue b/front/src/views/playlists/List.vue index 1317d82c8..98994f25b 100644 --- a/front/src/views/playlists/List.vue +++ b/front/src/views/playlists/List.vue @@ -4,15 +4,18 @@ import type { OrderingProps } from '~/composables/useOrdering' import axios from 'axios' import $ from 'jquery' -import { computed, ref, watch, onMounted } from 'vue' + import { useRouter, onBeforeRouteUpdate } from 'vue-router' +import { computed, ref, watch, onMounted } from 'vue' import { useGettext } from 'vue3-gettext' import PlaylistCardList from '~/components/playlists/CardList.vue' import Pagination from '~/components/vui/Pagination.vue' + import useSharedLabels from '~/composables/locale/useSharedLabels' -import useLogger from '~/composables/useLogger' +import useErrorHandler from '~/composables/useErrorHandler' import useOrdering from '~/composables/useOrdering' +import useLogger from '~/composables/useLogger' interface Props extends OrderingProps { defaultPage?: number @@ -79,7 +82,7 @@ const fetchData = async () => { result.value = response.data } catch (error) { - // TODO (wvffle): Handle error + useErrorHandler(error as Error) result.value = null } finally { logger.timeEnd('Fetching albums') diff --git a/front/src/views/radios/Detail.vue b/front/src/views/radios/Detail.vue index 192923988..7657098c5 100644 --- a/front/src/views/radios/Detail.vue +++ b/front/src/views/radios/Detail.vue @@ -1,14 +1,18 @@