~ubuntu-branches/debian/wheezy/foxtrotgps/wheezy

« back to all changes in this revision

Viewing changes to .pc/01-curl.patch/src/friends.c

  • Committer: Package Import Robot
  • Author(s): Daniel Baumann
  • Date: 2012-02-14 06:13:28 UTC
  • mfrom: (1.1.3)
  • Revision ID: package-import@ubuntu.com-20120214061328-zo4mu0rvgz06q5nw
Tags: 1.1.0-1
* Using compression level 9 also for binary packages.
* Merging upstream version 1.1.0:
  - includes osb2tango and poi2osm (Closes: #647986).
* Removing curl.patch, included upstream.
* Updating to debhelper version 9.
* Updating years in copyright.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
 
2
 
#include "callbacks.h"
3
 
#include "friends.h"
4
 
#include "globals.h"
5
 
#include "converter.h"
6
 
#include "interface.h"
7
 
#include "support.h"
8
 
#include "wp.h"
9
 
#include "util.h"
10
 
#include "map_management.h"
11
 
 
12
 
#include <stdio.h>
13
 
#include <stdlib.h>
14
 
#include <string.h>
15
 
#include <glib.h>
16
 
#include <glib/gprintf.h>
17
 
#include <gtk/gtk.h>
18
 
 
19
 
#include <curl/curl.h>
20
 
#include <curl/types.h>
21
 
#include <curl/easy.h>
22
 
 
23
 
 
24
 
 
25
 
void
26
 
on_msg_friend_clicked(GtkButton *button, gpointer user_data);
27
 
 
28
 
void
29
 
on_goto_friend_clicked(GtkButton *button, gpointer user_data);
30
 
 
31
 
void
32
 
on_msg_send_clicked(GtkButton *button, gpointer user_data);
33
 
 
34
 
 
35
 
void *
36
 
thread_send_message(void *ptr);
37
 
 
38
 
GSList*
39
 
create_msg_postdata(msg_t *m);
40
 
 
41
 
void
42
 
process_msg_replydata(postreply_t *postreply);
43
 
 
44
 
void
45
 
add_message(msg_t *m);
46
 
 
47
 
GtkWidget*
48
 
create_msg_box(msg_t *m);
49
 
 
50
 
void
51
 
on_goto_friend2_clicked(GtkButton *button, gpointer user_data);
52
 
 
53
 
 
54
 
 
55
 
 
56
 
struct mem_struct {
57
 
        char *memory;
58
 
        size_t size;
59
 
};
60
 
 
61
 
 
62
 
static size_t
63
 
cb_write_to_mem(void *ptr, size_t size, size_t nmemb, void *data)
64
 
{
65
 
        size_t realsize         = size * nmemb;
66
 
        struct mem_struct *mem  = (struct mem_struct *)data;
67
 
        
68
 
        mem->memory = (char *)g_realloc(mem->memory, mem->size + realsize + 1);
69
 
        
70
 
        if (mem->memory)
71
 
        {
72
 
                memcpy(&(mem->memory[mem->size]), ptr, realsize);
73
 
                mem->size += realsize;
74
 
                mem->memory[mem->size] = 0;
75
 
        }
76
 
        return realsize;
77
 
}
78
 
 
79
 
static GdkPixbuf        *friend_icon = NULL;
80
 
static GdkGC            *gc_map = NULL;
81
 
static char             *db_ts_last_request_friends = NULL;
82
 
 
83
 
 
84
 
 
85
 
 
86
 
 
87
 
 
88
 
 
89
 
 
90
 
 
91
 
 
92
 
 
93
 
 
94
 
 
95
 
 
96
 
 
97
 
 
98
 
 
99
 
 
100
 
gboolean
101
 
update_position()
102
 
{               
103
 
        GtkLabel *label_msg;
104
 
        label_msg = (GtkLabel *)lookup_widget(window1, "label51");
105
 
        gtk_label_set_label(label_msg, "Connecting...");
106
 
 
107
 
        if (!g_thread_create(&update_position_thread, NULL, FALSE, NULL) != 0)
108
 
                g_warning("### can't create friend thread\n");
109
 
 
110
 
        return TRUE;    
111
 
}
112
 
        
113
 
void *
114
 
update_position_thread(void *ptr)
115
 
{
116
 
        int i=1;
117
 
        
118
 
        GtkEntry *nick, *pass, *email, *msg;
119
 
        GtkLabel *label_msg;
120
 
        const gchar *n, *p, *e, *m;     
121
 
        gchar *ff_mode;
122
 
        static gchar lat[64], lon[64], mode[64];
123
 
        static gchar alt[16] = "0", speed[16] = "0", head[16]="0";
124
 
        
125
 
        
126
 
        gchar **user_data_sets;
127
 
        long int response_code;
128
 
        
129
 
        CURL *curl_handle;
130
 
        
131
 
        struct curl_httppost *formdata=NULL;
132
 
        struct curl_httppost *lastptr=NULL;
133
 
                
134
 
        struct mem_struct chunk;
135
 
        
136
 
        chunk.memory=NULL;
137
 
        chunk.size = 0;
138
 
        
139
 
 
140
 
gdk_threads_enter();
141
 
        
142
 
        label_msg = (GtkLabel *)lookup_widget(window1, "label51");
143
 
 
144
 
        
145
 
        nick  = (GtkEntry *)lookup_widget(window1, "entry7");
146
 
        pass  = (GtkEntry *)lookup_widget(window1, "entry8");
147
 
        email = (GtkEntry *)lookup_widget(window1, "entry9");
148
 
        msg   = (GtkEntry *)lookup_widget(window1, "entry29");
149
 
 
150
 
        switch (global_ff_mode) {
151
 
        case PRIVATE_MODE: 
152
 
                ff_mode = g_strdup("private");
153
 
                break;
154
 
        case FRIEND_MODE:
155
 
                ff_mode = g_strdup("friends");
156
 
                break;
157
 
        case FUN_MODE:
158
 
                ff_mode = g_strdup("fun");
159
 
                break;
160
 
        default:
161
 
                ff_mode = g_strdup("");
162
 
        }
163
 
        
164
 
        n = gtk_entry_get_text(nick);
165
 
        p = gtk_entry_get_text(pass);
166
 
        e = gtk_entry_get_text(email);
167
 
        m = gtk_entry_get_text(msg);
168
 
 
169
 
gdk_threads_leave();
170
 
        
171
 
        
172
 
        if (global_myposition.lat && global_myposition.lon)
173
 
        {
174
 
                g_sprintf(lat, "%f", global_myposition.lat);
175
 
                g_sprintf(lon, "%f", global_myposition.lon);
176
 
                g_sprintf(mode, "%s|%dx%d", "man", global_drawingarea_width, global_drawingarea_height);                
177
 
        }
178
 
        else if (gpsdata && gpsdata->fix.latitude !=0)
179
 
        {
180
 
                g_sprintf(lat, "%f", gpsdata->fix.latitude);
181
 
                g_sprintf(lon, "%f", gpsdata->fix.longitude);
182
 
                g_sprintf(mode, "%s|%dx%d", "gps", global_drawingarea_width, global_drawingarea_height);                
183
 
        }
184
 
        else
185
 
        {
186
 
                float tmplat, tmplon;
187
 
                
188
 
                tmplat = rad2deg( pixel2lat(global_zoom, global_y+global_drawingarea_height/2) );
189
 
                tmplon = rad2deg( pixel2lon(global_zoom, global_x+global_drawingarea_width/2) );
190
 
                g_sprintf(lat, "%f", tmplat);
191
 
                g_sprintf(lon, "%f", tmplon);
192
 
                g_sprintf(mode, "%s|%dx%d", "atm", global_drawingarea_width, global_drawingarea_height);                
193
 
        }
194
 
        
195
 
        
196
 
        if(gpsdata)
197
 
        {
198
 
                g_snprintf(alt, 16, "%.1f", gpsdata->fix.altitude);
199
 
                g_snprintf(head, 16, "%.1f", gpsdata->fix.heading);
200
 
                g_snprintf(speed, 16, "%.1f", gpsdata->fix.speed);
201
 
        }
202
 
        
203
 
        curl_global_init(CURL_GLOBAL_ALL);
204
 
 
205
 
        curl_formadd(&formdata,
206
 
               &lastptr,
207
 
               CURLFORM_COPYNAME, "lat",
208
 
               CURLFORM_COPYCONTENTS, lat,
209
 
               CURLFORM_END);
210
 
 
211
 
        curl_formadd(&formdata,
212
 
               &lastptr,
213
 
               CURLFORM_COPYNAME, "lon",
214
 
               CURLFORM_COPYCONTENTS, lon,
215
 
               CURLFORM_END);
216
 
        
217
 
        curl_formadd(&formdata,
218
 
               &lastptr,
219
 
               CURLFORM_COPYNAME, "alt",
220
 
               CURLFORM_COPYCONTENTS, alt,
221
 
               CURLFORM_END);
222
 
 
223
 
        curl_formadd(&formdata,
224
 
               &lastptr,
225
 
               CURLFORM_COPYNAME, "head",
226
 
               CURLFORM_COPYCONTENTS, head,
227
 
               CURLFORM_END);
228
 
 
229
 
        curl_formadd(&formdata,
230
 
               &lastptr,
231
 
               CURLFORM_COPYNAME, "speed",
232
 
               CURLFORM_COPYCONTENTS, speed,
233
 
               CURLFORM_END);
234
 
 
235
 
        curl_formadd(&formdata,
236
 
               &lastptr,
237
 
               CURLFORM_COPYNAME, "mode",
238
 
               CURLFORM_COPYCONTENTS, mode,
239
 
               CURLFORM_END);
240
 
               
241
 
        curl_formadd(&formdata,
242
 
               &lastptr,
243
 
               CURLFORM_COPYNAME, "ff_mode",
244
 
               CURLFORM_COPYCONTENTS, ff_mode,
245
 
               CURLFORM_END);
246
 
 
247
 
        curl_formadd(&formdata,
248
 
               &lastptr,
249
 
               CURLFORM_COPYNAME, "nick",
250
 
               CURLFORM_COPYCONTENTS, n,
251
 
               CURLFORM_END);
252
 
 
253
 
        curl_formadd(&formdata,
254
 
               &lastptr,
255
 
               CURLFORM_COPYNAME, "pass",
256
 
               CURLFORM_COPYCONTENTS, p,
257
 
               CURLFORM_END);
258
 
 
259
 
        curl_formadd(&formdata,
260
 
               &lastptr,
261
 
               CURLFORM_COPYNAME, "msg",
262
 
               CURLFORM_COPYCONTENTS, m,
263
 
               CURLFORM_END);
264
 
               
265
 
               
266
 
        curl_handle = curl_easy_init();
267
 
        
268
 
        curl_easy_setopt(curl_handle, CURLOPT_URL, "http://www.tangogps.org/friends/update_pos.php");
269
 
        curl_easy_setopt(curl_handle, CURLOPT_HTTPPOST, formdata);
270
 
        curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, cb_write_to_mem);
271
 
        curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (void *)&chunk);
