ITADN
Lolle2000la/Image-Sort

版本发布 8

v3.0.0-alpha.10
? · 2026-07-18

### Features * Persist and restore last selected media on startup ([0904f61](https://github.com/Lolle2000la/Image-Sort/commit/0904f61055e5db4907a8a4bc47bf86e4ef766aad)) * Add video and audio icon overlays to media grid items and use fallback icons ([fd511d8](https://github.com/Lolle2000la/Image-Sort/commit/fd511d80a14d47c9aba3c81d3270f5b7952a93ad)) * Implement GPG signature verification for cross-platform Velopack updates (#648) ([26b07f2](https://github.com/Lolle2000la/Image-Sort/commit/26b07f2e71ce6609da73e89203c680c3ed9358af)) ### Bug Fixes * Dynamically resolve Wayland app_id from APPIMAGE path ([b388602](https://github.com/Lolle2000la/Image-Sort/commit/b388602a6c457920776ad1e8e4071d48c0058d2e)) --- ### Developer Changes #### Testing * Expand coverage, co-locate tests, and purge useless tests ([f2910b0](https://github.com/Lolle2000la/Image-Sort/commit/f2910b008439cf3f15a7d926619678f79721fce4)) * Strengthen 25 weak tests found by mutation testing ([d1c4799](https://github.com/Lolle2000la/Image-Sort/commit/d1c479961fed19e31db21ee2aedcc36ddb73a55f)) ### Bug Fixes * Support pre-releases in Velopack updater download and apply ([0a6a397](https://github.com/Lolle2000la/Image-Sort/commit/0a6a397ea492a6b1c2804c479f072d3841f410be)) --- ### Developer Changes #### Refactoring * Remove rogue workflow ([182fbd2](https://github.com/Lolle2000la/Image-Sort/commit/182fbd2c8b32c39d62cede999f86e7ae8b1bfd22)) ### Features * Add documentation website, demo automation, and CI/CD workflows ([8e92efb](https://github.com/Lolle2000la/Image-Sort/commit/8e92efb8ba57d36f3439ab63fdee3eac70b40789)) * Support reordering pinned folders by drag and drop ([9c670e4](https://github.com/Lolle2000la/Image-Sort/commit/9c670e4a33094f2b28024e6e230f4370e2dc3117)) * Add button to reveal media in platform file manager ([4063d6e](https://github.com/Lolle2000la/Image-Sort/commit/4063d6e4d36231918d1d484e014dede0eb40c20b)) ### Bug Fixes * Handle arbitrary keyboard characters in Key::display_name ([22d68f8](https://github.com/Lolle2000la/Image-Sort/commit/22d68f8bfcb9d0d8ddf2f76c8413e257e3c4838b)) --- ### Developer Changes #### Refactoring * Split app.rs update logic into specialized submodules under update/ ([bc8bb14](https://github.com/Lolle2000la/Image-Sort/commit/bc8bb14c380874a9361580396a8ebe267f68a35d)) * Rename update/mod.rs to update.rs (idiomatic module layout) ([e4c2288](https://github.com/Lolle2000la/Image-Sort/commit/e4c2288c2cbdf658d01336e765c188f54c2d5214)) * Replace String key values with Key enum for type safety ([a9a7f4f](https://github.com/Lolle2000la/Image-Sort/commit/a9a7f4f70ecbcfbf63502d86e3eccefbe4b379ab)) #### Testing * Add 33 new tests across core, backend, and gui crates ([0de9d3e](https://github.com/Lolle2000la/Image-Sort/commit/0de9d3e76b4160b85568318da23c32905b43e398)) * Ignore reveal_in_explorer test that spawns external file manager ([8a302e8](https://github.com/Lolle2000la/Image-Sort/commit/8a302e891ea3f023ba08ad2ecba42481300e4f91)) * Add special character tests for Key enum (;, ö, €, etc.) ([c5876b6](https://github.com/Lolle2000la/Image-Sort/commit/c5876b6f936a50019e0269c1ad21b15a57d35f2a)) #### Maintenance * Bump GitHub Actions to latest major versions ([9dbd06f](https://github.com/Lolle2000la/Image-Sort/commit/9dbd06fade199d4fb4f12ddfbc949d3db68ad69e)) * Add linting/formatting to website and pre-commit ([d3c1a0e](https://github.com/Lolle2000la/Image-Sort/commit/d3c1a0e3cd33172b076d8537e79c0c8cad0969b4)) ### Bug Fixes * Stage only binary for Linux AppImage to avoid bundling Cargo build cache ([2a279df](https://github.com/Lolle2000la/Image-Sort/commit/2a279df0912537fc5fbd4a2753de3e0dd2c59680)) --- ### Developer Changes #### Maintenance * Bump CI Linux runners to ubuntu-24.04 ([7fe25d5](https://github.com/Lolle2000la/Image-Sort/commit/7fe25d53932cab60282b515d1b42a5eb2b08c19c)) ### Features * Add Linux desktop integration and Wayland application_id ([9250a0b](https://github.com/Lolle2000la/Image-Sort/commit/9250a0b0a176a3e7148a16df86ca95abd7a8a3b7)) * Add windows_subsystem attribute and embed icon resource for Windows builds ([af881dd](https://github.com/Lolle2000la/Image-Sort/commit/af881dde6a1e84a0816bef3105a8696297225b17)) * Replace dark mode toggle with theme picker supporting all 22 iced themes ([d0bb8dd](https://github.com/Lolle2000la/Image-Sort/commit/d0bb8dd8b0f8d1d11689629afd37ba6a7cfb384b)) * Debounced, interruptible thumbnail loading with viewport tracker ([3aa764b](https://github.com/Lolle2000la/Image-Sort/commit/3aa764b8b38d83b7497b144e34f5f2adafecb1e9)) * Auto-detect native image extensions from image::ImageFormat::all() ([3a3e10f](https://github.com/Lolle2000la/Image-Sort/commit/3a3e10f8931dcf60e5476076e06cf3e8212a7db3)) ### Bug Fixes * Don't prematurely stop background scan on empty channel ([fa0c485](https://github.com/Lolle2000la/Image-Sort/commit/fa0c4857d97504c8eeeca06287d600e614744e74)) * Improve WPF settings migration — extend key mapping, remove dead AnimateGifThumbnails ([50e8a12](https://github.com/Lolle2000la/Image-Sort/commit/50e8a1266a75a95385fec1aa5def6f9cbaac87a9)) * Prevent mp_image_crop assertion crash when switching videos rapidly ([5cd5317](https://github.com/Lolle2000la/Image-Sort/commit/5cd5317de7940444a5d8835d2880869adbd64af6)) * Use video-params instead of video-out-params, disable video-rotate ([1881dff](https://github.com/Lolle2000la/Image-Sort/commit/1881dffaa1f7f3fee00322ee8a8542db71bc5cf4)) * Make application_id platform-specific (Linux only) ([91a2139](https://github.com/Lolle2000la/Image-Sort/commit/91a2139a3f0c91769e871571490f3c445c05b55c)) * Replace heredoc with printf to avoid YAML indent issue in release workflow ([c6de53c](https://github.com/Lolle2000la/Image-Sort/commit/c6de53cb7187a5afd28a89bb43a1ac84e4d7bc7d)) * Create parent dirs before copying desktop file in release workflow ([bdddfa8](https://github.com/Lolle2000la/Image-Sort/commit/bdddfa87c37bda6e59eca2a7823c6f8cb88d85f3)) * Surgically modify vpk-generated desktop file instead of overwriting ([326ac2a](https://github.com/Lolle2000la/Image-Sort/commit/326ac2a5aa6073d640a51a9a69f54d3a0bd69781)) * Use sed for StartupWMClass to avoid duplicate entries from vpk ([d967539](https://github.com/Lolle2000la/Image-Sort/commit/d9675396bf6c059008522a84822d2a441349fbef)) ### Performance Improvements * Replace image::thumbnail with SIMD-accelerated fast_image_resize ([a094362](https://github.com/Lolle2000la/Image-Sort/commit/a0943626f601719d8f0cdf7407e81d743ac4df2a)) --- ### Developer Changes #### Maintenance * Remove vestigial Rust JSON config migration, clean up AGENTS.md ([3b72767](https://github.com/Lolle2000la/Image-Sort/commit/3b72767934cc39b544b7b7338fa261b4570e56c7)) ### Features * Add VC++ redistributable bootstrapping to Velopack packaging ([2c4178a](https://github.com/Lolle2000la/Image-Sort/commit/2c4178a544f5fd64191e83a0a18aee0b80ee60f0)) * Expand already-expanded folder navigates to first child ([d9a2167](https://github.com/Lolle2000la/Image-Sort/commit/d9a2167d0f006b4bfb398bb23a9863c451f55508)) * Add ICO thumbnail support using lightweight ico crate ([477652b](https://github.com/Lolle2000la/Image-Sort/commit/477652b691c81667ca668a8feb306a37251aa42c)) * Replace static NATIVE_IMAGE_EXTS with runtime vips query ([aeac7be](https://github.com/Lolle2000la/Image-Sort/commit/aeac7be505cbc2dbb9920056e796f58961e120ae)) * Enable all image crate format features ([8003737](https://github.com/Lolle2000la/Image-Sort/commit/800373744df894e14292031e644594247edaaa70)) * Add dds, exr, ff, hdr, pbm/pgm/ppm, qoi, tga to NATIVE_IMAGE_EXTS ([4703d01](https://github.com/Lolle2000la/Image-Sort/commit/4703d01b1dab5a36fc7b3bf27fa4f5b44893feb5)) ### Bug Fixes * Collapse on already-collapsed folder not navigating to parent ([4e65fc7](https://github.com/Lolle2000la/Image-Sort/commit/4e65fc783e42499c53f594a75bd015ed7bc93813)) * Ensure folder tree always has a visible selection ([6a99721](https://github.com/Lolle2000la/Image-Sort/commit/6a9972191eae060cbbe527dafcbc379528b5a1f3)) * De-flake test_tick_should_exit_saves_settings, promote toml to workspace dep ([0686fea](https://github.com/Lolle2000la/Image-Sort/commit/0686fea407f08ff489028f5e47e4d7998f4d864d)) * Stop probing non-audio files with symphonia for cover art ([874f0ce](https://github.com/Lolle2000la/Image-Sort/commit/874f0cef6865d1d15092b891fdba206e36091e79)) * Ensure vips init in load_image_vips_inner for audio thumbnails ([20223a3](https://github.com/Lolle2000la/Image-Sort/commit/20223a37639642cab1273ecad2531c4b8a2f2b23)) * Use pngsave_buffer + png decode for guaranteed RGBA byte order ([fedf005](https://github.com/Lolle2000la/Image-Sort/commit/fedf0058f598da22ec82d854707b2219b87f431d)) * Use TryRecvError::Disconnected check in scan finished detection ([efc20ee](https://github.com/Lolle2000la/Image-Sort/commit/efc20ee5dac10ad9eb8345e6d96be88091c25226)) * Use glib crate for g_strfreev instead of leaking suffix array ([a3bf4d1](https://github.com/Lolle2000la/Image-Sort/commit/a3bf4d17020f23a5fe0a19da8332482b35a0a1a7)) * Drop glib crate, use direct extern C for g_strfreev ([156615d](https://github.com/Lolle2000la/Image-Sort/commit/156615d8cbaad2bbd5a55a40da70c0b6c29972a6)) ### Performance Improvements * Buffer image reads and load only visible thumbnails ([01a424a](https://github.com/Lolle2000la/Image-Sort/commit/01a424a2f2efa5ea0d6930b61ed87a879d79652d)) * Return raw RGBA from thumbnail pipeline, use persistent MpvContext for video thumbs ([a791399](https://github.com/Lolle2000la/Image-Sort/commit/a791399d8ae32ed84be3832c63b736fa77019409)) * Replace image crate with libvips for all decoding/thumbnail ops ([a1e466a](https://github.com/Lolle2000la/Image-Sort/commit/a1e466a38c73b853d2535b32304c0c45662c1e65)) --- ### Developer Changes #### Refactoring * Remove image crate from direct dependencies entirely ([ea6f45b](https://github.com/Lolle2000la/Image-Sort/commit/ea6f45b92da2c5422c8974c8bf0675440aefc1de)) #### Maintenance * Bump version to 3.0.0-alpha.5 ([12bdacf](https://github.com/Lolle2000la/Image-Sort/commit/12bdacfa86aa8f075e566548f76e30ba068ac069)) ### Performance Improvements * Stream media file scanning off-thread via channel ([d362e8a](https://github.com/Lolle2000la/Image-Sort/commit/d362e8a91c2d31e0175d6111177973e21be16cbc)) * Use entry.file_type() instead of path.is_dir() in folder tree traversal ([72c988a](https://github.com/Lolle2000la/Image-Sort/commit/72c988a074dcce4f8dedd484b7ec593e43477951)) * Build folder tree off-thread on initial open ([af36308](https://github.com/Lolle2000la/Image-Sort/commit/af363089c98159e008ea513bc92ac365cdd55a07)) ### Features * Update Cargo.lock ([04fa438](https://github.com/Lolle2000la/Image-Sort/commit/04fa4387461a93ee215c20b72ae0104ad82570f4)) * Disable move/copy buttons when selected folder is current folder ([e168d18](https://github.com/Lolle2000la/Image-Sort/commit/e168d18cc07f801f770374716d136d29d1524479)) ### Bug Fixes * Scroll folder tree to keep selected item visible on keyboard nav ([80044b2](https://github.com/Lolle2000la/Image-Sort/commit/80044b277e6bdc9b5af0d0eeed84a3ae56a4d189)) * Restore accurate chevron indicator with lazy subdirectory check ([dd40d7b](https://github.com/Lolle2000la/Image-Sort/commit/dd40d7b1d6d49fad6be3cedb17683e40e800d3e2)) * Collapse parent chain nodes by default in folder tree ([902c65d](https://github.com/Lolle2000la/Image-Sort/commit/902c65dcbdecdce964492570ddf099ce587cedb6)) * Preserve parent nav chain on expansion and add regression tests ([bdf35c4](https://github.com/Lolle2000la/Image-Sort/commit/bdf35c4db968cc5b5dc9fb9666777411b3b3331e)) * Use flat index for folder selection to disambiguate duplicate paths ([3d8cb43](https://github.com/Lolle2000la/Image-Sort/commit/3d8cb4316466acb3a14fa1910615ba8435d3b2f8)) * Preserve parent nav expansion across tree rebuilds and route pin_selected through message loop ([dd0431d](https://github.com/Lolle2000la/Image-Sort/commit/dd0431d61e5b0560094a6a384d0173b0589336ed)) * Route pin shortcut to PickPin and remove dead PinCurrent variant ([a0a9a9a](https://github.com/Lolle2000la/Image-Sort/commit/a0a9a9ac3f4a41b141fc9e3e2f41e66dec270d09)) ### Performance Improvements * Eliminate synchronous blocking I/O in folder tree and media scanning ([a4393ce](https://github.com/Lolle2000la/Image-Sort/commit/a4393ce3e8a467b4231d3db9ab5e58edc0d01246)) --- ### Developer Changes #### Maintenance * Bump version to 3.0.0-alpha.3 ([b7c5dee](https://github.com/Lolle2000la/Image-Sort/commit/b7c5dee53fc68b5440995e01481e13612167522f)) ### Features * Add --args CLI folder argument and Windows Explorer context menu integration ([6a2912f](https://github.com/Lolle2000la/Image-Sort/commit/6a2912fcb323faba95b4691b52281fd1ad86d338)) * Register folder UTI in macOS Info.plist for Finder Open With menu ([7b9147f](https://github.com/Lolle2000la/Image-Sort/commit/7b9147f9cb99022ec071f53d469de9fbafa90d49)) * Add update confirmation prompt and global panic hook ([7651377](https://github.com/Lolle2000la/Image-Sort/commit/7651377a587b13e1b88d462b7ceaa76d456f9bfb)) * Add file copy operation with CopyAction and Shift+Up keybinding ([9bece95](https://github.com/Lolle2000la/Image-Sort/commit/9bece957a52bac2f1f6a44550e429c0be0b36c2b)) * Add parent folder navigation chain in tree view with full filesystem traversal ([70ee0ae](https://github.com/Lolle2000la/Image-Sort/commit/70ee0ae36d17912979a9fbdffe645c7eefc4525f)) * Wire animate_gifs setting to GIF media type routing ([8bccb4d](https://github.com/Lolle2000la/Image-Sort/commit/8bccb4d8bd20f182b0a64a81686378a7041ed527)) * Add window icon and Wayland app_id ([e622a9d](https://github.com/Lolle2000la/Image-Sort/commit/e622a9d01a40893208e91dbb5b9a8b3edbf7d3e7)) ### Bug Fixes * Switch reqwest from native-tls to rustls-tls for cross-compilation ([cc9c1f4](https://github.com/Lolle2000la/Image-Sort/commit/cc9c1f464a4b0911515c265ff58f906eefe98d5a)) * Pass --channel to vpk upload so it matches the custom platform channels ([432aa7c](https://github.com/Lolle2000la/Image-Sort/commit/432aa7c903a816f6658ede0f9a85004b831e00a2)) ### Features * Implement asynchronous background video player rendering and playback controls ([1313893](https://github.com/Lolle2000la/Image-Sort/commit/13138930b03dd62c6555c4b4704d4a88f43f2ba3)) * Extract video thumbnails and display them during video loading to eliminate flicker ([3d8694c](https://github.com/Lolle2000la/Image-Sort/commit/3d8694cd73a1ed270f199d541b3123ba25568d1d)) * Implement a visible Pinned Folders sidebar list with quick-open, reorder, unpin buttons, and Alt+N shortcut badges ([905524e](https://github.com/Lolle2000la/Image-Sort/commit/905524ed63c8698cfa9ffdaaba9735f0b4d136c7)) * Integrate pinned folders as recursive tree roots in the sidebar folder tree with Alt+N keyboard shortcut badges ([e2cdf93](https://github.com/Lolle2000la/Image-Sort/commit/e2cdf93f9173c5986c63ece6eedbb16b75adcc8e)) * Update pin buttons to pick folders and support fallback current folder pinning ([2a8e40e](https://github.com/Lolle2000la/Image-Sort/commit/2a8e40ed784172a16035de99386aa0706882c778)) * Implement custom wgpu shader widget for in-place texture updates ([da1bb8f](https://github.com/Lolle2000la/Image-Sort/commit/da1bb8f60601a784e92a670958af8fafa615ea46)) * Preserve video aspect ratio in wgpu shader widget ([485b932](https://github.com/Lolle2000la/Image-Sort/commit/485b932bfa8fd441b919d951c7598e6e5fd9e86d)) * Enhance metadata panel with vertical toggle button, resizing, and full symphonia container metadata extraction ([7e11b43](https://github.com/Lolle2000la/Image-Sort/commit/7e11b435835314da1855a15357b3b1634036a012)) * Localize container metadata section header and common fields ([109c81b](https://github.com/Lolle2000la/Image-Sort/commit/109c81b13941a4b31bc37c28f4c81b097e3bb5a2)) * Localize more standard EXIF and audio/video container metadata tags and sections ([6293aef](https://github.com/Lolle2000la/Image-Sort/commit/6293aef16c18c5b80242410a7c8f558edabd42da)) * Update credits dialog with current Rust libraries instead of legacy WPF ones ([9fcf6dc](https://github.com/Lolle2000la/Image-Sort/commit/9fcf6dc02cd5d4201873c1e5097d3e301342925d)) * Include all workspace dependencies from Cargo.toml in credits dialog ([e7df7fd](https://github.com/Lolle2000la/Image-Sort/commit/e7df7fda0135df807989dbfb89ac17311885b7a1)) * Discover media formats dynamically from libmpv ([a4f5b1c](https://github.com/Lolle2000la/Image-Sort/commit/a4f5b1c2462a8a0a3708ebc7906934c119777268)) * Remove now unnecessary files regarding to the rewrite plan ([c61eae5](https://github.com/Lolle2000la/Image-Sort/commit/c61eae5c52637356493a6f4b8469dcf6861cd4b4)) * Move gif to be handled by mpv so that it can be animated ([1dd0a6e](https://github.com/Lolle2000la/Image-Sort/commit/1dd0a6ec9c336a4945f5763d8f22e1f0d1e16e18)) * Show file name and size at bottom of media preview ([0747655](https://github.com/Lolle2000la/Image-Sort/commit/0747655ad963d8205e1ecf1d052653cc9f1da463)) * Overlay file info on preview using Stack widget ([01c10c8](https://github.com/Lolle2000la/Image-Sort/commit/01c10c8b5d5cd349126f3fd59dc8ecbdb69f187e)) * Add audio player with seekbar, volume, mute controls; auto-play on navigation; shared media_controls widget ([cabc973](https://github.com/Lolle2000la/Image-Sort/commit/cabc973f3eaa3d675b8ba98e2d94e7dda8613ab1)) * Extract cover art from audio files for thumbnails ([9c156b0](https://github.com/Lolle2000la/Image-Sort/commit/9c156b04f9e9746a87651693d98b583f63a7b5d0)) * Show cover art in audio preview; music icon in grid fallback ([1c94663](https://github.com/Lolle2000la/Image-Sort/commit/1c9466373691f279d46e8a424e5f1f9b669883ac)) * Detect animated vs static GIFs and route accordingly ([a2b6307](https://github.com/Lolle2000la/Image-Sort/commit/a2b6307662e96e15b126cbaa40411d0078f3438c)) * Add Velopack auto-update support and multi-platform CI/CD release pipeline ([8444499](https://github.com/Lolle2000la/Image-Sort/commit/84444995f9787f6b0e04f45e42151d5cf4cb0c49)) * Add icon variants for macOS and Windows ([5cc3d9c](https://github.com/Lolle2000la/Image-Sort/commit/5cc3d9c29c3ed492769f5adcc489c774920dbad4)) * Switch to GithubSource, wire update prefs, add velopack feature flag ([fa5d9f8](https://github.com/Lolle2000la/Image-Sort/commit/fa5d9f884110c1d9f83ff6b6f6ca542c3d45aa5d)) * Implement proper macOS trash restore via NSFileManager instead of returning error ([493b6e1](https://github.com/Lolle2000la/Image-Sort/commit/493b6e16779859dbb2058cb95a2c0e7219a9bb19)) ### Bug Fixes * Remove accidentally committed target/ files, add target/ to .gitignore ([01c4b22](https://github.com/Lolle2000la/Image-Sort/commit/01c4b2288a046aadc5500702b8bb2c2895d83aed)) * Add EXDEV-safe rename_or_copy_and_delete fallback - prevents cross-filesystem failures when sorting files on external/USB drives (MoveAction, RenameAction, TrashStaging) ([c03acfe](https://github.com/Lolle2000la/Image-Sort/commit/c03acfe04b54c19a684103520bf368962a031675)) * Enable precise video seeking, correct stop button behavior, and fix unit test settings corruption ([d9fe468](https://github.com/Lolle2000la/Image-Sort/commit/d9fe468ac5dc1302f62ced483bb26ae5f1d9d61a)) * Replace blocking_send with try_send in mpv callback to prevent thread panic abort ([cef0801](https://github.com/Lolle2000la/Image-Sort/commit/cef08015fd8a569164786a687bb1aa0e3d6ed8a4)) * Resolve video preview race condition by tagging and matching frame path, include current video in preloads, and fix thumbnail list issues ([a7d629a](https://github.com/Lolle2000la/Image-Sort/commit/a7d629ae96d3bae9c2e0a31c6e33976a4f72d75a)) * Resolve video thumbnail blankness by waiting for MPV_RENDER_UPDATE_FRAME, increase cache size to 200, prefetch 200 items in folder, and design placeholder card boxes ([1d042b5](https://github.com/Lolle2000la/Image-Sort/commit/1d042b52c30b9cfea327eda6ef3047f918a47ddd)) * Prevent old video frames from leaking during load by matching mpv path property ([e8d269f](https://github.com/Lolle2000la/Image-Sort/commit/e8d269f4b223b769c83f865aa10860c9412aac32)) * Resolve settings deletion race condition and unify config path across debug/release builds ([ff1d0f5](https://github.com/Lolle2000la/Image-Sort/commit/ff1d0f5271a757d207430cbef4c1a848347bbf7c)) * Programmatically unfocus search bar when Enter or Esc is pressed ([08bf856](https://github.com/Lolle2000la/Image-Sort/commit/08bf856af8c25423d40f80049dd6e04d6b263dc3)) * Process captured Esc and Enter keys in keyboard subscription to guarantee unfocus ([5968675](https://github.com/Lolle2000la/Image-Sort/commit/596867543a41d0e243635a200617e94bfff6ab0d)) * Allow Tab key to leave search focus and return to main navigation ([301b90e](https://github.com/Lolle2000la/Image-Sort/commit/301b90e0df1a8446a3d742f578c3f1e78af4f50f)) * Move metadata toggle to search row as a regular button and completely hide panel when collapsed ([c4dbbb9](https://github.com/Lolle2000la/Image-Sort/commit/c4dbbb9c1afa70f80324b060e8ae84ab2095229a)) * Correct all repository URLs and add missing dependencies to credits dialog ([82438f7](https://github.com/Lolle2000la/Image-Sort/commit/82438f731765fbdf0ba993c055b58c38e8f1cba7)) * Remove chrono which is not an actual dependency ([d3bd525](https://github.com/Lolle2000la/Image-Sort/commit/d3bd525d5424f7149e023d472da72cb72db7a76f)) * Correct repo URLs for rfd (PolyMeilex) and unic-langid (zbraniecki) ([d346878](https://github.com/Lolle2000la/Image-Sort/commit/d3468788a543e1c03ff5f251ae25ce09f72dae57)) * Auto-scroll media grid to selected entry and keep scrollbar clear of file names ([cb4fe5a](https://github.com/Lolle2000la/Image-Sort/commit/cb4fe5a0423882410a5a90199db110cee6ecf0de)) * Wire up remaining dead-code Message variants ([39b3958](https://github.com/Lolle2000la/Image-Sort/commit/39b39583780f14789029ae6637d0639b12275819)) * Isolate trash staging tests to eliminate cross-test flakiness ([203f661](https://github.com/Lolle2000la/Image-Sort/commit/203f6610d7c686d48a52dde66ccca470e9e33c33)) * Release mpv file handle on video deactivate ([016b3b9](https://github.com/Lolle2000la/Image-Sort/commit/016b3b9fd06589936d0a192ebef873fcb3653d56)) * Tree scrollbar alignment and grid text overflow ([389d76a](https://github.com/Lolle2000la/Image-Sort/commit/389d76abefdefb8588e6e9039f296694339250fa)) * Prevent preview content from covering container border ([7bea5a0](https://github.com/Lolle2000la/Image-Sort/commit/7bea5a0fe28081368e726449bacaa2b8f285dec8)) * Use column layout for file info with middle-ellipsis filenames ([4db5cb6](https://github.com/Lolle2000la/Image-Sort/commit/4db5cb686f3d134091561edc15cc497a08b60963)) * Constrain filename text width with clip to prevent overflow ([52faa67](https://github.com/Lolle2000la/Image-Sort/commit/52faa678aefb863d4a59aa41acb4f3c0b8de32d2)) * Lower filename truncation threshold to 40 chars ([1db2b36](https://github.com/Lolle2000la/Image-Sort/commit/1db2b36ece160642a0303f937cebfa0ff02edf7a)) * Remove solid placeholder for audio; load full-res cover for preview ([84097af](https://github.com/Lolle2000la/Image-Sort/commit/84097af9587e2a847eefc410200507cea3204644)) * Unify preview border — apply inner border to all preview types ([6d35aad](https://github.com/Lolle2000la/Image-Sort/commit/6d35aad5354a0843fa4964eec96dc928082dfc49)) * Reject stale video frames when rapidly switching between videos ([1b60edf](https://github.com/Lolle2000la/Image-Sort/commit/1b60edfac4dab2ee086f4829947fde71112aa4f4)) * Correct Homebrew package name macdylibbundler -> dylibbundler ([b434877](https://github.com/Lolle2000la/Image-Sort/commit/b43487756abc87edadd661485c5384c0c03a98d2)) * Use RecommendedWatcher for cross-platform notify; gate trash restore on macOS ([1a12885](https://github.com/Lolle2000la/Image-Sort/commit/1a128853af9c361aa65bd62f5bd60e5686168c7a)) * Use with_guessed_format() for image decoding to handle mismatched extensions ([9e1a286](https://github.com/Lolle2000la/Image-Sort/commit/9e1a286a02226b29a7368e6fb7d616b07ae0112d)) * Use Retained instead of Id (objc2 v0.6); create_dir_all before rename on macOS restore ([459a5fc](https://github.com/Lolle2000la/Image-Sort/commit/459a5fc73b97aff1cb4c500cf7df4538a0671f0e)) * Add comma separators between msg_send! arguments for objc2 macro compliance ([cbc5b77](https://github.com/Lolle2000la/Image-Sort/commit/cbc5b773dfd08068bd8d032837de14e9358c45df)) * Add --merge flag to vpk upload so CI appends to existing GitHub releases ([60753e1](https://github.com/Lolle2000la/Image-Sort/commit/60753e1a47d2cc661b4a57b8e96987bad8d9aa4b)) * Set LIBRARY_PATH on macOS to /opt/homebrew/lib for Apple Silicon linker ([04a2fc0](https://github.com/Lolle2000la/Image-Sort/commit/04a2fc090331a57d4917e79de8e799a96a8d2c0b)) * Isolate macOS dylibs into Contents/libs/ to prevent dylibbundler from wiping the binary ([458c5fb](https://github.com/Lolle2000la/Image-Sort/commit/458c5fb0bafbcca1d9698d503e88da9571a6c921)) * Add --mainExe media-sort-gui to macOS vpk pack so it finds the correct binary ([27a46bc](https://github.com/Lolle2000la/Image-Sort/commit/27a46bcc902c050829562568b6d47a5a7d2db0bc)) * Add --tag to vpk upload for exact tag matching; add --pre for prerelease delta downloads ([dfe6365](https://github.com/Lolle2000la/Image-Sort/commit/dfe636554e6c7e3a37ccd4adbf66636da20a0e51)) * Setup mpv.lib before build on Windows; add RUSTFLAGS -L for MSVC linker ([09d7c3a](https://github.com/Lolle2000la/Image-Sort/commit/09d7c3a221d07c947570230f09f02db6e20ffdc6)) * Use absolute Windows paths with backslashes for 7z and MSVC linker ([86c9c8e](https://github.com/Lolle2000la/Image-Sort/commit/86c9c8e2a58ffa1c5337a1c376963b278cd7cb47)) * Use -L native= prefix so MSVC linker receives the libmpv search path ([6de3e1f](https://github.com/Lolle2000la/Image-Sort/commit/6de3e1fd0d84bc63e0abc1b41be36ed281b030bb)) * Extract mpv to libs/ dir, use LIB env var + native= for MSVC linker ([19f6eca](https://github.com/Lolle2000la/Image-Sort/commit/19f6eca8ffb7993fe4edca88f81da0e2d7daf74b)) * Extract actual filenames (libmpv-2.dll, libmpv.dll.a) and rename import lib to mpv.lib ([e9da39d](https://github.com/Lolle2000la/Image-Sort/commit/e9da39dd2fcb9a6f211a8c6bdd31881741b83d0e)) ### Performance Improvements * Optimize mpv initialization settings for faster video load and folder traversal ([42359ae](https://github.com/Lolle2000la/Image-Sort/commit/42359aec9a9e42c114d337137526cbd57da6c6ce)) * Implement asynchronous event-driven video rendering using tokio select! and mpv wakeup callback ([665a512](https://github.com/Lolle2000la/Image-Sort/commit/665a5128af1e277623935d158d60b53925914ac8)) * Bypass ffi property checks on the video playback hot path by caching the loaded state ([3ae9c3c](https://github.com/Lolle2000la/Image-Sort/commit/3ae9c3c585cfce9082f225147e56d76526f9475a)) * Implement zero-copy frame rendering via Arc and non-blocking frame-dropping channels ([be1fd92](https://github.com/Lolle2000la/Image-Sort/commit/be1fd921afa8a91e01af514e5bc0c6a5ed8a3e9d)) * Strictly verify libmpv loaded path against active path and clamp queue capacity to 1 ([ccb2488](https://github.com/Lolle2000la/Image-Sort/commit/ccb2488c50f7afe4091b0e2778b5ac483cdf1955)) * Optimize libmpv worker event loop and buffer recycling pool ([cd90b7d](https://github.com/Lolle2000la/Image-Sort/commit/cd90b7d83a41e0c11911a47722c4c43d0490e8b9)) * Coalesce wakeup events and optimize synchronization timing for offscreen playback ([1d25f60](https://github.com/Lolle2000la/Image-Sort/commit/1d25f60f619426bfbf66129bd83311b475b793cc)) * Throttle video seekbar seeks to ~3Hz during drag ([6b5bf36](https://github.com/Lolle2000la/Image-Sort/commit/6b5bf36991fdcf904503796105eed0bec425ac10)) --- ### Developer Changes #### Refactoring * Extract video player rendering into video_player widget ([d60cb14](https://github.com/Lolle2000la/Image-Sort/commit/d60cb14fbcd9caeff37bff813051499698837b3f)) * Split Message enum into Settings/Folder/Media/Video sub-enums ([7a99e9c](https://github.com/Lolle2000la/Image-Sort/commit/7a99e9c75f6f09ade98562a158d8e02b0fc2612b)) * Replace trash staging with direct OS trash via delete_to_trash ([53cb3ec](https://github.com/Lolle2000la/Image-Sort/commit/53cb3ec265640901fb887d787cd59078f2265aeb)) * Use cfg-gated field instead of allow(dead_code) for trash_path ([4b61044](https://github.com/Lolle2000la/Image-Sort/commit/4b61044d111cac2264940ee9e527db416e4443d4)) #### Testing * Add comprehensive test suite - 68 tests across core (45) and backend (23), test fixtures (jpg/png/gif/mp3/flac) ([8f23c2c](https://github.com/Lolle2000la/Image-Sort/commit/8f23c2cd1cf320ac8ba5e1bbd02e9c174cb907a4)) * Add 57 critical/high-priority tests across all crates (125 total) - KeyBinding builders, SettingsError, settings defaults, detect_media_type, format_keybinding, update_keybinding, filtered_media_entries, AudioPlayer, FileSystemEvent, error paths, scanner/thumbnail edge cases, trash staging errors ([3eacfcf](https://github.com/Lolle2000la/Image-Sort/commit/3eacfcf2e8eb1157b81da9472c94d954580b9a5f)) * Add 15 high-value logic tests - toggle_expand tree, SelectEntry bounds, pin dedup, RenameAction no-ext/illegal chars, corrupted JSON, case-insensitive scanner, build_children sorting, open_folder state reset, trash stage edge cases (140 total) ([9880dec](https://github.com/Lolle2000la/Image-Sort/commit/9880dece87f06a2eb969b93d4a4cbc4998d63e5f)) * Add 10 KeyCaptured handler tests - undo/redo guards, capture mode binding update, toggle metadata, pin/unpin dispatch, empty-history/noop guards (150 total) ([0337819](https://github.com/Lolle2000la/Image-Sort/commit/03378190307c5d8e75a6500a6e592a0c0b51c933)) * Add 13 end-to-end action integration tests - MoveToFolder (success/noselection/OOB/nonexistent), DeleteEntry (success/nonexistent), RenameEntry (success/conflict), Undo/Redo after move+delete (163 total) ([9ac6625](https://github.com/Lolle2000la/Image-Sort/commit/9ac6625cea12054bf9104484b322cb11f1a29a3c)) * Add 23 metadata routing, build_children edge case, l10n fallback, ThumbnailReady/MetadataLoaded branch, and error path tests (190 total) ([000d0c2](https://github.com/Lolle2000la/Image-Sort/commit/000d0c206aa06cb4a4bb327ecb996ebc848417de)) #### Code Style & Quality * Use default button styling for metadata toggle button ([5e47739](https://github.com/Lolle2000la/Image-Sort/commit/5e47739f58fd0e91789fc0d27e530b28b8fc0fb6)) * Format code and apply clippy suggestions ([b9b3a41](https://github.com/Lolle2000la/Image-Sort/commit/b9b3a41dd5e00795be1e96fe79cdbb4625d19965)) * Fix all clippy warnings ([eb450ce](https://github.com/Lolle2000la/Image-Sort/commit/eb450ceb8dbd9096dfa1b42b0b2d56a31544d86f)) #### Maintenance * Add pre-commit config for cargo fmt and clippy ([85c7030](https://github.com/Lolle2000la/Image-Sort/commit/85c7030eaa10fe9f30e73350d4eb882ab547e7a1)) * Remove legacy WPF/.NET sources ahead of Rust rewrite ([ff594cb](https://github.com/Lolle2000la/Image-Sort/commit/ff594cba7d7c3815c1bd2a450da5f9a83715aac5)) * Restore GitHub Pages docs site for imagesort.org ([fc66b9d](https://github.com/Lolle2000la/Image-Sort/commit/fc66b9dcd0a17f86203329e8de913516315ed8f6)) * Restore deleted icon ([2a2adb7](https://github.com/Lolle2000la/Image-Sort/commit/2a2adb71fabba4a5030ef59356ce842c7b9dde5b)) * Add Rust-rewrite README for v3.0 ([df3ed93](https://github.com/Lolle2000la/Image-Sort/commit/df3ed93a933c42ccc8565ce134b814058d120066)) * Add AGENTS.md with build, workspace, and libmpv guidance ([5404d64](https://github.com/Lolle2000la/Image-Sort/commit/5404d64fcb7088b654d101ac4694e1560f6d5955)) * Fix AGENTS.md inaccuracies, s/Image Sort/Media Sort/ in README alt text ([f1812d2](https://github.com/Lolle2000la/Image-Sort/commit/f1812d28ebce66bf3224b0361441e3424409e972)) * Remove dead code and unused #[allow(dead_code)] attributes ([3c771be](https://github.com/Lolle2000la/Image-Sort/commit/3c771beffc4930c51c6ce942c04e79799f22d656)) * Remove unused original_path field from StagedFile ([390618f](https://github.com/Lolle2000la/Image-Sort/commit/390618f280d20d2429be135fc34cb7b31daab111)) * Remove manual filename truncation, use clip only ([b95052d](https://github.com/Lolle2000la/Image-Sort/commit/b95052db4f65c8242f159eae0e5d8d6fa20f68d7)) * Update dependencies to latest versions ([2cb6b98](https://github.com/Lolle2000la/Image-Sort/commit/2cb6b98021a19add033ece91422442423040ab6c)) * Remove dead deps and migrate log to tracing ([b2da8ea](https://github.com/Lolle2000la/Image-Sort/commit/b2da8ea9e967677c2783a183ee0cdcce8246a8b1)) * Remove unused dependencies ([ff1d18e](https://github.com/Lolle2000la/Image-Sort/commit/ff1d18e1f78939b9c1019db521a387957a9b3f7b)) * Update to Rust 2024 edition ([b24a133](https://github.com/Lolle2000la/Image-Sort/commit/b24a133922ba0afa753305c317bf200f4358cf24)) * Rename Velopack ID ImageSort -> MediaSort, update macOS bundle identifier ([1f0fa59](https://github.com/Lolle2000la/Image-Sort/commit/1f0fa59f28540da31d6acb1f143e59a52323df27)) * Update locale strings from Image Sort to Media Sort ([bcf6243](https://github.com/Lolle2000la/Image-Sort/commit/bcf62434e662bc7e71ba415f8a9f8e773767873a))Also adds back the ability to restore the last selected media from before the rewrite. This will especially be helpful for users that want to stop in the middle of going through a very large folder without losing where they were. ## Changelog

