Bump to v0.12.13 — union legacy + cloud on first podcast hydrate

This commit is contained in:
Jure
2026-05-15 20:50:47 +02:00
parent 1cbd13031d
commit 0d4153e6de
7 changed files with 34 additions and 6 deletions
+6
View File
@@ -69,6 +69,12 @@ jobs:
> **Windows note:** The installer is not yet code-signed. Windows SmartScreen will show an "Unknown publisher" warning — click "More info → Run anyway" to install.
### v0.12.13 — Podcast subscription merge on first upgrade
Fixes a data-loss edge case introduced by v0.12.12. If you'd been using Vega on **multiple machines before v0.12.12**, the first machine to upgrade would publish its list to the relay; the second machine to upgrade would then silently overwrite its own local-only additions with the cloud list. The first-time hydrate now **unions** the pre-upgrade local list with the cloud list and re-publishes the merger, so subscriptions you'd added on any pre-upgrade machine all survive. Subsequent hydrates keep the cloud-wins behavior — removals on one machine still propagate everywhere as expected.
This only matters for the upgrade window. Once your subscription list has fully synced across all your devices, behavior is identical to v0.12.12.
### v0.12.12 — Podcasts that follow your account
Your "My Podcasts" list now lives on Nostr, keyed to your pubkey. Reinstall the app on a new machine, switch devices, wipe local storage — your subscriptions come back automatically as long as you sign in with the same key.
+1 -1
View File
@@ -1,6 +1,6 @@
# Maintainer: hoornet <hoornet@users.noreply.github.com>
pkgname=vega-nostr
pkgver=0.12.12
pkgver=0.12.13
pkgrel=1
pkgdesc="Cross-platform Nostr desktop client with Lightning integration"
arch=('x86_64')
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "vega",
"private": true,
"version": "0.12.12",
"version": "0.12.13",
"type": "module",
"scripts": {
"dev": "vite",
+1 -1
View File
@@ -5429,7 +5429,7 @@ checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
[[package]]
name = "vega"
version = "0.12.12"
version = "0.12.13"
dependencies = [
"futures-util",
"hex",
+1 -1
View File
@@ -1,6 +1,6 @@
[package]
name = "vega"
version = "0.12.12"
version = "0.12.13"
description = "Cross-platform Nostr desktop client with Lightning integration"
authors = ["hoornet"]
edition = "2021"
+1 -1
View File
@@ -1,7 +1,7 @@
{
"$schema": "https://schema.tauri.app/config/2",
"productName": "Vega",
"version": "0.12.12",
"version": "0.12.13",
"identifier": "com.hoornet.vega",
"build": {
"beforeDevCommand": "npm run dev",
+23 -1
View File
@@ -285,7 +285,29 @@ export const usePodcastStore = create<PodcastState>((set, get) => ({
if (get().activePubkey !== pubkey) return;
if (result && result.shows.length > 0) {
// Cloud wins: replace local cache with relay state.
// Special case: if this is the FIRST hydrate after upgrade AND the user
// had a pre-upgrade local list AND the cloud already has data (from a
// different machine that upgraded first), union the two so the local-only
// additions on this machine aren't silently dropped. Publish the union so
// the first machine picks them up too. Subsequent hydrates keep
// cloud-wins semantics, so removals still propagate.
if (legacy && legacy.length > 0) {
const seen = new Set(result.shows.map((s) => s.feedUrl));
const localOnly = legacy.filter((s) => !seen.has(s.feedUrl));
const merged = [...result.shows, ...localOnly];
saveSubscriptions(pubkey, merged);
set({ subscriptions: merged });
if (localOnly.length > 0 && getNDK().signer) {
try {
await publishPodcastList(merged);
} catch (err) {
debug.warn("[Vega] Failed to publish merged podcast list:", err);
}
}
return;
}
// Steady-state: cloud wins, replace local cache with relay state.
saveSubscriptions(pubkey, result.shows);
set({ subscriptions: result.shows });
return;