< Amarok | Development Contents 1 Amarok @ Randa 2012: Architecture review 1.1 Source Structure 1.2 Components 1.3 Meta 1.3.1 Prevent Circular Referencing 1.3.2 Simplify Compilation 1.3.3 Simplify 1.3.4 Playlists Folded into Meta 1.3.5 MultiSource tracks 1.4 File Layout Dialog 1.5 Popup Dropper 1.6 PlaylistFileProvider 1.7 Services 1.7.1 Service Plugin Structure Amarok @ Randa 2012: Architecture review Source Structure only main.cpp/App.cpp/etc in src/ group collections, providers, ... together in libraries or plugins get rid of core-impl. some stuff should be in core organize by libraries/plugins One CMakeFiles.txt per sub-folder: limited link target, faster linking Clean up includes: less files touched for rebuild Components Can be expected to always be there. Are created by main.cpp in the order needed or are interfaces with stub implementation until the real one is registered. CollectionManager PlaylistManager defaultPlaylistProvider PlaybackController, PlaybackQueue MainWindow: parent of the dialogs, keybindings, etc Notifier (ACTION: rename Logger) Stub implementation until MainWindow is ready. Meta Prevent Circular Referencing Meta::Album::tracks() > implemented using QueryMaker (blocking until result is ready) Simplify Compilation Album::artist(): null > compilation, empty > bad tag, normal Simplify Meta::Genre > QString Meta::Label > QString Meta::Year > QString Track::Artist() -> QString (display only) Album::Artist() -> Meta::Artist (has it's own properties: rating, year, image, ...) Playlists Folded into Meta Meta::Playlist inheriting Meta::Base. PlaylistObserver methods moved into Meta::Observer MultiSource tracks QList<KUrl> playableUrls() in the order of priority. Handled in PlaybackController. File Layout Dialog Presets for Amarok, iTunes, Windows MediaPlayer standard layout. Useful for imported collections. Basic Layout Mode: Tokens in vertical list, small icons. Separate preset config, main dialog just showing selector and edit buttons. Popup Dropper Remove overlay on more... 3 items max, easy muscle memory targets. PlaylistBrowser: 2 common actions: load, replace + most sensible (first?) provider action. PlaylistFileProvider Use as export option: Open export playlist dialog Option to copy tracks to containing folder. Don't show playlist files from collection by default. Alternatives? Services Easy to write 1 instance per service plugin > no factory pattern needed pre-init data can be read from desktop files (icon, name, description) Auto-init optional for C++ plugins, not possible for scripts to prevent UI blocking and such Unit tested Service Plugin Structure TrackProvider or PlaylistProvider (or multiple) when needed QAbstractItemModel free from UI elements. Custom roles for Amarok: uidUrl (for file/playlist load) QActions for toolbar (next to search box) Custom UI per platform Delegate for ItemModel UI or QML for custom interaction (location determined by platform implementation) Retrieved from "https://community.kde.org/index.php?title=Amarok/Development/ArchitectureReview&oldid=29599" This page was last edited on 19 January 2013, at 16:05. Content is available under Creative Commons License SA 4.0 unless otherwise noted.