Media Sort Alpha 6v3.0.0-alpha.6预发布
? · 2026-07-07

**Changes since alpha.5:** **Theme system:** - Replaced dark mode toggle with a theme picker supporting all 22 built-in iced themes **Thumbnail pipeline:** - Debounced, interruptible thumbnail loading with viewport tracker — only visible grid entries request thumbnails - SIMD-accelerated fast_image_resize replaces image::thumbnail for faster preview generation **Image format support:** - Auto-detect native image extensions from image::ImageFormat::all() at build time **Platform integration:** - Windows: windows_subsystem attribute and embedded icon resource - Linux: desktop file integration and Wayland application_id (cfg-gated to Linux only) **Fixes:** - Fix video-params query (video-out-params → video-params) and disable video-rotate - Prevent mp_image_crop assertion crash when switching videos rapidly - Don't prematurely stop background scan on empty channel - Improve WPF settings migration — extend key mapping, remove dead AnimateGifThumbnails - Fix release workflow: use sed to surgically modify vpk-generated desktop file instead of overwriting **Cleanup:** - Remove vestigial Rust JSON config migration

Maintenance releasev2.14.5
? · 2026-01-19

## What's Changed * Bump DynamicData from 9.1.2 to 9.2.1 by @dependabot[bot] in https://github.com/Lolle2000la/Image-Sort/pull/620 * Bump Microsoft.Extensions.DependencyInjection from 9.0.2 to 9.0.3 by @dependabot[bot] in https://github.com/Lolle2000la/Image-Sort/pull/619 * Bump Microsoft.Extensions.DependencyInjection from 9.0.3 to 9.0.4 by @dependabot[bot] in https://github.com/Lolle2000la/Image-Sort/pull/623 * Bump DynamicData from 9.2.1 to 9.2.2 by @dependabot[bot] in https://github.com/Lolle2000la/Image-Sort/pull/624 * Bump xunit.runner.visualstudio from 3.0.2 to 3.1.0 by @dependabot[bot] in https://github.com/Lolle2000la/Image-Sort/pull/625 **Full Changelog**: https://github.com/Lolle2000la/Image-Sort/compare/v2.14.2...v2.14.5

