13
0

GUI part: cleanup peak-files

This commit is contained in:
Robin Gareus 2015-09-15 14:42:43 +02:00
parent 04e7cfabbe
commit b05912b0cb
7 changed files with 67 additions and 1 deletions

View File

@ -36,7 +36,8 @@
<menuitem action='ExportVideo'/>
</menu>
<menu name='Cleanup' action='Cleanup'>
<menuitem action='bring-into-session'/>
<menuitem action='bring-into-session'/>
<menuitem action='CleanupPeakFiles'/>
<menuitem action='CleanupUnused'/>
<menuitem action='FlushWastebasket'/>
</menu>

View File

@ -107,6 +107,7 @@ typedef uint64_t microseconds_t;
#include "ambiguous_file_dialog.h"
#include "ardour_ui.h"
#include "audio_clock.h"
#include "audio_region_view.h"
#include "big_clock_window.h"
#include "bundle_manager.h"
#include "engine_dialog.h"
@ -3712,6 +3713,47 @@ ARDOUR_UI::flush_trash ()
display_cleanup_results (rep, _("deleted file"), true);
}
void
ARDOUR_UI::cleanup_peakfiles ()
{
if (_session == 0) {
/* shouldn't happen: menu item is insensitive */
return;
}
if (! _session->can_cleanup_peakfiles ()) {
return;
}
// get all region-views in this session
RegionSelection rs;
TrackViewList empty;
empty.clear();
editor->get_regions_after(rs, (framepos_t) 0, empty);
std::list<RegionView*> views = rs.by_layer();
// remove displayed audio-region-views waveforms
for (list<RegionView*>::iterator i = views.begin(); i != views.end(); ++i) {
AudioRegionView* arv = dynamic_cast<AudioRegionView*> (*i);
if (!arv) { continue ; }
arv->delete_waves();
}
// cleanup peak files:
// - stop pending peakfile threads
// - close peakfiles if any
// - remove peak dir in session
// - setup peakfiles (background thread)
_session->cleanup_peakfiles ();
// re-add waves to ARV
for (list<RegionView*>::iterator i = views.begin(); i != views.end(); ++i) {
AudioRegionView* arv = dynamic_cast<AudioRegionView*> (*i);
if (!arv) { continue ; }
arv->create_waves();
}
}
void
ARDOUR_UI::setup_order_hint (AddRouteDialog::InsertAt place)
{

View File

@ -688,6 +688,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr
void display_cleanup_results (ARDOUR::CleanupReport& rep, const gchar* list_title, const bool msg_delete);
void cleanup ();
void cleanup_peakfiles ();
void flush_trash ();
bool have_configure_timeout;

View File

@ -182,6 +182,10 @@ ARDOUR_UI::install_actions ()
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::write_sensitive_actions.push_back (act);
act = ActionManager::register_action (main_actions, X_("CleanupPeakFiles"), _("Clean-up Peak Files..."), sigc::mem_fun (*(ARDOUR_UI::instance()), &ARDOUR_UI::cleanup_peakfiles));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::write_sensitive_actions.push_back (act);
act = ActionManager::register_action (main_actions, X_("FlushWastebasket"), _("Flush Wastebasket"), sigc::mem_fun (*(ARDOUR_UI::instance()), &ARDOUR_UI::flush_trash));
ActionManager::write_sensitive_actions.push_back (act);
ActionManager::session_sensitive_actions.push_back (act);

View File

@ -1115,6 +1115,22 @@ AudioRegionView::update_envelope_visibility ()
}
}
void
AudioRegionView::delete_waves ()
{
for (vector<ScopedConnection*>::iterator i = _data_ready_connections.begin(); i != _data_ready_connections.end(); ++i) {
delete *i;
}
_data_ready_connections.clear ();
for (vector<WaveView*>::iterator w = waves.begin(); w != waves.end(); ++w) {
group->remove(*w);
}
waves.clear();
tmp_waves.clear();
pending_peak_data->show ();
}
void
AudioRegionView::create_waves ()
{

View File

@ -74,6 +74,7 @@ class AudioRegionView : public RegionView
boost::shared_ptr<ARDOUR::AudioRegion> audio_region() const;
void create_waves ();
void delete_waves ();
void set_height (double);
void set_samples_per_pixel (double);

View File

@ -421,6 +421,7 @@ class PublicEditor : public Gtk::Window, public PBD::StatefulDestructible, publi
bool for_mark = false) = 0;
virtual void get_regions_at (RegionSelection &, framepos_t where, TrackViewList const &) const = 0;
virtual void get_regions_after (RegionSelection&, framepos_t where, const TrackViewList& ts) const = 0;
virtual RegionSelection get_regions_from_selection_and_mouse (framepos_t) = 0;
virtual void get_regionviews_by_id (PBD::ID const id, RegionSelection & regions) const = 0;
virtual void get_per_region_note_selection (std::list<std::pair<PBD::ID, std::set<boost::shared_ptr<Evoral::Note<Evoral::Beats> > > > >&) const = 0;