v0.2.2 release
[yandexfotkisp] / src / plugin.c
1 /*
2  * This file is part of sharing-plugin-template
3  *
4  * Copyright (C) 2008-2009 Nokia Corporation. All rights reserved.
5  *
6  * This maemo code example is licensed under a MIT-style license,
7  * that can be found in the file called "COPYING" in the root
8  * directory.
9  *
10  */
11
12 #include <gtk/gtk.h>
13 #include <glib.h>
14
15 // Somehow garage builder doesn't have normal libsharing headers
16 #include "libsharing/sharing-plugin-interface.h"
17 #include "libsharing/sharing-transfer.h"
18 #include "libsharing/sharing-service-option.h"
19
20 #include <conicconnection.h>
21 #include <osso-log.h>
22 #include <stdlib.h>
23
24 #include "send.h"
25 #include "validate.h"
26 #include "common.h"
27
28 guint sharing_plugin_interface_init (gboolean* dead_mans_switch);
29 guint sharing_plugin_interface_uninit (gboolean* dead_mans_switch);
30 SharingPluginInterfaceSendResult sharing_plugin_interface_send(SharingTransfer* transfer, ConIcConnection* con, gboolean* dead_mans_switch);
31 SharingPluginInterfaceAccountSetupResult sharing_plugin_interface_account_setup(GtkWindow* parent, SharingService* service, SharingAccount** worked_on,osso_context_t* osso);
32 SharingPluginInterfaceAccountValidateResult sharing_plugin_interface_account_validate (SharingAccount* account, ConIcConnection* con, gboolean *cont, gboolean* dead_mans_switch);
33 SharingPluginInterfaceEditAccountResult sharing_plugin_interface_edit_account (GtkWindow* parent, SharingAccount* account, ConIcConnection* con, gboolean* dead_mans_switch);
34 gboolean sharing_plugin_interface_update_options(SharingAccount* account, ConIcConnection* con, gboolean* cont, gboolean* dead_mans_switch, UpdateOptionsCallback cb_func, gpointer cb_data);
35
36 /**
37  * sharing_plugin_interface_init:
38  * @dead_mans_switch: What?
39  *
40  * Initialize interface
41  *
42  * Returns: 0
43  */
44 guint sharing_plugin_interface_init (gboolean* dead_mans_switch)
45 {
46     ULOG_DEBUG_L("sharing_manager_plugin_interface_init");
47     return 0;
48 }
49
50 /**
51  * sharing_plugin_interface_uninit:
52  * @dead_mans_switch: What?
53  *
54  * Uninitialize interface
55  *
56  * Returns: 0
57  */
58 guint sharing_plugin_interface_uninit (gboolean* dead_mans_switch)
59 {
60     ULOG_DEBUG_L("sharing_manager_plugin_interface_uninit");
61     return 0;
62 }
63
64 /**
65  * sharing_plugin_interface_send:
66  * @transfer: Transfer to be send
67  * @con: Connection used
68  * @dead_mans_switch:
69  *
70  * Send interface.
71  *
72  * Returns: Result of send
73  */
74 SharingPluginInterfaceSendResult sharing_plugin_interface_send
75     (SharingTransfer* transfer, ConIcConnection* con,
76     gboolean* dead_mans_switch)
77 {
78     ULOG_DEBUG_L ("sharing_plugin_interface_send");
79     SharingPluginInterfaceSendResult ret_val = SHARING_SEND_ERROR_UNKNOWN;
80     ret_val = share_item (transfer, con, dead_mans_switch);
81     return ret_val;
82 }
83
84 /**
85  * sharing_plugin_interface_account_setup:
86  * @transfer: #SharingTransfer send
87  * @service: #SharingService
88  * @worked_on: Connection used
89  * @osso_context_t: Osso context
90  *
91  * Send interface
92  *
93  * Returns: Result of account setup
94  */
95 SharingPluginInterfaceAccountSetupResult sharing_plugin_interface_account_setup
96     (GtkWindow* parent, SharingService* service, SharingAccount** worked_on,
97     osso_context_t* osso)
98 {
99     ULOG_DEBUG_L ("sharing_plugin_interface_account_setup");
100     SharingPluginInterfaceAccountSetupResult ret = 0;
101     return ret;
102 }
103
104 /**
105  * sharing_manager_plugin_interface_account_validate:
106  * @account: Account tested
107  * @con: Connection used to test account
108  * @dead_mans_switch:
109  *
110  * Validates account information.
111  *
112  * Returns: Result of account validation
113  */
114 SharingPluginInterfaceAccountValidateResult
115 sharing_plugin_interface_account_validate (SharingAccount* account,
116     ConIcConnection* con, gboolean *cont, gboolean* dead_mans_switch)
117 {
118     ULOG_DEBUG_L ("sharing_plugin_interface_account_validate");
119     SharingPluginInterfaceAccountValidateResult ret_val = 0;
120     ret_val = validate (account, con, cont, dead_mans_switch);
121     return ret_val;
122 }
123
124 /**
125  * sharing_plugin_interface_edit_account:
126  * @account: Account tested
127  * @con: Connection used to test account
128  * @dead_mans_switch:
129  *
130  * Edit account plugin implementation.
131  *
132  * Returns: Result of account edit
133  */
134 SharingPluginInterfaceEditAccountResult
135     sharing_plugin_interface_edit_account (GtkWindow* parent,
136     SharingAccount* account, ConIcConnection* con, gboolean* dead_mans_switch)
137 {
138     SharingPluginInterfaceEditAccountResult ret = 0;
139     ULOG_DEBUG_L ("sharing_plugin_interface_edit_account");
140     return ret;
141 }
142
143 gboolean sharing_plugin_interface_update_options(
144         SharingAccount* account, ConIcConnection* con, gboolean* cont,
145         gboolean* dead_mans_switch, UpdateOptionsCallback cb_func,
146         gpointer cb_data) {
147         gboolean ret = TRUE;
148         SharingPluginInterfaceUpdateOptionsResult updateResult = SHARING_UPDATE_OPTIONS_ERROR_UNKNOWN;
149
150     char* sessionKey = NULL;
151     char* sessionRequestId = NULL;
152     char* token = NULL;
153
154     *dead_mans_switch = FALSE;
155     if (yandexGetSessionKey(&sessionKey, &sessionRequestId) == YANDEX_GET_SESSION_KEY_SUCCESS) {
156         *dead_mans_switch = FALSE;
157         if (YANDEX_GET_AUTH_TOKEN_SUCCESS == yandexGetAuthToken(sessionRequestId, sessionKey,
158                                                            sharing_account_get_username(account), sharing_account_get_password(account),
159                                                            &token)) {
160                 GSList* albumsList = NULL;
161                 *dead_mans_switch = FALSE;
162                 if (YANDEX_GET_ALBUM_LIST_SUCCESS == yandexGetAlbumsList(token,sharing_account_get_username(account),&albumsList) && albumsList) {
163                         sharing_account_set_option_values(account,"album",albumsList);
164                         updateResult = SHARING_UPDATE_OPTIONS_SUCCESS;
165                 }
166                 *dead_mans_switch = FALSE;
167                 if (albumsList) sharing_service_option_values_free(albumsList);
168         }
169         *dead_mans_switch = FALSE;
170     }
171     *dead_mans_switch = FALSE;
172
173     if (token) free(token);
174     if (sessionKey) free(sessionKey);
175     if (sessionRequestId) free(sessionRequestId);
176
177         if (cb_func != NULL) {
178                 void (*fp) (SharingPluginInterfaceUpdateOptionsResult, gpointer);
179                 fp = cb_func;
180                 fp(updateResult, cb_data);
181         }
182
183         return ret;
184 }