Skip to content
This repository was archived by the owner on Jan 20, 2026. It is now read-only.

Commit 9fe6a29

Browse files
authored
Add a dave_set_log_sink function (#9)
1 parent 869cace commit 9fe6a29

2 files changed

Lines changed: 34 additions & 7 deletions

File tree

include/libdavec.h

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,13 @@ typedef struct DaveCommitProcessingResult {
2424
void *roster_update;
2525
} DaveCommitProcessingResult;
2626

27-
typedef void (*DaveMlsFailureCallback)(const char*, const char*);
28-
29-
typedef void (*DaveProtocolVersionChangedCallback)(void);
30-
31-
LIBDAVEC_EXPORT extern const int DAVE_INIT_TRANSITION_ID;
32-
33-
LIBDAVEC_EXPORT extern const int DAVE_DISABLED_VERSION;
27+
typedef enum DaveLoggingSeverity {
28+
VERBOSE,
29+
INFO,
30+
WARNING,
31+
ERROR,
32+
NONE,
33+
} DaveLoggingSeverity;
3434

3535
typedef enum DaveMediaType : uint8_t {
3636
AUDIO,
@@ -47,6 +47,18 @@ typedef enum DaveCodec : uint8_t {
4747
AV1
4848
} DaveCodec;
4949

50+
typedef void (*DaveLogSink)(DaveLoggingSeverity severity, const char *file, int line, const char *message);
51+
52+
typedef void (*DaveMlsFailureCallback)(const char*, const char*);
53+
54+
typedef void (*DaveProtocolVersionChangedCallback)(void);
55+
56+
LIBDAVEC_EXPORT extern const int DAVE_INIT_TRANSITION_ID;
57+
58+
LIBDAVEC_EXPORT extern const int DAVE_DISABLED_VERSION;
59+
60+
LIBDAVEC_EXPORT void dave_set_log_sink(DaveLogSink sink);
61+
5062
LIBDAVEC_EXPORT uint16_t dave_max_supported_protocol_version(void);
5163

5264
LIBDAVEC_EXPORT void* dave_session_create(const char *context, const char *auth_session_id, DaveMlsFailureCallback mls_failure_callback);

src/libdavec.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,21 @@ const int DAVE_INIT_TRANSITION_ID = discord::dave::kInitTransitionId;
3737

3838
const int DAVE_DISABLED_VERSION = discord::dave::kDisabledVersion;
3939

40+
void dave_set_log_sink(DaveLogSink sink) {
41+
static std::atomic<DaveLogSink> log_sink = nullptr;
42+
43+
log_sink.store(sink);
44+
45+
if (sink) {
46+
discord::dave::SetLogSink([](discord::dave::LoggingSeverity severity, const char *file, int line, const std::string &message) {
47+
auto stored = log_sink.load();
48+
if (stored)
49+
stored((DaveLoggingSeverity)severity, file, line, message.c_str());
50+
});
51+
} else
52+
discord::dave::SetLogSink(nullptr);
53+
}
54+
4055
uint16_t dave_max_supported_protocol_version(void) {
4156
return discord::dave::MaxSupportedProtocolVersion();
4257
}

0 commit comments

Comments
 (0)