Commit graph

600 commits

Author SHA1 Message Date
Penaz
bbcd574e08 Update Test Plugins 2026-03-25 21:57:46 +01:00
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
ee4b134416 Added docs for plug_shutdown 2026-03-18 20:40:49 +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
044cbc8d95 Added more test strings to test hooks 2026-03-15 21:36:12 +01:00
Penaz
018ab6fac0 Properly unload plugins at application closure. 2026-03-15 21:28:08 +01:00
Penaz
bc40007e50 Added some documentation for the plugin system 2026-03-15 21:10:31 +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
Pedro Montes Alcalde
917f61cbc2
appimage: Fix icon search path (#295) 2026-02-16 12:12:32 -03:00
Daniele Penazzo
7faf65eadd
Add missing settings in documentation (#305)
* Add missing settings in documentation

* Replace single quotes with double quotes
2026-02-16 12:08:26 -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
EXtremeExploit
bdec42523c
ci: Fix nightly permissions
Some checks failed
/ Build (push) Has been cancelled
/ format-check (push) Has been cancelled
/ linter-check (push) Has been cancelled
/ Upload nightly release (push) Has been cancelled
2026-02-14 11:36:32 -03:00
Pedro Montes Alcalde
0ec416e092
ci: Add nightly releases (#264) 2026-02-14 11:21:45 -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
Jack Tench
ea31fa07e3
Add optional runtime deps to readme (#288) 2026-02-08 11:38:33 -03:00
Pedro Montes Alcalde
490d3987b5
Lower C standard from gnu23 to gnu17 (#283) 2026-02-08 11:38:02 -03:00
MxCraven
74669ebdf9
Update timer images in readme (#273)
* Update timer images in readme

* 45 percent width images
2026-02-05 11:39:29 -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