aboutsummaryrefslogtreecommitdiff
path: root/src/fs/gnunet-fs-gtk_event-handler.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/fs/gnunet-fs-gtk_event-handler.c')
-rw-r--r--src/fs/gnunet-fs-gtk_event-handler.c33
1 files changed, 19 insertions, 14 deletions
diff --git a/src/fs/gnunet-fs-gtk_event-handler.c b/src/fs/gnunet-fs-gtk_event-handler.c
index 376fba44..f49795cf 100644
--- a/src/fs/gnunet-fs-gtk_event-handler.c
+++ b/src/fs/gnunet-fs-gtk_event-handler.c
@@ -391,11 +391,11 @@ start_download (GtkTreeView *tree_view,
391 de = GNUNET_malloc (sizeof (struct DownloadEntry)); 391 de = GNUNET_malloc (sizeof (struct DownloadEntry));
392 de->uri = GNUNET_FS_uri_dup (uri); 392 de->uri = GNUNET_FS_uri_dup (uri);
393 de->filename = buf; 393 de->filename = buf;
394 de->meta = GNUNET_CONTAINER_meta_data_duplicate (meta);
395 de->sr = sr; 394 de->sr = sr;
396 sr->download = de; 395 sr->download = de;
397 de->anonymity = anonymity; 396 de->anonymity = anonymity;
398 de->is_recursive = is_recursive; 397 de->is_recursive = is_recursive;
398 de->is_directory = GNUNET_FS_meta_data_test_for_directory (meta);
399 fprintf (stderr, 399 fprintf (stderr,
400 "lp %d, have-sug: %d\n", 400 "lp %d, have-sug: %d\n",
401 local_parents, 401 local_parents,
@@ -1710,7 +1710,7 @@ mark_download_progress (struct DownloadEntry *de, uint64_t size,
1710 -1); 1710 -1);
1711 if ( (depth == 0) && 1711 if ( (depth == 0) &&
1712 (block_size > 0) && 1712 (block_size > 0) &&
1713 (GNUNET_YES == GNUNET_FS_meta_data_test_for_directory (de->meta)) ) 1713 (GNUNET_YES == de->is_directory) )
1714 { 1714 {
1715 /* got a data block of a directory, list its contents */ 1715 /* got a data block of a directory, list its contents */
1716 struct AddDirectoryEntryContext ade; 1716 struct AddDirectoryEntryContext ade;
@@ -1723,9 +1723,7 @@ mark_download_progress (struct DownloadEntry *de, uint64_t size,
1723 offset, &add_directory_entry, &ade)) 1723 offset, &add_directory_entry, &ade))
1724 { 1724 {
1725 /* Mime type was wrong, this is not a directory, update model! */ 1725 /* Mime type was wrong, this is not a directory, update model! */
1726 GNUNET_break (GNUNET_OK == 1726 de->is_directory = GNUNET_SYSERR;
1727 GNUNET_CONTAINER_meta_data_delete (de->meta,
1728 EXTRACTOR_METATYPE_MIMETYPE, NULL, 0));
1729 gtk_tree_store_set (de->sr->tab->ts, &iter, 1727 gtk_tree_store_set (de->sr->tab->ts, &iter,
1730 10, "" /* unknown mime type */, -1); 1728 10, "" /* unknown mime type */, -1);
1731 } 1729 }
@@ -1782,7 +1780,7 @@ mark_download_completed (struct DownloadEntry *de, uint64_t size,
1782 1780
1783 de->is_done = GNUNET_YES; 1781 de->is_done = GNUNET_YES;
1784 mark_download_progress (de, size, size, NULL, 0, 0, 0); 1782 mark_download_progress (de, size, size, NULL, 0, 0, 0);
1785 if ( (GNUNET_YES == GNUNET_FS_meta_data_test_for_directory (de->meta)) && 1783 if ( (GNUNET_NO != de->is_directory) &&
1786 (filename != NULL) ) 1784 (filename != NULL) )
1787 { 1785 {
1788 /* download was for a directory (and we have a temp file for scanning); 1786 /* download was for a directory (and we have a temp file for scanning);
@@ -1790,7 +1788,9 @@ mark_download_completed (struct DownloadEntry *de, uint64_t size,
1790 ade.tab = de->sr->tab; 1788 ade.tab = de->sr->tab;
1791 ade.prr = de->sr->rr; 1789 ade.prr = de->sr->rr;
1792 ade.check_duplicates = GNUNET_YES; 1790 ade.check_duplicates = GNUNET_YES;
1793 GNUNET_FS_GTK_mmap_and_scan (filename, &add_directory_entry, &ade); 1791 if (GNUNET_OK !=
1792 GNUNET_FS_GTK_mmap_and_scan (filename, &add_directory_entry, &ade))
1793 de->is_directory = GNUNET_NO;
1794 } 1794 }
1795 change_download_color (de, "green"); 1795 change_download_color (de, "green");
1796} 1796}
@@ -1911,13 +1911,11 @@ download_lost_parent (struct DownloadEntry *de)
1911 GtkTreeIter iter_old; 1911 GtkTreeIter iter_old;
1912 GtkTreeIter child; 1912 GtkTreeIter child;
1913 GtkTreeModel *model; 1913 GtkTreeModel *model;
1914 struct GNUNET_CONTAINER_MetaData *meta;
1915 struct GNUNET_FS_Uri *uri;
1914 1916
1915 /* first, move the root of the respective 'de'-tree */ 1917 /* find the 'old' root */
1916 rr_old = de->sr->rr; 1918 rr_old = de->sr->rr;
1917 de->sr = GNUNET_GTK_add_to_uri_tab (de->meta, de->uri);
1918 de->sr->download = de;
1919
1920
1921 tm_old = gtk_tree_row_reference_get_model (rr_old); 1919 tm_old = gtk_tree_row_reference_get_model (rr_old);
1922 path = gtk_tree_row_reference_get_path (rr_old); 1920 path = gtk_tree_row_reference_get_path (rr_old);
1923 gtk_tree_row_reference_free (rr_old); 1921 gtk_tree_row_reference_free (rr_old);
@@ -1928,7 +1926,16 @@ download_lost_parent (struct DownloadEntry *de)
1928 return; 1926 return;
1929 } 1927 }
1930 gtk_tree_path_free (path); 1928 gtk_tree_path_free (path);
1929 gtk_tree_model_get (tm_old, &iter_old,
1930 0, &meta,
1931 1, &uri,
1932 -1);
1933
1934 /* create the target root */
1935 de->sr = GNUNET_GTK_add_to_uri_tab (meta, uri);
1936 de->sr->download = de;
1931 1937
1938 /* get positions of the 'new' root */
1932 model = GTK_TREE_MODEL (de->sr->tab->ts); 1939 model = GTK_TREE_MODEL (de->sr->tab->ts);
1933 path = gtk_tree_row_reference_get_path (de->sr->rr); 1940 path = gtk_tree_row_reference_get_path (de->sr->rr);
1934 if (! gtk_tree_model_get_iter (model, &iter, path)) 1941 if (! gtk_tree_model_get_iter (model, &iter, path))
@@ -1986,8 +1993,6 @@ setup_download (struct DownloadEntry *de, struct DownloadEntry *pde,
1986 } 1993 }
1987 de->dc = dc; 1994 de->dc = dc;
1988 de->pde = pde; 1995 de->pde = pde;
1989 if ( (meta != NULL) && (de->meta == NULL) )
1990 de->meta = GNUNET_CONTAINER_meta_data_duplicate (meta);
1991 if (NULL != sr) 1996 if (NULL != sr)
1992 { 1997 {
1993 /* have a search result, establish mapping de <--> sr */ 1998 /* have a search result, establish mapping de <--> sr */