Commit Graph

89 Commits

Author SHA1 Message Date
Koha9 dffcaca668 PlexPlaylist_UI subtree merge
feat(ui): Allow closing ConnectionModal by clicking backdrop

Merge commit '9f1fe20c164a200ed795f90e3cfa60d8c985a557'
2025-12-04 08:11:19 +09:00
Koha9 9f1fe20c16 Squashed 'sample-front-end/' changes from 8ae211a..c58ef74
c58ef74 feat(ui): Allow closing ConnectionModal by clicking backdrop

git-subtree-dir: sample-front-end
git-subtree-split: c58ef74ad2bcbd08b117aaee750bdba0dca6d571
2025-12-04 08:11:19 +09:00
Koha9 86d0adebda Merge branch 'copilot/update-regex-replacement-strategy' 2025-12-04 08:07:53 +09:00
copilot-swe-agent[bot] 304e973db1 Fix Simple Mapping Windows path handling with double backslashes
- Normalize Windows paths by replacing \\\\ with \\ before pattern matching
- Escape backslashes in replacement strings for post-processing
- Add debug logging to help diagnose path matching issues

Root cause: UI stored escaped paths (\\\\Koha9-Main\\\\Music) but playlist
content uses single backslashes (\\Koha9-Main\\Music). Now normalizes paths
before compiling regex patterns.

Co-authored-by: Koha9 <36852125+Koha9@users.noreply.github.com>
2025-12-03 22:14:03 +00:00
copilot-swe-agent[bot] 6c84112d29 Reset config.json to clean defaults for testing
Co-authored-by: Koha9 <36852125+Koha9@users.noreply.github.com>
2025-12-03 14:36:51 +00:00
copilot-swe-agent[bot] 1131b81454 Fix Simple Mapping not applying during sync - preserve id field
Root cause: The UUID (id) field was being stripped when saving path mapping:
- Backend ReplacementRule model was missing id field
- Frontend pathMappingToApi() didn't include id in conversion
- Backend update_path_mapping endpoint didn't save id

Changes:
- Add id field to ReplacementRule model in main.py
- Include id when saving path mapping rules in update_path_mapping
- Include id in frontend pathMappingToApi conversion

Co-authored-by: Koha9 <36852125+Koha9@users.noreply.github.com>
2025-12-03 13:46:37 +00:00
copilot-swe-agent[bot] 6a1780bcee Fix Simple Mapping to use proper UUIDs for mapping IDs
- Add generateUUID() function using crypto.randomUUID() with fallback
- Update handleAdd to use UUID instead of Date.now() + Math.random()
- UUIDs are now properly validated in backend to prevent injection
- mapping_id is persisted when creating mapping pairs for reuse

Co-authored-by: Koha9 <36852125+Koha9@users.noreply.github.com>
2025-12-03 12:44:27 +00:00
copilot-swe-agent[bot] fbafe75fae Implement Simple Mapping backend functionality
- Add _compile_simple_mapping_rules() that generates four rule sets from mapping pairs
- Each mapping uses UUID as unique mapping_id with special markers (__MAPPING__uuid__)
- local_pre: local_path → mapping_id
- remote_pre: cloud_path → mapping_id
- local_post: mapping_id → local_path
- remote_post: mapping_id → cloud_path
- Add UUID validation to prevent injection attacks
- Update sync_all_playlists() to detect and use SIMPLE mode

Co-authored-by: Koha9 <36852125+Koha9@users.noreply.github.com>
2025-12-02 21:15:14 +00:00
copilot-swe-agent[bot] fbb5bb55c7 Implement Regex Rules backend functionality for path mapping
- Add CompiledRegexRules dataclass for all four processing stages
- Update _compile_regex_rules to support both legacy (pattern/replacement)
  and new (search/replace) field names with proper empty string handling
- Add _compile_path_mapping_rules helper function
- Update _write_results to apply post-processing rules:
  - local_result.m3u8 with local_post rules
  - remote_result.m3u8 with remote_post rules
  - base_next.m3u8 unprocessed (normalized sync result)
- Update merge_playlists and _sync_single_playlist to pass compiled_rules
- Update sync_all_playlists to implement full processing flow:
  1. Detect REGEX mode from path_mapping config
  2. Apply local_pre rules to local playlists before sync
  3. Apply remote_pre rules to remote playlists before sync
  4. Perform sync/merge
  5. Apply post rules to results for respective outputs

