Skip to content

Commit

Permalink
Autoimport functionality. closes #458
Browse files Browse the repository at this point in the history
Squashed commit of the following:

commit 1fab6df
Author: Taras Kushnir <[email protected]>
Date:   Wed Nov 29 08:09:52 2017 +0000

    Fixes for integration tests

commit 24c4bad
Author: Taras Kushnir <[email protected]>
Date:   Wed Nov 29 08:46:23 2017 +0200

    Fix for integration tests

commit 7b31fe2
Author: Taras Kushnir <[email protected]>
Date:   Wed Nov 29 00:00:37 2017 +0200

    Cosmetic fix

commit fa42a7a
Author: Taras Kushnir <[email protected]>
Date:   Tue Nov 28 23:39:48 2017 +0200

    Introduced read-only images

commit 6649662
Author: Taras Kushnir <[email protected]>
Date:   Tue Nov 28 23:37:05 2017 +0200

    Cosmetic tweaks

commit e3546b3
Author: Taras Kushnir <[email protected]>
Date:   Tue Nov 28 23:17:17 2017 +0200

    Autoimport test

commit 402795f
Author: Taras Kushnir <[email protected]>
Date:   Tue Nov 28 22:56:52 2017 +0200

    Local override for remote configs

commit 11658e1
Author: Taras Kushnir <[email protected]>
Date:   Tue Nov 28 22:24:42 2017 +0200

    Cosmetic improvements for autoimport

commit 92cb77b
Author: Taras Kushnir <[email protected]>
Date:   Tue Nov 28 21:24:02 2017 +0200

    Fixes for tests

commit af68811
Author: Taras Kushnir <[email protected]>
Date:   Tue Nov 28 20:59:49 2017 +0200

    Autoimport improvements

commit 7d55cb8
Author: Taras Kushnir <[email protected]>
Date:   Tue Nov 28 16:18:27 2017 +0000

    [wip] autoimport refactoring

commit f58a40f
Author: Taras Kushnir <[email protected]>
Date:   Tue Nov 28 14:50:40 2017 +0000

    Preliminary support for autoimport
  • Loading branch information
Taras Kushnir authored and Taras Kushnir committed Nov 29, 2017
1 parent 608290a commit 929fbf2
Show file tree
Hide file tree
Showing 32 changed files with 563 additions and 118 deletions.
38 changes: 32 additions & 6 deletions src/xpiks-qt/Commands/addartworkscommand.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@
#include "../Helpers/artworkshelpers.h"
#include "../Models/imageartwork.h"
#include "../MetadataIO/artworkssnapshot.h"
#include "../Models/settingsmodel.h"
#include "../Models/switchermodel.h"
#include "../MetadataIO/metadataiocoordinator.h"

void accountVectors(Models::ArtworksRepository *artworksRepository, const MetadataIO::WeakArtworksSnapshot &artworks) {
LOG_DEBUG << "#";
Expand Down Expand Up @@ -106,21 +109,26 @@ std::shared_ptr<Commands::ICommandResult> Commands::AddArtworksCommand::execute(
}
}

int importID = 0;

if (newFilesCount > 0) {
afterAddedHandler(commandManager, artworksToImport, filesToWatch, initialCount, newFilesCount);
importID = afterAddedHandler(commandManager, artworksToImport, filesToWatch, initialCount, newFilesCount);
}

artItemsModel->raiseArtworksAdded(newFilesCount, attachedCount);
artItemsModel->updateItems(modifiedIndices, QVector<int>() << Models::ArtItemsModel::HasVectorAttachedRole);

std::shared_ptr<AddArtworksCommandResult> result(new AddArtworksCommandResult(newFilesCount));
std::shared_ptr<AddArtworksCommandResult> result(new AddArtworksCommandResult(
newFilesCount,
attachedCount,
importID,
getAutoImportFlag()));
return result;
}