272
 
        curl_easy_setopt(curl_handle, CURLOPT_USERAGENT,  VERSION );
273
 
 
274
 
        curl_easy_perform(curl_handle);
275
 
        curl_easy_getinfo(curl_handle, CURLINFO_RESPONSE_CODE, &response_code);
276
 
        
277
 
        
278
 
        curl_easy_cleanup(curl_handle);
279
 
        
280
 
        
281
 
        
282
 
        
283
 
        
284
 
        
285
 
 
286
 
 
287
 
        if (response_code == 200) 
288
 
        { 
289
 
                
290
 
                
291
 
                
292
 
                
293
 
 
294
 
                user_data_sets = g_strsplit_set (chunk.memory, "|", -1);
295
 
        
296
 
                        
297
 
                gdk_threads_enter();
298
 
                g_slist_free(friends_list);
299
 
                friends_list = NULL;
300
 
                gtk_label_set_label(label_msg, user_data_sets[0]); 
301
 
                gdk_threads_leave();
302
 
                
303
 
                while (user_data_sets[i] && !g_str_equal(user_data_sets[i],"EOD") )
304
 
                {
305
 
                        gchar **array;
306
 
                        int len=0;
307
 
                        friend_t *friend = g_new0(friend_t,1);
308
 
                        
309
 
                        array = g_strsplit(user_data_sets[i],"#",-1);
310
 
                        while (array[len]) len++;
311
 
                        
312
 
                        
313
 
                        
314
 
                        
315
 
                        
316
 
                        if(len>=7)
317
 
                        {
318
 
                                friend->type = atoi(g_strdup(array[0]));
319
 
                                friend->nick  = g_strdup(array[1]);
320
 
                                friend->lat = atof(g_strdup(array[2]));
321
 
                                friend->lon = atof(g_strdup(array[3]));
322
 
                                friend->head = atoi(g_strdup(array[4]));
323
 
                                friend->lastseen = g_strdup(array[5]);
324
 
                                friend->away_msg = g_strdup(array[6]);
325
 
                                
326
 
                                friends_list = g_slist_append(friends_list, friend);
327
 
                        }
328
 
                        
329
 
                        
330
 
                        i++;
331
 
                }
332
 
        }
