Home timeline and basic status update fully working
[mokosuite2:micromoko.git] / src / main.c
1 /*
2  * Micromoko
3  * Entry point
4  * Copyright (C) 2009-2010 Daniele Ricci <daniele.athome@gmail.com>
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 3 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License along
17  * with this program; if not, write to the Free Software Foundation, Inc.,
18  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19  */
20
21 #include <mokosuite/utils/utils.h>
22 #include <mokosuite/utils/remote-config-service.h>
23 #include <mokosuite/utils/dbus.h>
24 #include <mokosuite/ui/gui.h>
25 #include <glib.h>
26 #include <dbus/dbus-glib-bindings.h>
27
28 #include "globals.h"
29 #include "twitter/twitter.h"
30 #include "auth.h"
31 #include "timeline.h"
32
33 #define MICROMOKO_NAME               "org.mokosuite.micromoko"
34 #define MICROMOKO_CONFIG_PATH        MOKOSUITE_DBUS_PATH "/Micromoko/Config"
35
36
37 // default log domain
38 int _log_dom = -1;
39
40 RemoteConfigService* home_config = NULL;
41 twitter_session* global_session = NULL;
42
43
44 int main(int argc, char* argv[])
45 {
46     // TODO initialize Intl
47     setlocale(LC_ALL, "");
48     bindtextdomain(PACKAGE, LOCALEDIR);
49     textdomain(PACKAGE);
50
51     // initialize log
52     eina_init();
53     _log_dom = eina_log_domain_register(PACKAGE, EINA_COLOR_CYAN);
54     eina_log_domain_level_set(PACKAGE, LOG_LEVEL);
55
56     EINA_LOG_INFO("%s version %s", PACKAGE_NAME, VERSION);
57
58     // glib integration
59     mokosuite_utils_init();
60     mokosuite_utils_glib_init(TRUE);
61     mokosuite_ui_init(argc, argv);
62     EINA_LOG_DBG("Loading data from %s", MICROMOKO_DATADIR);
63
64     // dbus name
65     DBusGConnection* session_bus = dbus_session_bus();
66     if (!session_bus || !dbus_request_name(session_bus, MICROMOKO_NAME))
67         return EXIT_FAILURE;
68
69     // config database
70     char* cfg_file = g_strdup_printf("%s/.config/%s/settings.conf", g_get_home_dir(), PACKAGE);
71     home_config = remote_config_service_new(session_bus,
72         MICROMOKO_CONFIG_PATH,
73         cfg_file);
74     g_free(cfg_file);
75
76     // twitter init
77     twitter_init(home_config);
78
79     elm_theme_extension_add(NULL, MICROMOKO_DATADIR "/theme.edj");
80     // TODO additional themes
81
82     // twitter session
83     // TODO read consumer token from configuration?
84     oauth_token consumer = {
85         "dY49wvIY7386ET15vCRVQ",
86         "D8wKnvbTQqxJmxBC0JyHVY6LpHdpTBbJwyISlrUg8"
87     };
88     global_session = twitter_session_new(&consumer);
89
90     // if not yet authenticated, open twitter authorization window
91     oauth_token access_token = {NULL, NULL};
92     remote_config_service_get_string(home_config, "auth", "access_token", &access_token.key);
93     remote_config_service_get_string(home_config, "auth", "access_token_secret", &access_token.secret);
94
95     // access token is present, go to last open window
96     if (access_token.key != NULL && strlen(access_token.key) && access_token.secret != NULL && strlen(access_token.secret)) {
97         twitter_session_set_access_token(global_session, &access_token);
98
99         // TODO last open window
100         EINA_LOG_DBG("open last window");
101         timeline_new(TIMELINE_HOME);
102     }
103
104     // no access token, authorization needed
105     else {
106         // auth window
107         EINA_LOG_DBG("open auth window");
108         auth_win();
109     }
110
111     elm_run();
112     elm_shutdown();
113
114     return EXIT_SUCCESS;
115 }