Refactoring.

This commit is contained in:
Håvard Pettersson 2014-09-20 23:27:28 +02:00
parent f03103fa8f
commit e02d2c9b0e
7 changed files with 76 additions and 52 deletions

View File

@ -255,7 +255,7 @@ tox_weechat_cmd_friend(void *data, struct t_gui_buffer *buffer,
} }
char hex_address[TOX_CLIENT_ID_SIZE * 2 + 1]; char hex_address[TOX_CLIENT_ID_SIZE * 2 + 1];
tox_weechat_bin2hex(request->address, tox_weechat_bin2hex(request->tox_id,
TOX_CLIENT_ID_SIZE, TOX_CLIENT_ID_SIZE,
hex_address); hex_address);
@ -294,7 +294,7 @@ tox_weechat_cmd_friend(void *data, struct t_gui_buffer *buffer,
request = request->next_request) request = request->next_request)
{ {
char hex_address[TOX_CLIENT_ID_SIZE * 2 + 1]; char hex_address[TOX_CLIENT_ID_SIZE * 2 + 1];
tox_weechat_bin2hex(request->address, tox_weechat_bin2hex(request->tox_id,
TOX_CLIENT_ID_SIZE, TOX_CLIENT_ID_SIZE,
hex_address); hex_address);

View File

@ -92,7 +92,7 @@ tox_weechat_friend_request_remove(struct t_tox_weechat_friend_request *request)
} }
/** /**
* Accept a friend request. Removes and frees the request. * Accept a friend request. Remove and free the request.
*/ */
void void
tox_weechat_accept_friend_request(struct t_tox_weechat_friend_request *request) tox_weechat_accept_friend_request(struct t_tox_weechat_friend_request *request)
@ -101,6 +101,15 @@ tox_weechat_accept_friend_request(struct t_tox_weechat_friend_request *request)
tox_weechat_friend_request_remove(request); tox_weechat_friend_request_remove(request);
} }
/**
* Decline a friend request. Remove and free the request.
*/
void
tox_weechat_decline_friend_request(struct t_tox_weechat_friend_request *request)
{
tox_weechat_friend_request_remove(request);
}
/** /**
* Return the friend request from the identity with the number num. * Return the friend request from the identity with the number num.
*/ */

View File

