From 0f1a1987b671c696ca8eed5cc0a9c00f210d07d6 Mon Sep 17 00:00:00 2001 From: thunder2 Date: Tue, 16 Nov 2010 09:31:30 +0000 Subject: [PATCH] Added drag and drop support for attaching files in MessageComposer. Corrected some messageboxes to show the icon of the parent. git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@3802 b45a01b8-16f6-495d-af2f-9b41ad6348cc --- retroshare-gui/src/gui/LinksDialog.cpp | 9 +- retroshare-gui/src/gui/PeersDialog.cpp | 6 +- retroshare-gui/src/gui/QuickStartWizard.cpp | 3 +- retroshare-gui/src/gui/RetroShareLink.cpp | 9 -- .../src/gui/chat/PopupChatDialog.cpp | 6 +- .../src/gui/forums/CreateForumMsg.cpp | 6 +- .../src/gui/msgs/MessageComposer.cpp | 78 ++++++++++++++ retroshare-gui/src/gui/msgs/MessageComposer.h | 3 + retroshare-gui/src/lang/retroshare_de.qm | Bin 278876 -> 279443 bytes retroshare-gui/src/lang/retroshare_de.ts | 100 ++++++++++-------- 10 files changed, 149 insertions(+), 71 deletions(-) diff --git a/retroshare-gui/src/gui/LinksDialog.cpp b/retroshare-gui/src/gui/LinksDialog.cpp index f02e2f130..e073003ce 100644 --- a/retroshare-gui/src/gui/LinksDialog.cpp +++ b/retroshare-gui/src/gui/LinksDialog.cpp @@ -1014,22 +1014,19 @@ void LinksDialog::anchorClicked (const QUrl& link ) if(rsFiles->FileRequest(fileName, fileHash, fileSize, "", RS_FILE_HINTS_NETWORK_WIDE, srcIds)) { - QMessageBox mb(tr("File Request Confirmation"), tr("The file has been added to your download list."),QMessageBox::Information,QMessageBox::Ok,0,0); - mb.setButtonText( QMessageBox::Ok, "OK" ); + QMessageBox mb(tr("File Request Confirmation"), tr("The file has been added to your download list."),QMessageBox::Information,QMessageBox::Ok,0,0,this); mb.setWindowIcon(QIcon(QString::fromUtf8(":/images/rstray3.png"))); mb.exec(); } else { - QMessageBox mb(tr("File Request canceled"), tr("The file has not been added to your download list, because you already have it."),QMessageBox::Information,QMessageBox::Ok,0,0); - mb.setButtonText( QMessageBox::Ok, "OK" ); + QMessageBox mb(tr("File Request canceled"), tr("The file has not been added to your download list, because you already have it."),QMessageBox::Information,QMessageBox::Ok,0,0,this); mb.exec(); } } else { - QMessageBox mb(tr("File Request Error"), tr("The file link is malformed."),QMessageBox::Information,QMessageBox::Ok,0,0); - mb.setButtonText( QMessageBox::Ok, "OK" ); + QMessageBox mb(tr("File Request Error"), tr("The file link is malformed."),QMessageBox::Information,QMessageBox::Ok,0,0,this); mb.setWindowIcon(QIcon(QString::fromUtf8(":/images/rstray3.png"))); mb.exec(); } diff --git a/retroshare-gui/src/gui/PeersDialog.cpp b/retroshare-gui/src/gui/PeersDialog.cpp index d11c8d05f..5201bc50d 100644 --- a/retroshare-gui/src/gui/PeersDialog.cpp +++ b/retroshare-gui/src/gui/PeersDialog.cpp @@ -1913,15 +1913,13 @@ void PeersDialog::dropEvent(QDropEvent *event) QDir dir(localpath); if (dir.exists()) { std::cerr << "PeersDialog::dropEvent() directory not accepted."<< std::endl; - QMessageBox mb(tr("Drop file error."), tr("Directory can't be dropped, only files are accepted."),QMessageBox::Information,QMessageBox::Ok,0,0); - mb.setButtonText( QMessageBox::Ok, "OK" ); + QMessageBox mb(tr("Drop file error."), tr("Directory can't be dropped, only files are accepted."),QMessageBox::Information,QMessageBox::Ok,0,0,this); mb.exec(); } else if (QFile::exists(localpath)) { PeersDialog::addAttachment(localpath.toUtf8().constData()); } else { std::cerr << "PeersDialog::dropEvent() file does not exists."<< std::endl; - QMessageBox mb(tr("Drop file error."), tr("File not found or file name not accepted."),QMessageBox::Information,QMessageBox::Ok,0,0); - mb.setButtonText( QMessageBox::Ok, "OK" ); + QMessageBox mb(tr("Drop file error."), tr("File not found or file name not accepted."),QMessageBox::Information,QMessageBox::Ok,0,0,this); mb.exec(); } } diff --git a/retroshare-gui/src/gui/QuickStartWizard.cpp b/retroshare-gui/src/gui/QuickStartWizard.cpp index 12db6cfa2..31170636a 100644 --- a/retroshare-gui/src/gui/QuickStartWizard.cpp +++ b/retroshare-gui/src/gui/QuickStartWizard.cpp @@ -346,8 +346,7 @@ void QuickStartWizard::updateFlags(bool b) bool QuickStartWizard::messageBoxOk(QString msg) { - QMessageBox mb("Share Manager InfoBox!",msg,QMessageBox::Information,QMessageBox::Ok,0,0); - mb.setButtonText( QMessageBox::Ok, "OK" ); + QMessageBox mb("Share Manager InfoBox!",msg,QMessageBox::Information,QMessageBox::Ok,0,0,this); mb.exec(); return true; } diff --git a/retroshare-gui/src/gui/RetroShareLink.cpp b/retroshare-gui/src/gui/RetroShareLink.cpp index a85cbd2f3..25b2700ed 100644 --- a/retroshare-gui/src/gui/RetroShareLink.cpp +++ b/retroshare-gui/src/gui/RetroShareLink.cpp @@ -269,7 +269,6 @@ bool RetroShareLink::process(int flag) if (rsFiles->FileRequest(name().toUtf8().constData(), hash().toStdString(), size(), "", RS_FILE_HINTS_NETWORK_WIDE, srcIds)) { if (flag & RSLINK_PROCESS_NOTIFY_SUCCESS) { QMessageBox mb(QObject::tr("File Request Confirmation"), QObject::tr("The file has been added to your download list."),QMessageBox::Information,QMessageBox::Ok,0,0); - mb.setButtonText( QMessageBox::Ok, "OK" ); mb.setWindowIcon(QIcon(QString::fromUtf8(":/images/rstray3.png"))); mb.exec(); } @@ -278,7 +277,6 @@ bool RetroShareLink::process(int flag) if (flag & RSLINK_PROCESS_NOTIFY_ERROR) { QMessageBox mb(QObject::tr("File Request canceled"), QObject::tr("The file has not been added to your download list, because you already have it."),QMessageBox::Critical,QMessageBox::Ok,0,0); - mb.setButtonText( QMessageBox::Ok, "OK" ); mb.setWindowIcon(QIcon(QString::fromUtf8(":/images/rstray3.png"))); mb.exec(); } @@ -300,7 +298,6 @@ bool RetroShareLink::process(int flag) // peer connection is already accepted if (flag & RSLINK_PROCESS_NOTIFY_SUCCESS) { QMessageBox mb(QObject::tr("Friend Request Confirmation"), QObject::tr("The friend is already in your list."),QMessageBox::Information,QMessageBox::Ok,0,0); - mb.setButtonText( QMessageBox::Ok, "OK" ); mb.setWindowIcon(QIcon(QString::fromUtf8(":/images/rstray3.png"))); mb.exec(); } @@ -310,7 +307,6 @@ bool RetroShareLink::process(int flag) if (rsPeers->setAcceptToConnectGPGCertificate(hash().toStdString(), true)) { if (flag & RSLINK_PROCESS_NOTIFY_SUCCESS) { QMessageBox mb(QObject::tr("Friend Request Confirmation"), QObject::tr("The friend has been added to your list."),QMessageBox::Information,QMessageBox::Ok,0,0); - mb.setButtonText( QMessageBox::Ok, "OK" ); mb.setWindowIcon(QIcon(QString::fromUtf8(":/images/rstray3.png"))); mb.exec(); } @@ -319,7 +315,6 @@ bool RetroShareLink::process(int flag) if (flag & RSLINK_PROCESS_NOTIFY_ERROR) { QMessageBox mb(QObject::tr("Friend Request canceled"), QObject::tr("The friend could not be added to your list."),QMessageBox::Critical,QMessageBox::Ok,0,0); - mb.setButtonText( QMessageBox::Ok, "OK" ); mb.setWindowIcon(QIcon(QString::fromUtf8(":/images/rstray3.png"))); mb.exec(); } @@ -328,7 +323,6 @@ bool RetroShareLink::process(int flag) if (flag & RSLINK_PROCESS_NOTIFY_ERROR) { QMessageBox mb(QObject::tr("Friend Request canceled"), QObject::tr("The friend could not be found."),QMessageBox::Critical,QMessageBox::Ok,0,0); - mb.setButtonText( QMessageBox::Ok, "OK" ); mb.setWindowIcon(QIcon(QString::fromUtf8(":/images/rstray3.png"))); mb.exec(); } @@ -340,7 +334,6 @@ bool RetroShareLink::process(int flag) if (flag & RSLINK_PROCESS_NOTIFY_ERROR) { QMessageBox mb(QObject::tr("File Request Error"), QObject::tr("The file link is malformed."),QMessageBox::Critical,QMessageBox::Ok,0,0); - mb.setButtonText( QMessageBox::Ok, "OK" ); mb.setWindowIcon(QIcon(QString::fromUtf8(":/images/rstray3.png"))); mb.exec(); } @@ -358,7 +351,6 @@ bool RetroShareLink::process(int flag) // QUrl can't handle the RetroShare link format properly if (flag & RSLINK_PROCESS_NOTIFY_ERROR) { QMessageBox mb(QObject::tr("File Request"), QObject::tr("Process of RetroShare links is not implemented. Please use copy instead."),QMessageBox::Critical,QMessageBox::Ok,0,0); - mb.setButtonText( QMessageBox::Ok, "OK" ); mb.setWindowIcon(QIcon(QString::fromUtf8(":/images/rstray3.png"))); mb.exec(); } @@ -372,7 +364,6 @@ bool RetroShareLink::process(int flag) // if (flag & RSLINK_PROCESS_NOTIFY_ERROR) { // QMessageBox mb(QObject::tr("File Request Error"), QObject::tr("The file link is malformed."),QMessageBox::Information,QMessageBox::Ok,0,0); //second version: QMessageBox mb(QObject::tr("Badly formed RS link"), QObject::tr("This RetroShare link is malformed. This is bug. Please contact the developers.\n\nNote: this possibly comes from a bug in Qt4.6. Try to right-click + copy link location, and paste in Transfer Tab."),QMessageBox::Critical,QMessageBox::Ok,0,0); -// mb.setButtonText( QMessageBox::Ok, "OK" ); // mb.setWindowIcon(QIcon(QString::fromUtf8(":/images/rstray3.png"))); // mb.exec(); // } diff --git a/retroshare-gui/src/gui/chat/PopupChatDialog.cpp b/retroshare-gui/src/gui/chat/PopupChatDialog.cpp index ce064786b..9d0791521 100644 --- a/retroshare-gui/src/gui/chat/PopupChatDialog.cpp +++ b/retroshare-gui/src/gui/chat/PopupChatDialog.cpp @@ -1059,15 +1059,13 @@ void PopupChatDialog::dropEvent(QDropEvent *event) QDir dir(localpath); if (dir.exists()) { std::cerr << "PopupChatDialog::dropEvent() directory not accepted."<< std::endl; - QMessageBox mb(tr("Drop file error."), tr("Directory can't be dropped, only files are accepted."),QMessageBox::Information,QMessageBox::Ok,0,0); - mb.setButtonText( QMessageBox::Ok, "OK" ); + QMessageBox mb(tr("Drop file error."), tr("Directory can't be dropped, only files are accepted."),QMessageBox::Information,QMessageBox::Ok,0,0,this); mb.exec(); } else if (QFile::exists(localpath)) { PopupChatDialog::addAttachment(localpath.toUtf8().constData(), false); } else { std::cerr << "PopupChatDialog::dropEvent() file does not exists."<< std::endl; - QMessageBox mb(tr("Drop file error."), tr("File not found or file name not accepted."),QMessageBox::Information,QMessageBox::Ok,0,0); - mb.setButtonText( QMessageBox::Ok, "OK" ); + QMessageBox mb(tr("Drop file error."), tr("File not found or file name not accepted."),QMessageBox::Information,QMessageBox::Ok,0,0,this); mb.exec(); } } diff --git a/retroshare-gui/src/gui/forums/CreateForumMsg.cpp b/retroshare-gui/src/gui/forums/CreateForumMsg.cpp index 7aa0c07b4..e86e5817d 100644 --- a/retroshare-gui/src/gui/forums/CreateForumMsg.cpp +++ b/retroshare-gui/src/gui/forums/CreateForumMsg.cpp @@ -294,13 +294,11 @@ void CreateForumMsg::dropEvent(QDropEvent *event) //Check that the file does exist and is not a directory if ((-1 == stat(localpath.c_str(), &buf))) { std::cerr << "CreateForumMsg::dropEvent() file does not exists."<< std::endl; - QMessageBox mb(tr("Drop file error."), tr("File not found or file name not accepted."),QMessageBox::Information,QMessageBox::Ok,0,0); - mb.setButtonText( QMessageBox::Ok, "OK" ); + QMessageBox mb(tr("Drop file error."), tr("File not found or file name not accepted."),QMessageBox::Information,QMessageBox::Ok,0,0,this); mb.exec(); } else if (S_ISDIR(buf.st_mode)) { std::cerr << "CreateForumMsg::dropEvent() directory not accepted."<< std::endl; - QMessageBox mb(tr("Drop file error."), tr("Directory can't be dropped, only files are accepted."),QMessageBox::Information,QMessageBox::Ok,0,0); - mb.setButtonText( QMessageBox::Ok, "OK" ); + QMessageBox mb(tr("Drop file error."), tr("Directory can't be dropped, only files are accepted."),QMessageBox::Information,QMessageBox::Ok,0,0,this); mb.exec(); } else { CreateForumMsg::addAttachment(localpath); diff --git a/retroshare-gui/src/gui/msgs/MessageComposer.cpp b/retroshare-gui/src/gui/msgs/MessageComposer.cpp index c67f687ed..482367065 100644 --- a/retroshare-gui/src/gui/msgs/MessageComposer.cpp +++ b/retroshare-gui/src/gui/msgs/MessageComposer.cpp @@ -284,6 +284,8 @@ MessageComposer::MessageComposer(QWidget *parent, Qt::WFlags flags) /* set focus to subject */ ui.titleEdit->setFocus(); + setAcceptDrops(true); + /* Hide platform specific features */ #ifdef Q_WS_WIN @@ -2289,3 +2291,79 @@ void MessageComposer::recommendButtonClicked() ui.msgText->textCursor().insertHtml(text); ui.msgText->setFocus(Qt::OtherFocusReason); } + +void MessageComposer::dragEnterEvent(QDragEnterEvent *event) +{ + /* print out mimeType */ + std::cerr << "PopupChatDialog::dragEnterEvent() Formats"; + std::cerr << std::endl; + + QStringList formats = event->mimeData()->formats(); + QStringList::iterator it; + for(it = formats.begin(); it != formats.end(); it++) { + std::cerr << "Format: " << (*it).toStdString(); + std::cerr << std::endl; + } + + if (event->mimeData()->hasUrls()) { + std::cerr << "PopupChatDialog::dragEnterEvent() Accepting Urls"; + std::cerr << std::endl; + event->acceptProposedAction(); + } else { + std::cerr << "PopupChatDialog::dragEnterEvent() No Urls"; + std::cerr << std::endl; + } +} + +void MessageComposer::dropEvent(QDropEvent *event) +{ + if (!(Qt::CopyAction & event->possibleActions())) { + std::cerr << "PopupChatDialog::dropEvent() Rejecting uncopyable DropAction"; + std::cerr << std::endl; + + /* can't do it */ + return; + } + + std::cerr << "PopupChatDialog::dropEvent() Formats"; + std::cerr << std::endl; + + QStringList formats = event->mimeData()->formats(); + QStringList::iterator it; + for(it = formats.begin(); it != formats.end(); it++) { + std::cerr << "Format: " << (*it).toStdString(); + std::cerr << std::endl; + } + + if (event->mimeData()->hasUrls()) { + std::cerr << "PopupChatDialog::dropEvent() Urls:"; + std::cerr << std::endl; + + QList urls = event->mimeData()->urls(); + QList::iterator uit; + for(uit = urls.begin(); uit != urls.end(); uit++) { + QString localpath = uit->toLocalFile(); + std::cerr << "Whole URL: " << uit->toString().toStdString() << std::endl; + std::cerr << "or As Local File: " << localpath.toStdString() << std::endl; + + if (localpath.isEmpty() == false) { + //Check that the file does exist and is not a directory + QDir dir(localpath); + if (dir.exists()) { + std::cerr << "PopupChatDialog::dropEvent() directory not accepted."<< std::endl; + QMessageBox mb(tr("Drop file error."), tr("Directory can't be dropped, only files are accepted."),QMessageBox::Information,QMessageBox::Ok,0,0,this); + mb.exec(); + } else if (QFile::exists(localpath)) { + addAttachment(localpath.toUtf8().constData()); + } else { + std::cerr << "PopupChatDialog::dropEvent() file does not exists."<< std::endl; + QMessageBox mb(tr("Drop file error."), tr("File not found or file name not accepted."),QMessageBox::Information,QMessageBox::Ok,0,0,this); + mb.exec(); + } + } + } + } + + event->setDropAction(Qt::CopyAction); + event->accept(); +} diff --git a/retroshare-gui/src/gui/msgs/MessageComposer.h b/retroshare-gui/src/gui/msgs/MessageComposer.h index b40bba313..f17ffeb87 100644 --- a/retroshare-gui/src/gui/msgs/MessageComposer.h +++ b/retroshare-gui/src/gui/msgs/MessageComposer.h @@ -80,6 +80,9 @@ protected: void closeEvent (QCloseEvent * event); bool eventFilter(QObject *obj, QEvent *ev); + virtual void dragEnterEvent(QDragEnterEvent *event); + virtual void dropEvent(QDropEvent *event); + private slots: /* toggle Contacts DockWidget */ diff --git a/retroshare-gui/src/lang/retroshare_de.qm b/retroshare-gui/src/lang/retroshare_de.qm index b098667447a015d25c3b11e00cc00e5f8b2e3300..02fcc4149bad349763b04b9e01baf4132d3d4bbf 100644 GIT binary patch delta 12494 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

YE^%1uz{=Bsu!hV)vD8~x48mMydaU? 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 UuO_t1(l|=-A3GICIlb5a0B%ni!~g&Q diff --git a/retroshare-gui/src/lang/retroshare_de.ts b/retroshare-gui/src/lang/retroshare_de.ts index dd2393adc..237629a99 100644 --- a/retroshare-gui/src/lang/retroshare_de.ts +++ b/retroshare-gui/src/lang/retroshare_de.ts @@ -2481,17 +2481,17 @@ p, li { white-space: pre-wrap; } - + Drop file error. Dateifehler bei Drag'n'Drop. - + File not found or file name not accepted. Datei nicht gefunden oder Dateiname nicht akzeptiert. - + Directory can't be dropped, only files are accepted. Ordner können nicht für Drag'n'Drop genutzt werden. Nur Dateien werden akzeptiert. @@ -4857,7 +4857,7 @@ p, li { white-space: pre-wrap; } Die Datei wurde zur Downloadliste hinzugefügt. - + File Request canceled Dateianforderung abgebrochen @@ -4867,7 +4867,7 @@ p, li { white-space: pre-wrap; } Die Datei wurde nicht zur Downloadliste hinzugefügt, da Sie sie schon haben. - + File Request Error Fehler bei der Dateianforderung @@ -5326,7 +5326,7 @@ Bitte gib etwas Speicher frei und drücke OK. MessageComposer - + Compose Verfassen @@ -5553,7 +5553,7 @@ Bitte gib etwas Speicher frei und drücke OK. Blockquote hinzufügen - + &Left &Links @@ -5573,7 +5573,7 @@ Bitte gib etwas Speicher frei und drücke OK. &Blocksatz - + Save Message Nachricht speichern @@ -5770,7 +5770,23 @@ Willst Du die Nachricht speichern ? Zusätzliche Datei hinzufügen - + + + Drop file error. + Dateifehler bei Drag'n'Drop. + + + + Directory can't be dropped, only files are accepted. + Ordner können nicht für Drag'n'Drop genutzt werden. Nur Dateien werden akzeptiert. + + + + File not found or file name not accepted. + Datei nicht gefunden oder Dateiname nicht akzeptiert. + + + Friend Recommendation(s) Freundempfehlung(en) @@ -5893,7 +5909,7 @@ Willst Du die Nachricht speichern ? - + From Von @@ -6066,7 +6082,7 @@ p, li { white-space: pre-wrap; } - + Subject Betreff @@ -6131,7 +6147,7 @@ p, li { white-space: pre-wrap; } Empfohlene Dateien einblenden - + Save as... Speichern unter... @@ -6141,7 +6157,7 @@ p, li { white-space: pre-wrap; } HTML-Dateien (*.htm *.html);;Alle Dateien (*) - + Reply to All Allen antworten @@ -6180,7 +6196,7 @@ p, li { white-space: pre-wrap; } - + Trash @@ -6197,7 +6213,7 @@ p, li { white-space: pre-wrap; } Ordner - + Remove All Tags Alle Schlagwörter entfernen @@ -6227,7 +6243,7 @@ p, li { white-space: pre-wrap; } Papierkorb leeren - + Drafts @@ -6239,12 +6255,12 @@ p, li { white-space: pre-wrap; } An - + Edit... Editieren... - + @@ -7393,7 +7409,7 @@ p, li { white-space: pre-wrap; } - + Drop file error. Dateifehler bei Drag'n'Drop. @@ -7403,7 +7419,7 @@ p, li { white-space: pre-wrap; } Datei nicht gefunden oder Dateiname nicht akzeptiert. - + Directory can't be dropped, only files are accepted. Ordner können nicht für Drag'n'Drop genutzt werden. Nur Dateien werden akzeptiert. @@ -7580,7 +7596,7 @@ p, li { white-space: pre-wrap; } Willst du diesen Freund entfernen? - + Save as... Speichern unter... @@ -7613,7 +7629,7 @@ p, li { white-space: pre-wrap; } Status Spalte ausblenden - + Friends Storm Aktivitäten @@ -7951,12 +7967,12 @@ p, li { white-space: pre-wrap; } Avatar zeigen - + File not found or file name not accepted. Datei nicht gefunden oder Dateiname nicht akzeptiert. - + Messages you send will be delivered after Friend is again Online Nachrichten, die Du versendest gehen bei diesem Freund erst wieder ein wenn er Online ist @@ -8019,7 +8035,7 @@ p, li { white-space: pre-wrap; } Deaktiviere Emoticons - + Paste retroshare Link RetroShare Link einfügen @@ -8035,12 +8051,12 @@ p, li { white-space: pre-wrap; } - + Drop file error. Dateifehler bei Drag'n'Drop. - + Directory can't be dropped, only files are accepted. Ordner können nicht für Drag'n'Drop genutzt werden. Nur Dateien werden akzeptiert. @@ -8056,7 +8072,7 @@ p, li { white-space: pre-wrap; } Chat Verlauf speichern - + Save as... Speichern unter... @@ -8066,7 +8082,7 @@ p, li { white-space: pre-wrap; } Text Datei (*.txt );;Alle Dateien (*) - + Your Friend is offline Do you want to send them a Message instead Dein Freund ist Offline willst du ihm stattdessen eine Nachricht senden @@ -8083,7 +8099,7 @@ Do you want to send them a Message instead - + is Idle and may not reply antwortet möglicherweise nicht, da der Status auf "Untätig" gesetzt wurde @@ -8103,7 +8119,7 @@ Do you want to send them a Message instead ist Offline. - + is typing... tippt... @@ -8641,7 +8657,7 @@ p, li { white-space: pre-wrap; } Die Datei wurde zur Downloadliste hinzugefügt. - + File Request canceled Dateianforderung abgebrochen @@ -8651,39 +8667,39 @@ p, li { white-space: pre-wrap; } Die Datei wurde nicht zur Downloadliste hinzugefügt, da Du sie schon hast. - - + + Friend Request Confirmation Freundanfrage bestätigen - + The friend is already in your list. Der Freund ist schon in Deiner Liste. - + The friend has been added to your list. Der Freund wurde zu Deiner Liste hinzugefügt. - - + + Friend Request canceled Freundanfrage abgebrochen - + The friend could not be added to your list. Der Freund konnte nicht zu Deiner Liste hinzugefügt werden. - + The friend could not be found. Der Freund konnte nicht gefunden werden. - + File Request Error Fehler bei der Dateianforderung @@ -8693,7 +8709,7 @@ p, li { white-space: pre-wrap; } Link ist fehlerhaft. - + File Request Dateianfrage