comparison src/utilops.c @ 143:0d1bf3ac6cd8

improved FileDataChangeInfo structure, check for another file operation in progress
author nadvornik
date Mon, 08 Oct 2007 19:41:49 +0000
parents e57b0207e180
children f6e307c7bad6
comparison
equal deleted inserted replaced
142:b5aa95241859 143:0d1bf3ac6cd8
775 try = FALSE; 775 try = FALSE;
776 } 776 }
777 } 777 }
778 if (try) 778 if (try)
779 { 779 {
780 file_data_change_info_new(fdm->source_fd->path, fdm->dest, fdm->source_fd);
781 if (fdm->copy) 780 if (fdm->copy)
782 { 781 {
783 if (copy_file_ext(fdm->source_fd)) 782 if (file_data_add_change_info(fdm->source_fd, FILEDATA_CHANGE_COPY, fdm->source_fd->path, fdm->dest) &&
783 copy_file_ext(fdm->source_fd))
784 { 784 {
785 success = TRUE; 785 success = TRUE;
786 } 786 }
787 } 787 }
788 else 788 else
789 { 789 {
790 if (move_file_ext(fdm->source_fd)) 790 if (file_data_add_change_info(fdm->source_fd, FILEDATA_CHANGE_MOVE, fdm->source_fd->path, fdm->dest) &&
791 move_file_ext(fdm->source_fd))
791 { 792 {
792 success = TRUE; 793 success = TRUE;
793 } 794 }
794 } 795 }
795 796
1016 return; 1017 return;
1017 } 1018 }
1018 else 1019 else
1019 { 1020 {
1020 gint success = FALSE; 1021 gint success = FALSE;
1021 file_data_change_info_new(fds->source_fd->path, fds->dest, fds->source_fd);
1022 if (fds->copy) 1022 if (fds->copy)
1023 { 1023 {
1024 if (copy_file_ext(fds->source_fd)) 1024 if (file_data_add_change_info(fds->source_fd, FILEDATA_CHANGE_COPY, fds->source_fd->path, fds->dest) &&
1025 copy_file_ext(fds->source_fd))
1025 { 1026 {
1026 success = TRUE; 1027 success = TRUE;
1027 } 1028 }
1028 } 1029 }
1029 else 1030 else
1030 { 1031 {
1031 if (move_file_ext(fds->source_fd)) 1032 if (file_data_add_change_info(fds->source_fd, FILEDATA_CHANGE_MOVE, fds->source_fd->path, fds->dest) &&
1033 move_file_ext(fds->source_fd))
1032 { 1034 {
1033 success = TRUE; 1035 success = TRUE;
1034 } 1036 }
1035 } 1037 }
1036 if (!success) 1038 if (!success)
1514 file_util_warning_dialog(_("Delete failed"), msg->str, GTK_STOCK_DIALOG_ERROR, NULL); 1516 file_util_warning_dialog(_("Delete failed"), msg->str, GTK_STOCK_DIALOG_ERROR, NULL);
1515 } 1517 }
1516 g_string_free(msg, TRUE); 1518 g_string_free(msg, TRUE);
1517 } 1519 }
1518 1520
1519 if (!(flags & EDITOR_ERROR_MASK)) 1521
1520 { 1522 {
1521 /* files were successfully deleted, call the maint functions */
1522 while (list) 1523 while (list)
1523 { 1524 {
1524 FileData *fd = list->data; 1525 FileData *fd = list->data;
1525 file_maint_removed(fd, list); 1526 if (flags & EDITOR_ERROR_MASK)
1527 /* an error occured -> no change -> delete change info */
1528 file_data_change_info_free(NULL, fd);
1529 else
1530 /* files were successfully deleted, call the maint functions and keep the change info forever */
1531 file_maint_removed(fd, list);
1526 list = list->next; 1532 list = list->next;
1527 } 1533 }
1528 } 1534 }
1529 return ret; 1535 return ret;
1530 } 1536 }
1531 1537
1532 static void file_util_delete_multiple_ok_cb(GenericDialog *gd, gpointer data) 1538 static void file_util_delete_multiple_ok_cb(GenericDialog *gd, gpointer data)
1533 { 1539 {
1534 GList *source_list = data; 1540 GList *source_list = data;
1541 GList *work = source_list;
1542 gboolean ok = TRUE;
1543
1544 while (work)
1545 {
1546 FileData *fd = work->data;
1547 if (fd->change) ok = FALSE; /* another operation in progress */
1548 work = work->next;
1549 }
1550
1551 if (!ok)
1552 {
1553 file_util_warning_dialog(_("File deletion failed"), _("Another operation in progress.\n"), GTK_STOCK_DIALOG_ERROR, NULL);
1554 filelist_free(source_list);
1555 return;
1556 }
1557
1535 1558
1536 if (editor_command[CMD_DELETE]) 1559 if (editor_command[CMD_DELETE])
1537 { 1560 {
1538 gint flags; 1561 gint flags;
1562 work = source_list;
1563 while (work)
1564 {
1565 FileData *fd = work->data;
1566 file_data_add_change_info(fd, FILEDATA_CHANGE_DELETE, NULL, NULL);
1567 work = work->next;
1568 }
1569
1539 if ((flags = start_editor_from_filelist_full(CMD_DELETE, source_list, file_util_delete_ext_cb, NULL))) 1570 if ((flags = start_editor_from_filelist_full(CMD_DELETE, source_list, file_util_delete_ext_cb, NULL)))
1540 { 1571 {
1541 gchar *text = g_strdup_printf(_("%s\nUnable to delete files by external command.\n"), editor_get_error_str(flags)); 1572 gchar *text = g_strdup_printf(_("%s\nUnable to delete files by external command.\n"), editor_get_error_str(flags));
1542 file_util_warning_dialog(_("File deletion failed"), text, GTK_STOCK_DIALOG_ERROR, NULL); 1573 file_util_warning_dialog(_("File deletion failed"), text, GTK_STOCK_DIALOG_ERROR, NULL);
1543 g_free(text); 1574 g_free(text);
1544 } 1575 }
1576
1545 filelist_free(source_list); 1577 filelist_free(source_list);
1546 return; 1578 return;
1547 } 1579 }
1548 1580
1549 1581
1745 1777
1746 static void file_util_delete_ok_cb(GenericDialog *gd, gpointer data) 1778 static void file_util_delete_ok_cb(GenericDialog *gd, gpointer data)
1747 { 1779 {
1748 FileData *fd = data; 1780 FileData *fd = data;
1749 1781
1782 if (!file_data_add_change_info(fd, FILEDATA_CHANGE_DELETE, NULL, NULL))
1783 {
1784 file_util_warning_dialog(_("File deletion failed"), _("Another operation in progress.\n"), GTK_STOCK_DIALOG_ERROR, NULL);
1785 file_data_unref(fd);
1786 return;
1787 }
1788
1789
1750 if (editor_command[CMD_DELETE]) 1790 if (editor_command[CMD_DELETE])
1751 { 1791 {
1752 gint flags; 1792 gint flags;
1753 if ((flags = start_editor_from_file_full(CMD_DELETE, fd, file_util_delete_ext_cb, NULL))) 1793 if ((flags = start_editor_from_file_full(CMD_DELETE, fd, file_util_delete_ext_cb, NULL)))
1754 { 1794 {
1755 gchar *text = g_strdup_printf(_("%s\nUnable to delete file by external command:\n%s"), editor_get_error_str(flags), fd->path); 1795 gchar *text = g_strdup_printf(_("%s\nUnable to delete file by external command:\n%s"), editor_get_error_str(flags), fd->path);
1756 file_util_warning_dialog(_("File deletion failed"), text, GTK_STOCK_DIALOG_ERROR, NULL); 1796 file_util_warning_dialog(_("File deletion failed"), text, GTK_STOCK_DIALOG_ERROR, NULL);
1757 g_free(text); 1797 g_free(text);
1798 file_data_change_info_free(NULL, fd);
1758 } 1799 }
1759 } 1800 }
1760 else if (!file_util_unlink(fd)) 1801 else if (!file_util_unlink(fd))
1761 { 1802 {
1762 gchar *text = g_strdup_printf(_("Unable to delete file:\n%s"), fd->path); 1803 gchar *text = g_strdup_printf(_("Unable to delete file:\n%s"), fd->path);
1763 file_util_warning_dialog(_("File deletion failed"), text, GTK_STOCK_DIALOG_ERROR, NULL); 1804 file_util_warning_dialog(_("File deletion failed"), text, GTK_STOCK_DIALOG_ERROR, NULL);
1764 g_free(text); 1805 g_free(text);
1806 file_data_change_info_free(NULL, fd);
1765 } 1807 }
1766 else 1808 else
1767 { 1809 {
1768 file_maint_removed(fd, NULL); 1810 file_maint_removed(fd, NULL);
1769 } 1811 }
1966 gtk_widget_show(gd->dialog); 2008 gtk_widget_show(gd->dialog);
1967 return; 2009 return;
1968 } 2010 }
1969 else 2011 else
1970 { 2012 {
1971 file_data_change_info_new(fdlg->source_fd->path, fdlg->dest_path, fdlg->source_fd); 2013 if (!file_data_add_change_info(fdlg->source_fd, FILEDATA_CHANGE_RENAME, fdlg->source_fd->path, fdlg->dest_path) ||
1972 if (!rename_file_ext(fdlg->source_fd)) 2014 !rename_file_ext(fdlg->source_fd))
1973 { 2015 {
1974 gchar *text = g_strdup_printf(_("Unable to rename file:\n%s\n to:\n%s"), 2016 gchar *text = g_strdup_printf(_("Unable to rename file:\n%s\n to:\n%s"),
1975 fdlg->source_fd->name, 2017 fdlg->source_fd->name,
1976 filename_from_path(fdlg->dest_path)); 2018 filename_from_path(fdlg->dest_path));
1977 file_util_warning_dialog(_("Error renaming file"), text, GTK_STOCK_DIALOG_ERROR, NULL); 2019 file_util_warning_dialog(_("Error renaming file"), text, GTK_STOCK_DIALOG_ERROR, NULL);
2186 else 2228 else
2187 { 2229 {
2188 dest = g_strdup_printf("%s/%s%0*d%s", base, front, padding, n, end); 2230 dest = g_strdup_printf("%s/%s%0*d%s", base, front, padding, n, end);
2189 } 2231 }
2190 2232
2191 file_data_change_info_new(fd->path, dest, fd); 2233 if (!file_data_add_change_info(fd, FILEDATA_CHANGE_RENAME, fd->path, dest) ||
2192 if (!rename_file_ext(fd)) 2234 !rename_file_ext(fd))
2193 { 2235 {
2194 success = FALSE; 2236 success = FALSE;
2195 } 2237 }
2196 2238
2197 g_free(dest); 2239 g_free(dest);
2688 /* 2730 /*
2689 GList *list = g_list_append(NULL, file_data_ref(fds->source_fd)); 2731 GList *list = g_list_append(NULL, file_data_ref(fds->source_fd));
2690 file_util_do_move_list(list, FALSE, TRUE); 2732 file_util_do_move_list(list, FALSE, TRUE);
2691 filelist_free(list); 2733 filelist_free(list);
2692 */ 2734 */
2693 file_data_change_info_new(fds->source_fd->path, fds->dest, fds->source_fd); 2735 if (!file_data_add_change_info(fds->source_fd, FILEDATA_CHANGE_RENAME, fds->source_fd->path, fds->dest) ||
2694 if (!rename_file_ext(fds->source_fd)) 2736 !rename_file_ext(fds->source_fd))
2695 { 2737 {
2696 gchar *text = g_strdup_printf(_("Unable to rename file:\n%s\nto:\n%s"), fds->source_fd->name, filename_from_path(fds->dest)); 2738 gchar *text = g_strdup_printf(_("Unable to rename file:\n%s\nto:\n%s"), fds->source_fd->name, filename_from_path(fds->dest));
2697 file_util_warning_dialog(_("Error renaming file"), text, GTK_STOCK_DIALOG_ERROR, NULL); 2739 file_util_warning_dialog(_("Error renaming file"), text, GTK_STOCK_DIALOG_ERROR, NULL);
2698 g_free(text); 2740 g_free(text);
2699 } 2741 }
2900 file_util_warning_dialog(_("Rename failed"), text, GTK_STOCK_DIALOG_INFO,parent); 2942 file_util_warning_dialog(_("Rename failed"), text, GTK_STOCK_DIALOG_INFO,parent);
2901 g_free(text); 2943 g_free(text);
2902 2944
2903 return FALSE; 2945 return FALSE;
2904 } 2946 }
2905 file_data_change_info_new(old_fd->path, new_path, old_fd); 2947 if (!file_data_add_change_info(old_fd, FILEDATA_CHANGE_RENAME, old_fd->path, new_path) ||
2906 if (!rename_file_ext(old_fd)) 2948 !rename_file_ext(old_fd))
2907 { 2949 {
2908 gchar *text = g_strdup_printf(_("Failed to rename %s to %s."), old_name, new_name); 2950 gchar *text = g_strdup_printf(_("Failed to rename %s to %s."), old_name, new_name);
2909 file_util_warning_dialog(_("Rename failed"), text, GTK_STOCK_DIALOG_ERROR, parent); 2951 file_util_warning_dialog(_("Rename failed"), text, GTK_STOCK_DIALOG_ERROR, parent);
2910 g_free(text); 2952 g_free(text);
2911 2953