mirror of
https://github.com/JulianGro/overte.git
synced 2025-08-04 18:39:18 +02:00
Merge pull request #8825 from howard-stearns/recover-from-cancelled-snapshot-directory
check for empty snapshot dir, and default to temp
This commit is contained in:
commit
f1b2dd8b1a
4 changed files with 62 additions and 34 deletions
|
@ -43,9 +43,7 @@ const QString SNAPSHOTS_DIRECTORY = "Snapshots";
|
||||||
|
|
||||||
const QString URL = "highfidelity_url";
|
const QString URL = "highfidelity_url";
|
||||||
|
|
||||||
Setting::Handle<QString> Snapshot::snapshotsLocation("snapshotsLocation",
|
Setting::Handle<QString> Snapshot::snapshotsLocation("snapshotsLocation");
|
||||||
QStandardPaths::writableLocation(QStandardPaths::DesktopLocation));
|
|
||||||
Setting::Handle<bool> Snapshot::hasSetSnapshotsLocation("hasSetSnapshotsLocation", false);
|
|
||||||
|
|
||||||
SnapshotMetaData* Snapshot::parseSnapshotData(QString snapshotPath) {
|
SnapshotMetaData* Snapshot::parseSnapshotData(QString snapshotPath) {
|
||||||
|
|
||||||
|
@ -105,42 +103,44 @@ QFile* Snapshot::savedFileForSnapshot(QImage & shot, bool isTemporary) {
|
||||||
const int IMAGE_QUALITY = 100;
|
const int IMAGE_QUALITY = 100;
|
||||||
|
|
||||||
if (!isTemporary) {
|
if (!isTemporary) {
|
||||||
QString snapshotFullPath;
|
QString snapshotFullPath = snapshotsLocation.get();
|
||||||
if (!hasSetSnapshotsLocation.get()) {
|
|
||||||
snapshotFullPath = QFileDialog::getExistingDirectory(nullptr, "Choose Snapshots Directory", snapshotsLocation.get());
|
if (snapshotFullPath.isEmpty()) {
|
||||||
hasSetSnapshotsLocation.set(true);
|
snapshotFullPath = OffscreenUi::getExistingDirectory(nullptr, "Choose Snapshots Directory", QStandardPaths::writableLocation(QStandardPaths::DesktopLocation));
|
||||||
snapshotsLocation.set(snapshotFullPath);
|
snapshotsLocation.set(snapshotFullPath);
|
||||||
} else {
|
|
||||||
snapshotFullPath = snapshotsLocation.get();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!snapshotFullPath.endsWith(QDir::separator())) {
|
if (!snapshotFullPath.isEmpty()) { // not cancelled
|
||||||
snapshotFullPath.append(QDir::separator());
|
|
||||||
|
if (!snapshotFullPath.endsWith(QDir::separator())) {
|
||||||
|
snapshotFullPath.append(QDir::separator());
|
||||||
|
}
|
||||||
|
|
||||||
|
snapshotFullPath.append(filename);
|
||||||
|
|
||||||
|
QFile* imageFile = new QFile(snapshotFullPath);
|
||||||
|
imageFile->open(QIODevice::WriteOnly);
|
||||||
|
|
||||||
|
shot.save(imageFile, 0, IMAGE_QUALITY);
|
||||||
|
imageFile->close();
|
||||||
|
|
||||||
|
return imageFile;
|
||||||
}
|
}
|
||||||
|
|
||||||
snapshotFullPath.append(filename);
|
|
||||||
|
|
||||||
QFile* imageFile = new QFile(snapshotFullPath);
|
|
||||||
imageFile->open(QIODevice::WriteOnly);
|
|
||||||
|
|
||||||
shot.save(imageFile, 0, IMAGE_QUALITY);
|
|
||||||
imageFile->close();
|
|
||||||
|
|
||||||
return imageFile;
|
|
||||||
|
|
||||||
} else {
|
|
||||||
QTemporaryFile* imageTempFile = new QTemporaryFile(QDir::tempPath() + "/XXXXXX-" + filename);
|
|
||||||
|
|
||||||
if (!imageTempFile->open()) {
|
|
||||||
qDebug() << "Unable to open QTemporaryFile for temp snapshot. Will not save.";
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
shot.save(imageTempFile, 0, IMAGE_QUALITY);
|
|
||||||
imageTempFile->close();
|
|
||||||
|
|
||||||
return imageTempFile;
|
|
||||||
}
|
}
|
||||||
|
// Either we were asked for a tempororary, or the user didn't set a directory.
|
||||||
|
QTemporaryFile* imageTempFile = new QTemporaryFile(QDir::tempPath() + "/XXXXXX-" + filename);
|
||||||
|
|
||||||
|
if (!imageTempFile->open()) {
|
||||||
|
qDebug() << "Unable to open QTemporaryFile for temp snapshot. Will not save.";
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
imageTempFile->setAutoRemove(isTemporary);
|
||||||
|
|
||||||
|
shot.save(imageTempFile, 0, IMAGE_QUALITY);
|
||||||
|
imageTempFile->close();
|
||||||
|
|
||||||
|
return imageTempFile;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Snapshot::uploadSnapshot(const QString& filename) {
|
void Snapshot::uploadSnapshot(const QString& filename) {
|
||||||
|
|
|
@ -39,7 +39,6 @@ public:
|
||||||
static SnapshotMetaData* parseSnapshotData(QString snapshotPath);
|
static SnapshotMetaData* parseSnapshotData(QString snapshotPath);
|
||||||
|
|
||||||
static Setting::Handle<QString> snapshotsLocation;
|
static Setting::Handle<QString> snapshotsLocation;
|
||||||
static Setting::Handle<bool> hasSetSnapshotsLocation;
|
|
||||||
static void uploadSnapshot(const QString& filename);
|
static void uploadSnapshot(const QString& filename);
|
||||||
private:
|
private:
|
||||||
static QFile* savedFileForSnapshot(QImage & image, bool isTemporary);
|
static QFile* savedFileForSnapshot(QImage & image, bool isTemporary);
|
||||||
|
|
|
@ -616,6 +616,28 @@ QString OffscreenUi::fileSaveDialog(const QString& caption, const QString& dir,
|
||||||
return fileDialog(map);
|
return fileDialog(map);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString OffscreenUi::existingDirectoryDialog(const QString& caption, const QString& dir, const QString& filter, QString* selectedFilter, QFileDialog::Options options) {
|
||||||
|
if (QThread::currentThread() != thread()) {
|
||||||
|
QString result;
|
||||||
|
QMetaObject::invokeMethod(this, "existingDirectoryDialog", Qt::BlockingQueuedConnection,
|
||||||
|
Q_RETURN_ARG(QString, result),
|
||||||
|
Q_ARG(QString, caption),
|
||||||
|
Q_ARG(QString, dir),
|
||||||
|
Q_ARG(QString, filter),
|
||||||
|
Q_ARG(QString*, selectedFilter),
|
||||||
|
Q_ARG(QFileDialog::Options, options));
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
QVariantMap map;
|
||||||
|
map.insert("caption", caption);
|
||||||
|
map.insert("dir", QUrl::fromLocalFile(dir));
|
||||||
|
map.insert("filter", filter);
|
||||||
|
map.insert("options", static_cast<int>(options));
|
||||||
|
map.insert("selectDirectory", true);
|
||||||
|
return fileDialog(map);
|
||||||
|
}
|
||||||
|
|
||||||
QString OffscreenUi::getOpenFileName(void* ignored, const QString &caption, const QString &dir, const QString &filter, QString *selectedFilter, QFileDialog::Options options) {
|
QString OffscreenUi::getOpenFileName(void* ignored, const QString &caption, const QString &dir, const QString &filter, QString *selectedFilter, QFileDialog::Options options) {
|
||||||
return DependencyManager::get<OffscreenUi>()->fileOpenDialog(caption, dir, filter, selectedFilter, options);
|
return DependencyManager::get<OffscreenUi>()->fileOpenDialog(caption, dir, filter, selectedFilter, options);
|
||||||
}
|
}
|
||||||
|
@ -624,6 +646,10 @@ QString OffscreenUi::getSaveFileName(void* ignored, const QString &caption, cons
|
||||||
return DependencyManager::get<OffscreenUi>()->fileSaveDialog(caption, dir, filter, selectedFilter, options);
|
return DependencyManager::get<OffscreenUi>()->fileSaveDialog(caption, dir, filter, selectedFilter, options);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString OffscreenUi::getExistingDirectory(void* ignored, const QString &caption, const QString &dir, const QString &filter, QString *selectedFilter, QFileDialog::Options options) {
|
||||||
|
return DependencyManager::get<OffscreenUi>()->existingDirectoryDialog(caption, dir, filter, selectedFilter, options);
|
||||||
|
}
|
||||||
|
|
||||||
bool OffscreenUi::eventFilter(QObject* originalDestination, QEvent* event) {
|
bool OffscreenUi::eventFilter(QObject* originalDestination, QEvent* event) {
|
||||||
if (!filterEnabled(originalDestination, event)) {
|
if (!filterEnabled(originalDestination, event)) {
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -115,11 +115,14 @@ public:
|
||||||
|
|
||||||
Q_INVOKABLE QString fileOpenDialog(const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = 0, QFileDialog::Options options = 0);
|
Q_INVOKABLE QString fileOpenDialog(const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = 0, QFileDialog::Options options = 0);
|
||||||
Q_INVOKABLE QString fileSaveDialog(const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = 0, QFileDialog::Options options = 0);
|
Q_INVOKABLE QString fileSaveDialog(const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = 0, QFileDialog::Options options = 0);
|
||||||
|
Q_INVOKABLE QString existingDirectoryDialog(const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = 0, QFileDialog::Options options = 0);
|
||||||
|
|
||||||
// Compatibility with QFileDialog::getOpenFileName
|
// Compatibility with QFileDialog::getOpenFileName
|
||||||
static QString getOpenFileName(void* ignored, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = 0, QFileDialog::Options options = 0);
|
static QString getOpenFileName(void* ignored, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = 0, QFileDialog::Options options = 0);
|
||||||
// Compatibility with QFileDialog::getSaveFileName
|
// Compatibility with QFileDialog::getSaveFileName
|
||||||
static QString getSaveFileName(void* ignored, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = 0, QFileDialog::Options options = 0);
|
static QString getSaveFileName(void* ignored, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = 0, QFileDialog::Options options = 0);
|
||||||
|
// Compatibility with QFileDialog::getExistingDirectory
|
||||||
|
static QString getExistingDirectory(void* ignored, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = 0, QFileDialog::Options options = 0);
|
||||||
|
|
||||||
Q_INVOKABLE QVariant inputDialog(const Icon icon, const QString& title, const QString& label = QString(), const QVariant& current = QVariant());
|
Q_INVOKABLE QVariant inputDialog(const Icon icon, const QString& title, const QString& label = QString(), const QVariant& current = QVariant());
|
||||||
Q_INVOKABLE QVariant customInputDialog(const Icon icon, const QString& title, const QVariantMap& config);
|
Q_INVOKABLE QVariant customInputDialog(const Icon icon, const QString& title, const QVariantMap& config);
|
||||||
|
|
Loading…
Reference in a new issue