Commit Graph
100 Commits
Author SHA1 Message Date
michel 44846cdfa8 chore: remove dead code and stale comments
- Drop dead Rooms/Room infrastructure and the rooms field on Context.
- Remove unused ActorMessage::Tick variant and the now-empty handler arm.
- Strip dead active-thread tracking machinery from ThreadPool (unused
  getters, _id/_active_threads/_total_threads parameters).
- Flatten ServerActor::initiate_connection: the duplicated retry block
  was a copy-paste retry against the same address with the same args
  and could never succeed where the first attempt failed.
- Delete commented-out print_hex2/decode debug stubs, dead test
  fixtures in login.rs and message_user.rs, the 47-line commented body
  of RoomListHandler, and assorted // TODO theater.
2026-04-26 17:20:45 +02:00
michel 574833bf61 feat: add download info pane to TUI
Splits the downloads area 60/40 with a new info pane that adapts to the
selected download's status: header (filename, user, size, status, save
path, bitrate, length) plus queued-specific fields (queue position, peer
slots, peer upload speed) or live progress/speed/ETA when transferring.

Plumbs queue position via a new ClientOperation::PlaceInQueueUpdate so
PlaceInQueueResponse messages from peers reach DownloadStore, and threads
search-time metadata (bitrate, length, peer slots/speed) onto Download
through a new download_with_metadata entry point.
2026-04-26 17:19:26 +02:00
michel fa962a0dea Merge branch 'refactor/extract-download-state'
# Conflicts:
#	soulseek-rs-lib/src/client.rs
2026-04-26 12:52:50 +02:00
michel 4775ede762 Merge branch 'refactor/lock-poison-safety' 2026-04-26 12:51:49 +02:00
michel 28baebdb2e refactor: extract DownloadStore from ClientContext
Move the Vec<Download> and the download lifecycle methods (add, remove,
lookup, status update, pause, resume, remove-if-queued) into a new
download_store module. ClientContext keeps thin delegating shims so
peer/listen, peer/download_peer and the existing client tests carry on
unchanged. Client::pause_download / resume_download / remove_queued_download
now delegate one-liners. Client::process_failed_uploads keeps the
read-then-write lock dance but the inner filtering is the new
collect_failed_tokens helper.

