diff --git a/src/main/ipc/updater-handlers.js b/src/main/ipc/updater-handlers.js index 9c9c1d6..ae8ff92 100644 --- a/src/main/ipc/updater-handlers.js +++ b/src/main/ipc/updater-handlers.js @@ -1,13 +1,10 @@ const { ipcMain } = require('electron'); -const { resolveFeedUrl } = require('../updater/feed-config'); +const { feedConfigFor } = require('../updater/feed-config'); function register({ updater, getMainWindow, getChannel }) { ipcMain.handle('updater:check', async () => { const channel = getChannel(); - const version = require('electron').app.getVersion(); - const platform = process.platform; - const feed = resolveFeedUrl(channel, version, platform); - updater.autoUpdater.setFeedURL({ url: feed.replace(/\/latest-[^/]+\.yml$/, '') }); + updater.autoUpdater.setFeedURL(feedConfigFor(channel)); await updater.check(); return { state: updater.state }; }); diff --git a/src/main/updater/feed-config.js b/src/main/updater/feed-config.js index 6c2ab83..1df7c23 100644 --- a/src/main/updater/feed-config.js +++ b/src/main/updater/feed-config.js @@ -28,4 +28,11 @@ function resolveFeedUrl(channel, version, platform) { return feedForChannel(channel, version, platform); } -module.exports = { resolveFeedUrl, FEEDS }; \ No newline at end of file +function feedConfigFor(channel) { + if (channel === 'github') { + return { provider: 'github', owner: 'amitwh', repo: 'markdown-converter' }; + } + return { provider: 'generic', url: 'https://updates.concreteinfo.co.in/v5' }; +} + +module.exports = { resolveFeedUrl, feedConfigFor, FEEDS }; \ No newline at end of file diff --git a/src/renderer/stores/settings-store.ts b/src/renderer/stores/settings-store.ts index a0cdf87..cc5525c 100644 --- a/src/renderer/stores/settings-store.ts +++ b/src/renderer/stores/settings-store.ts @@ -27,9 +27,14 @@ export const useSettingsStore = create()( }, onRehydrateStorage: () => (state) => { if (!state) return; - const result = settingsSchema.safeParse(state); - if (!result.success) { - console.warn('[settings-store] invalid persisted state, resetting to defaults', result.error); + try { + const result = settingsSchema.safeParse(state); + if (!result.success) { + console.warn('[settings-store] invalid persisted state, resetting to defaults', result.error); + useSettingsStore.setState({ ...DEFAULTS } as any); + } + } catch (err) { + console.warn('[settings-store] rehydration failed, resetting to defaults', err); useSettingsStore.setState({ ...DEFAULTS } as any); } }, diff --git a/tests/unit/main/updater/feed-config.test.js b/tests/unit/main/updater/feed-config.test.js index 99a7ee0..bf9515d 100644 --- a/tests/unit/main/updater/feed-config.test.js +++ b/tests/unit/main/updater/feed-config.test.js @@ -1,4 +1,4 @@ -const { resolveFeedUrl, FEEDS } = require('../../../../src/main/updater/feed-config'); +const { resolveFeedUrl, feedConfigFor, FEEDS } = require('../../../../src/main/updater/feed-config'); describe('feed-config', () => { test('resolves github channel to GitHub Releases feed', () => { @@ -30,4 +30,20 @@ describe('feed-config', () => { expect(FEEDS.github).toBeDefined(); expect(FEEDS.concreteinfo).toBeDefined(); }); -}); \ No newline at end of file +}); +describe('feedConfigFor', () => { + test('returns github provider config for github channel', () => { + const config = feedConfigFor('github'); + expect(config).toEqual({ provider: 'github', owner: 'amitwh', repo: 'markdown-converter' }); + }); + + test('returns generic provider config for concreteinfo channel', () => { + const config = feedConfigFor('concreteinfo'); + expect(config).toEqual({ provider: 'generic', url: 'https://updates.concreteinfo.co.in/v5' }); + }); + + test('falls back to generic provider on unknown channel', () => { + const config = feedConfigFor('something-weird'); + expect(config).toEqual({ provider: 'generic', url: 'https://updates.concreteinfo.co.in/v5' }); + }); +});