#include "doodle-treeview.h"
#include "dnd.h"
#include "tbo-utils.h"
+#include "tbo-files.h"
void free_gstring_array (GArray *arr);
get_files (gchar *base_dir, gboolean isdir)
{
GError *error = NULL;
- GDir *dir = g_dir_open (base_dir, 0, &error);
gchar complete_dir[255];
const gchar *filename;
struct stat filestat;
+ int st;
GArray *array = g_array_new (FALSE, FALSE, sizeof(GString*));
+ st = stat (base_dir, &filestat);
+ if (st)
+ return NULL;
+
+ GDir *dir = g_dir_open (base_dir, 0, &error);
+
while (filename = g_dir_read_name (dir))
{
size_t strsize = sizeof (char) * (strlen (base_dir) + strlen (filename) + 2);
snprintf (complete_dir, strsize, "%s/%s", base_dir, filename);
- stat (complete_dir, &filestat);
+ st = stat (complete_dir, &filestat);
if (isdir && S_ISDIR (filestat.st_mode))
{
N_TARGETS,
GDK_ACTION_COPY);
g_signal_connect (ebox, "drag-data-get", G_CALLBACK (drag_data_get_handl),
- mystr->str + strlen (DATA_DIR "/doodle/"));
+ mystr->str + tbo_files_prefix_len (mystr->str));
g_signal_connect (ebox, "drag-begin", G_CALLBACK (drag_begin_handl), mystr->str);
g_signal_connect (ebox, "drag-end", G_CALLBACK (drag_end_handl), mystr->str);
dirname = malloc (255*sizeof(char));
char label_format[255];
+ int i, j, k;
vbox = gtk_vbox_new (FALSE, 5);
- GArray *arr = get_files (DATA_DIR "/doodle", TRUE);
- int i, j;
+ GArray *arr = NULL;
GString *mystr, *mystr2;
- for (i=0; i<arr->len; i++)
- {
- mystr = g_array_index (arr, GString*, i);
- vbox2 = gtk_vbox_new (FALSE, 5);
- get_base_name (mystr->str, dirname, 255);
- snprintf (label_format, 255, "<span underline=\"single\" size=\"large\" weight=\"ultrabold\">%s</span>", dirname);
- expander = gtk_expander_new (label_format);
- gtk_expander_set_use_markup (GTK_EXPANDER (expander), TRUE);
- gtk_box_pack_start (GTK_BOX (vbox), expander, FALSE, FALSE, 5);
- gtk_container_add (GTK_CONTAINER (expander), vbox2);
+ char **possible_dirs = tbo_files_get_dirs ();
+ for (k=0; possible_dirs[k]; k++)
+ {
+ arr = get_files (possible_dirs[k], TRUE);
+ if (!arr) continue;
- mystr2 = g_string_new (mystr->str);
- g_signal_connect (GTK_EXPANDER (expander), "activate", G_CALLBACK (on_expand_cb), mystr2);
+ for (i=0; i<arr->len; i++)
+ {
+ mystr = g_array_index (arr, GString*, i);
+
+ vbox2 = gtk_vbox_new (FALSE, 5);
+ get_base_name (mystr->str, dirname, 255);
+ snprintf (label_format, 255, "<span underline=\"single\" size=\"large\" weight=\"ultrabold\">%s</span>", dirname);
+ expander = gtk_expander_new (label_format);
+ gtk_expander_set_use_markup (GTK_EXPANDER (expander), TRUE);
+ gtk_box_pack_start (GTK_BOX (vbox), expander, FALSE, FALSE, 5);
+ gtk_container_add (GTK_CONTAINER (expander), vbox2);
+
+ mystr2 = g_string_new (mystr->str);
+ g_signal_connect (GTK_EXPANDER (expander), "activate", G_CALLBACK (on_expand_cb), mystr2);
+ }
+ free_gstring_array (arr);
}
- free_gstring_array (arr);
+ tbo_files_free (possible_dirs);
free (dirname);
--- /dev/null
+#include <sys/stat.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "tbo-files.h"
+
+char **tbo_files_get_dirs ()
+{
+ // Possible doodle dirs
+ char **possible_dirs = malloc (3*sizeof(char*));
+ possible_dirs[0] = malloc (255*sizeof(char*));
+ possible_dirs[1] = malloc (255*sizeof(char*));
+ possible_dirs[2] = NULL;
+
+ strcat (strcpy (possible_dirs[0], getenv("HOME")), "/.tbo/doodle");
+ strcpy (possible_dirs[1], DATA_DIR "/doodle");
+
+ return possible_dirs;
+}
+
+int
+tbo_files_prefix_len (char *str)
+{
+ int n, i = 0;
+ char **possible_dirs = tbo_files_get_dirs ();
+ while (possible_dirs[i])
+ {
+ if (g_str_has_prefix (str, possible_dirs[i]))
+ {
+ n = strlen (possible_dirs[i]) + 1;
+ break;
+ }
+ i++;
+ }
+ tbo_files_free (possible_dirs);
+ return n;
+}
+
+void
+tbo_files_free (char **files)
+{
+ int i = 0;
+ while(files[i])
+ {
+ free (files[i]);
+ i++;
+ }
+ free (files);
+}
+
+void
+tbo_files_expand_path (char *source, char *dest)
+{
+ int st, i = 0;
+ char **possible_dirs = tbo_files_get_dirs ();
+ struct stat filestat;
+ while (possible_dirs[i])
+ {
+ snprintf (dest, 255, "%s/%s", possible_dirs[i], source);
+ st = stat (dest, &filestat);
+ if (!st)
+ break;
+
+ i++;
+ }
+
+ tbo_files_free (possible_dirs);
+}