333
 
        else
334
 
        {
335
 
                gdk_threads_enter();
336
 
                gtk_label_set_text(label_msg, "No response (200)"); 
337
 
                gdk_threads_leave();
338
 
                
339
 
        }
340
 
        
341
 
        
342
 
        
343
 
        
344
 
        gdk_threads_enter();
345
 
        repaint_all();
346
 
        gdk_threads_leave();
347
 
        
348
 
        
349
 
        if(chunk.memory)
350
 
                g_free(chunk.memory);
351
 
        
352
 
        curl_global_cleanup();
353
 
        
354
 
        g_free(ff_mode);
355
 
 
356
 
        return NULL;
357
 
}
358
 
 
359
 
void
360
 
paint_friends()
361
 
{       
362
 
        GSList *list;
363
 
        int pixel_x, pixel_y, x,y;
364
 
        float lat, lon;
365
 
        GdkColor color;
366
 
        GdkGC *gc;
367
 
        GError  *error = NULL;
368
 
        
369
 
        gc = gdk_gc_new(pixmap);
370
 
        color.green = 60000;
371
 
        color.blue = 0;
372
 
        color.red = 10000;
373
 
        gdk_gc_set_rgb_fg_color(gc, &color);
374
 
        
375
 
 
376
 
        if(!friend_icon)
377
 
        {
378
 
                friend_icon = gdk_pixbuf_new_from_file_at_size (
379
 
                        PACKAGE_PIXMAPS_DIR "/" PACKAGE "-friend.png", 24,24,
380
 
                        &error);
381
 
        }
382
 
        if (pixmap && !gc_map)  
383
 
                gc_map = gdk_gc_new(pixmap);
384
 
                
385
 
        
386
 
        if (global_show_friends)
387
 
                {
388
 
                for(list = friends_list; list != NULL; list = list->next)
389
 
                {
390
 
                        friend_t *f = list->data;
391
 
                
392
 
                        lat = deg2rad(f->lat);
393
 
                        lon = deg2rad(f->lon);
394
 
                        
395
 
                        
396
 
                        
397
 
                        
398
 
                        pixel_x = lon2pixel(global_zoom, lon);
399
 
                        pixel_y = lat2pixel(global_zoom, lat);
400
 
                        
401
 
                        x = pixel_x - global_x;
402
 
                        y = pixel_y - global_y;
403
 
                        
404
 
                        f->screen_x = x;
405
 
                        f->screen_y = y;
406
 
                        
407
 
                        
408
 
                        
409
 
                        if(!friend_icon)
410
 
                        {
411
 
                                gdk_draw_arc (
412
 
                                        pixmap,
413
 
                                        
414
 
                                        gc,
415
 
                                        TRUE,                   
416
 
                                        x-4, y-4,               
417
 
                                        8,8,                    
418
 
                                        0,23040);               
419
 
                        }
420
 
                        else
421
 
                        {
422
 
                                gdk_draw_pixbuf (
423
 
                                        pixmap,
424
 
                                        gc_map,
425
 
                                        friend_icon,
426
 
                                        0,0,
427
 
                                        x-12,y-12,
428
 
                                        24,24,
429
 
                                        GDK_RGB_DITHER_NONE, 0, 0);
430
 
                                
431
 
                                gtk_widget_queue_draw_area (
432
 
                                        map_drawable, 
433
 
                                        x-12, y-12,
434
 
                                        24,24);
435
 
                        }
436
 
                        
437
 
                }
438
 
        }
439
 
}
440
 
 
441
 
