PATCHES: Exaile does not support multiple simultaneous player objects
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
Exaile |
Fix Released
|
Wishlist
|
Dustin Spicuzza |
Bug Description
Exaile *almost* has support for multiple simultaneous player objects playing audio at the same time. This set of patches intends to make this fully possible. It is intended that these changes will be 100% backwards-
Use case:
- In a DJ setup, it would be useful for a user to be able to be playing audio on a primary device, and previewing music on a secondary device on the computer
There are a number of changes that are required to make this work, and I will post all related patches to this bug. Changes I intend to make:
- each player needs to have its own per-instance settings. This will be accomplished by saving settings to <player-
- events
- all events on a player/audio element must be associated with a particular player, otherwise changes to one player will affect the other player unexpectedly. This is completed and in the first patch.
- all events on the user interface should be associated with a particular player, otherwise you may get random unexpected behavior as the players are cycling through their tracks. This is a big change, and will be in a separate patch(es).
Patches are based on whatever my dj_improvements branch happens to look like at the time, since it is very far ahead of trunk right now.
Related branches
- Adam Olsen: Approve
-
Diff: 5692 lines (+2891/-448)68 files modifieddata/ui/preferences/playback.ui (+35/-2)
data/ui/preferences/playlists.ui (+15/-0)
plugins/audioscrobbler/__init__.py (+5/-5)
plugins/awn/__init__.py (+7/-7)
plugins/bpm/PLUGININFO (+4/-0)
plugins/bpm/__init__.py (+258/-0)
plugins/bpm/bpm.glade (+49/-0)
plugins/currentsong/__init__.py (+7/-7)
plugins/desktopcover/__init__.py (+10/-2)
plugins/equalizer/__init__.py (+2/-2)
plugins/grouptagger/PLUGININFO (+4/-0)
plugins/grouptagger/__init__.py (+273/-0)
plugins/grouptagger/gt_common.py (+297/-0)
plugins/grouptagger/gt_widgets.py (+406/-0)
plugins/history/PLUGININFO (+4/-0)
plugins/history/__init__.py (+311/-0)
plugins/history/history_preferences.py (+52/-0)
plugins/history/history_preferences.ui (+70/-0)
plugins/karaoke/__init__.py (+2/-2)
plugins/lyricsviewer/__init__.py (+6/-6)
plugins/minimode/controls.py (+11/-11)
plugins/moodbar/__init__.py (+4/-4)
plugins/mpris/mpris_player.py (+2/-2)
plugins/notify/__init__.py (+3/-3)
plugins/notifyosd/__init__.py (+8/-8)
plugins/replaygain/__init__.py (+4/-4)
plugins/streamripper/__init__.py (+4/-4)
xl/formatter.py (+8/-8)
xl/metadata/__init__.py (+11/-1)
xl/metadata/mp4.py (+6/-0)
xl/player/__init__.py (+2/-2)
xl/player/_base.py (+10/-9)
xl/player/adapters.py (+18/-14)
xl/player/engine_normal.py (+9/-6)
xl/player/engine_unified.py (+24/-20)
xl/player/pipe.py (+47/-41)
xl/player/queue.py (+20/-5)
xl/playlist.py (+16/-6)
xl/trax/search.py (+30/-2)
xl/trax/track.py (+7/-1)
xl/trax/trackdb.py (+9/-2)
xlgui/__init__.py (+2/-2)
xlgui/cover.py (+16/-13)
xlgui/main.py (+17/-10)
xlgui/menu.py (+5/-0)
xlgui/oldmenu.py (+24/-2)
xlgui/osd.py (+1/-1)
xlgui/panel/collection.py (+2/-2)
xlgui/panel/files.py (+2/-2)
xlgui/panel/flatplaylist.py (+4/-4)
xlgui/panel/playlists.py (+142/-33)
xlgui/panel/radio.py (+4/-4)
xlgui/playlist.py (+12/-11)
xlgui/preferences/__init__.py (+8/-11)
xlgui/preferences/playback.py (+8/-0)
xlgui/preferences/playlists.py (+4/-0)
xlgui/properties.py (+11/-1)
xlgui/tray.py (+14/-14)
xlgui/widgets/dialogs.py (+335/-7)
xlgui/widgets/filter.py (+10/-0)
xlgui/widgets/info.py (+19/-15)
xlgui/widgets/menuitems.py (+7/-8)
xlgui/widgets/notebook.py (+1/-0)
xlgui/widgets/playback.py (+58/-58)
xlgui/widgets/playlist.py (+75/-28)
xlgui/widgets/playlist_columns.py (+5/-4)
xlgui/widgets/queue.py (+12/-10)
xlgui/widgets/rating.py (+23/-22)
Changed in exaile: | |
assignee: | nobody → Dustin Spicuzza (dustin-virtualroadside) |
importance: | Undecided → Wishlist |
milestone: | none → 0.3.3.0 |
status: | New → Fix Committed |
Changed in exaile: | |
status: | Fix Committed → Fix Released |
Ok, after a bit of a break, I've got the rest of the changes made. This last patch is a bit bigger than the rest because I was lazier than I should have been... but this final patch makes it so that exaile *really* supports having multiple player objects without something accidentally affecting a player object that it didn't intend to affect.
Note that many plugins will only do whatever it is that they're doing on the first player object, and dealing with that is more annoying than I feel like dealing with at the moment.
Additionally, the 'Marker' functionality of the playback bar only works on the main player object... and it seems like the marker stuff would need to be rewritten to actually support multiple players -- basically, it assumes that the PlaybackProgressBar object can only be associated with the main player, regardless of which player it's actually associated with. Since almost nothing uses the Marker stuff, I've elected to leave that mostly alone for now.