Adds dedicated unit tests for the store's behavior (add/get/remove,
pause+resume, queued-only removal, failed-token collection) so the
state-machine logic is exercised independently of Client.
2026-04-26 12:36:30 +02:00
michel 2722552e35 refactor: replace lock unwraps with poison-aware helpers
Add SoulseekRs::LockPoisoned variant and a small RwLockExt/MutexExt
helper module exposing read_safe/write_safe/lock_safe that map
PoisonError to that variant. Walk every non-test lock acquisition
across client, peer/server actors, peer registry, listener and the
thread pool: propagate via ? where the function returns Result, log
and degrade to a sensible default (return early, false, None, empty)
where it does not. Client::connect now returns Result so the CLI can
surface the failure instead of panicking.
2026-04-26 12:32:46 +02:00
michel e1ee3ac493 fix clippy collapsible match warnings 2026-04-26 12:18:00 +02:00
michel 41d129c6bc chore: update license date 2026-04-26 12:00:24 +02:00
Michel de Graaf 6a63703f82 Merge pull request #2 from adalessandro/wip/adalessandro/dotenv
soulseek-rs: main: Add support for dotenv environment
2026-04-26 11:58:29 +02:00
Michel de Graaf dfdd60f1c8 Merge pull request #1 from adalessandro/dev
soulseek-rs: main_tui: Restore terminal status before exiting
2026-04-26 11:57:54 +02:00
michel bff7ca4bd4 chore: change copyright date 2026-04-26 11:55:40 +02:00
michel de58c8cbe2 Add TUI download pause and queued delete 2026-04-26 11:50:37 +02:00
michel 807dea5f17 Fix TUI search cursor editing 2026-04-26 11:43:44 +02:00
Michel de Graaf dfe6f532fa chore: formatting 2026-01-04 20:37:03 +01:00
Michel de Graaf 94b33d4bd6 chore: get rid of generated files 2026-01-04 20:12:51 +01:00
mayor 16c8a4bde9 chore: update to Rust 2024 edition 2026-01-04 20:08:16 +01:00
Michel de Graaf f7ebcccdd3 chore: ignore beads 2026-01-04 19:50:44 +01:00
Michel de Graaf f5b65053e2 fix: hanging TUI on queueing downloads 2025-11-19 09:13:03 +01:00
Michel de Graaf 9f174c4c5e fix: linting 2025-11-19 08:40:41 +01:00
Michel de Graaf bb86e50b4f fix: queuing downloads 2025-11-19 08:27:50 +01:00
Michel de Graaf b7a5037edb chore: keep updating search results 2025-11-18 16:02:19 +01:00
Michel de Graaf 2ba48663e4 feat: logging to log file 2025-11-18 15:49:53 +01:00
Michel de Graaf 4c6d7c6850 chore: refactor UI to use Downloads struct 2025-11-18 14:33:33 +01:00
Michel de Graaf 79da19ed0f chore: refactor downloads 2025-11-18 14:11:25 +01:00
Michel de Graaf 467de9cb91 chore: bump version 2025-11-13 14:13:28 +01:00
Michel de Graaf 9a4ad6c38a feat: main TUI 2025-11-13 14:12:37 +01:00
Michel de Graaf cafa40a09d chore: refactor to support multi search 2025-11-13 10:28:16 +01:00
Michel de Graaf 4a34583f9c chore: improve download selector 2025-11-13 10:08:16 +01:00
Michel de Graaf 6ca179373f chore: bump version 2025-11-12 21:18:36 +01:00
Michel de Graaf fff407c30d chore: bump version 2025-11-12 15:46:50 +01:00
Michel de Graaf f8999dccb1 chore: gif demo 2025-11-12 15:38:29 +01:00
Michel de Graaf 16394a1f60 chore: update feature todo list in readme 2025-11-12 14:57:25 +01:00
Michel de Graaf 69a044b1fa chore: UI tweaks 2025-11-12 14:52:31 +01:00
Michel de Graaf 406def31d9 chore: rename label from files to download 2025-11-12 11:56:32 +01:00
Michel de Graaf e87853c66a chore: bump version 2025-11-12 02:03:17 +01:00
Michel de Graaf 5816d9b632 chore: refactor CLI app with new modules for seperation of concerns, reusable components and consistent styling 2025-11-12 02:02:35 +01:00
Michel de Graaf 5a28452c02 feat: clear filter in multi-select download screen function 2025-11-12 01:52:27 +01:00
Michel de Graaf 689e667ade chore: bump version 2025-11-12 01:41:43 +01:00
Michel de Graaf 3f506389f0 feat: improved search screen 2025-11-12 01:37:08 +01:00
Michel de Graaf f84d4ea41e chore: rename the cli binary to soulseek-rs 2025-11-12 01:36:51 +01:00
Michel de Graaf 30c4fd2aad feat: better search TUI, multi select downloads and parallel downloads 2025-11-12 00:26:03 +01:00
Michel de Graaf 98a8f53094 feat: improved cli 2025-11-11 23:38:59 +01:00
Michel de Graaf 3d6cc9f7cd feat: client settings and defaults 2025-11-11 22:22:21 +01:00
Michel de Graaf 7bf2748e1f feat: seperate into lib and cli packages 2025-11-11 21:55:53 +01:00
Michel de Graaf 00046f2d59 chore: rename ServerOperation to ServerMessage 2025-11-11 21:16:39 +01:00
Michel de Graaf b7f7cf5582 fix: formatting 2025-11-11 19:41:18 +01:00
Michel de Graaf fb1e5eac07 chore: tweak blocking peer connections 2025-11-11 19:36:50 +01:00
Michel de Graaf bf7eb66e58 fix: broken test (thread pool & actors destroy) 2025-11-11 19:19:45 +01:00
Michel de Graaf cb47b3f3cd chore: change log prefixes 2025-11-11 19:10:50 +01:00
Michel de Graaf d045647af1 Merge branch 'feat/server_actor' 2025-11-11 19:01:36 +01:00
Michel de Graaf a4ece85eaf chore: bump version 2025-11-11 19:01:32 +01:00
Michel de Graaf 5dc635297e chore: refactor server as an actor 2025-11-11 19:00:38 +01:00
Michel de Graaf 7ae1919c94 chore: manual releases 2025-11-11 14:53:40 +01:00
Michel de Graaf 0e09a3feae Merge branch 'feat/actor' 2025-11-11 14:53:40 +01:00
Michel de Graaf 9655f09b77 chore: version bump 2025-11-11 14:53:40 +01:00
Michel de Graaf 13f4783f65 chore: refactor peer connection to actor and non blocking 2025-11-11 14:53:40 +01:00
Michel de Graaf 040d53b87a chore: add development warning to readme 2025-11-11 14:53:40 +01:00
Michel de Graaf a1b88f58bd chore: debug logging 2025-11-11 14:53:40 +01:00
Michel de Graaf a4aee59e1e chore: remove logging 2025-11-11 14:53:40 +01:00
Michel de Graaf 1ee5755ed1 feat: only for download peer spawn a thread 2025-11-11 14:53:40 +01:00
Michel de Graaf 71547aeb85 chore: remove threadpool from client 2025-11-11 14:53:40 +01:00
Michel de Graaf f6921224c6 fix: listener 2025-11-11 14:53:40 +01:00
Michel de Graaf 2584428170 chore: linting 2025-11-11 14:53:40 +01:00
Michel de Graaf 3dc667fe30 feat: actor refactoring default peer 2025-11-11 14:53:40 +01:00
Michel de Graaf 7bae6b36da chore: cargo.lock 2025-11-11 14:53:40 +01:00
Michel de Graaf 46ebcad98b feat: restructure release workflow to build binaries before creating release
- Add check-release job to determine if a release is needed
- Build binaries in parallel for all platforms before release
- Create release and attach binaries in final step
- Start with version 0.1.0
2025-11-07 11:20:52 +01:00
Michel de Graaf 153123c567 fix: ci/cd release 2025-11-07 10:47:02 +01:00
Michel de Graaf 35accb8b9e chore: fix broken test 2025-11-07 10:39:40 +01:00
Michel de Graaf bbfccbccfe chore: fix linting issues caused to update of rust/clippy to newer version 2025-11-07 10:29:55 +01:00
Michel de Graaf 5e54fa1f94 chore: ci/cd & realease automation 2025-11-07 10:19:58 +01:00
Michel de Graaf 843eff14ca chore: clean up repository 2025-11-07 09:53:05 +01:00
Michel de Graaf 257f2876f3 chore: add readme 2025-11-07 09:51:37 +01:00
Michel de Graaf 1785da6507 chore: improve logging 2025-11-06 16:45:07 +01:00
Michel de Graaf bcbd68257d chore: add MIT license to project 2025-11-07 09:33:45 +01:00
Michel de Graaf e9880ad638 chore: clean up download peer stream processor 2025-11-06 12:39:14 +01:00
Michel de Graaf 11f62dc4b8 chore: refactor download peer 2025-11-06 12:35:58 +01:00
Michel de Graaf fe60ea67f8 chore: refactor listener 2025-11-06 12:18:28 +01:00
Michel de Graaf 297badbddf fix: direct download 2025-11-06 10:59:57 +01:00
Michel de Graaf c623d27e65 feat: enable listener functionality 2025-11-05 13:40:13 +01:00
Michel de Graaf 9de47892ba chore: refactor listener and default peer 2025-11-04 20:48:23 +01:00
Michel de Graaf d11c6782a7 chore: refactor default peer 2025-11-04 18:48:32 +01:00
Michel de Graaf c346c56297 feat: add download feedback via channel 2025-11-03 16:37:21 +01:00
Michel de Graaf a9d0101a58 fix: correct listening port 2025-11-02 19:57:56 +01:00
Michel de Graaf 7958fe9a29 feat: add configurable listen port 2025-11-02 11:50:39 +01:00
michel ff30db3e29 chore: refactor to use RwLock 2025-11-01 14:57:27 +01:00
michel 4932386056 fix: download directory handling 2025-10-26 01:57:22 +02:00
michel 436bc0fe1a chore: fix download path 2025-10-26 01:15:17 +02:00
michel f196c86328 chore: fix linting issues 2025-10-25 18:13:45 +02:00
Michel de Graaf 27258a09f0 fix: download path handling 2025-10-13 16:01:30 +02:00
Michel de Graaf 9ccc4fa1e9 fix: set nodelay on socket 2025-10-13 10:12:04 +02:00
Michel de Graaf cd3dca40c5 feat: rename module to soulseek-rs 2025-07-31 22:24:34 +02:00
Michel de Graaf 5aa4472510 chore: fix clippy 2025-07-31 22:01:00 +02:00
Michel de Graaf 843fb79d59 chore: format code 2025-07-31 22:00:06 +02:00
Michel de Graaf 6431630510 chore: remove all warnings 2025-07-31 20:41:05 +02:00
Michel de Graaf 4302d74847 chore: refactor module structure 2025-07-31 20:33:30 +02:00
Michel de Graaf 28ecda68a6 chore: fix all tests 2025-07-31 20:15:37 +02:00
Michel de Graaf 9553537bc6 feat: implement download peer 2025-07-31 20:06:41 +02:00
Michel de Graaf 956cb824bd feat: add logging support 2025-07-05 23:16:05 +02:00
Michel de Graaf 57dafaf8ab feat: remove peers 2025-07-05 22:54:28 +02:00
Michel de Graaf d07e9ec113 chore: rename FileSearch to FileSearchResult 2025-06-30 00:06:19 +02:00