Added extracting from bz2 archives
[mdictionary] / src / manager / src / ws_manager.c
index 246f63d..cb27331 100644 (file)
@@ -24,14 +24,13 @@ extern "C" {
 
 #include <unistd.h>
 #include <glib/gstdio.h>
-//#include <glib.h>
 #include <gconf/gconf-client.h>
 #include <gconf/gconf.h>
 #include <pthread.h>
 #include <gmodule.h>
 #include <string.h>
-#include "ws_manager.h"
-
+#include <ws_manager.h>
+#include <untar.h>
 #define GCONF_KEY "/apps/maemo/WhiteStork/Dictionaries"
 #define GCONF_LIB_PATH "/apps/maemo/WhiteStork/Engines"
                         
@@ -86,6 +85,8 @@ WSMngSearchData* ws_manager_create()
        return NULL;
 }
 
+static void ws_mng_extract_dictionary(GError *error, GArray *word,
+                                   gpointer user_data);
 /**
  * Public function, see ws_manager.h
  */
@@ -117,10 +118,16 @@ static void ws_mng_on_found_translation(gchar* translation,
 {
         g_debug("->%s", __FUNCTION__);
         WSMngSearchData *data = (WSMngSearchData *) user_data;
+       
+       
         //decrement returned results count
         //data->returned_results--;
        data->returned_trans_results--;
+       
         //if there is returned translation        
+       g_printf("\ndla slowa %s\n",  pattern);
+       g_printf("ile slownikow %d\n", data->returned_trans_results);
+       g_printf("moje tlmumaczenie %s\n", data->trans);
         if (translation != NULL)
         {
                 if (data->trans == NULL)
@@ -131,11 +138,11 @@ static void ws_mng_on_found_translation(gchar* translation,
                                           "<PATTERN_CLOSED><TRANSLATION_OPEN>",
                                           translation,
                                           "<TRANSLATION_CLOSED>",
-                                          NULL);
-                }
+                                          NULL);               
+               }
                 else //if thre was stored trnasloation 
                 {
-                        if (data->returned_trans_results >= 0)
+                        if (data->returned_trans_results > 0)
                         {
                                 //copy stored trnasloation to temporery variable
                                 gchar* tmp = g_strconcat(data->trans,
@@ -170,8 +177,8 @@ static void ws_mng_on_found_translation(gchar* translation,
                 {
                         data->search_in_history = FALSE;
                        data->is_seraching_trans = FALSE;
-                               //send translation to gui
-                               ws_dbus_server_return_translations(data->dbus_data,
+                               //send translation to gui                       
+                       ws_dbus_server_return_translations(data->dbus_data,
                                                        data->trans);
                        g_free(data->trans); data->trans = NULL;        
                 }
@@ -338,7 +345,7 @@ static void ws_mng_on_search_word(GError *error, GArray *word, gpointer user_dat
                         NULL, 
                         ws_mng_search_word, 
                         data);   //create thread and run search 
-        g_debug("<-%s", __FUNCTION__);
+       g_debug("<-%s", __FUNCTION__);
 }
 
 
@@ -617,7 +624,7 @@ static void ws_mng_load_dict(GArray* dict_directory, WSMngSearchData* data)
  *@param word pattern to serch for translation
  *@param user_data data needed to send results to UI
  */
-static void ws_mng_on_search_in_history (GError *error, GArray *word, 
+static void ws_mng_on_search_in_history(GError *error, GArray *word, 
                                   gpointer user_data)
 {
         g_debug("->%s", __FUNCTION__);
@@ -965,6 +972,10 @@ void ws_mng_init_dbus (WSMngSearchData *data)
                       "remove_bookmark",
                       ws_mng_remove_bookmark,
                       data);//set callback for remove bookmarks signal
+       ws_dbus_set_cb(data->dbus_data,
+                       "extract_dictionary",
+                       ws_mng_extract_dictionary,
+                       data);
 
 
         g_debug("<-%s", __FUNCTION__);
@@ -1336,6 +1347,32 @@ void ws_mng_close (WSMngSearchData *data)
         g_debug("<-%s", __FUNCTION__);
 }
 
+static void ws_mng_extract_dictionary(GError *error, GArray* param,
+                                   gpointer user_data)
+{
+       g_debug("->%s", __FUNCTION__);
+       WSMngSearchData *data = (WSMngSearchData *) user_data;
+        osso_rpc_t *osso_data;
+        //get the data sended by dbus
+        osso_data = &g_array_index (param, osso_rpc_t, 0); 
+        //get the path sended by dbus
+        gchar* path = g_strdup(osso_data->value.s);
+       gint result = -1;
+       if (path != NULL)
+       {
+               result = decompress_file(path,"./");
+       }
+       if (result > 0)
+       {
+               ws_dbus_server_return_extracted_dict(data->dbus_data, 
+                                                       path);
+       }else
+       {
+               ws_dbus_server_return_extracted_dict(data->dbus_data, 
+                                                       NULL);
+       }
+       g_debug("<-%s", __FUNCTION__);
+}
 #ifdef __cplusplus
 }
 #endif