Things to do for v1.8.0

Library

Very important remaining tasks for beta2:

  • Use autopointers for TIOs? - Reworking the way the AnalyserQueue works instead (in progress by Adam)
  • Update LibraryTableModel's rows when TrackDAO is accessed, without resetting it. (How?!)
  • M4A Plugin + Downloader
  • Featured Artists agreement + stats

Very important remaining tasks for beta1:

  • Missing columns in playlist/crate/autodj views https://bugs.launchpad.net/mixxx/+bug/500474
  • Schema versioning
  • 1.7.0 to 1.8.0 XML→DB Library importer (Patch from Zach)
  • Playlist blurb
  • Crate image blurb
  • Fix as many crashes as possible
  • Crate/Playlist/MissingTracks need working location column.
  • Analyze view text is not readable on dark skins.
  • Escape Prepare view searches, use fetchMore(), search in the GUI thread

Complete the rewrite for basic – but stable – functionality

  • Track DB
    • Needs blacklisting of removed songs.
  • 1.7.0 to 1.8.0 XML→DB Library importer (Zach)
  • Searching across library features
    • Make sure search is case-insensitive everywhere
    • Search is saved and restored per-model
    • Playlist models store the search per-playlist
    • Searches occur in background thread.
  • Drag-n-drop across library features
    • Make sure you can drop tracks from any place (browse, external track source, mixxx library) into a Mixxx playlist and the play queue Auto DJ queue
    • Win/Mac/Linux drag of files from OS file browser into Mixxx?
    • Make explicit the cases in which a file outside the Mixxx library is added to the Mixxx library.
    • Show an indicator of where you are about to drop a file in the track-table or sidebar. This is a bug in Qt: http://bugreports.qt.nokia.com/browse/QTBUG-7107
  • Context menus across the whole library
    • Make sure context choices for tracks are appropriate to current state.
    • Menus for sidebar items
  • UI Feedback
    • When a track is missing from the library (Missing Songs model done)
    • When a track failed to load
    • When your results are filtered (i.e. a search is active)
    • When you are about to add a track to your Mixxx library. Make any warnings disable-able via mixxx.cfg.
  • Browse Mode
    • Use a file-system model that polls in a background thread
    • Searches and sorting for the filesystem view
    • Always show .. as a choice
    • Always sort folders before files
    • Needs header that shows you your current path
    • Sorting doesn't work in Size column (kb/mb treated as the same)
  • Playlists
    • Playlist table headers show raw column names
    • Playlists need duration delegate
    • Dragging a file thats in a playlist to its own playlist results in many added copies.
    • Drag-and-drop reordering
    • Invisible playlists so that e.g. the Auto-DJ playlist do not show under playlists.
  • Play Queue/AutoDJ
    • Make enable/disable button change text when its on/off so you know its state.
    • Make 95% crossfade threshold configurable via preferences.
  • Library Rescan
    • Basic fast hashing rescan
    • Modify Library table to make orphan detection easier later (add extra track_locations table)
    • Add mixxx_deleted to Libray table and fs_deleted cols to track_locations table
    • Use mixxx_deleted to blacklist files “removed” from the Mixxx library.
    • Cancel rescan functionality (just needs to be fixed)
  • Tagging (not file metadata tagging)
    • DAO for tags
    • Feature for tags
    • Drag-n-drop to sidebar
    • Tag table model
    • Context menu for track table
    • Context menus for tags in sidebar
    • Feature overview page
    • Prepare view
    • Delegate for showing tags in library table
  • Track Sources
    • iTunes playlist TrackModel
    • iTunes needs duration delegate
    • Rhythmbox Need Date delegate
    • Sorting doesn't work in XML-sourced Playlists
  • Polish
    • Sidebar icons for each feature
    • Tooltips for sidebar items
  • MIDI Control of Library
  • Track-table column header context menu to show/hide columns
  • Cue/Loop Storage in the DB - (this is really a mini-project in itself)
    • Write a CueDAO/Cue service.
    • Make TIO's have a list of Cue's
    • Make TrackCollection save a TIO's Cue's on track save (via CueDAO)
    • Ditch EngineBufferCue
    • Extend EngineBuffer to allow outside addition of EngineControls
    • Write CueControl, created by Player, added to EngineBuffer as an EngineControl
    • Restore track-editor, make it show hotcues
    • Add custom widgets for hotcues – not happening: skins will have to have hacked buttons instead
    • Waveform / waveform overview loops and cues
    • Update skins
  • Minor Bugs
    • Duration Delegate should format seconds as %02d.
    • Sorting is not case insensitive (e.g. on Title)

