Skip to content

Commit

Permalink
https://github.com/StephaneCouturier/Katalog/issues/496
Browse files Browse the repository at this point in the history
  • Loading branch information
StephaneCouturier committed Apr 14, 2024
1 parent d2af368 commit 2afd391
Show file tree
Hide file tree
Showing 13 changed files with 427 additions and 208 deletions.
59 changes: 53 additions & 6 deletions src/collection.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,23 @@
#include "collection.h"
#include "device.h"

void Collection::updateCollectionVersion()
{
QSqlQuery queryUpdateVersion;
QString queryUpdateVersionSQL = QLatin1String(R"(
UPDATE parameter
SET parameter_value1 = :parameter_value1
WHERE parameter_type =:parameter_type
AND parameter_name =:parameter_name
)");
queryUpdateVersion.prepare(queryUpdateVersionSQL);
queryUpdateVersion.bindValue(":parameter_name", "version");
queryUpdateVersion.bindValue(":parameter_type", "collection");
queryUpdateVersion.bindValue(":parameter_value1", version);
queryUpdateVersion.exec();
qDebug()<<"DEBUG: queryUpdateVersion: "<<queryUpdateVersion.lastError();
}

void Collection::generateCollectionFilesPaths()
{
searchHistoryFilePath = folder + "/" + "search_history.csv";
Expand Down Expand Up @@ -89,10 +106,9 @@ void Collection::generateCollectionFiles()
)");
insertQuery.prepare(insertSQL);
insertQuery.bindValue(":parameter_name", "version");
insertQuery.bindValue(":parameter_type", "application");
insertQuery.bindValue(":parameter_value1", appVersion);
insertQuery.bindValue(":parameter_type", "collection");
insertQuery.bindValue(":parameter_value1", version);
insertQuery.exec();
qDebug() << "DEBUG: insertQuery:" << insertQuery.lastError();

//Save
saveParametersToFile();
Expand Down Expand Up @@ -592,28 +608,42 @@ void Collection::loadParameters()
QSqlQuery insertQuery;
QString insertSQL = QLatin1String(R"(
INSERT INTO parameter (
parameter_name,
parameter_type,
parameter_value1,
parameter_value2)
VALUES(
:parameter_name,
:parameter_type,
:parameter_value1,
:parameter_value2)
)");
insertQuery.prepare(insertSQL);

//Set temporary values
QString line;

//Skip headers line
textStream.readLine();

//Load file to database
while (!textStream.atEnd())
{
line = textStream.readLine();
//qDebug() << "DEBUG: line:" << line;

//Split the string with tabulation into a list
QStringList fieldList = line.split('\t');

if (line.isNull())
break;
else
{
//Append data to the database
insertQuery.bindValue(":parameter_type", line);
insertQuery.bindValue(":parameter_value2", line);
insertQuery.bindValue(":parameter_name", fieldList[0]);
insertQuery.bindValue(":parameter_type", fieldList[1]);
insertQuery.bindValue(":parameter_value1", fieldList[2]);
insertQuery.bindValue(":parameter_value2", fieldList[3]);
insertQuery.exec();
}
}
Expand All @@ -622,6 +652,23 @@ void Collection::loadParameters()
qDebug() << "DEBUG: Could not open parameters.csv:" << parametersFile.errorString();
}
}

//Get collection version
QSqlQuery queryVersion;
QString queryVersionSQL = QLatin1String(R"(
SELECT parameter_value1
FROM parameter
WHERE parameter_type =:parameter_type
AND parameter_name =:parameter_name
)");
queryVersion.prepare(queryVersionSQL);
queryVersion.bindValue(":parameter_type", "collection");
queryVersion.bindValue(":parameter_name", "version");
queryVersion.exec();

while(queryVersion.next()){
version = queryVersion.value(0).toString();
}
}
//----------------------------------------------------------------------
void Collection::saveStorageTableToFile()
Expand Down Expand Up @@ -760,7 +807,7 @@ void Collection::saveParametersToFile()
query.prepare(querySQL);
query.exec();

