Molunerfinn/PicGo · error
result.error (dynamic message propagated from RPC failure)
Error message
result.error (dynamic message propagated from RPC failure)
What it means
fetchPicGoCloudUsage throws Error(result.error) when the PICGO_CLOUD_GET_USAGE RPC via cloudAdapter.getUsage() reports success:false, propagating the dynamic main-process error text into the React Query error state. The fetcher returns IPicGoCloudUsage | null on success, so only real RPC failures throw.
Source
Thrown at src/renderer/queries/picgo-cloud-usage.ts:13
import { useQuery } from '@tanstack/react-query'
import type { IPicGoCloudUsage } from '#/types/cloud'
import { cloudAdapter } from '@/adapters/cloud'
import { rendererQueryClient } from './query-client'
export const PicGoCloudUsageQueryKeys = {
usage: ['picgo-cloud', 'usage'] as const
}
async function fetchPicGoCloudUsage (): Promise<IPicGoCloudUsage | null> {
const result = await cloudAdapter.getUsage()
if (!result.success) {
throw new Error(result.error)
}
return result.data
}
export function usePicGoCloudUsageQuery () {
return useQuery({
queryKey: PicGoCloudUsageQueryKeys.usage,
queryFn: fetchPicGoCloudUsage,
refetchOnWindowFocus: true
})
}
export async function invalidatePicGoCloudUsageQuery () {
await rendererQueryClient.invalidateQueries({
queryKey: PicGoCloudUsageQueryKeys.usage
})
}
View on GitHub (pinned to 07ec7068a5)
Solutions
- Check query.error.message for the code/message returned by the RPC.
- Map known codes with resolveCloudErrorMessage to show the right localized guidance (upgrade vs renew).
- Re-login if auth expired, then invalidate ['picgo-cloud','usage'].
- Refetch on reconnect; consider a fallback '—' rendering for usage when the query is in error state.
Example fix
null
Defensive patterns
Strategy: fallback
Validate before calling
const userInfo = rendererQueryClient.getQueryData<IPicGoCloudUserInfo | null>(['picgo-cloud', 'user-info'])
if (!userInfo) throw new Error('Login required to fetch usage') Type guard
function isUsageResult<T>(r: { success: boolean, data?: T | null, error?: string }): r is { success: true, data: T | null } {
return r.success === true
} Try / catch
const usageQuery = usePicGoCloudUsageQuery()
const usage = usageQuery.isError ? null : usageQuery.data // fallback rendering
if (usageQuery.isError) {
toast.error(resolveCloudErrorMessage(i18n.t, undefined, undefined, usageQuery.error.message))
} Prevention
- Render '—' or a retry button when the usage query errors instead of assuming data exists.
- Map QUOTA_EXCEEDED / lifecycle codes via resolveCloudErrorMessage for clear guidance.
- Re-authenticate and invalidate ['picgo-cloud','usage'] after auth errors.
- Avoid tight polling; refetch on window focus to reduce transient failures.
When it happens
Trigger: Usage RPC fails: no/expired PicGo Cloud session, quota or lifecycle error codes from picgo-hub (QUOTA_EXCEEDED, ACCOUNT_FROZEN), network failure, or main-process handler error.
Common situations: Usage widget polling while offline; frozen/grace-period accounts where usage is restricted; token rotation invalidating the session; server outage.
Related errors
- result.error (dynamic message propagated from RPC failure)
- result.error (dynamic message propagated from RPC failure)
- result.error (dynamic message propagated from RPC failure)
- result.error (dynamic message propagated from RPC failure)
- Install plugin failed
AI-assisted analysis of Molunerfinn/PicGo@07ec7068a5 (2026-08-30).
Data as JSON: /api/errors/fe0c70a5ccfa258b.
Report an issue: GitHub.