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 128 129
|
#include "ListThread.h"
#include <QStorageInfo>
#include <QtGlobal>
#include "../../../cpp11addition.h"
#include "async/TransferThreadAsync.h"
void ListThread::pause()
{
ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
if(putInPause)
{
ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Seam already in pause!");
return;
}
putInPause=true;
int index=0;
int loop_sub_size_transfer_thread_search=transferThreadList.size();
while(index<loop_sub_size_transfer_thread_search)
{
transferThreadList.at(index)->pause();
index++;
}
emit isInPause(true);
}
void ListThread::resume()
{
ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
if(!putInPause)
{
ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Seam already resumed!");
return;
}
putInPause=false;
startGeneralTransfer();
doNewActions_start_transfer();
int index=0;
int loop_sub_size_transfer_thread_search=transferThreadList.size();
while(index<loop_sub_size_transfer_thread_search)
{
transferThreadList.at(index)->resume();
index++;
}
emit isInPause(false);
}
void ListThread::skip(const uint64_t &id)
{
skipInternal(id);
}
bool ListThread::skipInternal(const uint64_t &id)
{
int index=0;
int loop_sub_size_transfer_thread_search=transferThreadList.size();
while(index<loop_sub_size_transfer_thread_search)
{
if(transferThreadList.at(index)->transferId==id)
{
ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"skip one transfer: "+std::to_string(id));
transferThreadList.at(index)->skip();
return true;
}
index++;
}
int int_for_internal_loop=0;
const int &loop_size=actionToDoListTransfer.size();
while(int_for_internal_loop<loop_size)
{
if(actionToDoListTransfer.at(int_for_internal_loop).id==id)
{
ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[%1] remove at not running, for id: %2").arg(int_for_internal_loop).arg(id).toStdString());
Ultracopier::ReturnActionOnCopyList newAction;
newAction.type=Ultracopier::RemoveItem;
newAction.userAction.moveAt=1;
newAction.addAction=actionToDoTransferToItemOfCopyList(actionToDoListTransfer.at(int_for_internal_loop));
newAction.userAction.position=int_for_internal_loop;
actionDone.push_back(newAction);
actionToDoListTransfer.erase(actionToDoListTransfer.cbegin()+int_for_internal_loop);
ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("actionToDoListTransfer.size(): %1, actionToDoListInode: %2, actionToDoListInode_afterTheTransfer: %3").arg(actionToDoListTransfer.size()).arg(actionToDoListInode.size()).arg(actionToDoListInode_afterTheTransfer.size()).toStdString());
if(actionToDoListTransfer.empty() && actionToDoListInode.empty() && actionToDoListInode_afterTheTransfer.empty())
updateTheStatus();
return true;
}
int_for_internal_loop++;
}
ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"skip transfer not found: "+std::to_string(id));
return false;
}
//executed in this thread
void ListThread::cancel()
{
ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
if(stopIt)
{
waitCancel.release();
return;
}
stopIt=true;
int index=0;
int loop_size=transferThreadList.size();
while(index<loop_size)
{
transferThreadList.at(index)->stop();
transferThreadList.at(index)->transferId=0;
index++;
}
index=0;
loop_size=scanFileOrFolderThreadsPool.size();
while(index<loop_size)
{
scanFileOrFolderThreadsPool.at(index)->stop();
delete scanFileOrFolderThreadsPool.at(index);//->deleteLayer();
scanFileOrFolderThreadsPool[index]=NULL;
index++;
}
scanFileOrFolderThreadsPool.clear();
#ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT
if(clockForTheCopySpeed!=NULL)
{
clockForTheCopySpeed->stop();
delete clockForTheCopySpeed;
clockForTheCopySpeed=NULL;
}
#endif
checkIfReadyToCancel();
}
|