if(parameterFile.open(QIODevice::WriteOnly | QIODevice::Truncate)) {
if(parameterFile.open(QFile::WriteOnly | QFile::Text)) {

//Iterate the records and generate lines
while (query.next()) {
Expand Down
1 change: 1 addition & 0 deletions src/collection.h
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ class Collection
QString version;
QString folder;
QString settingsFilePath;
void updateCollectionVersion();

//Database management
QString databaseMode;
Expand Down
4 changes: 2 additions & 2 deletions src/mainwindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi
//Set current version, release date, and development mode
currentVersion = "2.0";
collection->appVersion = currentVersion;
releaseDate = "2024-04-13";
releaseDate = "2024-04-14";
developmentMode = false;

//Prepare paths, user setting file, check version
Expand Down Expand Up @@ -322,7 +322,7 @@ msgBox.exec();
)");
query.prepare(querySQL);
query.exec();
qDebug()<<query.lastError();
qDebug()<<"DEBUG: query: "<<query.lastError();
while(query.next()){
qDebug()<<query.value(0).toString()<<query.value(1).toString();
}
Expand Down
2 changes: 1 addition & 1 deletion src/mainwindow.h
Original file line number Diff line number Diff line change
Expand Up @@ -295,6 +295,7 @@ class MainWindow : public QMainWindow
void loadVirtualStorageCatalogFileToTable();
void importVirtualAssignmentsToDevices();
void convertFoldersIdxFiles();
void importExcludeIntoParameter();

//TAB: Statistics
QStringList typeOfData;
Expand Down Expand Up @@ -473,7 +474,6 @@ class MainWindow : public QMainWindow
void on_Devices_treeView_DeviceList_clicked(const QModelIndex &index);
void on_Devices_treeView_DeviceList_customContextMenuRequested(const QPoint &pos);
void on_DevicesTreeViewDeviceListHeaderSortOrderChanged();
void on_Devices_pushButton_ImportV1_clicked();
void on_Devices_pushButton_TreeExpandCollapse_clicked();
void on_Devices_pushButton_EditList_clicked();
void on_Devices_pushButton_SelectPath_clicked();
Expand Down
72 changes: 64 additions & 8 deletions src/mainwindow_tab_device.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3146,12 +3146,7 @@ int MainWindow::countTreeLevels(const QMap<int, QList<int>>& deviceTree, int par
//--------------------------------------------------------------------------
//--- Migration 1.22 to 2.0
//--------------------------------------------------------------------------
//--- UI -----------------------------------------------
void MainWindow::on_Devices_pushButton_ImportV1_clicked()
{
migrateCollection();
}

//------ Global method -----------------------------------------------
void MainWindow::migrateCollection()
{
// Start animation while opening
Expand Down Expand Up @@ -3179,6 +3174,9 @@ void MainWindow::migrateCollection()
//Convert .folders.idx Files
convertFoldersIdxFiles();

//Convert exclude.csv file into parameter.csv
importExcludeIntoParameter();

//Close procedure
loadDevicesView();
loadDevicesTreeToModel("Filters");
Expand All @@ -3191,8 +3189,7 @@ void MainWindow::migrateCollection()
msgBox.setIcon(QMessageBox::Information);
msgBox.exec();
}
//--------------------------------------------------------------------------
//--- Methods --------------------------------------------------------------
//------ Method per object --------------------------------------------------------------
void MainWindow::importVirtualToDevices()
{
//Create Virtual device in Physical group from locations
Expand Down Expand Up @@ -4013,6 +4010,65 @@ void MainWindow::convertFoldersIdxFiles()
}
}

void MainWindow::importExcludeIntoParameter()
{//Import exclude.csv entries into parameter.csv

QString excludeFilePath;
excludeFilePath = collection->folder + "/exclude.csv";

QSqlQuery query;
QString querySQL;
querySQL = QLatin1String(R"(
INSERT INTO parameter (
parameter_name,
parameter_type,
parameter_value1,
parameter_value2 )
VALUES( :parameter_name,
:parameter_type,
:parameter_value1,
:parameter_value2 )
)");
query.prepare(querySQL);

//Define exclude file and prepare stream
QFile excludeFile(excludeFilePath);
QTextStream textStream(&excludeFile);

//Open file or return information
if(excludeFile.open(QIODevice::ReadOnly)) {

//Test file validity (application breaks between v0.13 and v0.14)
QString line = textStream.readLine();

//Load virtualStorage device lines to table
while (true)
{
QString line = textStream.readLine();
if (line.isNull())
break;
else{
QSqlQuery insertQuery;
insertQuery.prepare(querySQL);
insertQuery.bindValue(":parameter_name", "");
insertQuery.bindValue(":parameter_type", "exclude_directory");
insertQuery.bindValue(":parameter_value1", "All catalogs");
insertQuery.bindValue(":parameter_value2", line);
insertQuery.exec();
qDebug()<<"DEBUG: importExcludeIntoParameter query: "<<insertQuery.lastError();
}
}
excludeFile.close();
}
else
qDebug()<<"failed to open exclude file: "<<excludeFilePath;

//Update collection version and save
collection->version = currentVersion;
collection->updateCollectionVersion();
collection->saveParametersToFile();
}

//--------------------------------------------------------------------------
//--- DEV: metadata --------------------------------------------------------
//--------------------------------------------------------------------------
Expand Down
57 changes: 34 additions & 23 deletions src/mainwindow_tab_settings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -351,6 +351,14 @@
//SETTINGS / data methods --------------------------------------------------
void MainWindow::loadCollection()
{
//Check if new collection (new folder is empty)
QDir dir(collection->folder);
dir.setFilter(QDir::AllEntries | QDir::NoDotAndDotDot);
if(dir.entryList().isEmpty()){
collection->version = collection->appVersion;
collection->updateCollectionVersion();
}

//Generate collection files paths and statistics parameters
collection->generateCollectionFilesPaths();
collection->generateCollectionFiles();
Expand Down Expand Up @@ -425,38 +433,41 @@

//Verify Collection version and trigger migration
if(collection->databaseMode=="Memory"){
QFile statitsticsFile(collection->statisticsDeviceFilePath);
if (statitsticsFile.exists()){
collection->version = "2.0";
}
else{
qDebug()<< collection->version << collection->appVersion;
if ( collection->version < collection->appVersion ){

collection->version = "1.x";

QString releaseNotesAddress = "https://github.com/StephaneCouturier/Katalog/releases/tag/v" + currentVersion;
QString wikiAddress = "https://github.com/StephaneCouturier/Katalog/wiki/Major-release-2.0";

QMessageBox msgBox;
QString message;
message += "<br/>";
message += "<b>" + tr("Collection Upgrade Required") + "</b>";
message += "<br/><br/>";
message += tr("Katalog has detected that the selected collection was created with an earlier version.");
message += "<br/>";
message += tr("<br/>Current collection folder: ") + QString::fromUtf8("<br/><b>%1</b>").arg(collection->folder);
message += "<br/>";
message += tr("<br/>Current collection version: ") + QString::fromUtf8("<br/><b>%1</b>").arg(collection->version);
message += "<br/><br/><br/>";
message += tr("To utilize this collection with Katalog 2.0, it needs to be upgraded.");
message += "<br/><br/>";
message += tr("The upgrade process can be performed automatically, but it is strongly advised to <b>back up the collection folder/files before proceeding</b>.");
message += "<br/><br/>";
message += tr("What would you like to do?");
message += "<br/><br/>";

message += "<br/><br/><table><tr><td width=550>";
message += tr("This application of 'Katalog' is in version: ") + "<b>" + currentVersion + "</b>";
message += "<br/></td></tr><tr><td>";
message += tr("Current collection version: ") + QString::fromUtf8("<b>%1</b>").arg(collection->version);
message += "<br/></td></tr><tr><td>";
message += tr("Collection folder: ") + QString::fromUtf8("<br/><i>%1</i>").arg(collection->folder);
message += "<br/></td></tr><tr><td>";
message += tr("This upgrade process can be performed automatically.");
message += "<br/></td></tr><tr><td>";
message += tr("Find out about the main changes and the migration in this <a href='%1'>Major release 2.0</a>.").arg(wikiAddress);
message += "</td></tr><tr><td>";
message += tr("Find the usual list of new features in the <a href='%1'>Release Notes</a>.").arg(releaseNotesAddress);
message += "</td></tr><tr><td><br/>";
message += tr("<span><b style='color:red;'>Back up the collection folder/files before upgrading!</b>");
message += "</td></tr><tr><td>";
message += tr("What should be done now?");
message += "</td></tr></table><br/>";
msgBox.setWindowTitle("Katalog");
msgBox.setText(message);
msgBox.setIcon(QMessageBox::Warning);
msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel);
msgBox.setButtonText(QMessageBox::Yes, "Upgrade Now");
msgBox.setButtonText(QMessageBox::No, "Choose a Different Folder");
msgBox.setButtonText(QMessageBox::Cancel, "Exit Application");
msgBox.setButtonText(QMessageBox::Yes, tr("Upgrade Now"));
msgBox.setButtonText(QMessageBox::No, tr("Choose a Different Folder"));
msgBox.setButtonText(QMessageBox::Cancel, tr("Exit Application"));

int result = msgBox.exec();

Expand Down
Binary file modified src/translations/Katalog_cz_CZ.qm
Binary file not shown.
Loading

0 comments on commit 2afd391

Please sign in to comment.