Co-authored-by: Koha9 <36852125+Koha9@users.noreply.github.com>
2025-12-02 20:08:06 +00:00
Koha9 f9dbe733c3 Merge commit '3f43662c1f19056e81f107357b661b435ee3a876' into copilot/update-regex-replacement-strategy 2025-12-02 10:16:44 +09:00
Koha9 3f43662c1f feat: Enhance logging configuration and add dynamic log level support 2025-12-02 10:15:44 +09:00
Koha9 aa4517aaf5 Fix: Fixed an issue where the Sync Now button became unresponsive due to duplicate API calls. 2025-12-02 09:55:57 +09:00
copilot-swe-agent[bot] 350f1d97e6 Add Path Mapping UI with Simple Mapping and Regex Rules modes
- Updated frontend/types.ts with new types: ReplacementRule, PathMappingRules, PathMappingMode, PathMappingConfig
- Replaced StrategySelector.tsx with new UI featuring:
  - Simple Mapping tab for local/cloud path pairs
  - Regex Rules tab with 4 rule groups (localPre, localPost, remotePre, remotePost)
  - MappingGroupEditor sub-component for editing rule lists
- Updated App.tsx to use PathMappingConfig state instead of RegexReplacement[]
- Updated api.ts to handle new PathMappingConfig structure
- Updated backend config.py with path_mapping field support
- Added /api/settings/path-mapping endpoint in main.py

Co-authored-by: Koha9 <36852125+Koha9@users.noreply.github.com>
2025-11-30 22:11:29 +00:00
copilot-swe-agent[bot] c18ff5b2ef Initial plan 2025-11-30 22:00:19 +00:00
Koha9 f791798206 Squashed 'sample-front-end/' changes from 0e20813..8ae211a
8ae211a feat: Introduce path mapping for sync

git-subtree-dir: sample-front-end
git-subtree-split: 8ae211a79c0d522050553e80674b82e2c9471e0f
2025-11-30 02:58:04 +09:00
Koha9 15e7636a92 PlexPlaylist_UI subtree merge
feat: Introduce path mapping for sync

Merge commit 'f791798206d87c694c14d7bffb52645706af4964'
2025-11-30 02:58:04 +09:00
Koha9 3719cda819 feat: Add a Docker run script to start the PlexPlaylistSync container. 2025-11-30 02:27:21 +09:00
Koha9 2718d817d9 Merge branch 'scheduling-function' 2025-11-30 02:21:32 +09:00
Koha9 5f62040611 feat: add loacal file watcher statement 2025-11-29 13:53:38 +09:00
Koha9 fda9f01da1 Merge commit 'c879c4c0d927c834c557f89b33a06d29956412a9' into scheduling-function 2025-11-29 13:11:40 +09:00
Koha9 c879c4c0d9 fix:The server detail page failed to correctly display server_scheme from the saved config.json. 2025-11-29 13:10:52 +09:00
Koha9 559342fae7 feat: Enhance scheduler and watcher with improved logging and cron trigger helpers 2025-11-29 12:56:18 +09:00
Koha9 d1a4273fb2 Squashed 'sample-front-end/' changes from 9f02555..0e20813
0e20813 feat: Add eye icon for visibility toggles

git-subtree-dir: sample-front-end
git-subtree-split: 0e208135b924170bcd757c693265a5cc1b620ac3
2025-11-29 12:35:27 +09:00
Koha9 432eee153e PlexPlaylist_UI subtree merge
feat: Add eye icon for visibility toggles

Merge commit 'd1a4273fb2f0c2b69e166cace3729fdb02b310ab'
2025-11-29 12:35:27 +09:00
Koha9 fe4061d1a1 feat: Implement sync manager and file watcher for automated playlist synchronization 2025-11-29 12:26:59 +09:00
Koha9 22697fdc1d feat: Enhance schedule handling in StrategySelector component 2025-11-29 11:10:24 +09:00
Koha9 c982fb930f Merge commit '6f234ebc48e506f0c46ebf811b2a791dd8960dcd' into scheduling-function 2025-11-29 10:54:08 +09:00
Koha9 305743d752 Squashed 'sample-front-end/' changes from 99ea3a6..9f02555
9f02555 feat(ui): Improve schedule dirty state detection

git-subtree-dir: sample-front-end
git-subtree-split: 9f02555bbcc1e7bd576ad04763fbeb5d1f0e0b31
2025-11-29 10:52:05 +09:00
Koha9 6f234ebc48 PlexPlaylist_UI subtree merge
feat(ui): Improve schedule dirty state detection
Detects changes in schedule settings more accurately, considering the active tab and deriving the effective schedule state before comparison. This prevents unintended saving of disabled schedules when switching tabs.

