2 wlmtransfermanager.cpp - Kopete Wlm Protocol
4 Copyright (c) 2008 by Tiago Salem Herrmann <tiagosh@gmail.com>
5 Kopete (c) 2002-2003 by the Kopete developers <kopete-devel@kde.org>
7 *************************************************************************
9 * This library is free software; you can redistribute it and/or *
10 * modify it under the terms of the GNU General Public *
11 * License as published by the Free Software Foundation; either *
12 * version 2 of the License, or (at your option) any later version. *
14 *************************************************************************
18 #include <kmessagebox.h>
24 #include "wlmtransfermanager.h"
25 #include "wlmcontact.h"
26 #include "kopetecontact.h"
27 #include "kopeteuiglobal.h"
30 WlmTransferManager::WlmTransferManager (WlmAccount
* account1
) :
34 QObject::connect (&account ()->server ()->cb
,
35 SIGNAL (incomingFileTransfer
36 (MSN::SwitchboardServerConnection
*,
37 const MSN::fileTransferInvite
&)), this,
38 SLOT (incomingFileTransfer
39 (MSN::SwitchboardServerConnection
*,
40 const MSN::fileTransferInvite
&)));
42 QObject::connect (&account ()->server ()->cb
,
43 SIGNAL (gotFileTransferProgress
44 (MSN::SwitchboardServerConnection
*,
46 const unsigned long long &)), this,
47 SLOT (gotFileTransferProgress
48 (MSN::SwitchboardServerConnection
*,
50 const unsigned long long &)));
52 QObject::connect (&account ()->server ()->cb
,
53 SIGNAL (gotFileTransferFailed (MSN::SwitchboardServerConnection
*,
54 const unsigned int &, const MSN::fileTransferError
&)),
56 SLOT (gotFileTransferFailed (MSN::SwitchboardServerConnection
*,
57 const unsigned int &, const MSN::fileTransferError
&)));
59 QObject::connect (&account ()->server ()->cb
,
60 SIGNAL (gotFileTransferSucceeded
61 (MSN::SwitchboardServerConnection
*,
62 const unsigned int &)), this,
63 SLOT (gotFileTransferSucceeded (MSN::SwitchboardServerConnection
*,
64 const unsigned int &)));
66 QObject::connect (&account ()->server ()->cb
,
67 SIGNAL (slotfileTransferInviteResponse
68 (MSN::SwitchboardServerConnection
*,
69 const unsigned int &, const bool &)), this,
70 SLOT (fileTransferInviteResponse
71 (MSN::SwitchboardServerConnection
* ,
72 const unsigned int &, const bool &)));
74 connect (Kopete::TransferManager::transferManager (),
75 SIGNAL (accepted (Kopete::Transfer
*, const QString
&)),
76 this, SLOT (slotAccepted (Kopete::Transfer
*, const QString
&)));
77 connect (Kopete::TransferManager::transferManager (),
78 SIGNAL (refused (const Kopete::FileTransferInfo
&)),
79 this, SLOT (slotRefused (const Kopete::FileTransferInfo
&)));
83 WlmTransferManager::fileTransferInviteResponse (MSN::SwitchboardServerConnection
* conn
,
84 const unsigned int &sessionID
,
85 const bool & response
)
87 if(!transferSessions
.count(sessionID
))
92 transferSessionData tfd
= transferSessions
[sessionID
];
93 Kopete::ContactPtrList chatmembers
;
94 chatmembers
.append (account ()->contacts ()[tfd
.to
]);
95 WlmChatSession
*_manager
=
96 qobject_cast
<WlmChatSession
*>(Kopete::ChatSessionManager::self ()->
97 findChatSession (account ()->myself (), chatmembers
,
98 account ()->protocol ()));
102 new WlmChatSession (account ()->protocol (),
103 account ()->myself (), chatmembers
);
108 transferSessionData tfd
= transferSessions
[sessionID
];
110 Kopete::TransferManager::transferManager()->
111 cancelIncomingTransfer(tfd
.internalID
);
113 tfd
.ft
->slotError(KIO::ERR_ABORTED
, i18n("File transfer cancelled."));
117 WlmTransferManager::~WlmTransferManager ()
122 WlmTransferManager::incomingFileTransfer (MSN::SwitchboardServerConnection
* conn
,
123 const MSN::fileTransferInvite
& ft
)
125 Kopete::Contact
* contact
=
126 account ()->contacts ()[ft
.userPassport
.c_str ()];
131 if (ft
.type
== MSN::FILE_TRANSFER_WITH_PREVIEW
132 || ft
.type
== MSN::FILE_TRANSFER_WITHOUT_PREVIEW
)
135 if (ft
.type
== MSN::FILE_TRANSFER_WITH_PREVIEW
)
138 loadFromData (KCodecs::
139 base64Decode (QString (ft
.preview
.c_str ()).
142 transferSessionData tsd
;
143 tsd
.from
= ft
.userPassport
.c_str ();
144 tsd
.to
= account ()->myself ()->contactId ();
147 account ()->chatManager ()->createChat (conn
);
148 WlmChatSession
*chat
= account ()->chatManager ()->chatSessions
[conn
];
150 chat
->setCanBeDeleted (false);
153 Kopete::TransferManager::transferManager ()->
154 askIncomingTransfer (contact
,
155 ft
.filename
.c_str (),
158 QString::number (ft
.sessionId
),
160 transferSessions
[ft
.sessionId
] = tsd
;
165 WlmTransferManager::gotFileTransferProgress (MSN::SwitchboardServerConnection
* conn
,
166 const unsigned int &sessionID
,
167 const unsigned long long
170 if(!transferSessions
.count(sessionID
))
173 Kopete::Transfer
* transfer
= transferSessions
[sessionID
].ft
;
175 transfer
->slotProcessed (transferred
);
179 WlmTransferManager::slotAccepted (Kopete::Transfer
* ft
,
180 const QString
& filename
)
182 Kopete::ContactPtrList chatmembers
;
184 // grab contactId from the sender
185 unsigned int sessionID
= ft
->info ().internalId ().toUInt ();
187 if(!transferSessions
.count(sessionID
))
190 QString from
= transferSessions
[sessionID
].from
;
195 // find an existent session, or create a new one
196 chatmembers
.append (account ()->contacts ()[from
]);
197 WlmChatSession
*_manager
= qobject_cast
<WlmChatSession
*>
198 (Kopete::ChatSessionManager::self ()->
199 findChatSession (account ()->myself (), chatmembers
,
200 account ()->protocol ()));
205 new WlmChatSession (account ()->protocol (),
206 account ()->myself (), chatmembers
);
209 MSN::SwitchboardServerConnection
* conn
= _manager
->getChatService ();
213 _manager
->setCanBeDeleted (false);
214 transferSessions
[sessionID
].ft
= ft
;
216 connect (ft
, SIGNAL (transferCanceled ()), this, SLOT (slotCanceled ()));
218 conn
->fileTransferResponse (sessionID
, filename
.toLatin1 ().data (),
223 WlmTransferManager::slotRefused (const Kopete::FileTransferInfo
& fti
)
225 Kopete::ContactPtrList chatmembers
;
226 chatmembers
.append (fti
.contact ());
227 WlmChatSession
*_manager
= qobject_cast
<WlmChatSession
*>
228 (Kopete::ChatSessionManager::self ()->
229 findChatSession (account ()->myself (), chatmembers
,
230 account ()->protocol ()));
235 MSN::SwitchboardServerConnection
* conn
= _manager
->getChatService ();
239 conn
->fileTransferResponse (fti
.internalId ().toUInt (), "", false);
243 WlmTransferManager::gotFileTransferFailed (MSN::SwitchboardServerConnection
* conn
,
244 const unsigned int &sessionID
,
245 const MSN::fileTransferError
& error
)
247 if(!transferSessions
.count(sessionID
))
250 transferSessionData tsd
= transferSessions
[sessionID
];
253 Kopete::TransferManager::transferManager ()->
254 cancelIncomingTransfer(tsd
.internalID
);
256 tsd
.ft
->slotError(KIO::ERR_ABORTED
, i18n("File transfer cancelled."));
262 tsd
.ft
->slotError(KIO::ERR_ABORTED
, i18n("File transfer cancelled."));
265 transferSessions
.remove (sessionID
);
270 WlmTransferManager::gotFileTransferSucceeded (MSN::SwitchboardServerConnection
* conn
,
271 const unsigned int &sessionID
)
273 Kopete::Transfer
* transfer
= transferSessions
[sessionID
].ft
;
276 Kopete::ContactPtrList chatmembers
;
277 if (transfer
->info ().direction () ==
278 Kopete::FileTransferInfo::Incoming
)
279 chatmembers
.append (account ()->
280 contacts ()[transferSessions
[sessionID
].
283 chatmembers
.append (account ()->
284 contacts ()[transferSessions
[sessionID
].to
]);
286 WlmChatSession
*_manager
= qobject_cast
<WlmChatSession
*>
287 (Kopete::ChatSessionManager::self ()->
288 findChatSession (account ()->myself (), chatmembers
,
289 account ()->protocol ()));
291 _manager
->raiseView ();
292 transfer
->slotComplete ();
293 transferSessions
.remove (sessionID
);
298 WlmTransferManager::slotCanceled ()
300 kDebug (14210) << k_funcinfo
;
301 Kopete::Transfer
* ft
= qobject_cast
< Kopete::Transfer
* >(sender ());
304 unsigned int sessionID
= 0;
305 QMap
< unsigned int, transferSessionData
>::iterator i
=
306 transferSessions
.begin ();
307 for (; i
!= transferSessions
.end (); ++i
)
308 if (i
.value ().ft
== ft
)
309 sessionID
= i
.key ();
314 transferSessionData session
= transferSessions
[sessionID
];
316 Kopete::ContactPtrList chatmembers
;
317 if (ft
->info ().direction () == Kopete::FileTransferInfo::Incoming
)
318 chatmembers
.append (account ()->contacts ()[session
.from
]);
320 chatmembers
.append (account ()->contacts ()[session
.to
]);
322 WlmChatSession
*_manager
= qobject_cast
<WlmChatSession
*>
323 (Kopete::ChatSessionManager::self ()->
324 findChatSession (account ()->myself (), chatmembers
,
325 account ()->protocol ()));
329 _manager
->raiseView ();
331 MSN::SwitchboardServerConnection
* conn
= _manager
->getChatService ();
338 transferSessions
.remove (sessionID
);
339 conn
->cancelFileTransfer (sessionID
);
343 #include "wlmtransfermanager.moc"