grim/purple-spasm

2c1f2ed65b14
Parents 0064766dd97a
Children 6765543671fa
Lot's of updates, login cleanup, some other stuff...
--- a/spasm-account.c Thu May 11 20:36:54 2017 -0500
+++ b/spasm-account.c Thu May 11 20:40:53 2017 -0500
@@ -17,6 +17,8 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
+#include "debug.h"
+
#include "spasm-account.h"
struct _PurpleSpasmAccount {
@@ -99,3 +101,10 @@
return sa->access_token;
}
+
+GError *
+purple_spasm_account_update_profile(PurpleSpasmAccount *sa, JsonParser *parser) {
+ purple_debug_info("spasm", "Updating profile");
+
+ return NULL;
+}
--- a/spasm-account.h Thu May 11 20:36:54 2017 -0500
+++ b/spasm-account.h Thu May 11 20:40:53 2017 -0500
@@ -22,6 +22,8 @@
#include <glib.h>
+#include <json-glib/json-glib.h>
+
#include <libsoup/soup.h>
#include "account.h"
@@ -44,6 +46,8 @@
void purple_spasm_account_set_access_token(PurpleSpasmAccount *sa, const gchar *access_token);
const gchar * purple_spasm_account_get_access_token(const PurpleSpasmAccount *sa);
+GError *purple_spasm_account_update_profile(PurpleSpasmAccount *sa, JsonParser *parser);
+
G_END_DECLS
#endif /* PURPLE_SPASM_ACCOUNT_H */
--- a/spasm-auth.c Thu May 11 20:36:54 2017 -0500
+++ b/spasm-auth.c Thu May 11 20:40:53 2017 -0500
@@ -19,6 +19,7 @@
#include <libsoup/soup.h>
+#include "debug.h"
#include "request.h"
#include "spasm-account.h"
@@ -27,10 +28,54 @@
#include "spasm-user.h"
/******************************************************************************
+ * Prototypes
+ *****************************************************************************/
+static void _purple_spasm_oauth_login(PurpleSpasmAccount *sa);
+
+/******************************************************************************
* Helpers
*****************************************************************************/
static void
-purple_spasm_access_token_input_cb(gpointer data, const gchar *access_token) {
+_purple_spasm_login_test_cb(PurpleSpasmAccount *sa, JsonParser *parser,
+ GError *error, gpointer data)
+{
+ PurpleAccount *account = NULL;
+ PurpleConnection *connection = NULL;
+
+ if(error != NULL) {
+ purple_debug_info("spasm", "oauth token invalid, re-authenticating : %s\n", error->message);
+
+ _purple_spasm_oauth_login(sa);
+
+ return;
+ }
+
+ account = purple_spasm_account_get_account(sa);
+ connection = purple_account_get_connection(account);
+
+ error = purple_spasm_account_update_profile(sa, parser);
+ if(error != NULL) {
+ gchar *err_msg = NULL;
+
+ err_msg = g_strdup_printf(
+ "failed to update profile : %s",
+ error->message
+ );
+
+ g_error_free(error);
+
+ purple_connection_error(connection, err_msg);
+
+ g_free(err_msg);
+
+ return;
+ }
+
+ purple_connection_set_state(connection, PURPLE_CONNECTED);
+}
+
+static void
+_purple_spasm_access_token_input_cb(gpointer data, const gchar *access_token) {
PurpleAccount *account = NULL;
PurpleConnection *connection = NULL;
PurpleSpasmAccount *sa = PURPLE_SPASM_ACCOUNT(data);
@@ -42,13 +87,13 @@
purple_account_set_password(account, access_token);
connection = purple_spasm_account_get_connection(sa);
- purple_connection_set_state(connection, PURPLE_CONNECTED);
+ purple_connection_update_progress(connection, "Verifying", 2, 3);
- purple_spasm_refresh_user(sa);
+ purple_spasm_get_user(sa, _purple_spasm_login_test_cb, NULL);
}
static void
-purple_spasm_access_token_cancel_cb(gpointer data) {
+_purple_spasm_access_token_cancel_cb(gpointer data) {
PurpleSpasmAccount *sa = PURPLE_SPASM_ACCOUNT(data);
purple_connection_error(
@@ -59,24 +104,24 @@
purple_spasm_account_free(sa);
}
-/******************************************************************************
- * API
- *****************************************************************************/
-void
-purple_spasm_login(PurpleAccount *account) {
- PurpleConnection *pc = NULL;
- PurpleSpasmAccount *sa = NULL;
+static void
+_purple_spasm_oauth_login(PurpleSpasmAccount *sa) {
+ PurpleAccount *account = NULL;
+ PurpleConnection *connection = NULL;
gchar *state = NULL, *uri = NULL;
const gchar *username = NULL;
- pc = purple_account_get_connection(account);
- username = purple_account_get_username(account);
+ account = purple_spasm_account_get_account(sa);
+ connection = purple_account_get_connection(account);
- sa = purple_spasm_account_new(account, pc);
- purple_connection_set_protocol_data(pc, sa);
+ purple_connection_update_progress(
+ connection,
+ "Authenticating",
+ 1,
+ 3
+ );
- purple_connection_set_state(pc, PURPLE_CONNECTING);
-
+ username = purple_account_get_username(account);
state = g_strdup_printf("%s,%s", PURPLE_SPASM_PLUGIN_ID, username);
uri = g_strdup_printf(
@@ -88,14 +133,12 @@
);
g_free(state);
- purple_connection_update_progress(pc, "Authenticating", 1, 2);
-
/* send off the oauth implicit request */
- purple_notify_uri(pc, uri);
+ purple_notify_uri(connection, uri);
g_free(uri);
purple_request_input(
- pc,
+ connection,
"Access Token",
"Enter the access token from https://pidgin.im/oauth.html which should have opened in your web browser",
NULL,
@@ -103,11 +146,36 @@
FALSE,
TRUE,
NULL,
- "OK", G_CALLBACK(purple_spasm_access_token_input_cb),
- "Cancel", G_CALLBACK(purple_spasm_access_token_cancel_cb),
+ "OK", G_CALLBACK(_purple_spasm_access_token_input_cb),
+ "Cancel", G_CALLBACK(_purple_spasm_access_token_cancel_cb),
account,
NULL,
NULL,
sa
);
}
+
+/******************************************************************************
+ * API
+ *****************************************************************************/
+void
+purple_spasm_login(PurpleAccount *account) {
+ PurpleConnection *pc = NULL;
+ PurpleSpasmAccount *sa = NULL;
+ const gchar *password = NULL;
+
+ pc = purple_account_get_connection(account);
+
+ sa = purple_spasm_account_new(account, pc);
+ purple_connection_set_protocol_data(pc, sa);
+
+ purple_connection_set_state(pc, PURPLE_CONNECTING);
+
+ /* try to load the password */
+ password = purple_account_get_password(account);
+ if(password != NULL) {
+ purple_spasm_get_user(sa, _purple_spasm_login_test_cb, NULL);
+ } else {
+ _purple_spasm_oauth_login(sa);
+ }
+}
--- a/spasm-user.c Thu May 11 20:36:54 2017 -0500
+++ b/spasm-user.c Thu May 11 20:40:53 2017 -0500
@@ -27,40 +27,14 @@
/******************************************************************************
* User endpoint
*****************************************************************************/
-static void
-_purple_spasm_refresh_user_cb(PurpleSpasmAccount *sa, JsonParser *parser,
- GError *error, gpointer data)
-{
- JsonNode *node = NULL;
-
- if(error) {
- purple_debug_info("spasm", "refresh user error: %s", error->message);
-
- g_error_free(error);
-
- return;
- }
-
- node = json_parser_get_root(parser);
-
- // now output the string to make sure it's all working
- JsonGenerator *gen = json_generator_new();
- json_generator_set_root(gen, node);
- json_generator_set_pretty(gen, TRUE);
- gchar *json_data = json_generator_to_data(gen, NULL);
- purple_debug_info("spasm", "%s", json_data);
- g_free(json_data);
- g_object_unref(G_OBJECT(gen));
-}
-
void
-purple_spasm_refresh_user(PurpleSpasmAccount *sa) {
+purple_spasm_get_user(PurpleSpasmAccount *sa, PurpleSpasmRestCallback cb, gpointer data) {
purple_spasm_rest_request(
sa,
"GET",
"/user",
NULL,
- _purple_spasm_refresh_user_cb,
- NULL
+ cb,
+ data
);
}
--- a/spasm-user.h Thu May 11 20:36:54 2017 -0500
+++ b/spasm-user.h Thu May 11 20:40:53 2017 -0500
@@ -22,11 +22,14 @@
#include <glib.h>
+#include <json-glib/json-glib.h>
+
#include "spasm-account.h"
+#include "spasm-rest.h"
G_BEGIN_DECLS
-void purple_spasm_refresh_user(PurpleSpasmAccount *sa);
+void purple_spasm_get_user(PurpleSpasmAccount *sa, PurpleSpasmRestCallback cb, gpointer data);
G_END_DECLS
--- a/spasm.c Thu May 11 20:36:54 2017 -0500
+++ b/spasm.c Thu May 11 20:40:53 2017 -0500
@@ -43,17 +43,17 @@
* Implementations
*****************************************************************************/
static const gchar *
-purple_spasm_list_icon(PurpleAccount *account, PurpleBuddy *buddy) {
- return NULL;
+_purple_spasm_list_icon(PurpleAccount *account, PurpleBuddy *buddy) {
+ return "spasm";
}
static void
-purple_spasm_close(PurpleConnection *connection) {
+_purple_spasm_close(PurpleConnection *connection) {
}
static GList *
-purple_spasm_get_status_types(PurpleAccount *account) {
+_purple_spasm_get_status_types(PurpleAccount *account) {
GList *types = NULL;
PurpleStatusType *status;
@@ -67,7 +67,7 @@
}
static void
-purple_spasm_set_status(PurpleAccount *account, PurpleStatus *status) {
+_purple_spasm_set_status(PurpleAccount *account, PurpleStatus *status) {
}
@@ -80,11 +80,11 @@
.options = OPT_PROTO_NO_PASSWORD,
.login = purple_spasm_login,
- .close = purple_spasm_close,
- .list_icon = purple_spasm_list_icon,
+ .close = _purple_spasm_close,
+ .list_icon = _purple_spasm_list_icon,
- .status_types = purple_spasm_get_status_types,
- .set_status = purple_spasm_set_status,
+ .status_types = _purple_spasm_get_status_types,
+ .set_status = _purple_spasm_set_status,
};
static PurplePluginInfo info = {
@@ -106,7 +106,7 @@
};
static void
-init_plugin(PurplePlugin *plugin) {
+_purple_spasm_init(PurplePlugin *plugin) {
}
-PURPLE_INIT_PLUGIN(purple_spasm, init_plugin, info);
+PURPLE_INIT_PLUGIN(purple_spasm, _purple_spasm_init, info);