ChannelFeed:

- Sort the ChanMsgItems of the channel by date

ChanMsgItem:
- Fixed adding all files (SubFileItem) again by pressing the unsubscribe button (only in Friend Storm)
- Enable unsubscribe button only when channel is subscribed (only in Friend Storm)
- Fixed adding files with umlauts (utf8) on Windows
- Enabled Download and Play button in ChanMsgItem, when they are enabled in the SubFileItems

ftServer:
- Added the method alreadyHaveFile for use in the GUI - recompile of GUI needed

SubFileItem:
- Added state strings like LOCAL, REMOTE, ERROR, ... for translating


git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@3614 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
thunder2 2010-10-05 20:39:14 +00:00
parent 3c29434007
commit d31cef0f11
14 changed files with 290 additions and 120 deletions

View File

@ -994,10 +994,8 @@ bool ftController::handleAPendingRequest()
return true ;
}
bool ftController::alreadyHaveFile(const std::string& hash)
bool ftController::alreadyHaveFile(const std::string& hash, FileInfo &info)
{
FileInfo info ;
// check for downloads
if (FileDetails(hash, info) && (info.downloadStatus == FT_STATE_COMPLETE))
return true ;
@ -1017,7 +1015,8 @@ bool ftController::FileRequest(const std::string& fname, const std::string& has
/* check if we have the file */
if(alreadyHaveFile(hash))
FileInfo info;
if(alreadyHaveFile(hash, info))
return false ;
if(size == 0) // we treat this special case because
@ -1077,7 +1076,6 @@ bool ftController::FileRequest(const std::string& fname, const std::string& has
}
}
FileInfo info;
std::list<std::string>::const_iterator it;
std::list<TransferInfo>::const_iterator pit;

View File

@ -142,7 +142,7 @@ class ftController: public CacheTransfer, public RsThread, public pqiMonitor, pu
const std::list<std::string> &sourceIds);
/// Do we already have this file, either in download or in file lists ?
bool alreadyHaveFile(const std::string& hash) ;
bool alreadyHaveFile(const std::string& hash, FileInfo &info);
bool setChunkStrategy(const std::string& hash,FileChunksInfo::ChunkStrategy s);
void setDefaultChunkStrategy(FileChunksInfo::ChunkStrategy s);

View File