void
442
 
update_position0()
443
 
{
444
 
        CURL *curl;
445
 
        CURLcode res;
446
 
 
447
 
        printf("*** %s(): \n",__PRETTY_FUNCTION__);
448
 
        
449
 
        curl = curl_easy_init();
450
 
        
451
 
        if(curl)
452
 
        {
453
 
                curl_easy_setopt(curl, CURLOPT_URL, 
454
 
                                "127.0.0.1/friends/update_position.php?lat=1&lon=1");
455
 
                res = curl_easy_perform(curl);
456
 
                
457
 
                curl_easy_cleanup(curl);
458
 
        }
459
 
        
460
 
}
461
 
 
462
 
 
463
 
 
464
 
 
465
 
 
466
 
 
467
 
int
468
 
register_nick()
469
 
{               
470
 
        GtkLabel *label_msg;
471
 
        label_msg = (GtkLabel *)lookup_widget(window1, "label62");
472
 
        gtk_label_set_text(label_msg, "Connecting...");
473
 
 
474
 
        printf("*** %s(): \n",__PRETTY_FUNCTION__);
475
 
 
476
 
        if (!g_thread_create(&register_nick_thread, NULL, FALSE, NULL) != 0)
477
 
                g_warning("### can't create register_nick() thread\n");
478
 
        
479
 
        return 0;
480
 
}
481
 
        
482
 
void *
483
 
register_nick_thread(void *ptr)
484
 
