aboutsummaryrefslogtreecommitdiffstats
path: root/protocols/twitter/twitter.h
blob: 7cfd9148ba70e7e2ff4384ace47345d5777c69f6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
/***************************************************************************\
*                                                                           *
*  BitlBee - An IRC to IM gateway                                           *
*  Simple module to facilitate twitter functionality.                       *
*                                                                           *
*  Copyright 2009-2010 Geert Mulders <g.c.w.m.mulders@gmail.com>            *
*  Copyright 2010-2012 Wilmer van der Gaast <wilmer@gaast.net>              *
*                                                                           *
*  This library is free software; you can redistribute it and/or            *
*  modify it under the terms of the GNU Lesser General Public               *
*  License as published by the Free Software Foundation, version            *
*  2.1.                                                                     *
*                                                                           *
*  This library is distributed in the hope that it will be useful,          *
*  but WITHOUT ANY WARRANTY; without even the implied warranty of           *
*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU        *
*  Lesser General Public License for more details.                          *
*                                                                           *
*  You should have received a copy of the GNU Lesser General Public License *
*  along with this library; if not, write to the Free Software Foundation,  *
*  Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA           *
*                                                                           *
****************************************************************************/

#include "nogaim.h"

#ifndef _TWITTER_H
#define _TWITTER_H

#ifdef DEBUG_TWITTER
#define debug(text ...) imcb_log(ic, text);
#else
#define debug(text ...)
#endif

typedef enum {
	TWITTER_HAVE_FRIENDS   = 0x00001,
	TWITTER_MODE_ONE       = 0x00002,
	TWITTER_MODE_MANY      = 0x00004,
	TWITTER_MODE_CHAT      = 0x00008,
	TWITTER_DOING_TIMELINE = 0x10000,
	TWITTER_GOT_TIMELINE   = 0x20000,
	TWITTER_GOT_MENTIONS   = 0x40000,
} twitter_flags_t;

typedef enum {
	TWITTER_FILTER_TYPE_FOLLOW = 0,
	TWITTER_FILTER_TYPE_TRACK
} twitter_filter_type_t;

struct twitter_log_data;

struct twitter_data {
	char* user;
	struct oauth_info *oauth_info;

	gpointer home_timeline_obj;
	gpointer mentions_obj;

	guint64 timeline_id;

	GSList *follow_ids;
	GSList *filters;

	guint64 last_status_id; /* For undo */
	gint main_loop_id;
	gint filter_update_id;
	struct http_request *stream;
	struct http_request *filter_stream;
	struct groupchat *timeline_gc;
	gint http_fails;
	twitter_flags_t flags;

	/* set base_url */
	gboolean url_ssl;
	int url_port;
	char *url_host;
	char *url_path;

	char *prefix; /* Used to generate contact + channel name. */

	/* set show_ids */
	struct twitter_log_data *log;
	int log_id;
};

#define TWITTER_FILTER_UPDATE_WAIT 3000
struct twitter_filter {
	twitter_filter_type_t type;
	char *text;
	guint64 uid;
	GSList *groupchats;
};

struct twitter_user_data {
	guint64 last_id;
	time_t last_time;
};

#define TWITTER_LOG_LENGTH 256
struct twitter_log_data {
	guint64 id;
	struct bee_user *bu; /* DANGER: can be a dead pointer. Check it first. */
};

/**
 * This has the same function as the msn_connections GSList. We use this to
 * make sure the connection is still alive in callbacks before we do anything
 * else.
 */
extern GSList *twitter_connections;

void twitter_login_finish(struct im_connection *ic);

struct http_request;
char *twitter_parse_error(struct http_request *req);

void twitter_log(struct im_connection *ic, char *format, ...);
struct groupchat *twitter_groupchat_init(struct im_connection *ic);

#endif //_TWITTER_H