Maintenance releasev2.14.3
? · 2025-05-21

# Notice on continued development I have since moved on to Linux and therefore can't run this app myself anymore. I will continue to support it as much as I can, but it's not unlikely that I will at some point try to port it to [Avalonia](https://avaloniaui.net/) before I consider making bigger changes to it. That would allow Image Sort to run on Linux (and Mac theoretically, though I have no idea about that). ## What's Changed * Bump DynamicData from 9.1.2 to 9.2.1 by @dependabot in https://github.com/Lolle2000la/Image-Sort/pull/620 * Bump Microsoft.Extensions.DependencyInjection from 9.0.2 to 9.0.3 by @dependabot in https://github.com/Lolle2000la/Image-Sort/pull/619 * Bump Microsoft.Extensions.DependencyInjection from 9.0.3 to 9.0.4 by @dependabot in https://github.com/Lolle2000la/Image-Sort/pull/623 * Bump DynamicData from 9.2.1 to 9.2.2 by @dependabot in https://github.com/Lolle2000la/Image-Sort/pull/624 * Bump xunit.runner.visualstudio from 3.0.2 to 3.1.0 by @dependabot in https://github.com/Lolle2000la/Image-Sort/pull/625 **Full Changelog**: https://github.com/Lolle2000la/Image-Sort/compare/v2.14.2...v2.14.3

