summaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
authorAndrew Opalach <andrew@akon.city> 2025-03-15 20:40:38 -0400
committerAndrew Opalach <andrew@akon.city> 2025-03-15 20:40:38 -0400
commit846bd3d1b7bcec3653aa9d662f559235c4689e1b (patch)
tree56906544460079681f46d23d48d76f1a8242ea75 /src/server
parent46d5660a2582323e1c9c33a56694c322bc21b7bc (diff)
downloadcamu-846bd3d1b7bcec3653aa9d662f559235c4689e1b.tar.gz
camu-846bd3d1b7bcec3653aa9d662f559235c4689e1b.tar.bz2
camu-846bd3d1b7bcec3653aa9d662f559235c4689e1b.zip
Sink refactor wip
Dangling target won't stay around. I have a couple of ideas about how to massively simplify the handling of ended entries. Signed-off-by: Andrew Opalach <andrew@akon.city>
Diffstat (limited to 'src/server')
-rw-r--r--src/server/common.h2
-rw-r--r--src/server/server.c19
-rw-r--r--src/server/server.h1
3 files changed, 13 insertions, 9 deletions
diff --git a/src/server/common.h b/src/server/common.h
index 80afb9b..ffb98ec 100644
--- a/src/server/common.h
+++ b/src/server/common.h
@@ -31,9 +31,9 @@ enum {
CAMU_LIST_ADD = 0,
CAMU_LIST_SKIP,
CAMU_LIST_SKIPTO,
- CAMU_LIST_SHUFFLE,
CAMU_LIST_TOGGLE_PAUSE,
CAMU_LIST_SEEK,
+ CAMU_LIST_SHUFFLE,
CAMU_LIST_UNSET,
CAMU_LIST_END
};
diff --git a/src/server/server.c b/src/server/server.c
index d91dd6f..a1c3657 100644
--- a/src/server/server.c
+++ b/src/server/server.c
@@ -148,6 +148,7 @@ static bool identify_callback(void *userdata, struct nn_rpc_connection *conn,
static void list_sink_callback(void *userdata, u8 op, struct lia_list_entry *entry, s32 sequence, struct lia_timing *timing)
{
struct camu_server_sink *sink = (struct camu_server_sink *)userdata;
+ if (!sink->conn) return;
switch (op) {
case LIANA_SINK_SET:
case LIANA_SINK_BUFFER:
@@ -225,9 +226,12 @@ static void node_callback(void *userdata, u8 op, u64 duration)
case LIANA_NODE_DURATION:
resource->load = LIANA_ENTRY_LOADED;
resource->duration = duration;
- process_pending(resource);
+ break;
+ case LIANA_NODE_ERRORED:
+ resource->load = LIANA_ENTRY_ERRORED;
break;
}
+ process_pending(resource);
}
static void send_clients_current_changed(struct camu_server *server, struct lia_list *list, struct lia_list_entry *entry)
@@ -671,10 +675,6 @@ static bool list_action_callback(void *userdata, struct nn_rpc_connection *conn,
lia_list_skipto(list, sequence, i);
break;
}
- case CAMU_LIST_SHUFFLE: {
- lia_list_shuffle(list);
- break;
- }
case CAMU_LIST_TOGGLE_PAUSE: {
s32 sequence = nn_packet_read_s32(packet);
f64 pts = nn_packet_read_f64(packet);
@@ -684,9 +684,12 @@ static bool list_action_callback(void *userdata, struct nn_rpc_connection *conn,
case CAMU_LIST_SEEK: {
s32 sequence = nn_packet_read_s32(packet);
u32 id = nn_packet_read_u32(packet);
- f64 percent = nn_packet_read_f64(packet);
- percent = CLAMP(percent, 0.0, 100.0);
- lia_list_seek(list, sequence, id, percent);
+ u64 pos = nn_packet_read_u64(packet);
+ lia_list_seek(list, sequence, id, pos);
+ break;
+ }
+ case CAMU_LIST_SHUFFLE: {
+ lia_list_shuffle(list);
break;
}
case CAMU_LIST_UNSET: {
diff --git a/src/server/server.h b/src/server/server.h
index db7d30c..e335b94 100644
--- a/src/server/server.h
+++ b/src/server/server.h
@@ -55,4 +55,5 @@ void camu_server_bind_direct(struct camu_server *server);
void camu_server_close(struct camu_server *server);
void camu_server_free(struct camu_server *server);
+// Local compat.
void camu_server_local_add(struct camu_server *server, struct nn_packet *packet);