Merge commit '305743d752e1a1ecaefba79419929524ad060663'
2025-11-29 10:52:05 +09:00
Koha9 7dae8647e6 feat: Implement scheduling functionality for playlist synchronization
- Added a new scheduler module using APScheduler to manage scheduled sync jobs.
- Introduced cron expression validation and job scheduling based on user-defined settings.
- Enhanced frontend to support schedule settings, including cron, daily, and weekly modes.
- Updated API service to handle fetching and saving schedule settings.
- Modified StrategySelector component to include schedule management UI.
- Added new types for schedule settings and modes in the frontend.
- Updated requirements to include APScheduler for scheduling capabilities.
2025-11-29 10:49:35 +09:00
Koha9 06e49be1f9 Squashed 'sample-front-end/' changes from 552f9c4..99ea3a6
99ea3a6 feat: Display next sync schedule information
fb8d17a feat: Implement schedule settings and basic UI

git-subtree-dir: sample-front-end
git-subtree-split: 99ea3a68de98503b706d3ee5782baf4a66dc7134
2025-11-29 08:23:31 +09:00
Koha9 40f818bd2c PlexPlaylist_UI subtree merge
feat: Implement schedule settings and basic UI
feat: Display next sync schedule information

Merge commit '06e49be1f9c587f66cca97de97cf449b33b04a4b'
2025-11-29 08:23:31 +09:00
Koha9 6b14847598 Merge commit '0ede13717064aaee99c699d8a3720e9a9c478b1e' 2025-11-29 08:20:22 +09:00
Koha9 0ede137170 Support backend connection timeout configuration 2025-11-29 08:18:32 +09:00
Koha9 da6056c1ae Merge commit 'b6408bf12076b250b5b760d8ba513c0998e48a21' 2025-11-29 07:43:17 +09:00
Koha9 b6408bf120 Add sync controls and status header animations 2025-11-29 04:55:41 +09:00
Koha9 74b37a062c Squashed 'sample-front-end/' changes from 601ffe4..552f9c4
552f9c4 feat: Centralize animation and timing constants
cc962c2 feat: Adjust sync animation gradient
e623426 feat: Add playlist sync functionality and animations

git-subtree-dir: sample-front-end
git-subtree-split: 552f9c471324793b85af14534e81d45d319036a2
2025-11-29 04:08:38 +09:00
Koha9 90294a29bf Add a manual sync button to the UI, along with a sync status indicator bar.
Merge commit '74b37a062cb63d578c1584f2ac1df067dc8b5ed3'
2025-11-29 04:08:38 +09:00
Koha9 80a3e373cf Merge branch 'codex/integrate-sample-front-end-with-backend' 2025-11-29 03:35:40 +09:00
Koha9 c0e45dc674 Fixed the issue where the frontend was not copied to Docker. 2025-11-29 03:26:21 +09:00
Koha9 832dbc11d5 Fix frontend entrypoint for Vite build 2025-11-29 00:25:45 +09:00
Koha9 5a29265854 Squashed 'sample-front-end/' changes from 0881bf1..601ffe4
601ffe4 fix: Refine UI layout and visual elements
4689aaa feat: Add request timeout and cancellation to API calls

git-subtree-dir: sample-front-end
git-subtree-split: 601ffe468a78955839eef6c839314d9b96ea204d
2025-11-28 22:43:39 +09:00
Koha9 e5ba790b44 Merge commit '5a29265854cee9c039f746f5685a538eff048fae' 2025-11-28 22:43:39 +09:00
Koha9 4e91c2acdf Squashed 'sample-front-end/' content from commit 0881bf1
git-subtree-dir: sample-front-end
git-subtree-split: 0881bf1c045118585100360b2c47594cd94b89f1
2025-11-28 01:31:35 +09:00
Koha9 4c6af7115e Merge commit '4e91c2acdf7300f4342b83ea290487c4ef664df4' as 'sample-front-end' 2025-11-28 01:31:35 +09:00
Koha9 1b6dddacc8 Add a dropdown menu that allows users to select a library. 2025-11-27 21:48:48 +09:00
Koha9 355886e797 Modify get_libs_name_list to filter out non-music libraries during output. 2025-11-27 08:11:27 +09:00
Koha9 f943105948 Merge branch 'codex/add-regex-rules-for-playlist-path-replacement' 2025-11-27 05:31:25 +09:00
Koha9 b0613d1616 Add cancel button to reset regex-rule form. 2025-11-27 05:30:54 +09:00
Koha9 3ffc90f43b remove pytest from main branch.
update gitignore.
2025-11-27 05:08:57 +09:00