/* HomeBank -- Free, easy, personal accounting for everyone.
- * Copyright (C) 1995-2018 Maxime DOYEN
+ * Copyright (C) 1995-2019 Maxime DOYEN
*
* This file is part of HomeBank.
*
#include "homebank.h"
-#include "dsp_mainwindow.h"
+#include "dsp-mainwindow.h"
#include "hb-preferences.h"
#include "language.h"
};
-/*
-** try to determine the file type (if supported for import by homebank)
-**
-**
-*/
-gint homebank_alienfile_recognize(gchar *filename)
-{
-GIOChannel *io;
-gint i, retval = FILETYPE_UNKNOW;
-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_UNKNOW )
- 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;
-}
-
/* = = = = = = = = = = = = = = = = = = = = */
if( g_file_test(filepath, G_FILE_TEST_EXISTS) )
{
+ DB( g_print(" - deleting: '%s'\n", filepath) );
g_remove(filepath);
retval = TRUE;
}
-
- DB( g_print(" - deleted: '%s' :: %d\n", filepath, retval) );
+ else
+ {
+ DB( g_print(" - cannot delete: '%s'\n", filepath) );
+ }
+
return retval;
}
void homebank_backup_current_file(void)
{
gchar *bakfilename;
+GPtrArray *array;
+gint i;
DB( g_print("\n[homebank] backup_current_file\n") );
//retval = g_rename(pathname, newname);
homebank_file_copy (GLOBALS->xhb_filepath, bakfilename);
g_free(bakfilename);
+
+ //do safe backup according to user preferences
+ DB( g_print(" user pref backup\n") );
+ if( PREFS->bak_is_automatic == TRUE )
+ {
+ bakfilename = hb_filename_new_for_backup(GLOBALS->xhb_filepath);
+ if( g_file_test(bakfilename, G_FILE_TEST_EXISTS) == FALSE )
+ {
+ homebank_file_copy (GLOBALS->xhb_filepath, bakfilename);
+ }
+ g_free(bakfilename);
+
+ //delete any offscale backup
+ DB( g_print(" clean old backup\n") );
+ array = hb_filename_backup_list(GLOBALS->xhb_filepath);
+
+ DB( g_print(" found %d match\n", array->len) );
+
+ gchar *dirname = g_path_get_dirname(GLOBALS->xhb_filepath);
+
+ for(i=0;i<(gint)array->len;i++)
+ {
+ gchar *offscalefilename = g_ptr_array_index(array, i);
+
+ DB( g_print(" %d : '%s'\n", i, offscalefilename) );
+ if( i >= PREFS->bak_max_num_copies )
+ {
+ gchar *bakdelfilepath = g_build_filename(dirname, offscalefilename, NULL);
+
+ DB( g_print(" - should delete '%s'\n", bakdelfilepath) );
+
+ homebank_file_delete_existing(bakdelfilepath);
+
+ g_free(bakdelfilepath);
+ }
+ }
+ g_ptr_array_free(array, TRUE);
+
+ g_free(dirname);
+ }
+
}
GKeyFile *keyfile;
gchar *group, *filename, *tmpfilename;
gchar *lastfilename = NULL;
+GError *error = NULL;
DB( g_print("\n[homebank] lastopenedfiles load\n") );
if(keyfile)
{
filename = g_build_filename(homebank_app_get_config_dir(), "lastopenedfiles", NULL );
- if(g_key_file_load_from_file (keyfile, filename, G_KEY_FILE_NONE, NULL))
+ if(g_key_file_load_from_file (keyfile, filename, G_KEY_FILE_NONE, &error))
{
group = "HomeBank";
}
}
}
+
+ if( error )
+ {
+ g_print("failed: %s\n", error->message);
+ g_error_free (error);
+ }
+
g_free(filename);
g_key_file_free (keyfile);
}
gboolean retval = FALSE;
gchar *group, *filename;
gsize length;
+GError *error = NULL;
DB( g_print("\n[homebank] lastopenedfiles save\n") );
if( GLOBALS->xhb_filepath != NULL )
{
- keyfile = g_key_file_new();
- if(keyfile )
+ //don't save bakup files
+ if( hbfile_file_isbackup(GLOBALS->xhb_filepath) == FALSE )
{
- DB( g_print(" - saving '%s'\n", GLOBALS->xhb_filepath) );
+ keyfile = g_key_file_new();
+ if(keyfile )
+ {
+ DB( g_print(" - saving '%s'\n", GLOBALS->xhb_filepath) );
- group = "HomeBank";
- g_key_file_set_string (keyfile, group, "LastOpenedFile", GLOBALS->xhb_filepath);
+ group = "HomeBank";
+ g_key_file_set_string (keyfile, group, "LastOpenedFile", GLOBALS->xhb_filepath);
- gchar *contents = g_key_file_to_data( keyfile, &length, NULL);
+ gchar *contents = g_key_file_to_data( keyfile, &length, NULL);
- //DB( g_print(" keyfile:\n%s\nlen=%d\n", contents, length) );
+ //DB( g_print(" keyfile:\n%s\nlen=%d\n", contents, length) );
- filename = g_build_filename(homebank_app_get_config_dir(), "lastopenedfiles", NULL );
- g_file_set_contents(filename, contents, length, NULL);
- g_free(filename);
+ filename = g_build_filename(homebank_app_get_config_dir(), "lastopenedfiles", NULL );
- g_free(contents);
- g_key_file_free (keyfile);
+ g_file_set_contents(filename, contents, length, &error);
+ g_free(filename);
+
+ if( error )
+ {
+ g_print("failed: %s\n", error->message);
+ g_error_free (error);
+ }
+
+ g_free(contents);
+ g_key_file_free (keyfile);
+ }
}
}
}
#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))