{
485
 
        
486
 
        GtkEntry *nick, *pass, *email;
487
 
        GtkLabel *label_msg;
488
 
        const gchar *n, *p, *e;
489
 
        gchar *buffer;
490
 
        
491
 
        
492
 
        
493
 
        CURL *curl_handle;
494
 
        
495
 
        struct curl_httppost *formdata=NULL;
496
 
        struct curl_httppost *lastptr=NULL;
497
 
                
498
 
        struct mem_struct chunk;
499
 
        
500
 
        chunk.memory=NULL;
501
 
        chunk.size = 0;
502
 
        
503
 
        printf("*** %s(): \n",__PRETTY_FUNCTION__);
504
 
 
505
 
 
506
 
 
507
 
        
508
 
        nick  = (GtkEntry *)lookup_widget(window1, "entry7");
509
 
        pass  = (GtkEntry *)lookup_widget(window1, "entry8");
510
 
        email = (GtkEntry *)lookup_widget(window1, "entry9");
511
 
 
512
 
        n = gtk_entry_get_text(nick);
513
 
        p = gtk_entry_get_text(pass);
514
 
        e = gtk_entry_get_text(email);
515
 
 
516
 
        
517
 
        curl_global_init(CURL_GLOBAL_ALL);
518
 
 
519
 
               
520
 
        curl_formadd(&formdata,
521
 
               &lastptr,
522
 
               CURLFORM_COPYNAME, "nick",
523
 
               CURLFORM_COPYCONTENTS, n,
524
 
               CURLFORM_END);
525
 
 
526
 
        curl_formadd(&formdata,
527
 
               &lastptr,
528
 
               CURLFORM_COPYNAME, "pass",
529
 
               CURLFORM_COPYCONTENTS, p,
530
 
               CURLFORM_END);
531
 
 
532
 
        curl_formadd(&formdata,
533
 
               &lastptr,
534
 
               CURLFORM_COPYNAME, "email",
535
 
               CURLFORM_COPYCONTENTS, e,
536
 
               CURLFORM_END);
537
 
 
538
 
               
539
 
               
540
 
        curl_handle = curl_easy_init();
541
 
        
542
 
        curl_easy_setopt(curl_handle, CURLOPT_URL, "http://www.tangogps.org/friends/register_nick.php");
543
 
        curl_easy_setopt(curl_handle, CURLOPT_HTTPPOST, formdata);
544
 
        curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, cb_write_to_mem);
545
 
        curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (void *)&chunk);
546
 
        curl_easy_setopt(curl_handle, CURLOPT_USERAGENT, "libcurl-agent/1.0");
547
 
 
548
 
 
549
 
        curl_easy_perform(curl_handle);
550
 
        curl_easy_cleanup(curl_handle);
551
 
 
552
 
        printf("REPLY: %s %d \n",chunk.memory, (int)chunk.size);
553
 
 
554
 
        if((int)chunk.size > 0){
555
 
                buffer = g_strdup(chunk.memory);
556
 
        }
557
 
        else
558
 
                buffer = g_strdup("Oh. Some error occurred...");
559
 
 
560
 
        gdk_threads_enter();
561
 
        label_msg = (GtkLabel *)lookup_widget(window1, "label62");
562
 
        gtk_label_set_text(label_msg, buffer); 
563
 
        gdk_threads_leave();
564
 
        
565
 
 
566
 
        
567
 
        
568
 
        
569
 
        curl_global_cleanup();
570
 
        
571
 
        return NULL;
572
 
}
573
 
 
574
 
 
575
 
GtkWidget*
576
 
create_friend_box(friend_t *f)
577
 
{
578
 
        GtkWidget *hbox, *label, *vbox, *button;
579
 
        char *label_txt;
580
 
        
581
 
        label_txt = g_strdup_printf("<b>%s</b>\nLast seen:\n%s\n<i>%s</i>",f->nick, f->lastseen, f->away_msg);
582
 
        
583
 
        hbox = gtk_hbox_new (FALSE, 2);
584
 
        gtk_widget_show (hbox);
585
 
        
586
 
        label = gtk_label_new ("");
587
 
        gtk_label_set_use_markup (GTK_LABEL (label), TRUE);
588
 
 
589
 
        gtk_label_set_label(GTK_LABEL(label), label_txt);
590
 
        
591
 
        gtk_widget_show (label);
592
 
        gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0);
593
 
        
594
 
        vbox = gtk_vbox_new (FALSE, 0);
595
 
        gtk_widget_show (vbox);
596
 
        gtk_box_pack_start (GTK_BOX (hbox), vbox, TRUE, TRUE, 0);
597
 
        
598
 
        button = gtk_button_new_with_mnemonic (_("Msg"));
599
 
        gtk_widget_show (button);
600
 
        gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 2);
601
 
        
602
 
        g_signal_connect ((gpointer) button, "clicked",
603
 
                                G_CALLBACK (on_msg_friend_clicked),
604
 
                                (gpointer) f->nick);
605
 
                                
606
 
        button = gtk_button_new_with_mnemonic (_("Go To"));
607
 
        gtk_widget_show (button);
608
 
        gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 2);
609
 
        
610
 
        g_signal_connect ((gpointer) button, "clicked",
611
 
                                G_CALLBACK (on_goto_friend_clicked),
612
 
                                (gpointer) f);
613
 
        return hbox;
614
 
}
615
 
 
616
 
 
617
 
void
618
 
