mirror of
https://github.com/RetroShare/RetroShare.git
synced 2025-01-07 05:38:09 -05:00
cleaned the config->Transfers tab, made the default chunk strategy combobox effective.
git-svn-id: http://svn.code.sf.net/p/retroshare/code/branches/v0.5.0@2576 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
parent
8305fe0bf7
commit
589711d482
@ -1147,6 +1147,8 @@ bool ftController::FileRequest(std::string fname, std::string hash,
|
|||||||
ftFileCreator *fc = new ftFileCreator(savepath, size, hash);
|
ftFileCreator *fc = new ftFileCreator(savepath, size, hash);
|
||||||
ftTransferModule *tm = new ftTransferModule(fc, mDataplex,this);
|
ftTransferModule *tm = new ftTransferModule(fc, mDataplex,this);
|
||||||
|
|
||||||
|
fc->setChunkStrategy(mDefaultChunkStrategy) ;
|
||||||
|
|
||||||
/* add into maps */
|
/* add into maps */
|
||||||
ftFileControl *ftfc = new ftFileControl(fname, savepath, destination, size, hash, flags, fc, tm, callbackCode);
|
ftFileControl *ftfc = new ftFileControl(fname, savepath, destination, size, hash, flags, fc, tm, callbackCode);
|
||||||
ftfc->mCreateTime = time(NULL);
|
ftfc->mCreateTime = time(NULL);
|
||||||
@ -1726,6 +1728,7 @@ bool ftController::CancelCacheFile(RsPeerId id, std::string path, std::string ha
|
|||||||
const std::string download_dir_ss("DOWN_DIR");
|
const std::string download_dir_ss("DOWN_DIR");
|
||||||
const std::string partial_dir_ss("PART_DIR");
|
const std::string partial_dir_ss("PART_DIR");
|
||||||
const std::string share_dwl_dir("SHARE_DWL_DIR");
|
const std::string share_dwl_dir("SHARE_DWL_DIR");
|
||||||
|
const std::string default_chunk_strategy_ss("DEFAULT_CHUNK_STRATEGY");
|
||||||
|
|
||||||
|
|
||||||
/* p3Config Interface */
|
/* p3Config Interface */
|
||||||
@ -1757,6 +1760,7 @@ std::list<RsItem *> ftController::saveList(bool &cleanup)
|
|||||||
configMap[download_dir_ss] = getDownloadDirectory();
|
configMap[download_dir_ss] = getDownloadDirectory();
|
||||||
configMap[partial_dir_ss] = getPartialsDirectory();
|
configMap[partial_dir_ss] = getPartialsDirectory();
|
||||||
configMap[share_dwl_dir] = mShareDownloadDir ? "YES" : "NO";
|
configMap[share_dwl_dir] = mShareDownloadDir ? "YES" : "NO";
|
||||||
|
configMap[default_chunk_strategy_ss] = (mDefaultChunkStrategy==FileChunksInfo::CHUNK_STRATEGY_STREAMING) ? "STREAMING" : "RANDOM";
|
||||||
|
|
||||||
RsConfigKeyValueSet *rskv = new RsConfigKeyValueSet();
|
RsConfigKeyValueSet *rskv = new RsConfigKeyValueSet();
|
||||||
|
|
||||||
@ -1940,15 +1944,39 @@ bool ftController::loadConfigMap(std::map<std::string, std::string> &configMap)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (configMap.end() != (mit = configMap.find(default_chunk_strategy_ss)))
|
||||||
|
{
|
||||||
|
if(mit->second == "STREAMING")
|
||||||
|
setDefaultChunkStrategy(FileChunksInfo::CHUNK_STRATEGY_STREAMING) ;
|
||||||
|
else if(mit->second == "RANDOM")
|
||||||
|
setDefaultChunkStrategy(FileChunksInfo::CHUNK_STRATEGY_RANDOM) ;
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FileChunksInfo::ChunkStrategy ftController::defaultChunkStrategy()
|
||||||
|
{
|
||||||
|
RsStackMutex stack(ctrlMutex); /******* LOCKED ********/
|
||||||
|
return mDefaultChunkStrategy ;
|
||||||
|
}
|
||||||
|
void ftController::setDefaultChunkStrategy(FileChunksInfo::ChunkStrategy S)
|
||||||
|
{
|
||||||
|
RsStackMutex stack(ctrlMutex); /******* LOCKED ********/
|
||||||
|
mDefaultChunkStrategy = S ;
|
||||||
|
IndicateConfigChanged() ;
|
||||||
|
}
|
||||||
|
|
||||||
void ftController::setShareDownloadDirectory(bool value)
|
void ftController::setShareDownloadDirectory(bool value)
|
||||||
{
|
{
|
||||||
|
RsStackMutex stack(ctrlMutex); /******* LOCKED ********/
|
||||||
mShareDownloadDir = value;
|
mShareDownloadDir = value;
|
||||||
|
IndicateConfigChanged() ;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ftController::getShareDownloadDirectory()
|
bool ftController::getShareDownloadDirectory()
|
||||||
{
|
{
|
||||||
|
RsStackMutex stack(ctrlMutex); /******* LOCKED ********/
|
||||||
return mShareDownloadDir;
|
return mShareDownloadDir;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -144,6 +144,8 @@ class ftController: public CacheTransfer, public RsThread, public pqiMonitor, pu
|
|||||||
bool alreadyHaveFile(const std::string& hash) ;
|
bool alreadyHaveFile(const std::string& hash) ;
|
||||||
|
|
||||||
bool setChunkStrategy(const std::string& hash,FileChunksInfo::ChunkStrategy s);
|
bool setChunkStrategy(const std::string& hash,FileChunksInfo::ChunkStrategy s);
|
||||||
|
void setDefaultChunkStrategy(FileChunksInfo::ChunkStrategy s);
|
||||||
|
FileChunksInfo::ChunkStrategy defaultChunkStrategy();
|
||||||
|
|
||||||
bool FileCancel(std::string hash);
|
bool FileCancel(std::string hash);
|
||||||
bool FileControl(std::string hash, uint32_t flags);
|
bool FileControl(std::string hash, uint32_t flags);
|
||||||
@ -265,6 +267,7 @@ class ftController: public CacheTransfer, public RsThread, public pqiMonitor, pu
|
|||||||
|
|
||||||
/* share incoming directory */
|
/* share incoming directory */
|
||||||
bool mShareDownloadDir;
|
bool mShareDownloadDir;
|
||||||
|
FileChunksInfo::ChunkStrategy mDefaultChunkStrategy ;
|
||||||
|
|
||||||
uint32_t _max_active_downloads ; // maximum number of simultaneous downloads
|
uint32_t _max_active_downloads ; // maximum number of simultaneous downloads
|
||||||
};
|
};
|
||||||
|
@ -272,6 +272,14 @@ bool ftServer::setChunkStrategy(const std::string& hash,FileChunksInfo::ChunkStr
|
|||||||
{
|
{
|
||||||
return mFtController->setChunkStrategy(hash,s);
|
return mFtController->setChunkStrategy(hash,s);
|
||||||
}
|
}
|
||||||
|
void ftServer::setDefaultChunkStrategy(FileChunksInfo::ChunkStrategy)
|
||||||
|
{
|
||||||
|
mFtController->defaultChunkStrategy() ;
|
||||||
|
}
|
||||||
|
FileChunksInfo::ChunkStrategy ftServer::defaultChunkStrategy()
|
||||||
|
{
|
||||||
|
return mFtController->defaultChunkStrategy() ;
|
||||||
|
}
|
||||||
|
|
||||||
bool ftServer::FileCancel(std::string hash)
|
bool ftServer::FileCancel(std::string hash)
|
||||||
{
|
{
|
||||||
|
@ -125,6 +125,9 @@ virtual bool FileCancel(std::string hash);
|
|||||||
virtual bool FileControl(std::string hash, uint32_t flags);
|
virtual bool FileControl(std::string hash, uint32_t flags);
|
||||||
virtual bool FileClearCompleted();
|
virtual bool FileClearCompleted();
|
||||||
virtual bool setChunkStrategy(const std::string& hash,FileChunksInfo::ChunkStrategy s) ;
|
virtual bool setChunkStrategy(const std::string& hash,FileChunksInfo::ChunkStrategy s) ;
|
||||||
|
virtual void setDefaultChunkStrategy(FileChunksInfo::ChunkStrategy) ;
|
||||||
|
virtual FileChunksInfo::ChunkStrategy defaultChunkStrategy() ;
|
||||||
|
|
||||||
|
|
||||||
/***
|
/***
|
||||||
* Control of Downloads Priority.
|
* Control of Downloads Priority.
|
||||||
|
@ -113,6 +113,8 @@ class RsFiles
|
|||||||
virtual bool FileRequest(std::string fname, std::string hash, uint64_t size, std::string dest, uint32_t flags, std::list<std::string> srcIds) = 0;
|
virtual bool FileRequest(std::string fname, std::string hash, uint64_t size, std::string dest, uint32_t flags, std::list<std::string> srcIds) = 0;
|
||||||
virtual bool FileCancel(std::string hash) = 0;
|
virtual bool FileCancel(std::string hash) = 0;
|
||||||
virtual bool setChunkStrategy(const std::string& hash,FileChunksInfo::ChunkStrategy) = 0;
|
virtual bool setChunkStrategy(const std::string& hash,FileChunksInfo::ChunkStrategy) = 0;
|
||||||
|
virtual void setDefaultChunkStrategy(FileChunksInfo::ChunkStrategy) = 0;
|
||||||
|
virtual FileChunksInfo::ChunkStrategy defaultChunkStrategy() = 0;
|
||||||
virtual bool FileControl(std::string hash, uint32_t flags) = 0;
|
virtual bool FileControl(std::string hash, uint32_t flags) = 0;
|
||||||
virtual bool FileClearCompleted() = 0;
|
virtual bool FileClearCompleted() = 0;
|
||||||
|
|
||||||
|
@ -26,9 +26,9 @@
|
|||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
|
||||||
#include "rsiface/rsiface.h"
|
#include <rsiface/rsiface.h>
|
||||||
#include "rsiface/rsfiles.h"
|
#include <rsiface/rsfiles.h>
|
||||||
#include "rsiface/rspeers.h"
|
#include <rsiface/rspeers.h>
|
||||||
|
|
||||||
#include <QTimer>
|
#include <QTimer>
|
||||||
|
|
||||||
@ -38,15 +38,15 @@ TransferPage::TransferPage(QWidget * parent, Qt::WFlags flags)
|
|||||||
/* Invoke the Qt Designer generated object setup routine */
|
/* Invoke the Qt Designer generated object setup routine */
|
||||||
ui.setupUi(this);
|
ui.setupUi(this);
|
||||||
|
|
||||||
// QTimer *timer = new QTimer(this);
|
|
||||||
// timer->connect(timer, SIGNAL(timeout()), this, SLOT(updateStatus()));
|
|
||||||
// timer->start(1000);
|
|
||||||
|
|
||||||
updateStatus();
|
|
||||||
|
|
||||||
ui._queueSize_SB->setValue(rsFiles->getQueueSize()) ;
|
ui._queueSize_SB->setValue(rsFiles->getQueueSize()) ;
|
||||||
|
|
||||||
|
if(rsFiles->defaultChunkStrategy() == FileChunksInfo::CHUNK_STRATEGY_STREAMING)
|
||||||
|
ui._defaultStrategy_CB->setCurrentIndex(0) ;
|
||||||
|
else
|
||||||
|
ui._defaultStrategy_CB->setCurrentIndex(1) ;
|
||||||
|
|
||||||
QObject::connect(ui._queueSize_SB,SIGNAL(valueChanged(int)),this,SLOT(updateQueueSize(int))) ;
|
QObject::connect(ui._queueSize_SB,SIGNAL(valueChanged(int)),this,SLOT(updateQueueSize(int))) ;
|
||||||
|
QObject::connect(ui._defaultStrategy_CB,SIGNAL(activated(int)),this,SLOT(updateDefaultStrategy(int))) ;
|
||||||
|
|
||||||
/* Hide platform specific features */
|
/* Hide platform specific features */
|
||||||
#ifdef Q_WS_WIN
|
#ifdef Q_WS_WIN
|
||||||
@ -54,6 +54,20 @@ TransferPage::TransferPage(QWidget * parent, Qt::WFlags flags)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TransferPage::updateDefaultStrategy(int i)
|
||||||
|
{
|
||||||
|
switch(i)
|
||||||
|
{
|
||||||
|
case 0: rsFiles->setDefaultChunkStrategy(FileChunksInfo::CHUNK_STRATEGY_STREAMING) ;
|
||||||
|
break ;
|
||||||
|
|
||||||
|
case 1: rsFiles->setDefaultChunkStrategy(FileChunksInfo::CHUNK_STRATEGY_RANDOM) ;
|
||||||
|
break ;
|
||||||
|
|
||||||
|
default: ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void TransferPage::updateQueueSize(int s)
|
void TransferPage::updateQueueSize(int s)
|
||||||
{
|
{
|
||||||
rsFiles->setQueueSize(s) ;
|
rsFiles->setQueueSize(s) ;
|
||||||
@ -65,46 +79,3 @@ void TransferPage::closeEvent (QCloseEvent * event)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/** Saves the changes on this page */
|
|
||||||
bool
|
|
||||||
TransferPage::save(QString &errmsg)
|
|
||||||
{
|
|
||||||
|
|
||||||
/* save the server address */
|
|
||||||
/* save local address */
|
|
||||||
/* save the url for DNS access */
|
|
||||||
|
|
||||||
/* restart server */
|
|
||||||
|
|
||||||
/* save all? */
|
|
||||||
//saveAddresses();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Loads the settings for this page */
|
|
||||||
void TransferPage::load()
|
|
||||||
{
|
|
||||||
|
|
||||||
/* load up configuration from rsPeers */
|
|
||||||
// RsPeerDetails detail;
|
|
||||||
// if (!rsPeers->getPeerDetails(rsPeers->getOwnId(), detail))
|
|
||||||
// {
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Loads the settings for this page */
|
|
||||||
void TransferPage::updateStatus()
|
|
||||||
{
|
|
||||||
/* load up configuration from rsPeers */
|
|
||||||
// RsPeerDetails detail;
|
|
||||||
// if (!rsPeers->getPeerDetails(rsPeers->getOwnId(), detail))
|
|
||||||
// {
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -36,13 +36,13 @@ class TransferPage: public ConfigPage
|
|||||||
~TransferPage() {}
|
~TransferPage() {}
|
||||||
|
|
||||||
/** Saves the changes on this page */
|
/** Saves the changes on this page */
|
||||||
bool save(QString &errmsg);
|
virtual bool save(QString &errmsg) {}
|
||||||
/** Loads the settings for this page */
|
/** Loads the settings for this page */
|
||||||
void load();
|
virtual void load() {}
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void updateStatus();
|
|
||||||
void updateQueueSize(int) ;
|
void updateQueueSize(int) ;
|
||||||
|
void updateDefaultStrategy(int) ;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
@ -13,31 +13,36 @@
|
|||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
<string>Form</string>
|
<string>Form</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" name="gridLayout">
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
<item row="0" column="0">
|
<item>
|
||||||
<widget class="QTabWidget" name="tabWidget">
|
<widget class="QGroupBox" name="groupBox">
|
||||||
<property name="currentIndex">
|
<property name="title">
|
||||||
<number>0</number>
|
<string>Transfer options</string>
|
||||||
</property>
|
</property>
|
||||||
<widget class="QWidget" name="Seite">
|
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||||
<attribute name="title">
|
<item>
|
||||||
<string>Transfer</string>
|
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||||
</attribute>
|
<item>
|
||||||
<layout class="QGridLayout" name="gridLayout_3">
|
<layout class="QVBoxLayout" name="verticalLayout_4">
|
||||||
<item row="0" column="0">
|
<item>
|
||||||
<widget class="QGroupBox" name="groupBox">
|
|
||||||
<property name="title">
|
|
||||||
<string>Transfer options</string>
|
|
||||||
</property>
|
|
||||||
<layout class="QGridLayout" name="gridLayout_2">
|
|
||||||
<item row="0" column="0">
|
|
||||||
<widget class="QLabel" name="label">
|
<widget class="QLabel" name="label">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Queue Size:</string>
|
<string>Queue Size:</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="0" column="1">
|
<item>
|
||||||
|
<widget class="QLabel" name="label_3">
|
||||||
|
<property name="text">
|
||||||
|
<string>Default chunk strategy:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||||
|
<item>
|
||||||
<widget class="QSpinBox" name="_queueSize_SB">
|
<widget class="QSpinBox" name="_queueSize_SB">
|
||||||
<property name="enabled">
|
<property name="enabled">
|
||||||
<bool>true</bool>
|
<bool>true</bool>
|
||||||
@ -53,40 +58,10 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="1" column="0">
|
<item>
|
||||||
<widget class="QLabel" name="label_2">
|
<widget class="QComboBox" name="_defaultStrategy_CB">
|
||||||
<property name="text">
|
|
||||||
<string>Maximum Download speed per file:</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="1">
|
|
||||||
<widget class="QSpinBox" name="downspeedspinBox">
|
|
||||||
<property name="enabled">
|
<property name="enabled">
|
||||||
<bool>false</bool>
|
<bool>true</bool>
|
||||||
</property>
|
|
||||||
<property name="suffix">
|
|
||||||
<string> kB/s</string>
|
|
||||||
</property>
|
|
||||||
<property name="maximum">
|
|
||||||
<number>100000</number>
|
|
||||||
</property>
|
|
||||||
<property name="value">
|
|
||||||
<number>1024</number>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="2" column="0">
|
|
||||||
<widget class="QLabel" name="label_3">
|
|
||||||
<property name="text">
|
|
||||||
<string>Default chunk strategy:</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="2" column="1">
|
|
||||||
<widget class="QComboBox" name="strategycomboBox">
|
|
||||||
<property name="enabled">
|
|
||||||
<bool>false</bool>
|
|
||||||
</property>
|
</property>
|
||||||
<item>
|
<item>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
@ -100,46 +75,17 @@
|
|||||||
</item>
|
</item>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="3" column="0" colspan="2">
|
|
||||||
<widget class="QCheckBox" name="checkBox">
|
|
||||||
<property name="enabled">
|
|
||||||
<bool>false</bool>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>Show Cache Transfers</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</item>
|
||||||
</item>
|
</layout>
|
||||||
<item row="2" column="0">
|
</item>
|
||||||
<spacer name="verticalSpacer">
|
<item>
|
||||||
<property name="orientation">
|
<widget class="QTextEdit" name="textEdit">
|
||||||
<enum>Qt::Vertical</enum>
|
<property name="readOnly">
|
||||||
</property>
|
<bool>true</bool>
|
||||||
<property name="sizeHint" stdset="0">
|
</property>
|
||||||
<size>
|
<property name="html">
|
||||||
<width>248</width>
|
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||||
<height>138</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
</spacer>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</widget>
|
|
||||||
<widget class="QWidget" name="tab_3">
|
|
||||||
<attribute name="title">
|
|
||||||
<string>F2F Routing</string>
|
|
||||||
</attribute>
|
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_3">
|
|
||||||
<item>
|
|
||||||
<widget class="QTextEdit" name="textEdit">
|
|
||||||
<property name="readOnly">
|
|
||||||
<bool>true</bool>
|
|
||||||
</property>
|
|
||||||
<property name="html">
|
|
||||||
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
|
||||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||||
p, li { white-space: pre-wrap; }
|
p, li { white-space: pre-wrap; }
|
||||||
</style></head><body style=" font-family:'Sans'; font-size:10pt; font-weight:400; font-style:normal;">
|
</style></head><body style=" font-family:'Sans'; font-size:10pt; font-weight:400; font-style:normal;">
|
||||||
@ -148,11 +94,10 @@ p, li { white-space: pre-wrap; }
|
|||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">You can separately setup share flags for each shared directory in the shared files dialog to be:</span></p>
|
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">You can separately setup share flags for each shared directory in the shared files dialog to be:</span></p>
|
||||||
<ul style="-qt-list-indent: 1;"><li style=" font-size:8pt;" style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Browsable by friends</span>: files are seen by your friends.</li>
|
<ul style="-qt-list-indent: 1;"><li style=" font-size:8pt;" style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Browsable by friends</span>: files are seen by your friends.</li>
|
||||||
<li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Anonymously shared</span>: files are anonymously reachable through distant F2F tunnels.</li></ul></body></html></string>
|
<li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Anonymously shared</span>: files are anonymously reachable through distant F2F tunnels.</li></ul></body></html></string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
|
Loading…
Reference in New Issue
Block a user