Move more recent saved data to internal
This commit is contained in:
@@ -178,11 +178,12 @@ class Settings : ChangeNotifier
|
|||||||
LastSaved = lastSaved,
|
LastSaved = lastSaved,
|
||||||
BaseFolder = data.Key,
|
BaseFolder = data.Key,
|
||||||
};
|
};
|
||||||
|
// sync UUIDs
|
||||||
// if UUID exists in BaseFolder/(Constants.ReportSavedDataFileName), use that UUID instead.
|
// if UUID exists in BaseFolder/(Constants.ReportSavedDataFileName), use that UUID instead.
|
||||||
var existingReportDataPath = Path.Combine(reportInfo.BaseFolder, Constants.ReportSavedDataFileName);
|
var externalReportDataPath = Path.Combine(reportInfo.BaseFolder, Constants.ReportSavedDataFileName);
|
||||||
if (File.Exists(existingReportDataPath))
|
if (File.Exists(externalReportDataPath))
|
||||||
{
|
{
|
||||||
var originalReportData = JsonSerializer.Deserialize(File.ReadAllText(existingReportDataPath), jsonContext.PDFReport);
|
var originalReportData = JsonSerializer.Deserialize(File.ReadAllText(externalReportDataPath), jsonContext.PDFReport);
|
||||||
if (originalReportData != null)
|
if (originalReportData != null)
|
||||||
{
|
{
|
||||||
if (!string.IsNullOrWhiteSpace(originalReportData.UUID))
|
if (!string.IsNullOrWhiteSpace(originalReportData.UUID))
|
||||||
@@ -194,15 +195,77 @@ class Settings : ChangeNotifier
|
|||||||
{
|
{
|
||||||
// update UUID so they are in sync between internal and external folders
|
// update UUID so they are in sync between internal and external folders
|
||||||
originalReportData.UUID = reportInfo.UUID;
|
originalReportData.UUID = reportInfo.UUID;
|
||||||
using var memoryStream = new MemoryStream();
|
Utilities.SaveReportDataSync(originalReportData, externalReportDataPath, jsonContext.PDFReport);
|
||||||
JsonSerializer.Serialize(memoryStream, report, jsonContext.PDFReport);
|
|
||||||
memoryStream.Position = 0;
|
|
||||||
using var reader = new StreamReader(memoryStream);
|
|
||||||
var updatedJson = reader.ReadToEnd();
|
|
||||||
File.WriteAllText(existingReportDataPath, updatedJson);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// update report data itself and move to internal -- everything is moving to internal storage dir,
|
||||||
|
// so if there is external data, use whatever is the most recent.
|
||||||
|
// reportInfo.UUID now has the UUID we want to use.
|
||||||
|
var internalReportFolderPath = Path.Combine(internalPath, reportInfo.UUID);
|
||||||
|
var internalDataFilePath = Path.Combine(internalReportFolderPath, Constants.ReportSavedDataFileName);
|
||||||
|
if (!Path.Exists(internalReportFolderPath))
|
||||||
|
{
|
||||||
|
// internal path doesn't exist at all so never saved internally before.
|
||||||
|
// make the dir and copy data to internal dir.
|
||||||
|
Directory.CreateDirectory(internalReportFolderPath);
|
||||||
|
if (File.Exists(externalReportDataPath))
|
||||||
|
{
|
||||||
|
File.Copy(externalReportDataPath, Path.Combine(internalReportFolderPath, Constants.ReportSavedDataFileName));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// see which JSON file is newer (based on last saved time) and use that data.
|
||||||
|
if (!File.Exists(internalDataFilePath))
|
||||||
|
{
|
||||||
|
// internal file doesn't exist, copy in from external
|
||||||
|
if (File.Exists(externalReportDataPath))
|
||||||
|
{
|
||||||
|
File.Copy(externalReportDataPath, internalDataFilePath);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (File.Exists(internalDataFilePath) && File.Exists(externalReportDataPath))
|
||||||
|
{
|
||||||
|
// both files exist. load report data and compare dates.
|
||||||
|
var internalReportData = JsonSerializer.Deserialize(File.ReadAllText(internalDataFilePath), jsonContext.PDFReport);
|
||||||
|
var externalReportData = JsonSerializer.Deserialize(File.ReadAllText(externalReportDataPath), jsonContext.PDFReport);
|
||||||
|
if (internalReportData != null && externalReportData != null)
|
||||||
|
{
|
||||||
|
var isExternalNewer = (externalReportData.LastSaved ?? DateTime.MinValue)
|
||||||
|
> (internalReportData.LastSaved ?? DateTime.MinValue);
|
||||||
|
if (isExternalNewer) // else internal is newer so nothing to do
|
||||||
|
{
|
||||||
|
File.Move(internalDataFilePath, Path.Combine(internalReportFolderPath, "old_report_data.json"));
|
||||||
|
File.Copy(externalReportDataPath, internalDataFilePath, true);
|
||||||
|
reportInfo.Title = externalReportData.Title;
|
||||||
|
reportInfo.LastSaved = externalReportData.LastSaved;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (internalReportData == null && externalReportData != null)
|
||||||
|
{
|
||||||
|
// move data to internal dir
|
||||||
|
if (File.Exists(externalReportDataPath))
|
||||||
|
{
|
||||||
|
File.Copy(externalReportDataPath, internalDataFilePath, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
reportInfo.BaseFolder = internalReportFolderPath;
|
||||||
|
// make sure BaseFolder is set right just in case -- now always points to internal directory.
|
||||||
|
// (it's actually now redundant because all settings are internal...
|
||||||
|
// but for now we'll just let it stick around.)
|
||||||
|
if (File.Exists(internalDataFilePath))
|
||||||
|
{
|
||||||
|
var internalReportData = JsonSerializer.Deserialize(File.ReadAllText(internalDataFilePath), jsonContext.PDFReport);
|
||||||
|
if (internalReportData != null)
|
||||||
|
{
|
||||||
|
internalReportData.BaseFolder = internalReportFolderPath;
|
||||||
|
Utilities.SaveReportDataSync(internalReportData, internalDataFilePath, jsonContext.PDFReport);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// ok, finally done upgrading this report.
|
||||||
list.Add(reportInfo);
|
list.Add(reportInfo);
|
||||||
}
|
}
|
||||||
settings.AllReportInfo = list.OrderBy(x => x.Title).ToList();
|
settings.AllReportInfo = list.OrderBy(x => x.Title).ToList();
|
||||||
|
|||||||
Reference in New Issue
Block a user