From 17f3a7b655938eb47efc2bbe884e68786bce6077 Mon Sep 17 00:00:00 2001 From: Christian Segundo Date: Mon, 12 Jun 2023 01:37:45 +0200 Subject: add torrent get raw --- src/transmission.zig | 44 ++++++++++++++++++++++++++++---------------- 1 file changed, 28 insertions(+), 16 deletions(-) (limited to 'src/transmission.zig') 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; -- cgit v1.2.3