[spotify] Trigger scan after retrieving a valid access token from the

webinterface

Library now offers the function "library_exec_async". This allows
library sources to offer functions that will be executed in
the library thread. Useful to allow partial scans of only one source.
This commit is contained in:
chme 2017-01-04 20:27:55 +01:00
parent ae1a45bacc
commit adac1d3b5f
3 changed files with 32 additions and 1 deletions

View File

@ -689,6 +689,21 @@ library_is_exiting()
return scan_exit;
}
/*
* Execute the function 'func' with the given argument 'arg' in the library thread.
*
* The pointer passed as argument is freed in the library thread after func returned.
*
* @param func The function to be executed
* @param arg Argument passed to func
* @return 0 if triggering the function execution succeeded, -1 on failure.
*/
int
library_exec_async(command_function func, void *arg)
{
return commands_exec_async(cmdbase, func, arg);
}
static void *
library(void *arg)
{

View File

@ -23,6 +23,7 @@
#include <stdio.h>
#include <time.h>
#include "commands.h"
#include "db.h"
/*
@ -88,6 +89,9 @@ library_set_scanning(bool is_scanning);
bool
library_is_exiting();
int
library_exec_async(command_function func, void *arg);
int
library_init();

View File

@ -413,6 +413,9 @@ fptr_assign_all()
// End of ugly part
static enum command_state
scan_webapi(void *arg, int *ret);
/* ------------------------------- MISC HELPERS ---------------------------- */
static int
@ -1993,7 +1996,8 @@ spotify_oauth_callback(struct evbuffer *evbuf, struct evkeyvalq *param, const ch
// Received a valid access token
spotify_access_token_valid = true;
// TODO Trigger init-scan after successful access to spotifywebapi
// Trigger scan after successful access to spotifywebapi
library_exec_async(scan_webapi, NULL);
evbuffer_add_printf(evbuf, "ok, all done</p>\n");
@ -2312,6 +2316,14 @@ fullrescan()
return 0;
}
/* Thread: httpd */
static enum command_state
scan_webapi(void *arg, int *ret)
{
*ret = rescan();
return COMMAND_END;
}
/* Thread: main */
int
spotify_init(void)