@@ -86,8 +86,11 @@ nowplaying_length () {
8686#define STATUS_SONGCHANGED 2
8787#define STATUS_SEEKED 3
8888
89+ int playback_status ;
90+ float song_len ;
91+
8992static void
90- updateDiscordPresence (int playback_status , float song_len ) {
93+ updateDiscordPresence (void * _ ) {
9194 trace ("updateDiscordPresence\n" );
9295 // Arguments:
9396 // playback_status: as above
@@ -250,6 +253,13 @@ updateDiscordPresence (int playback_status, float song_len) {
250253 deadbeef -> pl_item_unref (nowplaying );
251254}
252255
256+ void
257+ create_update_thread (int ps , float slen ) {
258+ playback_status = ps ;
259+ song_len = slen ;
260+ deadbeef -> thread_start (updateDiscordPresence , NULL );
261+ }
262+
253263static int
254264discord_presence_message (uint32_t id , uintptr_t ctx , uint32_t p1 , uint32_t p2 ) {
255265 switch (id ) {
@@ -276,7 +286,7 @@ discord_presence_message (uint32_t id, uintptr_t ctx, uint32_t p1, uint32_t p2)
276286 // this has been fixed in commit d63a53bf70f09bc8534f6394580221c0af1babeb (2018-05-23)
277287 //if ( ((ddb_event_trackchange_t *)ctx)->to != ((ddb_event_trackchange_t *)ctx)->from) {
278288 float nextitem_length = deadbeef -> pl_get_item_duration (((ddb_event_trackchange_t * )ctx )-> to );
279- updateDiscordPresence (STATUS_SONGCHANGED , nextitem_length );
289+ create_update_thread (STATUS_SONGCHANGED , nextitem_length );
280290 //}
281291 }
282292 else {
@@ -287,7 +297,7 @@ discord_presence_message (uint32_t id, uintptr_t ctx, uint32_t p1, uint32_t p2)
287297 break ;
288298 case DB_EV_SEEKED :
289299 if (discord_enabled ) {
290- updateDiscordPresence (STATUS_SEEKED , 0 );
300+ create_update_thread (STATUS_SEEKED , 0 );
291301 }
292302 break ;
293303 case DB_EV_PAUSED :
@@ -296,7 +306,7 @@ discord_presence_message (uint32_t id, uintptr_t ctx, uint32_t p1, uint32_t p2)
296306 Discord_ClearPresence ();
297307 }
298308 else {
299- updateDiscordPresence (p1 , 0 );
309+ create_update_thread (p1 , 0 );
300310 }
301311 }
302312 break ;
0 commit comments