Looping

  • Complete the looping feature, merge to trunk.
  • Update controller mappings…
    • SCS.3d - in progress

M4A

  • Solve packaging issues
  • Solve Windows X64 libfaad2 dll building issues (embedded asm vs intrinsics) - may be able to split the assembly code into its own file and assemble that separately
  • Fix SoundSourceM4A decoder issues

Misc

  • Update user manual
  • Can someone with some pull PLEASE tell C-Net to update their Mixxx download page?! 82 downloads a week for Mixxx 1.5.0.2 does not make us look good. - Adam took care of it
  • Upload 1.8.0 final to C-Net.

MIDI Sub-system tasks

Remaining tasks here are just polish and are not required for release.

  • Move all PortMIDI calls to one thread (the script engines can not directly call send*Msg anymore.) See this.
  • Save multiple device files correctly, deleting previous .midi.xml files in .mixxx/
    • Save the meta-data (controller ID, author, description, etc…)
      • First make a GUI object that lets the user modify the author and description
    • Find a more appropriate place to save the files other than the MidiDeviceManager destructor Now done (only) when OK is clicked in the prefs
    • Need a way to keep track of duplicate devices so separate files can be saved: Have DlgPreferences::slotApply() call MidiDeviceManager::saveMappings() which does them all in one shot (and can thereby keep track of them)
  • Load those files correctly
    • Load files for attached devices regardless of if they're activated or not.
  • Replace MidiCategory with MidiStatusByte permanently (see mididevice.cpp line 195.)
  • MIDI Scripting: Pass the <group> value from the XML to the script as an additional parameter (at the end of the list so existing scripts are not affected.) - Done by Phil
  • GUI changes:
    • Replace “Activate” button with an “Enabled” check box
    • Display enabled devices in the tree in bold text
    • Auto-change “Output” drop-down based on auto-selected output device in MidiDevice(Manager) when the device is enabled - Albert
    • Make “Output” drop-down take effect when changed - not happening in 1.8. Output drop-down is disabled for now.
    • Persistent mapping preset drop-down (don't return to ”…” unless Clear All is pressed. If the user tweaks the mapping, say ”<custom>” or something.)
    • Also clear the list of MIDI scripts when Clear All is pressed
    • Do not commit changes to the MIDI mapping tables unless OK is pressed in the preferences window. (I.e. allow pressing the Cancel button or the X on the preferences window to restore the MIDI mappings to their previous states.)

Deferred to 1.9

Vinyl control

  • Integrate the latest xwax release code - This is deferred because there are easy-to-mess-up hacks in the xwax code to get it to build on Windows and it would require much more testing than we have time for 1.8.

MIDI scripting

  • Add MIDI script timers - done in features_scriptTimers
  • Add a way to pass extra parameters from the MIDI mapping to the script function ?
  • MIDI script cross-communication (via custom Control[Objects] the scripts can create via special ScriptEngine functions)

Engine

  • Sample accurate scratching: Script use cases:
    1. Tell the Engine to move to absolute sample #X (and/or Y elapsed seconds) over Z seconds of real time, and the Engine will play all the samples between the current and target in the specified time (and fire a signal when it's there) without affecting play status, optionally holding at the target sample until given further instruction
    2. Tell the Engine to move X samples (or Y seconds) forward/backward over Z seconds of real time
    3. Implement alpha-beta smoothing filter in the Engine (currently in scratch.* functions in the common script file) with fixed-interval updates. (I.e. if no new data arrives in the interval, assume the control is stopped and feed that data to the smoothing function.)
 
1.8.0_to_do_list.txt · Last modified: 2010/02/18 08:38 by pegasus
 
Except where otherwise noted, content on this wiki is licensed under the following license:CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki