diff options
Diffstat (limited to 'src/state/models')
-rw-r--r-- | src/state/models/feed-view.ts | 15 | ||||
-rw-r--r-- | src/state/models/get-assertions-view.ts | 9 | ||||
-rw-r--r-- | src/state/models/log.ts | 39 | ||||
-rw-r--r-- | src/state/models/me.ts | 15 | ||||
-rw-r--r-- | src/state/models/members-view.ts | 9 | ||||
-rw-r--r-- | src/state/models/memberships-view.ts | 9 | ||||
-rw-r--r-- | src/state/models/notifications-view.ts | 21 | ||||
-rw-r--r-- | src/state/models/post-thread-view.ts | 5 | ||||
-rw-r--r-- | src/state/models/post.ts | 8 | ||||
-rw-r--r-- | src/state/models/profile-ui.ts | 16 | ||||
-rw-r--r-- | src/state/models/profile-view.ts | 9 | ||||
-rw-r--r-- | src/state/models/reposted-by-view.ts | 9 | ||||
-rw-r--r-- | src/state/models/root-store.ts | 2 | ||||
-rw-r--r-- | src/state/models/session.ts | 17 | ||||
-rw-r--r-- | src/state/models/suggested-actors-view.ts | 9 | ||||
-rw-r--r-- | src/state/models/suggested-invites-view.ts | 11 | ||||
-rw-r--r-- | src/state/models/user-followers-view.ts | 7 | ||||
-rw-r--r-- | src/state/models/user-follows-view.ts | 7 | ||||
-rw-r--r-- | src/state/models/votes-view.ts | 9 |
19 files changed, 129 insertions, 97 deletions
diff --git a/src/state/models/feed-view.ts b/src/state/models/feed-view.ts index c8827b1fb..28f1d77a3 100644 --- a/src/state/models/feed-view.ts +++ b/src/state/models/feed-view.ts @@ -320,11 +320,14 @@ export class FeedModel { this.error = '' } - private _xIdle(err: string = '') { + private _xIdle(err?: any) { this.isLoading = false this.isRefreshing = false this.hasLoaded = true - this.error = cleanError(err) + this.error = err ? cleanError(err.toString()) : '' + if (err) { + this.rootStore.log.error('Posts feed request failed', err) + } } // loader functions @@ -352,7 +355,7 @@ export class FeedModel { await this._replaceAll(res) this._xIdle() } catch (e: any) { - this._xIdle(e.toString()) + this._xIdle(e) } } @@ -363,7 +366,7 @@ export class FeedModel { await this._prependAll(res) this._xIdle() } catch (e: any) { - this._xIdle(e.toString()) + this._xIdle(e) } } @@ -380,7 +383,7 @@ export class FeedModel { await this._appendAll(res) this._xIdle() } catch (e: any) { - this._xIdle(`Failed to load feed: ${e.toString()}`) + this._xIdle(e) } } @@ -408,7 +411,7 @@ export class FeedModel { } while (numToFetch > 0) this._xIdle() } catch (e: any) { - this._xIdle(`Failed to update feed: ${e.toString()}`) + this._xIdle(e) } } diff --git a/src/state/models/get-assertions-view.ts b/src/state/models/get-assertions-view.ts index 4778ef132..bdb2c0894 100644 --- a/src/state/models/get-assertions-view.ts +++ b/src/state/models/get-assertions-view.ts @@ -80,11 +80,14 @@ export class GetAssertionsView { this.error = '' } - private _xIdle(err: string = '') { + private _xIdle(err?: any) { this.isLoading = false this.isRefreshing = false this.hasLoaded = true - this.error = err + this.error = err ? err.toString() : '' + if (err) { + this.rootStore.log.error('Failed to fetch assertions', err) + } } // loader functions @@ -99,7 +102,7 @@ export class GetAssertionsView { this._replaceAll(res) this._xIdle() } catch (e: any) { - this._xIdle(e.toString()) + this._xIdle(e) } } diff --git a/src/state/models/log.ts b/src/state/models/log.ts index 42172a3b1..67f4a210c 100644 --- a/src/state/models/log.ts +++ b/src/state/models/log.ts @@ -1,4 +1,5 @@ import {makeAutoObservable} from 'mobx' +import {XRPCError, XRPCInvalidResponseError} from '@atproto/xrpc' import {isObj, hasProp} from '../lib/type-guards' interface LogEntry { @@ -51,9 +52,7 @@ export class LogModel { } debug(summary: string, details?: any) { - if (details && typeof details !== 'string') { - details = JSON.stringify(details, null, 2) - } + details = detailsToStr(details) console.debug(summary, details || '') this.add({ id: genId(), @@ -65,10 +64,8 @@ export class LogModel { } warn(summary: string, details?: any) { - if (details && typeof details !== 'string') { - details = JSON.stringify(details, null, 2) - } - console.warn(summary, details || '') + details = detailsToStr(details) + console.debug(summary, details || '') this.add({ id: genId(), type: 'warn', @@ -79,10 +76,8 @@ export class LogModel { } error(summary: string, details?: any) { - if (details && typeof details !== 'string') { - details = JSON.stringify(details, null, 2) - } - console.error(summary, details || '') + details = detailsToStr(details) + console.debug(summary, details || '') this.add({ id: genId(), type: 'error', @@ -92,3 +87,25 @@ export class LogModel { }) } } + +function detailsToStr(details?: any) { + if (details && typeof details !== 'string') { + if ( + details instanceof XRPCInvalidResponseError || + details.constructor.name === 'XRPCInvalidResponseError' + ) { + return `The server gave an ill-formatted response.\nMethod: ${ + details.lexiconNsid + }.\nError: ${details.validationError.toString()}` + } else if ( + details instanceof XRPCError || + details.constructor.name === 'XRPCError' + ) { + return `An XRPC error occurred.\nStatus: ${details.status}\nError: ${details.error}\nMessage: ${details.message}` + } else if (details instanceof Error) { + return details.toString() + } + return JSON.stringify(details, null, 2) + } + return details +} diff --git a/src/state/models/me.ts b/src/state/models/me.ts index ae1e6aed2..0ae52db8f 100644 --- a/src/state/models/me.ts +++ b/src/state/models/me.ts @@ -104,22 +104,13 @@ export class MeModel { }) await Promise.all([ this.memberships?.setup().catch(e => { - this.rootStore.log.error( - 'Failed to setup memberships model', - e.toString(), - ) + this.rootStore.log.error('Failed to setup memberships model', e) }), this.mainFeed.setup().catch(e => { - this.rootStore.log.error( - 'Failed to setup main feed model', - e.toString(), - ) + this.rootStore.log.error('Failed to setup main feed model', e) }), this.notifications.setup().catch(e => { - this.rootStore.log.error( - 'Failed to setup notifications model', - e.toString(), - ) + this.rootStore.log.error('Failed to setup notifications model', e) }), ]) } else { diff --git a/src/state/models/members-view.ts b/src/state/models/members-view.ts index 35eafb583..73295f479 100644 --- a/src/state/models/members-view.ts +++ b/src/state/models/members-view.ts @@ -104,11 +104,14 @@ export class MembersViewModel { this.error = '' } - private _xIdle(err: string = '') { + private _xIdle(err?: any) { this.isLoading = false this.isRefreshing = false this.hasLoaded = true - this.error = err + this.error = err ? err.toString() : '' + if (err) { + this.rootStore.log.error('Failed to fetch members', err) + } } // loader functions @@ -123,7 +126,7 @@ export class MembersViewModel { this._replaceAll(res) this._xIdle() } catch (e: any) { - this._xIdle(`Failed to load feed: ${e.toString()}`) + this._xIdle(e) } } diff --git a/src/state/models/memberships-view.ts b/src/state/models/memberships-view.ts index 99bb25645..661b3f6ae 100644 --- a/src/state/models/memberships-view.ts +++ b/src/state/models/memberships-view.ts @@ -82,11 +82,14 @@ export class MembershipsViewModel { this.error = '' } - private _xIdle(err: string = '') { + private _xIdle(err?: any) { this.isLoading = false this.isRefreshing = false this.hasLoaded = true - this.error = err + this.error = err ? err.toString() : '' + if (err) { + this.rootStore.log.error('Failed to fetch memberships', err) + } } // loader functions @@ -101,7 +104,7 @@ export class MembershipsViewModel { this._replaceAll(res) this._xIdle() } catch (e: any) { - this._xIdle(`Failed to load feed: ${e.toString()}`) + this._xIdle(e) } } diff --git a/src/state/models/notifications-view.ts b/src/state/models/notifications-view.ts index 38a8ca133..44f92dd2f 100644 --- a/src/state/models/notifications-view.ts +++ b/src/state/models/notifications-view.ts @@ -151,7 +151,7 @@ export class NotificationsViewItemModel implements GroupedNotification { await this.additionalPost.setup().catch(e => { this.rootStore.log.error( 'Failed to load post needed by notification', - e.toString(), + e, ) }) } @@ -266,10 +266,7 @@ export class NotificationsViewModel { }) this.rootStore.me.clearNotificationCount() } catch (e: any) { - this.rootStore.log.warn( - 'Failed to update notifications read state', - e.toString(), - ) + this.rootStore.log.warn('Failed to update notifications read state', e) } } @@ -282,11 +279,15 @@ export class NotificationsViewModel { this.error = '' } - private _xIdle(err: string = '') { + private _xIdle(err?: any) { this.isLoading = false this.isRefreshing = false this.hasLoaded = true this.error = cleanError(err) + this.error = err ? cleanError(err) : '' + if (err) { + this.rootStore.log.error('Failed to fetch notifications', err) + } } // loader functions @@ -314,7 +315,7 @@ export class NotificationsViewModel { await this._replaceAll(res) this._xIdle() } catch (e: any) { - this._xIdle(`Failed to load notifications: ${e.toString()}`) + this._xIdle(e) } } @@ -332,7 +333,7 @@ export class NotificationsViewModel { await this._appendAll(res) this._xIdle() } catch (e: any) { - this._xIdle(`Failed to load notifications: ${e.toString()}`) + this._xIdle(e) } } @@ -359,7 +360,7 @@ export class NotificationsViewModel { } while (numToFetch > 0) this._xIdle() } catch (e: any) { - this._xIdle(`Failed to update notifications: ${e.toString()}`) + this._xIdle(e) } } @@ -386,7 +387,7 @@ export class NotificationsViewModel { await Promise.all(promises).catch(e => { this.rootStore.log.error( 'Uncaught failure during notifications-view _appendAll()', - e.toString(), + e, ) }) runInAction(() => { diff --git a/src/state/models/post-thread-view.ts b/src/state/models/post-thread-view.ts index 2ada18a40..b7c33cfbd 100644 --- a/src/state/models/post-thread-view.ts +++ b/src/state/models/post-thread-view.ts @@ -236,11 +236,14 @@ export class PostThreadViewModel { this.notFound = false } - private _xIdle(err: any = undefined) { + private _xIdle(err?: any) { this.isLoading = false this.isRefreshing = false this.hasLoaded = true this.error = err ? err.toString() : '' + if (err) { + this.rootStore.log.error('Failed to fetch assertions', err) + } this.notFound = err instanceof GetPostThread.NotFoundError } diff --git a/src/state/models/post.ts b/src/state/models/post.ts index 1c49e32f2..497c8e4c9 100644 --- a/src/state/models/post.ts +++ b/src/state/models/post.ts @@ -63,10 +63,14 @@ export class PostModel implements RemoveIndex<Post.Record> { this.error = '' } - private _xIdle(err: string = '') { + private _xIdle(err?: any) { this.isLoading = false this.hasLoaded = true this.error = cleanError(err) + this.error = err ? cleanError(err) : '' + if (err) { + this.rootStore.log.error('Failed to fetch post', err) + } } // loader functions @@ -87,7 +91,7 @@ export class PostModel implements RemoveIndex<Post.Record> { this._replaceAll(res.value) this._xIdle() } catch (e: any) { - this._xIdle(e.toString()) + this._xIdle(e) } } diff --git a/src/state/models/profile-ui.ts b/src/state/models/profile-ui.ts index 081160e65..fb90fb694 100644 --- a/src/state/models/profile-ui.ts +++ b/src/state/models/profile-ui.ts @@ -114,28 +114,20 @@ export class ProfileUiModel { await Promise.all([ this.profile .setup() - .catch(err => - this.rootStore.log.error('Failed to fetch profile', err.toString()), - ), + .catch(err => this.rootStore.log.error('Failed to fetch profile', err)), this.feed .setup() - .catch(err => - this.rootStore.log.error('Failed to fetch feed', err.toString()), - ), + .catch(err => this.rootStore.log.error('Failed to fetch feed', err)), ]) if (this.isUser) { await this.memberships .setup() - .catch(err => - this.rootStore.log.error('Failed to fetch members', err.toString()), - ) + .catch(err => this.rootStore.log.error('Failed to fetch members', err)) } if (this.isScene) { await this.members .setup() - .catch(err => - this.rootStore.log.error('Failed to fetch members', err.toString()), - ) + .catch(err => this.rootStore.log.error('Failed to fetch members', err)) } } diff --git a/src/state/models/profile-view.ts b/src/state/models/profile-view.ts index 1c825a482..2670627c3 100644 --- a/src/state/models/profile-view.ts +++ b/src/state/models/profile-view.ts @@ -178,11 +178,14 @@ export class ProfileViewModel { this.error = '' } - private _xIdle(err: string = '') { + private _xIdle(err?: any) { this.isLoading = false this.isRefreshing = false this.hasLoaded = true - this.error = err + this.error = err ? err.toString() : '' + if (err) { + this.rootStore.log.error('Failed to fetch profile', err) + } } // loader functions @@ -198,7 +201,7 @@ export class ProfileViewModel { this._replaceAll(res) this._xIdle() } catch (e: any) { - this._xIdle(e.toString()) + this._xIdle(e) } } diff --git a/src/state/models/reposted-by-view.ts b/src/state/models/reposted-by-view.ts index 624d86ec0..1ded30976 100644 --- a/src/state/models/reposted-by-view.ts +++ b/src/state/models/reposted-by-view.ts @@ -94,11 +94,14 @@ export class RepostedByViewModel { this.error = '' } - private _xIdle(err: string = '') { + private _xIdle(err?: any) { this.isLoading = false this.isRefreshing = false this.hasLoaded = true - this.error = err + this.error = err ? err.toString() : '' + if (err) { + this.rootStore.log.error('Failed to fetch reposted by view', err) + } } // loader functions @@ -127,7 +130,7 @@ export class RepostedByViewModel { this._replaceAll(res) this._xIdle() } catch (e: any) { - this._xIdle(`Failed to load feed: ${e.toString()}`) + this._xIdle(e) } } diff --git a/src/state/models/root-store.ts b/src/state/models/root-store.ts index 0166b67e6..5349f10d0 100644 --- a/src/state/models/root-store.ts +++ b/src/state/models/root-store.ts @@ -59,7 +59,7 @@ export class RootStoreModel { if (isNetworkError(e)) { this.session.setOnline(false) // connection lost } - this.log.error('Failed to fetch latest state', e.toString()) + this.log.error('Failed to fetch latest state', e) } } diff --git a/src/state/models/session.ts b/src/state/models/session.ts index 3efb5d2a6..13e0fcbe0 100644 --- a/src/state/models/session.ts +++ b/src/state/models/session.ts @@ -124,7 +124,7 @@ export class SessionModel { } catch (e: any) { this.rootStore.log.error( `Invalid service URL: ${this.data.service}. Resetting session.`, - e.toString(), + e, ) this.clear() return false @@ -160,10 +160,7 @@ export class SessionModel { this.rootStore.me.clear() } this.rootStore.me.load().catch(e => { - this.rootStore.log.error( - 'Failed to fetch local user information', - e.toString(), - ) + this.rootStore.log.error('Failed to fetch local user information', e) }) return // success } @@ -207,10 +204,7 @@ export class SessionModel { this.configureApi() this.setOnline(true, false) this.rootStore.me.load().catch(e => { - this.rootStore.log.error( - 'Failed to fetch local user information', - e.toString(), - ) + this.rootStore.log.error('Failed to fetch local user information', e) }) } } @@ -246,10 +240,7 @@ export class SessionModel { this.rootStore.onboard.start() this.configureApi() this.rootStore.me.load().catch(e => { - this.rootStore.log.error( - 'Failed to fetch local user information', - e.toString(), - ) + this.rootStore.log.error('Failed to fetch local user information', e) }) } } diff --git a/src/state/models/suggested-actors-view.ts b/src/state/models/suggested-actors-view.ts index f52830cfd..358a8491a 100644 --- a/src/state/models/suggested-actors-view.ts +++ b/src/state/models/suggested-actors-view.ts @@ -58,11 +58,14 @@ export class SuggestedActorsViewModel { this.error = '' } - private _xIdle(err: string = '') { + private _xIdle(err?: any) { this.isLoading = false this.isRefreshing = false this.hasLoaded = true - this.error = err + this.error = err ? err.toString() : '' + if (err) { + this.rootStore.log.error('Failed to fetch suggested actors', err) + } } // loader functions @@ -88,7 +91,7 @@ export class SuggestedActorsViewModel { ) this._xIdle() } catch (e: any) { - this._xIdle(e.toString()) + this._xIdle(e) } } diff --git a/src/state/models/suggested-invites-view.ts b/src/state/models/suggested-invites-view.ts index eb0665bca..fadc956cc 100644 --- a/src/state/models/suggested-invites-view.ts +++ b/src/state/models/suggested-invites-view.ts @@ -83,11 +83,14 @@ export class SuggestedInvitesView { this.error = '' } - private _xIdle(err: string = '') { + private _xIdle(err?: any) { this.isLoading = false this.isRefreshing = false this.hasLoaded = true - this.error = err + this.error = err ? err.toString() : '' + if (err) { + this.rootStore.log.error('Failed to fetch suggested invites', err) + } } // loader functions @@ -101,7 +104,7 @@ export class SuggestedInvitesView { } catch (e: any) { this.rootStore.log.error( 'Failed to fetch current scene members in suggested invites', - e.toString(), + e, ) this._xIdle( 'Failed to fetch the current scene members. Check your internet connection and try again.', @@ -113,7 +116,7 @@ export class SuggestedInvitesView { } catch (e: any) { this.rootStore.log.error( 'Failed to fetch current followers in suggested invites', - e.toString(), + e, ) this._xIdle( 'Failed to fetch the your current followers. Check your internet connection and try again.', diff --git a/src/state/models/user-followers-view.ts b/src/state/models/user-followers-view.ts index 2d8d7cf13..6cb8dfeb6 100644 --- a/src/state/models/user-followers-view.ts +++ b/src/state/models/user-followers-view.ts @@ -76,11 +76,14 @@ export class UserFollowersViewModel { this.error = '' } - private _xIdle(err: string = '') { + private _xIdle(err?: any) { this.isLoading = false this.isRefreshing = false this.hasLoaded = true - this.error = err + this.error = err ? err.toString() : '' + if (err) { + this.rootStore.log.error('Failed to fetch user followers', err) + } } // loader functions diff --git a/src/state/models/user-follows-view.ts b/src/state/models/user-follows-view.ts index 8cbafddf9..341f0f806 100644 --- a/src/state/models/user-follows-view.ts +++ b/src/state/models/user-follows-view.ts @@ -76,11 +76,14 @@ export class UserFollowsViewModel { this.error = '' } - private _xIdle(err: string = '') { + private _xIdle(err?: any) { this.isLoading = false this.isRefreshing = false this.hasLoaded = true - this.error = err + this.error = err ? err.toString() : '' + if (err) { + this.rootStore.log.error('Failed to fetch user follows', err) + } } // loader functions diff --git a/src/state/models/votes-view.ts b/src/state/models/votes-view.ts index c92d8ae22..937667b44 100644 --- a/src/state/models/votes-view.ts +++ b/src/state/models/votes-view.ts @@ -91,11 +91,14 @@ export class VotesViewModel { this.error = '' } - private _xIdle(err: string = '') { + private _xIdle(err?: any) { this.isLoading = false this.isRefreshing = false this.hasLoaded = true - this.error = err + this.error = err ? err.toString() : '' + if (err) { + this.rootStore.log.error('Failed to fetch votes', err) + } } // loader functions @@ -124,7 +127,7 @@ export class VotesViewModel { this._replaceAll(res) this._xIdle() } catch (e: any) { - this._xIdle(`Failed to load feed: ${e.toString()}`) + this._xIdle(e) } } |