From f743e05e207046073999ee7234a157359d6a4f57 Mon Sep 17 00:00:00 2001 From: Christian Segundo Date: Mon, 24 Jul 2023 10:28:58 +0200 Subject: wip --- src/transmission.zig | 122 ++++++++++++++++++++++++++++++++------------------- 1 file changed, 78 insertions(+), 44 deletions(-) (limited to 'src/transmission.zig') diff --git a/src/transmission.zig b/src/transmission.zig index 9f0f5f0..239151a 100644 --- a/src/transmission.zig +++ b/src/transmission.zig @@ -3,8 +3,8 @@ const http = std.http; const util = @import("util.zig"); -const Request = @import("request.zig"); -const Response = @import("response.zig"); +pub const Request = @import("request.zig"); +pub const Response = @import("response.zig").Response; pub const ClientOptions = extern struct { host: [*:0]const u8, @@ -100,58 +100,92 @@ pub const Client = struct { } }; -pub fn session_get_raw(client: *Client, session_get: ?Request.SessionGet) ![]u8 { - const default: Request.SessionGet = .{ - .fields = Request.SessionGet.all_fields, - }; - - const r = Request.Object{ - .method = .session_get, - .arguments = .{ .session_get = session_get orelse default }, - }; - const body = try client.do(r); - return body; +pub fn torrentAdd(client: *Client, r: Request.TorrentAdd) !Response { + const body = try torrentAddRaw(client, r); + defer client.allocator.free(body); + return Response.parseBody( + client.allocator, + Request.Method.@"torrent-add", + body, + null, + ); } -pub fn torrent_get_raw(client: *Client, torrent_get: ?Request.TorrentGet) ![]u8 { - const default: Request.TorrentGet = .{ - .fields = Request.TorrentGet.all_fields, - }; - //const default: Request.TorrentGet = .{ - //.fields = &[_]Request.TorrentGet.Fields{.name}, - //}; - - const r = Request.Object{ - .method = .torrent_get, - .arguments = .{ .torrent_get = torrent_get orelse default }, - }; - const body = try client.do(r); - std.debug.print("{s}\n", .{body}); - if (1 == 1) - @panic(""); +pub fn torrentAddRaw(client: *Client, r: Request.TorrentAdd) ![]u8 { + const body = try client.do(Request.Object{ + .method = .@"torrent-add", + .arguments = .{ .@"torrent-add" = r }, + }); return body; } -pub fn torrent_get_(client: *Client, torrent_get: ?Request.TorrentGet) !Response.Object { - @setEvalBranchQuota(100000); - const body = try torrent_get_raw(client, torrent_get); - const decoded: Response.TorrentGet = try std.json.parseFromSlice( - Response.TorrentGet, +pub fn torrentGet(client: *Client, r: ?Request.TorrentGet) !Response { + const body = try torrentGetRaw(client, r); + defer client.allocator.free(body); + return Response.parseBody( client.allocator, + Request.Method.@"torrent-get", body, - std.json.ParseOptions{ - .ignore_unknown_fields = true, - .duplicate_field_behavior = .@"error", - }, + null, ); - return Response.Object.init(.{ .torrent_get = decoded.arguments }, decoded.result); } -pub fn session_set_raw(client: *Client, session_set: Request.SessionSet) ![]u8 { - const r = Request.Object{ - .method = .session_set, - .arguments = .{ .session_set = session_set }, +pub fn torrentGetRaw(client: *Client, r: ?Request.TorrentGet) ![]u8 { + const request = blk: { + if (r == null) { + break :blk Request.Object{ + .method = .@"torrent-get", + .arguments = .{ + .@"torrent-get" = Request.TorrentGet{ + .fields = Request.TorrentGet.all_fields, + }, + }, + }; + } else { + break :blk Request.Object{ + .method = .@"torrent-get", + .arguments = .{ .@"torrent-get" = r.? }, + }; + } }; - const body = try client.do(r); + + const body = try client.do(request); return body; } + +//pub fn session_get_raw(client: *Client, session_get: ?Request.SessionGet) ![]u8 { +//const default: Request.SessionGet = .{ +//.fields = Request.SessionGet.all_fields, +//}; + +//const r = Request.Object{ +//.method = .session_get, +//.arguments = .{ .session_get = session_get orelse default }, +//}; +//const body = try client.do(r); +//return body; +//} + +//pub fn torrent_get_(client: *Client, torrent_get: ?Request.TorrentGet) !Response.Object { +//@setEvalBranchQuota(100000); +//const body = try torrent_get_raw(client, torrent_get); +//const decoded: Response.TorrentGet = try std.json.parseFromSlice( +//Response.TorrentGet, +//client.allocator, +//body, +//std.json.ParseOptions{ +//.ignore_unknown_fields = true, +//.duplicate_field_behavior = .@"error", +//}, +//); +//return Response.Object.init(.{ .torrent_get = decoded.arguments }, decoded.result); +//} + +//pub fn session_set_raw(client: *Client, session_set: Request.SessionSet) ![]u8 { +//const r = Request.Object{ +//.method = .session_set, +//.arguments = .{ .session_set = session_set }, +//}; +//const body = try client.do(r); +//return body; +//} -- cgit v1.2.3