File checker can now check all types

This commit is contained in:
2026-05-21 00:01:52 +02:00
parent a5d2c2528b
commit df820d5015
2 changed files with 32 additions and 8 deletions
+31 -7
View File
@@ -1,20 +1,44 @@
const std = @import("std");
pub const Category = enum { image, document, music, video, code, other };
pub const Category = enum {
image,
document,
music,
video,
code,
other,
};
const CategoryEntry = struct {
category: Category,
extensions: []const []const u8,
};
const CategoryMap = [_]CategoryEntry{
.{ .category = .image, .extensions = &ImageTypes },
.{ .category = .document, .extensions = &DocumentTypes },
.{ .category = .music, .extensions = &MusicTypes },
.{ .category = .video, .extensions = &VideoTypes },
};
const ImageTypes = [_][]const u8{ ".png", ".jpg", ".jpeg", ".webp", ".gif" };
const DocumentTypes = [_][]const u8{ ".pdf", ".docx", ".odt" };
const MusicTypes = [_][]const u8{ ".mp3", ".ogg", ".flac", ".opus", ".aac", ".wav", ".alac", ".m4a" };
const VideoTypes = [_][]const u8{ ".mp4", ".mkv", ".mov", ".m4v" };
pub fn classify(name: []const u8) Category {
const extension = std.fs.path.extension(name);
for (DocumentTypes) |ext| {
const eicDocument = std.ascii.eqlIgnoreCase(extension, ext);
if (eicDocument) {
std.debug.print("document found! \n", .{});
return .document;
for (CategoryMap) |entry| {
for (entry.extensions) |ext| {
const eicDocument = std.ascii.eqlIgnoreCase(extension, ext);
if (eicDocument) {
std.debug.print("{s} found!\n", .{@tagName(entry.category)});
return entry.category;
}
}
}
std.debug.print("no document found! \n", .{});
std.debug.print("no compatible extensions found! \n", .{});
return .other;
}