Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 225673
Collapse All | Expand All

(-)gdivelog-0.5.1/src/callbacks.c (-1 / +2 lines)
Lines 127-133 Link Here
127
    gdk_pixbuf_unref(about_dialog_logo_pixbuf);
127
    gdk_pixbuf_unref(about_dialog_logo_pixbuf);
128
  }
128
  }
129
  gtk_window_set_transient_for(GTK_WINDOW(about_dialog),GTK_WINDOW(main_window));
129
  gtk_window_set_transient_for(GTK_WINDOW(about_dialog),GTK_WINDOW(main_window));
130
  gtk_widget_show(GTK_WIDGET(about_dialog));
130
  gtk_dialog_run(GTK_DIALOG(about_dialog));
131
  gtk_widget_destroy(GTK_WIDGET(about_dialog));
131
}
132
}
132
133
133
void on_toolbar_open_clicked (GtkToolButton * toolbutton, gpointer user_data)
134
void on_toolbar_open_clicked (GtkToolButton * toolbutton, gpointer user_data)
(-)gdivelog-0.5.1/src/db_main.c (+69 lines)
Lines 56-61 Link Here
56
  return db_saved_value;
56
  return db_saved_value;
57
}
57
}
58
58
59
gint db_get_schema_version(sqlite3 *db) {
60
  gchar *sqlErrMsg=NULL;
61
  gint schema_version=0;
62
  gint rc=sqlite3_exec(db,"SELECT gdivelog_schema_version FROM Preferences LIMIT 1",(gpointer)db_generic_callback_long,&schema_version,&sqlErrMsg);
63
  if(rc!=SQLITE_OK) {
64
	g_log(G_LOG_DOMAIN,G_LOG_LEVEL_ERROR,"Error in db_needs_upgrade()\nCode=%d\nError Message='%s'\n",rc,sqlErrMsg);
65
	sqlite3_free(sqlErrMsg);
66
	schema_version = 0;
67
  }
68
69
  return schema_version;
70
}
71
72
gboolean db_set_schema_version(sqlite3 *db,gint version) {
73
  gchar *sqlErrMsg = NULL;
74
  char *sqlcmd=sqlite3_mprintf("UPDATE Preferences SET gdivelog_schema_version = '%d';", version);
75
  if(sqlcmd==NULL) {
76
	return FALSE;
77
  }
78
  gint rc=sqlite3_exec(db,sqlcmd,NULL,0,&sqlErrMsg);
79
  if(rc!=SQLITE_OK) {
80
    g_log(G_LOG_DOMAIN,G_LOG_LEVEL_CRITICAL,"Error in db_set_schema_version()\nCode=%d\nQuery='%s'\nError message='%s'\n",rc,sqlcmd,sqlErrMsg);
81
    sqlite3_free(sqlErrMsg);
82
    sqlite3_free(sqlcmd);
83
    return FALSE;
84
  }
85
  sqlite3_free(sqlcmd);
86
  return TRUE;
87
}
88
89
gboolean db_needs_upgrade(sqlite3 *db) {
90
  gint schema_version = db_get_schema_version(db);
91
  return (schema_version!=0) && (schema_version<atoi(GDIVELOG_SCHEMA_VERSION));
92
}
93
94
gboolean db_run_upgrade_command(sqlite3 *db,const char *sqlcmd) {
95
  gchar *sqlErrMsg = NULL;
96
  gint rc=sqlite3_exec(db,sqlcmd,NULL,0,&sqlErrMsg);
97
  if(rc!=SQLITE_OK) {
98
    g_log(G_LOG_DOMAIN,G_LOG_LEVEL_CRITICAL,"Error in db_run_upgrade_command()\nCode=%d\nQuery='%s'\nError message='%s'\n",rc,sqlcmd,sqlErrMsg);
99
    sqlite3_free(sqlErrMsg);
100
    return FALSE;
101
  }
102
  return TRUE;
103
}
104
105
gboolean db_upgrade(sqlite3 *db) {
106
  if(db_get_schema_version(db)==1) {
107
    gchar sqlcmd[] =
108
      "DROP TRIGGER Dive_Insert;"
109
      "CREATE TRIGGER Dive_Insert AFTER INSERT ON Dive BEGIN  UPDATE Dive SET dive_number=(SELECT CASE WHEN (SELECT dive_number FROM Dive WHERE dive_datetime <= NEW.dive_datetime ORDER BY dive_datetime DESC LIMIT 1) IS NULL THEN (SELECT CASE WHEN (SELECT MIN(dive_number) FROM Dive WHERE dive_number > 0) > 1 THEN (SELECT MIN(dive_number)-1 FROM Dive WHERE dive_number > 1) ELSE 1 END) ELSE (SELECT MAX(dive_number)+1 FROM Dive WHERE dive_datetime <= NEW.dive_datetime AND dive_number > 0 ORDER BY dive_datetime DESC LIMIT 1) END) WHERE dive_id=NEW.dive_id;UPDATE Dive SET dive_number=dive_number+1 WHERE dive_datetime > NEW.dive_datetime AND (SELECT CASE WHEN (SELECT dive_number FROM Dive WHERE dive_datetime < NEW.dive_datetime ORDER BY dive_datetime DESC LIMIT 1) IS NULL THEN (SELECT CASE WHEN (SELECT MIN(dive_number) FROM Dive WHERE dive_number > 0) > 1 THEN dive_number < 0 ELSE dive_number > 0 END) ELSE dive_number > 0 END); END;"
110
      "DROP TRIGGER Dive_Update;"
111
      "CREATE TRIGGER Dive_Update AFTER UPDATE OF dive_datetime ON Dive BEGIN UPDATE Dive SET dive_number=(SELECT CASE WHEN dive_id = NEW.dive_id THEN 1+(SELECT COUNT(*) FROM Dive WHERE dive_datetime < NEW.dive_datetime) WHEN NEW.dive_datetime > OLD.dive_datetime AND dive_datetime <= NEW.dive_datetime AND dive_datetime >= OLD.dive_datetime THEN (SELECT CASE WHEN dive_number-1 < OLD.dive_number THEN dive_number ELSE dive_number-1 END) WHEN NEW.dive_datetime < OLD.dive_datetime AND dive_datetime <= OLD.dive_datetime AND dive_datetime >= NEW.dive_datetime THEN (SELECT CASE WHEN dive_number+1 > OLD.dive_number THEN dive_number ELSE dive_number+1 END) ELSE dive_number END) WHERE (SELECT CASE WHEN NEW.dive_datetime > OLD.dive_datetime THEN dive_datetime >= OLD.dive_datetime AND dive_datetime <= NEW.dive_datetime WHEN NEW.dive_datetime < OLD.dive_datetime THEN dive_datetime <= OLD.dive_datetime AND dive_datetime >= NEW.dive_datetime  END); END;"
112
    ;
113
    if(!db_run_upgrade_command(db,sqlcmd) || !db_set_schema_version(db,2)) {
114
      return FALSE;
115
    }
116
  }
117
  return TRUE;
118
}
119
59
gboolean db_create_schema(sqlite3 *db)
120
gboolean db_create_schema(sqlite3 *db)
60
{
121
{
61
  gint rc;
122
  gint rc;
Lines 198-203 Link Here
198
    rval=FALSE;
259
    rval=FALSE;
199
  }
260
  }