on_msg_friend_clicked(GtkButton *button, gpointer user_data)
619
 
{
620
 
        GladeXML *gladexml;
621
 
        GtkWidget *widget, *window;
622
 
        char *label_txt;
623
 
        char *to;
624
 
        
625
 
        to = user_data;
626
 
        label_txt = g_strdup_printf("Send Message To: <b>%s</b>", to);
627
 
        
628
 
        printf("* %s() %s\n", __PRETTY_FUNCTION__, label_txt);
629
 
        
630
 
        widget = lookup_widget(GTK_WIDGET(button), "window8");
631
 
        gtk_widget_destroy(widget);
632
 
        
633
 
        gladexml = glade_xml_new (gladefile, "dialog9", GETTEXT_PACKAGE);
634
 
        glade_xml_signal_autoconnect (gladexml);
635
 
        window = glade_xml_get_widget (gladexml, "dialog9");
636
 
        g_signal_connect_swapped (window, "destroy",
637
 
                                  G_CALLBACK (g_object_unref), gladexml);
638
 
 
639
 
        gtk_widget_show(window);
640
 
 
641
 
        widget = lookup_widget(window, "label188");     
642
 
        gtk_label_set_label(GTK_LABEL(widget), label_txt);
643
 
 
644
 
        widget = lookup_widget(window, "okbutton10");
645
 
        g_signal_connect ((gpointer) GTK_BUTTON(widget), "clicked",
646
 
                                G_CALLBACK (on_msg_send_clicked),
647
 
                                (gpointer) to);
648
 
 
649
 
}
650
 
 
651
 
void
652
 
on_goto_friend_clicked(GtkButton *button, gpointer user_data)
653
 
{
654
 
        GtkWidget *widget;
655
 
        
656
 
        friend_t *f;
657
 
        f = user_data;
658
 
        
659
 
        printf("btn42 clicked: %s\n", f->nick);
660
 
        
661
 
        widget = lookup_widget(GTK_WIDGET(button), "window8");
662
 
        set_current_wp(deg2rad(f->lat), deg2rad(f->lon));
663
 
        gtk_widget_destroy(widget);
664
 
}
665
 
 
666
 
void
667
 
on_msg_send_clicked(GtkButton *button, gpointer user_data)
668
 
{
669
 
        GtkWidget *widget;
670
 
        char *to;
671
 
        msg_t *m;
672
 
        
673
 
        to = user_data;
674
 
        m = g_new0(msg_t,1);
675
 
        
676
 
        widget = lookup_widget(GTK_WIDGET(button), "entry30");
677
 
        m->txt = g_strdup( gtk_entry_get_text(GTK_ENTRY(widget)) );
678
 
        m->to = g_strdup(to);
679
 
        if (global_myposition.lat && global_myposition.lon)
680
 
        {
681
 
                m->lat = global_myposition.lat;
682
 
                m->lon = global_myposition.lon;
683
 
        }
684
 
        else if (gpsdata)
685
 
        {
686
 
                m->lat = gpsdata->fix.latitude;
687
 
                m->lon = gpsdata->fix.longitude;
688
 
        }
689
 
        else
690
 
        {
691
 
                m->lat = 0;
692
 
                m->lon = 0;
693
 
        }
694
 
                
695
 
        printf("* %s() %s %s %f %f\n", __PRETTY_FUNCTION__, to, m->txt, m->lat,m->lon);
696
 
        
697
 
        add_message(m);
698
 
        send_message((gpointer) m);
699
 
        widget = lookup_widget(GTK_WIDGET(button), "dialog9");
700
 
        gtk_widget_destroy(widget);
701
 
}
702
 
 
703
 
gboolean
704
 
send_message(gpointer user_data)
705
 
{
706
 
        GSList *postdata = NULL;
707
 
        msg_t *m;
708
 
        
709
 
        m = user_data;
710
 
 
711
 
        postdata = create_msg_postdata(m);
712
 
 
713
 
        if (!g_thread_create(&thread_send_message, postdata, FALSE, NULL) != 0)
714
 
                g_warning("### can't create mission thread\n");
715
 
        
716
 
        return TRUE;
717
 
}
718
 
 
719
 
void *
720
 
thread_send_message(void *ptr)
721
 
{
722
 
        
723
 
        GSList          *postdata = NULL;
724
 
        postreply_t     *postreply;
725
 
        
726
 
                
727
 
 
728
 
        postdata = ptr;
729
 
 
730
 
        
731
 
        postreply = mycurl__do_http_post(MSG_SEND_URL, postdata, VERSION);
732
 
        
733
 
 
734
 
        
735
 
        
736
 
        gdk_threads_enter();
737
 
        process_msg_replydata(postreply);
738
 
        gdk_threads_leave();
739
 
 
740
 
        
741
 
        
742
 
        
743
 
        g_slist_free(postdata);
744
 
        g_free(postreply);
745
 
        
746
 
        return NULL;
747
 
}
748
 
 
749
 
