Commit graph

312 commits

Author SHA1 Message Date
Penaz
3f2ba7f54c Restructuring project folders
This should allow for plugins to refer to LibreSplit's functions without
having to pull in half of the codebase.
2026-03-25 21:57:10 +01:00
Penaz
5cc8b744ed Added plugin shutdown function
Might be useful to free resources when closing LibreSplit
2026-03-18 20:39:23 +01:00
Penaz
a090b1c441 Free timer hook registries on close 2026-03-15 22:01:03 +01:00
Penaz
f14f9d2929 Make the plugin loading code use XDG_DATA_HOME 2026-03-15 21:54:59 +01:00
Penaz
c262ec930e Fix some comments 2026-03-15 21:40:57 +01:00
Penaz
018ab6fac0 Properly unload plugins at application closure. 2026-03-15 21:28:08 +01:00
Penaz
de2ba0b46e Added a real plugin registry and cleaning functions.
Just need to see where to place the cleaning part.
2026-03-15 14:48:54 +01:00
Penaz
60375b2e7c Added missing noop in logger header 2026-03-14 22:26:34 +01:00
Penaz
8fa0d45f32 Allow plugins to hook into events for real
And add an example plugin.
2026-03-14 22:24:33 +01:00
Penaz
2d7baa768a Connected hooks to timer events
Time to cry because it doesn't work.
2026-03-14 22:04:49 +01:00
Penaz
0b359d48aa Remove wrong notes 2026-03-14 21:59:39 +01:00
Penaz
51ac09a3f0 Avoid out-of-array NULL-writes 2026-03-14 21:59:28 +01:00
Penaz
402026b746 Added utilities for adding hooks into timer events 2026-03-14 21:53:01 +01:00
Penaz
5df0ac449c Preparing timer hook registries for reactive programming 2026-03-14 21:41:01 +01:00
Penaz
794d0e4d09 A little bit of reSTRUCTuring 2026-03-14 21:17:51 +01:00
Penaz
fa339ab4d4 Put in some effort to actually free memory 2026-03-14 21:08:28 +01:00
Penaz
41db00aa61 Added markers for plugin function handlers in timer 2026-03-14 20:52:44 +01:00
Penaz
c4df2a05ae Added freeing function for luac_functions
At the current state, if there is a disconnection from the game towards
LibreSplit, the entire Lua state is restarted, which (currently)
re-creates the luac_functions array.