@ -281,6 +281,11 @@ bool ftServer::checkHash(const std::string& hash,std::string& error_string)
return true ;
}
bool ftServer::alreadyHaveFile(const std::string& hash, FileInfo &info)
{
return mFtController->alreadyHaveFile(hash, info);
}
bool ftServer::FileRequest(const std::string& fname, const std::string& hash, uint64_t size, const std::string& dest, uint32_t flags, const std::list<std::string>& srcIds)
{
std::string error_string ;

View File

@ -120,6 +120,7 @@ ftController *getController() const { return mFtController ; }
/***
* Control of Downloads
***/
virtual bool alreadyHaveFile(const std::string& hash, FileInfo &info);
virtual bool FileRequest(const std::string& fname, const std::string& hash, uint64_t size, const std::string& dest, uint32_t flags, const std::list<std::string>& srcIds);
virtual bool FileCancel(const std::string& hash);
virtual bool FileControl(const std::string& hash, uint32_t flags);

View File

@ -111,6 +111,7 @@ class RsFiles
* Control of Downloads.
***/
virtual bool alreadyHaveFile(const std::string& hash, FileInfo &info) = 0;
/// Returns false is we already have the file. Otherwise, initiates the dl and returns true.
virtual bool FileRequest(const std::string& fname, const std::string& hash, uint64_t size, const std::string& dest, uint32_t flags, const std::list<std::string>& srcIds) = 0;
virtual bool FileCancel(const std::string& hash) = 0;

View File

@ -338,7 +338,14 @@ bool p3Channels::channelExtraFileHash(std::string path, std::string chId, FileIn
bool p3Channels::cpyMsgFileToChFldr(std::string path, std::string fname, std::string chId, bool& fileTooLarge){
FILE *outFile = NULL, *inFile = fopen(path.c_str(), "rb");
FILE *outFile = NULL, *inFile;
#ifdef WINDOWS_SYS
std::wstring wpath;
librs::util::ConvertUtf8ToUtf16(path, wpath);
inFile = _wfopen(wpath.c_str(), L"rb");
#else
inFile = fopen(path.c_str(), "rb");
#endif
long buffSize = 0;
char* buffer = NULL;
@ -370,7 +377,13 @@ bool p3Channels::cpyMsgFileToChFldr(std::string path, std::string fname, std::st
fclose(inFile);
std::string localpath = mChannelsDir + "/" + chId + "/" + fname;
#ifdef WINDOWS_SYS
std::wstring wlocalpath;
librs::util::ConvertUtf8ToUtf16(localpath, wlocalpath);
outFile = _wfopen(wlocalpath.c_str(), L"wb");
#else
outFile = fopen(localpath.c_str(), "wb");
#endif
}
if(outFile){

View File

@ -672,6 +672,11 @@ void ChannelFeed::updateChannelListOther(std::list<std::string> &ids)
}
}
static bool sortChannelMsgSummary(const ChannelMsgSummary &msg1, const ChannelMsgSummary &msg2)
{
return (msg1.ts < msg2.ts);
}
void ChannelFeed::updateChannelMsgs()
{
if (!rsChannels)
@ -744,6 +749,8 @@ void ChannelFeed::updateChannelMsgs()
rsChannels->getChannelMsgList(mChannelId, msgs);
msgs.sort(sortChannelMsgSummary);
for(it = msgs.begin(); it != msgs.end(); it++)
{
ChanMsgItem *cmi = new ChanMsgItem(this, 0, mChannelId, it->msgId, true);

View File

@ -135,15 +135,14 @@ void CreateChannelMsg::dropEvent(QDropEvent *event)
QList<QUrl>::iterator uit;
for(uit = urls.begin(); uit != urls.end(); uit++)
{
std::string localpath = uit->toLocalFile().toStdString();
std::string localpath = uit->toLocalFile().toUtf8().constData();
std::cerr << "Whole URL: " << uit->toString().toStdString();
std::cerr << std::endl;
std::cerr << "or As Local File: " << localpath;
std::cerr << "or As Local File: " << uit->toLocalFile().toStdString();
std::cerr << std::endl;
if (localpath.size() > 0)
{
addAttachment(localpath);
}
}
@ -289,7 +288,7 @@ void CreateChannelMsg::addExtraFile()
// select a file
QString qfile = QFileDialog::getOpenFileName(this, tr("Add Extra File"), "", "", 0,
QFileDialog::DontResolveSymlinks);
std::string filePath = qfile.toStdString();
std::string filePath = qfile.toUtf8().constData();
if (filePath != "")
{
addAttachment(filePath);
@ -347,9 +346,6 @@ void CreateChannelMsg::checkAttachmentReady()
buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false);
buttonBox->button(QDialogButtonBox::Cancel)->setEnabled(false);
break;
return;
}
}
}

View File

@ -52,6 +52,8 @@ ChanMsgItem::ChanMsgItem(FeedHolder *parent, uint32_t feedId, std::string chanId
/* specific */
connect( unsubscribeButton, SIGNAL( clicked( void ) ), this, SLOT( unsubscribeChannel ( void ) ) );
connect( downloadButton, SIGNAL( clicked( void ) ), this, SLOT( download ( void ) ) );
connect( playButton, SIGNAL( clicked( void ) ), this, SLOT( play ( void ) ) );
downloadButton->hide();
playButton->hide();
@ -89,12 +91,24 @@ void ChanMsgItem::updateItemStatic()
title += QString::fromStdWString(ci.channelName);
titleLabel->setText(title);
subjectLabel->setText(QString::fromStdWString(cmi.subject));
if ((ci.channelFlags & RS_DISTRIB_SUBSCRIBED) || (ci.channelFlags & RS_DISTRIB_ADMIN)) {
unsubscribeButton->setEnabled(true);
} else {
unsubscribeButton->setEnabled(false);
}
}
else
{
/* subject */
titleLabel->setText(QString::fromStdWString(cmi.subject));
subjectLabel->setText(QString::fromStdWString(cmi.msg));
/* disable buttons: deletion facility not enabled with cache services yet */
clearButton->setEnabled(false);
unsubscribeButton->setEnabled(false);
clearButton->hide();
unsubscribeButton->hide();
}
msgLabel->setText(QString::fromStdWString(cmi.msg));
@ -111,6 +125,15 @@ void ChanMsgItem::updateItemStatic()
}
if (mFileItems.empty() == false) {
std::list<SubFileItem *>::iterator it;
for(it = mFileItems.begin(); it != mFileItems.end(); it++)
{
delete(*it);
}
mFileItems.clear();
}
std::list<FileInfo>::iterator it;
for(it = cmi.files.begin(); it != cmi.files.end(); it++)
{
@ -132,17 +155,6 @@ void ChanMsgItem::updateItemStatic()
label->setPixmap(thumbnail);
label->setStyleSheet("QLabel#label{border: 2px solid #D3D3D3;border-radius: 3px;}");
}
if (mIsHome)
{
/* disable buttons: deletion facility not enabled with cache services yet */
clearButton->setEnabled(false);
unsubscribeButton->setEnabled(false);
clearButton->hide();
unsubscribeButton->hide();
}
}
@ -155,22 +167,68 @@ void ChanMsgItem::updateItem()
#endif
int msec_rate = 10000;
int downloadCount = 0;
int downloadStartable = 0;
int playCount = 0;
int playStartable = 0;
bool startable;
bool loopAgain = false;
/* Very slow Tick to check when all files are downloaded */
std::list<SubFileItem *>::iterator it;
for(it = mFileItems.begin(); it != mFileItems.end(); it++)
{
if (!(*it)->done())
SubFileItem *item = *it;
if (item->isDownloadable(startable)) {
downloadCount++;
if (startable) {
downloadStartable++;
}
}
if (item->isPlayable(startable)) {
playCount++;
if (startable) {
playStartable++;
}
}
if (!item->done())
{
/* loop again */
loopAgain = true;
}
}
if (downloadCount) {
downloadButton->show();
if (downloadStartable) {
downloadButton->setEnabled(true);
} else {
downloadButton->setEnabled(false);
}
} else {
downloadButton->hide();
}
if (playCount) {
/* one file is playable */
playButton->show();
if (playStartable == 1) {
playButton->setEnabled(true);
} else {
playButton->setEnabled(false);
}
} else {
playButton->hide();
}
if (loopAgain) {
QTimer::singleShot( msec_rate, this, SLOT(updateItem( void ) ));
return;
}
}
}
void ChanMsgItem::small()
{
expandFrame->hide();
@ -192,7 +250,6 @@ void ChanMsgItem::toggle()
}
}
void ChanMsgItem::removeItem()
{
#ifdef DEBUG_ITEM
@ -232,3 +289,25 @@ void ChanMsgItem::unsubscribeChannel()
updateItemStatic();
}
void ChanMsgItem::download()
{
std::list<SubFileItem *>::iterator it;
for(it = mFileItems.begin(); it != mFileItems.end(); it++)
{
(*it)->download();
}
updateItem();
}
void ChanMsgItem::play()
{
std::list<SubFileItem *>::iterator it;
for(it = mFileItems.begin(); it != mFileItems.end(); it++)
{
bool startable;
if ((*it)->isPlayable(startable) && startable) {
(*it)->play();
}
}
}

