Sort on first run, check file extensions on scan

This commit is contained in:
2026-02-16 19:29:45 +09:00
parent a59a649c03
commit ea9252209c
+45 -13
View File
@@ -108,10 +108,12 @@ class MainViewModel : BaseViewModel, IFontResolver
if (folders.Count == 1) if (folders.Count == 1)
{ {
var folder = folders[0]; var folder = folders[0];
LogInfo("Loading items in folder: " + folder.Path.LocalPath); LogInfo("Clearing existing list and loading items in folder: " + folder.Path.LocalPath);
ReportFiles.Clear();
ScanFolder(folder.Path.LocalPath); ScanFolder(folder.Path.LocalPath);
_settings.LastUsedPath = folder.Path.LocalPath; _settings.LastUsedPath = folder.Path.LocalPath;
await _settings.SaveSettingsAsync(); await _settings.SaveSettingsAsync();
ResortPDFItemsByDate();
} }
} }
} }
@@ -144,11 +146,11 @@ class MainViewModel : BaseViewModel, IFontResolver
{ {
// Scan folder for files and display in DataGrid // Scan folder for files and display in DataGrid
var filePaths = Directory.GetFiles(_workingFolder); var filePaths = Directory.GetFiles(_workingFolder);
filePaths.Sort();
foreach (var filePath in filePaths) foreach (var filePath in filePaths)
{ {
AddFileBasedOnPath(filePath); AddFileBasedOnPath(filePath);
} }
ResortPDFItemsByDate();
} }
} }
} }
@@ -177,6 +179,17 @@ class MainViewModel : BaseViewModel, IFontResolver
} }
} }
private string[] GetAllowedFileExtensionPatterns()
{
return [ "*.png", "*.jpg", "*.jpeg", "*.gif", "*.bmp", "*.webp", "*.pdf", "*.heic", ];
}
private string[] GetAllowedFileExtensionPatternsWithoutStar()
{
var list = GetAllowedFileExtensionPatterns();
return list.Select(x => x.Replace("*.", "")).ToArray();
}
public async void AddItem() public async void AddItem()
{ {
var topLevel = TopLevelGrabber?.GetTopLevel(); var topLevel = TopLevelGrabber?.GetTopLevel();
@@ -189,18 +202,18 @@ class MainViewModel : BaseViewModel, IFontResolver
FileTypeFilter = [ FileTypeFilter = [
new FilePickerFileType("All Types") new FilePickerFileType("All Types")
{ {
Patterns = [ "*.png", "*.jpg", "*.jpeg", "*.gif", "*.bmp", "*.webp", "*.pdf", "*.heic", ], Patterns = GetAllowedFileExtensionPatterns(),
AppleUniformTypeIdentifiers = [ "public.image", "com.adobe.pdf", "public.heic" ], AppleUniformTypeIdentifiers = [ "public.image", "com.adobe.pdf", "public.heic" ],
MimeTypes = [ "image/*", "application/pdf", "image/heic" ] MimeTypes = [ "image/*", "application/pdf", "image/heic" ]
}, },
FilePickerFileTypes.ImageAll, FilePickerFileTypes.ImageAll,
FilePickerFileTypes.Pdf,
new FilePickerFileType("HEIC Images") new FilePickerFileType("HEIC Images")
{ {
Patterns = [ "*.heic" ], Patterns = [ "*.heic" ],
AppleUniformTypeIdentifiers = [ "public.heic" ], AppleUniformTypeIdentifiers = [ "public.heic" ],
MimeTypes = [ "image/heic" ] MimeTypes = [ "image/heic" ]
} },
FilePickerFileTypes.Pdf,
] ]
}); });
if (files.Count > 0) if (files.Count > 0)
@@ -218,19 +231,38 @@ class MainViewModel : BaseViewModel, IFontResolver
{ {
if (!string.IsNullOrWhiteSpace(filePath) && File.Exists(filePath) && !filePath.EndsWith(".DS_Store")) if (!string.IsNullOrWhiteSpace(filePath) && File.Exists(filePath) && !filePath.EndsWith(".DS_Store"))
{ {
var date = Utilities.CheckValidDateInString(filePath); // make sure extensions are OK
ReportFiles.Add(new ReportFile() var fileExtensions = GetAllowedFileExtensionPatternsWithoutStar();
var didMatch = false;
foreach (var fileExtension in fileExtensions)
{ {
Title = Path.GetFileName(filePath), if (filePath.EndsWith("." + fileExtension))
ReceiptDateTime = date.HasValue ? date.Value.ToDateTime(TimeOnly.MinValue) : File.GetCreationTime(filePath), {
Notes = "", didMatch = true;
FilePath = filePath, break;
}); }
}
if (!didMatch)
{
LogInfo("File {0} did not match allowed file extension types, so it was not added.", filePath);
}
else
{
var date = Utilities.CheckValidDateInString(filePath);
ReportFiles.Add(new ReportFile()
{
Title = Path.GetFileName(filePath),
ReceiptDateTime = date.HasValue ? date.Value.ToDateTime(TimeOnly.MinValue) : File.GetCreationTime(filePath),
Notes = "",
FilePath = filePath,
});
}
} }
} }
public void ResortPDFItemsByDate() public void ResortPDFItemsByDate()
{ {
LogInfo("Sorting report files list...");
ReportFiles = new ObservableCollection<ReportFile>(ReportFiles.OrderBy(x => x.ReceiptDateTime)); ReportFiles = new ObservableCollection<ReportFile>(ReportFiles.OrderBy(x => x.ReceiptDateTime));
} }
@@ -354,7 +386,7 @@ class MainViewModel : BaseViewModel, IFontResolver
// TODO: resize (non-HEIC) images for smaller size...? // TODO: resize (non-HEIC) images for smaller size...?
IsCreatingPDF = true; IsCreatingPDF = true;
var pdfDoc = new Document(); var pdfDoc = new Document();
var outputFileName = "MyReceipts.pdf"; var outputFileName = ReportTitle + ".pdf";
var folderName = new DirectoryInfo(folderPath).Name; var folderName = new DirectoryInfo(folderPath).Name;
const int imageWidth = 425; const int imageWidth = 425;
if (folderName.Contains('-')) if (folderName.Contains('-'))