Skip to content

Commit

Permalink
Save as operation remembers the previous save path
Browse files Browse the repository at this point in the history
After saving a page, the location is remembered and is used as the default folder to save a page next time. Documents folder is the original default folder.
  • Loading branch information
ShaopengLin committed Jun 21, 2024
1 parent 90539f2 commit 8b94432
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 5 deletions.
12 changes: 9 additions & 3 deletions src/kprofile.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,18 @@ void KProfile::startDownload(QWebEngineDownloadItem* download)
void KProfile::startDownload(QWebEngineDownloadRequest* download)
#endif
{
QString defaultFileName = download->url().fileName();
QString fileName = QFileDialog::getSaveFileName(KiwixApp::instance()->getMainWindow(),
gt("save-file-as-window-title"), defaultFileName);
auto app = KiwixApp::instance();
auto suggestedDir = app->getSettingsManager()->getPrevSaveDir();
auto suggestedPath = suggestedDir + "/" + download->url().fileName();
QString fileName = QFileDialog::getSaveFileName(
KiwixApp::instance()->getMainWindow(), gt("save-file-as-window-title"),
suggestedPath);

if (fileName.isEmpty()) {
return;
}
app->getSettingsManager()->setPrevSaveDir(QFileInfo(fileName).absolutePath());

QString extension = "." + download->url().url().section('.', -1);
if (!fileName.endsWith(extension)) {
fileName.append(extension);
Expand Down
16 changes: 16 additions & 0 deletions src/settingsmanager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
#include <QLocale>
#include <QList>

const QString DEFAULT_SAVE_DIR = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation);

SettingsManager::SettingsManager(QObject *parent)
: QObject(parent),
m_settings("Kiwix", "Kiwix-desktop"),
Expand Down Expand Up @@ -57,6 +59,12 @@ qreal SettingsManager::getZoomFactorByZimId(const QString &id)
return zoomFactor;
}

QString SettingsManager::getPrevSaveDir() const
{
QDir dir(m_prevSaveDir);
return dir.exists() ? m_prevSaveDir : DEFAULT_SAVE_DIR;
}

void SettingsManager::setKiwixServerPort(int port)
{
m_kiwixServerPort = port;
Expand Down Expand Up @@ -93,6 +101,13 @@ void SettingsManager::setMonitorDir(QString monitorDir)
emit(monitorDirChanged(monitorDir));
}

void SettingsManager::setPrevSaveDir(QString prevSaveDir)
{
m_prevSaveDir = prevSaveDir;
m_settings.setValue("prevSaveDir", prevSaveDir);
emit(prevSaveDirChanged(prevSaveDir));
}

void SettingsManager::setMoveToTrash(bool moveToTrash)
{
m_moveToTrash = moveToTrash;
Expand Down Expand Up @@ -155,6 +170,7 @@ void SettingsManager::initSettings()
m_downloadDir = m_settings.value("download/dir", QString::fromStdString(kiwix::getDataDirectory())).toString();
m_kiwixServerIpAddress = m_settings.value("localKiwixServer/ipAddress", QString("0.0.0.0")).toString();
m_monitorDir = m_settings.value("monitor/dir", QString("")).toString();
m_prevSaveDir = m_settings.value("prevSaveDir", DEFAULT_SAVE_DIR).toString();
m_moveToTrash = m_settings.value("moveToTrash", true).toBool();
m_reopenTab = m_settings.value("reopenTab", false).toBool();
QString defaultLang = QLocale::languageToString(QLocale().language()) + '|' + QLocale().name().split("_").at(0);
Expand Down
4 changes: 4 additions & 0 deletions src/settingsmanager.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ class SettingsManager : public QObject
qreal getZoomFactor() const { return m_zoomFactor; }
QString getDownloadDir() const { return m_downloadDir; }
QString getMonitorDir() const { return m_monitorDir; }
QString getPrevSaveDir() const;
bool getMoveToTrash() const { return m_moveToTrash; }
bool getReopenTab() const { return m_reopenTab; }
FilterList getLanguageList() { return deducePair(m_langList); }
Expand All @@ -40,6 +41,7 @@ public slots:
void setZoomFactor(qreal zoomFactor);
void setDownloadDir(QString downloadDir);
void setMonitorDir(QString monitorDir);
void setPrevSaveDir(QString prevSaveDir);
void setMoveToTrash(bool moveToTrash);
void setReopenTab(bool reopenTab);
void setLanguage(FilterList langList);
Expand All @@ -56,6 +58,7 @@ public slots:
void zoomChanged(qreal zoomFactor);
void downloadDirChanged(QString downloadDir);
void monitorDirChanged(QString monitorDir);
void prevSaveDirChanged(QString prevSaveDir);
void moveToTrashChanged(bool moveToTrash);
void reopenTabChanged(bool reopenTab);
void languageChanged(QList<QVariant> langList);
Expand All @@ -70,6 +73,7 @@ public slots:
qreal m_zoomFactor;
QString m_downloadDir;
QString m_monitorDir;
QString m_prevSaveDir;
bool m_moveToTrash;
bool m_reopenTab;
QList<QVariant> m_langList;
Expand Down
7 changes: 5 additions & 2 deletions src/webview.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -149,14 +149,17 @@ void WebView::downloadViewContent()
auto mimeType = QByteArray::fromStdString(item.getMimetype());
mimeType = mimeType.split(';')[0];

auto suggestedDir = app->getSettingsManager()->getPrevSaveDir();
auto suggestedPath = suggestedDir + "/" + this->url().fileName() + ".pdf";
if (mimeType == "text/html")
{
QString fileName = QFileDialog::getSaveFileName(
app->getMainWindow(), gt("save-file-as-window-title"), "",
gt("pdf-files-filter") + " (*.pdf)");
app->getMainWindow(), gt("save-file-as-window-title"),
suggestedPath, gt("pdf-files-filter") + " (*.pdf)");
if (fileName.isEmpty())
return;

app->getSettingsManager()->setPrevSaveDir(QFileInfo(fileName).absolutePath());
page()->printToPdf(fileName);
}
else
Expand Down

0 comments on commit 8b94432

Please sign in to comment.