View File

@ -48,6 +48,8 @@ private slots:
void toggle();
void unsubscribeChannel();
void download();
void play();
void updateItem();

View File

@ -111,11 +111,9 @@ void SubFileItem::Setup()
if (mMode == SFI_STATE_REMOTE)
{
FileInfo fi;
uint32_t hintflags = RS_FILE_HINTS_EXTRA | RS_FILE_HINTS_LOCAL
| RS_FILE_HINTS_SPEC_ONLY;
/* look up path */
if (rsFiles->FileDetails(mFileHash, hintflags, fi))
if (rsFiles->alreadyHaveFile(mFileHash, fi))
{
#ifdef DEBUG_ITEM
std::cerr << "SubFileItem::Setup() STATE=>Local Found File";
@ -131,8 +129,6 @@ void SubFileItem::Setup()
smaller();
updateItemStatic();
updateItem();
}
@ -154,7 +150,7 @@ void SubFileItem::updateItemStatic()
std::cerr << std::endl;
#endif
QString filename = QString::fromStdString(mFileName);
QString filename = QString::fromUtf8(mFileName.c_str());
mDivisor = 1;
if (mFileSize > 10000000) /* 10 Mb */
@ -214,7 +210,7 @@ void SubFileItem::updateItemStatic()
{
case SFI_STATE_ERROR:
progressBar->setRange(0, 100);
progressBar->setFormat("ERROR");
progressBar->setFormat(tr("ERROR"));
playButton->setEnabled(false);
downloadButton->setEnabled(false);
@ -222,12 +218,12 @@ void SubFileItem::updateItemStatic()
expandButton->setEnabled(false);
progressBar->setValue(0);
filename = "[ERROR] " + filename;
filename = "[" + tr("ERROR") + "] " + filename;
break;
case SFI_STATE_EXTRA:
filename = QString::fromStdString(mPath);
filename = QString::fromUtf8(mPath.c_str());
progressBar->setRange(0, 100);
progressBar->setFormat("HASHING");
@ -238,7 +234,7 @@ void SubFileItem::updateItemStatic()
expandButton->setEnabled(false);
progressBar->setValue(0);
filename = "[EXTRA] " + filename;
filename = "[" + tr("EXTRA") + "] " + filename;
break;
@ -249,7 +245,7 @@ void SubFileItem::updateItemStatic()
expandButton->setEnabled(false);
progressBar->setValue(0);
filename = "[REMOTE] " + filename;
filename = "[" + tr("REMOTE") + "] " + filename;
break;
@ -258,7 +254,7 @@ void SubFileItem::updateItemStatic()
downloadButton->setEnabled(false);
cancelButton->setEnabled(true);
expandButton->setEnabled(true);
filename = "[DOWNLOAD] " + filename;
filename = "[" + tr("DOWNLOAD") + "] " + filename;
break;
@ -269,7 +265,7 @@ void SubFileItem::updateItemStatic()
expandButton->setEnabled(false);
progressBar->setValue(mFileSize / mDivisor);
filename = "[LOCAL] " + filename;
filename = "[" + tr("LOCAL") + "] " + filename;
break;
@ -278,7 +274,7 @@ void SubFileItem::updateItemStatic()
downloadButton->setEnabled(false);
cancelButton->setEnabled(false);
expandButton->setEnabled(true);
filename = "[UPLOAD] " + filename;
filename = "[" + tr("UPLOAD") + "] " + filename;
break;
}
@ -341,6 +337,11 @@ void SubFileItem::updateItem()
std::cerr << std::endl;
#endif
/* ignore - dead file, or done */
if (mMode == SFI_STATE_ERROR) {
/* updateStatic once */
stateChanged = true;
}
}
else if (mMode == SFI_STATE_EXTRA)
{
@ -554,6 +555,8 @@ void SubFileItem::cancel()
{
rsFiles->FileCancel(mFileHash);
}
updateItem();
}
@ -617,6 +620,9 @@ void SubFileItem::download()
}
rsFiles->FileRequest(mFileName, mFileHash, mFileSize, "", RS_FILE_HINTS_NETWORK_WIDE, srcIds);
downloadButton->setEnabled(false);
updateItem();
}
@ -653,3 +659,21 @@ void SubFileItem::save()
uint32_t SubFileItem::getState() {
return mMode;
}
bool SubFileItem::isDownloadable(bool &startable)
{
/* Check buttons. Not good, but it works. */
bool visible = downloadButton->isVisibleTo(this);
startable = visible && downloadButton->isEnabled();
return visible;
}
bool SubFileItem::isPlayable(bool &startable)
{
/* Check buttons. Not good, but it works. */
bool visible = playButton->isVisibleTo(this);
startable = visible && playButton->isEnabled();
return visible;
}

