{"record":{"id":"dd802131eb75fa93","repo":"tonhowtf/omniget","slug":"player-failed-saving-rpc-show-buttons","errorCode":null,"errorMessage":"[player] failed saving rpc show_buttons","messagePattern":"\\[player\\] failed saving rpc show_buttons","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"src/lib/study-music/player-store.svelte.ts","lineNumber":855,"sourceCode":"    this._rpcShowCover = value;\n    try {\n      await pluginInvoke(\"study\", \"study:music:rpc:music_settings:set\", {\n        show_cover: value,\n      });\n    } catch (e) {\n      console.warn(\"[player] failed saving rpc show_cover\", e);\n    }\n    this.rpcOnPlaybackChange();\n  }\n\n  async setRpcShowButtons(value: boolean) {\n    this._rpcShowButtons = value;\n    try {\n      await pluginInvoke(\"study\", \"study:music:rpc:music_settings:set\", {\n        show_buttons: value,\n      });\n    } catch (e) {\n      console.warn(\"[player] failed saving rpc show_buttons\", e);\n    }\n    this.rpcOnPlaybackChange();\n  }\n\n  async setRpcUpdateIntervalMs(ms: number) {\n    const clamped = MusicPlayerStore.clampRpcInterval(ms);\n    this._rpcUpdateIntervalMs = clamped;\n    try {\n      await pluginInvoke(\"study\", \"study:music:rpc:music_settings:set\", {\n        update_interval_ms: clamped,\n      });\n    } catch (e) {\n      console.warn(\"[player] failed saving rpc update_interval_ms\", e);\n    }\n    if (this._rpcTimer !== null) {\n      this.stopRpcLoop();\n      this.startRpcLoop();\n    }","sourceCodeStart":837,"sourceCodeEnd":873,"githubUrl":"https://github.com/tonhowtf/omniget/blob/8600b91f4246848bac346874daa9e61c1fc5677a/src/lib/study-music/player-store.svelte.ts#L837-L873","documentation":"Same family as show_cover: the show_buttons RPC preference is applied in memory but its persistence call to study:music:rpc:music_settings:set rejects, producing this warning. Buttons still render per the new value for the session.","triggerScenarios":"Toggling 'show buttons' in Discord RPC settings while the backend settings:set command fails (plugin missing, IPC error, settings write rejected).","commonSituations":"App started before plugin backend ready; unwritable settings file; version skew between frontend command names and plugin implementation.","solutions":["Ensure the study plugin backend is initialized before changing RPC settings","Check the caught error for a file-write/permission cause and fix permissions","Retry the save once the backend responds","Sync frontend/backend versions so the command exists"],"exampleFix":"// before\nawait pluginInvoke(\"study\", \"study:music:rpc:music_settings:set\", { show_buttons: value });\n// after\nif (!(await ensureBackendReady(\"study\"))) return scheduleRetry(() => setRpcShowButtons(value));\nawait pluginInvoke(\"study\", \"study:music:rpc:music_settings:set\", { show_buttons: value });","handlingStrategy":"try-catch","validationCode":"if (typeof value !== \"boolean\") return;","typeGuard":"function isBool(v: unknown): v is boolean { return typeof v === \"boolean\"; }","tryCatchPattern":"try { await pluginInvoke(\"study\", \"study:music:rpc:music_settings:set\", { show_buttons: value }); } catch (e) { console.warn(\"[player] failed saving rpc show_buttons\", e); markSettingsDirty({ show_buttons: value }); }","preventionTips":["Reuse one shared settings-save helper for all RPC flags","Retry persistence once backend is ready","Surface a subtle 'settings not saved' indicator to the user"],"tags":["ipc","persistence","discord-rpc"],"backgroundTag":"api-request-failed","analyzedSha":"8600b91f4246848bac346874daa9e61c1fc5677a","analyzedAt":"2026-09-12T14:29:19.317Z","contentChangedAt":"2026-09-12T14:29:19.317Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}