2008-04-09 08:57:26 -04:00
/****************************************************************
* RetroShare is distributed under the following license :
*
* Copyright ( C ) 2008 Robert Fernie
*
* This program is free software ; you can redistribute it and / or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation ; either version 2
* of the License , or ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software
* Foundation , Inc . , 51 Franklin Street , Fifth Floor ,
* Boston , MA 02110 - 1301 , USA .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
# include "ForumsDialog.h"
2008-04-15 12:40:38 -04:00
# include "gui/forums/CreateForum.h"
# include "gui/forums/CreateForumMsg.h"
2010-01-02 10:47:07 -05:00
# include "gui/forums/ForumDetails.h"
2010-01-09 11:33:00 -05:00
# include "msgs/ChanMsgDialog.h"
2008-04-09 08:57:26 -04:00
# include "rsiface/rsiface.h"
# include "rsiface/rspeers.h"
# include "rsiface/rsmsgs.h"
# include "rsiface/rsforums.h"
2010-01-04 09:29:49 -05:00
2008-04-09 08:57:26 -04:00
# include <sstream>
2008-11-02 10:20:42 -05:00
# include <algorithm>
2008-04-09 08:57:26 -04:00
# include <QContextMenuEvent>
# include <QCursor>
2010-01-04 09:29:49 -05:00
# include <QDateTime>
# include <QFile>
# include <QFileInfo>
# include <QMenu>
2008-04-09 08:57:26 -04:00
# include <QMouseEvent>
# include <QPixmap>
2010-01-04 09:29:49 -05:00
# include <QPoint>
2008-04-09 08:57:26 -04:00
# include <QPrintDialog>
# include <QPrinter>
# include <QHeaderView>
2008-04-15 12:40:38 -04:00
# include <QTimer>
2010-01-01 10:37:45 -05:00
# include <QMessageBox>
2010-01-04 09:29:49 -05:00
# include <QtGui>
2008-04-09 08:57:26 -04:00
/* Images for context menu icons */
# define IMAGE_MESSAGE ": / images / folder-draft.png"
# define IMAGE_MESSAGEREPLY ": / images / mail_reply.png"
# define IMAGE_MESSAGEREMOVE ": / images / mail_delete.png"
# define IMAGE_DOWNLOAD ": / images / start.png"
# define IMAGE_DOWNLOADALL ": / images / startall.png"
2008-11-26 19:01:46 -05:00
/* Images for TreeWidget */
2008-08-12 08:03:23 -04:00
# define IMAGE_FOLDER ": / images / folder16.png"
2008-08-16 21:09:32 -04:00
# define IMAGE_FOLDERGREEN ": / images / folder_green.png"
# define IMAGE_FOLDERRED ": / images / folder_red.png"
# define IMAGE_FOLDERYELLOW ": / images / folder_yellow.png"
2008-08-12 08:03:23 -04:00
# define IMAGE_FORUM ": / images / konversation16.png"
2009-08-13 09:35:18 -04:00
# define IMAGE_SUBSCRIBE ": / images / edit_add24.png"
2008-08-12 17:07:41 -04:00
# define IMAGE_UNSUBSCRIBE ": / images / cancel.png"
# define IMAGE_INFO ": / images / info16.png"
# define IMAGE_NEWFORUM ": / images / new_forum16.png"
2010-01-01 13:58:39 -05:00
# define IMAGE_FORUMAUTHD ": / images / konv_message2.png"
2008-08-12 17:07:41 -04:00
2008-04-09 08:57:26 -04:00
/** Constructor */
2008-11-26 19:01:46 -05:00
ForumsDialog : : ForumsDialog ( QWidget * parent )
2008-04-09 08:57:26 -04:00
: MainPage ( parent )
{
/* Invoke the Qt Designer generated object setup routine */
ui . setupUi ( this ) ;
connect ( ui . forumTreeWidget , SIGNAL ( customContextMenuRequested ( QPoint ) ) , this , SLOT ( forumListCustomPopupMenu ( QPoint ) ) ) ;
connect ( ui . threadTreeWidget , SIGNAL ( customContextMenuRequested ( QPoint ) ) , this , SLOT ( threadListCustomPopupMenu ( QPoint ) ) ) ;
2010-01-04 20:49:58 -05:00
connect ( ui . actionCreate_Forum , SIGNAL ( triggered ( ) ) , this , SLOT ( newforum ( ) ) ) ;
2008-08-12 14:41:08 -04:00
connect ( ui . newmessageButton , SIGNAL ( clicked ( ) ) , this , SLOT ( createmessage ( ) ) ) ;
2010-01-01 10:37:45 -05:00
connect ( ui . newthreadButton , SIGNAL ( clicked ( ) ) , this , SLOT ( showthread ( ) ) ) ;
2008-04-15 12:40:38 -04:00
connect ( ui . forumTreeWidget , SIGNAL ( currentItemChanged ( QTreeWidgetItem * , QTreeWidgetItem * ) ) , this ,
SLOT ( changedForum ( QTreeWidgetItem * , QTreeWidgetItem * ) ) ) ;
//connect( ui.threadTreeWidget, SIGNAL( currentItemChanged ( QTreeWidgetItem *, QTreeWidgetItem *) ), this,
// SLOT( changedThread( QTreeWidgetItem *, QTreeWidgetItem * ) ) );
connect ( ui . threadTreeWidget , SIGNAL ( itemSelectionChanged ( ) ) , this , SLOT ( changedThread2 ( ) ) ) ;
2009-02-22 12:36:39 -05:00
connect ( ui . viewBox , SIGNAL ( currentIndexChanged ( int ) ) , this , SLOT ( insertThreads ( ) ) ) ;
2010-01-14 08:54:16 -05:00
connect ( ui . postText , SIGNAL ( anchorClicked ( const QUrl & ) ) , SLOT ( anchorClicked ( const QUrl & ) ) ) ;
2010-01-14 08:03:43 -05:00
2008-04-15 12:40:38 -04:00
connect ( ui . expandButton , SIGNAL ( clicked ( ) ) , this , SLOT ( togglefileview ( ) ) ) ;
QTimer * timer = new QTimer ( this ) ;
timer - > connect ( timer , SIGNAL ( timeout ( ) ) , this , SLOT ( checkUpdate ( ) ) ) ;
timer - > start ( 1000 ) ;
2009-09-13 09:25:24 -04:00
/* Set header resize modes and initial section sizes */
2008-11-26 19:01:46 -05:00
QHeaderView * ftheader = ui . forumTreeWidget - > header ( ) ;
2008-08-12 14:41:08 -04:00
ftheader - > setResizeMode ( 0 , QHeaderView : : Interactive ) ;
2008-11-26 19:01:46 -05:00
2008-08-12 14:41:08 -04:00
ftheader - > resizeSection ( 0 , 170 ) ;
/* Set header resize modes and initial section sizes */
2008-11-26 19:01:46 -05:00
QHeaderView * ttheader = ui . threadTreeWidget - > header ( ) ;
ttheader - > setResizeMode ( 0 , QHeaderView : : Interactive ) ;
2008-08-12 14:41:08 -04:00
ttheader - > resizeSection ( 0 , 170 ) ;
2008-11-26 19:01:46 -05:00
ttheader - > resizeSection ( 1 , 170 ) ;
2008-08-12 08:24:47 -04:00
2009-09-13 09:25:24 -04:00
2009-09-15 08:33:59 -04:00
mForumNameFont = QFont ( " Times " , 12 , QFont : : Bold ) ;
2009-09-13 09:25:24 -04:00
ui . forumName - > setFont ( mForumNameFont ) ;
2010-01-02 17:50:56 -05:00
ui . threadTitle - > setFont ( mForumNameFont ) ;
2010-01-04 09:29:49 -05:00
loadForumEmoticons ( ) ;
2010-01-04 20:49:58 -05:00
QMenu * forummenu = new QMenu ( ) ;
forummenu - > addAction ( ui . actionCreate_Forum ) ;
forummenu - > addSeparator ( ) ;
ui . forumpushButton - > setMenu ( forummenu ) ;
2008-08-12 08:24:47 -04:00
2010-01-14 08:54:16 -05:00
ui . postText - > setOpenExternalLinks ( false ) ;
ui . postText - > setOpenLinks ( false ) ;
2008-04-09 08:57:26 -04:00
/* Hide platform specific features */
# ifdef Q_WS_WIN
# endif
}
void ForumsDialog : : forumListCustomPopupMenu ( QPoint point )
{
QMenu contextMnu ( this ) ;
QMouseEvent * mevent = new QMouseEvent ( QEvent : : MouseButtonPress , point , Qt : : RightButton , Qt : : RightButton , Qt : : NoModifier ) ;
2010-01-02 17:50:56 -05:00
2008-08-12 17:07:41 -04:00
QAction * subForumAct = new QAction ( QIcon ( IMAGE_SUBSCRIBE ) , tr ( " Subscribe to Forum " ) , this ) ;
2008-06-13 11:46:34 -04:00
connect ( subForumAct , SIGNAL ( triggered ( ) ) , this , SLOT ( subscribeToForum ( ) ) ) ;
2008-04-09 08:57:26 -04:00
2008-08-12 17:07:41 -04:00
QAction * unsubForumAct = new QAction ( QIcon ( IMAGE_UNSUBSCRIBE ) , tr ( " Unsubscribe to Forum " ) , this ) ;
2008-06-13 11:46:34 -04:00
connect ( unsubForumAct , SIGNAL ( triggered ( ) ) , this , SLOT ( unsubscribeToForum ( ) ) ) ;
2008-04-09 08:57:26 -04:00
2008-08-12 17:07:41 -04:00
QAction * newForumAct = new QAction ( QIcon ( IMAGE_NEWFORUM ) , tr ( " New Forum " ) , this ) ;
2008-06-13 11:46:34 -04:00
connect ( newForumAct , SIGNAL ( triggered ( ) ) , this , SLOT ( newforum ( ) ) ) ;
2008-04-09 08:57:26 -04:00
2008-08-12 17:07:41 -04:00
QAction * detailsForumAct = new QAction ( QIcon ( IMAGE_INFO ) , tr ( " Show Forum Details " ) , this ) ;
2008-06-13 11:46:34 -04:00
connect ( detailsForumAct , SIGNAL ( triggered ( ) ) , this , SLOT ( showForumDetails ( ) ) ) ;
2008-04-09 08:57:26 -04:00
contextMnu . clear ( ) ;
contextMnu . addAction ( subForumAct ) ;
contextMnu . addAction ( unsubForumAct ) ;
2008-08-12 17:07:41 -04:00
contextMnu . addSeparator ( ) ;
2008-04-09 08:57:26 -04:00
contextMnu . addAction ( newForumAct ) ;
2008-06-13 11:46:34 -04:00
contextMnu . addAction ( detailsForumAct ) ;
2008-04-09 08:57:26 -04:00
contextMnu . exec ( mevent - > globalPos ( ) ) ;
2010-01-02 17:50:56 -05:00
2008-04-09 08:57:26 -04:00
}
void ForumsDialog : : threadListCustomPopupMenu ( QPoint point )
{
QMenu contextMnu ( this ) ;
QMouseEvent * mevent = new QMouseEvent ( QEvent : : MouseButtonPress , point , Qt : : RightButton , Qt : : RightButton , Qt : : NoModifier ) ;
2008-08-12 14:41:08 -04:00
QAction * replyAct = new QAction ( QIcon ( IMAGE_MESSAGEREPLY ) , tr ( " Reply " ) , this ) ;
2008-04-15 12:40:38 -04:00
connect ( replyAct , SIGNAL ( triggered ( ) ) , this , SLOT ( createmessage ( ) ) ) ;
2008-04-09 08:57:26 -04:00
2008-11-15 18:47:17 -05:00
QAction * viewAct = new QAction ( QIcon ( IMAGE_DOWNLOADALL ) , tr ( " Start New Thread " ) , this ) ;
2008-04-15 12:40:38 -04:00
connect ( viewAct , SIGNAL ( triggered ( ) ) , this , SLOT ( showthread ( ) ) ) ;
2010-01-09 11:33:00 -05:00
QAction * replyauthorAct = new QAction ( QIcon ( IMAGE_MESSAGEREPLY ) , tr ( " Reply to Author " ) , this ) ;
connect ( replyauthorAct , SIGNAL ( triggered ( ) ) , this , SLOT ( replytomessage ( ) ) ) ;
2010-01-18 18:59:49 -05:00
QAction * expandAll = new QAction ( tr ( " Expand all " ) , this ) ;
connect ( expandAll , SIGNAL ( triggered ( ) ) , ui . threadTreeWidget , SLOT ( expandAll ( ) ) ) ;
QAction * collapseAll = new QAction ( tr ( " Collapse all " ) , this ) ;
connect ( collapseAll , SIGNAL ( triggered ( ) ) , ui . threadTreeWidget , SLOT ( collapseAll ( ) ) ) ;
2008-04-09 08:57:26 -04:00
contextMnu . clear ( ) ;
contextMnu . addAction ( replyAct ) ;
contextMnu . addAction ( viewAct ) ;
2010-01-09 11:33:00 -05:00
contextMnu . addAction ( replyauthorAct ) ;
2010-01-18 18:59:49 -05:00
contextMnu . addSeparator ( ) ;
contextMnu . addAction ( expandAll ) ;
contextMnu . addAction ( collapseAll ) ;
2008-04-09 08:57:26 -04:00
contextMnu . exec ( mevent - > globalPos ( ) ) ;
}
void ForumsDialog : : newmessage ( )
{
#if 0
ChanMsgDialog * nMsgDialog = new ChanMsgDialog ( true ) ;
/* fill it in */
//std::cerr << "ForumsDialog::newmessage()" << std::endl;
nMsgDialog - > newMsg ( ) ;
nMsgDialog - > show ( ) ;
nMsgDialog - > activateWindow ( ) ;
# endif
/* window will destroy itself! */
}
void ForumsDialog : : togglefileview ( )
{
/* if msg header visible -> hide by changing splitter
* three widgets . . .
*/
QList < int > sizeList = ui . msgSplitter - > sizes ( ) ;
QList < int > : : iterator it ;
int listSize = 0 ;
int msgSize = 0 ;
int i = 0 ;
for ( it = sizeList . begin ( ) ; it ! = sizeList . end ( ) ; it + + , i + + )
{
if ( i = = 0 )
{
listSize = ( * it ) ;
}
else if ( i = = 1 )
{
msgSize = ( * it ) ;
}
}
2008-04-15 12:40:38 -04:00
int totalSize = listSize + msgSize ;
2008-04-09 08:57:26 -04:00
bool toShrink = true ;
2008-04-15 12:40:38 -04:00
if ( msgSize < ( int ) totalSize / 10 )
2008-04-09 08:57:26 -04:00
{
toShrink = false ;
}
QList < int > newSizeList ;
if ( toShrink )
{
2008-04-15 12:40:38 -04:00
newSizeList . push_back ( totalSize ) ;
2008-04-09 08:57:26 -04:00
newSizeList . push_back ( 0 ) ;
2008-08-12 14:41:08 -04:00
ui . expandButton - > setIcon ( QIcon ( QString ( " :/images/edit_add24.png " ) ) ) ;
2008-11-26 19:01:46 -05:00
ui . expandButton - > setToolTip ( " Expand " ) ;
2008-04-09 08:57:26 -04:00
}
else
{
/* no change */
2008-04-15 12:40:38 -04:00
int nlistSize = ( totalSize / 2 ) ;
int nMsgSize = ( totalSize / 2 ) ;
2008-04-09 08:57:26 -04:00
newSizeList . push_back ( nlistSize ) ;
newSizeList . push_back ( nMsgSize ) ;
2008-11-26 19:01:46 -05:00
ui . expandButton - > setIcon ( QIcon ( QString ( " :/images/edit_remove24.png " ) ) ) ;
ui . expandButton - > setToolTip ( " Hide " ) ;
2008-04-09 08:57:26 -04:00
}
ui . msgSplitter - > setSizes ( newSizeList ) ;
2008-04-15 12:40:38 -04:00
}
void ForumsDialog : : checkUpdate ( )
{
std : : list < std : : string > forumIds ;
std : : list < std : : string > : : iterator it ;
if ( ! rsForums )
return ;
if ( rsForums - > forumsChanged ( forumIds ) )
{
/* update Forums List */
insertForums ( ) ;
it = std : : find ( forumIds . begin ( ) , forumIds . end ( ) , mCurrForumId ) ;
if ( it ! = forumIds . end ( ) )
{
/* update threads as well */
insertThreads ( ) ;
}
}
2008-04-09 08:57:26 -04:00
}
void ForumsDialog : : changeBox ( int newrow )
{
#if 0
//std::cerr << "ForumsDialog::changeBox()" << std::endl;
insertMessages ( ) ;
insertMsgTxtAndFiles ( ) ;
# endif
}
void ForumsDialog : : insertForums ( )
{
std : : list < ForumInfo > forumList ;
std : : list < ForumInfo > : : iterator it ;
if ( ! rsForums )
{
return ;
}
rsForums - > getForumList ( forumList ) ;
2008-04-15 12:40:38 -04:00
mCurrForumId = " " ;
mCurrPostId = " " ;
2008-04-09 08:57:26 -04:00
QList < QTreeWidgetItem * > AdminList ;
QList < QTreeWidgetItem * > SubList ;
QList < QTreeWidgetItem * > PopList ;
QList < QTreeWidgetItem * > OtherList ;
std : : multimap < uint32_t , std : : string > popMap ;
for ( it = forumList . begin ( ) ; it ! = forumList . end ( ) ; it + + )
{
/* sort it into Publish (Own), Subscribed, Popular and Other */
2008-12-05 19:30:56 -05:00
uint32_t flags = it - > subscribeFlags ;
2008-04-09 08:57:26 -04:00
2008-06-13 11:46:34 -04:00
if ( flags & RS_DISTRIB_ADMIN )
2008-04-09 08:57:26 -04:00
{
/* own */
/* Name,
* Type ,
* Rank ,
* LastPost
* ForumId ,
*/
QTreeWidgetItem * item = new QTreeWidgetItem ( ( QTreeWidget * ) 0 ) ;
2008-12-05 19:30:56 -05:00
QString name = QString : : fromStdWString ( it - > forumName ) ;
if ( it - > forumFlags & RS_DISTRIB_AUTHEN_REQ )
{
name + = " (AUTHD) " ;
2010-01-01 13:58:39 -05:00
item - > setIcon ( 0 , ( QIcon ( IMAGE_FORUMAUTHD ) ) ) ;
2008-12-05 19:30:56 -05:00
}
2010-01-01 13:58:39 -05:00
else
{
item - > setIcon ( 0 , ( QIcon ( IMAGE_FORUM ) ) ) ;
}
2008-12-05 19:30:56 -05:00
item - > setText ( 0 , name ) ;
2008-04-09 08:57:26 -04:00
/* (1) Popularity */
{
std : : ostringstream out ;
out < < it - > pop ;
2010-01-02 12:31:43 -05:00
item - > setToolTip ( 0 , tr ( " Popularity: " ) + QString : : fromStdString ( out . str ( ) ) ) ;
2008-04-09 08:57:26 -04:00
}
// Date
{
QDateTime qtime ;
qtime . setTime_t ( it - > lastPost ) ;
QString timestamp = qtime . toString ( " yyyy-MM-dd hh:mm:ss " ) ;
2010-01-02 17:50:56 -05:00
item - > setText ( 1 , timestamp ) ;
2008-04-09 08:57:26 -04:00
}
// Id.
item - > setText ( 4 , QString : : fromStdString ( it - > forumId ) ) ;
AdminList . append ( item ) ;
}
2008-06-13 11:46:34 -04:00
else if ( flags & RS_DISTRIB_SUBSCRIBED )
2008-04-09 08:57:26 -04:00
{
/* subscribed forum */
/* Name,
* Type ,
* Rank ,
* LastPost
* ForumId ,
*/
QTreeWidgetItem * item = new QTreeWidgetItem ( ( QTreeWidget * ) 0 ) ;
2008-12-05 19:30:56 -05:00
QString name = QString : : fromStdWString ( it - > forumName ) ;
if ( it - > forumFlags & RS_DISTRIB_AUTHEN_REQ )
{
name + = " (AUTHD) " ;
2010-01-01 13:58:39 -05:00
item - > setIcon ( 0 , ( QIcon ( IMAGE_FORUMAUTHD ) ) ) ;
}
else
{
item - > setIcon ( 0 , ( QIcon ( IMAGE_FORUM ) ) ) ;
2008-12-05 19:30:56 -05:00
}
2010-01-01 13:58:39 -05:00
2008-12-05 19:30:56 -05:00
item - > setText ( 0 , name ) ;
2008-04-09 08:57:26 -04:00
/* (1) Popularity */
{
std : : ostringstream out ;
out < < it - > pop ;
2010-01-02 07:24:59 -05:00
item - > setToolTip ( 0 , tr ( " Popularity: " ) + QString : : fromStdString ( out . str ( ) ) ) ;
2008-04-09 08:57:26 -04:00
}
// Date
{
QDateTime qtime ;
qtime . setTime_t ( it - > lastPost ) ;
QString timestamp = qtime . toString ( " yyyy-MM-dd hh:mm:ss " ) ;
item - > setText ( 3 , timestamp ) ;
}
// Id.
item - > setText ( 4 , QString : : fromStdString ( it - > forumId ) ) ;
SubList . append ( item ) ;
}
else
{
/* rate the others by popularity */
popMap . insert ( std : : make_pair ( it - > pop , it - > forumId ) ) ;
}
}
/* iterate backwards through popMap - take the top 5 or 10% of list */
uint32_t popCount = 5 ;
if ( popCount < popMap . size ( ) / 10 )
{
popCount = popMap . size ( ) / 10 ;
}
uint32_t i = 0 ;
uint32_t popLimit = 0 ;
std : : multimap < uint32_t , std : : string > : : reverse_iterator rit ;
for ( rit = popMap . rbegin ( ) ; ( ( rit ! = popMap . rend ( ) ) & & ( i < popCount ) ) ; rit + + , i + + ) ;
if ( rit ! = popMap . rend ( ) )
{
popLimit = rit - > first ;
}
for ( it = forumList . begin ( ) ; it ! = forumList . end ( ) ; it + + )
{
/* ignore the ones we've done already */
2008-12-05 19:30:56 -05:00
uint32_t flags = it - > subscribeFlags ;
2008-04-09 08:57:26 -04:00
2008-06-13 11:46:34 -04:00
if ( flags & RS_DISTRIB_ADMIN )
2008-04-09 08:57:26 -04:00
{
continue ;
}
2008-06-13 11:46:34 -04:00
else if ( flags & RS_DISTRIB_SUBSCRIBED )
2008-04-09 08:57:26 -04:00
{
continue ;
}
else
{
2010-01-02 12:31:43 -05:00
/* popular forum */
2008-04-09 08:57:26 -04:00
/* Name,
* Type ,
* Rank ,
* LastPost
* ForumId ,
*/
QTreeWidgetItem * item = new QTreeWidgetItem ( ( QTreeWidget * ) 0 ) ;
2008-12-05 19:30:56 -05:00
QString name = QString : : fromStdWString ( it - > forumName ) ;
if ( it - > forumFlags & RS_DISTRIB_AUTHEN_REQ )
{
name + = " (AUTHD) " ;
2010-01-01 13:58:39 -05:00
item - > setIcon ( 0 , ( QIcon ( IMAGE_FORUMAUTHD ) ) ) ;
}
else
{
item - > setIcon ( 0 , ( QIcon ( IMAGE_FORUM ) ) ) ;
2008-12-05 19:30:56 -05:00
}
2010-01-01 13:58:39 -05:00
2008-12-05 19:30:56 -05:00
item - > setText ( 0 , name ) ;
2010-01-01 13:58:39 -05:00
2008-12-05 19:30:56 -05:00
2008-04-09 08:57:26 -04:00
/* (1) Popularity */
{
std : : ostringstream out ;
out < < it - > pop ;
2010-01-02 08:36:40 -05:00
item - > setToolTip ( 0 , tr ( " Popularity: " ) + QString : : fromStdString ( out . str ( ) ) ) ;
2008-04-09 08:57:26 -04:00
}
// Date
{
QDateTime qtime ;
qtime . setTime_t ( it - > lastPost ) ;
QString timestamp = qtime . toString ( " yyyy-MM-dd hh:mm:ss " ) ;
item - > setText ( 3 , timestamp ) ;
}
// Id.
item - > setText ( 4 , QString : : fromStdString ( it - > forumId ) ) ;
if ( it - > pop < popLimit )
{
OtherList . append ( item ) ;
}
else
{
PopList . append ( item ) ;
}
}
}
2009-09-15 20:01:09 -04:00
itemFont = QFont ( " ARIAL " , 10 ) ;
itemFont . setBold ( true ) ;
2008-04-09 08:57:26 -04:00
/* now we can add them in as a tree! */
QList < QTreeWidgetItem * > TopList ;
QTreeWidgetItem * item = new QTreeWidgetItem ( ( QTreeWidget * ) 0 ) ;
item - > setText ( 0 , tr ( " Your Forums " ) ) ;
2009-09-15 20:01:09 -04:00
item - > setFont ( 0 , itemFont ) ;
2008-08-12 08:03:23 -04:00
item - > setIcon ( 0 , ( QIcon ( IMAGE_FOLDER ) ) ) ;
2008-04-09 08:57:26 -04:00
item - > addChildren ( AdminList ) ;
TopList . append ( item ) ;
item = new QTreeWidgetItem ( ( QTreeWidget * ) 0 ) ;
item - > setText ( 0 , tr ( " Subscribed Forums " ) ) ;
2009-09-15 20:01:09 -04:00
item - > setFont ( 0 , itemFont ) ;
2008-08-16 21:09:32 -04:00
item - > setIcon ( 0 , ( QIcon ( IMAGE_FOLDERRED ) ) ) ;
2008-04-09 08:57:26 -04:00
item - > addChildren ( SubList ) ;
TopList . append ( item ) ;
item = new QTreeWidgetItem ( ( QTreeWidget * ) 0 ) ;
item - > setText ( 0 , tr ( " Popular Forums " ) ) ;
2009-09-15 20:01:09 -04:00
item - > setFont ( 0 , itemFont ) ;
2008-08-16 21:09:32 -04:00
item - > setIcon ( 0 , ( QIcon ( IMAGE_FOLDERGREEN ) ) ) ;
2008-04-09 08:57:26 -04:00
item - > addChildren ( PopList ) ;
TopList . append ( item ) ;
item = new QTreeWidgetItem ( ( QTreeWidget * ) 0 ) ;
item - > setText ( 0 , tr ( " Other Forums " ) ) ;
2009-09-15 20:01:09 -04:00
item - > setFont ( 0 , itemFont ) ;
2008-08-16 21:09:32 -04:00
item - > setIcon ( 0 , ( QIcon ( IMAGE_FOLDERYELLOW ) ) ) ;
2008-04-09 08:57:26 -04:00
item - > addChildren ( OtherList ) ;
TopList . append ( item ) ;
/* add the items in! */
ui . forumTreeWidget - > clear ( ) ;
ui . forumTreeWidget - > insertTopLevelItems ( 0 , TopList ) ;
return ;
}
2008-04-15 12:40:38 -04:00
void ForumsDialog : : changedForum ( QTreeWidgetItem * curr , QTreeWidgetItem * prev )
2008-04-09 08:57:26 -04:00
{
2008-04-15 12:40:38 -04:00
insertThreads ( ) ;
}
2008-04-09 08:57:26 -04:00
2008-04-15 12:40:38 -04:00
void ForumsDialog : : changedThread ( QTreeWidgetItem * curr , QTreeWidgetItem * prev )
{
/* just grab the ids of the current item */
if ( ( ! curr ) | | ( ! curr - > isSelected ( ) ) )
{
mCurrPostId = " " ;
}
else
{
mCurrPostId = ( curr - > text ( 5 ) ) . toStdString ( ) ;
insertPost ( ) ;
}
}
2008-04-09 08:57:26 -04:00
2008-04-15 12:40:38 -04:00
void ForumsDialog : : changedThread2 ( )
{
QTreeWidgetItem * curr = ui . threadTreeWidget - > currentItem ( ) ;
2008-04-09 08:57:26 -04:00
2008-04-15 12:40:38 -04:00
/* just grab the ids of the current item */
if ( ( ! curr ) | | ( ! curr - > isSelected ( ) ) )
{
mCurrPostId = " " ;
}
else
{
mCurrPostId = ( curr - > text ( 5 ) ) . toStdString ( ) ;
insertPost ( ) ;
}
}
2008-04-09 08:57:26 -04:00
2008-04-15 12:40:38 -04:00
void ForumsDialog : : insertThreads ( )
{
/* get the current Forum */
std : : cerr < < " ForumsDialog::insertThreads() " < < std : : endl ;
2008-04-09 08:57:26 -04:00
2008-04-15 12:40:38 -04:00
QTreeWidgetItem * forumItem = ui . forumTreeWidget - > currentItem ( ) ;
if ( ( ! forumItem ) | | ( forumItem - > parent ( ) = = NULL ) )
{
/* not an actual forum - clear */
ui . threadTreeWidget - > clear ( ) ;
2010-01-02 20:27:29 -05:00
/* when no Thread selected - clear */
ui . forumName - > clear ( ) ;
ui . threadTitle - > clear ( ) ;
ui . postText - > clear ( ) ;
/* clear last stored forumID */
mCurrForumId = " " ;
2008-04-15 12:40:38 -04:00
std : : cerr < < " ForumsDialog::insertThreads() Current Thread Invalid " < < std : : endl ;
2008-04-09 08:57:26 -04:00
2008-04-15 12:40:38 -04:00
return ;
}
2008-04-09 08:57:26 -04:00
2008-04-15 12:40:38 -04:00
/* store forumId */
mCurrForumId = ( forumItem - > text ( 4 ) ) . toStdString ( ) ;
ui . forumName - > setText ( forumItem - > text ( 0 ) ) ;
mCurrPostId = " " ;
std : : string fId = mCurrForumId ;
2008-04-09 08:57:26 -04:00
2009-09-09 17:17:03 -04:00
# define VIEW_LAST_POST 0
# define VIEW_THREADED 1
# define VIEW_FLAT 2
2008-04-15 12:40:38 -04:00
bool flatView = false ;
2009-09-09 17:17:03 -04:00
bool useChildTS = false ;
switch ( ui . viewBox - > currentIndex ( ) )
2008-04-09 08:57:26 -04:00
{
2009-09-09 17:17:03 -04:00
case VIEW_LAST_POST :
useChildTS = true ;
break ;
case VIEW_FLAT :
flatView = true ;
break ;
default :
case VIEW_THREADED :
break ;
2008-04-09 08:57:26 -04:00
}
2008-04-15 12:40:38 -04:00
std : : list < ThreadInfoSummary > threads ;
std : : list < ThreadInfoSummary > : : iterator tit ;
rsForums - > getForumThreadList ( mCurrForumId , threads ) ;
2008-04-09 08:57:26 -04:00
QList < QTreeWidgetItem * > items ;
2008-04-15 12:40:38 -04:00
for ( tit = threads . begin ( ) ; tit ! = threads . end ( ) ; tit + + )
2008-04-09 08:57:26 -04:00
{
2008-04-15 12:40:38 -04:00
std : : cerr < < " ForumsDialog::insertThreads() Adding TopLevel Thread: mId: " ;
std : : cerr < < tit - > msgId < < std : : endl ;
2008-04-09 08:57:26 -04:00
2008-04-15 12:40:38 -04:00
/* add the top threads */
ForumMsgInfo msg ;
if ( ! rsForums - > getForumMessage ( fId , tit - > threadId , msg ) )
2008-04-09 08:57:26 -04:00
{
2008-04-15 12:40:38 -04:00
std : : cerr < < " ForumsDialog::insertThreads() Failed to Get TopLevel Msg " ;
std : : cerr < < std : : endl ;
2008-04-09 08:57:26 -04:00
continue ;
}
2008-04-15 12:40:38 -04:00
/* add Msg */
/* setup
*
2008-04-09 08:57:26 -04:00
*/
2008-04-15 12:40:38 -04:00
QTreeWidgetItem * item = new QTreeWidgetItem ( ) ;
2008-04-09 08:57:26 -04:00
{
QDateTime qtime ;
2009-09-09 17:17:03 -04:00
if ( useChildTS )
qtime . setTime_t ( tit - > childTS ) ;
else
qtime . setTime_t ( tit - > ts ) ;
2008-04-09 08:57:26 -04:00
QString timestamp = qtime . toString ( " yyyy-MM-dd hh:mm:ss " ) ;
2009-09-09 17:17:03 -04:00
QString txt = timestamp ;
if ( useChildTS )
{
QDateTime qtime2 ;
qtime2 . setTime_t ( tit - > ts ) ;
QString timestamp2 = qtime2 . toString ( " yyyy-MM-dd hh:mm:ss " ) ;
txt + = " / " ;
txt + = timestamp2 ;
}
item - > setText ( 0 , txt ) ;
2008-04-09 08:57:26 -04:00
}
2008-12-03 14:39:20 -05:00
ForumMsgInfo msginfo ;
rsForums - > getForumMessage ( fId , tit - > msgId , msginfo ) ;
2008-04-15 12:40:38 -04:00
item - > setText ( 1 , QString : : fromStdWString ( tit - > title ) ) ;
2010-01-01 12:14:37 -05:00
if ( rsPeers - > getPeerName ( msginfo . srcId ) ! = " " )
{
2008-12-05 19:30:56 -05:00
item - > setText ( 2 , QString : : fromStdString ( rsPeers - > getPeerName ( msginfo . srcId ) ) ) ;
2010-01-01 12:14:37 -05:00
}
else
{
item - > setText ( 2 , tr ( " Anonymous " ) ) ;
}
2010-01-04 11:03:26 -05:00
if ( msginfo . msgflags & RS_DISTRIB_AUTHEN_REQ )
{
item - > setText ( 3 , tr ( " signed " ) ) ;
}
else
{
item - > setText ( 3 , tr ( " none " ) ) ;
}
2008-04-15 12:40:38 -04:00
item - > setText ( 4 , QString : : fromStdString ( tit - > parentId ) ) ;
item - > setText ( 5 , QString : : fromStdString ( tit - > msgId ) ) ;
2008-04-09 08:57:26 -04:00
2008-04-15 12:40:38 -04:00
std : : list < QTreeWidgetItem * > threadlist ;
threadlist . push_back ( item ) ;
2008-04-09 08:57:26 -04:00
2008-04-15 12:40:38 -04:00
while ( threadlist . size ( ) > 0 )
2008-04-09 08:57:26 -04:00
{
2008-04-15 12:40:38 -04:00
/* get children */
QTreeWidgetItem * parent = threadlist . front ( ) ;
threadlist . pop_front ( ) ;
std : : string pId = ( parent - > text ( 5 ) ) . toStdString ( ) ;
2008-04-09 08:57:26 -04:00
2008-04-15 12:40:38 -04:00
std : : list < ThreadInfoSummary > msgs ;
std : : list < ThreadInfoSummary > : : iterator mit ;
2008-04-09 08:57:26 -04:00
2008-04-15 12:40:38 -04:00
std : : cerr < < " ForumsDialog::insertThreads() Getting Children of : " < < pId ;
std : : cerr < < std : : endl ;
2008-04-09 08:57:26 -04:00
2008-04-15 12:40:38 -04:00
if ( rsForums - > getForumThreadMsgList ( fId , pId , msgs ) )
{
std : : cerr < < " ForumsDialog::insertThreads() #Children " < < msgs . size ( ) ;
std : : cerr < < std : : endl ;
/* iterate through child */
for ( mit = msgs . begin ( ) ; mit ! = msgs . end ( ) ; mit + + )
{
std : : cerr < < " ForumsDialog::insertThreads() adding " < < mit - > msgId ;
std : : cerr < < std : : endl ;
QTreeWidgetItem * child = NULL ;
if ( flatView )
{
2008-06-06 12:38:59 -04:00
child = new QTreeWidgetItem ( ) ;
2009-09-13 09:25:24 -04:00
ui . threadTreeWidget - > setRootIsDecorated ( false ) ;
2008-04-15 12:40:38 -04:00
}
else
{
child = new QTreeWidgetItem ( parent ) ;
2009-09-13 09:25:24 -04:00
ui . threadTreeWidget - > setRootIsDecorated ( true ) ;
2008-04-15 12:40:38 -04:00
}
{
QDateTime qtime ;
2009-09-09 17:17:03 -04:00
if ( useChildTS )
qtime . setTime_t ( mit - > childTS ) ;
else
qtime . setTime_t ( mit - > ts ) ;
2008-04-15 12:40:38 -04:00
QString timestamp = qtime . toString ( " yyyy-MM-dd hh:mm:ss " ) ;
2009-09-09 17:17:03 -04:00
QString txt = timestamp ;
if ( useChildTS )
{
QDateTime qtime2 ;
qtime2 . setTime_t ( mit - > ts ) ;
QString timestamp2 = qtime2 . toString ( " yyyy-MM-dd hh:mm:ss " ) ;
txt + = " / " ;
txt + = timestamp2 ;
}
child - > setText ( 0 , txt ) ;
2008-04-15 12:40:38 -04:00
}
2008-12-03 14:39:20 -05:00
ForumMsgInfo msginfo ;
rsForums - > getForumMessage ( fId , mit - > msgId , msginfo ) ;
2010-01-04 11:03:26 -05:00
child - > setText ( 1 , QString : : fromStdWString ( mit - > title ) ) ;
if ( rsPeers - > getPeerName ( msginfo . srcId ) ! = " " )
{
child - > setText ( 2 , QString : : fromStdString ( rsPeers - > getPeerName ( msginfo . srcId ) ) ) ;
}
else
{
child - > setText ( 2 , tr ( " Anonymous " ) ) ;
}
if ( msginfo . msgflags & RS_DISTRIB_AUTHEN_REQ )
{
child - > setText ( 3 , tr ( " signed " ) ) ;
}
else
{
child - > setText ( 3 , tr ( " none " ) ) ;
}
2008-04-15 12:40:38 -04:00
child - > setText ( 4 , QString : : fromStdString ( mit - > parentId ) ) ;
child - > setText ( 5 , QString : : fromStdString ( mit - > msgId ) ) ;
/* setup child */
threadlist . push_back ( child ) ;
if ( flatView )
{
items . append ( child ) ;
}
}
2008-04-09 08:57:26 -04:00
}
}
2008-04-15 12:40:38 -04:00
/* add to list */
2008-04-09 08:57:26 -04:00
items . append ( item ) ;
}
2008-04-15 12:40:38 -04:00
/* add all messages in! */
ui . threadTreeWidget - > clear ( ) ;
2010-01-02 20:27:29 -05:00
ui . postText - > clear ( ) ;
ui . threadTitle - > clear ( ) ;
2008-04-15 12:40:38 -04:00
ui . threadTreeWidget - > insertTopLevelItems ( 0 , items ) ;
2008-04-09 08:57:26 -04:00
}
2008-04-15 12:40:38 -04:00
2008-04-09 08:57:26 -04:00
void ForumsDialog : : updateMessages ( QTreeWidgetItem * item , int column )
{
#if 0
//std::cerr << "ForumsDialog::insertMsgTxtAndFiles()" << std::endl;
insertMsgTxtAndFiles ( ) ;
# endif
}
void ForumsDialog : : insertPost ( )
{
2008-04-15 12:40:38 -04:00
if ( ( mCurrForumId = = " " ) | | ( mCurrPostId = = " " ) )
2008-04-09 08:57:26 -04:00
{
2008-04-15 12:40:38 -04:00
/*
*/
2008-04-09 08:57:26 -04:00
2008-04-15 12:40:38 -04:00
ui . postText - > setText ( " " ) ;
2010-01-02 17:50:56 -05:00
ui . threadTitle - > setText ( " " ) ;
2008-04-09 08:57:26 -04:00
return ;
}
2008-04-15 12:40:38 -04:00
/* get the Post */
ForumMsgInfo msg ;
if ( ! rsForums - > getForumMessage ( mCurrForumId , mCurrPostId , msg ) )
2008-04-09 08:57:26 -04:00
{
2008-04-15 12:40:38 -04:00
ui . postText - > setText ( " " ) ;
2008-04-09 08:57:26 -04:00
return ;
}
2010-01-02 17:50:56 -05:00
/* get the Thread */
ForumMsgInfo title ;
if ( ! rsForums - > getForumMessage ( mCurrForumId , mCurrPostId , title ) )
{
ui . threadTitle - > setText ( " " ) ;
return ;
}
2010-01-04 09:29:49 -05:00
QString extraTxt ;
extraTxt + = QString : : fromStdWString ( msg . msg ) ;
QHashIterator < QString , QString > i ( smileys ) ;
while ( i . hasNext ( ) )
{
i . next ( ) ;
foreach ( QString code , i . key ( ) . split ( " | " ) )
extraTxt . replace ( code , " <img src= \" " + i . value ( ) + " \" /> " ) ;
}
2008-04-09 08:57:26 -04:00
2010-01-04 09:29:49 -05:00
ui . postText - > setHtml ( extraTxt ) ;
2010-01-02 17:50:56 -05:00
ui . threadTitle - > setText ( QString : : fromStdWString ( title . title ) ) ;
2008-04-09 08:57:26 -04:00
}
bool ForumsDialog : : getCurrentMsg ( std : : string & cid , std : : string & mid )
{
return false ;
}
void ForumsDialog : : removemessage ( )
{
#if 0
//std::cerr << "ForumsDialog::removemessage()" << std::endl;
std : : string cid , mid ;
if ( ! getCurrentMsg ( cid , mid ) )
{
//std::cerr << "ForumsDialog::removemessage()";
//std::cerr << " No Message selected" << std::endl;
return ;
}
rsMsgs - > MessageDelete ( mid ) ;
# endif
return ;
}
void ForumsDialog : : markMsgAsRead ( )
{
#if 0
//std::cerr << "ForumsDialog::markMsgAsRead()" << std::endl;
std : : string cid , mid ;
if ( ! getCurrentMsg ( cid , mid ) )
{
//std::cerr << "ForumsDialog::markMsgAsRead()";
//std::cerr << " No Message selected" << std::endl;
return ;
}
rsMsgs - > MessageRead ( mid ) ;
# endif
return ;
}
void ForumsDialog : : newforum ( )
{
2009-08-13 09:35:18 -04:00
static CreateForum * cf = new CreateForum ( this ) ;
2008-04-15 12:40:38 -04:00
cf - > show ( ) ;
2008-04-09 08:57:26 -04:00
}
2008-04-15 12:40:38 -04:00
void ForumsDialog : : createmessage ( )
{
if ( mCurrForumId = = " " )
{
return ;
}
CreateForumMsg * cfm = new CreateForumMsg ( mCurrForumId , mCurrPostId ) ;
cfm - > show ( ) ;
}
void ForumsDialog : : showthread ( )
{
if ( mCurrForumId = = " " )
{
2010-01-01 10:37:45 -05:00
QMessageBox : : information ( this , tr ( " RetroShare " ) , tr ( " No Forum Selected! " ) ) ;
2008-04-15 12:40:38 -04:00
return ;
}
CreateForumMsg * cfm = new CreateForumMsg ( mCurrForumId , " " ) ;
2010-01-01 10:37:45 -05:00
cfm - > setWindowTitle ( tr ( " Start New Thread " ) ) ;
2008-04-15 12:40:38 -04:00
cfm - > show ( ) ;
}
2008-06-13 11:46:34 -04:00
void ForumsDialog : : subscribeToForum ( )
{
forumSubscribe ( true ) ;
}
void ForumsDialog : : unsubscribeToForum ( )
{
forumSubscribe ( false ) ;
}
void ForumsDialog : : forumSubscribe ( bool subscribe )
{
QTreeWidgetItem * forumItem = ui . forumTreeWidget - > currentItem ( ) ;
if ( ( ! forumItem ) | | ( forumItem - > parent ( ) = = NULL ) )
{
return ;
}
/* store forumId */
std : : string fId = ( forumItem - > text ( 4 ) ) . toStdString ( ) ;
rsForums - > forumSubscribe ( fId , subscribe ) ;
}
void ForumsDialog : : showForumDetails ( )
{
2010-01-02 10:47:07 -05:00
static ForumDetails * fui = new ForumDetails ( ) ;
2008-06-13 11:46:34 -04:00
if ( mCurrForumId = = " " )
{
return ;
}
fui - > showDetails ( mCurrForumId ) ;
fui - > show ( ) ;
2010-01-02 10:47:07 -05:00
2008-06-13 11:46:34 -04:00
}
2010-01-04 09:29:49 -05:00
void ForumsDialog : : loadForumEmoticons ( )
{
QString sm_codes ;
# if defined(Q_OS_WIN32)
QFile sm_file ( QApplication : : applicationDirPath ( ) + " /emoticons/emotes.acs " ) ;
# else
QFile sm_file ( QString ( " :/smileys/emotes.acs " ) ) ;
# endif
if ( ! sm_file . open ( QIODevice : : ReadOnly ) )
{
std : : cerr < < " Could not open resouce file :/emoticons/emotes.acs " < < std : : endl ;
return ;
}
sm_codes = sm_file . readAll ( ) ;
sm_file . close ( ) ;
sm_codes . remove ( " \n " ) ;
sm_codes . remove ( " \r " ) ;
int i = 0 ;
QString smcode ;
QString smfile ;
while ( sm_codes [ i ] ! = ' { ' )
{
i + + ;
}
while ( i < sm_codes . length ( ) - 2 )
{
smcode = " " ;
smfile = " " ;
while ( sm_codes [ i ] ! = ' \" ' )
{
i + + ;
}
i + + ;
while ( sm_codes [ i ] ! = ' \" ' )
{
smcode + = sm_codes [ i ] ;
i + + ;
}
i + + ;
while ( sm_codes [ i ] ! = ' \" ' )
{
i + + ;
}
i + + ;
while ( sm_codes [ i ] ! = ' \" ' & & sm_codes [ i + 1 ] ! = ' ; ' )
{
smfile + = sm_codes [ i ] ;
i + + ;
}
i + + ;
if ( ! smcode . isEmpty ( ) & & ! smfile . isEmpty ( ) )
# if defined(Q_OS_WIN32)
smileys . insert ( smcode , smfile ) ;
# else
smileys . insert ( smcode , " :/ " + smfile ) ;
# endif
}
}
2010-01-09 11:33:00 -05:00
void ForumsDialog : : replytomessage ( )
{
if ( mCurrForumId = = " " )
{
return ;
}
fId = mCurrForumId ;
2010-01-18 18:59:49 -05:00
pId = mCurrPostId ;
2010-01-09 11:33:00 -05:00
ForumMsgInfo msgInfo ;
rsForums - > getForumMessage ( fId , pId , msgInfo ) ;
if ( rsPeers - > getPeerName ( msgInfo . srcId ) ! = " " )
{
ChanMsgDialog * nMsgDialog = new ChanMsgDialog ( true ) ;
nMsgDialog - > newMsg ( ) ;
nMsgDialog - > insertTitleText ( ( QString ( " Re: " ) + QString : : fromStdWString ( msgInfo . title ) ) . toStdString ( ) ) ;
nMsgDialog - > setWindowTitle ( tr ( " Re: " ) + QString : : fromStdWString ( msgInfo . title ) ) ;
QTextDocument doc ;
doc . setHtml ( QString : : fromStdWString ( msgInfo . msg ) ) ;
std : : string cited_text ( doc . toPlainText ( ) . toStdString ( ) ) ;
nMsgDialog - > insertPastedText ( cited_text ) ;
nMsgDialog - > addRecipient ( msgInfo . srcId ) ;
nMsgDialog - > show ( ) ;
nMsgDialog - > activateWindow ( ) ;
}
else
{
QMessageBox : : information ( this , tr ( " RetroShare " ) , tr ( " You cant reply a Anonymous Author " ) ) ;
}
}
2008-06-13 11:46:34 -04:00
2010-01-14 08:03:43 -05:00
void ForumsDialog : : anchorClicked ( const QUrl & link )
{
# ifdef FORUM_DEBUG
std : : cerr < < " ForumsDialog::anchorClicked link.scheme() : " < < link . scheme ( ) . toStdString ( ) < < std : : endl ;
# endif
2010-01-16 09:31:32 -05:00
if ( link . scheme ( ) = = " retroshare " )
{
QStringList L = link . toString ( ) . split ( " | " ) ;
2010-01-14 08:03:43 -05:00
2010-01-16 09:31:32 -05:00
std : : string fileName = L . at ( 1 ) . toStdString ( ) ;
uint64_t fileSize = L . at ( 2 ) . toULongLong ( ) ;
std : : string fileHash = L . at ( 3 ) . toStdString ( ) ;
2010-01-14 08:03:43 -05:00
2010-01-16 09:31:32 -05:00
# ifdef FORUM_DEBUG
std : : cerr < < " ForumsDialog::anchorClicked FileRequest : fileName : " < < fileName < < " . fileHash : " < < fileHash < < " . fileSize : " < < fileSize < < std : : endl ;
# endif
if ( fileName ! = " " & & fileHash ! = " " )
{
std : : list < std : : string > srcIds ;
2010-01-16 10:42:26 -05:00
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 " ) ;
2010-02-01 12:26:22 -05:00
mb . setWindowIcon ( QIcon ( QString : : fromUtf8 ( " :/images/rstray3.png " ) ) ) ;
2010-01-16 10:42:26 -05:00
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 " ) ;
mb . exec ( ) ;
}
2010-01-16 09:31:32 -05:00
}
else
{
QMessageBox mb ( tr ( " File Request Error " ) , tr ( " The file link is malformed. " ) , QMessageBox : : Information , QMessageBox : : Ok , 0 , 0 ) ;
mb . setButtonText ( QMessageBox : : Ok , " OK " ) ;
2010-02-01 12:26:22 -05:00
mb . setWindowIcon ( QIcon ( QString : : fromUtf8 ( " :/images/rstray3.png " ) ) ) ;
2010-01-16 09:31:32 -05:00
mb . exec ( ) ;
}
}
else if ( link . scheme ( ) = = " http " )
{
QDesktopServices : : openUrl ( link ) ;
}
else if ( link . scheme ( ) = = " " )
{
//it's probably a web adress, let's add http:// at the beginning of the link
QString newAddress = link . toString ( ) ;
newAddress . prepend ( " http:// " ) ;
QDesktopServices : : openUrl ( QUrl ( newAddress ) ) ;
}
}