View File

@ -70,14 +70,17 @@ public:
bool ready();
uint32_t getState();
bool isDownloadable(bool &startable);
bool isPlayable(bool &startable);
public slots:
void download();
void play();
private slots:
void toggle();
void cancel();
void play();
void save();
void updateItem();

View File

@ -856,18 +856,28 @@ p, li { white-space: pre-wrap; }
<context>
<name>ChanMsgItem</name>
<message>
<location filename="../gui/feeds/ChanMsgItem.ui" line="+221"/>
<location filename="../gui/feeds/ChanMsgItem.ui" line="+230"/>
<source>Remove Item</source>
<translation>Eintrag entfernen</translation>
</message>
<message>
<location line="+20"/>
<location filename="../gui/feeds/ChanMsgItem.cpp" line="+189"/>
<location filename="../gui/feeds/ChanMsgItem.cpp" line="+249"/>
<source>Expand</source>
<translation>Erweitern</translation>
</message>
<message>
<location line="-40"/>
<location line="+24"/>
<source>Download</source>
<translation type="unfinished">Herunterladen</translation>
</message>
<message>
<location line="+11"/>
<source>Play</source>
<translation type="unfinished">Abspielen</translation>
</message>
<message>
<location line="-75"/>
<source>Unsubscribe From Channel</source>
<translation>Kanal abbestellen</translation>
</message>
@ -972,7 +982,7 @@ p, li { white-space: pre-wrap; }
<context>
<name>ChannelFeed</name>
<message>
<location filename="../gui/ChannelFeed.ui" line="+141"/>
<location filename="../gui/ChannelFeed.ui" line="+144"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@ -1287,7 +1297,7 @@ Keine Beschreibung</translation>
<context>
<name>ChatStyle</name>
<message>
<location filename="../gui/chat/ChatStyle.cpp" line="+381"/>
<location filename="../gui/chat/ChatStyle.cpp" line="+383"/>
<source>Standard style for group chat</source>
<translation>Standard Stil für den Gruppenchat</translation>
</message>
@ -2220,7 +2230,7 @@ p, li { white-space: pre-wrap; }
<translation>Drag&apos;n&apos;Drop Dateien aus den Suchergebnissen</translation>
</message>
<message>
<location filename="../gui/channels/CreateChannelMsg.cpp" line="+290"/>
<location filename="../gui/channels/CreateChannelMsg.cpp" line="+289"/>
<source>Add Extra File</source>
<translation>Zusätzlich eine Datei hinzufügen</translation>
</message>
@ -3499,7 +3509,7 @@ p, li { white-space: pre-wrap; }
<translation>Andere Foren</translation>
</message>
<message>
<location filename="../gui/ForumsDialog.ui" line="+618"/>
<location filename="../gui/ForumsDialog.ui" line="+621"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@ -4588,7 +4598,7 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location line="+32"/>
<location filename="../gui/im_history/ImHistoryBrowser.cpp" line="+295"/>
<location filename="../gui/im_history/ImHistoryBrowser.cpp" line="+383"/>
<source>Copy</source>
<translation>Kopieren</translation>
</message>
@ -5725,7 +5735,7 @@ Willst Du die Nachricht speichern ?</translation>
<translation>Von</translation>
</message>
<message>
<location line="+793"/>
<location line="+796"/>
<source>Size</source>
<translation>Grösse</translation>
</message>
@ -5738,7 +5748,7 @@ p, li { white-space: pre-wrap; }
<translation>&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;p, li { white-space: pre-wrap; }&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Arial&apos;; font-size:8pt; font-weight:400; font-style:normal; text-decoration:none;&quot;&gt;&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt; font-weight:600;&quot;&gt;Empfohlene Dateien&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<location line="-692"/>
<location line="-695"/>
<source>Reply</source>
<translation>Antworten</translation>
</message>
@ -5803,7 +5813,7 @@ p, li { white-space: pre-wrap; }
<translation>Anhänge</translation>
</message>
<message>
<location line="+171"/>
<location line="+174"/>
<location filename="../gui/MessagesDialog.cpp" line="-44"/>
<location line="+922"/>
<location line="+10"/>
@ -5887,13 +5897,13 @@ p, li { white-space: pre-wrap; }
<translation>Dokument drucken</translation>
</message>
<message>
<location filename="../gui/MessagesDialog.ui" line="-859"/>
<location filename="../gui/MessagesDialog.ui" line="-862"/>
<location filename="../gui/MessagesDialog.cpp" line="-1574"/>
<source>Subject</source>
<translation>Betreff</translation>
</message>
<message>
<location line="+514"/>
<location line="+517"/>
<source>Subject:</source>
<translation>Betreff:</translation>
</message>
@ -5923,7 +5933,7 @@ p, li { white-space: pre-wrap; }
<translation>Prüfsumme</translation>
</message>
<message>
<location line="-942"/>
<location line="-945"/>
<source>Print</source>
<translation>Drucken</translation>
</message>
@ -5986,7 +5996,7 @@ p, li { white-space: pre-wrap; }
<translation>Allen antworten</translation>
</message>
<message>
<location filename="../gui/MessagesDialog.ui" line="+579"/>
<location filename="../gui/MessagesDialog.ui" line="+582"/>
<source>&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Arial&apos;; font-size:8pt; font-weight:400; font-style:normal;&quot;&gt;
@ -5999,7 +6009,7 @@ p, li { white-space: pre-wrap; }
<translation>Posteingang gesamt:</translation>
</message>
<message>
<location line="-268"/>
<location line="-271"/>
<location filename="../gui/MessagesDialog.cpp" line="-324"/>
<source>Content</source>
<translation>Inhalt</translation>
@ -6018,7 +6028,7 @@ p, li { white-space: pre-wrap; }
<translation>Schlagwort</translation>
</message>
<message>
<location line="+171"/>
<location line="+174"/>
<location filename="../gui/MessagesDialog.cpp" line="+710"/>
<location line="+964"/>
<location line="+5"/>
@ -7190,7 +7200,7 @@ p, li { white-space: pre-wrap; }
<translation>Verfügbar</translation>
</message>
<message>
<location line="+770"/>
<location line="+771"/>
<source>Add Extra File</source>
<translation>Zusätzliche Datei hinzufügen</translation>
</message>
@ -7308,7 +7318,7 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location line="-107"/>
<location filename="../gui/PeersDialog.cpp" line="-1478"/>
<location filename="../gui/PeersDialog.cpp" line="-1479"/>
<source>Add Friend</source>
<translation>Freund hinzufügen</translation>
</message>
@ -7383,7 +7393,7 @@ p, li { white-space: pre-wrap; }
<translation>Willst du diesen Freund entfernen?</translation>
</message>
<message>
<location line="+730"/>
<location line="+731"/>
<source>Save as...</source>
<translation>Speichern unter...</translation>
</message>
@ -7416,7 +7426,7 @@ p, li { white-space: pre-wrap; }
<translation>Status Spalte ausblenden</translation>
</message>
<message>
<location filename="../gui/PeersDialog.cpp" line="-1809"/>
<location filename="../gui/PeersDialog.cpp" line="-1810"/>
<source>Friends Storm</source>
<translation>Aktivitäten</translation>
</message>
@ -7744,7 +7754,7 @@ p, li { white-space: pre-wrap; }
<context>
<name>PopupChatDialog</name>
<message>
<location filename="../gui/chat/PopupChatDialog.cpp" line="+778"/>
<location filename="../gui/chat/PopupChatDialog.cpp" line="+777"/>
<source>Hide Avatar</source>
<translation>Avatar verstecken</translation>
</message>
@ -7754,12 +7764,12 @@ p, li { white-space: pre-wrap; }
<translation>Avatar zeigen</translation>
</message>
<message>
<location line="+341"/>
<location line="+342"/>
<source>File not found or file name not accepted.</source>
<translation>Datei nicht gefunden oder Dateiname nicht akzeptiert.</translation>
</message>
<message>
<location line="+88"/>
<location line="+90"/>
<source>Messages you send will be delivered after Friend is again Online</source>
<translation>Nachrichten, die Du versendest gehen bei diesem Freund erst wieder ein wenn er Online ist</translation>
</message>
@ -7822,7 +7832,7 @@ p, li { white-space: pre-wrap; }
<translation>Deaktiviere Emoticons</translation>
</message>
<message>
<location filename="../gui/chat/PopupChatDialog.cpp" line="-1033"/>
<location filename="../gui/chat/PopupChatDialog.cpp" line="-1034"/>
<source>Paste retroshare Link</source>
<translation>RetroShare Link einfügen</translation>
</message>
@ -7842,12 +7852,12 @@ p, li { white-space: pre-wrap; }
<translation>Wähle dein Avatar Bild aus</translation>
</message>
<message>
<location filename="../gui/chat/PopupChatDialog.cpp" line="+772"/>
<location filename="../gui/chat/PopupChatDialog.cpp" line="+770"/>
<source>Add Extra File</source>
<translation>Zusätzlich eine Datei hinzufügen</translation>
</message>
<message>
<location line="+166"/>
<location line="+167"/>
<location line="+7"/>
<source>Drop file error.</source>
<translation>Dateifehler bei Drag&apos;n&apos;Drop.</translation>
@ -7879,7 +7889,7 @@ p, li { white-space: pre-wrap; }
<translation>Text Datei (*.txt );;Alle Dateien (*)</translation>
</message>
<message>
<location line="-750"/>
<location line="-749"/>
<source>Your Friend is offline
Do you want to send them a Message instead</source>
<translation>Dein Freund ist Offline willst du ihm stattdessen eine Nachricht senden</translation>
@ -7896,7 +7906,7 @@ Do you want to send them a Message instead</source>
<translation></translation>
</message>
<message>
<location filename="../gui/chat/PopupChatDialog.cpp" line="+789"/>
<location filename="../gui/chat/PopupChatDialog.cpp" line="+790"/>
<source>is Idle and may not reply</source>
<translation>antwortet möglicherweise nicht, da der Status auf &quot;Untätig&quot; gesetzt wurde</translation>
</message>
@ -7916,7 +7926,7 @@ Do you want to send them a Message instead</source>
<translation>ist Offline.</translation>
</message>
<message>
<location line="-734"/>
<location line="-735"/>
<source>is typing...</source>
<translation>tippt...</translation>
</message>
@ -8784,7 +8794,7 @@ p, li { white-space: pre-wrap; }
<context>
<name>RemoteDirModel</name>
<message>
<location filename="../gui/RemoteDirModel.cpp" line="+611"/>
<location filename="../gui/RemoteDirModel.cpp" line="+606"/>
<source>Friends Directories</source>
<translation>Dateien von Freunden</translation>
</message>
@ -8814,7 +8824,7 @@ p, li { white-space: pre-wrap; }
<translation>Alter</translation>
</message>
<message>
<location line="-461"/>
<location line="-456"/>
<source>Anonymous</source>
<translation>Anonym</translation>
</message>
@ -8830,12 +8840,12 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location line="+295"/>
<location line="+81"/>
<location line="+78"/>
<source>FILE</source>
<translation>DATEI</translation>
</message>
<message>
<location line="-64"/>
<location line="-61"/>
<source>Files</source>
<translation>Dateien</translation>
</message>
@ -8846,7 +8856,7 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location line="+10"/>
<location line="+69"/>
<location line="+64"/>
<source>DIR</source>
<translation>ORDNER</translation>
</message>
@ -10369,13 +10379,13 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location line="+26"/>
<location filename="../gui/feeds/SubFileItem.cpp" line="+579"/>
<location filename="../gui/feeds/SubFileItem.cpp" line="+582"/>
<location line="+6"/>
<source>Play File</source>
<translation>Datei abspielen</translation>
</message>
<message>
<location filename="../gui/feeds/SubFileItem.cpp" line="+51"/>
<location filename="../gui/feeds/SubFileItem.cpp" line="+54"/>
<source>Save Channel File</source>
<translation>Channel Datei speichern</translation>
</message>
@ -10390,7 +10400,38 @@ p, li { white-space: pre-wrap; }
<translation>Abspielen</translation>
</message>
<message>
<location filename="../gui/feeds/SubFileItem.cpp" line="-56"/>
<location filename="../gui/feeds/SubFileItem.cpp" line="-429"/>
<location line="+8"/>
<source>ERROR</source>
<translation>FEHLER</translation>
</message>
<message>
<location line="+16"/>
<source>EXTRA</source>
<translation>EXTRA</translation>
</message>
<message>
<location line="+11"/>
<source>REMOTE</source>
<translation>ENTFERNT</translation>
</message>
<message>
<location line="+9"/>
<source>DOWNLOAD</source>
<translation>DOWNLOAD</translation>
</message>
<message>
<location line="+11"/>
<source>LOCAL</source>
<translation>LOKAL</translation>
</message>
<message>
<location line="+9"/>
<source>UPLOAD</source>
<translation>UPLOAD</translation>
</message>
<message>
<location line="+306"/>
<source>File %1 does not exist at location.</source>
<translation>Datei %1 existiert nicht.</translation>
</message>
@ -10568,7 +10609,7 @@ p, li { white-space: pre-wrap; }
<context>
<name>TransfersDialog</name>
<message>
<location filename="../gui/TransfersDialog.cpp" line="+236"/>
<location filename="../gui/TransfersDialog.cpp" line="+246"/>
<source>Cancel</source>
<translation>Abbrechen</translation>
</message>
@ -10578,13 +10619,13 @@ p, li { white-space: pre-wrap; }
<translation>Fertige ausblenden</translation>
</message>
<message>
<location line="-158"/>
<location line="+62"/>
<location line="-152"/>
<location line="+59"/>
<source>Status</source>
<translation>Status</translation>
</message>
<message>
<location line="-66"/>
<location line="-63"/>
<source>Completed</source>
<translation>Fertiggestellt</translation>
</message>
@ -10638,20 +10679,20 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="../gui/TransfersDialog.cpp" line="-2"/>
<location line="+63"/>
<location line="+60"/>
<source>Name</source>
<comment>i.e: file name</comment>
<translation>Name</translation>
</message>
<message>
<location line="-62"/>
<location line="+63"/>
<location line="-59"/>
<location line="+60"/>
<source>Size</source>
<comment>i.e: file size</comment>
<translation>Grösse</translation>
</message>
<message>
<location line="-61"/>
<location line="-58"/>
<source>Speed</source>
<comment>i.e: Download speed</comment>
<translation>Geschwindigkeit</translation>
@ -10674,7 +10715,7 @@ p, li { white-space: pre-wrap; }
<translation>Kern-ID</translation>
</message>
<message>
<location line="+56"/>
<location line="+53"/>
<source>Progress</source>
<comment>i.e: % uploaded</comment>
<translation>Fortschritt</translation>
@ -10691,7 +10732,7 @@ p, li { white-space: pre-wrap; }
<translation>Übertragen</translation>
</message>
<message>
<location line="+121"/>
<location line="+118"/>
<source>Play</source>
<translation>Abspielen</translation>
</message>
@ -10776,7 +10817,7 @@ p, li { white-space: pre-wrap; }
<translation>Blockstrategie</translation>
</message>
<message>
<location line="+391"/>
<location line="+396"/>
<source>Queued</source>
<translation>In Warteschleife</translation>
</message>
@ -10786,12 +10827,12 @@ p, li { white-space: pre-wrap; }
<translation>Pausiert</translation>
</message>
<message>
<location line="-137"/>
<location line="-139"/>
<source>Transferring</source>
<translation>Übertrage</translation>
</message>
<message>
<location line="+352"/>
<location line="+354"/>
<source>RetroShare</source>
<translation></translation>
</message>
@ -10816,7 +10857,7 @@ p, li { white-space: pre-wrap; }
<translation>Soll dieser Download wirklich abgebrochen und gelöscht werden?</translation>
</message>
<message>
<location line="-901"/>
<location line="-900"/>
<source>Speed / Queue position</source>
<translation>Geschwindigkeits- / Warteschlangenposition</translation>
</message>
@ -10832,7 +10873,7 @@ p, li { white-space: pre-wrap; }
<translation>Download Zeit</translation>
</message>
<message>
<location line="+56"/>
<location line="+53"/>
<source>Peer</source>
<comment>i.e: user name</comment>
<translation>Nachbar</translation>
@ -10843,39 +10884,39 @@ p, li { white-space: pre-wrap; }
<translation>Prüfsumme</translation>
</message>
<message>
<location line="+112"/>
<location line="+525"/>
<location line="+109"/>
<location line="+530"/>
<source>Slower</source>
<translation>Langsamer</translation>
</message>
<message>
<location line="-523"/>
<location line="+524"/>
<location line="-528"/>
<location line="+529"/>
<location line="+2"/>
<source>Average</source>
<translation>Durchschnitt</translation>
</message>
<message>
<location line="-524"/>
<location line="+523"/>
<location line="-529"/>
<location line="+528"/>
<source>Faster</source>
<translation>Schneller</translation>
</message>
<message>
<location line="-419"/>
<location line="-424"/>
<source>Move in Queue...</source>
<translation>Verschiebe in Warteschlange...</translation>
</message>
<message>
<location line="+256"/>
<location line="+143"/>
<location line="+259"/>
<location line="+145"/>
<location line="+129"/>
<source>Failed</source>
<translation>Gescheitert</translation>
</message>
<message>
<location line="-268"/>
<location line="+140"/>
<location line="-270"/>
<location line="+142"/>
<location line="+129"/>
<source>Okay</source>
<translation>OK</translation>
@ -10892,8 +10933,8 @@ p, li { white-space: pre-wrap; }
<translation>Ladend</translation>
</message>
<message>
<location line="-130"/>
<location line="+131"/>
<location line="-132"/>
<location line="+133"/>
<location line="+129"/>
<location line="+1"/>
<source>Complete</source>
@ -10920,7 +10961,7 @@ p, li { white-space: pre-wrap; }
<translation>Überprüfe...</translation>
</message>
<message>
<location line="-550"/>
<location line="-555"/>
<source>Force Check</source>
<translation>Erzwinge Überprüfung</translation>
</message>