mirror of
https://github.com/RetroShare/RetroShare.git
synced 2025-01-23 22:01:05 -05:00
fixed the pause system
git-svn-id: http://svn.code.sf.net/p/retroshare/code/branches/v0.5.0@2529 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
parent
b4d8c398ce
commit
11ce908e15
@ -277,7 +277,7 @@ void ftController::tickTransfers()
|
|||||||
// Collect all non queued files.
|
// Collect all non queued files.
|
||||||
//
|
//
|
||||||
for(std::map<std::string,ftFileControl*>::iterator it(mDownloads.begin()); it != mDownloads.end(); it++)
|
for(std::map<std::string,ftFileControl*>::iterator it(mDownloads.begin()); it != mDownloads.end(); it++)
|
||||||
if(it->second->mState != ftFileControl::QUEUED)
|
if(it->second->mState != ftFileControl::QUEUED && it->second->mState != ftFileControl::PAUSED)
|
||||||
priority_tab[it->second->mPriority].push_back(it->second->mTransfer) ;
|
priority_tab[it->second->mPriority].push_back(it->second->mTransfer) ;
|
||||||
|
|
||||||
// 2 - tick arrays with a probability proportional to priority
|
// 2 - tick arrays with a probability proportional to priority
|
||||||
@ -412,7 +412,9 @@ void ftController::checkDownloadQueue()
|
|||||||
time_t now = time(NULL) ;
|
time_t now = time(NULL) ;
|
||||||
|
|
||||||
for(std::map<std::string,ftFileControl*>::const_iterator it(mDownloads.begin());it!=mDownloads.end();++it)
|
for(std::map<std::string,ftFileControl*>::const_iterator it(mDownloads.begin());it!=mDownloads.end();++it)
|
||||||
if(it->second->mState != ftFileControl::QUEUED && now - it->second->mCreator->lastRecvTimeStamp() > (time_t)MAX_TIME_INACTIVE_REQUEUED)
|
if( it->second->mState != ftFileControl::QUEUED
|
||||||
|
&& it->second->mState != ftFileControl::PAUSED
|
||||||
|
&& now - it->second->mCreator->lastRecvTimeStamp() > (time_t)MAX_TIME_INACTIVE_REQUEUED)
|
||||||
{
|
{
|
||||||
locked_bottomQueue(it->second->mQueuePosition) ;
|
locked_bottomQueue(it->second->mQueuePosition) ;
|
||||||
#ifdef DEBUG_DWLQUEUE
|
#ifdef DEBUG_DWLQUEUE
|
||||||
@ -555,7 +557,7 @@ void ftController::locked_checkQueueElement(uint32_t pos)
|
|||||||
mTurtle->monitorFileTunnels(_queue[pos]->mName,_queue[pos]->mHash,_queue[pos]->mSize) ;
|
mTurtle->monitorFileTunnels(_queue[pos]->mName,_queue[pos]->mHash,_queue[pos]->mSize) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(pos >= _max_active_downloads && _queue[pos]->mState != ftFileControl::QUEUED)
|
if(pos >= _max_active_downloads && _queue[pos]->mState != ftFileControl::QUEUED && _queue[pos]->mState != ftFileControl::PAUSED)
|
||||||
{
|
{
|
||||||
_queue[pos]->mState = ftFileControl::QUEUED ;
|
_queue[pos]->mState = ftFileControl::QUEUED ;
|
||||||
_queue[pos]->mCreator->closeFile() ;
|
_queue[pos]->mCreator->closeFile() ;
|
||||||
@ -1315,10 +1317,12 @@ bool ftController::FileCancel(std::string hash)
|
|||||||
|
|
||||||
bool ftController::FileControl(std::string hash, uint32_t flags)
|
bool ftController::FileControl(std::string hash, uint32_t flags)
|
||||||
{
|
{
|
||||||
#ifdef CONTROL_DEBUG
|
//#ifdef CONTROL_DEBUG
|
||||||
std::cerr << "ftController::FileControl(" << hash << ",";
|
std::cerr << "ftController::FileControl(" << hash << ",";
|
||||||
std::cerr << flags << ")"<<std::endl;
|
std::cerr << flags << ")"<<std::endl;
|
||||||
#endif
|
//#endif
|
||||||
|
RsStackMutex stack(ctrlMutex); /******* LOCKED ********/
|
||||||
|
|
||||||
/*check if the file in the download map*/
|
/*check if the file in the download map*/
|
||||||
std::map<std::string,ftFileControl*>::iterator mit=mDownloads.find(hash);
|
std::map<std::string,ftFileControl*>::iterator mit=mDownloads.find(hash);
|
||||||
if (mit==mDownloads.end())
|
if (mit==mDownloads.end())
|
||||||
@ -1330,14 +1334,15 @@ bool ftController::FileControl(std::string hash, uint32_t flags)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*find the point to transfer module*/
|
/*find the point to transfer module*/
|
||||||
ftTransferModule* ft=(mit->second)->mTransfer;
|
|
||||||
switch (flags)
|
switch (flags)
|
||||||
{
|
{
|
||||||
case RS_FILE_CTRL_PAUSE:
|
case RS_FILE_CTRL_PAUSE:
|
||||||
ft->pauseTransfer();
|
mit->second->mState = ftFileControl::PAUSED ;
|
||||||
|
std::cerr << "setting state to " << ftFileControl::PAUSED << std::endl ;
|
||||||
break;
|
break;
|
||||||
case RS_FILE_CTRL_START:
|
case RS_FILE_CTRL_START:
|
||||||
ft->resumeTransfer();
|
mit->second->mState = ftFileControl::DOWNLOADING ;
|
||||||
|
std::cerr << "setting state to " << ftFileControl::DOWNLOADING << std::endl ;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
@ -1564,6 +1569,9 @@ bool ftController::FileDetails(std::string hash, FileInfo &info)
|
|||||||
if(it->second->mState == ftFileControl::QUEUED)
|
if(it->second->mState == ftFileControl::QUEUED)
|
||||||
info.downloadStatus = FT_STATE_QUEUED ;
|
info.downloadStatus = FT_STATE_QUEUED ;
|
||||||
|
|
||||||
|
if(it->second->mState == ftFileControl::PAUSED)
|
||||||
|
info.downloadStatus = FT_STATE_PAUSED ;
|
||||||
|
|
||||||
info.tfRate = totalRate;
|
info.tfRate = totalRate;
|
||||||
info.size = (it->second)->mSize;
|
info.size = (it->second)->mSize;
|
||||||
|
|
||||||
|
@ -69,7 +69,8 @@ class ftFileControl
|
|||||||
enum { DOWNLOADING = 0,
|
enum { DOWNLOADING = 0,
|
||||||
COMPLETED = 1,
|
COMPLETED = 1,
|
||||||
ERROR_COMPLETION = 2,
|
ERROR_COMPLETION = 2,
|
||||||
QUEUED = 3
|
QUEUED = 3,
|
||||||
|
PAUSED = 4
|
||||||
};
|
};
|
||||||
|
|
||||||
ftFileControl();
|
ftFileControl();
|
||||||
|
@ -403,37 +403,6 @@ bool ftTransferModule::queryInactive()
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ftTransferModule::pauseTransfer()
|
|
||||||
{
|
|
||||||
RsStackMutex stack(tfMtx); /******* STACK LOCKED ******/
|
|
||||||
|
|
||||||
/*
|
|
||||||
std::map<std::string,peerInfo>::iterator mit;
|
|
||||||
for(mit = mOnlinePeers.begin(); mit != mOnlinePeers.end(); mit++)
|
|
||||||
{
|
|
||||||
(mit->second).state = PQIPEER_SUSPEND;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
mFileStatus.stat=ftFileStatus::PQIFILE_PAUSE;
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ftTransferModule::resumeTransfer()
|
|
||||||
{
|
|
||||||
RsStackMutex stack(tfMtx); /******* STACK LOCKED ******/
|
|
||||||
/*
|
|
||||||
std::map<std::string,peerInfo>::iterator mit;
|
|
||||||
for(mit = mOnlinePeers.begin(); mit != mOnlinePeers.end(); mit++)
|
|
||||||
{
|
|
||||||
(mit->second).state = PQIPEER_IDLE;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
mFileStatus.stat=ftFileStatus::PQIFILE_DOWNLOADING;
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ftTransferModule::cancelTransfer()
|
bool ftTransferModule::cancelTransfer()
|
||||||
{
|
{
|
||||||
RsStackMutex stack(tfMtx); /******* STACK LOCKED ******/
|
RsStackMutex stack(tfMtx); /******* STACK LOCKED ******/
|
||||||
|
@ -105,7 +105,6 @@ public:
|
|||||||
PQIFILE_INIT,
|
PQIFILE_INIT,
|
||||||
PQIFILE_NOT_ONLINE,
|
PQIFILE_NOT_ONLINE,
|
||||||
PQIFILE_DOWNLOADING,
|
PQIFILE_DOWNLOADING,
|
||||||
PQIFILE_PAUSE,
|
|
||||||
PQIFILE_COMPLETE,
|
PQIFILE_COMPLETE,
|
||||||
PQIFILE_FAIL,
|
PQIFILE_FAIL,
|
||||||
PQIFILE_FAIL_CANCEL,
|
PQIFILE_FAIL_CANCEL,
|
||||||
@ -138,8 +137,6 @@ public:
|
|||||||
bool getFileSources(std::list<std::string> &peerIds);
|
bool getFileSources(std::list<std::string> &peerIds);
|
||||||
bool getPeerState(std::string peerId,uint32_t &state,uint32_t &tfRate);
|
bool getPeerState(std::string peerId,uint32_t &state,uint32_t &tfRate);
|
||||||
uint32_t getDataRate(std::string peerId);
|
uint32_t getDataRate(std::string peerId);
|
||||||
bool pauseTransfer();
|
|
||||||
bool resumeTransfer();
|
|
||||||
bool cancelTransfer();
|
bool cancelTransfer();
|
||||||
bool completeFileTransfer();
|
bool completeFileTransfer();
|
||||||
|
|
||||||
|
@ -45,6 +45,7 @@ const uint32_t FT_STATE_WAITING = 0x0002 ;
|
|||||||
const uint32_t FT_STATE_DOWNLOADING = 0x0003 ;
|
const uint32_t FT_STATE_DOWNLOADING = 0x0003 ;
|
||||||
const uint32_t FT_STATE_COMPLETE = 0x0004 ;
|
const uint32_t FT_STATE_COMPLETE = 0x0004 ;
|
||||||
const uint32_t FT_STATE_QUEUED = 0x0005 ;
|
const uint32_t FT_STATE_QUEUED = 0x0005 ;
|
||||||
|
const uint32_t FT_STATE_PAUSED = 0x0006 ;
|
||||||
|
|
||||||
class TransferInfo
|
class TransferInfo
|
||||||
{
|
{
|
||||||
|
@ -11,7 +11,6 @@ MOC_DIR = temp/moc
|
|||||||
|
|
||||||
#CONFIG += debug
|
#CONFIG += debug
|
||||||
debug {
|
debug {
|
||||||
DEFINES += PEERS_DEBUG
|
|
||||||
QMAKE_CXXFLAGS *= -g
|
QMAKE_CXXFLAGS *= -g
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -362,7 +362,7 @@ void TransfersDialog::downloadListCostumPopupMenu( QPoint point )
|
|||||||
|
|
||||||
for (int i = 0; i < lst.count (); i++)
|
for (int i = 0; i < lst.count (); i++)
|
||||||
{
|
{
|
||||||
if ( lst[i].column() == 0 && info.downloadStatus == FT_STATE_WAITING )
|
if ( lst[i].column() == 0 && info.downloadStatus == FT_STATE_PAUSED )
|
||||||
all_downld = false ;
|
all_downld = false ;
|
||||||
if ( lst[i].column() == 0 && info.downloadStatus == FT_STATE_DOWNLOADING )
|
if ( lst[i].column() == 0 && info.downloadStatus == FT_STATE_DOWNLOADING )
|
||||||
all_paused = false ;
|
all_paused = false ;
|
||||||
@ -384,10 +384,6 @@ void TransfersDialog::downloadListCostumPopupMenu( QPoint point )
|
|||||||
if(all_downloading)
|
if(all_downloading)
|
||||||
contextMnu.addMenu( chunkMenu);
|
contextMnu.addMenu( chunkMenu);
|
||||||
|
|
||||||
if(!all_paused)
|
|
||||||
contextMnu.addAction( pauseAct);
|
|
||||||
if(!all_downld)
|
|
||||||
contextMnu.addAction( resumeAct);
|
|
||||||
|
|
||||||
if(info.downloadStatus != FT_STATE_COMPLETE)
|
if(info.downloadStatus != FT_STATE_COMPLETE)
|
||||||
contextMnu.addAction( cancelAct);
|
contextMnu.addAction( cancelAct);
|
||||||
@ -406,6 +402,11 @@ void TransfersDialog::downloadListCostumPopupMenu( QPoint point )
|
|||||||
contextMnu.addAction( openfolderAct);
|
contextMnu.addAction( openfolderAct);
|
||||||
contextMnu.addAction( detailsfileAct);
|
contextMnu.addAction( detailsfileAct);
|
||||||
contextMnu.addSeparator();
|
contextMnu.addSeparator();
|
||||||
|
|
||||||
|
if(info.downloadStatus == FT_STATE_PAUSED)
|
||||||
|
contextMnu.addAction( resumeAct);
|
||||||
|
else if(info.downloadStatus != FT_STATE_COMPLETE)
|
||||||
|
contextMnu.addAction( pauseAct);
|
||||||
}
|
}
|
||||||
|
|
||||||
contextMnu.addAction( clearcompletedAct);
|
contextMnu.addAction( clearcompletedAct);
|
||||||
@ -670,7 +671,7 @@ void TransfersDialog::insertTransfers()
|
|||||||
QString fileName = QString::fromUtf8(info.fname.c_str());
|
QString fileName = QString::fromUtf8(info.fname.c_str());
|
||||||
QString fileHash = QString::fromStdString(info.hash);
|
QString fileHash = QString::fromStdString(info.hash);
|
||||||
qlonglong fileSize = info.size;
|
qlonglong fileSize = info.size;
|
||||||
double fileDlspeed = info.tfRate * 1024.0;
|
double fileDlspeed = (info.downloadStatus==FT_STATE_PAUSED)?0.0:(info.tfRate * 1024.0);
|
||||||
|
|
||||||
/* get the sources (number of online peers) */
|
/* get the sources (number of online peers) */
|
||||||
int online = 0;
|
int online = 0;
|
||||||
@ -690,6 +691,7 @@ void TransfersDialog::insertTransfers()
|
|||||||
case FT_STATE_DOWNLOADING: status = tr("Downloading"); break;
|
case FT_STATE_DOWNLOADING: status = tr("Downloading"); break;
|
||||||
case FT_STATE_COMPLETE: status = tr("Complete"); break;
|
case FT_STATE_COMPLETE: status = tr("Complete"); break;
|
||||||
case FT_STATE_QUEUED: status = tr("Queued"); break;
|
case FT_STATE_QUEUED: status = tr("Queued"); break;
|
||||||
|
case FT_STATE_PAUSED: status = tr("Paused"); break;
|
||||||
default: status = tr("Unknown"); break;
|
default: status = tr("Unknown"); break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -751,10 +753,8 @@ void TransfersDialog::insertTransfers()
|
|||||||
default: status = tr(""); break;
|
default: status = tr(""); break;
|
||||||
}
|
}
|
||||||
double peerDlspeed = 0;
|
double peerDlspeed = 0;
|
||||||
if ((uint32_t)pit->status == FT_STATE_DOWNLOADING)
|
if ((uint32_t)pit->status == FT_STATE_DOWNLOADING && info.downloadStatus != FT_STATE_PAUSED)
|
||||||
{
|
|
||||||
peerDlspeed = pit->tfRate * 1024.0;
|
peerDlspeed = pit->tfRate * 1024.0;
|
||||||
}
|
|
||||||
|
|
||||||
FileProgressInfo peerpinfo ;
|
FileProgressInfo peerpinfo ;
|
||||||
peerpinfo.cmap = fcinfo.compressed_peer_availability_maps[pit->peerId];
|
peerpinfo.cmap = fcinfo.compressed_peer_availability_maps[pit->peerId];
|
||||||
@ -1125,6 +1125,7 @@ bool TransfersDialog::controlTransferFile(uint32_t flags)
|
|||||||
std::set<QStandardItem *>::iterator it;
|
std::set<QStandardItem *>::iterator it;
|
||||||
getIdOfSelectedItems(items);
|
getIdOfSelectedItems(items);
|
||||||
for (it = items.begin(); it != items.end(); it ++) {
|
for (it = items.begin(); it != items.end(); it ++) {
|
||||||
|
std::cerr << "changing file mode for hash " << (*it)->data(Qt::DisplayRole).toString().toStdString() << " to " << flags << std::endl;
|
||||||
result &= rsFiles->FileControl((*it)->data(Qt::DisplayRole).toString().toStdString(), flags);
|
result &= rsFiles->FileControl((*it)->data(Qt::DisplayRole).toString().toStdString(), flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user