GSList*
750
 
create_msg_postdata(msg_t *m)
751
 
{
752
 
        GSList          *postdata = NULL;
753
 
        const char *n, *p;
754
 
        postdata_item_t *item;
755
 
 
756
 
                
757
 
        
758
 
        
759
 
        n = gtk_entry_get_text((GtkEntry *)lookup_widget(window1, "entry7"));
760
 
        p = gtk_entry_get_text((GtkEntry *)lookup_widget(window1, "entry8"));
761
 
        
762
 
        item = g_new0(postdata_item_t, 1);
763
 
        item->name=g_strdup("user");
764
 
        item->value=g_strdup(n);
765
 
        postdata = g_slist_append(postdata, item);
766
 
 
767
 
        item = g_new0(postdata_item_t, 1);
768
 
        item->name=g_strdup("pass");
769
 
        item->value=g_strdup(p);
770
 
        postdata = g_slist_append(postdata, item);
771
 
        
772
 
        
773
 
 
774
 
        if(m)
775
 
        {
776
 
                
777
 
                item = g_new0(postdata_item_t, 1);
778
 
                item->name=g_strdup("lat");
779
 
                item->value=g_strdup_printf("%f", m->lat);
780
 
                postdata = g_slist_append(postdata, item);
781
 
                
782
 
                item = g_new0(postdata_item_t, 1);
783
 
                item->name=g_strdup("lon");
784
 
                item->value=g_strdup_printf("%f", m->lon);
785
 
                postdata = g_slist_append(postdata, item);      
786
 
                
787
 
                item = g_new0(postdata_item_t, 1);
788
 
                item->name=g_strdup("txt");
789
 
                item->value=g_strdup_printf("%s", m->txt);
790
 
                postdata = g_slist_append(postdata, item);      
791
 
                
792
 
                item = g_new0(postdata_item_t, 1);
793
 
                item->name=g_strdup("to");
794
 
                item->value=g_strdup_printf("%s", m->to);
795
 
                postdata = g_slist_append(postdata, item);      
796
 
        }
797
 
 
798
 
        
799
 
        
800
 
        if(db_ts_last_request_friends)
801
 
        {
802
 
                item = g_new0(postdata_item_t, 1);
803
 
                item->name=g_strdup("db_ts_last_request_friends");
804
 
                item->value=g_strdup(db_ts_last_request_friends);
805
 
                postdata = g_slist_append(postdata, item);
806
 
        }
807
 
        
808
 
        return postdata;
809
 
}
810
 
 
811
 
 
812
 
void
813
 
process_msg_replydata(postreply_t *postreply)
814
 
{
815
 
        GtkWidget *widget;
816
 
        char **arr0 = NULL, **arr = NULL;
817
 
        msg_t *msg = NULL;
818
 
        int i = 1;
819
 
        static gboolean first_call = TRUE;
820
 
        
821
 
        
822
 
        
823
 
        widget = lookup_widget(window1, "label132");
824
 
        
825
 
        
826
 
        
827
 
        
828
 
        if(postreply->status_code == 200 && postreply->size > 0)
829
 
        {
830
 
                arr0 = g_strsplit (postreply->data, "###", -1);
831
 
                
832
 
                
833
 
                
834
 
                if (arr0[0] && strlen(arr0[0]))
835
 
                {
836
 
                        char *err_msg;
837
 
                        
838
 
                        arr = g_strsplit (arr0[0], "|", -1);
839
 
                        
840
 
                        err_msg = g_strdup(arr[4]);
841
 
                        gtk_label_set_label(GTK_LABEL(widget), err_msg );
842
 
 
843
 
                        
844
 
                        if(atoi(arr[6]) > 0)
845
 
                        {
846
 
                                
847
 
                                db_ts_last_request_friends = g_strdup(arr[2]);
848
 
                                
849
 
                                if(first_call)
850
 
                                {
851
 
                                        GtkWidget *widget = NULL;
852
 
                                        
853
 
                                        widget = lookup_widget(window1, "button35");
854
 
                                        gtk_widget_show(widget);
855
 
                                        
856
 
                                        first_call = FALSE;
857
 
                                }
858
 
                                else
859
 
                                        global_new_msg = TRUE;
860
 
                        }
861
 
                        
862
 
                        
863
 
                        
864
 
                        g_strfreev(arr);
865
 
                }
866
 
                
867
 
                
868
 
                while (arr0[i] && strlen(arr0[i]) )
869
 
                {
870
 
 
871
 
                        
872
 
                        msg = g_new0(msg_t, 1);
873
 
                        
874
 
                        
875
 
                        arr = g_strsplit (arr0[i], "|||", -1);
876
 
                        
877
 
                        
878
 
                        
879
 
                        
880
 
                        msg->id         = atoi(arr[1]);
881
 
                        msg->time       = g_strdup(arr[2]);
882
 
                        msg->txt        = g_strdup(arr[3]);
883
 
                        msg->from       = g_strdup(arr[4]);
884
 
                        msg->to         = g_strdup(arr[5]);
885
 
                        msg->lat        = atof(arr[6]);
886
 
                        msg->lon        = atof(arr[7]);
887
 
                        msg->incoming   = TRUE;
888
 
 
889
 
 
890
 
                        add_message(msg);
891
 
                        
892
 
                        i++;
893
 
                        
894
 
                        g_strfreev(arr);
895
 
                }
896
 
        }
897
 
        else
898
 
        {
899
 
                gtk_label_set_label(GTK_LABEL(widget), g_strdup_printf("msg-code: %d",(int)postreply->status_code) );
900
 
        }
901
 
        
902
 
        
903
 
        
904
 
        
905
 
        
906
 
        
907
 
 
908
 
        
909
 
 
910
 
}
911
 
 
912
 
