#include "homebank.h"
+#include "ext.h"
#include "dsp-mainwindow.h"
#include "hb-preferences.h"
static gchar *locale_dir = NULL;
static gchar *help_dir = NULL;
static gchar *datas_dir = NULL;
+static gchar *pkglib_dir = NULL;
//#define MARKUP_STRING "<span size='small'>%s</span>"
};
-/*
-** try to determine the file type (if supported for import by homebank)
-**
-**
-*/
-gint homebank_alienfile_recognize(gchar *filename)
-{
-GIOChannel *io;
-gint i, retval = FILETYPE_UNKNOWN;
-gchar *tmpstr;
-gint io_stat;
-GError *err = NULL;
-static gint csvtype[7] = {
- CSV_DATE,
- CSV_INT,
- CSV_STRING,
- CSV_STRING,
- CSV_STRING,
- CSV_DOUBLE,
- CSV_STRING,
- };
-
-
- DB( g_print("\n[homebank] alienfile_recognize\n") );
-
-
- io = g_io_channel_new_file(filename, "r", NULL);
- if(io != NULL)
- {
- g_io_channel_set_encoding(io, NULL, NULL); /* set to binary mode */
-
- for(i=0;i<25;i++)
- {
- if( retval != FILETYPE_UNKNOWN )
- break;
-
- io_stat = g_io_channel_read_line(io, &tmpstr, NULL, NULL, &err);
- if( io_stat == G_IO_STATUS_EOF)
- break;
- if( io_stat == G_IO_STATUS_ERROR )
- {
- DB (g_print(" + ERROR %s\n",err->message));
- break;
- }
- if( io_stat == G_IO_STATUS_NORMAL)
- {
- if( *tmpstr != '\0' )
- {
- DB( g_print(" line %d: '%s' retval=%d\n", i, tmpstr, retval) );
-
- /* native homebank file */
- if( g_str_has_prefix(tmpstr, "<homebank v="))
- {
- DB( g_print(" type is HomeBank\n") );
- retval = FILETYPE_HOMEBANK;
- }
- else
-
- // QIF file ?
- if( g_str_has_prefix(tmpstr, "!Type") ||
- g_str_has_prefix(tmpstr, "!type") ||
- g_str_has_prefix(tmpstr, "!Option") ||
- g_str_has_prefix(tmpstr, "!option") ||
- g_str_has_prefix(tmpstr, "!Account") ||
- g_str_has_prefix(tmpstr, "!account")
- )
- {
- DB( g_print(" type is QIF\n") );
- retval = FILETYPE_QIF;
- }
- else
-
- /* is it OFX ? */
- if( g_strstr_len(tmpstr, -1, "<OFX>") != NULL
- || g_strstr_len(tmpstr, -1, "<ofx>") != NULL
- /*|| strcasestr(tmpstr, "<OFC>") != NULL*/
- )
- {
- DB( g_print(" type is OFX\n") );
- retval = FILETYPE_OFX;
- }
-
- /* is it csv homebank ? */
- else
- {
- gchar **str_array;
- gboolean isvalid = FALSE;
-
- hb_string_strip_crlf(tmpstr);
- str_array = hb_csv_row_get(tmpstr, ";", 8);
- isvalid = hb_csv_row_valid(str_array, 8, csvtype);
-
- DB( g_print(" hbcsv %d\n", isvalid) );
-
- if( isvalid == TRUE )
- {
- DB( g_print(" type is CSV homebank\n") );
- retval = FILETYPE_CSV_HB;
- }
-
- g_strfreev (str_array);
- }
- g_free(tmpstr);
- }
- }
- }
- g_io_channel_unref (io);
- }
-
- return retval;
-}
-
/* = = = = = = = = = = = = = = = = = = = = */
return datas_dir;
}
+const gchar *
+homebank_app_get_pkglib_dir (void)
+{
+ return pkglib_dir;
+}
+
/* build package paths at runtime */
static void
pixmaps_dir = g_build_filename (prefix, "share", PACKAGE, "icons", NULL);
help_dir = g_build_filename (prefix, "share", PACKAGE, "help", NULL);
datas_dir = g_build_filename (prefix, "share", PACKAGE, "datas", NULL);
+ pkglib_dir = g_build_filename (prefix, "lib", PACKAGE, NULL);
#ifdef PORTABLE_APP
DB( g_print(" - app is portable under windows\n") );
config_dir = g_build_filename(prefix, "config", NULL);
pixmaps_dir = g_build_filename (DATA_DIR, PACKAGE, "icons", NULL);
help_dir = g_build_filename (DATA_DIR, PACKAGE, "help", NULL);
datas_dir = g_build_filename (DATA_DIR, PACKAGE, "datas", NULL);
+ pkglib_dir = g_build_filename (PKGLIB_DIR, NULL);
config_dir = g_build_filename(g_get_user_config_dir(), HB_DATA_PATH, NULL);
//#870023 Ubuntu packages the help files in "/usr/share/doc/homebank-data/help/" for some strange reason
DB( g_print(" - locale_dir : %s\n", locale_dir) );
DB( g_print(" - help_dir : %s\n", help_dir) );
DB( g_print(" - datas_dir : %s\n", datas_dir) );
+ DB( g_print(" - pkglib_dir : %s\n", pkglib_dir) );
}
g_free (pixmaps_dir);
g_free (locale_dir);
g_free (help_dir);
+ g_free (pkglib_dir);
}
int
-main (int argc, char *argv[])
+main (int argc, char *argv[], char *env[])
{
GOptionContext *option_context;
GOptionGroup *option_group;
/* change the locale if a language is specified */
language_init (PREFS->language);
+ DB( g_print(" - loading plugins\n") );
+ ext_init(&argc, &argv, &env);
+
+ GList* it;
+ for (it = PREFS->ext_whitelist; it; it = g_list_next(it)) {
+ ext_load_plugin(it->data);
+ }
+
+ gchar** plugins = ext_list_plugins();
+ gchar** plugins_it;
+ for (plugins_it = plugins; *plugins_it; ++plugins_it) {
+ gboolean loaded = ext_is_plugin_loaded(*plugins_it);
+ g_print("found plugin: %s, loaded: %d\n", *plugins_it, loaded);
+ }
+ g_strfreev(plugins);
+
if( PREFS->showsplash == TRUE )
{
splash = homebank_construct_splash();
mainwin = (GtkWidget *)create_hbfile_window (NULL);
+ GValue mainwin_val = G_VALUE_INIT;
+ ext_hook("create_main_window", EXT_OBJECT(&mainwin_val, mainwin), NULL);
+
if(mainwin)
{
/* update the mainwin display */
ui_mainwindow_update(mainwin, GINT_TO_POINTER(UF_TITLE+UF_SENSITIVE+UF_BALANCE+UF_VISUAL));
+ ext_hook("enter_main_loop", NULL);
+
DB( g_print(" - gtk_main()\n" ) );
gtk_main ();
+ ext_hook("exit_main_loop", NULL);
+
DB( g_print(" - call destroy mainwin\n" ) );
gtk_widget_destroy(mainwin);
}
+ DB( g_print(" - unloading plugins\n") );
+ ext_term();
+
}
}
#ifdef G_OS_WIN32
-/* In case we build this as a windowed application */
+/* In case we build this as a windows application */
#ifdef __GNUC__
#define _stdcall __attribute__((stdcall))