summaryrefslogtreecommitdiffstats
path: root/quanta/dialogs/copyto.cpp
blob: 429fa457210a5377bca780b06214c2d7c66c011d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
/***************************************************************************
                          copytodlg.cpp  -  description
                             -------------------
    begin                : Mon Mar 27 2000
    copyright            : (C) 2000 by Yacovlev Alexander & Dmitry Poplavsky <dima@mail.univ.kiev.ua>
                           (C) 2001-2002 Andras Mantia <amantia@kde.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.                                   *
 *                                                                         *
 ***************************************************************************/
// qt includes

// kde includes
#include <kio/job.h>
#include <kio/netaccess.h>

//app includes
#include "copyto.h"
#include "qextfileinfo.h"

CopyTo::CopyTo(const KURL& dirURL)
{
  m_InitialDirUrl = dirURL;
}

CopyTo::~CopyTo(){
}

KURL CopyTo::copy(const KURL& urlToCopy, const KURL& destination)
{
  m_destList.clear();
  KURL targetDirURL = KURL();
  if ( destination.isEmpty() )
  {
    targetDirURL = m_InitialDirUrl;
  } else
  {
   targetDirURL = destination;
  }
  targetDirURL.adjustPath(1);

  bool doCopy = true;
  if (!QExtFileInfo::exists(targetDirURL, false, 0L))
  {
    doCopy = QExtFileInfo::createDir(targetDirURL, 0L);
  }

  KURL destURL;
  if (doCopy)
  {
    KIO::UDSEntry entry;
    KIO::NetAccess::stat(urlToCopy, entry, 0);
    KFileItem item(entry, urlToCopy, false, true);
    destURL = targetDirURL;
    destURL.setPath(destURL.path(1) + urlToCopy.fileName(false));
    if (item.isDir())
        destURL.adjustPath(1);

    KIO::CopyJob *job = KIO::copy(urlToCopy, destURL, true);
    connect( job, SIGNAL(result( KIO::Job *)),
                  SLOT  (slotResult( KIO::Job *)));

    QString path = destURL.path();
    if (path != "." && path != "..")
      m_destList.append(destURL);
  }

  return destURL;
}

void CopyTo::slotResult( KIO::Job *)
{
  emit addFilesToProject(m_destList);
  emit deleteDialog(this);
}

KURL::List CopyTo::copy(const KURL::List& sourceList, const KURL& destination )
{
  m_listCopy = true;
  m_destList.clear();
  KURL targetDirURL = KURL();
  if ( destination.isEmpty() )
  {
    targetDirURL = m_InitialDirUrl;
  } else
  {
    targetDirURL = destination;
  }
  bool doCopy = true;
  if (!QExtFileInfo::exists(targetDirURL, false, 0L))
  {
    doCopy = QExtFileInfo::createDir(targetDirURL, 0L);
  }

  KIO::UDSEntry entry;
  if (doCopy)
  {
    QString path;
    for (uint i = 0; i < sourceList.count(); i++)
    {
      KURL srcURL = sourceList[i];
      KIO::NetAccess::stat(srcURL, entry, 0);
      KFileItem item(entry, srcURL, false, true);
      KURL u = targetDirURL;
      u.setPath(targetDirURL.path(1) + srcURL.fileName());
      if (item.isDir())
         u.adjustPath(1);
      path = u.path();
      if (path != "." && path != "..")
        m_destList.append(u);
    }

    KIO::CopyJob *job = KIO::copy(sourceList, targetDirURL, true);
    connect( job, SIGNAL(result( KIO::Job *)),
                  SLOT  (slotResult( KIO::Job *)));
  }

  return m_destList;

}
#include "copyto.moc"