void
913
 
add_message(msg_t *m)
914
 
{
915
 
        GtkWidget *msg_box, *widget, *hseparator;
916
 
        msg_list = g_slist_append(msg_list, m);
917
 
        
918
 
        msg_box = create_msg_box(m);
919
 
        
920
 
        widget = lookup_widget(window1, "vbox48");
921
 
        gtk_box_pack_start (GTK_BOX (widget), msg_box, FALSE, FALSE, 0);
922
 
        
923
 
        hseparator = gtk_hseparator_new ();
924
 
        gtk_widget_show (hseparator);
925
 
        gtk_box_pack_start (GTK_BOX (widget), hseparator, FALSE, FALSE, 0);
926
 
        
927
 
 
928
 
}
929
 
 
930
 
GtkWidget*
931
 
create_msg_box(msg_t *m)
932
 
{
933
 
        GtkWidget *hbox, *label, *vbox, *button;
934
 
        char *label_txt;
935
 
        
936
 
        
937
 
        hbox = gtk_hbox_new (FALSE, 2);
938
 
        gtk_widget_set_size_request(hbox, 340, -1);
939
 
        gtk_widget_show (hbox);
940
 
        
941
 
        label = gtk_label_new ("");
942
 
        gtk_widget_set_size_request(label, 260, -1);
943
 
 
944
 
        gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
945
 
        gtk_label_set_use_markup (GTK_LABEL (label), TRUE);
946
 
        gtk_misc_set_alignment (GTK_MISC (label), 0, 0);
947
 
        gtk_misc_set_padding (GTK_MISC (label), 5, 2);
948
 
        
949
 
        if(m->incoming)
950
 
                label_txt = g_strdup_printf("<i><b>%s</b>, %s</i>\n\n%s",m->from, m->time, m->txt);
951
 
        else
952
 
                label_txt = g_strdup_printf("<i><small>To: </small><b>%s</b></i>\n\n%s",m->to, m->txt);
953
 
        
954
 
        gtk_label_set_label(GTK_LABEL(label), label_txt);
955
 
        
956
 
        gtk_widget_show (label);
957
 
        gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0);
958
 
        
959
 
        vbox = gtk_vbox_new (FALSE, 0);
960
 
        gtk_widget_show (vbox);
961
 
        gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0);
962
 
        
963
 
        if(m->incoming)
964
 
        {
965
 
                button = gtk_button_new_with_mnemonic (_("Reply"));
966
 
                gtk_widget_show (button);
967
 
                gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 2);
968
 
                
969
 
                g_signal_connect ((gpointer) button, "clicked",
970
 
                                        G_CALLBACK (on_msg_friend_clicked),
971
 
                                        (gpointer) m->from);
972
 
                                        
973
 
                button = gtk_button_new_with_mnemonic (_("Go To"));
974
 
                gtk_widget_show (button);
975
 
                gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 2);
976
 
                
977
 
                g_signal_connect ((gpointer) button, "clicked",
978
 
                                        G_CALLBACK (on_goto_friend2_clicked),
979
 
                                        (gpointer) m);
980
 
        }
981
 
        
982
 
        return hbox;
983
 
}
984
 
 
985
 
void
986
 
on_goto_friend2_clicked(GtkButton *button, gpointer user_data)
987
 
{       
988
 
        msg_t *m;
989
 
        m = user_data;
990
 
        
991
 
        printf("btn42 clicked: %s\n", m->from);
992
 
        
993
 
        set_current_wp(deg2rad(m->lat), deg2rad(m->lon));
994
 
        
995
 
        set_mapcenter(m->lat,m->lon, global_zoom);
996
 
 
997
 
}