diff options
author | Robin Gareus <robin@gareus.org> | 2015-09-16 01:20:27 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2015-09-16 01:28:55 +0200 |
commit | de53fac3032b87017d83e3f44101eb3edf76888a (patch) | |
tree | 0f06086473edc678f4a1bb2170c4fc79e417f04e /gtk2_ardour/session_dialog.cc | |
parent | 50a6487e771f24803d82a1a1c6c3938448b07ae2 (diff) |
pre-sort recent-sessions by modification time - #6575
Diffstat (limited to 'gtk2_ardour/session_dialog.cc')
-rw-r--r-- | gtk2_ardour/session_dialog.cc | 27 |
1 files changed, 23 insertions, 4 deletions
diff --git a/gtk2_ardour/session_dialog.cc b/gtk2_ardour/session_dialog.cc index e65ef5a552..13d114c770 100644 --- a/gtk2_ardour/session_dialog.cc +++ b/gtk2_ardour/session_dialog.cc @@ -24,6 +24,9 @@ #include <fstream> #include <algorithm> +#include <glib.h> +#include <glib/gstdio.h> + #include <gtkmm/filechooser.h> #include "pbd/failed_constructor.h" @@ -582,11 +585,12 @@ int SessionDialog::redisplay_recent_sessions () { std::vector<std::string> session_directories; - RecentSessionsSorter cmp; + RecentSessionsTimeSorter cmp; recent_session_display.set_model (Glib::RefPtr<TreeModel>(0)); recent_session_model->clear (); + // code below is a near from ARDOUR_UI::redisplay_recent_sessions() ARDOUR::RecentSessions rs; ARDOUR::read_recent_sessions (rs); @@ -594,11 +598,26 @@ SessionDialog::redisplay_recent_sessions () recent_session_display.set_model (recent_session_model); return 0; } - // - // sort them alphabetically - sort (rs.begin(), rs.end(), cmp); + // sort by session modificaion time. + // TODO it would be nicer to sort using the model (and make the TV sortable) + std::vector< std::pair<int64_t,std::string> > rss; for (ARDOUR::RecentSessions::iterator i = rs.begin(); i != rs.end(); ++i) { + std::vector<std::string> state_file_paths; + get_state_files_in_directory ((*i).second, state_file_paths); + if (state_file_paths.empty()) { + continue; + } + GStatBuf gsb; + if (g_stat (state_file_paths.front().c_str(), &gsb)) { + continue; + } + rss.push_back (std::make_pair((int64_t)gsb.st_mtime, (*i).second)); + } + + sort (rss.begin(), rss.end(), cmp); + + for (std::vector< std::pair<int64_t,std::string> >::iterator i = rss.begin(); i != rss.end(); ++i) { session_directories.push_back ((*i).second); } |