Changes
4 changed files (+54/-11)
-
-
@@ -394,6 +394,7 @@ const allocator = std.heap.c_allocator;const BrowseListener = JsonResponseListener(BrowseService.Browse.Response); const LoadListener = JsonResponseListener(BrowseService.Load.Response); const ControlListener = Listener(transport.ControlResultCode); internal: *Internal,
-
@@ -411,7 +412,7 @@ browse_listeners: std.AutoHashMap(u64, BrowseListener),load_listeners: std.AutoHashMap(u64, LoadListener), image_downloads: std.AutoHashMap(u64, ImageDownload), image_downloads_lock: std.Thread.Mutex = .{}, control_events: std.AutoHashMap(u64, std.Thread.ResetEvent), control_events: std.AutoHashMap(u64, ControlListener), fn init(server: *discovery.Server, token: ?[]const u8) !Internal { var addr = std.ArrayList(u8).init(allocator);
-
@@ -442,7 +443,7 @@ .saved_token = saved_token,.browse_listeners = std.AutoHashMap(u64, BrowseListener).init(allocator), .load_listeners = std.AutoHashMap(u64, LoadListener).init(allocator), .image_downloads = std.AutoHashMap(u64, ImageDownload).init(allocator), .control_events = std.AutoHashMap(u64, std.Thread.ResetEvent).init(allocator), .control_events = std.AutoHashMap(u64, ControlListener).init(allocator), }; }
-
@@ -725,7 +726,9 @@if (self.internal.control_events.getEntry(header.request_id)) |entry| { std.log.debug("Received /control response (ID={d})", .{header.request_id}); entry.value_ptr.set(); entry.value_ptr.write( if (std.mem.eql(u8, "Success", meta.service)) .ok else .server_error, ); continue; }
-
@@ -920,7 +923,11 @@self.internal.zone_subscription_request_id = req_id; } pub fn control(ptr: ?*Connection, zone_ptr: ?*transport.Zone, action: transport.Action) callconv(.C) void { pub fn control( ptr: ?*Connection, zone_ptr: ?*transport.Zone, action: transport.Action, ) callconv(.C) transport.ControlResultCode { var self = ptr orelse @panic( std.fmt.comptimePrint("Received null pointer on {s}_{s}", .{ cname, @src().fn_name }), );
-
@@ -934,7 +941,7 @@ defer zone.release();var ws = self.internal.ws orelse { std.log.err("{s}_{s} called, but WebSocket connection is not ready", .{ cname, @src().fn_name }); return; return .closed; }; const req_id = self.getRequestId();
-
@@ -963,28 +970,28 @@ std.log.err("action parameter has no effective bit turned on at {s}_{s}: {b}", .{ cname, @src().fn_name, action_num }, ); return; return .no_action_bit_set; }; const req = kind.request(allocator, req_id, std.mem.span(zone.id)) catch |err| { std.log.err("Unable to compose control request: {s}", .{@errorName(err)}); return; return .unknown_error; }; defer allocator.free(req); var entry = self.internal.control_events.getOrPut(req_id) catch |err| { std.log.err("Unable to set listener for control response: {s}", .{@errorName(err)}); return; return .unknown_error; }; entry.value_ptr.* = .{}; defer _ = self.internal.control_events.remove(req_id); ws.writeBin(req) catch |err| { std.log.err("Unable to write control request: {s}", .{@errorName(err)}); return; return .failed_to_send; }; entry.value_ptr.wait(); return entry.value_ptr.listen(); } pub fn requestBrowse(
-
-
-
@@ -134,6 +134,17 @@ } plac_transport_zone_list_event;plac_transport_zone_list_event *plac_transport_zone_list_event_retain(plac_transport_zone_list_event*); void plac_transport_zone_list_event_release(plac_transport_zone_list_event*); // transport.ControlResultCode typedef enum { PLAC_TRANSPORT_CONTROL_RESULT_OK = 0, PLAC_TRANSPORT_CONTROL_RESULT_UNKNOWN_ERROR = 1, PLAC_TRANSPORT_CONTROL_RESULT_OUT_OF_MEMORY = 2, PLAC_TRANSPORT_CONTROL_RESULT_FAILED_TO_SEND = 3, PLAC_TRANSPORT_CONTROL_RESULT_CLOSED = 4, PLAC_TRANSPORT_CONTROL_RESULT_NO_ACTION_BIT_SET = 5, PLAC_TRANSPORT_CONTROL_RESULT_SERVER_ERROR = 6, } plac_transport_control_result_code; // browse.Hierarchy typedef enum { PLAC_BROWSE_HIERARCHY_BROWSE = 0,
-
@@ -351,7 +362,7 @@ plac_connection *plac_connection_retain(plac_connection*);void plac_connection_release(plac_connection*); plac_connection_event *plac_connection_get_event(plac_connection*); void plac_connection_subscribe_zones(plac_connection*); void plac_connection_control(plac_connection*, plac_transport_zone*, uint16_t action); plac_transport_control_result_code plac_connection_control(plac_connection*, plac_transport_zone*, uint16_t action); plac_browse_result *plac_connection_browse(plac_connection*, plac_browse_hierarchy, plac_transport_zone*, plac_browse_item*, bool pop); plac_image_get_result *plac_connection_get_image(plac_connection*, const char *image_key, plac_image_get_options*);
-
-
-
@@ -200,6 +200,21 @@ public const uint16 ACTION_PLAY;[CCode (cname = "PLAC_TRANSPORT_ACTION_SEEK")] public const uint16 ACTION_SEEK; [CCode ( cname = "plac_transport_control_result_code", cprefix = "PLAC_TRANSPORT_CONTROL_RESULT_", has_type_id = false )] public enum ControlResultCode { OK = 0, UNKNOWN_ERROR = 1, OUT_OF_MEMORY = 2, FAILED_TO_SEND = 3, CLOSED = 4, NO_ACTION_BIT_SET = 5, SERVER_ERROR = 6, } } namespace Browse {
-
-
-
@@ -499,6 +499,16 @@ @export(&release, .{ .name = std.fmt.comptimePrint("{s}_release", .{cname}) });} }; pub const ControlResultCode = enum(c_int) { ok = 0, unknown_error = 1, out_of_memory = 2, failed_to_send = 3, closed = 4, no_action_bit_set = 5, server_error = 6, }; pub fn export_capi() void { SeekChange.export_capi(); NowPlaying.export_capi();
-