void Commands::AddArtworksCommand::afterAddedHandler(CommandManager *commandManager, const MetadataIO::ArtworksSnapshot &artworksToImport, QStringList filesToWatch, int initialCount, int newFilesCount) const {
int Commands::AddArtworksCommand::afterAddedHandler(CommandManager *commandManager, const MetadataIO::ArtworksSnapshot &artworksToImport, QStringList filesToWatch, int initialCount, int newFilesCount) const {
Models::ArtworksRepository *artworksRepository = commandManager->getArtworksRepository();

commandManager->readMetadata(artworksToImport);
int importID = commandManager->readMetadata(artworksToImport);
accountVectors(artworksRepository, artworksToImport.getWeakSnapshot());
artworksRepository->refresh();

Expand All @@ -133,9 +141,11 @@ void Commands::AddArtworksCommand::afterAddedHandler(CommandManager *commandMana
commandManager->generatePreviews(artworksToImport);
commandManager->addToRecentFiles(filesToWatch);

if (!getIsSessionRestore()) {
if (!getIsSessionRestoreFlag()) {
commandManager->saveSessionInBackground();
}

return importID;
}

void Commands::AddArtworksCommand::decomposeVectors(QHash<QString, QHash<QString, QString> > &vectors) const {
Expand All @@ -154,3 +164,19 @@ void Commands::AddArtworksCommand::decomposeVectors(QHash<QString, QHash<QString
vectors[absolutePath].insert(fi.baseName().toLower(), path);
}
}

void Commands::AddArtworksCommandResult::afterExecCallback(const Commands::ICommandManager *commandManagerInterface) const {
CommandManager *commandManager = (CommandManager*)commandManagerInterface;

#ifndef CORE_TESTS
if (m_AutoImport) {
LOG_DEBUG << "Autoimport is ON. Proceeding...";
MetadataIO::MetadataIOCoordinator *ioCoordinator = commandManager->getMetadataIOCoordinator();
ioCoordinator->continueReading(false);
QCoreApplication::processEvents(QEventLoop::ExcludeUserInputEvents);
}
#endif

Models::ArtItemsModel *artItemsModel = commandManager->getArtItemsModel();
artItemsModel->raiseArtworksAdded(m_ImportID, m_NewFilesAdded, m_AttachedVectorsCount);
}
32 changes: 22 additions & 10 deletions src/xpiks-qt/Commands/addartworkscommand.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,32 +29,34 @@ namespace Commands {
enum AddArtworksFlags {
FlagAutoFindVectors = 1 << 0,
FlagIsFullDirectory = 1 << 1,
FlagIsSessionRestore = 1 << 2
FlagIsSessionRestore = 1 << 2,
FlagAutoImport = 1 << 3
};

private:
inline bool getAutoFindVectorsFlag() const { return Common::HasFlag(m_Flags, FlagAutoFindVectors); }
inline bool getIsFullDirectoryFlag() const { return Common::HasFlag(m_Flags, FlagIsFullDirectory); }
inline bool getIsSessionRestore() const { return Common::HasFlag(m_Flags, FlagIsSessionRestore); }
inline bool getIsSessionRestoreFlag() const { return Common::HasFlag(m_Flags, FlagIsSessionRestore); }
inline bool getAutoImportFlag() const { return Common::HasFlag(m_Flags, FlagAutoImport); }

public:
AddArtworksCommand(const QStringList &pathes, const QStringList &vectorPathes, Common::flag_t flags) :
CommandBase(CommandType::AddArtworks),
m_FilePathes(pathes),
m_VectorsPathes(vectorPathes),
m_Flags(flags)
{}
{ }

virtual ~AddArtworksCommand();

public:
virtual std::shared_ptr<ICommandResult> execute(const ICommandManager *commandManagerInterface) const override;

private:
void afterAddedHandler(CommandManager *commandManager,
const MetadataIO::ArtworksSnapshot &artworksToImport,
QStringList filesToWatch,
int initialCount, int newFilesCount) const;
int afterAddedHandler(CommandManager *commandManager,
const MetadataIO::ArtworksSnapshot &artworksToImport,
QStringList filesToWatch,
int initialCount, int newFilesCount) const;
void decomposeVectors(QHash<QString, QHash<QString, QString> > &vectors) const;

public:
Expand All @@ -65,11 +67,21 @@ namespace Commands {

class AddArtworksCommandResult : public CommandResult {
public:
AddArtworksCommandResult(int count):
m_NewFilesAdded(count)
{}
AddArtworksCommandResult(int addedFilesCount, int attachedVectorsCount, int importID, bool autoImport):
m_NewFilesAdded(addedFilesCount),
m_AttachedVectorsCount(attachedVectorsCount),
m_ImportID(importID),
m_AutoImport(autoImport)
{ }

public:
virtual void afterExecCallback(const ICommandManager *commandManagerInterface) const override;

public:
int m_NewFilesAdded;
int m_AttachedVectorsCount;
int m_ImportID;
bool m_AutoImport;
};
}

Expand Down
25 changes: 21 additions & 4 deletions src/xpiks-qt/Commands/commandmanager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -702,8 +702,10 @@ void Commands::CommandManager::disconnectArtworkSignals(Models::ArtworkMetadata
}
}

void Commands::CommandManager::readMetadata(const MetadataIO::ArtworksSnapshot &snapshot) const {
int Commands::CommandManager::readMetadata(const MetadataIO::ArtworksSnapshot &snapshot) const {
LOG_DEBUG << "#";
int importID = 0;

#ifndef CORE_TESTS
quint32 batchID = 0;

Expand All @@ -712,22 +714,28 @@ void Commands::CommandManager::readMetadata(const MetadataIO::ArtworksSnapshot &
}

if (m_MetadataIOCoordinator != nullptr) {
m_MetadataIOCoordinator->readMetadataExifTool(snapshot, batchID);
importID = m_MetadataIOCoordinator->readMetadataExifTool(snapshot, batchID);
}
#else
Q_UNUSED(snapshot);
#endif

return importID;
}

void Commands::CommandManager::reimportMetadata(const MetadataIO::ArtworksSnapshot &snapshot) const {
int Commands::CommandManager::reimportMetadata(const MetadataIO::ArtworksSnapshot &snapshot) const {
LOG_DEBUG << "#";
int importID = 0;

#ifndef CORE_TESTS
if (m_MetadataIOCoordinator != nullptr) {
m_MetadataIOCoordinator->readMetadataExifTool(snapshot, INVALID_BATCH_ID);
importID = m_MetadataIOCoordinator->readMetadataExifTool(snapshot, INVALID_BATCH_ID);
}
#else
Q_UNUSED(snapshot);
#endif

return importID;
}

void Commands::CommandManager::writeMetadata(const MetadataIO::WeakArtworksSnapshot &artworks, bool useBackups) const {
Expand Down Expand Up @@ -1152,6 +1160,14 @@ int Commands::CommandManager::restoreFiles(const QStringList &filenames, const Q
Common::flag_t flags = 0;
Common::SetFlag(flags, Commands::AddArtworksCommand::FlagIsSessionRestore);

#if !defined(CORE_TESTS) && !defined(INTEGRATION_TESTS)
if ((m_SettingsModel != nullptr) && (m_SwitcherModel != nullptr)) {
if (m_SettingsModel->getUseAutoImport() && m_SwitcherModel->getUseAutoImport()) {
Common::SetFlag(flags, Commands::AddArtworksCommand::FlagAutoImport);
}
}
#endif

std::shared_ptr<Commands::AddArtworksCommand> addArtworksCommand(new Commands::AddArtworksCommand(filenames, vectors, flags));
std::shared_ptr<Commands::ICommandResult> result = processCommand(addArtworksCommand);
std::shared_ptr<Commands::AddArtworksCommandResult> addArtworksResult =
Expand Down Expand Up @@ -1300,6 +1316,7 @@ void Commands::CommandManager::cleanup() {
m_SettingsModel->resetToDefault();
m_SpellCheckerService->clearUserDictionary();
m_SessionManager->clearSession();
m_MetadataIOCoordinator->clear();
}
#endif

Expand Down
4 changes: 2 additions & 2 deletions src/xpiks-qt/Commands/commandmanager.h
Original file line number Diff line number Diff line change
Expand Up @@ -216,8 +216,8 @@ namespace Commands {
void setArtworksForCsvExport(MetadataIO::ArtworksSnapshot::Container &rawSnapshot) const;
virtual void connectArtworkSignals(Models::ArtworkMetadata *artwork) const;
void disconnectArtworkSignals(Models::ArtworkMetadata *metadata) const;
void readMetadata(const MetadataIO::ArtworksSnapshot &snapshot) const;
void reimportMetadata(const MetadataIO::ArtworksSnapshot &snapshot) const;
int readMetadata(const MetadataIO::ArtworksSnapshot &snapshot) const;
int reimportMetadata(const MetadataIO::ArtworksSnapshot &snapshot) const;
void writeMetadata(const MetadataIO::WeakArtworksSnapshot &artworks, bool useBackups) const;
void addToLibrary(const MetadataIO::WeakArtworksSnapshot &artworks) const;
void updateArtworksAtIndices(const QVector<int> &indices) const;
Expand Down
4 changes: 4 additions & 0 deletions src/xpiks-qt/Connectivity/switcherconfig.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ namespace Connectivity {
#define PROGRESSIVE_SUGGESTION_PREVIEWS QLatin1String("progressiveSuggestionPreviews")
#define DIRECT_METADATA_EXPORT QLatin1String("directExport")
#define GOOD_QUALITY_VIDEO_PREVIEWS QLatin1String("qualityVideoPreviews")
#define METADATA_AUTO_IMPORT QLatin1String("autoImport")

QDebug operator << (QDebug d, const SwitcherConfig::SwitchValue &value) {
d << "{" << value.m_IsOn << "*" << value.m_Threshold << "}";
Expand Down Expand Up @@ -223,12 +224,14 @@ namespace Connectivity {
SwitchValue progressiveSuggestionPreviews;
SwitchValue directExport;
SwitchValue qualityVideoPreviews;
SwitchValue autoImport;

initSwitchValue(object, DONATE_CAMPAIGN_1_KEY, donateCampaign1Active);
initSwitchValue(object, DONATE_CAMPAIGN_1_STAGE_2, donateCampaign1Stage2);
initSwitchValue(object, PROGRESSIVE_SUGGESTION_PREVIEWS, progressiveSuggestionPreviews);
initSwitchValue(object, DIRECT_METADATA_EXPORT, directExport);
initSwitchValue(object, GOOD_QUALITY_VIDEO_PREVIEWS, qualityVideoPreviews);
initSwitchValue(object, METADATA_AUTO_IMPORT, autoImport);

// overwrite these values
{
Expand All @@ -241,6 +244,7 @@ namespace Connectivity {
m_SwitchesHash[ProgressiveSuggestionPreviews] = progressiveSuggestionPreviews;
m_SwitchesHash[DirectMetadataExport] = directExport;
m_SwitchesHash[GoodQualityVideoPreviews] = qualityVideoPreviews;
m_SwitchesHash[MetadataAutoImport] = autoImport;

LOG_INTEGR_TESTS_OR_DEBUG << m_SwitchesHash;
}
Expand Down
3 changes: 2 additions & 1 deletion src/xpiks-qt/Connectivity/switcherconfig.h
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,8 @@ namespace Connectivity {
DonateCampaign1Stage2,
ProgressiveSuggestionPreviews,
DirectMetadataExport,
GoodQualityVideoPreviews
GoodQualityVideoPreviews,
MetadataAutoImport
};

private:
Expand Down
56 changes: 26 additions & 30 deletions src/xpiks-qt/Dialogs/ImportMetadata.qml
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,14 @@ Item {
id: metadataImportComponent
anchors.fill: parent

property bool isInProgress: false
property bool autoImport: false
property int importID: 0
property bool backupsEnabled: true

signal dialogDestruction();
Component.onDestruction: dialogDestruction();

Keys.onEscapePressed: {
if (!metadataImportComponent.isInProgress) {
if (!metadataIOCoordinator.isInProgress) {
closePopup()
}

Expand All @@ -39,18 +41,30 @@ Item {
metadataImportComponent.destroy()
}

Connections {
target: metadataIOCoordinator
onMetadataReadingFinished: {
console.log("UI::ImportMetadata # Import finished handler")

warningsModel.update()

if (metadataIOCoordinator.hasErrors) {
errorsNotification.open()
} else {
closePopup()
}
}
}

Component.onCompleted: {
focus = true

if (autoImport) {
console.log("Auto import")
continueImport()
if (metadataIOCoordinator.hasImportFinished(metadataImportComponent.importID)) {
console.debug("UI::ImportMetadata # Import seems to be finished")
closePopup()
}
}

signal dialogDestruction();
Component.onDestruction: dialogDestruction();

MessageDialog {
id: errorsNotification
title: i18.n + qsTr("Warning")
Expand All @@ -77,7 +91,6 @@ Item {

function continueImport() {
importButton.text = i18.n + qsTr("Importing...")
metadataImportComponent.isInProgress = true

spinner.height = spinner.width
dialogWindow.height += spinner.height + column.spacing
Expand Down Expand Up @@ -199,7 +212,7 @@ Item {
StyledCheckbox {
id: ignoreAutosavesCheckbox
text: i18.n + qsTr("Ignore autosaves")
enabled: settingsModel.saveBackups && !metadataImportComponent.isInProgress && metadataImportComponent.backupsEnabled
enabled: settingsModel.saveBackups && !metadataIOCoordinator.isInProgress && metadataImportComponent.backupsEnabled
checked: !metadataImportComponent.backupsEnabled
}

Expand All @@ -213,7 +226,7 @@ Item {
isDefault: true
width: 130
text: i18.n + qsTr("Start Import")
enabled: !metadataImportComponent.isInProgress
enabled: !metadataIOCoordinator.isInProgress
onClicked: {
console.debug("Start Import pressed")
if (metadataIOCoordinator.exiftoolNotFound) {
Expand All @@ -222,23 +235,6 @@ Item {
continueImport()
}
}

Connections {
target: metadataIOCoordinator
onMetadataReadingFinished: {
console.log("UI::ImportMetadata # Import finished handler")

metadataImportComponent.isInProgress = false
warningsModel.update()

if (metadataIOCoordinator.hasErrors) {
errorsNotification.open()
} else {
importButton.text = i18.n + qsTr("Start Import")
closePopup()
}
}
}
}

Item {
Expand All @@ -248,7 +244,7 @@ Item {
StyledButton {
text: i18.n + qsTr("Close")
width: 100
enabled: !metadataImportComponent.isInProgress
enabled: !metadataIOCoordinator.isInProgress
onClicked: {
console.debug("Close without Import pressed")
metadataIOCoordinator.continueWithoutReading()
Expand Down
Loading

0 comments on commit 929fbf2

Please sign in to comment.