mirror of
https://github.com/nextcloud/desktop.git
synced 2024-10-26 06:15:48 +03:00
PlaceHolders: Trigger a download of the placeholder and open it
This commit is contained in:
parent
f5cf03b6a6
commit
6ce7c7a56b
4 changed files with 57 additions and 0 deletions
|
@ -499,6 +499,9 @@ void Application::parseOptions(const QStringList &options)
|
||||||
_backgroundMode = true;
|
_backgroundMode = true;
|
||||||
} else if (option == QLatin1String("--version") || option == QLatin1String("-v")) {
|
} else if (option == QLatin1String("--version") || option == QLatin1String("-v")) {
|
||||||
_versionOnly = true;
|
_versionOnly = true;
|
||||||
|
} else if (option.endsWith(".owncloud")) {
|
||||||
|
// placeholder file, open it after the Folder were created (if the app is not terminated)
|
||||||
|
QTimer::singleShot(0, this, [this, option] { openPlaceholder(option); });
|
||||||
} else {
|
} else {
|
||||||
showHint("Unrecognized option '" + option.toStdString() + "'");
|
showHint("Unrecognized option '" + option.toStdString() + "'");
|
||||||
}
|
}
|
||||||
|
@ -674,4 +677,29 @@ void Application::slotGuiIsShowingSettings()
|
||||||
emit isShowingSettingsDialog();
|
emit isShowingSettingsDialog();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Application::openPlaceholder(const QString &filename)
|
||||||
|
{
|
||||||
|
QLatin1String placeholderExt(".owncloud");
|
||||||
|
if (!filename.endsWith(placeholderExt)) {
|
||||||
|
qWarning(lcApplication) << "Can only handle file ending in .owncloud. Unable to open" << filename;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
QString normalName = filename.left(filename.size() - placeholderExt.size());
|
||||||
|
auto folder = FolderMan::instance()->folderForPath(filename);
|
||||||
|
if (!folder) {
|
||||||
|
qWarning(lcApplication) << "Can't find sync folder for" << filename;
|
||||||
|
// TODO: show a QMessageBox for errors
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
QString relativePath = QDir::cleanPath(normalName).mid(folder->cleanPath().length() + 1);
|
||||||
|
folder->downloadPlaceholder(relativePath);
|
||||||
|
auto con = QSharedPointer<QMetaObject::Connection>::create();
|
||||||
|
*con = QObject::connect(folder, &Folder::syncFinished, [con, normalName] {
|
||||||
|
QObject::disconnect(*con);
|
||||||
|
if (QFile::exists(normalName)) {
|
||||||
|
QDesktopServices::openUrl(QUrl::fromLocalFile(normalName));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace OCC
|
} // namespace OCC
|
||||||
|
|
|
@ -73,6 +73,10 @@ public slots:
|
||||||
// TODO: this should not be public
|
// TODO: this should not be public
|
||||||
void slotownCloudWizardDone(int);
|
void slotownCloudWizardDone(int);
|
||||||
void slotCrash();
|
void slotCrash();
|
||||||
|
/**
|
||||||
|
* Will download a placeholder file, and open the result.
|
||||||
|
*/
|
||||||
|
void openPlaceholder(const QString &filename);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void parseOptions(const QStringList &);
|
void parseOptions(const QStringList &);
|
||||||
|
|
|
@ -514,6 +514,26 @@ void Folder::slotWatchedPathChanged(const QString &path)
|
||||||
scheduleThisFolderSoon();
|
scheduleThisFolderSoon();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Folder::downloadPlaceholder(const QString &_relativepath)
|
||||||
|
{
|
||||||
|
qCInfo(lcFolder) << "Download placeholder: " << _relativepath;
|
||||||
|
auto relativepath = _relativepath.toUtf8();
|
||||||
|
|
||||||
|
// Set in the database that we should download the file
|
||||||
|
SyncJournalFileRecord record;
|
||||||
|
_journal.getFileRecord(relativepath, &record);
|
||||||
|
if (!record.isValid())
|
||||||
|
return;
|
||||||
|
record._type = ItemTypePlaceholderDownload;
|
||||||
|
_journal.setFileRecord(record);
|
||||||
|
|
||||||
|
// Make sure we go over that file during the discovery
|
||||||
|
_journal.avoidReadFromDbOnNextSync(relativepath);
|
||||||
|
|
||||||
|
// Schedule a sync (Folder man will start the sync in a few ms)
|
||||||
|
slotScheduleThisFolder();
|
||||||
|
}
|
||||||
|
|
||||||
void Folder::saveToSettings() const
|
void Folder::saveToSettings() const
|
||||||
{
|
{
|
||||||
// Remove first to make sure we don't get duplicates
|
// Remove first to make sure we don't get duplicates
|
||||||
|
|
|
@ -276,6 +276,11 @@ public slots:
|
||||||
*/
|
*/
|
||||||
void slotWatchedPathChanged(const QString &path);
|
void slotWatchedPathChanged(const QString &path);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Mark a placeholder as being ready for download, and start a sync.
|
||||||
|
*/
|
||||||
|
void downloadPlaceholder(const QString &relativepath);
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void slotSyncStarted();
|
void slotSyncStarted();
|
||||||
void slotSyncFinished(bool);
|
void slotSyncFinished(bool);
|
||||||
|
|
Loading…
Reference in a new issue