summaryrefslogtreecommitdiff
path: root/src/transmission.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/transmission.zig')
-rw-r--r--src/transmission.zig44
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;