Remove lastfm module (apparently not ready for release)
This commit is contained in:
parent
067facd8dc
commit
4e453e0ee2
207
gs_lastfm.c
207
gs_lastfm.c
|
@ -1,207 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2014 Alyx Wolcott <alyx -at- malkier.net>
|
||||
* Rights to this code are as documented in doc/LICENSE.
|
||||
*
|
||||
* To use this module, add a lastfm_api value to the gameserv{}
|
||||
* config block containing your Last.FM API key.
|
||||
*/
|
||||
|
||||
#include "../api/http.h"
|
||||
#include "../gameserv/gameserv_common.h"
|
||||
|
||||
DECLARE_MODULE_V1(
|
||||
"contrib/gs_lastfm", false, _modinit, _moddeinit,
|
||||
PACKAGE_STRING,
|
||||
"Atheme Development Group <http://www.atheme.org>"
|
||||
);
|
||||
|
||||
static inline void sfree(char *p)
|
||||
{
|
||||
if (p != NULL) free(p);
|
||||
}
|
||||
|
||||
static char *api_key;
|
||||
|
||||
struct np_track
|
||||
{
|
||||
char *user;
|
||||
char *name;
|
||||
char *artist;
|
||||
char *album;
|
||||
bool nowplaying;
|
||||
bool loved;
|
||||
};
|
||||
|
||||
static void command_np(sourceinfo_t *si, int parc, char *parv[]);
|
||||
|
||||
command_t cmd_lastfm = { "NP", N_("Find last played song from Last.FM"), AC_NONE, 2,
|
||||
command_np, {.path = "gameserv/lastfm"}};
|
||||
|
||||
void _modinit(module_t *m)
|
||||
{
|
||||
service_t *gamesvs;
|
||||
MODULE_TRY_REQUEST_DEPENDENCY(m, "gameserv/main");
|
||||
gamesvs = service_find("gameserv");
|
||||
add_dupstr_conf_item("LASTFM_API", &gamesvs->conf_table, 0, &api_key, NULL);
|
||||
|
||||
use_http_symbols(m);
|
||||
service_named_bind_command("gameserv", &cmd_lastfm);
|
||||
service_named_bind_command("chanserv", &cmd_lastfm);
|
||||
}
|
||||
|
||||
void _moddeinit(module_unload_intent_t intent)
|
||||
{
|
||||
service_t *gamesvs;
|
||||
gamesvs = service_find("gameserv");
|
||||
service_named_unbind_command("gameserv", &cmd_lastfm);
|
||||
service_named_unbind_command("chanserv", &cmd_lastfm);
|
||||
del_conf_item("LASTFM_API", &gamesvs->conf_table);
|
||||
}
|
||||
|
||||
int get_first_track(const char *key, void *data, void *privdata)
|
||||
{
|
||||
mowgli_json_t *n, *m;
|
||||
struct np_track *t;
|
||||
|
||||
n = (mowgli_json_t *)data;
|
||||
t = (struct np_track *)privdata;
|
||||
|
||||
if (strcmp(key, "name") == 0)
|
||||
{
|
||||
t->name = strdup(n->v.v_string->str);
|
||||
}
|
||||
else if (strcmp(key, "loved") == 0)
|
||||
{
|
||||
if (strcmp(n->v.v_string->str, "0") == 0)
|
||||
t->loved = false;
|
||||
else
|
||||
t->loved = true;
|
||||
}
|
||||
else if (strcmp(key, "@attr") == 0)
|
||||
{
|
||||
m = mowgli_patricia_retrieve(n->v.v_object, "nowplaying");
|
||||
if (m != NULL)
|
||||
if (strcmp(m->v.v_string->str, "0") == 0)
|
||||
t->nowplaying = false;
|
||||
else
|
||||
t->nowplaying = true;
|
||||
}
|
||||
else if (strcmp(key, "artist") == 0)
|
||||
{
|
||||
m = mowgli_patricia_retrieve(n->v.v_object, "name");
|
||||
if (m != NULL)
|
||||
t->artist = strdup(m->v.v_string->str);
|
||||
}
|
||||
else if (strcmp(key, "album") == 0)
|
||||
{
|
||||
m = mowgli_patricia_retrieve(n->v.v_object, "#text");
|
||||
if (m != NULL)
|
||||
t->album = strdup(m->v.v_string->str);
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
void user_getrecenttracks_consumer(http_client_t *container, void *userdata)
|
||||
{
|
||||
sourceinfo_t *si;
|
||||
mowgli_json_t *json, *curr;
|
||||
struct np_track *track;
|
||||
|
||||
track = smalloc(sizeof(struct np_track));
|
||||
si = (sourceinfo_t *)userdata;
|
||||
|
||||
track->name = track->artist = track->album = NULL;
|
||||
track->loved = track->nowplaying = false;
|
||||
|
||||
printf("%s\n", container->data);
|
||||
|
||||
json = mowgli_json_parse_string(container->data);
|
||||
|
||||
if (json == NULL || json->tag != MOWGLI_JSON_TAG_OBJECT)
|
||||
{
|
||||
gs_command_report(si, "LastFM lookup failed (Missing everything)");
|
||||
goto cleanup;
|
||||
}
|
||||
if ((json = mowgli_json_object_retrieve(json, "recenttracks"))
|
||||
== NULL)
|
||||
{
|
||||
gs_command_report(si, "LastFM lookup failed (missing recenttracks)");
|
||||
goto cleanup;
|
||||
}
|
||||
if ((curr = mowgli_json_object_retrieve(json, "@attr")) == NULL)
|
||||
{
|
||||
gs_command_report(si, "LastFM lookup failed (missing @attr)");
|
||||
goto cleanup;
|
||||
}
|
||||
if ((curr = mowgli_json_object_retrieve(curr, "user")) == NULL)
|
||||
{
|
||||
gs_command_report(si, "LastFM lookup failed (missing user)");
|
||||
goto cleanup;
|
||||
} else {
|
||||
track->user = sstrdup(curr->v.v_string->str);
|
||||
}
|
||||
if ((json = mowgli_json_object_retrieve(json, "track")) == NULL)
|
||||
{
|
||||
gs_command_report(si, "LastFM lookup failed (Missing track)");
|
||||
goto cleanup;
|
||||
}
|
||||
/*json = mowgli_json_array_nth(json, 0);*/
|
||||
mowgli_patricia_foreach(json->v.v_object, get_first_track, track);
|
||||
|
||||
if (track->album)
|
||||
gs_command_report(si, "%s %s %s by %s (%s) %s\n", track->user,
|
||||
(track->nowplaying ? "is now playing" : "last played"),
|
||||
track->name, track->artist, track->album,
|
||||
(track->loved ? "[Loved Track]" : ""));
|
||||
else
|
||||
gs_command_report(si, "%s %s %s by %s %s\n", track->user,
|
||||
(track->nowplaying ? "is now playing" : "last played"),
|
||||
track->name, track->artist, (track->loved ? "[Loved Track]" : ""));
|
||||
|
||||
cleanup:
|
||||
sfree(track->user);
|
||||
sfree(track->name);
|
||||
sfree(track->album);
|
||||
sfree(track->artist);
|
||||
free(track);
|
||||
object_unref(si);
|
||||
|
||||
}
|
||||
|
||||
static void command_np(sourceinfo_t *si, int parc, char *parv[])
|
||||
{
|
||||
http_client_t *container;
|
||||
mychan_t *mc;
|
||||
|
||||
if (!gs_do_parameters(si, &parc, &parv, &mc))
|
||||
return;
|
||||
|
||||
|
||||
if (parc < 1)
|
||||
{
|
||||
command_fail(si, fault_needmoreparams, STR_INSUFFICIENT_PARAMS, "NP");
|
||||
command_fail(si, fault_needmoreparams, _("Usage: NP <username>"));
|
||||
return;
|
||||
}
|
||||
|
||||
if (api_key == NULL)
|
||||
{
|
||||
gs_command_report(si, "LastFM lookup failed (Incorrect config)");
|
||||
slog(LG_INFO, "Missing LastFM API key");
|
||||
return;
|
||||
}
|
||||
|
||||
container = http_client_new();
|
||||
|
||||
http_parse_url(container, "http://ws.audioscrobbler.com/2.0/");
|
||||
http_add_param(container, "method", "user.getrecenttracks");
|
||||
http_add_param(container, "user", parv[0]);
|
||||
http_add_param(container, "extended", "1");
|
||||
http_add_param(container, "limit", "1");
|
||||
http_add_param(container, "format", "json");
|
||||
http_add_param(container, "api_key", api_key);
|
||||
|
||||
object_ref(si);
|
||||
http_get(container, si, user_getrecenttracks_consumer);
|
||||
}
|
Loading…
Reference in New Issue