Fix memory leak
I'm not sure I'm happy with this yet, but it works, so who am I to judge
This commit is contained in:
parent
454505335c
commit
a8d485ffe1
1 changed files with 22 additions and 20 deletions
42
src/root.zig
42
src/root.zig
|
|
@ -8,43 +8,33 @@ const Client = std.http.Client;
|
||||||
|
|
||||||
pub const user_agent: []const u8 = "ZuletztMBClient/0.0.1 (swebbguy@gmail.com)";
|
pub const user_agent: []const u8 = "ZuletztMBClient/0.0.1 (swebbguy@gmail.com)";
|
||||||
|
|
||||||
pub fn mbSearch(allocator: std.mem.Allocator, track_name: []const u8, album_name: []const u8, artist_name: []const u8) !?QR.Result {
|
pub fn mbSearch(allocator: std.mem.Allocator, ar: *std.ArrayList(u8), track_name: []const u8, album_name: []const u8, artist_name: []const u8) !?[]const u8 {
|
||||||
var client = Client{ .allocator = allocator };
|
var client = Client{ .allocator = allocator };
|
||||||
defer client.deinit();
|
defer client.deinit();
|
||||||
|
|
||||||
const query: []const u8 = try std.fmt.allocPrint(allocator, "https://musicbrainz.org/ws/2/recording/?query=\"{s}\"%20AND%20artist:\"{s}\"%20AND%20release:\"{s}\"&fmt=json", .{ track_name, artist_name, album_name });
|
const query: []const u8 = try std.fmt.allocPrint(allocator, "https://musicbrainz.org/ws/2/recording/?query=\"{s}\"%20AND%20artist:\"{s}\"%20AND%20release:\"{s}\"&fmt=json", .{ track_name, artist_name, album_name });
|
||||||
defer allocator.free(query);
|
defer allocator.free(query);
|
||||||
|
|
||||||
var mb_result = std.ArrayList(u8).init(allocator);
|
const response: Client.FetchResult = try client.fetch(.{ .response_storage = .{ .dynamic = ar }, .location = .{ .url = query }, .method = .GET, .headers = .{ .user_agent = .{ .override = user_agent } } });
|
||||||
errdefer mb_result.deinit();
|
|
||||||
|
|
||||||
const response: Client.FetchResult = try client.fetch(.{ .response_storage = .{ .dynamic = &mb_result }, .location = .{ .url = query }, .method = .GET, .headers = .{ .user_agent = .{ .override = user_agent } } });
|
|
||||||
|
|
||||||
switch (@intFromEnum(response.status)) {
|
switch (@intFromEnum(response.status)) {
|
||||||
0...299 => std.log.debug("Success", .{}),
|
0...299 => std.log.debug("Success\n", .{}),
|
||||||
300...399 => {
|
300...399 => {
|
||||||
std.log.debug("Redirected", .{});
|
std.log.err("Redirected\n", .{});
|
||||||
return null;
|
return null;
|
||||||
},
|
},
|
||||||
400...511 => {
|
400...511 => {
|
||||||
std.log.err("Get rekt\n{s}", .{mb_result.items});
|
std.log.err("Get rekt\n{s}", .{ar.items});
|
||||||
return Client.ConnectError.ConnectionRefused;
|
return Client.ConnectError.ConnectionRefused;
|
||||||
},
|
},
|
||||||
512 => {
|
512 => {
|
||||||
std.log.debug("Need to login", .{});
|
std.log.err("Need to login\n", .{});
|
||||||
return null;
|
return null;
|
||||||
},
|
},
|
||||||
else => unreachable,
|
else => unreachable,
|
||||||
}
|
}
|
||||||
|
|
||||||
//std.log.err("{s}", .{mb_result_slice});
|
return ar.items;
|
||||||
|
|
||||||
const result = try std.json.parseFromSlice(QR.Result, allocator, mb_result.items, .{ .ignore_unknown_fields = true });
|
|
||||||
defer result.deinit();
|
|
||||||
|
|
||||||
const query_result = result.value;
|
|
||||||
|
|
||||||
return query_result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//pub fn getAlbumMBID(query: QR.Result)
|
//pub fn getAlbumMBID(query: QR.Result)
|
||||||
|
|
@ -66,9 +56,21 @@ test "iamthemorning" {
|
||||||
|
|
||||||
const iatm_id: []const u8 = "5854a6de-af8f-4b99-8710-cb47d6436a19";
|
const iatm_id: []const u8 = "5854a6de-af8f-4b99-8710-cb47d6436a19";
|
||||||
|
|
||||||
const search_result: ?QR.Result = try mbSearch(test_alloc, track, album, artist);
|
var mb_result = std.ArrayList(u8).init(test_alloc);
|
||||||
|
defer mb_result.deinit();
|
||||||
|
|
||||||
|
const search_result = try mbSearch(test_alloc, &mb_result, track, album, artist);
|
||||||
|
|
||||||
if (search_result) |sr| {
|
if (search_result) |sr| {
|
||||||
const recording = sr.recordings.?[0];
|
const result = try std.json.parseFromSlice(QR.Result, test_alloc, sr, .{ .ignore_unknown_fields = true });
|
||||||
try testing.expect(std.mem.eql(u8, recording.id, iatm_id));
|
defer result.deinit();
|
||||||
|
try testing.expect(std.mem.eql(u8, result.value.recordings.?[0].@"artist-credit"[0].artist.id, iatm_id));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//defer result.deinit();
|
||||||
|
//std.log.err("{s}", .{search_result.?.recordings.?[0].id});
|
||||||
|
//if (search_result) |sr| {
|
||||||
|
// const recording = sr.recordings.?[0];
|
||||||
|
// try testing.expect(std.mem.eql(u8, recording.id, iatm_id));
|
||||||
|
//}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue