mirror of
https://github.com/Tha14/toxic.git
synced 2024-11-22 22:43:01 +01:00
Merge fix
This commit is contained in:
parent
36086f16c3
commit
399dd33b97
114
main.c
114
main.c
@ -25,6 +25,8 @@
|
|||||||
#include "prompt.h"
|
#include "prompt.h"
|
||||||
#include "friendlist.h"
|
#include "friendlist.h"
|
||||||
|
|
||||||
|
/* Export for use in Callbacks */
|
||||||
|
char *DATA_FILE = NULL;
|
||||||
|
|
||||||
void on_window_resize(int sig)
|
void on_window_resize(int sig)
|
||||||
{
|
{
|
||||||
@ -145,67 +147,90 @@ static void do_tox(Messenger *m, ToxWindow * prompt)
|
|||||||
doMessenger(m);
|
doMessenger(m);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void load_data(Messenger *m, char *path)
|
/*
|
||||||
|
* Store Messenger to given location
|
||||||
|
* Return 0 stored successfully
|
||||||
|
* Return 1 malloc failed
|
||||||
|
* Return 2 opening path failed
|
||||||
|
* Return 3 fwrite failed
|
||||||
|
*/
|
||||||
|
int store_data(Messenger *m, char *path)
|
||||||
{
|
{
|
||||||
FILE *fd;
|
FILE *fd;
|
||||||
size_t len;
|
size_t len;
|
||||||
uint8_t *buf;
|
uint8_t *buf;
|
||||||
|
|
||||||
if ((fd = fopen(path, "r")) != NULL) {
|
|
||||||
fseek(fd, 0, SEEK_END);
|
|
||||||
len = ftell(fd);
|
|
||||||
fseek(fd, 0, SEEK_SET);
|
|
||||||
|
|
||||||
buf = malloc(len);
|
|
||||||
if (buf == NULL) {
|
|
||||||
fprintf(stderr, "malloc() failed.\n");
|
|
||||||
fclose(fd);
|
|
||||||
endwin();
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
if (fread(buf, len, 1, fd) != 1){
|
|
||||||
fprintf(stderr, "fread() failed.\n");
|
|
||||||
free(buf);
|
|
||||||
fclose(fd);
|
|
||||||
endwin();
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
Messenger_load(m, buf, len);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
len = Messenger_size(m);
|
len = Messenger_size(m);
|
||||||
buf = malloc(len);
|
buf = malloc(len);
|
||||||
if (buf == NULL) {
|
if (buf == NULL) {
|
||||||
fprintf(stderr, "malloc() failed.\n");
|
return 1;
|
||||||
endwin();
|
|
||||||
exit(1);
|
|
||||||
}
|
}
|
||||||
Messenger_save(m, buf);
|
Messenger_save(m, buf);
|
||||||
|
|
||||||
fd = fopen(path, "w");
|
fd = fopen(path, "w");
|
||||||
if (fd == NULL) {
|
if (fd == NULL) {
|
||||||
fprintf(stderr, "fopen() failed.\n");
|
free(buf);
|
||||||
free(buf);
|
return 2;
|
||||||
endwin();
|
|
||||||
exit(1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fwrite(buf, len, 1, fd) != 1){
|
if (fwrite(buf, len, 1, fd) != 1) {
|
||||||
fprintf(stderr, "fwrite() failed.\n");
|
free(buf);
|
||||||
free(buf);
|
fclose(fd);
|
||||||
fclose(fd);
|
return 3;
|
||||||
endwin();
|
}
|
||||||
exit(1);
|
|
||||||
|
free(buf);
|
||||||
|
fclose(fd);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void load_data(Messenger *m, char *path)
|
||||||
|
{
|
||||||
|
FILE *fd;
|
||||||
|
size_t len;
|
||||||
|
uint8_t *buf;
|
||||||
|
|
||||||
|
if ((fd = fopen(path, "r")) != NULL) {
|
||||||
|
fseek(fd, 0, SEEK_END);
|
||||||
|
len = ftell(fd);
|
||||||
|
fseek(fd, 0, SEEK_SET);
|
||||||
|
|
||||||
|
buf = malloc(len);
|
||||||
|
if (buf == NULL) {
|
||||||
|
fprintf(stderr, "malloc() failed.\n");
|
||||||
|
fclose(fd);
|
||||||
|
endwin();
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
if (fread(buf, len, 1, fd) != 1) {
|
||||||
|
fprintf(stderr, "fread() failed.\n");
|
||||||
|
free(buf);
|
||||||
|
fclose(fd);
|
||||||
|
endwin();
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
Messenger_load(m, buf, len);
|
||||||
|
|
||||||
|
uint32_t i;
|
||||||
|
for (i = 0; i < m->numfriends; i++) {
|
||||||
|
on_friendadded(m, i);
|
||||||
|
}
|
||||||
|
|
||||||
|
free(buf);
|
||||||
|
fclose(fd);
|
||||||
|
} else {
|
||||||
|
int st;
|
||||||
|
if ((st = store_data(m, path)) != 0) {
|
||||||
|
fprintf(stderr, "Store messenger failed with return code: %d\n", st);
|
||||||
|
endwin();
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
free(buf);
|
|
||||||
fclose(fd);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
char *user_config_dir = get_user_config_dir();
|
char *user_config_dir = get_user_config_dir();
|
||||||
char *DATA_FILE = NULL;
|
|
||||||
int config_err = 0;
|
int config_err = 0;
|
||||||
|
|
||||||
int f_loadfromfile = 1;
|
int f_loadfromfile = 1;
|
||||||
@ -246,7 +271,6 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
if(f_loadfromfile)
|
if(f_loadfromfile)
|
||||||
load_data(m, DATA_FILE);
|
load_data(m, DATA_FILE);
|
||||||
free(DATA_FILE);
|
|
||||||
|
|
||||||
if (f_flag == -1) {
|
if (f_flag == -1) {
|
||||||
attron(COLOR_PAIR(3) | A_BOLD);
|
attron(COLOR_PAIR(3) | A_BOLD);
|
||||||
@ -268,6 +292,8 @@ int main(int argc, char *argv[])
|
|||||||
/* Draw */
|
/* Draw */
|
||||||
draw_active_window(m);
|
draw_active_window(m);
|
||||||
}
|
}
|
||||||
|
|
||||||
cleanupMessenger(m);
|
cleanupMessenger(m);
|
||||||
|
free(DATA_FILE);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
8
prompt.c
8
prompt.c
@ -16,7 +16,7 @@
|
|||||||
uint8_t pending_requests[MAX_STR_SIZE][CLIENT_ID_SIZE]; // XXX
|
uint8_t pending_requests[MAX_STR_SIZE][CLIENT_ID_SIZE]; // XXX
|
||||||
uint8_t num_requests=0; // XXX
|
uint8_t num_requests=0; // XXX
|
||||||
|
|
||||||
static friendAddedFn *on_friendadded;
|
static friendAddedFn *on_friendadded_cb;
|
||||||
static char prompt_buf[MAX_STR_SIZE] = {0};
|
static char prompt_buf[MAX_STR_SIZE] = {0};
|
||||||
static int prompt_buf_pos = 0;
|
static int prompt_buf_pos = 0;
|
||||||
|
|
||||||
@ -88,7 +88,7 @@ void cmd_accept(ToxWindow *self, Messenger *m, char **args)
|
|||||||
wprintw(self->window, "Failed to add friend.\n");
|
wprintw(self->window, "Failed to add friend.\n");
|
||||||
else {
|
else {
|
||||||
wprintw(self->window, "Friend accepted as: %d.\n", num);
|
wprintw(self->window, "Friend accepted as: %d.\n", num);
|
||||||
on_friendadded(m, num);
|
on_friendadded_cb(m, num);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -152,7 +152,7 @@ void cmd_add(ToxWindow *self, Messenger *m, char **args)
|
|||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
wprintw(self->window, "Friend added as %d.\n", num);
|
wprintw(self->window, "Friend added as %d.\n", num);
|
||||||
on_friendadded(m, num);
|
on_friendadded_cb(m, num);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -436,7 +436,7 @@ static void prompt_onInit(ToxWindow *self, Messenger *m)
|
|||||||
|
|
||||||
ToxWindow new_prompt(friendAddedFn *f)
|
ToxWindow new_prompt(friendAddedFn *f)
|
||||||
{
|
{
|
||||||
on_friendadded = f;
|
on_friendadded_cb = f;
|
||||||
ToxWindow ret;
|
ToxWindow ret;
|
||||||
memset(&ret, 0, sizeof(ret));
|
memset(&ret, 0, sizeof(ret));
|
||||||
ret.onKey = &prompt_onKey;
|
ret.onKey = &prompt_onKey;
|
||||||
|
@ -3,6 +3,9 @@
|
|||||||
#include "dhtstatus.h"
|
#include "dhtstatus.h"
|
||||||
#include "windows.h"
|
#include "windows.h"
|
||||||
|
|
||||||
|
extern char *DATA_FILE;
|
||||||
|
extern int store_data(Messenger *m, char *path);
|
||||||
|
|
||||||
/* Holds status of chat windows */
|
/* Holds status of chat windows */
|
||||||
char WINDOW_STATUS[MAX_WINDOW_SLOTS];
|
char WINDOW_STATUS[MAX_WINDOW_SLOTS];
|
||||||
|
|
||||||
@ -74,6 +77,9 @@ void on_statuschange(Messenger *m, int friendnumber, uint8_t *string, uint16_t l
|
|||||||
void on_friendadded(Messenger *m, int friendnumber)
|
void on_friendadded(Messenger *m, int friendnumber)
|
||||||
{
|
{
|
||||||
friendlist_onFriendAdded(m, friendnumber);
|
friendlist_onFriendAdded(m, friendnumber);
|
||||||
|
if (store_data(m, DATA_FILE) != 0) {
|
||||||
|
wprintw(prompt->window, "\nCould not store Messenger data\n");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
/* CALLBACKS END */
|
/* CALLBACKS END */
|
||||||
|
|
||||||
|
@ -47,6 +47,7 @@ void on_message(Messenger *m, int friendnumber, uint8_t *string, uint16_t length
|
|||||||
void on_action(Messenger *m, int friendnumber, uint8_t *string, uint16_t length, void* userdata);
|
void on_action(Messenger *m, int friendnumber, uint8_t *string, uint16_t length, void* userdata);
|
||||||
void on_nickchange(Messenger *m, int friendnumber, uint8_t *string, uint16_t length, void* userdata);
|
void on_nickchange(Messenger *m, int friendnumber, uint8_t *string, uint16_t length, void* userdata);
|
||||||
void on_statuschange(Messenger *m, int friendnumber, uint8_t *string, uint16_t length, void* userdata);
|
void on_statuschange(Messenger *m, int friendnumber, uint8_t *string, uint16_t length, void* userdata);
|
||||||
|
void on_friendadded(Messenger *m, int friendnumber);
|
||||||
void init_window_status();
|
void init_window_status();
|
||||||
ToxWindow * init_windows();
|
ToxWindow * init_windows();
|
||||||
void draw_active_window(Messenger * m);
|
void draw_active_window(Messenger * m);
|
||||||
|
Loading…
Reference in New Issue
Block a user