diff --git a/app/dialog/diskcache/diskcachedialog.cpp b/app/dialog/diskcache/diskcachedialog.cpp index 1a409ae10..75c005468 100644 --- a/app/dialog/diskcache/diskcachedialog.cpp +++ b/app/dialog/diskcache/diskcachedialog.cpp @@ -26,6 +26,7 @@ #include #include "config/config.h" +#include "core.h" namespace olive { @@ -53,7 +54,7 @@ DiskCacheDialog::DiskCacheDialog(DiskCacheFolder *folder, QWidget* parent) : row++; clear_cache_btn_ = new QPushButton(tr("Clear Disk Cache")); - connect(clear_cache_btn_, &QPushButton::clicked, this, &DiskCacheDialog::ClearDiskCache); + connect(clear_cache_btn_, &QPushButton::clicked, this, static_cast(&DiskCacheDialog::ClearDiskCache)); layout->addWidget(clear_cache_btn_, row, 1); row++; @@ -86,20 +87,25 @@ void DiskCacheDialog::accept() void DiskCacheDialog::ClearDiskCache() { - if (QMessageBox::question(this, - tr("Clear Disk Cache"), - tr("Are you sure you want to clear the disk cache in '%1'?").arg(Config::Current()["DiskCachePath"].toString()), - QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) { - clear_cache_btn_->setEnabled(false); + ClearDiskCache(folder_->GetPath(), this, clear_cache_btn_); +} - if (DiskManager::instance()->ClearDiskCache(folder_->GetPath())) { - clear_cache_btn_->setText(tr("Disk Cache Cleared")); +void DiskCacheDialog::ClearDiskCache(const QString &path, QWidget *parent, QPushButton *clear_btn) +{ + if (QMessageBox::question(parent, + tr("Clear Disk Cache"), + tr("Are you sure you want to clear the disk cache in '%1'?").arg(path), + QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) { + if (clear_btn) clear_btn->setEnabled(false); + + if (DiskManager::instance()->ClearDiskCache(path)) { + if (clear_btn) clear_btn->setText(tr("Disk Cache Cleared")); } else { - QMessageBox::information(this, + QMessageBox::information(parent, tr("Clear Disk Cache"), tr("Disk cache failed to fully clear. You may have to delete the cache files manually."), QMessageBox::Ok); - clear_cache_btn_->setText(tr("Disk Cache Partially Cleared")); + if (clear_btn) clear_btn->setText(tr("Disk Cache Partially Cleared")); } } } diff --git a/app/dialog/diskcache/diskcachedialog.h b/app/dialog/diskcache/diskcachedialog.h index ee5e759d1..87317fc77 100644 --- a/app/dialog/diskcache/diskcachedialog.h +++ b/app/dialog/diskcache/diskcachedialog.h @@ -36,6 +36,8 @@ class DiskCacheDialog : public QDialog public: DiskCacheDialog(DiskCacheFolder* folder, QWidget* parent = nullptr); + static void ClearDiskCache(const QString &path, QWidget *parent, QPushButton *clear_btn = nullptr); + public slots: virtual void accept() override; diff --git a/app/window/mainwindow/mainmenu.cpp b/app/window/mainwindow/mainmenu.cpp index e9301d32e..b6b37eed9 100644 --- a/app/window/mainwindow/mainmenu.cpp +++ b/app/window/mainwindow/mainmenu.cpp @@ -28,6 +28,7 @@ #include "config/config.h" #include "core.h" #include "dialog/actionsearch/actionsearch.h" +#include "dialog/diskcache/diskcachedialog.h" #include "dialog/task/task.h" #include "panel/panelmanager.h" #include "tool/tool.h" @@ -171,6 +172,10 @@ MainMenu::MainMenu(MainWindow *parent) : sequence_cache_item_ = sequence_menu_->AddItem("seqcache", this, &MainMenu::SequenceCacheTriggered); sequence_cache_in_to_out_item_ = sequence_menu_->AddItem("seqcacheinout", this, &MainMenu::SequenceCacheInOutTriggered); + sequence_menu_->addSeparator(); + + sequence_disk_cache_clear_item_ = sequence_menu_->AddItem("seqcacheclear", this, &MainMenu::SequenceCacheClearTriggered); + // // WINDOW MENU // @@ -614,6 +619,14 @@ void MainMenu::SequenceCacheInOutTriggered() Core::instance()->CacheActiveSequence(true); } +void MainMenu::SequenceCacheClearTriggered() +{ + DiskCacheDialog::ClearDiskCache( + Core::instance()->GetActiveProject()->cache_path(), + Core::instance()->main_window() + ); +} + void MainMenu::HelpFeedbackTriggered() { QDesktopServices::openUrl(QStringLiteral("https://github.com/olive-editor/olive/issues")); @@ -686,6 +699,7 @@ void MainMenu::Retranslate() sequence_menu_->setTitle(tr("&Sequence")); sequence_cache_item_->setText(tr("Cache Entire Sequence")); sequence_cache_in_to_out_item_->setText(tr("Cache Sequence In/Out")); + sequence_disk_cache_clear_item_->setText(tr("Clear Disk Cache")); // Window menu window_menu_->setTitle(tr("&Window")); diff --git a/app/window/mainwindow/mainmenu.h b/app/window/mainwindow/mainmenu.h index 82277344b..ae8ea40e8 100644 --- a/app/window/mainwindow/mainmenu.h +++ b/app/window/mainwindow/mainmenu.h @@ -179,6 +179,7 @@ private slots: void SequenceCacheTriggered(); void SequenceCacheInOutTriggered(); + void SequenceCacheClearTriggered(); void HelpFeedbackTriggered(); @@ -249,6 +250,7 @@ private: Menu* sequence_menu_; QAction* sequence_cache_item_; QAction* sequence_cache_in_to_out_item_; + QAction* sequence_disk_cache_clear_item_; Menu* window_menu_; QAction* window_menu_separator_;