Skip to content

Commit 46a7c66

Browse files
authored
feat: remember last opened path
(#37)
1 parent 8247ef9 commit 46a7c66

File tree

4 files changed

+47
-6
lines changed

4 files changed

+47
-6
lines changed

src/common/dmr_settings.cpp

+11
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,17 @@ QString Settings::screenshotNameSeqTemplate()
162162
.arg(QDateTime::currentDateTime().toString("yyyyMMddhhmmss"));
163163
}
164164

165+
void Settings::setGeneralOption(const QString &opt, const QVariant &v)
166+
{
167+
settings()->setOption(QString("base.general.%1").arg(opt), v);
168+
settings()->sync();
169+
}
170+
171+
QVariant Settings::generalOption(const QString &opt)
172+
{
173+
return settings()->getOption(QString("base.general.%1").arg(opt));
174+
}
175+
165176
QVariant Settings::internalOption(const QString& opt)
166177
{
167178
return settings()->getOption(QString("base.play.%1").arg(opt));

src/common/dmr_settings.h

+3
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,9 @@ class Settings: public QObject {
6464
QPointer<DSettingsGroup> base() { return group("base"); }
6565
QPointer<DSettingsGroup> subtitle() { return group("subtitle"); }
6666

67+
void setGeneralOption(const QString& opt, const QVariant& v);
68+
QVariant generalOption(const QString& opt);
69+
6770
void setInternalOption(const QString& opt, const QVariant& v);
6871
QVariant internalOption(const QString& opt);
6972

src/common/mainwindow.cpp

+31-6
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ static QWidget *createSelectableLineEditOptionHandle(QObject *opt)
128128

129129
option->connect(le, &DLineEdit::iconClicked, [=]() {
130130
QString name = QFileDialog::getExistingDirectory(0, QObject::tr("Open folder"),
131-
QDir::currentPath(),
131+
MainWindow::lastOpenedPath(),
132132
QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
133133
if (validate(name, false)) {
134134
option->setValue(name);
@@ -1447,11 +1447,13 @@ void MainWindow::requestAction(ActionFactory::ActionKind kd, bool fromUI,
14471447

14481448
case ActionFactory::ActionKind::OpenDirectory: {
14491449
QString name = QFileDialog::getExistingDirectory(this, tr("Open folder"),
1450-
QDir::currentPath(),
1450+
lastOpenedPath(),
14511451
QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
14521452

14531453
QFileInfo fi(name);
14541454
if (fi.isDir() && fi.exists()) {
1455+
Settings::get().setGeneralOption("last_open_path", fi.path());
1456+
14551457
const auto& urls = _engine->addPlayDir(name);
14561458
if (urls.size()) {
14571459
_engine->playByName(QUrl("playlist://0"));
@@ -1462,12 +1464,17 @@ void MainWindow::requestAction(ActionFactory::ActionKind kd, bool fromUI,
14621464

14631465
case ActionFactory::ActionKind::OpenFileList: {
14641466
QStringList filenames = QFileDialog::getOpenFileNames(this, tr("Open file"),
1465-
QDir::currentPath(),
1467+
lastOpenedPath(),
14661468
tr("All videos (%1)").arg(_engine->video_filetypes.join(" ")), 0,
14671469
QFileDialog::HideNameFilterDetails);
14681470

14691471
QList<QUrl> urls;
14701472
if (filenames.size()) {
1473+
QFileInfo fileInfo(filenames[0]);
1474+
if (fileInfo.exists()) {
1475+
Settings::get().setGeneralOption("last_open_path", fileInfo.path());
1476+
}
1477+
14711478
for (const auto& filename: filenames) {
14721479
urls.append(QUrl::fromLocalFile(filename));
14731480
}
@@ -1479,10 +1486,13 @@ void MainWindow::requestAction(ActionFactory::ActionKind kd, bool fromUI,
14791486

14801487
case ActionFactory::ActionKind::OpenFile: {
14811488
QString filename = QFileDialog::getOpenFileName(this, tr("Open file"),
1482-
QDir::currentPath(),
1489+
lastOpenedPath(),
14831490
tr("All videos (%1)").arg(_engine->video_filetypes.join(" ")), 0,
14841491
QFileDialog::HideNameFilterDetails);
1485-
if (QFileInfo(filename).exists()) {
1492+
QFileInfo fileInfo(filename);
1493+
if (fileInfo.exists()) {
1494+
Settings::get().setGeneralOption("last_open_path", fileInfo.path());
1495+
14861496
play(QUrl::fromLocalFile(filename));
14871497
}
14881498
break;
@@ -1814,7 +1824,7 @@ void MainWindow::requestAction(ActionFactory::ActionKind kd, bool fromUI,
18141824

18151825
case ActionFactory::ActionKind::LoadSubtitle: {
18161826
QString filename = QFileDialog::getOpenFileName(this, tr("Open file"),
1817-
QDir::currentPath(),
1827+
lastOpenedPath(),
18181828
tr("Subtitle (*.ass *.aqt *.jss *.gsub *.ssf *.srt *.sub *.ssa *.smi *.usf *.idx)"));
18191829
if (QFileInfo(filename).exists()) {
18201830
auto success = _engine->loadSubtitle(QFileInfo(filename));
@@ -2568,6 +2578,21 @@ void MainWindow::prepareSplashImages()
25682578
bg_light = utils::LoadHiDPIImage(":/resources/icons/light/init-splash.svg");
25692579
}
25702580

2581+
QString MainWindow::lastOpenedPath()
2582+
{
2583+
QString lastPath = Settings::get().generalOption("last_open_path").toString();
2584+
QDir lastDir(lastPath);
2585+
if (lastPath.isEmpty() || !lastDir.exists()) {
2586+
lastPath = QStandardPaths::writableLocation(QStandardPaths::MoviesLocation);
2587+
QDir newLastDir(lastPath);
2588+
if (!newLastDir.exists()) {
2589+
lastPath = QDir::currentPath();
2590+
}
2591+
}
2592+
2593+
return lastPath;
2594+
}
2595+
25712596
void MainWindow::paintEvent(QPaintEvent* pe)
25722597
{
25732598
QPainter p(this);

src/common/mainwindow.h

+2
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,8 @@ class MainWindow: public QFrame {
8585

8686
void updateContentGeometry(const QRect& rect);
8787

88+
static QString lastOpenedPath();
89+
8890
signals:
8991
void windowEntered();
9092
void windowLeaved();

0 commit comments

Comments
 (0)