-
-
Notifications
You must be signed in to change notification settings - Fork 17
feat: Add Studio One project scanning support #394
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Conversation
- Add StudioOneProjectExplorer for .song file format - Add StudioOneAudioMixerPluginCollector for audio effect plugins - Add StudioOneSynthPluginCollector for instrument plugins - Integrate Studio One support into ProjectSyncTask - Add STUDIO_ONE to DawApplication enum - Add Studio One icon support in ApplicationDefaults - Implement plugin name normalization in PluginLookupService - Prioritize classInfo over deviceData for plugin name extraction - Filter out autosave files from scanning - Add minimal debug-level logging matching other DAW patterns
|
Important Review skippedAuto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the You can disable this status message by setting the ✨ Finishing touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
Hi @rogerb831, thanks for your PR ! I'll take a look in the next days. |
- Extract helper methods in StudioOneProjectExplorer (extractMetadata, collectPlugins) - Create StudioOneDomUtils utility class to eliminate code duplication - Refactor StudioOneAudioMixerPluginCollector and StudioOneSynthPluginCollector to use utility methods - Add targeted file extraction to ArchiveUtils to avoid Windows reserved name issues - Update StudioOneProjectExplorer to extract only required files (metainfo.xml, Devices/audiomixer.xml, Devices/audiosynthfolder.xml) - Handle extraction failures gracefully in StudioOneProjectExplorer - Add null checks in ProjectSyncTask to prevent database errors when extraction fails - All methods now under 20 lines to meet complexity requirements
Thanks for that. Fair warning, I'm not a dev by trade and this was heavily enabled by AI. But I'm happy to address whatever issues come up. |
- Split long lines to stay under 120 characters - Make variables final to address distance concerns - Reorder overloaded extractFiles methods to be adjacent - Fix line length issues in PluginLookupService, StudioOneProjectExplorer, and ArchiveUtils
Don't worry too much with codacy code complexity, recent changes in complexity compute broke my previous rules, so it's sometimes failing even with acceptable complexity. |
DropSnorz
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hello @rogerb831
Thanks for your contribution, it could be great to have Studio One support in OwlPlug !
I've added some elements in #217 and reviewed your changes here.
Overall, the logic is valid and design aligns well with the existing principles.
Some adjustments and refactoring steps are required before we can move forward with this PR.
Let me know if you need help with any of the changes.
owlplug-client/src/main/java/com/owlplug/core/utils/ArchiveUtils.java
Outdated
Show resolved
Hide resolved
owlplug-client/src/main/java/com/owlplug/project/services/PluginLookupService.java
Outdated
Show resolved
Hide resolved
...nt/src/main/java/com/owlplug/project/tasks/discovery/studioone/StudioOneProjectExplorer.java
Outdated
Show resolved
Hide resolved
...nt/src/main/java/com/owlplug/project/tasks/discovery/studioone/StudioOneProjectExplorer.java
Show resolved
Hide resolved
...n/java/com/owlplug/project/tasks/discovery/studioone/StudioOneAudioMixerPluginCollector.java
Show resolved
Hide resolved
...c/main/java/com/owlplug/project/tasks/discovery/studioone/StudioOneSynthPluginCollector.java
Outdated
Show resolved
Hide resolved
...n/java/com/owlplug/project/tasks/discovery/studioone/StudioOneAudioMixerPluginCollector.java
Outdated
Show resolved
Hide resolved
...ug-client/src/main/java/com/owlplug/project/tasks/discovery/studioone/StudioOneDomUtils.java
Show resolved
Hide resolved
...nt/src/main/java/com/owlplug/project/tasks/discovery/studioone/StudioOneProjectExplorer.java
Outdated
Show resolved
Hide resolved
...c/main/java/com/owlplug/project/tasks/discovery/studioone/StudioOneSynthPluginCollector.java
Outdated
Show resolved
Hide resolved
…llectors - Fix redundant format detection logic (remove startsWith checks) - Refactor StudioOneDomUtils to use private findAttributeByXId helper - Fix log level for cleanup failure (debug -> error) - Move extractPluginName/extractPluginFormat to StudioOneDomUtils utilities - Move plugin name normalization from lookup to collectors (during sync) - Revert PluginLookupService to original simple implementation This addresses all maintainer feedback from PR DropSnorz#394: - Removes redundant startsWith() checks in format detection - Eliminates code duplication between collectors - Improves code organization with shared utilities - Normalizes plugin names during project sync for cleaner database data
|
Hi @DropSnorz, I've addressed all the feedback from your review: ✅ Fixed redundant format detection logic - Removed unnecessary ✅ Refactored StudioOneDomUtils - Created private ✅ Fixed log level - Changed cleanup failure logging from ✅ Eliminated code duplication - Moved ✅ Moved normalization to collectors - Plugin name normalization now happens during project sync (in collectors) rather than during lookup, ensuring cleaner database data as requested ✅ Reverted PluginLookupService - Restored to original simple implementation since normalization is now handled during sync All changes have been committed and pushed. The code is now cleaner, more maintainable, and follows the patterns you suggested. Ready for re-review! |
…ix metadata extraction - Simplify ArchiveUtils.extractFiles() to match maintainer's suggested implementation - Remove complex parent directory management and compression stream support - Use simpler approach with Collection<String> parameter - Align with maintainer's code suggestion exactly - Fix metadata extraction in StudioOneProjectExplorer - Use only Document:Generator (remove Document:Creator check) - Add individual try-catch blocks for each XPath query - Set default values per query if extraction fails This addresses the remaining maintainer feedback that was missed in the previous commit.
|
Hi @DropSnorz, I realized we missed some additional feedback from your review. I've now addressed those items: ✅ Simplified ArchiveUtils.extractFiles() - Refactored to match your suggested implementation exactly:
✅ Fixed Document:Generator usage - Now only uses Document:Generator attribute (removed Document:Creator check) as requested ✅ Individual XPath exception handling - Each XPath query now has its own try-catch block with appropriate default values, making the code more robust All changes have been committed and pushed. The code now fully addresses all your feedback and is ready for re-review! |
This PR adds Studio One project scanning support to OwlPlug.
Changes
StudioOneProjectExplorerfor .song file format (ZIP-based XML)StudioOneAudioMixerPluginCollectorfor audio effect pluginsStudioOneSynthPluginCollectorfor instrument pluginsProjectSyncTaskSTUDIO_ONEtoDawApplicationenumPluginLookupServiceto handle platform suffixes (x64, x32, etc.)classInfooverdeviceDatafor plugin name extraction to avoid instance namesTesting
Tested on Windows with Studio One project files. Successfully extracts:
audiomixer.xmlaudiosynthfolder.xmlNotes
classInfoto avoid duplicate instance names