@ -46,6 +46,9 @@ tox_weechat_friend_request_add(struct t_tox_weechat_identity *identity,
void void
tox_weechat_accept_friend_request(struct t_tox_weechat_friend_request *request); tox_weechat_accept_friend_request(struct t_tox_weechat_friend_request *request);
void
tox_weechat_decline_friend_request(struct t_tox_weechat_friend_request *request);
struct t_tox_weechat_friend_request * struct t_tox_weechat_friend_request *
tox_weechat_friend_request_with_num(struct t_tox_weechat_identity *identity, tox_weechat_friend_request_with_num(struct t_tox_weechat_identity *identity,
unsigned int num); unsigned int num);

View File

@ -34,6 +34,7 @@
#include "tox-weechat-chats.h" #include "tox-weechat-chats.h"
#include "tox-weechat-tox-callbacks.h" #include "tox-weechat-tox-callbacks.h"
#include "tox-weechat-utils.h" #include "tox-weechat-utils.h"
#include "tox-weechat-json.h"
#include "tox-weechat-identities.h" #include "tox-weechat-identities.h"
@ -229,11 +230,19 @@ tox_weechat_identity_connect(struct t_tox_weechat_identity *identity)
} }
weechat_printf(identity->buffer, weechat_printf(identity->buffer,
"%s%s: identity %s connecting", "%s%s: identity %s connecting...",
weechat_prefix("network"), weechat_prefix("network"),
weechat_plugin->name, weechat_plugin->name,
identity->name); identity->name);
if (identity->friend_request_count > 0)
{
weechat_printf(identity->buffer,
"%sYou have %d pending friend requests.",
weechat_prefix("network"),
identity->friend_request_count);
}
// create Tox // create Tox
identity->tox = tox_new(NULL); identity->tox = tox_new(NULL);
@ -253,14 +262,8 @@ tox_weechat_identity_connect(struct t_tox_weechat_identity *identity)
(uint8_t *)name, strlen(name)); (uint8_t *)name, strlen(name));
} }
// initialize friend requests // load JSON data
tox_weechat_friend_request_init_identity(identity); tox_weechat_json_identity_load(identity);
if (identity->friend_request_count > 0)
weechat_printf(identity->buffer,
"%sYou have %d pending friend requests.",
weechat_prefix("network"),
identity->friend_request_count);
// bootstrap DHT // bootstrap DHT
int max_bootstrap_nodes = 5; int max_bootstrap_nodes = 5;
@ -289,6 +292,9 @@ tox_weechat_identity_disconnect(struct t_tox_weechat_identity *identity)
if (!identity->tox) if (!identity->tox)
return; return;
// save JSON data
tox_weechat_json_identity_save(identity);
// save and kill tox // save and kill tox
int result = tox_weechat_save_identity_data_file(identity); int result = tox_weechat_save_identity_data_file(identity);
tox_kill(identity->tox); tox_kill(identity->tox);
@ -415,7 +421,6 @@ void
tox_weechat_identity_free(struct t_tox_weechat_identity *identity) tox_weechat_identity_free(struct t_tox_weechat_identity *identity)
{ {
// save friend requests // save friend requests
tox_weechat_friend_request_save_identity(identity);
tox_weechat_friend_request_free_identity(identity); tox_weechat_friend_request_free_identity(identity);
// disconnect // disconnect

View File

@ -38,12 +38,11 @@ struct t_tox_weechat_identity
struct t_config_option *options[TOX_WEECHAT_IDENTITY_NUM_OPTIONS]; struct t_config_option *options[TOX_WEECHAT_IDENTITY_NUM_OPTIONS];
struct Tox *tox; struct Tox *tox;
int tox_online;
struct t_gui_buffer *buffer; struct t_gui_buffer *buffer;
struct t_hook *tox_do_timer; struct t_hook *tox_do_timer;
int tox_online;
struct t_tox_weechat_chat *chats; struct t_tox_weechat_chat *chats;
struct t_tox_weechat_chat *last_chat; struct t_tox_weechat_chat *last_chat;

View File

@ -34,6 +34,8 @@ const char *tox_weechat_json_key_friend_requests = "friend_requests";
const char *tox_weechat_json_friend_request_key_client_id = "client_id"; const char *tox_weechat_json_friend_request_key_client_id = "client_id";
const char *tox_weechat_json_friend_request_key_message = "message"; const char *tox_weechat_json_friend_request_key_message = "message";
json_t *tox_weechat_json_data = NULL;
/** /**
* Return the full path to the JSON data file. * Return the full path to the JSON data file.
*/ */
@ -60,15 +62,15 @@ tox_weechat_json_get_identity_key(struct t_tox_weechat_identity *identity)
} }
/** /**
* Save an identity's data to a JSON object. * Save an identity's data.
*/ */
json_t * void
tox_weechat_json_identity_save(struct t_tox_weechat_identity *identity) tox_weechat_json_identity_save(struct t_tox_weechat_identity *identity)
{ {
json_t *json_data = json_object(); json_t *json_data = json_object();
json_t *friend_request_array = json_array(); json_t *friend_request_array = json_array();
if (!json_data || !friend_request_array) if (!json_data || !friend_request_array)
return NULL; return;
for (struct t_tox_weechat_friend_request *request = identity->friend_requests; for (struct t_tox_weechat_friend_request *request = identity->friend_requests;
request; request;
@ -102,17 +104,24 @@ tox_weechat_json_identity_save(struct t_tox_weechat_identity *identity)
friend_request_array); friend_request_array);
json_decref(friend_request_array); json_decref(friend_request_array);
return json_data; char *identity_key = tox_weechat_json_get_identity_key(identity);
json_object_set(tox_weechat_json_data, identity_key, json_data);
free(identity_key);
json_decref(json_data);
} }
/** /**
* Load an identity's data from a JSON object. * Load an identity's data from a JSON object.
*/ */
void void
tox_weechat_json_identity_load(struct t_tox_weechat_identity *identity, tox_weechat_json_identity_load(struct t_tox_weechat_identity *identity)
json_t *data)
{ {
json_t *friend_request_array = json_object_get(data, tox_weechat_json_key_friend_requests); char *identity_key = tox_weechat_json_get_identity_key(identity);
json_t *identity_data = json_object_get(tox_weechat_json_data, identity_key);
free(identity_key);
json_t *friend_request_array = json_object_get(identity_data,
tox_weechat_json_key_friend_requests);
if (friend_request_array) if (friend_request_array)
{ {
@ -141,7 +150,7 @@ tox_weechat_json_identity_load(struct t_tox_weechat_identity *identity,
} }
/** /**
* Load the JSON data on disk into the in-memory identity objects. * Load the JSON data on disk into memory.
*/ */
void void
tox_weechat_json_load() tox_weechat_json_load()
@ -149,22 +158,17 @@ tox_weechat_json_load()
char *full_path = tox_weechat_json_data_file_path(); char *full_path = tox_weechat_json_data_file_path();
json_error_t error; json_error_t error;
json_t *json_data = json_load_file(full_path, 0, &error); tox_weechat_json_data = json_load_file(full_path, 0, &error);
free(full_path); free(full_path);
if (json_data) if (!tox_weechat_json_data)
{ {
for (struct t_tox_weechat_identity *identity = tox_weechat_identities; weechat_printf(NULL,
identity; "%s%s: could not load on-disk data",
identity = identity->next_identity) weechat_prefix("error"),
{ weechat_plugin->name);
char *hex_id = tox_weechat_json_get_identity_key(identity);
json_t *identity_data = json_object_get(json_data, hex_id);
if (identity_data) tox_weechat_json_data = json_object();
tox_weechat_json_identity_load(identity, identity_data);
}
json_decref(json_data);
} }
} }
@ -175,28 +179,21 @@ tox_weechat_json_load()
int int
tox_weechat_json_save() tox_weechat_json_save()
{ {
json_t *json_data = json_object();
if (!json_data)
return -1;
for (struct t_tox_weechat_identity *identity = tox_weechat_identities;
identity;
identity = identity->next_identity)
{
char *hex_id = tox_weechat_json_get_identity_key(identity);
json_t *identity_data = tox_weechat_json_identity_save(identity);
json_object_set(json_data, hex_id, identity_data);
json_decref(identity_data);
}
char *full_path = tox_weechat_json_data_file_path(); char *full_path = tox_weechat_json_data_file_path();
int rc = json_dump_file(json_data, int rc = json_dump_file(tox_weechat_json_data,
full_path, full_path,
0); 0);
free(full_path); free(full_path);
json_decref(json_data);
return rc; return rc;
} }
/**
* Free in-memory JSON data.
*/
void
tox_weechat_json_free()
{
json_decref(tox_weechat_json_data);
}

View File

@ -26,10 +26,21 @@ extern const char *tox_weechat_json_key_friend_requests;
extern const char *tox_weechat_json_friend_request_key_client_id; extern const char *tox_weechat_json_friend_request_key_client_id;
extern const char *tox_weechat_json_friend_request_key_message; extern const char *tox_weechat_json_friend_request_key_message;
struct json_t;
void void
tox_weechat_json_load(); tox_weechat_json_load();
void
tox_weechat_json_identity_save(struct t_tox_weechat_identity *identity);
void
tox_weechat_json_identity_load(struct t_tox_weechat_identity *identity);
int int
tox_weechat_json_save(); tox_weechat_json_save();
void
tox_weechat_json_free();
#endif // TOX_WEECHAT_JSON_H #endif // TOX_WEECHAT_JSON_H