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;
|
||||
} else if (option == QLatin1String("--version") || option == QLatin1String("-v")) {
|
||||
_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 {
|
||||
showHint("Unrecognized option '" + option.toStdString() + "'");
|
||||
}
|
||||
|
@ -674,4 +677,29 @@ void Application::slotGuiIsShowingSettings()
|
|||
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
|
||||
|
|
|
@ -73,6 +73,10 @@ public slots:
|
|||
// TODO: this should not be public
|
||||
void slotownCloudWizardDone(int);
|
||||
void slotCrash();
|
||||
/**
|
||||
* Will download a placeholder file, and open the result.
|
||||
*/
|
||||
void openPlaceholder(const QString &filename);
|
||||
|
||||
protected:
|
||||
void parseOptions(const QStringList &);
|
||||
|
|
|
@ -514,6 +514,26 @@ void Folder::slotWatchedPathChanged(const QString &path)
|
|||
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
|
||||
{
|
||||
// Remove first to make sure we don't get duplicates
|
||||
|
|
|
@ -276,6 +276,11 @@ public slots:
|
|||
*/
|
||||
void slotWatchedPathChanged(const QString &path);
|
||||
|
||||
/**
|
||||
* Mark a placeholder as being ready for download, and start a sync.
|
||||
*/
|
||||
void downloadPlaceholder(const QString &relativepath);
|
||||
|
||||
private slots:
|
||||
void slotSyncStarted();
|
||||
void slotSyncFinished(bool);
|
||||
|
|
Loading…
Reference in a new issue