diff options
author | Christian Segundo | 2023-06-12 01:37:45 +0200 |
---|---|---|
committer | Christian Segundo | 2023-06-12 01:37:45 +0200 |
commit | 17f3a7b655938eb47efc2bbe884e68786bce6077 (patch) | |
tree | c180bca82e03ebd8aa4beb9c9b1fbf4c21a6c264 /src/transmission.zig | |
parent | 6eaf6a8f3f3880372bdfa0027805213d109a80cc (diff) | |
download | zmission-17f3a7b655938eb47efc2bbe884e68786bce6077.tar.gz |
add torrent get raw
Diffstat (limited to 'src/transmission.zig')
-rw-r--r-- | src/transmission.zig | 44 |
1 files changed, 28 insertions, 16 deletions
diff --git a/src/transmission.zig b/src/transmission.zig index 93fe7f4..e25d30b 100644 --- a/src/transmission.zig +++ b/src/transmission.zig @@ -1,7 +1,11 @@ const std = @import("std"); +const util = @import("util.zig"); const Request = @import("request.zig").Request; const SessionGetFields = @import("request.zig").SessionGetFields; +const SessionGet = @import("request.zig").SessionGet; +const TorrentGet = @import("request.zig").TorrentGet; +const TorrentGetFields = @import("request.zig").TorrentGetFields; pub const ClientOptions = extern struct { host: [*:0]const u8, @@ -87,29 +91,37 @@ pub const Client = struct { return self.do(req); } - const body = try real_req.reader().readAllAlloc(self.allocator, 9000); - return body; + var body = std.ArrayList(u8).init(self.allocator); + + // TODO making max_append_size this large + // all the time doesn't feel right + try real_req.reader().readAllArrayList(&body, 9000000000); + + return body.toOwnedSlice(); } }; -pub fn session_get_raw(client: *Client, fields: ?[]SessionGetFields) ![]u8 { - const all_fields = comptime blk: { - var all_fields: []const SessionGetFields = &[_]SessionGetFields{}; - inline for (@typeInfo(SessionGetFields).Enum.fields) |enumField| { - all_fields = all_fields ++ &[_]SessionGetFields{ - @field(SessionGetFields, enumField.name), - }; - } - break :blk all_fields; +pub fn session_get_raw(client: *Client, session_get: ?SessionGet) ![]u8 { + const default: SessionGet = .{ + .fields = comptime util.enumFieldsToSlice(SessionGetFields), }; const r = Request{ .method = .session_get, - .arguments = .{ - .session_get = .{ - .fields = fields orelse all_fields, - }, - }, + .arguments = .{ .session_get = session_get orelse default }, + }; + const body = try client.do(r); + return body; +} + +pub fn torrent_get_raw(client: *Client, torrent_get: ?TorrentGet) ![]u8 { + const default: TorrentGet = .{ + .fields = comptime util.enumFieldsToSlice(TorrentGetFields), + }; + + const r = Request{ + .method = .torrent_get, + .arguments = .{ .torrent_get = torrent_get orelse default }, }; const body = try client.do(r); return body; |