Maintenance releasev2.14.2
? · 2025-03-04

## What's Changed * Bump coverlet.collector from 6.0.3 to 6.0.4 by @dependabot in https://github.com/Lolle2000la/Image-Sort/pull/611 * Bump xunit.runner.visualstudio from 3.0.1 to 3.0.2 by @dependabot in https://github.com/Lolle2000la/Image-Sort/pull/613 * Bump DynamicData from 9.0.4 to 9.1.1 by @dependabot in https://github.com/Lolle2000la/Image-Sort/pull/612 * Bump Microsoft.Extensions.DependencyInjection from 9.0.0 to 9.0.1 by @dependabot in https://github.com/Lolle2000la/Image-Sort/pull/610 * Bump Microsoft.NET.Test.Sdk from 17.12.0 to 17.13.0 by @dependabot in https://github.com/Lolle2000la/Image-Sort/pull/614 * Bump DynamicData from 9.1.1 to 9.1.2 by @dependabot in https://github.com/Lolle2000la/Image-Sort/pull/616 * Bump xunit.runner.visualstudio from 3.0.1 to 3.0.2 by @dependabot in https://github.com/Lolle2000la/Image-Sort/pull/617 * Bump Microsoft.Extensions.DependencyInjection from 9.0.1 to 9.0.2 by @dependabot in https://github.com/Lolle2000la/Image-Sort/pull/618 * Bump Microsoft.NET.Test.Sdk from 17.12.0 to 17.13.0 by @dependabot in https://github.com/Lolle2000la/Image-Sort/pull/615 **Full Changelog**: https://github.com/Lolle2000la/Image-Sort/compare/v2.14.1...v2.14.2

