PlaceHolders: Trigger a download of the placeholder and open it

This commit is contained in:
Olivier Goffart 2018-01-15 16:46:52 +01:00 committed by Kevin Ottens
parent f5cf03b6a6
commit 6ce7c7a56b
No known key found for this signature in database
GPG key ID: 074BBBCB8DECC9E2
4 changed files with 57 additions and 0 deletions

View file

@ -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

View file

@ -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 &);

View file

@ -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

View file

@ -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);