summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--flake.lock24
-rwxr-xr-xscripts/line_count.sh6
-rw-r--r--src/fruits/cmv/cmv.c6
-rw-r--r--src/fruits/cmv/input_simulator.h6
-rw-r--r--src/fruits/cmv/meson.build2
-rw-r--r--src/liana/list.c8
-rw-r--r--src/screen/screen.c4
-rw-r--r--src/screen/screen.h2
-rw-r--r--src/server/server.c3
-rw-r--r--src/sink/desktop.c19
-rw-r--r--src/sink/input_simulator.c (renamed from src/fruits/cmv/input_simulator.c)17
-rw-r--r--src/sink/input_simulator.h7
-rw-r--r--src/sink/meson.build3
13 files changed, 63 insertions, 44 deletions
diff --git a/flake.lock b/flake.lock
index 62131a1..cec783a 100644
--- a/flake.lock
+++ b/flake.lock
@@ -41,11 +41,11 @@
]
},
"locked": {
- "lastModified": 1733317578,
- "narHash": "sha256-anN/LcP5IuqEARvhPETg1vnbyG3IQ0wdvSAYEJfIQzA=",
+ "lastModified": 1733754861,
+ "narHash": "sha256-3JKzIou54yjiMVmvgdJwopekEvZxX3JDT8DpKZs4oXY=",
"owner": "nix-community",
"repo": "home-manager",
- "rev": "ad48eb25cd0b00ce730da00fa1f8e6e6c27b397d",
+ "rev": "9ebaa80a227eaca9c87c53ed515ade013bc2bca9",
"type": "github"
},
"original": {
@@ -57,11 +57,11 @@
},
"nixos-hardware": {
"locked": {
- "lastModified": 1733217105,
- "narHash": "sha256-fc6jTzIwCIVWTX50FtW6AZpuukuQWSEbPiyg6ZRGWFY=",
+ "lastModified": 1733481457,
+ "narHash": "sha256-IS3bxa4N1VMSh3/P6vhEAHQZecQ3oAlKCDvzCQSO5Is=",
"owner": "NixOS",
"repo": "nixos-hardware",
- "rev": "cceee0a31d2f01bcc98b2fbd591327c06a4ea4f9",
+ "rev": "e563803af3526852b6b1d77107a81908c66a9fcf",
"type": "github"
},
"original": {
@@ -78,11 +78,11 @@
"nixpkgs": "nixpkgs"
},
"locked": {
- "lastModified": 1731682434,
- "narHash": "sha256-HnZFPB7akVIy0KuPq/tEkiB+Brt1qi0DUIDzR8z25qI=",
+ "lastModified": 1733754474,
+ "narHash": "sha256-+Fd2VIEFgLJAYIzRkCCSvbYXovoZj9k7K04cmUUzlHI=",
"owner": "nix-community",
"repo": "NixOS-WSL",
- "rev": "a6b9cf0b7805e2c50829020a73e7bde683fd36dd",
+ "rev": "7c85eb172eef3a8814e6c1127f0e64b6e8ffc3b7",
"type": "github"
},
"original": {
@@ -110,11 +110,11 @@
},
"nixpkgs_2": {
"locked": {
- "lastModified": 1733212471,
- "narHash": "sha256-M1+uCoV5igihRfcUKrr1riygbe73/dzNnzPsmaLCmpo=",
+ "lastModified": 1733581040,
+ "narHash": "sha256-Qn3nPMSopRQJgmvHzVqPcE3I03zJyl8cSbgnnltfFDY=",
"owner": "NixOS",
"repo": "nixpkgs",
- "rev": "55d15ad12a74eb7d4646254e13638ad0c4128776",
+ "rev": "22c3f2cf41a0e70184334a958e6b124fb0ce3e01",
"type": "github"
},
"original": {
diff --git a/scripts/line_count.sh b/scripts/line_count.sh
index fdd6278..281f765 100755
--- a/scripts/line_count.sh
+++ b/scripts/line_count.sh
@@ -1,10 +1,10 @@
#! /usr/bin/env sh
find ./src -type f \
+ -not -path "*__pycache__*" \
+ -not -path "./src/fruits/droid/*" \
-not -path "./src/portal/cpy/portal.c" \
-not -path "./src/portal/cpy/portal.h" \
-not -path "./src/portal/patches/*" \
- -not -path "./src/portal/tests/*" \
+ -not -path "./src/portal/py/tests/*" \
-not -path "./src/portal/vendor/*" \
- -not -path "./src/fruits/droid/*" \
- -not -path "*__pycache__*" \
-exec wc -l {} +
diff --git a/src/fruits/cmv/cmv.c b/src/fruits/cmv/cmv.c
index 9e3be3f..0fe33ad 100644
--- a/src/fruits/cmv/cmv.c
+++ b/src/fruits/cmv/cmv.c
@@ -11,8 +11,6 @@
#include "../../server/common.c"
#endif
-#include "input_simulator.h"
-
struct cmv {
struct aki_event_loop loop;
struct camu_desktop desktop;
@@ -123,12 +121,8 @@ s32 wmain(s32 argc, wchar_t **argv)
struct aki_thread thread0;
aki_thread_create(&thread0, event_loop_thread, &c);
- //cmv_input_simulator_run(&c.desktop.sink);
-
while (camu_desktop_tick(&c.desktop)) {}
- //cmv_input_simulator_stop();
-
camu_desktop_stop(&c.desktop);
aki_thread_join(&thread0);
camu_desktop_free(&c.desktop);
diff --git a/src/fruits/cmv/input_simulator.h b/src/fruits/cmv/input_simulator.h
deleted file mode 100644
index 5380bb2..0000000
--- a/src/fruits/cmv/input_simulator.h
+++ /dev/null
@@ -1,6 +0,0 @@
-#pragma once
-
-#include "../../libsink/sink.h"
-
-void cmv_input_simulator_run(struct camu_sink *sink);
-void cmv_input_simulator_stop(void);
diff --git a/src/fruits/cmv/meson.build b/src/fruits/cmv/meson.build
index b2ab0a2..9b83847 100644
--- a/src/fruits/cmv/meson.build
+++ b/src/fruits/cmv/meson.build
@@ -1,4 +1,4 @@
-cmv_src = ['cmv.c', 'input_simulator.c']
+cmv_src = ['cmv.c']
cmv_deps = [common_deps, desktop]
cmv_args = []
if get_option('sink-only')
diff --git a/src/liana/list.c b/src/liana/list.c
index a192848..059cd07 100644
--- a/src/liana/list.c
+++ b/src/liana/list.c
@@ -567,11 +567,9 @@ void lia_list_add_sink(struct lia_list *list, void (*callback)(void *, u8, struc
void lia_list_remove_sink(struct lia_list *list, void *userdata)
{
- struct lia_list_cmd *cmd = al_alloc_object(struct lia_list_cmd);
- cmd->op = REMOVE_SINK;
- cmd->userdata = userdata;
- al_array_push(list->queue, cmd);
- pump_queue(list);
+ // Don't queue remove sink because we can't let any currently queued commands
+ // touch this sink.
+ handle_remove_sink(list, userdata);
}
void lia_list_add(struct lia_list *list, void *opaque, u64 duration, wstr *name)
diff --git a/src/screen/screen.c b/src/screen/screen.c
index b10d486..30d6860 100644
--- a/src/screen/screen.c
+++ b/src/screen/screen.c
@@ -184,8 +184,8 @@ static bool key_callback(void *userdata, u8 state, u8 button)
case 0x12: // e
scr->callback(scr->userdata, CAMU_SCREEN_RESEEK, NULL);
break;
- case 0x16: // u
- scr->callback(scr->userdata, CAMU_SCREEN_UNSET, NULL);
+ case 0x19: // p
+ scr->callback(scr->userdata, CAMU_SCREEN_DEBUG, NULL);
break;
case 0x13: { // r
struct camu_view *view = get_view_from_mouse_pos(scr);
diff --git a/src/screen/screen.h b/src/screen/screen.h
index 23a85d0..9467d35 100644
--- a/src/screen/screen.h
+++ b/src/screen/screen.h
@@ -34,8 +34,8 @@ enum {
CAMU_SCREEN_TOGGLE_PAUSE,
CAMU_SCREEN_SEEK,
CAMU_SCREEN_RESEEK,
- CAMU_SCREEN_UNSET,
CAMU_SCREEN_VOLUME,
+ CAMU_SCREEN_DEBUG,
CAMU_SCREEN_CLOSE
};
diff --git a/src/server/server.c b/src/server/server.c
index a72a1b1..f53eb52 100644
--- a/src/server/server.c
+++ b/src/server/server.c
@@ -301,7 +301,7 @@ static void handle_add_command(struct camu_server *server, struct lia_list *list
{
u8 op = aki_packet_read_u8(packet);
struct cch_entry *entry = NULL;
- struct camu_resource *resource;
+ struct camu_resource *resource = NULL;
wstr name;
switch (op) {
case CAMU_RESOURCE_FILE: {
@@ -353,6 +353,7 @@ static void handle_add_command(struct camu_server *server, struct lia_list *list
break;
}
}
+ al_assert(resource);
resource->load = CAMU_RESOURCE_NOT_LOADED;
resource->entry = entry;
resource->node = lia_server_create_node(&server->data.server, resource->entry);
diff --git a/src/sink/desktop.c b/src/sink/desktop.c
index 11da0f9..85080ba 100644
--- a/src/sink/desktop.c
+++ b/src/sink/desktop.c
@@ -10,6 +10,9 @@
#include "desktop.h"
#include "common.h"
+#ifdef _DEBUG_
+#include "input_simulator.h"
+#endif
static u8 sink_callback(void *userdata, u8 op, u8 type, void *opaque)
{
@@ -47,8 +50,15 @@ static void screen_callback(void *userdata, u8 op, void *opaque)
case CAMU_SCREEN_RESEEK:
camu_sink_reseek(&c->sink);
break;
- case CAMU_SCREEN_UNSET:
- camu_sink_unset(&c->sink);
+ case CAMU_SCREEN_DEBUG:
+#ifdef _DEBUG_
+ if (camu_input_simulator_running()) {
+ camu_input_simulator_stop();
+ } else {
+ camu_input_simulator_run(&c->sink);
+ }
+ //camu_sink_unset(&c->sink);
+#endif
break;
case CAMU_SCREEN_VOLUME: {
f64 amount = *(f64 *)opaque;
@@ -111,6 +121,11 @@ bool camu_desktop_tick(struct camu_desktop *c)
void camu_desktop_stop(struct camu_desktop *c)
{
+#ifdef _DEBUG_
+ if (camu_input_simulator_running()) {
+ camu_input_simulator_stop();
+ }
+#endif
camu_mixer_pause(&c->mixer);
camu_mixer_clear(&c->mixer);
camu_screen_set_state(&c->scr, CAMU_SCREEN_CLOSED);
diff --git a/src/fruits/cmv/input_simulator.c b/src/sink/input_simulator.c
index 7bc3125..b9c92ca 100644
--- a/src/fruits/cmv/input_simulator.c
+++ b/src/sink/input_simulator.c
@@ -3,14 +3,15 @@
#include "input_simulator.h"
+// This is ignoring all thread-safety.
+static s32 quit = 1;
static struct aki_thread thread;
-static s32 quit = 0;
enum {
SKIP = 0,
BACKSKIP,
SHUFFLE,
- BASE, // count
+ MARK, // count
TOGGLE_PAUSE,
SEEK,
};
@@ -20,7 +21,7 @@ static aki_thread_result AKI_THREADCALL input_simulation_thread(void *userdata)
struct camu_sink *sink = (struct camu_sink *)userdata;
while (!quit) {
aki_thread_sleep(AKI_TS_FROM_USEC(30000));
- switch (al_rand() % BASE) {
+ switch (al_rand() % MARK) {
case SKIP:
camu_sink_skip(sink, (al_rand() % 5));
break;
@@ -41,12 +42,18 @@ static aki_thread_result AKI_THREADCALL input_simulation_thread(void *userdata)
return 0;
}
-void cmv_input_simulator_run(struct camu_sink *sink)
+void camu_input_simulator_run(struct camu_sink *sink)
{
+ quit = 0;
aki_thread_create(&thread, input_simulation_thread, sink);
}
-void cmv_input_simulator_stop(void)
+bool camu_input_simulator_running(void)
+{
+ return quit == 0;
+}
+
+void camu_input_simulator_stop(void)
{
quit = 1;
aki_thread_join(&thread);
diff --git a/src/sink/input_simulator.h b/src/sink/input_simulator.h
new file mode 100644
index 0000000..40253d0
--- /dev/null
+++ b/src/sink/input_simulator.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#include "../libsink/sink.h"
+
+void camu_input_simulator_run(struct camu_sink *sink);
+bool camu_input_simulator_running(void);
+void camu_input_simulator_stop(void);
diff --git a/src/sink/meson.build b/src/sink/meson.build
index 73a9276..067b045 100644
--- a/src/sink/meson.build
+++ b/src/sink/meson.build
@@ -1,4 +1,7 @@
desktop_src = ['desktop.c']
+if is_debug
+ desktop_src += ['input_simulator.c']
+endif
desktop_deps = [libsink]
desktop_args = ['-DCAMU_MIXER_THREADED', '-DCAMU_SCREEN_THREADED']
desktop = declare_dependency(sources: desktop_src, dependencies: desktop_deps,