200
  else {
261
  else {
262
    if(db_needs_upgrade(logbook_db)) {
263
      if(!db_upgrade(logbook_db)) {
264
        g_log (G_LOG_DOMAIN,G_LOG_LEVEL_CRITICAL,"Cannot upgrade database schema\n");
265
        sqlite3_close(logbook_db);
266
        logbook_db=NULL;
267
        rval=FALSE;        
268
      }
269
    }
201
    db_cache_sites ();
270
    db_cache_sites ();
202
    preferences_load_template_dive_number();
271
    preferences_load_template_dive_number();
203
  }
272
  }
(-)gdivelog-0.5.1/src/defines.h (-1 / +1 lines)
Lines 30-36 Link Here
30
#define LOGBOOK_APP_DATA_PREFERENCES "/.gdivelog/preferences"
30
#define LOGBOOK_APP_DATA_PREFERENCES "/.gdivelog/preferences"
31
#define LOGBOOK_APP_DATA_DIR "/.gdivelog"
31
#define LOGBOOK_APP_DATA_DIR "/.gdivelog"
32
32
33
#define GDIVELOG_SCHEMA_VERSION "1.0"
33
#define GDIVELOG_SCHEMA_VERSION "2"
34
34
35
typedef struct
35
typedef struct
36
{
36
{
(-)gdivelog-0.5.1/src/dive_db.c (-3 / +3 lines)
Lines 131-139 Link Here
131
  gint new_dive_id=0;
131
  gint new_dive_id=0;
132
132
133
  sqlcmd=sqlite3_mprintf(
133
  sqlcmd=sqlite3_mprintf(
134
    "INSERT INTO Dive (dive_datetime,dive_duration,dive_maxdepth,dive_mintemp,dive_maxtemp,dive_notes,site_id,dive_visibility,dive_weight) VALUES ('%s',%lu,%f,%f,%f,'%q',%d,%f,%f)",
134
	 "INSERT INTO Dive (dive_datetime,dive_duration,dive_maxdepth,dive_mintemp,dive_maxtemp,dive_notes,site_id,dive_visibility,dive_weight) VALUES ('%s',%lu,%f,%f,%f,'%q',%d,%f,%f)",
135
    dive_datetime, dive_duration,dive_maxdepth,dive_mintemp,
135
     dive_datetime, dive_duration,dive_maxdepth,dive_mintemp,
136
    dive_maxtemp,dive_notes,site_id,dive_visibility,dive_weight
136
     dive_maxtemp,dive_notes,site_id,dive_visibility,dive_weight
137
  );   
137
  );   
138
  if(handle_transactions) db_begin_transaction();
138
  if(handle_transactions) db_begin_transaction();
139
  rc=sqlite3_exec (logbook_db, sqlcmd, NULL, 0, &sqlErrMsg);
139
  rc=sqlite3_exec (logbook_db, sqlcmd, NULL, 0, &sqlErrMsg);
(-)gdivelog-0.5.1/src/profile_gui.c (-1 lines)
Lines 96-102 Link Here
96
  timestr=format_field_duration(time);
96
  timestr=format_field_duration(time);
97
  if(depth>preferences.split_dive_limit || !time || time==profile_data.duration) gtk_widget_set_sensitive(GTK_WIDGET(widget_split_dive_btn),FALSE);
97
  if(depth>preferences.split_dive_limit || !time || time==profile_data.duration) gtk_widget_set_sensitive(GTK_WIDGET(widget_split_dive_btn),FALSE);
98
  else gtk_widget_set_sensitive(GTK_WIDGET(widget_split_dive_btn),TRUE);
98
  else gtk_widget_set_sensitive(GTK_WIDGET(widget_split_dive_btn),TRUE);
99
  if(preferences.depth_unit != 'm') depth=convert_meters_to_feet(depth);
100
  depthstr=format_field_depth(depth);
99
  depthstr=format_field_depth(depth);
101
  if(preferences.temperature_unit!='c') temperature=convert_celsius_to_farenheit(temperature);
100
  if(preferences.temperature_unit!='c') temperature=convert_celsius_to_farenheit(temperature);
102
  temperaturestr=format_field_temperature(temperature);
101
  temperaturestr=format_field_temperature(temperature);
(-)gdivelog-0.5.1/src/renumber_db.c (-10 / +29 lines)
Lines 28-56 Link Here
28
28
29
extern sqlite3 *logbook_db;
29
extern sqlite3 *logbook_db;
30
30
31
static gint renumber_callback(GList **list,gint argc,gchar **argv, gchar **azColName) 
32
{
33
  (*list) = g_list_prepend(*list,GINT_TO_POINTER(atoi(argv[0])));
34
  return 0;
35
}
36
37
gboolean renumber_db_dive(gint dive, gint number)
38
{
39
  gint rc;
40
  gboolean rval=TRUE;
41
  gchar *sqlErrMsg=NULL,*sqlcmd=sqlite3_mprintf("UPDATE Dive SET dive_number=%d WHERE dive_id=%d",number,dive);
42
43
  rc=sqlite3_exec(logbook_db,sqlcmd,NULL,0,&sqlErrMsg);
44
  if(rc!=SQLITE_OK) {
45
    g_log(G_LOG_DOMAIN,G_LOG_LEVEL_ERROR,"Error in renumber_db_renumber_dives()\nCode=%d\nError Message='%s'\n",rc,sqlErrMsg);
46
    sqlite3_free(sqlErrMsg);
47
    rval=FALSE;
48
  }
49
  else db_not_saved();
50
  sqlite3_free(sqlcmd);
51
  return rval;
52
}
53
31
gboolean renumber_db_renumber_dives(gint initial_dive_number)
54
gboolean renumber_db_renumber_dives(gint initial_dive_number)
32
{
55
{
33
  gint rc;
56
  gint rc;
34
  glong min_dive_number;
57
  glong min_dive_number;
35
  gchar *sqlErrMsg=NULL,*sqlcmd=NULL;
58
  gchar *sqlErrMsg=NULL,*sqlcmd=NULL;
36
  gboolean rval=TRUE;
59
  gboolean rval=TRUE;
60
  GList *list = g_list_alloc();
37
61
38
  rc=sqlite3_exec(logbook_db,"SELECT MIN(dive_number) FROM Dive",(gpointer)db_generic_callback_long,&min_dive_number,&sqlErrMsg);  
62
  rc=sqlite3_exec(logbook_db,"SELECT dive_id FROM Dive ORDER BY dive_datetime DESC;",(gpointer)renumber_callback,&list,&sqlErrMsg);  
39
  if(rc!=SQLITE_OK) {
63
  if(rc!=SQLITE_OK) {
40
    g_log(G_LOG_DOMAIN,G_LOG_LEVEL_ERROR,"Error in renumber_db_renumber_dives()\nCode=%d\nError Message='%s'\n",rc,sqlErrMsg);
64
    g_log(G_LOG_DOMAIN,G_LOG_LEVEL_ERROR,"Error in renumber_db_renumber_dives()\nCode=%d\nError Message='%s'\n",rc,sqlErrMsg);
41
    sqlite3_free(sqlErrMsg);
65
    sqlite3_free(sqlErrMsg);
42
    rval=FALSE;
66
    rval=FALSE;
43
  }
67
  }
44
  else {
68
  else {
45
    if(min_dive_number!=initial_dive_number) {
69
    GList *it=g_list_first(list);
46
      sqlcmd=sqlite3_mprintf("UPDATE Dive SET dive_number=dive_number+%d",initial_dive_number-min_dive_number);
70
    while(it){
47
      sqlite3_exec(logbook_db,sqlcmd,NULL,0,&sqlErrMsg);
71
      if(!renumber_db_dive(GPOINTER_TO_INT(it->data),initial_dive_number++)) rval=FALSE;
48
      if(rc!=SQLITE_OK) {
72
      it=g_list_next(it);
49
        g_log(G_LOG_DOMAIN,G_LOG_LEVEL_ERROR,"Error in renumber_db_renumber_dives()\nCode=%d\nError Message='%s'\n",rc,sqlErrMsg);
50
        sqlite3_free(sqlErrMsg);
51
        rval=FALSE;
52
      }
53
      else db_not_saved();
54
    }
73
    }
55
  }
74
  }
56
  return rval;
75
  return rval;
(-)gdivelog-0.5.1/src/site_gui.c (-9 / +10 lines)
Lines 495-508 Link Here
495
  gint site_parent_id;
495
  gint site_parent_id;
496
  GtkTreeModel *model;
496
  GtkTreeModel *model;
497
  GtkTreeIter iter;
497
  GtkTreeIter iter;
498
  
498
499
  model=gtk_combo_box_get_model(combobox);
499
  model=gtk_combo_box_get_model(combobox);
500
  gtk_combo_box_get_active_iter(combobox,&iter);
500
  if(gtk_combo_box_get_active_iter(combobox,&iter)) {
501
  gtk_tree_model_get(model,&iter,
501
    gtk_tree_model_get(model,&iter,
502
    SITEPARENT_COL_SITE_ID,
502
      SITEPARENT_COL_SITE_ID,
503
    &site_parent_id,
503
      &site_parent_id,
504
    -1
504
      -1
505
  );
505
    );
506
  if((site_parent_id==current_site_id)||site_db_isancestor(site_parent_id,current_site_id))
506
    if((site_parent_id==current_site_id)||site_db_isancestor(site_parent_id,current_site_id))
507
    site_set_save_sensitive(FALSE);
507
      site_set_save_sensitive(FALSE);
508
  }
508
}
509
}

Return to bug 225673