Markury 6fff93fe45 fix(dz): implement alternative track fallback for error 2002
("Track token has
no sufficient rights on requested media").

Previous behavior:
- Only tried format fallback (FLAC → MP3_320 → MP3_128)
- Used same track token for all format attempts
- Failed when error 2002 occurred even if alternative tracks existed

New behavior:
- When error 2002 occurs, fetches FALLBACK.SNG_ID and gets fresh token
- Retries with same format but different track ID
- Loops through all alternative track IDs before trying format fallback
- Only after exhausting alternatives does it fall back to lower quality formats
2025-10-03 11:43:11 -04:00
2025-10-02 23:30:31 -04:00
2025-09-30 11:19:56 -04:00
2025-10-01 19:27:41 -04:00
2025-10-01 22:19:10 -04:00
2025-09-30 11:19:56 -04:00
2025-09-30 11:19:56 -04:00
2025-09-30 11:19:56 -04:00

Shark!

Desktop music management application written in Typescript.

Inspiration

Inspired by this post on X, and the functionality of Deemix, written from the ground up for Tauri's webwiew without the Node.js dependency. Instead it has much more specific dependencies :)

Tech Stack

Setup

Prerequisites

  • Bun installed
  • Rust toolchain (for Tauri)

Installation

bun install

Configuration

  1. Run the app: bun run tauri dev
  2. Go to Settings and configure:
    • Music folder (where downloads will be saved)
    • Playlists folder (for .m3u8 files)
    • Download settings (format, concurrency, overwrite behavior)

Development

# Run dev server (hot reload)
bun run tauri dev

# Build for production
bun run tauri build

# Type checking
bun run check

Architecture

src/
├── routes/              # SvelteKit pages
│   ├── library/         # Local library view
│   ├── services/        # Downloads and metadata services UI
│   ├── downloads/       # Download queue UI
│   └── settings/        # App settings
├── lib/
│   ├── services/        # Downloads and metadata services
│   ├── library/         # Library scanner, album/playlist loaders
│   ├── stores/          # Svelte stores (settings, auth, queue)
│   └── types/           # TypeScript type definitions
src-tauri/
├── capabilities/        # Tauri security permissions
└── tauri.conf.json      # Tauri configuration

License

This repo has been made source available. It is not licensed under a single open source license. Check upstream libraries for license details.

Description
No description provided
Readme 2.2 MiB
Languages
TypeScript 46.9%
Svelte 44%
Rust 8.6%
JavaScript 0.3%