Fix null albums

We're so back
This commit is contained in:
mitteneer 2025-02-18 16:27:24 -05:00
parent 4f051170e5
commit a2aa946b3b
3 changed files with 9 additions and 10 deletions

View file

@ -25,9 +25,9 @@ pub fn run(allocator: std.mem.Allocator, params: *jetzig.data.Value, env: jetzig
//std.log.debug("{s}", .{scrobble.track}); //std.log.debug("{s}", .{scrobble.track});
// Make hashes // Make hashes
const album_hash = std.hash.Fnv1a_64.hash(scrobble.album); const album_hash = @as(i32, @bitCast(std.hash.Fnv1a_32.hash(scrobble.album)));
const artist_hash = std.hash.Fnv1a_64.hash(scrobble.artist); const artist_hash = @as(i32, @bitCast(std.hash.Fnv1a_32.hash(scrobble.artist)));
const song_hash = std.hash.Fnv1a_64.hash(scrobble.track); const song_hash = @as(i32, @bitCast(std.hash.Fnv1a_32.hash(scrobble.track)));
// Make IDs // Make IDs
// Song: Song hash XOR artist hash XOR album hash // Song: Song hash XOR artist hash XOR album hash
@ -48,7 +48,7 @@ pub fn run(allocator: std.mem.Allocator, params: *jetzig.data.Value, env: jetzig
// then a descriptive string can be provided to // then a descriptive string can be provided to
// differentiate after the fact, or in a rule. // differentiate after the fact, or in a rule.
var album_id: u64 = 0; var album_id: i32 = 0;
const song_id = (song_hash ^ artist_hash ^ album_hash); const song_id = (song_hash ^ artist_hash ^ album_hash);
if (artist_hash == album_hash) { if (artist_hash == album_hash) {
album_id = album_hash; album_id = album_hash;

View file

@ -19,16 +19,15 @@ pub fn post(request: *jetzig.Request) !jetzig.View {
var root = try request.data(.object); var root = try request.data(.object);
if (try request.file("upload")) |file| { if (try request.file("upload")) |file| {
const content = try std.json.parseFromSlice(lastfm, request.allocator, file.content, .{}); //std.debug.print("{s}", .{file.content});
defer content.deinit(); const content = try std.json.parseFromSliceLeaky(lastfm, request.allocator, file.content, .{ .ignore_unknown_fields = true });
const history = content.value;
var scrobbles_view = try root.put("scrobbles", .array); var scrobbles_view = try root.put("scrobbles", .array);
var job = try request.job("process_scrobbles"); var job = try request.job("process_scrobbles");
var scrobbles_data = try job.params.put("scrobbles", .array); var scrobbles_data = try job.params.put("scrobbles", .array);
for (history.scrobbles) |scrobble| { for (content.scrobbles) |scrobble| {
var value = try scrobbles_data.append(.object); var value = try scrobbles_data.append(.object);
// This is so unnecessary, probably useful once I start doing Spotify integration though // This is so unnecessary, probably useful once I start doing Spotify integration though
inline for (std.meta.fields(Scrobble)) |f| { inline for (std.meta.fields(Scrobble)) |f| {

View file

@ -1,7 +1,7 @@
pub const LastFMScrobble = struct { pub const LastFMScrobble = struct {
track: []const u8, track: []const u8,
artist: []const u8, artist: []const u8,
album: ?[]const u8, album: ?[]const u8 = "",
date: i128, date: i128,
}; };
@ -13,7 +13,7 @@ pub const SafeLastFMScrobble = struct {
}; };
// From lastfmstats.com // From lastfmstats.com
pub const LastFM = struct { username: []u8, scrobbles: []LastFMScrobble }; pub const LastFM = struct { username: []const u8, scrobbles: []LastFMScrobble };
pub const SpotifyScrobble = struct { pub const SpotifyScrobble = struct {
ts: []u8, ts: []u8,