This is a memory leak (old luac_functions arrays are orphaned).
2026-03-14 13:03:31 +01:00
Penaz
401b76c607 Added comment 2026-03-14 00:28:31 +01:00
Penaz
7b41dcba61 Check if realloc really works 2026-03-13 23:54:23 +01:00
Penaz
63930640f5 Allow plugins to register custom Lua functions
Will probably need to find a better way to allow plugins to access
internal functions of LibreSplit instead of this "PlugAPI bridge" I've
made
2026-03-13 23:51:29 +01:00
Penaz
d279571137 Added some registration function stubs 2026-03-13 22:10:10 +01:00
Penaz
f868157089 First init functions for plugins.
Now plugins can execute code. They can't do anything useful probably,
but that's something, right?
2026-03-12 21:17:56 +01:00
Penaz
26b59b95d9 Add basic plugin loading structure
It reads metadata from .so files without executing code. Does nothing
else.
2026-03-11 21:03:46 +01:00
Pedro Montes Alcalde
cf7399b7fb
timer: Fix game & timer leaks (#330) 2026-03-10 15:53:05 -03:00
Daniele Penazzo
0ec65fdee5
Added customized logging library (#317)
* Added asynchronous logging library

Did some rudimentary testing, might need more for safety.

Fixes #316 at least in part

* Included missing stdbool include

* Added console logging (in addition to file logging)

* Force a file flush at every write

This might be useful if we want to analyze the cause of a crash, if we
don't flush the file, one to several log lines might be missing.

* Added default log settings for release and debug versions

* Added LOG_*F formattable logging functions

* Allow the main thread to close the logger

Or LS will keep on logging from a detached thread.

* Empty the logger queue on thread exit.

This should remove the possibility of losing messages on exit.

* Add timestamps to logs and avoid double newlines

* Put the log file in XDG_DATA_DIR/libresplit

* Default LogLevel at Warns + Errors

Debug LogLevel stays at "everything"

* Bunch'o'statics

* Move prctl to the beginning of the logging thread code
2026-03-10 19:49:17 +01:00
Daniele Penazzo
c4fd163e54
Fix various memory issues (#334)
* Properly free the splits icon paths on game release

This fixes a small memory leak when you load/unload/reload splits with
icons

* Correctly free stuff in the splits component too

* Fix two segfaults when timer is not loaded

A check is missing for the presence of timer, so if you right click ->
close and then try to open a split or auto splitter, libresplit
segfaults.

* Correctly free welcome_box on closing

* Make sure that malloc() in gui_settings actually works

In low-memory conditions the malloc may fail with undefined behaviour

* Revert connection of destroy signal

The widget is freed just before LibreSplit closes already. I thought it
was a disconnected signal handler.

* Autoimporter mon amour (non)

* Actually this one isn't needed anymore
2026-03-10 19:48:38 +01:00
Pedro Montes Alcalde
a29f3ba34c
timer: Overhaul the logic and callings (#290)
* meow

* miao

* :3

* aaaaaaa

* cheese

* bbbbbbbbb

* blehhhhhh

* miao

* :D

* nyan

* small

* splits

* last tick fix

* maybe

* hehe

* docstrings

* docs change

* Fix segfault on no splits

* remove asserts

* Dont run reset when not running

* actually reset this time i swear

* avoid reset desync

* suggestions

* meow

* miao

* format nyaaaa
2026-03-02 14:58:45 -03:00
Daniele Penazzo
c34bd39ef0
Fix compiler failure on certain systems (#311)
In my system (and others) initializing a char* with strchr might turn up
as an error (in those cases the signature is `const char* strchr` instead of `char* strchr`).

Some sources say the signatures differ when the first argument is const,
others don't. This should fix the compilation issue at least.
2026-02-25 11:58:50 -03:00
Daniele Penazzo
3e94856963
Str2ida functionality (#313)
* Added rough str2ida implementation

* Added small documentation.

* Move the lua pushed string to the heap

Works with compilers that don't support VLA and avoids
stack-overflow-induced headaches.

* Check if malloc actually mallocs
2026-02-18 21:00:47 -03:00
Pedro Montes Alcalde
a52ea9dd84
maps: Clear previous map name (#307) 2026-02-16 18:31:35 -03:00
Daniele Penazzo
db4524233f
Fix possible segfault if no type is defined. (#304)
* Fix possible segfault if no type is defined.

The type of value to read is a mandatory argument, skipping directly to
the address (`readAddress(0x...)`) will lead to a segfault

* Fix possible segfault on calls without arguments

Just to be safe.
2026-02-15 20:43:50 -03:00
Jack Tench
f87a6829c9
Standardise parent window parameter of dialogs (#299)
Some checks failed
/ Build (push) Has been cancelled
/ format-check (push) Has been cancelled
/ linter-check (push) Has been cancelled
/ Build AppImage (push) Has been cancelled
2026-02-11 17:24:12 -03:00
Daniele Penazzo
7ccddc0062
Added clickable "clear icons" on Entry Widgets in settings (#296)
* Added basic keypress unbind icon

And made it work for string options too, cause it's handy

* Added missing docstrings
2026-02-11 17:06:26 -03:00
Daniele Penazzo
7d86e7c329
Split modules v3 (#282)
* Split declarations and definitions for windows

* Exploded the program

* Fix formatting
2026-02-08 16:18:09 -03:00
Jack Tench
df1a2dc99f
Update linting workflow to use older c standard (#289)
* Update linting workflow to use older c standard

* Add int types to bind.c

* Run clang-format to move include
2026-02-08 12:58:55 -03:00
Pedro Montes Alcalde
490d3987b5
Lower C standard from gnu23 to gnu17 (#283) 2026-02-08 11:38:02 -03:00
Daniele Penazzo
8b96ab1a2e
Reset rules (#281)
* Added main-window class

Seems that editing the `.window` class affects all windows in
LibreSplit, which is definitely unwanted.

Left the note in the CSS classes for posterity.

* Added another note on LibreSplit/GTK's theming capabilities

* Added a reset stylesheet as string

Theoretically, if it works as it should should fix both #272 and #63

* Applied suggestions and fixes

* Changed function signature and error handling

* Pointer Confusion

This shows the error in case of bad reset rules, tested by stepping with
GDB
2026-02-04 18:38:52 -03:00
Daniele Penazzo
26f87c8ea3
Added settings to allow user to disable alerts for gold and worse run (#280)
Fixes #275
2026-02-04 14:58:24 -03:00
Daniele Penazzo
844ec16bc4
Keygrabber for Keybinds (#269)
* Keygrabber for Keybinds

Very useful.

Fixes #265

* Documentation, fixes and reformatting

The auto importer strikes again.
2026-02-03 18:23:47 -03:00
Daniele Penazzo
7a861aa2da
Delayed keybind handlers support (#262)
* Fix segfault on first start

If no split_file is defined, there will be a NULL-point dereference,
leading to a segfault. This fixes that.

* First idea of "delayed keybind handlers"

* Trying to make the structure more reusable

Not sure it worked.

* Added missing pragma
2026-02-03 16:53:28 -03:00
Daniele Penazzo
8ddee5b731
Fix segfault on first start (#258)
If no split_file is defined, there will be a NULL-point dereference,
leading to a segfault. This fixes that.
2026-02-01 21:39:49 -03:00
Daniele Penazzo
4990a4f911
Add option to enable/disable run history saving (#257)
* Add save run history setting definition

* Save only when relative option is active

Fixes #255
2026-01-30 17:19:41 -03:00
Pedro Montes Alcalde
a75c5d4ef2
timer: Fix saving worse time (#217) 2026-01-30 11:08:53 -03:00
Jack Tench
1f1b0db3fd
Fix timer not resetting in non-gold runs (#254)
Bug introduced in #253
2026-01-29 20:36:36 -03:00
Daniele Penazzo
eff5ba287c
Disallow changing splits or autosplitter if a run is on (#252)
* Disallow changing splits or autosplitter if a run is on

Fixes #241

* Define external function to see if a run is started

Uses the RTA timer "running" property and the atomic_bool run_started
from the Auto splitter

* Replace or statement with relative descriptive function

* Use is_run_started for autosplitter warnings too
2026-01-29 20:32:42 -03:00
Jack Tench
58fefe904e
Prompt user when resetting a run with a gold split (#253)
* Create confirm reset dialog

* Add detection logic for a gold in the current run

* Prompt for confirmation when run has a gold split

* Switch to using stdbool

* Move reset logic to not interfere with other logic
2026-01-29 20:32:07 -03:00
Pedro Montes Alcalde
4dd11944ec
settings: Use const when possible (#235) 2026-01-27 09:48:45 -03:00
Pedro Montes Alcalde
cafb713024
gui: Dont show any digits when number of digits is 0 (#249) 2026-01-27 09:48:10 -03:00
Pedro Montes Alcalde
a9459cfa4a
gui: Close other windows when main window is closed (#250) 2026-01-27 09:47:49 -03:00