mirror of
https://github.com/willmiao/ComfyUI-Lora-Manager.git
synced 2026-10-05 09:35:31 -03:00
refactor(update)!: make obtainability a property of updates, not a surface
The owner could not tell from the UI what "Buzz Price Tracking" enabled, what the "Price alert threshold" number meant, or what "Price Alerts" was alerting about. That was not a copy problem: the implementation exposed our mechanism (a page scrape) and our SQL predicates as the user's concepts. Two concrete defects came from the same root: - the alert population included versions the user already owns (neither the event generator nor the query filtered on is_in_library; in the owner's library 28 of 52 gated versions were already downloaded, so most "alerts" were about files already on disk, which cannot become cheaper *for them*); - a threshold-filtered state list lived in a notification surface, so an empty panel had three indistinguishable causes and read as a broken feature. The information model is now the version plus ownership: cost is shown only where a decision exists. Owned -> nothing. Not owned and free -> nothing. Not owned and gated -> the price when it is known, `Paid` without a number when it is not, and early access keeps its countdown because "free on <date>" decides between waiting and paying. The numeric threshold has no place in that model: every decision is categorical (wait / pay / skip), so the setting, the comparison and the whole alert-state machine are gone. - both alert-state columns are removed from the schema rather than left dead; a database created by an unreleased build has them dropped on open (native ALTER TABLE ... DROP COLUMN, guarded), which is a no-op for everyone else - gate events are emitted only for versions the user does not have, and the price-drop event goes with the threshold it belonged to - both alert endpoints, PriceAlertsHandler and the service-registry adapter field it needed are removed: events already reach the UI through the refresh response - the bell tab, panel, CSS, both entry points, the unread watermark and their locales are removed; the setting keeps only the enable flag and the refresh interval and is framed as plumbing - "Price unavailable" is replaced by `Paid`: the gate is certain from the public API, only the number is best-effort, and that is our plumbing, not the user's problem Verified against a copy of the owner's real database: 52 gated versions -> 28 owned (now silent) + 24 the feature is actually about; the drop migration ran and both removed endpoints 404.
This commit is contained in:
+3
-42
@@ -204,7 +204,6 @@
|
||||
"error": "Error al buscar actualizaciones de {type}: {message}",
|
||||
"gateEvents": {
|
||||
"becameFree": "[TODO: Translate] {count} version(s) became free",
|
||||
"priceDrop": "[TODO: Translate] {count} version(s) dropped below your price threshold",
|
||||
"newGate": "[TODO: Translate] {count} version(s) are now paid"
|
||||
}
|
||||
},
|
||||
@@ -234,9 +233,6 @@
|
||||
},
|
||||
"groupByModel": {
|
||||
"label": "Agrupar por modelo"
|
||||
},
|
||||
"priceAlerts": {
|
||||
"label": "[TODO: Translate] Price alerts"
|
||||
}
|
||||
},
|
||||
"header": {
|
||||
@@ -767,8 +763,6 @@
|
||||
"help": "[TODO: Translate] CivitAI does not publish prices in its public API, so prices are read from the model page - one extra request per paid model, refreshed on the interval below. Requires an update check to pick up changes.",
|
||||
"enabled": "[TODO: Translate] Track Buzz prices for paid versions",
|
||||
"enabledHelp": "[TODO: Translate] Show the price on paid and early access versions, and alert when a price drops below your threshold",
|
||||
"threshold": "[TODO: Translate] Price alert threshold (Buzz)",
|
||||
"thresholdHelp": "[TODO: Translate] Alert when a paid version costs this much or less. Use 0 to only be told when a version becomes free.",
|
||||
"refreshHours": "[TODO: Translate] Price refresh interval (hours)",
|
||||
"refreshHoursHelp": "[TODO: Translate] How long a stored price stays fresh before it is fetched again"
|
||||
},
|
||||
@@ -945,9 +939,7 @@
|
||||
"action": "Actualizaciones",
|
||||
"menuLabel": "Mostrar opciones de actualización",
|
||||
"check": "Buscar actualizaciones",
|
||||
"checkTooltip": "Comprobar actualizaciones puede tardar.",
|
||||
"priceAlerts": "[TODO: Translate] Price alerts",
|
||||
"priceAlertsTooltip": "[TODO: Translate] Buzz price alerts for paid versions"
|
||||
"checkTooltip": "Comprobar actualizaciones puede tardar."
|
||||
}
|
||||
},
|
||||
"bulkOperations": {
|
||||
@@ -2031,15 +2023,13 @@
|
||||
"paidTooltip": "Esta versión requiere pago para descargarse",
|
||||
"priceSaleTooltip": "[TODO: Translate] On sale, normally {list} Buzz",
|
||||
"priceBlueBuzzTooltip": "[TODO: Translate] Can also be paid with Blue Buzz",
|
||||
"priceAlertTooltip": "[TODO: Translate] {price} - below your price alert threshold",
|
||||
"freeNow": "[TODO: Translate] Free Now",
|
||||
"freeNowTooltip": "[TODO: Translate] This version no longer requires payment",
|
||||
"ignored": "Ignorada",
|
||||
"ignoredTooltip": "Las notificaciones de actualización están desactivadas para esta versión",
|
||||
"onSiteOnly": "Solo en Sitio",
|
||||
"onSiteOnlyTooltip": "Esta versión solo está disponible para generación en el sitio de CivitAI",
|
||||
"priceUnavailable": "[TODO: Translate] Price unavailable",
|
||||
"priceUnavailableTooltip": "[TODO: Translate] CivitAI does not publish this price in its public API, and mature model pages can only be read in a browser"
|
||||
"earlyAccessTooltipUntil": "[TODO: Translate] Early access until {date}, free to download after that"
|
||||
},
|
||||
"actions": {
|
||||
"download": "Descargar",
|
||||
@@ -2328,8 +2318,7 @@
|
||||
"notificationsTitle": "Centro de notificaciones",
|
||||
"tabs": {
|
||||
"updates": "Actualizaciones",
|
||||
"messages": "Mensajes",
|
||||
"priceAlerts": "[TODO: Translate] Price Alerts"
|
||||
"messages": "Mensajes"
|
||||
},
|
||||
"updateAvailable": "Actualización disponible",
|
||||
"noChangelogAvailable": "No hay registro de cambios detallado disponible. Revisa GitHub para más información.",
|
||||
@@ -2385,34 +2374,6 @@
|
||||
"shown": "Mostrado {time}",
|
||||
"dismissed": "Descartado {time}",
|
||||
"active": "Activo"
|
||||
},
|
||||
"priceAlerts": {
|
||||
"disabled": "[TODO: Translate] CivitAI does not publish prices in its public API, so prices are read from the model page. Turn on price tracking to see them here.",
|
||||
"openSettings": "[TODO: Translate] Open settings",
|
||||
"segmentsLabel": "[TODO: Translate] Alert kind",
|
||||
"segments": {
|
||||
"belowThreshold": "[TODO: Translate] Under threshold",
|
||||
"becameFree": "[TODO: Translate] Became free"
|
||||
},
|
||||
"thresholdLabel": "[TODO: Translate] Alert threshold: {buzz} Buzz",
|
||||
"empty": "[TODO: Translate] Nothing is under your price threshold right now.",
|
||||
"emptyFree": "[TODO: Translate] No version has become free yet.",
|
||||
"loadFailed": "[TODO: Translate] Could not refresh the alerts; showing the last known list.",
|
||||
"lastChecked": "[TODO: Translate] Prices last checked {when}",
|
||||
"justNow": "[TODO: Translate] just now",
|
||||
"minutesAgo": "[TODO: Translate] {count} min ago",
|
||||
"hoursAgo": "[TODO: Translate] {count} h ago",
|
||||
"daysAgo": "[TODO: Translate] {count} d ago",
|
||||
"freeNow": "[TODO: Translate] Free now",
|
||||
"blueBuzz": "[TODO: Translate] Blue Buzz OK",
|
||||
"earlyAccessUntil": "[TODO: Translate] Early access until {date}",
|
||||
"inLibrary": "[TODO: Translate] In library",
|
||||
"notInLibrary": "[TODO: Translate] Not in library",
|
||||
"droppedAgo": "[TODO: Translate] dropped {when}",
|
||||
"openCivitai": "[TODO: Translate] Open on CivitAI",
|
||||
"openLocal": "[TODO: Translate] Open",
|
||||
"unavailable": "[TODO: Translate] {count} paid version(s) have no readable price (mature models can only be read in a browser)",
|
||||
"emptyZeroThreshold": "[TODO: Translate] {count} paid version(s) have a known price, but your threshold is 0 Buzz so only free versions are listed. Set a threshold in Settings - Library to catch price drops."
|
||||
}
|
||||
},
|
||||
"support": {
|
||||
|
||||
Reference in New Issue
Block a user