Create buffer for signed hashes rather than using arraylist
Also fixes bug with artistalbums hash. i64 will only ever take up 20 characters
This commit is contained in:
parent
cd8c798bd4
commit
682eebc951
1 changed files with 13 additions and 9 deletions
|
|
@ -89,6 +89,8 @@ pub fn post(request: *jetzig.Request) !jetzig.View {
|
|||
var albumsongs = try job.params.put("albumsongs", .object);
|
||||
var albumsongsartists = try job.params.put("albumsongsartists", .object);
|
||||
|
||||
var hash_buffer = [_]u8{undefined} ** 20; // A minimum i64 needs 19 digits + 1 negative sign
|
||||
|
||||
appends: for (imported_scrobbles) |scrobble| {
|
||||
if (scrobble.date > latest_timestamp * std.time.ns_per_s or scrobble.date < earliest_timestamp * std.time.ns_per_s) {
|
||||
limited_tracks += 1;
|
||||
|
|
@ -124,18 +126,20 @@ pub fn post(request: *jetzig.Request) !jetzig.View {
|
|||
try album_hash_string.appendSlice(artist);
|
||||
const artist_hash = std.hash.Fnv1a_64.hash(artist);
|
||||
try stored_artist_hashes.append(artist_hash);
|
||||
const signed_hash_string = try std.fmt.allocPrint(request.allocator, "{}", .{@as(i64, @bitCast(artist_hash))});
|
||||
//const signed_hash_string = try std.fmt.allocPrint(request.allocator, "{}", .{@as(i64, @bitCast(artist_hash))});
|
||||
const signed_hash_string = try std.fmt.bufPrint(&hash_buffer, "{}", .{@as(i64, @bitCast(artist_hash))});
|
||||
if (artists.get(signed_hash_string) == null) try artists.put(signed_hash_string, artist);
|
||||
}
|
||||
|
||||
try album_hash_string.appendSlice(complete_scrobble.album);
|
||||
const album_hash = std.hash.Fnv1a_64.hash(album_hash_string.items);
|
||||
const signed_album_hash_string = try std.fmt.allocPrint(request.allocator, "{}", .{@as(i64, @bitCast(album_hash))});
|
||||
const signed_album_hash_string = try std.fmt.bufPrint(&hash_buffer, "{}", .{@as(i64, @bitCast(album_hash))});
|
||||
if (albums.get(signed_album_hash_string) == null) try albums.put(signed_album_hash_string, complete_scrobble.album);
|
||||
|
||||
for (stored_artist_hashes.items) |artist_hash| {
|
||||
const artistalbum_hash = pair(artist_hash, album_hash);
|
||||
const signed_artistalbums_hash_string = try std.fmt.allocPrint(request.allocator, "{}", .{@as(i64, @bitCast(artistalbum_hash))});
|
||||
//const signed_artistalbums_hash_string = try std.fmt.allocPrint(request.allocator, "{}", .{@as(i64, @bitCast(artistalbum_hash))});
|
||||
const signed_artistalbums_hash_string = try std.fmt.bufPrint(&hash_buffer, "{}", .{@as(i64, @bitCast(artistalbum_hash))});
|
||||
if (tracks.get(signed_artistalbums_hash_string) == null) {
|
||||
var artistalbum = try artistalbums.put(signed_artistalbums_hash_string, .object);
|
||||
try artistalbum.put("artist", @as(i64, @bitCast(artist_hash)));
|
||||
|
|
@ -147,28 +151,28 @@ pub fn post(request: *jetzig.Request) !jetzig.View {
|
|||
try track_hash_string.appendSlice(complete_scrobble.album);
|
||||
try track_hash_string.appendSlice(complete_scrobble.track);
|
||||
const track_hash = std.hash.Fnv1a_64.hash(track_hash_string.items);
|
||||
const signed_track_hash_string = try std.fmt.allocPrint(request.allocator, "{}", .{@as(i64, @bitCast(track_hash))});
|
||||
const signed_track_hash_string = try std.fmt.bufPrint(&hash_buffer, "{}", .{@as(i64, @bitCast(track_hash))});
|
||||
if (tracks.get(signed_track_hash_string) == null) try tracks.put(signed_track_hash_string, complete_scrobble.track);
|
||||
|
||||
const albumsong_hash = pair(album_hash, track_hash);
|
||||
const signed_albumsong_hash_string = try std.fmt.allocPrint(request.allocator, "{}", .{@as(i64, @bitCast(albumsong_hash))});
|
||||
const signed_albumsong_hash_string = try std.fmt.bufPrint(&hash_buffer, "{}", .{@as(i64, @bitCast(albumsong_hash))});
|
||||
if (albumsongs.get(signed_albumsong_hash_string)) |albumsong| {
|
||||
var albumsong_scrobbles = albumsong.get("scrobbles");
|
||||
try albumsong_scrobbles.?.append(complete_scrobble.date);
|
||||
try albumsong_scrobbles.?.append(@divFloor(complete_scrobble.date, std.time.ns_per_us)); // MICROSECONDS
|
||||
} else {
|
||||
var albumsong = try albumsongs.put(signed_albumsong_hash_string, .object);
|
||||
try albumsong.put("album", @as(i64, @bitCast(album_hash)));
|
||||
try albumsong.put("song", @as(i64, @bitCast(track_hash)));
|
||||
var albumsong_scrobbles = try albumsong.put("scrobbles", .array);
|
||||
try albumsong_scrobbles.append(complete_scrobble.date);
|
||||
try albumsong_scrobbles.append(@divFloor(complete_scrobble.date, std.time.ns_per_us)); // MICROSECONDS
|
||||
}
|
||||
|
||||
for (complete_scrobble.artists_track) |artist| {
|
||||
const artist_hash = std.hash.Fnv1a_64.hash(artist);
|
||||
const signed_artist_hash_string = try std.fmt.allocPrint(request.allocator, "{}", .{@as(i64, @bitCast(artist_hash))});
|
||||
const signed_artist_hash_string = try std.fmt.bufPrint(&hash_buffer, "{}", .{@as(i64, @bitCast(artist_hash))});
|
||||
if (artists.get(signed_artist_hash_string) == null) try artists.put(signed_artist_hash_string, artist);
|
||||
const albumsongsartist_hash = pair(albumsong_hash, artist_hash);
|
||||
const signed_albumsongsartist_hash_string = try std.fmt.allocPrint(request.allocator, "{}", .{albumsongsartist_hash});
|
||||
const signed_albumsongsartist_hash_string = try std.fmt.bufPrint(&hash_buffer, "{}", .{@as(i64, @bitCast(albumsongsartist_hash))});
|
||||
if (albumsongsartists.get(signed_albumsongsartist_hash_string) == null) {
|
||||
var albumsongartist = try albumsongsartists.put(signed_albumsongsartist_hash_string, .object);
|
||||
try albumsongartist.put("albumsong", @as(i64, @bitCast(albumsong_hash)));
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue