view src/gtk/delete_dialog.c @ 560:1ce11a3d9557

2004-9-22 Brian Masney <masneyb@gftp.org> * lib/options.h src/uicommon/gftpui.c - added option to preserve the file time. In the past, it would save the file time if saving the file permissions was enabled.
author masneyb
date Thu, 23 Sep 2004 01:04:32 +0000
parents 7262851e3ae8
children 49cfbe02926b
line wrap: on
line source

/*****************************************************************************/
/*  delete_dialog.c - the delete dialog                                      */
/*  Copyright (C) 1998-2003 Brian Masney <masneyb@gftp.org>                  */
/*                                                                           */
/*  This program is free software; you can redistribute it and/or modify     */
/*  it under the terms of the GNU General Public License as published by     */
/*  the Free Software Foundation; either version 2 of the License, or        */
/*  (at your option) any later version.                                      */
/*                                                                           */
/*  This program is distributed in the hope that it will be useful,          */
/*  but WITHOUT ANY WARRANTY; without even the implied warranty of           */
/*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the            */
/*  GNU General Public License for more details.                             */
/*                                                                           */
/*  You should have received a copy of the GNU General Public License        */
/*  along with this program; if not, write to the Free Software              */
/*  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA      */
/*****************************************************************************/

#include "gftp-gtk.h"
static const char cvsid[] = "$Id$";

static void
_gftp_gtk_free_del_data (gftp_transfer * transfer, gftp_dialog_data * ddata)
{
  free_tdata (transfer);
}


static void
yesCB (gftp_transfer * transfer, gftp_dialog_data * ddata)
{
  gftpui_callback_data * cdata;
  gftp_window_data * wdata;

  g_return_if_fail (transfer != NULL);
  g_return_if_fail (transfer->files != NULL);

  wdata = transfer->fromwdata;

  cdata = g_malloc0 (sizeof (*cdata));
  cdata->request = wdata->request;
  cdata->files = transfer->files;
  cdata->uidata = wdata;
  cdata->run_function = gftpui_common_run_delete;

  gftpui_common_run_callback_function (cdata);

  g_free (cdata);
  _gftp_gtk_free_del_data (transfer, ddata);
}


static void
askdel (gftp_transfer * transfer)
{
  char *tempstr;

  if (transfer->numfiles > 0 && transfer->numdirs > 0)
    {
      tempstr = g_strdup_printf (_("Are you sure you want to delete these %ld files and %ld directories"), transfer->numfiles, transfer->numdirs);
    }
  else if (transfer->numfiles > 0)
    {
      tempstr = g_strdup_printf (_("Are you sure you want to delete these %ld files"), transfer->numfiles, transfer->numdirs);
    }
  else if (transfer->numdirs > 0)
    {
      tempstr = g_strdup_printf (_("Are you sure you want to delete these %ld directories"), transfer->numfiles, transfer->numdirs);
    }
  else
    return;

  MakeYesNoDialog (_("Delete Files/Directories"), tempstr, 
                   yesCB, transfer, _gftp_gtk_free_del_data, transfer);
  g_free (tempstr);
}


void
delete_dialog (gpointer data)
{
  gftp_file * tempfle, * newfle;
  GList * templist, * filelist;
  gftp_transfer * transfer;
  gftp_window_data * wdata;
  int num, ret;

  wdata = data;
  if (!check_status (_("Delete"), wdata,
      gftpui_common_use_threads (wdata->request), 0, 1, 1))
    return;

  transfer = g_malloc0 (sizeof (*transfer));
  transfer->fromreq = gftp_copy_request (wdata->request);
  transfer->fromwdata = wdata;

  num = 0;
  templist = gftp_gtk_get_list_selection (wdata);
  filelist = wdata->files;
  while (templist != NULL)
    {
      templist = get_next_selection (templist, &filelist, &num);
      tempfle = filelist->data;
      if (strcmp (tempfle->file, "..") == 0 ||
          strcmp (tempfle->file, ".") == 0)
        continue;
      newfle = copy_fdata (tempfle);
      transfer->files = g_list_append (transfer->files, newfle);
    }

  if (transfer->files == NULL)
    {
      free_tdata (transfer);
      return;
    }

  gftp_swap_socks (transfer->fromreq, wdata->request);

  ret = gftp_gtk_get_subdirs (transfer, &wdata->tid);

  gftp_swap_socks (wdata->request, transfer->fromreq);

  if (!GFTP_IS_CONNECTED (wdata->request))
    {
      gftpui_disconnect (wdata);
      return;
    }

  if (!ret)
    return;

  askdel (transfer);
}