summaryrefslogtreecommitdiff
path: root/src/state.h
diff options
context:
space:
mode:
authorDoan Luu Duc Tai <doan@luuduct.ai>2026-09-08 14:46:47 -0500
committerDoan Luu Duc Tai <doan@luuduct.ai>2026-09-08 14:46:47 -0500
commitf34fb5042d40c186583f9e3009d8a1dd71d07d43 (patch)
tree3f494f3723ebe9f173d0702a97509794f0ef85a5 /src/state.h
Initial commitmain
Diffstat (limited to 'src/state.h')
-rw-r--r--src/state.h69
1 files changed, 69 insertions, 0 deletions
diff --git a/src/state.h b/src/state.h
new file mode 100644
index 0000000..20e1a7b
--- /dev/null
+++ b/src/state.h
@@ -0,0 +1,69 @@
+/* SPDX-License-Identifier: GPL-3.0-or-later */
+/*
+ * vfetch - neofetch but the ascii part is a video
+ *
+ * Copyright (C) 2026 Doan Luu Duc Tai
+ *
+ */
+
+#ifndef SRC__STATE_H
+#define SRC__STATE_H
+
+#include <glib.h>
+#include <pthread.h>
+#include <stdbool.h>
+#include <stddef.h>
+#include <termios.h>
+#include "audio_defs.h"
+#include "config.h"
+
+typedef struct AppState {
+ VfetchArgs *args;
+ gchar *video_specific_cache_root;
+ gchar *current_args_cache_dir;
+ gchar *live_fetch_output;
+ gchar *fetch_command;
+ AudioState audio_state;
+ struct termios original_termios;
+ gint64 media_sync_start_time;
+ pthread_mutex_t audio_state_mutex;
+ pthread_mutex_t fetch_mutex;
+ pthread_mutex_t stdout_mutex;
+ pthread_t signal_monitor_thread_id;
+ pthread_t fetch_thread_id;
+ _Atomic size_t ascii_frames_completed;
+ _Atomic size_t last_fetch_lines;
+ _Atomic size_t previous_fetch_lines;
+ _Atomic bool terminal_resized;
+ _Atomic bool exit_requested;
+ _Atomic bool animation_has_started;
+ _Atomic bool termios_saved;
+ _Atomic bool cursor_visible;
+ _Atomic bool processing_finished;
+ _Atomic bool paused;
+} AppState;
+
+typedef struct ProgressThreadArgs {
+ AppState *state;
+ size_t total_frames;
+} ProgressThreadArgs;
+
+typedef struct FetchUpdaterArgs {
+ AppState *state;
+ VfetchArgs *args;
+ bool verbose_flag;
+ bool debug_flag;
+} FetchUpdaterArgs;
+
+/* Required for the POSIX signal handler, which has a fixed signature and cannot
+ * be passed user context. This global is the standard mechanism for the handler
+ * to access application state.
+ * NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables) */
+extern AppState *global_signal_handler_state_ptr;
+
+/* Required for the self-pipe mechanism, which allows the signal handler to
+ * safely communicate with the main application thread.
+ * NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables) */
+extern int global_signal_pipe[2];
+
+#endif /* SRC__STATE_H */