Maintenance release v2.14.1
? · 2025-01-10

## What's Changed * Bump Microsoft.Extensions.DependencyInjection from 8.0.0 to 8.0.1 by @dependabot in https://github.com/Lolle2000la/Image-Sort/pull/599 * Bump NSubstitute from 5.1.0 to 5.3.0 by @dependabot in https://github.com/Lolle2000la/Image-Sort/pull/601 * Bump Microsoft.Extensions.DependencyInjection from 8.0.1 to 9.0.0 by @dependabot in https://github.com/Lolle2000la/Image-Sort/pull/603 * Bump Microsoft.NET.Test.Sdk from 17.11.1 to 17.12.0 by @dependabot in https://github.com/Lolle2000la/Image-Sort/pull/604 * Bump coverlet.collector from 6.0.2 to 6.0.3 by @dependabot in https://github.com/Lolle2000la/Image-Sort/pull/606 * Bump Octokit from 13.0.1 to 14.0.0 by @dependabot in https://github.com/Lolle2000la/Image-Sort/pull/607 * Bump xunit from 2.9.2 to 2.9.3 by @dependabot in https://github.com/Lolle2000la/Image-Sort/pull/608 * Bump xunit.runner.visualstudio from 2.8.2 to 3.0.1 by @dependabot in https://github.com/Lolle2000la/Image-Sort/pull/609 **Full Changelog**: https://github.com/Lolle2000la/Image-Sort/compare/v2.14.0...v2.14.1

Experimental ARM64 supportv2.14.0
? · 2024-10-08

This version introduces experimental (i.e. untested) support for Windows on ARM (ARM64). I have no such device, so please test and report any errors with the build. **Full Changelog**: https://github.com/Lolle2000la/Image-Sort/compare/v2.13.0...v2.14.0

v2.13.0
? · 2024-10-01

This version adds a new option to add/remove a shortcut to the Windows Explorer and always delete it on uninstall (fixing #584). ## What else changed * Bump all dependencies * Bump wix toolset to 5 * Bump ReactiveUI.Testing and ReactiveUI by @dependabot in https://github.com/Lolle2000la/Image-Sort/pull/595 * Bump xunit from 2.9.0 to 2.9.1 by @dependabot in https://github.com/Lolle2000la/Image-Sort/pull/597 * Bump xunit from 2.9.1 to 2.9.2 by @dependabot in https://github.com/Lolle2000la/Image-Sort/pull/598 **Full Changelog**: https://github.com/Lolle2000la/Image-Sort/compare/v2.12.11...v2.13.0