- Fix duplicate Telegram notifications: SyncArtistDiscography no longer wipes notifications_sent for the whole artist on every cache-miss re-sync; only markers for releases that disappear are pruned (FK-safe via INSERT OR REPLACE + rgid NOT IN (...)). - Cache empty MusicBrainz discographies via a new artist_settings.last_synced column (migration 009) so zero-release artists honor the TTL instead of being re-fetched every cycle. - Wire the Web UI server and Telegram notifier scheduler into main.run/NewApp. - Guard startPeriodicSync against overlapping syncs with a done-channel slot. - Add server.public_url config; NewServerWithConfig derives reachable links and no longer advertises the 0.0.0.0 bind address. - Web handlers: use scanner.ScanArtist per artist, drop always-false releaseIgnored lookup and dead endsWith, thread configured threshold. - Limit :memory: DB pool to one connection so migrations and queries share the same in-memory store.
37 lines
1.0 KiB
Plaintext
37 lines
1.0 KiB
Plaintext
server:
|
|
host: "0.0.0.0"
|
|
port: 8080
|
|
# Basic Auth for Web UI access
|
|
username: "admin"
|
|
password: "CHANGE_ME"
|
|
# Externally-reachable base URL for links in Telegram digests (e.g. behind a
|
|
# reverse proxy). If omitted, links are derived from host:port — but when host
|
|
# is 0.0.0.0 (the unspecified bind address) no link is emitted, since it is
|
|
# not reachable from outside the host.
|
|
public_url: "https://naviwatcher.example.com"
|
|
|
|
navidrome:
|
|
url: "http://localhost:4533"
|
|
user: "watcher_service"
|
|
password: "CHANGE_ME"
|
|
|
|
musicbrainz:
|
|
user_agent: "NaviWatcher/1.0 ( your-email@example.com )"
|
|
cache_ttl: 24h
|
|
|
|
telegram:
|
|
enabled: true
|
|
token: "bot_token"
|
|
chat_id: "your_chat_id"
|
|
cron_schedule: "0 10 * * *"
|
|
|
|
scanner:
|
|
fuzzy_threshold: 0.85
|
|
|
|
# Periodic sync+scan pipeline: how often NaviWatcher pulls artists/albums from
|
|
# Navidrome, resolves MusicBrainz discographies, and re-runs the scanner.
|
|
# Accepts any duration Go's time.ParseDuration understands (e.g. "6h", "30m").
|
|
# Defaults to 6h when omitted.
|
|
sync:
|
|
interval: 6h
|