/[pkg-kde]/tags/packages/kdenetwork/kdenetwork-3.5.0-3/debian/patches/01_kdenetwork_branch_r495340.diff
ViewVC logotype

Contents of /tags/packages/kdenetwork/kdenetwork-3.5.0-3/debian/patches/01_kdenetwork_branch_r495340.diff

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2778 - (hide annotations) (download)
Sat Jan 7 21:59:25 2006 UTC (7 years, 4 months ago) by chrsmrtn
Original Path: trunk/packages/kdenetwork/debian/patches/01_kdenetwork_branch_r495340.diff
File size: 156608 byte(s)
kdenetwork branch pull.
1 chrsmrtn 2778 #DPATCHLEVEL=0
2     --- kpf/kpfapplet.desktop (revision 488948)
3     +++ kpf/kpfapplet.desktop (revision 495340)
4     @@ -73,6 +73,7 @@
5     Comment[eu]=Sarean zehar fitxtegiak partekatzea errazten duen web-zerbitzari txiki bat
6     Comment[fr]=Un petit serveur web permettant de partager facilement des fichiers sur le réseau
7     Comment[gl]=Un pequeno servidor web que fai doada a compartición de ficheiros por rede
8     +Comment[hu]=Mini webkiszolgáló egyszerű fájlmegosztáshoz
9     Comment[is]=Lítill vefþjónn sem auðveldar deilingu af skrám yfir netið
10     Comment[it]=Un piccolo server web che permette di condividere dei file attraverso la rete in modo semplice
11     Comment[ja]=簡単にネットワーク上でファイルを共有するための小さなウェブサーバー
12     --- krdc/rdp/rdphostpref.cpp (revision 488948)
13     +++ krdc/rdp/rdphostpref.cpp (revision 495340)
14     @@ -29,8 +29,8 @@
15     m_height(600),
16     m_colorDepth(8),
17     m_layout("en-us"),
18     - m_useKWallet(true),
19     - m_askOnConnect(true)
20     + m_askOnConnect(true),
21     + m_useKWallet(true)
22     {
23     }
24    
25     @@ -93,6 +93,7 @@
26     m_config->deleteEntry(p+"colorDepth");
27     m_config->deleteEntry(p+"layout");
28     m_config->deleteEntry(p+"askOnConnect");
29     + m_config->deleteEntry(p+"useKWallet");
30     }
31    
32     void RdpHostPref::setDefaults()
33     --- kdnssd/ioslave/invitation.protocol (revision 488948)
34     +++ kdnssd/ioslave/invitation.protocol (revision 495340)
35     @@ -24,6 +24,7 @@
36     Description[eu]=SD gonbidapenak
37     Description[fr]=Invitations SD
38     Description[gl]=Invitacións SD
39     +Description[hu]=SD meghívók
40     Description[is]=SD boð
41     Description[it]=Inviti SD
42     Description[ja]=SD招待
43     --- kopete/plugins/nowlistening/nowlisteningplugin.cpp (revision 488948)
44     +++ kopete/plugins/nowlistening/nowlisteningplugin.cpp (revision 495340)
45     @@ -53,12 +53,12 @@
46     class NowListeningPlugin::Private
47     {
48     public:
49     - Private() : m_mediaPlayerList(0L), m_currentMediaPlayer(0L), m_client(0L), m_currentChatSession(0L), m_currentMetaContact(0L),
50     - m_musicSentTo(0L), advertTimer(0L)
51     + Private() : m_currentMediaPlayer(0L), m_client(0L), m_currentChatSession(0L), m_currentMetaContact(0L),
52     + advertTimer(0L)
53     {}
54    
55     // abstracted media player interfaces
56     - QPtrList<NLMediaPlayer> *m_mediaPlayerList;
57     + QPtrList<NLMediaPlayer> m_mediaPlayerList;
58     NLMediaPlayer *m_currentMediaPlayer;
59    
60     // Needed for DCOP interprocess communication
61     @@ -68,7 +68,7 @@
62    
63     // Used when using automatic advertising to know who has already gotten
64     // the music information
65     - QStringList *m_musicSentTo;
66     + QStringList m_musicSentTo;
67    
68     // Used when advertising to status message.
69     QTimer *advertTimer;
70     @@ -108,16 +108,15 @@
71     d->m_client = kapp->dcopClient(); //new DCOPClient();
72    
73     // set up known media players
74     - d->m_mediaPlayerList = new QPtrList<NLMediaPlayer>;
75     - d->m_mediaPlayerList->setAutoDelete( true );
76     - d->m_mediaPlayerList->append( new NLKscd( d->m_client ) );
77     - d->m_mediaPlayerList->append( new NLNoatun( d->m_client ) );
78     - d->m_mediaPlayerList->append( new NLJuk( d->m_client ) );
79     - d->m_mediaPlayerList->append( new NLamaroK( d->m_client ) );
80     - d->m_mediaPlayerList->append( new NLKaffeine( d->m_client ) );
81     + d->m_mediaPlayerList.setAutoDelete( true );
82     + d->m_mediaPlayerList.append( new NLKscd( d->m_client ) );
83     + d->m_mediaPlayerList.append( new NLNoatun( d->m_client ) );
84     + d->m_mediaPlayerList.append( new NLJuk( d->m_client ) );
85     + d->m_mediaPlayerList.append( new NLamaroK( d->m_client ) );
86     + d->m_mediaPlayerList.append( new NLKaffeine( d->m_client ) );
87    
88     #if defined Q_WS_X11 && !defined K_WS_QTONLY && HAVE_XMMS
89     - d->m_mediaPlayerList->append( new NLXmms() );
90     + d->m_mediaPlayerList.append( new NLXmms() );
91     #endif
92    
93     // User has selected a specific mediaPlayer so update the currentMediaPlayer pointer.
94     @@ -126,8 +125,6 @@
95     updateCurrentMediaPlayer();
96     }
97    
98     - d->m_musicSentTo = new QStringList();
99     -
100     // watch for '/media' getting typed
101     Kopete::CommandHandler::commandHandler()->registerCommand(
102     this,
103     @@ -207,12 +204,12 @@
104     for( Kopete::Contact *c = dest.first() ; c ; c = dest.next() )
105     {
106     const QString& cId = c->contactId();
107     - if( 0 == d->m_musicSentTo->contains( cId ) )
108     + if( 0 == d->m_musicSentTo.contains( cId ) )
109     {
110     mustSendAnyway = true;
111    
112     // The contact will get the music information so we put it in the list.
113     - d->m_musicSentTo->push_back( cId );
114     + d->m_musicSentTo.push_back( cId );
115     }
116     }
117    
118     @@ -230,10 +227,10 @@
119     // rebuild the list of contacts the latest information was sent to.
120     if( newTrack )
121     {
122     - d->m_musicSentTo->clear();
123     + d->m_musicSentTo.clear();
124     for( Kopete::Contact *c = dest.first() ; c ; c = dest.next() )
125     {
126     - d->m_musicSentTo->push_back( c->contactId() );
127     + d->m_musicSentTo.push_back( c->contactId() );
128     }
129     }
130     }
131     @@ -282,7 +279,7 @@
132     }
133     else
134     {
135     - for ( NLMediaPlayer* i = d->m_mediaPlayerList->first(); i; i = d->m_mediaPlayerList->next() )
136     + for ( NLMediaPlayer* i = d->m_mediaPlayerList.first(); i; i = d->m_mediaPlayerList.next() )
137     {
138     if( i->playing() )
139     {
140     @@ -319,7 +316,7 @@
141     }
142     else
143     {
144     - for ( NLMediaPlayer* i = d->m_mediaPlayerList->first(); i; i = d->m_mediaPlayerList->next() )
145     + for ( NLMediaPlayer* i = d->m_mediaPlayerList.first(); i; i = d->m_mediaPlayerList.next() )
146     {
147     buildTrackMessage(message, i, update);
148     }
149     @@ -358,7 +355,7 @@
150     }
151     else
152     {
153     - for ( NLMediaPlayer* i = d->m_mediaPlayerList->first(); i; i = d->m_mediaPlayerList->next() )
154     + for ( NLMediaPlayer* i = d->m_mediaPlayerList.first(); i; i = d->m_mediaPlayerList.next() )
155     {
156     i->update();
157     if( i->newTrack() )
158     @@ -476,7 +473,7 @@
159     {
160     kdDebug(14307) << k_funcinfo << "Update current media player (single mode)" << endl;
161    
162     - d->m_currentMediaPlayer = d->m_mediaPlayerList->at( NowListeningConfig::self()->selectedMediaPlayer() );
163     + d->m_currentMediaPlayer = d->m_mediaPlayerList.at( NowListeningConfig::self()->selectedMediaPlayer() );
164     }
165    
166     void NowListeningPlugin::slotSettingsChanged()
167     --- kopete/plugins/smpppdcs/Changelog.smpppdcs (revision 488948)
168     +++ kopete/plugins/smpppdcs/Changelog.smpppdcs (revision 495340)
169     @@ -15,6 +15,16 @@
170     Changelog
171     =========
172    
173     +0.75 (2006/01/01)
174     +* use of KSocketStream instead of deprecated KExtendedSocket
175     +* progressbar while searching for an smpppd on the local network
176     +* automatically found smpppd server is resolved via DNS
177     +* Fixed Bug 111369: better detection of SMPPPD and no more freeze of Kopete
178     +
179     +0.74 (2005/12/27)
180     +* minor bugfixes
181     +* disable netstat in config if the binary cannot be found
182     +
183     0.72 (2005/09/07)
184     * internal refactoring to provide online status
185    
186     --- kopete/plugins/smpppdcs/detector.h (revision 488948)
187     +++ kopete/plugins/smpppdcs/detector.h (revision 495340)
188     @@ -1,9 +1,9 @@
189     /*
190     detector.h
191    
192     - Copyright (c) 2004-2005 by Heiko Schaefer <heiko@rangun.de>
193     + Copyright (c) 2004-2006 by Heiko Schaefer <heiko@rangun.de>
194    
195     - Kopete (c) 2002-2005 by the Kopete developers <kopete-devel@kde.org>
196     + Kopete (c) 2002-2006 by the Kopete developers <kopete-devel@kde.org>
197    
198     *************************************************************************
199     * *
200     @@ -26,10 +26,13 @@
201    
202     #define SMPPPDCS_CONFIG_GROUP "SMPPPDCS Plugin"
203    
204     +namespace KNetwork {
205     +class KStreamSocket;
206     +};
207     +
208     class KProcess;
209     class DCOPClient;
210     class IConnector;
211     -class KExtendedSocket;
212    
213     /**
214     * @brief Detector to find out if there is a connection to the internet.
215     @@ -44,10 +47,10 @@
216     */
217    
218     class Detector : protected QObject {
219     - Q_OBJECT
220     + Q_OBJECT
221    
222     - Detector(const Detector&);
223     - Detector& operator=(const Detector&);
224     + Detector(const Detector&);
225     + Detector& operator=(const Detector&);
226    
227     /**
228     * @brief Enumerates the different states of communication with the smpppd
229     @@ -68,86 +71,85 @@
230     };
231    
232     public:
233     - /**
234     - * @brief Creates an <code>Detector</code> instance.
235     - *
236     - * @param connector A connector to send feedback to the calling object
237     - */
238     - Detector(IConnector * connector);
239     + /**
240     + * @brief Creates an <code>Detector</code> instance.
241     + *
242     + * @param connector A connector to send feedback to the calling object
243     + */
244     + Detector(IConnector * connector);
245    
246     - /**
247     - * @brief Destroys an <code>Detector</code> instance.
248     - *
249     - */
250     - virtual ~Detector();
251     + /**
252     + * @brief Destroys an <code>Detector</code> instance.
253     + *
254     + */
255     + virtual ~Detector();
256    
257     - /**
258     - * @brief Use netstat to get the status of an internet connection.
259     - *
260     - * Calls IConnector::setConnectedStatus of the IConnector given in
261     - * the constructor.
262     - *
263     - * @see IConnector
264     - *
265     - */
266     - virtual void netstatCheckStatus();
267     + /**
268     + * @brief Use netstat to get the status of an internet connection.
269     + *
270     + * Calls IConnector::setConnectedStatus of the IConnector given in
271     + * the constructor.
272     + *
273     + * @see IConnector
274     + *
275     + */
276     + virtual void netstatCheckStatus();
277    
278     #ifdef USE_SMPPPD
279     - /**
280     - * @brief Use the smpppd to get the status of an internet connection.
281     - *
282     - * Calls IConnector::setConnectedStatus of the IConnector given in
283     - * the constructor.
284     - *
285     - * @see IConnector
286     - *
287     - */
288     - virtual void smpppdCheckStatus();
289     + /**
290     + * @brief Use the smpppd to get the status of an internet connection.
291     + *
292     + * Calls IConnector::setConnectedStatus of the IConnector given in
293     + * the constructor.
294     + *
295     + * @see IConnector
296     + *
297     + */
298     + virtual void smpppdCheckStatus();
299     #endif
300    
301     -signals:
302     - void retryRequested();
303     -
304     private:
305     #ifdef USE_SMPPPD
306     - void connectToSMPPPD();
307     - QStringList readSMPPPD();
308     - void writeSMPPPD(const char * cmd);
309     + void connectToSMPPPD();
310     + void disconnectFromSMPPPD();
311     + QStringList readSMPPPD();
312     + void writeSMPPPD(const char * cmd);
313     #endif
314    
315     - /**
316     - * @brief Makes an response for an challenge
317     - *
318     - * If the smpppd requests an authorization, it sends an challenge.
319     - * The password has to be appended to this challenge and the m5sum
320     - * in hex-display has to get responded to the smpppd.
321     - *
322     - * @param chex the challenge in hex display
323     - * @param password the passwort to authenticate
324     - * @return the reponse for the smpppd
325     - */
326     - QString make_response(const QString& chex, const QString& password) const;
327     + /**
328     + * @brief Makes an response for an challenge
329     + *
330     + * If the smpppd requests an authorization, it sends an challenge.
331     + * The password has to be appended to this challenge and the m5sum
332     + * in hex-display has to get responded to the smpppd.
333     + *
334     + * @param chex the challenge in hex display
335     + * @param password the passwort to authenticate
336     + * @return the reponse for the smpppd
337     + */
338     + QString make_response(const QString& chex, const QString& password) const;
339    
340     private slots:
341     // Original cs-plugin code
342     - void slotProcessStdout( KProcess *process, char *buffer, int len );
343     + void slotProcessStdout(KProcess *process, char *buffer, int len);
344    
345     /**
346     * Notify when the netstat process has exited
347     */
348     - void slotProcessExited( KProcess *process );
349     + void slotProcessExited(KProcess *process);
350    
351     private:
352     #ifdef USE_SMPPPD
353     - CommunicationState m_comState;
354     - DCOPClient *m_client;
355     - static QCString m_kinternetApp;
356     - KExtendedSocket *m_sock;
357     - QStringList m_ifcfgs;
358     +
359     + CommunicationState m_comState;
360     + DCOPClient *m_client;
361     + static QCString m_kinternetApp;
362     + KNetwork::KStreamSocket *m_sock;
363     + QStringList m_ifcfgs;
364     #endif
365    
366     - IConnector *m_connector;
367     - KProcess *m_process;
368     + IConnector *m_connector;
369     + KProcess *m_process;
370     };
371    
372     #endif
373     --- kopete/plugins/smpppdcs/config/smpppdcspreferences.h (revision 488948)
374     +++ kopete/plugins/smpppdcs/config/smpppdcspreferences.h (revision 495340)
375     @@ -1,9 +1,9 @@
376     /*
377     smpppdcspreferences.h
378    
379     - Copyright (c) 2004-2005 by Heiko Schaefer <heiko@rangun.de>
380     + Copyright (c) 2004-2006 by Heiko Schaefer <heiko@rangun.de>
381    
382     - Kopete (c) 2002-2005 by the Kopete developers <kopete-devel@kde.org>
383     + Kopete (c) 2002-2006 by the Kopete developers <kopete-devel@kde.org>
384    
385     *************************************************************************
386     * *
387     --- kopete/plugins/smpppdcs/config/smpppdcsprefsimpl.h (revision 488948)
388     +++ kopete/plugins/smpppdcs/config/smpppdcsprefsimpl.h (revision 495340)
389     @@ -1,9 +1,9 @@
390     /*
391     smpppdcsprefsimpl.h
392    
393     - Copyright (c) 2004-2005 by Heiko Schaefer <heiko@rangun.de>
394     + Copyright (c) 2004-2006 by Heiko Schaefer <heiko@rangun.de>
395    
396     - Kopete (c) 2002-2005 by the Kopete developers <kopete-devel@kde.org>
397     + Kopete (c) 2002-2006 by the Kopete developers <kopete-devel@kde.org>
398    
399     *************************************************************************
400     * *
401     @@ -17,12 +17,16 @@
402     #ifndef SMPPPDCSPREFSIMPL_H
403     #define SMPPPDCSPREFSIMPL_H
404    
405     -#include <klineedit.h>
406     +#include <qgroupbox.h>
407    
408     +#include <kprogress.h>
409     +
410     #include "smpppdcsprefs.h"
411    
412     +class SMPPPDSearcher;
413     +
414     /**
415     -@author Heiko Schaefer <heiko@rangun.de>
416     +@author Heiko Sch&auml;fer <heiko@rangun.de>
417     */
418     class SMPPPDCSPrefs : public SMPPPDCSPrefsBase
419     {
420     @@ -36,13 +40,35 @@
421     SMPPPDCSPrefs(QWidget* parent, const char* name = 0, WFlags fl = 0);
422     ~SMPPPDCSPrefs();
423    
424     +signals:
425     + void foundSMPPPD(bool found);
426     +
427     protected slots:
428     void enableSMPPPDSettings();
429     void disableSMPPPDSettings();
430     void determineCSType();
431     void smpppdFound(const QString & host);
432     void smpppdNotFound();
433     + void scanStarted(uint total);
434     + void scanProgress(uint cur);
435     + void scanFinished();
436     + void cancelScanning();
437    
438     +private:
439     + KProgressDialog * m_scanProgressDlg;
440     + SMPPPDSearcher * m_curSearcher;
441     };
442    
443     +inline void SMPPPDCSPrefs::enableSMPPPDSettings() {
444     + smpppdPrefs->setEnabled(true);
445     +}
446     +
447     +inline void SMPPPDCSPrefs::disableSMPPPDSettings() {
448     + smpppdPrefs->setEnabled(false);
449     +}
450     +
451     +inline void SMPPPDCSPrefs::scanFinished() {
452     + m_scanProgressDlg->hide();
453     +}
454     +
455     #endif
456     --- kopete/plugins/smpppdcs/config/smpppdlocationwidget.cpp (revision 0)
457     +++ kopete/plugins/smpppdcs/config/smpppdlocationwidget.cpp (revision 495340)
458     @@ -0,0 +1,31 @@
459     +/*
460     + smpppdlocationwidget.cpp
461     +
462     + Copyright (c) 2004-2006 by Heiko Schaefer <heiko@rangun.de>
463     +
464     + Kopete (c) 2002-2006 by the Kopete developers <kopete-devel@kde.org>
465     +
466     + *************************************************************************
467     + * *
468     + * This program is free software; you can redistribute it and/or modify *
469     + * it under the terms of the GNU General Public License as published by *
470     + * the Free Software Foundation; version 2 of the License. *
471     + * *
472     + *************************************************************************
473     +*/
474     +
475     +#include <klineedit.h>
476     +
477     +#include "smpppdlocationwidget.h"
478     +
479     +SMPPPDLocationWidget::SMPPPDLocationWidget(QWidget* parent, const char* name, WFlags fl)
480     + : SMPPPDLocationWidgetBase(parent, name, fl) {}
481     +
482     +SMPPPDLocationWidget::~SMPPPDLocationWidget() {}
483     +
484     +void SMPPPDLocationWidget::setServer(const QString& serv)
485     +{
486     + server->setText(serv);
487     +}
488     +
489     +#include "smpppdlocationwidget.moc"
490     --- kopete/plugins/smpppdcs/config/smpppdsearcher.cpp (revision 488948)
491     +++ kopete/plugins/smpppdcs/config/smpppdsearcher.cpp (revision 495340)
492     @@ -1,9 +1,9 @@
493     /*
494     smpppdsearcher.h
495    
496     - Copyright (c) 2004-2005 by Heiko Schaefer <heiko@rangun.de>
497     + Copyright (c) 2004-2006 by Heiko Schaefer <heiko@rangun.de>
498    
499     - Kopete (c) 2002-2005 by the Kopete developers <kopete-devel@kde.org>
500     + Kopete (c) 2002-2006 by the Kopete developers <kopete-devel@kde.org>
501    
502     *************************************************************************
503     * *
504     @@ -14,26 +14,21 @@
505     *************************************************************************
506     */
507    
508     -#include <qstringlist.h>
509     #include <qregexp.h>
510     #include <qfile.h>
511    
512     -#include <kextendedsocket.h>
513     +#include <kstreamsocket.h>
514     #include <kprocess.h>
515     #include <kdebug.h>
516    
517     #include "smpppdsearcher.h"
518    
519     SMPPPDSearcher::SMPPPDSearcher()
520     - : m_procIfconfig(NULL),
521     - m_procNetstat(NULL),
522     -m_sock(NULL) {
523     + : m_cancelSearchNow(FALSE),
524     + m_procIfconfig(NULL),
525     +m_procNetstat(NULL) {}
526    
527     - m_sock = new KExtendedSocket();
528     -}
529     -
530     SMPPPDSearcher::~SMPPPDSearcher() {
531     - delete m_sock;
532     delete m_procIfconfig;
533     delete m_procNetstat;
534     }
535     @@ -42,6 +37,8 @@
536     \fn SMPPPDSearcher::searchNetwork() const
537     */
538     void SMPPPDSearcher::searchNetwork() {
539     + kdDebug(14312) << k_funcinfo << endl;
540     +
541     // the first point to search is localhost
542     if(!scan("127.0.0.1", "255.0.0.0")) {
543    
544     @@ -65,6 +62,7 @@
545     \fn SMPPPDSearcher::slotStdoutReceived(KProcess * proc, char * buf, int len)
546     */
547     void SMPPPDSearcher::slotStdoutReceivedIfconfig(KProcess * /* proc */, char * buf, int len) {
548     + kdDebug(14312) << k_funcinfo << endl;
549    
550     QString myBuf = QString::fromLatin1(buf,len);
551     QRegExp rex("^[ ]{10}.*inet addr:([0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}).*Mask:([0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3})");
552     @@ -81,6 +79,7 @@
553     emit smpppdNotFound();
554     }
555     void SMPPPDSearcher::slotStdoutReceivedNetstat(KProcess * /* proc */, char * buf, int len) {
556     + kdDebug(14312) << k_funcinfo << endl;
557    
558     QRegExp rexGW(".*\\n0.0.0.0[ ]*([0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}).*");
559     QString myBuf = QString::fromLatin1(buf,len);
560     @@ -108,49 +107,68 @@
561     */
562     bool SMPPPDSearcher::scan(const QString& ip, const QString& mask) {
563     kdDebug(14312) << k_funcinfo << "Scanning " << ip << "/" << mask << "..." << endl;
564     +
565     + if(ip == "127.0.0.1") { // if localhost, we only scan this one host
566     + if(scanIP(ip)) {
567     + return true;
568     + }
569     +
570     + return false;
571     + }
572    
573     - if(ip == "127.0.0.1") { // localhost
574     - // we need only to check the existence of the socket file
575     - if(QFile::exists("/var/run/smpppd/control")) {
576     - emit smpppdFound("localhost");
577     - return true;
578     - }
579     - } else { // other interfaces
580     + uint min_range = 0;
581     + uint max_range = 255;
582    
583     - uint min_range = 0;
584     - uint max_range = 255;
585     + // calculate ip range (only last mask entry)
586     + QRegExp lastRex("([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})");
587     + if(lastRex.exactMatch(ip)) {
588    
589     - // calculate ip range (only last mask entry)
590     - QRegExp lastRex("([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})");
591     - if(lastRex.exactMatch(ip)) {
592     + uint lastWordIP = lastRex.cap(4).toUInt();
593    
594     - uint lastWordIP = lastRex.cap(4).toUInt();
595     + QStringList ipToks;
596     + for(int i = 1; i < 5; i++) {
597     + ipToks.push_back(lastRex.cap(i));
598     + }
599    
600     - QStringList ipToks;
601     - for(int i = 1; i < 5; i++) {
602     - ipToks.push_back(lastRex.cap(i));
603     + if(lastRex.exactMatch(mask)) {
604     + uint lastWordMask = lastRex.cap(4).toUInt();
605     +
606     + if(lastWordMask == 0) {
607     + kdDebug(14312) << k_funcinfo << "IP-Range: " << ipToks[0] << "." << ipToks[1] << "." << ipToks[2] << ".0 - " << ipToks[0] << "." << ipToks[1] << "." << ipToks[2] << ".255" << endl;
608     + max_range = 255;
609     + } else if(lastWordMask == 255) {
610     + min_range = max_range = lastWordIP;
611     + } else {
612     + kdDebug(14312) << k_funcinfo << "IP-Range: " << ipToks[0] << "." << ipToks[1] << "." << ipToks[2] << ".0 - " << ipToks[0] << "." << ipToks[1] << "." << ipToks[2] << "." << lastWordMask << endl;
613     + max_range = lastWordMask;
614     }
615     + }
616    
617     - if(lastRex.exactMatch(mask)) {
618     - uint lastWordMask = lastRex.cap(4).toUInt();
619     -
620     - if(lastWordMask == 0) {
621     - kdDebug(14312) << k_funcinfo << "IP-Range: " << ipToks[0] << "." << ipToks[1] << "." << ipToks[2] << ".0 - " << ipToks[0] << "." << ipToks[1] << "." << ipToks[2] << ".255" << endl;
622     - max_range = 255;
623     - } else if(lastWordMask == 255) {
624     - min_range = max_range = lastWordIP;
625     - } else {
626     - kdDebug(14312) << k_funcinfo << "IP-Range: " << ipToks[0] << "." << ipToks[1] << "." << ipToks[2] << ".0 - " << ipToks[0] << "." << ipToks[1] << "." << ipToks[2] << "." << lastWordMask << endl;
627     - max_range = lastWordMask;
628     + uint range = max_range - min_range;
629     + m_cancelSearchNow = FALSE;
630     + if(range > 1) {
631     + emit scanStarted(max_range);
632     + }
633     + for(uint i = min_range; i <= max_range; i++) {
634     + if(m_cancelSearchNow) {
635     + if(range > 1) {
636     + emit scanFinished();
637     }
638     + break;
639     }
640     -
641     - for(uint i = min_range; i <= max_range; i++) {
642     - if(scanIP(QString(ipToks[0] + "." + ipToks[1] + "." + ipToks[2] + "." + QString::number(i)))) {
643     - return true;
644     + if(range > 1) {
645     + emit scanProgress(i);
646     + }
647     + if(scanIP(QString(ipToks[0] + "." + ipToks[1] + "." + ipToks[2] + "." + QString::number(i)))) {
648     + if(range > 1) {
649     + emit scanFinished();
650     }
651     + return true;
652     }
653     }
654     + if(range > 1) {
655     + emit scanFinished();
656     + }
657     }
658    
659     return false;
660     @@ -162,13 +180,15 @@
661     bool SMPPPDSearcher::scanIP(const QString& ip) {
662     kdDebug(14312) << k_funcinfo << "Now scanning " << ip << "..." << endl;
663    
664     - m_sock->reset();
665     - m_sock->setTimeout(0,500);
666     - m_sock->setAddress(ip,3185);
667     + KNetwork::KStreamSocket sock(ip, "3185");
668     + sock.setBlocking(TRUE);
669     + sock.setTimeout(500);
670    
671     - if(!m_sock->connect()) {
672     + if(sock.connect()) {
673     emit smpppdFound(ip);
674     return true;
675     + } else {
676     + kdDebug(14312) << k_funcinfo << "Socket Error: " << KNetwork::KStreamSocket::errorString(sock.error()) << endl;
677     }
678    
679     return false;
680     --- kopete/plugins/smpppdcs/config/smpppdcsprefs.ui (revision 488948)
681     +++ kopete/plugins/smpppdcs/config/smpppdcsprefs.ui (revision 495340)
682     @@ -9,8 +9,8 @@
683     <rect>
684     <x>0</x>
685     <y>0</y>
686     - <width>454</width>
687     - <height>343</height>
688     + <width>476</width>
689     + <height>221</height>
690     </rect>
691     </property>
692     <property name="caption">
693     @@ -35,19 +35,10 @@
694     <property name="name">
695     <cstring>unnamed</cstring>
696     </property>
697     - <property name="margin">
698     - <number>6</number>
699     - </property>
700     - <property name="spacing">
701     - <number>6</number>
702     - </property>
703     - <widget class="QButtonGroup">
704     + <widget class="QLayoutWidget">
705     <property name="name">
706     - <cstring>csMethod</cstring>
707     + <cstring>layout4</cstring>
708     </property>
709     - <property name="title">
710     - <string>Method of Connection Status Detection</string>
711     - </property>
712     <vbox>
713     <property name="name">
714     <cstring>unnamed</cstring>
715     @@ -58,226 +49,134 @@
716     <property name="spacing">
717     <number>6</number>
718     </property>
719     - <widget class="QRadioButton">
720     + <widget class="QButtonGroup">
721     <property name="name">
722     - <cstring>useNetstat</cstring>
723     + <cstring>csMethod</cstring>
724     </property>
725     - <property name="text">
726     - <string>&amp;netstat - Standard method of connection status detection</string>
727     + <property name="title">
728     + <string>Method of Connection Status Detection</string>
729     </property>
730     - <property name="checked">
731     - <bool>true</bool>
732     - </property>
733     - <property name="toolTip" stdset="0">
734     - <string>Uses the netstat command to find a gateway; suitable on dial-up computers</string>
735     - </property>
736     - </widget>
737     - <widget class="QRadioButton">
738     - <property name="name">
739     - <cstring>useSmpppd</cstring>
740     - </property>
741     - <property name="text">
742     - <string>s&amp;mpppd - Advanced method of connection status detection</string>
743     - </property>
744     - <property name="toolTip" stdset="0">
745     - <string>Uses the smpppd on a gateway; suitable for a computer in a private network</string>
746     - </property>
747     - </widget>
748     - <widget class="QLayoutWidget">
749     - <property name="name">
750     - <cstring>autoCSLayout</cstring>
751     - </property>
752     - <hbox>
753     + <vbox>
754     <property name="name">
755     <cstring>unnamed</cstring>
756     </property>
757     - <widget class="KPushButton">
758     + <property name="margin">
759     + <number>6</number>
760     + </property>
761     + <property name="spacing">
762     + <number>6</number>
763     + </property>
764     + <widget class="QRadioButton">
765     <property name="name">
766     - <cstring>autoCSTest</cstring>
767     + <cstring>useNetstat</cstring>
768     </property>
769     <property name="text">
770     - <string>Try to Detect &amp;Automatically</string>
771     + <string>&amp;netstat - Standard method of connection status detection</string>
772     </property>
773     + <property name="checked">
774     + <bool>true</bool>
775     + </property>
776     <property name="toolTip" stdset="0">
777     - <string>Tries to find an appropriate connection method</string>
778     + <string>Uses the netstat command to find a gateway; suitable on dial-up computers</string>
779     </property>
780     </widget>
781     - <spacer>
782     + <widget class="QRadioButton">
783     <property name="name">
784     - <cstring>spacer4</cstring>
785     + <cstring>useSmpppd</cstring>
786     </property>
787     - <property name="orientation">
788     - <enum>Horizontal</enum>
789     + <property name="text">
790     + <string>smpppd - Ad&amp;vanced method of connection status detection</string>
791     </property>
792     - <property name="sizeType">
793     - <enum>Expanding</enum>
794     + <property name="toolTip" stdset="0">
795     + <string>Uses the smpppd on a gateway; suitable for a computer in a private network</string>
796     </property>
797     - <property name="sizeHint">
798     - <size>
799     - <width>341</width>
800     - <height>20</height>
801     - </size>
802     + </widget>
803     + <widget class="QLayoutWidget">
804     + <property name="name">
805     + <cstring>autoCSLayout</cstring>
806     </property>
807     - </spacer>
808     - </hbox>
809     + <hbox>
810     + <property name="name">
811     + <cstring>unnamed</cstring>
812     + </property>
813     + <widget class="KPushButton">
814     + <property name="name">
815     + <cstring>autoCSTest</cstring>
816     + </property>
817     + <property name="text">
818     + <string>&amp;Try to Detect Automatically</string>
819     + </property>
820     + <property name="toolTip" stdset="0">
821     + <string>Tries to find an appropriate connection method</string>
822     + </property>
823     + </widget>
824     + <spacer>
825     + <property name="name">
826     + <cstring>spacer4</cstring>
827     + </property>
828     + <property name="orientation">
829     + <enum>Horizontal</enum>
830     + </property>
831     + <property name="sizeType">
832     + <enum>Expanding</enum>
833     + </property>
834     + <property name="sizeHint">
835     + <size>
836     + <width>341</width>
837     + <height>20</height>
838     + </size>
839     + </property>
840     + </spacer>
841     + </hbox>
842     + </widget>
843     + </vbox>
844     </widget>
845     - </vbox>
846     - </widget>
847     - <widget class="QGroupBox">
848     - <property name="name">
849     - <cstring>smpppdPrefs</cstring>
850     - </property>
851     - <property name="enabled">
852     - <bool>false</bool>
853     - </property>
854     - <property name="title">
855     - <string>Location of the SMPPPD</string>
856     - </property>
857     - <grid>
858     - <property name="name">
859     - <cstring>unnamed</cstring>
860     - </property>
861     - <property name="margin">
862     - <number>6</number>
863     - </property>
864     - <property name="spacing">
865     - <number>6</number>
866     - </property>
867     - <widget class="QLabel" row="0" column="0">
868     + <widget class="QGroupBox">
869     <property name="name">
870     - <cstring>textLabel1</cstring>
871     + <cstring>smpppdPrefs</cstring>
872     </property>
873     - <property name="text">
874     - <string>&amp;Server:</string>
875     + <property name="enabled">
876     + <bool>false</bool>
877     </property>
878     - <property name="buddy" stdset="0">
879     - <cstring>server</cstring>
880     + <property name="title">
881     + <string>Location of the SMPPPD</string>
882     </property>
883     - </widget>
884     - <widget class="KLineEdit" row="5" column="0">
885     - <property name="name">
886     - <cstring>Password</cstring>
887     - </property>
888     - <property name="cursor">
889     - <cursor>4</cursor>
890     - </property>
891     - <property name="echoMode">
892     - <enum>Password</enum>
893     - </property>
894     - <property name="toolTip" stdset="0">
895     - <string>The password to authenticate with the smpppd</string>
896     - </property>
897     - </widget>
898     - <widget class="QLayoutWidget" row="3" column="0">
899     - <property name="name">
900     - <cstring>layout14</cstring>
901     - </property>
902     - <hbox>
903     + <vbox>
904     <property name="name">
905     <cstring>unnamed</cstring>
906     </property>
907     - <widget class="KIntNumInput">
908     + <property name="margin">
909     + <number>6</number>
910     + </property>
911     + <property name="spacing">
912     + <number>6</number>
913     + </property>
914     + <widget class="SMPPPDLocationWidget">
915     <property name="name">
916     - <cstring>port</cstring>
917     + <cstring>SMPPPDLocation</cstring>
918     </property>
919     - <property name="cursor">
920     - <cursor>4</cursor>
921     - </property>
922     - <property name="value">
923     - <number>3185</number>
924     - </property>
925     - <property name="minValue">
926     - <number>0</number>
927     - </property>
928     - <property name="toolTip" stdset="0">
929     - <string>The port on which the SMPPPD is running on</string>
930     - </property>
931     </widget>
932     - <widget class="QLabel">
933     - <property name="name">
934     - <cstring>textLabel3</cstring>
935     - </property>
936     - <property name="text">
937     - <string>Default: 3185</string>
938     - </property>
939     - </widget>
940     - <spacer>
941     - <property name="name">
942     - <cstring>spacer15</cstring>
943     - </property>
944     - <property name="orientation">
945     - <enum>Horizontal</enum>
946     - </property>
947     - <property name="sizeType">
948     - <enum>Expanding</enum>
949     - </property>
950     - <property name="sizeHint">
951     - <size>
952     - <width>130</width>
953     - <height>20</height>
954     - </size>
955     - </property>
956     - </spacer>
957     - </hbox>
958     + </vbox>
959     </widget>
960     - <widget class="KLineEdit" row="1" column="0">
961     + <spacer>
962     <property name="name">
963     - <cstring>server</cstring>
964     + <cstring>spacer18</cstring>
965     </property>
966     - <property name="cursor">
967     - <cursor>4</cursor>
968     + <property name="orientation">
969     + <enum>Vertical</enum>
970     </property>
971     - <property name="text">
972     - <string>localhost</string>
973     + <property name="sizeType">
974     + <enum>Expanding</enum>
975     </property>
976     - <property name="maxLength">
977     - <number>256</number>
978     + <property name="sizeHint">
979     + <size>
980     + <width>20</width>
981     + <height>20</height>
982     + </size>
983     </property>
984     - <property name="toolTip" stdset="0">
985     - <string>The server on which the SMPPPD is running</string>
986     - </property>
987     - </widget>
988     - <widget class="QLabel" row="4" column="0">
989     - <property name="name">
990     - <cstring>m_passwordLabel</cstring>
991     - </property>
992     - <property name="text">
993     - <string>&amp;Password:</string>
994     - </property>
995     - <property name="buddy" stdset="0">
996     - <cstring>Password</cstring>
997     - </property>
998     - </widget>
999     - <widget class="QLabel" row="2" column="0">
1000     - <property name="name">
1001     - <cstring>textLabel2</cstring>
1002     - </property>
1003     - <property name="text">
1004     - <string>P&amp;ort:</string>
1005     - </property>
1006     - <property name="buddy" stdset="0">
1007     - <cstring>port</cstring>
1008     - </property>
1009     - </widget>
1010     - </grid>
1011     + </spacer>
1012     + </vbox>
1013     </widget>
1014     - <spacer>
1015     - <property name="name">
1016     - <cstring>spacer18</cstring>
1017     - </property>
1018     - <property name="orientation">
1019     - <enum>Vertical</enum>
1020     - </property>
1021     - <property name="sizeType">
1022     - <enum>Expanding</enum>
1023     - </property>
1024     - <property name="sizeHint">
1025     - <size>
1026     - <width>20</width>
1027     - <height>30</height>
1028     - </size>
1029     - </property>
1030     - </spacer>
1031     </vbox>
1032     </widget>
1033     <widget class="QWidget">
1034     @@ -285,7 +184,7 @@
1035     <cstring>tab</cstring>
1036     </property>
1037     <attribute name="title">
1038     - <string>&amp;Accounts</string>
1039     + <string>Acco&amp;unts</string>
1040     </attribute>
1041     <vbox>
1042     <property name="name">
1043     @@ -347,24 +246,39 @@
1044     </vbox>
1045     </widget>
1046     <customwidgets>
1047     + <customwidget>
1048     + <class>SMPPPDLocationWidget</class>
1049     + <header location="global">/usr/src/build/zxmpl18/kdesvn/kdenetwork/kopete/plugins/smpppdcs/config/smpppdlocationwidget.h</header>
1050     + <sizehint>
1051     + <width>16</width>
1052     + <height>16</height>
1053     + </sizehint>
1054     + <container>1</container>
1055     + <sizepolicy>
1056     + <hordata>5</hordata>
1057     + <verdata>5</verdata>
1058     + <horstretch>0</horstretch>
1059     + <verstretch>0</verstretch>
1060     + </sizepolicy>
1061     + <pixmap>image0</pixmap>
1062     + </customwidget>
1063     </customwidgets>
1064     +<images>
1065     + <image name="image0">
1066     + <data format="PNG" length="1125">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000042c49444154388db5954f6c14551cc73fefcd7476b65bdaae4bb78bb5502a14d404e4801c88182d1c4c2c693da847400f9c24c68b878684238660e2b1e01f12c19493012ef2478c814412d354a46017a8a564bb6da5bbedccee767776e63d0ffb073751d483bfe49799974c3eeffb7ebf37df9fd05a530b2184040cc0042420aaf9a4d0d554800f045a6b256ae0e1e1e1d6bebebe838ee31c48a7d39b5cd7fd075e251cc7617272f2ded8d8d819cff33e0316819259537aead4a9839d5dd6d1784f91f55b0a94830242088404d304292bef68a89f520802a598fecddaa04f1a876f5c250c7c0a64cdeac686e33807e23d45e6b297c8b877f1831542614550b6599835c83c2a81b6786a75134faf2f1169f12997350881d9021d0903e06de0745d3160a6d3e94dbd5b0a64dcbb94b5831d0e3375ab892b1772dcf9790528543f8dd0d367b36768153b5e31503a0f1aecb004580b44ffac58baae8b1714f0833c7638cc8dab303a320f4822ab4c7a37c69196203de3319d5ce1c4d13c733331dedc67a129a154fd128401ab0616d55a130ac3d42d93d1913940d13fd0c9ee0183685c60da01c5421bd72f7a8c8efccef9afd374267ad93d642365be0636a0d28ec7600941d9e6f23917f0e97f23ce5bef35d19ec863da0ed9059b2be70bec196c66dfa10ec0e49b338f7017258651bf95021035c595429bb0903248fe52a2b5b595dd7b4d945cc2340cdca536be389ee3f67886c5798f773fe8e0dac508c989659277a2180da4ca4ff07821058b8b251445d63d6b13ed1098a6417e39cac85197dbe31962ab9bd9f1f22a226d45366f6d0620fdb08c900d281af6110284b20085b414861d905d88f2e52739ee8cbb8022143259d3dd84691730aa2d52da441a8de0c6958068870022a41e9629ad3473fd3b8fdbe319dadb9b4924da994d2d716c7896fbe35152f78b48245d6b2da4507faf582be8eaf159b721cc837b05ae7debb1f79d08cb8b515edad942a22bc4b1c33eb3d34b1c797f06af90a72d16e2f96d9a74aa11dca8586b222d01af0fb60070f6c402d72f15d97f28c6f6d7027a5f5ce6c3233dc4e2ede496b278be4fff608cee8d3e1add806aeca51094cbb06397c1ecc328e746537c7e3ccdb5cb1136bf60635882d4d41c6ec6836ab37efa214f72208ed9f4d7cdd38ee310280542e38b1c43fb6de26b3672e1ec3cc99bcb246f66a938a3241ab3e91f7c861fbf77710b1e5e49915bae974203ba0e9e9c9cbc373d6d6d305a040a89c2a77f50b27d5782bbbf7acccf28349235dd16cf6dd374f7295e1de8a45c02d37499182b01cc0201a085d61a2144d8b2ac8fb6ed340e77240c4261890e04c250185262546d534a032154b59e0ad394e41c98182bf268ce6721ed9f064e0253356f6da2e24c1f030f783c15fe6da680af8021602bd051532ca9b8521488559f61aa86c29343578fbf0264a94c906c7d3409214c20043457a116ff6de6795578012889ff6b98fe016ea0ce1c6a2573410000000049454e44ae426082</data>
1067     + </image>
1068     +</images>
1069     <tabstops>
1070     <tabstop>tabWidget</tabstop>
1071     <tabstop>useNetstat</tabstop>
1072     <tabstop>autoCSTest</tabstop>
1073     - <tabstop>server</tabstop>
1074     - <tabstop>port</tabstop>
1075     - <tabstop>Password</tabstop>
1076     <tabstop>useSmpppd</tabstop>
1077     <tabstop>accountList</tabstop>
1078     </tabstops>
1079     <layoutdefaults spacing="0" margin="0"/>
1080     <includehints>
1081     <includehint>kpushbutton.h</includehint>
1082     - <includehint>klineedit.h</includehint>
1083     - <includehint>knuminput.h</includehint>
1084     - <includehint>knuminput.h</includehint>
1085     - <includehint>klineedit.h</includehint>
1086     + <includehint>smpppdlocationwidget.h</includehint>
1087     <includehint>klistview.h</includehint>
1088     </includehints>
1089     </UI>
1090     --- kopete/plugins/smpppdcs/config/smpppdlocationui.ui (revision 0)
1091     +++ kopete/plugins/smpppdcs/config/smpppdlocationui.ui (revision 495340)
1092     @@ -0,0 +1,149 @@
1093     +<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
1094     +<class>SMPPPDLocationWidgetBase</class>
1095     +<widget class="QWidget">
1096     + <property name="name">
1097     + <cstring>SMPPPDLocationWidgetBase</cstring>
1098     + </property>
1099     + <property name="geometry">
1100     + <rect>
1101     + <x>0</x>
1102     + <y>0</y>
1103     + <width>365</width>
1104     + <height>167</height>
1105     + </rect>
1106     + </property>
1107     + <property name="caption">
1108     + <string>SMPPPDLocation</string>
1109     + </property>
1110     + <vbox>
1111     + <property name="name">
1112     + <cstring>unnamed</cstring>
1113     + </property>
1114     + <widget class="QLabel">
1115     + <property name="name">
1116     + <cstring>textLabel1</cstring>
1117     + </property>
1118     + <property name="text">
1119     + <string>Ser&amp;ver:</string>
1120     + </property>
1121     + <property name="buddy" stdset="0">
1122     + <cstring>server</cstring>
1123     + </property>
1124     + </widget>
1125     + <widget class="KLineEdit">
1126     + <property name="name">
1127     + <cstring>server</cstring>
1128     + </property>
1129     + <property name="cursor">
1130     + <cursor>4</cursor>
1131     + </property>
1132     + <property name="text">
1133     + <string>localhost</string>
1134     + </property>
1135     + <property name="maxLength">
1136     + <number>256</number>
1137     + </property>
1138     + <property name="toolTip" stdset="0">
1139     + <string>The server on which the SMPPPD is running</string>
1140     + </property>
1141     + </widget>
1142     + <widget class="QLabel">
1143     + <property name="name">
1144     + <cstring>textLabel2</cstring>
1145     + </property>
1146     + <property name="text">
1147     + <string>P&amp;ort:</string>
1148     + </property>
1149     + <property name="buddy" stdset="0">
1150     + <cstring>port</cstring>
1151     + </property>
1152     + </widget>
1153     + <widget class="QLayoutWidget">
1154     + <property name="name">
1155     + <cstring>layout14</cstring>
1156     + </property>
1157     + <hbox>
1158     + <property name="name">
1159     + <cstring>unnamed</cstring>
1160     + </property>
1161     + <widget class="KIntNumInput">
1162     + <property name="name">
1163     + <cstring>port</cstring>
1164     + </property>
1165     + <property name="cursor">
1166     + <cursor>4</cursor>
1167     + </property>
1168     + <property name="value">
1169     + <number>3185</number>
1170     + </property>
1171     + <property name="minValue">
1172     + <number>0</number>
1173     + </property>
1174     + <property name="toolTip" stdset="0">
1175     + <string>The port on which the SMPPPD is running on</string>
1176     + </property>
1177     + </widget>
1178     + <widget class="QLabel">
1179     + <property name="name">
1180     + <cstring>textLabel3</cstring>
1181     + </property>
1182     + <property name="text">
1183     + <string>Default: 3185</string>
1184     + </property>
1185     + </widget>
1186     + <spacer>
1187     + <property name="name">
1188     + <cstring>spacer15</cstring>
1189     + </property>
1190     + <property name="orientation">
1191     + <enum>Horizontal</enum>
1192     + </property>
1193     + <property name="sizeType">
1194     + <enum>Expanding</enum>
1195     + </property>
1196     + <property name="sizeHint">
1197     + <size>
1198     + <width>130</width>
1199     + <height>20</height>
1200     + </size>
1201     + </property>
1202     + </spacer>
1203     + </hbox>
1204     + </widget>
1205     + <widget class="QLabel">
1206     + <property name="name">
1207     + <cstring>m_passwordLabel</cstring>
1208     + </property>
1209     + <property name="text">
1210     + <string>Pass&amp;word:</string>
1211     + </property>
1212     + <property name="buddy" stdset="0">
1213     + <cstring>Password</cstring>
1214     + </property>
1215     + </widget>
1216     + <widget class="KLineEdit">
1217     + <property name="name">
1218     + <cstring>Password</cstring>
1219     + </property>
1220     + <property name="cursor">
1221     + <cursor>4</cursor>
1222     + </property>
1223     + <property name="echoMode">
1224     + <enum>Password</enum>
1225     + </property>
1226     + <property name="toolTip" stdset="0">
1227     + <string>The password to authenticate with the smpppd</string>
1228     + </property>
1229     + </widget>
1230     + </vbox>
1231     +</widget>
1232     +<customwidgets>
1233     +</customwidgets>
1234     +<layoutdefaults spacing="6" margin="0"/>
1235     +<includehints>
1236     + <includehint>klineedit.h</includehint>
1237     + <includehint>knuminput.h</includehint>
1238     + <includehint>knuminput.h</includehint>
1239     + <includehint>klineedit.h</includehint>
1240     +</includehints>
1241     +</UI>
1242     --- kopete/plugins/smpppdcs/config/smpppdlocationwidget.h (revision 0)
1243     +++ kopete/plugins/smpppdcs/config/smpppdlocationwidget.h (revision 495340)
1244     @@ -0,0 +1,40 @@
1245     +/*
1246     + smpppdlocationwidget.h
1247     +
1248     + Copyright (c) 2004-2006 by Heiko Schaefer <heiko@rangun.de>
1249     +
1250     + Kopete (c) 2002-2006 by the Kopete developers <kopete-devel@kde.org>
1251     +
1252     + *************************************************************************
1253     + * *
1254     + * This program is free software; you can redistribute it and/or modify *
1255     + * it under the terms of the GNU General Public License as published by *
1256     + * the Free Software Foundation; version 2 of the License. *
1257     + * *
1258     + *************************************************************************
1259     +*/
1260     +
1261     +#ifndef SMPPPDLOCATIONWIDGET_H
1262     +#define SMPPPDLOCATIONWIDGET_H
1263     +
1264     +#include "smpppdlocationui.h"
1265     +
1266     +/**
1267     + @author Heiko Sch&auml;fer <heiko@rangun.de>
1268     +*/
1269     +class SMPPPDLocationWidget : public SMPPPDLocationWidgetBase
1270     +{
1271     + Q_OBJECT
1272     +
1273     + SMPPPDLocationWidget(const SMPPPDLocationWidget&);
1274     + SMPPPDLocationWidget& operator=(const SMPPPDLocationWidget&);
1275     +
1276     +public:
1277     + SMPPPDLocationWidget(QWidget* parent = 0, const char* name = 0, WFlags fl = 0);
1278     + ~SMPPPDLocationWidget();
1279     +
1280     + void setServer(const QString& serv);
1281     +
1282     +};
1283     +
1284     +#endif
1285     --- kopete/plugins/smpppdcs/config/smpppdsearcher.h (revision 488948)
1286     +++ kopete/plugins/smpppdcs/config/smpppdsearcher.h (revision 495340)
1287     @@ -1,9 +1,9 @@
1288     /*
1289     smpppdsearcher.h
1290    
1291     - Copyright (c) 2004-2005 by Heiko Schaefer <heiko@rangun.de>
1292     + Copyright (c) 2004-2006 by Heiko Schaefer <heiko@rangun.de>
1293    
1294     - Kopete (c) 2002-2005 by the Kopete developers <kopete-devel@kde.org>
1295     + Kopete (c) 2002-2006 by the Kopete developers <kopete-devel@kde.org>
1296    
1297     *************************************************************************
1298     * *
1299     @@ -18,16 +18,15 @@
1300     #ifndef SMPPPDSEARCHER_H
1301     #define SMPPPDSEARCHER_H
1302    
1303     -#include <qobject.h>
1304     +#include <kresolver.h>
1305    
1306     class KProcess;
1307     -class KExtendedSocket;
1308    
1309     /**
1310     * @brief Searches a network for a smpppd
1311     *
1312     * @todo Use of the SLP to find the smpppd
1313     - * @author Heiko Schaefer <heiko@rangun.de>
1314     + * @author Heiko Sch&auml;fer <heiko@rangun.de>
1315     */
1316     class SMPPPDSearcher : public QObject {
1317     Q_OBJECT
1318     @@ -52,6 +51,8 @@
1319     * @see smpppdNotFound
1320     */
1321     void searchNetwork();
1322     +
1323     + void cancelSearch();
1324    
1325     protected:
1326     /**
1327     @@ -86,16 +87,24 @@
1328     * @brief No smpppd was found
1329     */
1330     void smpppdNotFound();
1331     +
1332     + void scanStarted(uint total);
1333     + void scanProgress(uint cur);
1334     + void scanFinished();
1335    
1336     protected slots:
1337     void slotStdoutReceivedIfconfig(KProcess * proc, char * buf, int len);
1338     void slotStdoutReceivedNetstat (KProcess * proc, char * buf, int len);
1339    
1340     private:
1341     - KProcess * m_procIfconfig;
1342     - KProcess * m_procNetstat;
1343     - KExtendedSocket * m_sock;
1344     + bool m_cancelSearchNow;
1345     + KProcess * m_procIfconfig;
1346     + KProcess * m_procNetstat;
1347     };
1348    
1349     +inline void SMPPPDSearcher::cancelSearch() {
1350     + m_cancelSearchNow = TRUE;
1351     +}
1352     +
1353     #endif
1354    
1355     --- kopete/plugins/smpppdcs/config/Makefile.am (revision 488948)
1356     +++ kopete/plugins/smpppdcs/config/Makefile.am (revision 495340)
1357     @@ -5,10 +5,10 @@
1358     kde_module_LTLIBRARIES = kcm_kopete_smpppdcs.la
1359    
1360     kcm_kopete_smpppdcs_la_SOURCES = smpppdcsprefs.ui smpppdcspreferences.cpp \
1361     - smpppdsearcher.cpp smpppdcsprefsimpl.cpp
1362     + smpppdsearcher.cpp smpppdcsprefsimpl.cpp smpppdlocationui.ui smpppdlocationwidget.cpp
1363     kcm_kopete_smpppdcs_la_LDFLAGS = -module -no-undefined $(KDE_PLUGIN) $(all_libraries)
1364     kcm_kopete_smpppdcs_la_LIBADD = ../../../libkopete/libkopete.la $(LIB_KUTILS)
1365    
1366     kcm_DATA = kopete_smpppdcs_config.desktop
1367     kcmdir = $(kde_servicesdir)/kconfiguredialog
1368     -noinst_HEADERS = smpppdsearcher.h smpppdcsprefsimpl.h
1369     +noinst_HEADERS = smpppdsearcher.h smpppdcsprefsimpl.h smpppdlocationwidget.h
1370     --- kopete/plugins/smpppdcs/config/smpppdcspreferences.cpp (revision 488948)
1371     +++ kopete/plugins/smpppdcs/config/smpppdcspreferences.cpp (revision 495340)
1372     @@ -1,9 +1,9 @@
1373     /*
1374     smpppdcspreferences.cpp
1375    
1376     - Copyright (c) 2004-2005 by Heiko Schaefer <heiko@rangun.de>
1377     + Copyright (c) 2004-2006 by Heiko Schaefer <heiko@rangun.de>
1378    
1379     - Kopete (c) 2002-2005 by the Kopete developers <kopete-devel@kde.org>
1380     + Kopete (c) 2002-2006 by the Kopete developers <kopete-devel@kde.org>
1381    
1382     *************************************************************************
1383     * *
1384     --- kopete/plugins/smpppdcs/config/smpppdcsprefsimpl.cpp (revision 488948)
1385     +++ kopete/plugins/smpppdcs/config/smpppdcsprefsimpl.cpp (revision 495340)
1386     @@ -1,9 +1,9 @@
1387     /*
1388     smpppdcsprefsimpl.cpp
1389    
1390     - Copyright (c) 2004 by Heiko Schaefer <heiko@rangun.de>
1391     + Copyright (c) 2004-2006 by Heiko Schaefer <heiko@rangun.de>
1392    
1393     - Kopete (c) 2002-2004 by the Kopete developers <kopete-devel@kde.org>
1394     + Kopete (c) 2002-2006 by the Kopete developers <kopete-devel@kde.org>
1395    
1396     *************************************************************************
1397     * *
1398     @@ -14,64 +14,137 @@
1399     *************************************************************************
1400     */
1401    
1402     -#include <qlabel.h>
1403     -#include <qlayout.h>
1404     -#include <qcursor.h>
1405     -#include <qgroupbox.h>
1406     +#include <arpa/inet.h>
1407     +#include <netdb.h>
1408     +
1409     #include <qradiobutton.h>
1410    
1411     +#include <kstandarddirs.h>
1412     #include <kapplication.h>
1413     #include <kpushbutton.h>
1414     +#include <kresolver.h>
1415     +#include <knuminput.h>
1416     +#include <klocale.h>
1417     #include <kdebug.h>
1418    
1419     +#include "smpppdlocationwidget.h"
1420     #include "smpppdcsprefsimpl.h"
1421     #include "smpppdsearcher.h"
1422    
1423     SMPPPDCSPrefs::SMPPPDCSPrefs(QWidget* parent, const char* name, WFlags fl)
1424     - : SMPPPDCSPrefsBase(parent, name, fl) {
1425     -
1426     - // signals and slots connections
1427     - connect( useNetstat, SIGNAL( toggled(bool) ), this, SLOT( disableSMPPPDSettings() ) );
1428     - connect( useSmpppd, SIGNAL( toggled(bool) ), this, SLOT( enableSMPPPDSettings() ) );
1429     - connect( autoCSTest, SIGNAL( clicked() ), this, SLOT( determineCSType() ) );
1430     -}
1431     + : SMPPPDCSPrefsBase(parent, name, fl), m_scanProgressDlg(NULL), m_curSearcher(NULL) {
1432    
1433     -SMPPPDCSPrefs::~SMPPPDCSPrefs() {}
1434     + // signals and slots connections
1435     + connect(useNetstat, SIGNAL(toggled(bool)), this, SLOT(disableSMPPPDSettings()));
1436     + connect(useSmpppd, SIGNAL(toggled(bool)), this, SLOT(enableSMPPPDSettings()));
1437     + connect(autoCSTest, SIGNAL(clicked()), this, SLOT(determineCSType()));
1438    
1439     -void SMPPPDCSPrefs::enableSMPPPDSettings() {
1440     - smpppdPrefs->setEnabled(true);
1441     + // if netstat is NOT available, disable the option and set to SMPPPD
1442     + if(KStandardDirs::findExe("netstat") == QString::null) {
1443     + autoCSTest->setEnabled(FALSE);
1444     + useNetstat->setEnabled(FALSE);
1445     + useNetstat->setChecked(FALSE);
1446     + useSmpppd->setChecked(TRUE);
1447     + }
1448     }
1449    
1450     -void SMPPPDCSPrefs::disableSMPPPDSettings() {
1451     - smpppdPrefs->setEnabled(false);
1452     +SMPPPDCSPrefs::~SMPPPDCSPrefs() {
1453     + delete m_scanProgressDlg;
1454     }
1455    
1456     void SMPPPDCSPrefs::determineCSType() {
1457    
1458     - // while we search, we'll disable the button
1459     - autoCSTest->setEnabled(false);
1460     - qApp->processEvents();
1461     -
1462     + // while we search, we'll disable the button
1463     + autoCSTest->setEnabled(false);
1464     + //kapp->processEvents();
1465     +
1466     /* broadcast network for a smpppd.
1467     If one is available set to smpppd method */
1468     -
1469     - SMPPPDSearcher searcher;
1470     - connect(&searcher, SIGNAL(smpppdFound(const QString&)), this, SLOT(smpppdFound(const QString&)));
1471     - connect(&searcher, SIGNAL(smpppdNotFound()), this, SLOT(smpppdNotFound()));
1472     - searcher.searchNetwork();
1473     +
1474     + SMPPPDSearcher searcher;
1475     + m_curSearcher = &searcher;
1476     +
1477     + connect(&searcher, SIGNAL(smpppdFound(const QString&)), this, SLOT(smpppdFound(const QString&)));
1478     + connect(&searcher, SIGNAL(smpppdNotFound()), this, SLOT(smpppdNotFound()));
1479     + connect(&searcher, SIGNAL(scanStarted(uint)), this, SLOT(scanStarted(uint)));
1480     + connect(&searcher, SIGNAL(scanProgress(uint)), this, SLOT(scanProgress(uint)));
1481     + connect(&searcher, SIGNAL(scanFinished()), this, SLOT(scanFinished()));
1482     +
1483     + searcher.searchNetwork();
1484     + m_curSearcher = NULL;
1485     }
1486    
1487     +void SMPPPDCSPrefs::scanStarted(uint total) {
1488     + kdDebug(14312) << k_funcinfo << "Scanning for a SMPPPD started. Will scan " << total << " IPs" << endl;
1489     +
1490     + // setup the scanProgress Dialog
1491     + if(!m_scanProgressDlg) {
1492     + m_scanProgressDlg = new KProgressDialog(this, 0, i18n("Searching"), i18n("Searching for a SMPPPD on the local network..."), TRUE);
1493     + m_scanProgressDlg->setAutoClose(TRUE);
1494     + m_scanProgressDlg->setAllowCancel(TRUE);
1495     + m_scanProgressDlg->setMinimumDuration(2000);
1496     +
1497     + connect(m_scanProgressDlg, SIGNAL(cancelClicked()), this, SLOT(cancelScanning()));
1498     + }
1499     + m_scanProgressDlg->progressBar()->setTotalSteps(total);
1500     + m_scanProgressDlg->progressBar()->setProgress(0);
1501     + m_scanProgressDlg->show();
1502     +}
1503     +
1504     +void SMPPPDCSPrefs::scanProgress(uint cur) {
1505     + m_scanProgressDlg->progressBar()->setProgress(cur);
1506     + kapp->processEvents();
1507     +}
1508     +
1509     +void SMPPPDCSPrefs::cancelScanning() {
1510     + kdDebug(14312) << k_funcinfo << endl;
1511     + Q_ASSERT(m_curSearcher);
1512     + m_curSearcher->cancelSearch();
1513     +}
1514     +
1515     void SMPPPDCSPrefs::smpppdFound(const QString& host) {
1516     - kdDebug(14312) << k_funcinfo << endl;
1517     - server->setText(host);
1518     - useSmpppd->setChecked(true);
1519     - autoCSTest->setEnabled(true);
1520     + kdDebug(14312) << k_funcinfo << endl;
1521     +
1522     + QString myHost = host;
1523     +
1524     + // try to get the domain name
1525     + struct in_addr addr;
1526     + if(inet_aton(host.ascii(), &addr)) {
1527     + struct hostent * hostEnt = gethostbyaddr(&addr.s_addr, sizeof(addr.s_addr), AF_INET);
1528     + if(hostEnt) {
1529     + myHost = hostEnt->h_name;
1530     + } else {
1531     +#ifndef NDEBUG
1532     + switch(h_errno) {
1533     + case HOST_NOT_FOUND:
1534     + kdDebug(14312) << k_funcinfo << "No such host is known in the database." << endl;
1535     + break;
1536     + case TRY_AGAIN:
1537     + kdDebug(14312) << k_funcinfo << "Couldn't contact DNS server." << endl;
1538     + break;
1539     + case NO_RECOVERY:
1540     + kdDebug(14312) << k_funcinfo << "A non-recoverable error occurred." << endl;
1541     + break;
1542     + case NO_ADDRESS:
1543     + kdDebug(14312) << k_funcinfo << "The host database contains an entry for the name, but it doesn't have an associated Internet address." << endl;
1544     + break;
1545     + }
1546     +#endif
1547     +
1548     + }
1549     + }
1550     +
1551     + SMPPPDLocation->setServer(myHost);
1552     + useNetstat->setChecked(false);
1553     + useSmpppd->setChecked(true);
1554     + autoCSTest->setEnabled(true);
1555     }
1556    
1557     void SMPPPDCSPrefs::smpppdNotFound() {
1558     - kdDebug(14312) << k_funcinfo << endl;
1559     - useNetstat->setChecked(true);
1560     - autoCSTest->setEnabled(true);
1561     + kdDebug(14312) << k_funcinfo << endl;
1562     + useNetstat->setChecked(true);
1563     + useSmpppd->setChecked(false);
1564     + autoCSTest->setEnabled(true);
1565     }
1566    
1567     #include "smpppdcsprefsimpl.moc"
1568     --- kopete/plugins/smpppdcs/onlineinquiry.cpp (revision 488948)
1569     +++ kopete/plugins/smpppdcs/onlineinquiry.cpp (revision 495340)
1570     @@ -1,9 +1,9 @@
1571     /*
1572     onlineinquiry.cpp
1573    
1574     - Copyright (c) 2005 by Heiko Schaefer <heiko@rangun.de>
1575     + Copyright (c) 2005-2006 by Heiko Schaefer <heiko@rangun.de>
1576    
1577     - Kopete (c) 2002-2005 by the Kopete developers <kopete-devel@kde.org>
1578     + Kopete (c) 2002-2006 by the Kopete developers <kopete-devel@kde.org>
1579    
1580     *************************************************************************
1581     * *
1582     @@ -17,25 +17,25 @@
1583     #include "detector.h"
1584     #include "onlineinquiry.h"
1585    
1586     -OnlineInquiry::OnlineInquiry()
1587     - : m_detector(NULL), m_online(FALSE) {
1588     - m_detector = new Detector(this);
1589     +OnlineInquiry::OnlineInquiry()
1590     + : m_detector(NULL), m_online(FALSE) {
1591     + m_detector = new Detector(this);
1592     }
1593    
1594     OnlineInquiry::~OnlineInquiry() {
1595     - delete m_detector;
1596     + delete m_detector;
1597     }
1598    
1599     -bool OnlineInquiry::isOnline(bool useSMPPPD) {
1600     - if(useSMPPPD) {
1601     - m_detector->smpppdCheckStatus();
1602     - } else {
1603     - m_detector->netstatCheckStatus();
1604     - }
1605     +bool OnlineInquiry::isOnline(bool useSMPPPD) {
1606     + if(useSMPPPD) {
1607     + m_detector->smpppdCheckStatus();
1608     + } else {
1609     + m_detector->netstatCheckStatus();
1610     + }
1611    
1612     - return m_online;
1613     + return m_online;
1614     }
1615    
1616     -void OnlineInquiry::setConnectedStatus(bool newStatus) {
1617     - m_online = newStatus;
1618     +void OnlineInquiry::setConnectedStatus(bool newStatus) {
1619     + m_online = newStatus;
1620     }
1621     --- kopete/plugins/smpppdcs/smpppdcsiface.h (revision 488948)
1622     +++ kopete/plugins/smpppdcs/smpppdcsiface.h (revision 495340)
1623     @@ -1,9 +1,9 @@
1624     /*
1625     smpppdcsiface.h
1626    
1627     - Copyright (c) 2005 by Heiko Schaefer <heiko@rangun.de>
1628     + Copyright (c) 2005-2006 by Heiko Schaefer <heiko@rangun.de>
1629    
1630     - Kopete (c) 2002-2005 by the Kopete developers <kopete-devel@kde.org>
1631     + Kopete (c) 2002-2006 by the Kopete developers <kopete-devel@kde.org>
1632    
1633     *************************************************************************
1634     * *
1635     @@ -19,6 +19,10 @@
1636    
1637     #include <dcopobject.h>
1638    
1639     +/**
1640     + * @author Heiko Sch&auml;fer <heiko@rangun.de>
1641     + */
1642     +
1643     class SMPPPDCSIFace : virtual public DCOPObject
1644     {
1645     K_DCOP
1646     --- kopete/plugins/smpppdcs/kopete_smpppdcs.desktop (revision 488948)
1647     +++ kopete/plugins/smpppdcs/kopete_smpppdcs.desktop (revision 495340)
1648     @@ -8,7 +8,7 @@
1649     X-KDE-PluginInfo-Author=Heiko Schäfer
1650     X-KDE-PluginInfo-Email=heiko@rangun.de
1651     X-KDE-PluginInfo-Name=kopete_smpppdcs
1652     -X-KDE-PluginInfo-Version=0.72
1653     +X-KDE-PluginInfo-Version=0.75
1654     X-KDE-PluginInfo-Website=http://www.rangun.de
1655     X-KDE-PluginInfo-Category=Plugins
1656     X-KDE-PluginInfo-Depends=
1657     --- kopete/plugins/smpppdcs/iconnector.h (revision 488948)
1658     +++ kopete/plugins/smpppdcs/iconnector.h (revision 495340)
1659     @@ -1,9 +1,9 @@
1660     /*
1661     iconnector.h
1662    
1663     - Copyright (c) 2005 by Heiko Schaefer <heiko@rangun.de>
1664     + Copyright (c) 2005-2006 by Heiko Schaefer <heiko@rangun.de>
1665    
1666     - Kopete (c) 2002-2005 by the Kopete developers <kopete-devel@kde.org>
1667     + Kopete (c) 2002-2006 by the Kopete developers <kopete-devel@kde.org>
1668    
1669     *************************************************************************
1670     * *
1671     --- kopete/plugins/smpppdcs/smpppdcsplugin.cpp (revision 488948)
1672     +++ kopete/plugins/smpppdcs/smpppdcsplugin.cpp (revision 495340)
1673     @@ -3,9 +3,9 @@
1674    
1675     Copyright (c) 2002-2003 by Chris Howells <howells@kde.org>
1676     Copyright (c) 2003 by Martijn Klingens <klingens@kde.org>
1677     - Copyright (c) 2004-2005 by Heiko Schaefer <heiko@rangun.de>
1678     + Copyright (c) 2004-2006 by Heiko Schaefer <heiko@rangun.de>
1679    
1680     - Kopete (c) 2002-2005 by the Kopete developers <kopete-devel@kde.org>
1681     + Kopete (c) 2002-2006 by the Kopete developers <kopete-devel@kde.org>
1682    
1683     *************************************************************************
1684     * *
1685     @@ -49,15 +49,12 @@
1686    
1687     m_onlineInquiry = new OnlineInquiry();
1688     m_detector = new Detector(this);
1689     - connect(m_detector, SIGNAL(retryRequested()), this, SLOT(slotCheckStatus()));
1690     }
1691    
1692     SMPPPDCSPlugin::~SMPPPDCSPlugin() {
1693    
1694     kdDebug(14312) << k_funcinfo << endl;
1695    
1696     - disconnect(m_detector, SIGNAL(retryRequested()), this, SLOT(slotCheckStatus()));
1697     -
1698     delete m_timer;
1699     delete m_detector;
1700     delete m_onlineInquiry;
1701     --- kopete/plugins/smpppdcs/detector.cpp (revision 488948)
1702     +++ kopete/plugins/smpppdcs/detector.cpp (revision 495340)
1703     @@ -1,10 +1,10 @@
1704     /*
1705     detector.cpp
1706     -
1707     - Copyright (c) 2005 by Heiko Schaefer <heiko@rangun.de>
1708    
1709     - Kopete (c) 2002-2005 by the Kopete developers <kopete-devel@kde.org>
1710     + Copyright (c) 2005-2006 by Heiko Schaefer <heiko@rangun.de>
1711    
1712     + Kopete (c) 2002-2006 by the Kopete developers <kopete-devel@kde.org>
1713     +
1714     *************************************************************************
1715     * *
1716     * This program is free software; you can redistribute it and/or modify *
1717     @@ -20,9 +20,9 @@
1718     #include <kglobal.h>
1719     #include <kconfig.h>
1720     #include <kprocess.h>
1721     -#include <kextsock.h>
1722     #include <dcopclient.h>
1723     #include <kapplication.h>
1724     +#include <kstreamsocket.h>
1725    
1726     #include <cstdlib>
1727     #include <openssl/md5.h>
1728     @@ -32,33 +32,33 @@
1729    
1730     QCString Detector::m_kinternetApp = "";
1731    
1732     -Detector::Detector(IConnector * connector)
1733     - : m_comState(READY), m_client(NULL), m_sock(NULL), m_connector(connector), m_process(NULL) {}
1734     +Detector::Detector(IConnector * connector)
1735     + : m_comState(READY), m_client(NULL), m_sock(NULL), m_connector(connector), m_process(NULL) {}
1736    
1737     Detector::~Detector() {
1738    
1739     - if(m_sock) {
1740     - m_sock->flush();
1741     - m_sock->closeNow();
1742     - }
1743     + if(m_sock) {
1744     + m_sock->flush();
1745     + m_sock->close();
1746     + }
1747    
1748     - delete m_process;
1749     - delete m_sock;
1750     + delete m_process;
1751     + delete m_sock;
1752     }
1753    
1754     -void Detector::slotProcessExited( KProcess *process ) {
1755     - if ( process == m_process ) {
1756     +void Detector::slotProcessExited(KProcess *process) {
1757     + if(process == m_process) {
1758     delete m_process;
1759     m_process = 0L;
1760     }
1761     }
1762    
1763     -void Detector::slotProcessStdout( KProcess *, char *buffer, int buflen ) {
1764     +void Detector::slotProcessStdout(KProcess *, char *buffer, int buflen) {
1765     // Look for a default gateway
1766     kdDebug(14312) << k_funcinfo << endl;
1767     - QString qsBuffer = QString::fromLatin1( buffer, buflen );
1768     + QString qsBuffer = QString::fromLatin1(buffer, buflen);
1769     kdDebug(14312) << qsBuffer << endl;
1770     - m_connector->setConnectedStatus( qsBuffer.contains( "default" ) );
1771     + m_connector->setConnectedStatus(qsBuffer.contains("default"));
1772     }
1773    
1774     /*!
1775     @@ -67,8 +67,8 @@
1776     void Detector::netstatCheckStatus() {
1777     kdDebug(14312) << k_funcinfo << endl;
1778    
1779     - if ( m_process ) {
1780     - kdWarning( 0 ) << k_funcinfo << "Previous netstat process is still running!" << endl
1781     + if(m_process) {
1782     + kdWarning(14312) << k_funcinfo << "Previous netstat process is still running!" << endl
1783     << "Not starting new netstat. Perhaps your system is under heavy load?" << endl;
1784    
1785     return;
1786     @@ -80,11 +80,11 @@
1787     m_process = new KProcess;
1788     *m_process << "netstat" << "-r";
1789    
1790     - connect( m_process, SIGNAL( receivedStdout( KProcess *, char *, int ) ), this, SLOT( slotProcessStdout( KProcess *, char *, int ) ) );
1791     - connect( m_process, SIGNAL( processExited( KProcess * ) ), this, SLOT( slotProcessExited( KProcess * ) ) );
1792     + connect(m_process, SIGNAL(receivedStdout(KProcess *, char *, int)), this, SLOT(slotProcessStdout( KProcess *, char *, int)));
1793     + connect(m_process, SIGNAL(processExited(KProcess *)), this, SLOT(slotProcessExited(KProcess *)));
1794    
1795     - if ( !m_process->start( KProcess::NotifyOnExit, KProcess::Stdout ) ) {
1796     - kdWarning( 0 ) << k_funcinfo << "Unable to start netstat process!" << endl;
1797     + if(!m_process->start(KProcess::NotifyOnExit, KProcess::Stdout)) {
1798     + kdWarning(14312) << k_funcinfo << "Unable to start netstat process!" << endl;
1799    
1800     delete m_process;
1801     m_process = 0L;
1802     @@ -96,56 +96,56 @@
1803     */
1804     void Detector::smpppdCheckStatus() {
1805    
1806     - // get dcop client object and attach to it
1807     - m_client = kapp->dcopClient();
1808     - if(m_kinternetApp.isEmpty() && m_client && m_client->isAttached()) {
1809     - // get all registered dcop apps and search for kinternet
1810     - QCStringList apps = m_client->registeredApplications();
1811     - QCStringList::iterator iter;
1812     - for(iter = apps.begin(); iter != apps.end(); ++iter) {
1813     - if((*iter).left(9) == "kinternet") {
1814     - m_kinternetApp = *iter;
1815     - break;
1816     - }
1817     - }
1818     - }
1819     + // get dcop client object and attach to it
1820     + m_client = kapp->dcopClient();
1821     + if(m_kinternetApp.isEmpty() && m_client && m_client->isAttached()) {
1822     + // get all registered dcop apps and search for kinternet
1823     + QCStringList apps = m_client->registeredApplications();
1824     + QCStringList::iterator iter;
1825     + for(iter = apps.begin(); iter != apps.end(); ++iter) {
1826     + if((*iter).left(9) == "kinternet") {
1827     + m_kinternetApp = *iter;
1828     + break;
1829     + }
1830     + }
1831     + }
1832    
1833     // we try to inquire an running kinternet
1834     - if(!m_kinternetApp.isEmpty() && m_client) {
1835     - QByteArray data, replyData;
1836     - QCString replyType;
1837     - QDataStream arg(data, IO_WriteOnly);
1838     -
1839     - kdDebug(14312) << k_funcinfo << "Start inquiring " << m_kinternetApp << " via DCOP" << endl;
1840     -
1841     - if(!m_client->call(m_kinternetApp, "KInternetIface", "isOnline()", data, replyType, replyData)) {
1842     - kdDebug(14312) << k_funcinfo << "there was some error using DCOP." << endl;
1843     - } else {
1844     - QDataStream reply(replyData, IO_ReadOnly);
1845     - if(replyType == "bool") {
1846     - bool result;
1847     - reply >> result;
1848     - m_connector->setConnectedStatus(result);
1849     - return;
1850     - } else {
1851     - kdDebug(14312) << k_funcinfo << "isOnline() returned an unexpected type of reply!" << endl;
1852     - }
1853     - }
1854     - }
1855     + if(!m_kinternetApp.isEmpty() && m_client) {
1856     + QByteArray data, replyData;
1857     + QCString replyType;
1858     + QDataStream arg(data, IO_WriteOnly);
1859    
1860     + kdDebug(14312) << k_funcinfo << "Start inquiring " << m_kinternetApp << " via DCOP" << endl;
1861     +
1862     + if(!m_client->call(m_kinternetApp, "KInternetIface", "isOnline()", data, replyType, replyData)) {
1863     + kdDebug(14312) << k_funcinfo << "there was some error using DCOP." << endl;
1864     + } else {
1865     + QDataStream reply(replyData, IO_ReadOnly);
1866     + if(replyType == "bool") {
1867     + bool result;
1868     + reply >> result;
1869     + m_connector->setConnectedStatus(result);
1870     + return;
1871     + } else {
1872     + kdDebug(14312) << k_funcinfo << "isOnline() returned an unexpected type of reply!" << endl;
1873     + }
1874     + }
1875     + }
1876     +
1877     static KConfig *config = KGlobal::config();
1878     config->setGroup(SMPPPDCS_CONFIG_GROUP);
1879     QString pass = config->readEntry("Password", "").utf8();
1880    
1881     - if(m_sock &&
1882     - m_sock->socketStatus() == KExtendedSocket::connected) {
1883     + if(m_sock &&
1884     + m_sock->state() == KNetwork::KStreamSocket::Connected) {
1885    
1886     bool isConnected = false;
1887     QString challenge = "";
1888     QRegExp ver("^SuSE Meta pppd \\(smpppd\\), Version (.*)$");
1889    
1890     while(m_comState != STATUSIFCFG &&
1891     - m_comState != UNSETTLED) {
1892     + m_comState != UNSETTLED) {
1893     switch(m_comState) {
1894     case READY: {
1895    
1896     @@ -203,9 +203,11 @@
1897     }
1898    
1899     } else {
1900     + disconnectFromSMPPPD();
1901     kdDebug(14312) << k_funcinfo << "unexpected reply from smpppd" << endl;
1902     }
1903     } else {
1904     + disconnectFromSMPPPD();
1905     kdDebug(14312) << k_funcinfo << "smpppd doesn't seem to understand me" << endl;
1906     }
1907     m_comState = LISTIFCFG;
1908     @@ -225,11 +227,13 @@
1909     }
1910     }
1911    
1912     +#ifndef NDEBUG
1913     if(isConnected) {
1914     kdDebug(14312) << k_funcinfo << "we are CONNECTED to the internet" << endl;
1915     } else {
1916     kdDebug(14312) << k_funcinfo << "we are DISCONNECTED from the internet" << endl;
1917     }
1918     +#endif
1919    
1920     m_comState = STATUSIFCFG;
1921     }
1922     @@ -243,54 +247,46 @@
1923     if(m_comState != UNSETTLED) {
1924     m_comState = SMPPPDSETTLED;
1925     m_connector->setConnectedStatus(isConnected);
1926     -
1927     +
1928     }
1929    
1930     } else {
1931     - kdDebug(14312) << k_funcinfo << "not connected to smpppd => I try again" << endl;
1932     + kdDebug(14312) << k_funcinfo << "not connected to smpppd => I'll try again later" << endl;
1933     m_connector->setConnectedStatus(false);
1934     - connectToSMPPPD();
1935     - emit retryRequested();
1936     + connectToSMPPPD();
1937     }
1938     }
1939    
1940     +void Detector::disconnectFromSMPPPD() {
1941     + kdDebug(14312) << k_funcinfo << endl;
1942     + delete m_sock;
1943     + m_sock = NULL;
1944     + m_comState = READY;
1945     +}
1946     +
1947     /*!
1948     \fn Detector::connectToSMPPPD()
1949     */
1950     void Detector::connectToSMPPPD() {
1951    
1952     if(!m_sock ||
1953     - m_sock->socketStatus() != KExtendedSocket::connected ||
1954     - m_sock->socketStatus() != KExtendedSocket::connecting) {
1955     + m_sock->state() != KNetwork::KStreamSocket::Connected ||
1956     + m_sock->state() != KNetwork::KStreamSocket::Connecting) {
1957    
1958     static KConfig *config = KGlobal::config();
1959     config->setGroup(SMPPPDCS_CONFIG_GROUP);
1960     unsigned int port = config->readUnsignedNumEntry("port", 3185);
1961     QString server = config->readEntry("server", "localhost").utf8();
1962    
1963     - delete m_sock;
1964     - m_sock = NULL;
1965     - m_comState = READY;
1966     - m_sock = new KExtendedSocket(server, port, KExtendedSocket::inetSocket);
1967     + disconnectFromSMPPPD();
1968     + m_sock = new KNetwork::KStreamSocket(server, QString::number(port));
1969     + m_sock->setBlocking(TRUE);
1970    
1971     - kdDebug(14312) << k_funcinfo << "connect to smpppd \"" << server << ":" << port << "\"" << endl;
1972     -
1973     - switch(m_sock->connect()) {
1974     - case 0:
1975     - kdDebug(14312) << k_funcinfo << "connected to smpppd \"" << server << ":" << port << "\"" << endl;
1976     - break;
1977     - case -1:
1978     - kdDebug(14312) << k_funcinfo << "system error" << endl;
1979     - break;
1980     - case -2:
1981     - kdDebug(14312) << k_funcinfo << "this socket cannot connect(); this is a passiveSocket" << endl;
1982     - break;
1983     - case -3:
1984     - kdDebug(14312) << k_funcinfo << "connection timed out" << endl;
1985     - break;
1986     - default:
1987     - kdDebug(14312) << k_funcinfo << "unknown error" << endl;
1988     - break;
1989     + if(!m_sock->connect()) {
1990     + kdDebug(14312) << k_funcinfo << "Socket Error: " << KNetwork::KStreamSocket::errorString(m_sock->error()) << endl;
1991     + } else {
1992     + kdDebug(14312) << k_funcinfo << "Successfully connected to smpppd \"" << server << ":" << port << "\"" << endl;
1993     + smpppdCheckStatus();
1994     }
1995     }
1996     }
1997     --- kopete/plugins/smpppdcs/onlineinquiry.h (revision 488948)
1998     +++ kopete/plugins/smpppdcs/onlineinquiry.h (revision 495340)
1999     @@ -1,9 +1,9 @@
2000     /*
2001     onlineinquiry.h
2002    
2003     - Copyright (c) 2005 by Heiko Schaefer <heiko@rangun.de>
2004     + Copyright (c) 2005-2006 by Heiko Schaefer <heiko@rangun.de>
2005    
2006     - Kopete (c) 2002-2005 by the Kopete developers <kopete-devel@kde.org>
2007     + Kopete (c) 2002-2006 by the Kopete developers <kopete-devel@kde.org>
2008    
2009     *************************************************************************
2010     * *
2011     @@ -21,6 +21,10 @@
2012    
2013     class Detector;
2014    
2015     +/**
2016     + * @author Heiko Sch&auml;fer <heiko@rangun.de>
2017     + */
2018     +
2019     class OnlineInquiry : public IConnector {
2020     OnlineInquiry(const OnlineInquiry&);
2021     OnlineInquiry& operator=(const OnlineInquiry&);
2022     --- kopete/plugins/smpppdcs/smpppdcsplugin.h (revision 488948)
2023     +++ kopete/plugins/smpppdcs/smpppdcsplugin.h (revision 495340)
2024     @@ -3,9 +3,9 @@
2025    
2026     Copyright (c) 2002-2003 by Chris Howells <howells@kde.org>
2027     Copyright (c) 2003 by Martijn Klingens <klingens@kde.org>
2028     - Copyright (c) 2004-2005 by Heiko Schaefer <heiko@rangun.de>
2029     + Copyright (c) 2004-2006 by Heiko Schaefer <heiko@rangun.de>
2030    
2031     - Kopete (c) 2002-2005 by the Kopete developers <kopete-devel@kde.org>
2032     + Kopete (c) 2002-2006 by the Kopete developers <kopete-devel@kde.org>
2033    
2034     *************************************************************************
2035     * *
2036     --- kopete/plugins/history/historydialog.cpp (revision 488948)
2037     +++ kopete/plugins/history/historydialog.cpp (revision 495340)
2038     @@ -452,7 +452,7 @@
2039     mSearch->item = 0;
2040     mSearch->foundPrevious = false;
2041    
2042     - initProgressBar(i18n("Searching ..."), mMainWidget->dateListView->childCount() );
2043     + initProgressBar(i18n("Searching..."), mMainWidget->dateListView->childCount() );
2044     mMainWidget->searchButton->setText(i18n("&Cancel"));
2045    
2046     mSearch->item = static_cast<KListViewDateItem*>(mMainWidget->dateListView->firstChild());
2047     --- kopete/plugins/history/historyprefsui.ui (revision 488948)
2048     +++ kopete/plugins/history/historyprefsui.ui (revision 495340)
2049     @@ -39,7 +39,7 @@
2050     <string>Number of messages per page:</string>
2051     </property>
2052     <property name="whatsThis" stdset="0">
2053     - <string>The number of message that are shown when borwsing history in the chat window</string>
2054     + <string>The number of messages that are shown when browsing history in the chat window</string>
2055     </property>
2056     </widget>
2057     <widget class="KIntSpinBox" row="3" column="1">
2058     @@ -105,7 +105,7 @@
2059     <number>7</number>
2060     </property>
2061     <property name="whatsThis" stdset="0">
2062     - <string>This is the number of messages that will be added automatically in the what window when opening a new chat</string>
2063     + <string>This is the number of messages that will be added automatically in the chat window when opening a new chat.</string>
2064     </property>
2065     </widget>
2066     <widget class="QLabel" row="1" column="0">
2067     @@ -119,7 +119,7 @@
2068     <cstring>Number_Auto_chatwindow</cstring>
2069     </property>
2070     <property name="whatsThis" stdset="0">
2071     - <string>This is the number of messages that will be added automatically in the what window when opening a new chat</string>
2072     + <string>This is the number of messages that will be added automatically in the chat window when opening a new chat.</string>
2073     </property>
2074     </widget>
2075     <widget class="QCheckBox" row="0" column="0" rowspan="1" colspan="2">
2076     @@ -133,7 +133,7 @@
2077     <bool>true</bool>
2078     </property>
2079     <property name="whatsThis" stdset="0">
2080     - <string>When a new chat is open, automatically add the few last message you had with that contact.</string>
2081     + <string>When a new chat is opened, automatically add the last few messages between you and that contact.</string>
2082     </property>
2083     </widget>
2084     </grid>
2085     --- kopete/protocols/yahoo/kopete_yahoo.desktop (revision 488948)
2086     +++ kopete/protocols/yahoo/kopete_yahoo.desktop (revision 495340)
2087     @@ -39,7 +39,7 @@
2088     Comment[hi]=से जुड़ने का प्रोटोकॉल
2089     Comment[hr]=Protokol za povezivanje na Yahoo
2090     Comment[hu]=Protokoll a Yahoo-hoz való csatlakozáshoz
2091     -Comment[is]=Protocol til að tengjast Yahoo
2092     +Comment[is]=Samskiptamáti til að tengjast Yahoo
2093     Comment[it]=Protocollo per connessione a Yahoo
2094     Comment[ja]=Yahooに接続するプロトコル
2095     Comment[lt]=Protokolas prisijungimui prie Yahoo
2096     --- kopete/protocols/yahoo/kyahoo.cpp (revision 488948)
2097     +++ kopete/protocols/yahoo/kyahoo.cpp (revision 495340)
2098     @@ -1105,7 +1105,7 @@
2099    
2100     if( written != read )
2101     {
2102     - kdDebug(14181) << k_funcinfo << "An error occured while sending the file: " << socket->error() << " transmitted: " << uploadData->transmitted << endl;
2103     + kdDebug(14181) << k_funcinfo << "An error occurred while sending the file: " << socket->error() << " transmitted: " << uploadData->transmitted << endl;
2104     if( uploadData->reportSuccess )
2105     KMessageBox::queuedMessageBox(Kopete::UI::Global::mainWidget(), KMessageBox::Error, i18n("An error occured while sending the file: %1").arg( socket->error() ) );
2106     uploadData->file.close();
2107     --- kopete/protocols/yahoo/yahoocontact.cpp (revision 488948)
2108     +++ kopete/protocols/yahoo/yahoocontact.cpp (revision 495340)
2109     @@ -499,7 +499,7 @@
2110     {
2111     KMessageBox::queuedMessageBox(
2112     Kopete::UI::Global::mainWidget(), KMessageBox::Error,
2113     - i18n("I cannot find the jasper image convert program.\njasper is required to render the yahoo webcam images.\nPlease go to %1").arg( "http://www.ece.uvic.ca/~mdadams/jasper/")
2114     + i18n("Jasper image conversion program not found.\njasper is required to render the Yahoo webcam images.\nPlease go to %1").arg( "http://www.ece.uvic.ca/~mdadams/jasper/")
2115     );
2116     return;
2117     }
2118     --- kopete/protocols/yahoo/yahooaccount.cpp (revision 488948)
2119     +++ kopete/protocols/yahoo/yahooaccount.cpp (revision 495340)
2120     @@ -681,7 +681,8 @@
2121     kc->removeProperty( m_protocol->awayMessage );
2122    
2123     if( newStatus != static_cast<YahooProtocol*>( m_protocol )->Offline &&
2124     - oldStatus == static_cast<YahooProtocol*>( m_protocol )->Offline && contact(who) != myself() )
2125     + oldStatus == static_cast<YahooProtocol*>( m_protocol )->Offline && contact(who) != myself() &&
2126     + myself()->onlineStatus() != m_protocol->Invisible )
2127     {
2128     m_session->requestBuddyIcon( who ); // Try to get Buddy Icon
2129    
2130     --- kopete/protocols/yahoo/ui/yahoowebcamdialog.cpp (revision 488948)
2131     +++ kopete/protocols/yahoo/ui/yahoowebcamdialog.cpp (revision 495340)
2132     @@ -77,7 +77,7 @@
2133     case 1:
2134     closeReason = i18n( "%1 has stopped broadcasting" ).arg( contactName ); break;
2135     case 2:
2136     - closeReason = i18n( "%1 has cancelled viewing permission" ).arg( contactName ); break;
2137     + closeReason = i18n( "%1 has canceled viewing permission" ).arg( contactName ); break;
2138     case 3:
2139     closeReason = i18n( "%1 has declined permission to view webcam" ).arg( contactName ); break;
2140     case 4:
2141     --- kopete/protocols/winpopup/kopete_wp.desktop (revision 488948)
2142     +++ kopete/protocols/winpopup/kopete_wp.desktop (revision 495340)
2143     @@ -45,7 +45,7 @@
2144     Comment[hi]=विंडोज़ विन-पॉपअप मैसेंजर भेजने का प्रोटोकॉल
2145     Comment[hr]=Protokol za slanje Windows WinPopup poruka
2146     Comment[hu]=Protokoll Windows felbukkanó üzenetek küldéséhez
2147     -Comment[is]=Protocol til að senda Windows WinPopup skeyti
2148     +Comment[is]=Samskiptamáti til að senda Windows WinPopup skeyti
2149     Comment[it]=Protocollo per inviare messaggi Windows WinPopup
2150     Comment[ja]=WindowsのWinPopupメッセージを送るプロトコル
2151     Comment[lt]=Protokolas Windows iššokančių žinučių siuntimui
2152     --- kopete/protocols/winpopup/config/kopete_wp_config.desktop (revision 488948)
2153     +++ kopete/protocols/winpopup/config/kopete_wp_config.desktop (revision 495340)
2154     @@ -64,7 +64,7 @@
2155     Comment[cs]=Odesílání Microsoft "WinPopup"
2156     Comment[cy]=Negesydd Ffenestr "WinPopup" Microsoft
2157     Comment[de]=Microsoft "WinPopup"-Nachrichtendienst
2158     -Comment[es]=Mensajería instantánea "WinPopup" de Microsoft
2159     +Comment[es]=Mensajería instantánea «WinPopup» de Microsoft
2160     Comment[et]=Microsofti "WinPopup" hüpik-teateaknad
2161     Comment[eu]=Microsoft "WinPopup" leiho mezularia
2162     Comment[fi]=Microsoft "WinPopup"-ikkunaviestin
2163     --- kopete/protocols/groupwise/kopete_groupwise.desktop (revision 488948)
2164     +++ kopete/protocols/groupwise/kopete_groupwise.desktop (revision 495340)
2165     @@ -26,6 +26,7 @@
2166     Comment[fi]=Novell GroupWise -viestijä
2167     Comment[fr]=Messagerie GroupWise Novell
2168     Comment[he]=תוכנת המסרים של נובל GroupWise
2169     +Comment[is]=Novell GroupWise skilaboðaþjónustan
2170     Comment[it]=Messaggistica per gruppi di Novell
2171     Comment[ja]=Novell GroupWiseメッセンジャ
2172     Comment[lt]=Novell GroupWise žinučių klientas
2173     --- kopete/protocols/jabber/libiris/iris/jabber/s5b.cpp (revision 488948)
2174     +++ kopete/protocols/jabber/libiris/iris/jabber/s5b.cpp (revision 495340)
2175     @@ -18,6 +18,8 @@
2176     *
2177     */
2178    
2179     +#include <config.h>
2180     +
2181     #include"s5b.h"
2182    
2183     #include<qtimer.h>
2184     @@ -32,6 +34,9 @@
2185     #ifdef Q_OS_WIN
2186     # include <windows.h>
2187     #else
2188     +# ifdef HAVE_SYS_TYPES_H
2189     +# include <sys/types.h>
2190     +# endif
2191     # include <netinet/in.h>
2192     #endif
2193    
2194     --- kopete/protocols/jabber/kioslave/jabberdisco.protocol (revision 488948)
2195     +++ kopete/protocols/jabber/kioslave/jabberdisco.protocol (revision 495340)
2196     @@ -20,6 +20,7 @@
2197     Description[eu]=Jabber aurkikuntza zerbitzureako KIO morroi bat
2198     Description[fr]=Un module d'entrée / sortie pour la recherche de service Jabber
2199     Description[gl]=Un KIO slave para Jabber Service Discovery
2200     +Description[hu]=KDE-protokoll a Jabber szolgáltatáskereső használatához
2201     Description[is]=kioslave fyrir Jabber þjónustu uppgötvun
2202     Description[it]=Un KIO slave per il servizio di discovery per jabber
2203     Description[ja]=Jabber Service Discovery のKIOスレーブ
2204     --- kopete/protocols/jabber/jabbercontact.cpp (revision 488948)
2205     +++ kopete/protocols/jabber/jabbercontact.cpp (revision 495340)
2206     @@ -473,6 +473,10 @@
2207     if ( task->success () )
2208     {
2209     setProperty ( protocol()->propLastSeen, QDateTime::currentDateTime().addSecs ( -task->seconds () ) );
2210     + if( !task->message().isEmpty() )
2211     + {
2212     + setProperty( protocol()->propAwayMessage, task->message() );
2213     + }
2214     }
2215    
2216     }
2217     --- kopete/protocols/jabber/jabberaccount.cpp (revision 488948)
2218     +++ kopete/protocols/jabber/jabberaccount.cpp (revision 495340)
2219     @@ -99,6 +99,12 @@
2220    
2221     m_jabberClient = 0L;
2222    
2223     + delete m_resourcePool;
2224     + m_resourcePool = 0L;
2225     +
2226     + delete m_contactPool;
2227     + m_contactPool = 0L;
2228     +
2229     }
2230    
2231     void JabberAccount::setS5BServerPort ( int port )
2232     --- kopete/protocols/jabber/ui/jabberregisteraccount.cpp (revision 488948)
2233     +++ kopete/protocols/jabber/ui/jabberregisteraccount.cpp (revision 495340)
2234     @@ -81,7 +81,7 @@
2235     mMainWidget->leServer->setText ( parent->mServer->text () );
2236     mMainWidget->leJID->setText ( parent->mID->text () );
2237     mMainWidget->lePassword->setText ( parent->mPass->password () );
2238     - mMainWidget->lePasswordVerify->setText ( parent->mPass->password () );
2239     + // mMainWidget->lePasswordVerify->setText ( parent->mPass->password () ); //BUG 114631
2240     mMainWidget->sbPort->setValue ( parent->mPort->value () );
2241     mMainWidget->cbUseSSL->setChecked ( parent->cbUseSSL->isChecked () );
2242    
2243     --- kopete/protocols/oscar/oscarlistnonservercontacts.cpp (revision 488948)
2244     +++ kopete/protocols/oscar/oscarlistnonservercontacts.cpp (revision 495340)
2245     @@ -21,6 +21,7 @@
2246     #include "oscarlistnonservercontacts.h"
2247     #include "oscarlistcontactsbase.h"
2248     #include <qstringlist.h>
2249     +#include <qcheckbox.h>
2250     #include <klocale.h>
2251    
2252     OscarListNonServerContacts::OscarListNonServerContacts(QWidget* parent)
2253     @@ -49,6 +50,10 @@
2254     return m_nonServerContacts;
2255     }
2256    
2257     +bool OscarListNonServerContacts::onlyShowOnce()
2258     +{
2259     + return m_contactsList->doNotShowAgain->isChecked();
2260     +}
2261    
2262    
2263     void OscarListNonServerContacts::slotCancel()
2264     --- kopete/protocols/oscar/oscarlistnonservercontacts.h (revision 488948)
2265     +++ kopete/protocols/oscar/oscarlistnonservercontacts.h (revision 495340)
2266     @@ -35,6 +35,8 @@
2267     void addContacts( const QStringList& contactList );
2268     QStringList nonServerContactList() const;
2269    
2270     + bool onlyShowOnce();
2271     +
2272     protected:
2273     virtual void slotOk();
2274     virtual void slotCancel();
2275     --- kopete/protocols/oscar/liboscar/userdetails.cpp (revision 488948)
2276     +++ kopete/protocols/oscar/liboscar/userdetails.cpp (revision 495340)
2277     @@ -45,6 +45,16 @@
2278     m_dcLastInfoUpdateTime = 0;
2279     m_dcLastExtInfoUpdateTime = 0;
2280     m_dcLastExtStatusUpdateTime = 0;
2281     + m_userClassSpecified = false;
2282     + m_memberSinceSpecified = false;
2283     + m_onlineSinceSpecified = false;
2284     + m_numSecondsOnlineSpecified = false;
2285     + m_idleTimeSpecified = false;
2286     + m_extendedStatusSpecified = false;
2287     + m_capabilitiesSpecified = false;
2288     + m_dcOutsideSpecified = false;
2289     + m_dcInsideSpecified = false;
2290     + m_iconSpecified = false;
2291     }
2292    
2293    
2294     @@ -141,6 +151,7 @@
2295     {
2296     case 0x0001: //user class
2297     m_userClass = b.getWord();
2298     + m_userClassSpecified = true;
2299     #ifdef OSCAR_USERINFO_DEBUG
2300     kdDebug(OSCAR_RAW_DEBUG) << k_funcinfo << "User class is " << m_userClass << endl;
2301     #endif
2302     @@ -148,12 +159,14 @@
2303     case 0x0002: //member since
2304     case 0x0005: //member since
2305     m_memberSince.setTime_t( b.getDWord() );
2306     + m_memberSinceSpecified = true;
2307     #ifdef OSCAR_USERINFO_DEBUG
2308     kdDebug(OSCAR_RAW_DEBUG) << k_funcinfo << "Member since " << m_memberSince << endl;
2309     #endif
2310     break;
2311     case 0x0003: //sigon time
2312     m_onlineSince.setTime_t( b.getDWord() );
2313     + m_onlineSinceSpecified = true;
2314     #ifdef OSCAR_USERINFO_DEBUG
2315     kdDebug(OSCAR_RAW_DEBUG) << k_funcinfo << "Signed on at " << m_onlineSince << endl;
2316     #endif
2317     @@ -161,17 +174,20 @@
2318     case 0x0004: //idle time
2319     m_idleTime = b.getWord() * 60;
2320     #ifdef OSCAR_USERINFO_DEBUG
2321     + m_idleTimeSpecified = true;
2322     kdDebug(OSCAR_RAW_DEBUG) << k_funcinfo << "Idle time is " << m_idleTime << endl;
2323     #endif
2324     break;
2325     case 0x0006: //extended user status
2326     m_extendedStatus = b.getDWord();
2327     + m_extendedStatusSpecified = true;
2328     #ifdef OSCAR_USERINFO_DEBUG
2329     kdDebug(OSCAR_RAW_DEBUG) << k_funcinfo << "Extended status is " << QString::number( m_extendedStatus, 16 ) << endl;
2330     #endif
2331     break;
2332     case 0x000A: //external IP address
2333     m_dcOutsideIp = KNetwork::KIpAddress( ntohl( b.getDWord() ) );
2334     + m_dcOutsideSpecified = true;
2335     #ifdef OSCAR_USERINFO_DEBUG
2336     kdDebug(OSCAR_RAW_DEBUG) << k_funcinfo << "External IP address is " << m_dcOutsideIp.toString() << endl;
2337     #endif
2338     @@ -192,16 +208,19 @@
2339     m_dcLastExtInfoUpdateTime = b.getDWord();
2340     m_dcLastExtStatusUpdateTime = b.getDWord();
2341     b.getWord(); //unknown.
2342     + m_dcInsideSpecified = true;
2343     #ifdef OSCAR_USERINFO_DEBUG
2344     kdDebug(OSCAR_RAW_DEBUG) << k_funcinfo << "Got DC info" << endl;
2345     #endif
2346     break;
2347     case 0x000D: //capability info
2348     m_capabilities = Oscar::parseCapabilities( b, m_clientVersion );
2349     + m_capabilitiesSpecified = true;
2350     break;
2351     case 0x0010:
2352     case 0x000F: //online time
2353     m_numSecondsOnline = b.getDWord();
2354     + m_numSecondsOnlineSpecified = true;
2355     #ifdef OSCAR_USERINFO_DEBUG
2356     kdDebug(OSCAR_RAW_DEBUG) << k_funcinfo << "Online for " << m_numSecondsOnline << endl;
2357     #endif
2358     @@ -229,6 +248,7 @@
2359     {
2360     m_iconChecksumType = number;
2361     m_md5IconHash.duplicate( b.getBlock( length ), length );
2362     + m_iconSpecified = true;
2363     #ifdef OSCAR_USERINFO_DEBUG
2364     kdDebug(OSCAR_RAW_DEBUG) << k_funcinfo << "checksum:" << m_md5IconHash << endl;
2365     #endif
2366     @@ -273,7 +293,8 @@
2367     }
2368    
2369     //do client detection on fill
2370     - detectClient();
2371     + if ( m_capabilitiesSpecified )
2372     + detectClient();
2373     }
2374    
2375     void UserDetails::detectClient()
2376     @@ -452,4 +473,73 @@
2377     return capPresent;
2378     }
2379    
2380     +void UserDetails::merge( const UserDetails& ud )
2381     +{
2382     + m_userId = ud.m_userId;
2383     + m_warningLevel = ud.m_warningLevel;
2384     + if ( ud.m_userClassSpecified )
2385     + {
2386     + m_userClass = ud.m_userClass;
2387     + m_userClassSpecified = true;
2388     + }
2389     + if ( ud.m_memberSinceSpecified )
2390     + {
2391     + m_memberSince = ud.m_memberSince;
2392     + m_memberSinceSpecified = true;
2393     + }
2394     + if ( ud.m_onlineSinceSpecified )
2395     + {
2396     + m_onlineSince = ud.m_onlineSince;
2397     + m_onlineSinceSpecified = true;
2398     + }
2399     + if ( ud.m_numSecondsOnlineSpecified )
2400     + {
2401     + m_numSecondsOnline = ud.m_numSecondsOnline;
2402     + m_numSecondsOnlineSpecified = true;
2403     + }
2404     + if ( ud.m_idleTimeSpecified )
2405     + {
2406     + m_idleTime = ud.m_idleTime;
2407     + m_idleTimeSpecified = true;
2408     + }
2409     + if ( ud.m_extendedStatusSpecified )
2410     + {
2411     + m_extendedStatus = ud.m_extendedStatus;
2412     + m_extendedStatusSpecified = true;
2413     + }
2414     + if ( ud.m_capabilitiesSpecified )
2415     + {
2416     + m_capabilities = ud.m_capabilities;
2417     + m_clientVersion = ud.m_clientVersion;
2418     + m_clientName = ud.m_clientName;
2419     + m_capabilitiesSpecified = true;
2420     + }
2421     + if ( ud.m_dcOutsideSpecified )
2422     + {
2423     + m_dcOutsideIp = ud.m_dcOutsideIp;
2424     + m_dcOutsideSpecified = true;
2425     + }
2426     + if ( ud.m_dcInsideSpecified )
2427     + {
2428     + m_dcInsideIp = ud.m_dcInsideIp;
2429     + m_dcPort = ud.m_dcPort;
2430     + m_dcType = ud.m_dcType;
2431     + m_dcProtoVersion = ud.m_dcProtoVersion;
2432     + m_dcAuthCookie = ud.m_dcAuthCookie;
2433     + m_dcWebFrontPort = ud.m_dcWebFrontPort;
2434     + m_dcClientFeatures = ud.m_dcClientFeatures;
2435     + m_dcLastInfoUpdateTime = ud.m_dcLastInfoUpdateTime;
2436     + m_dcLastExtInfoUpdateTime = ud.m_dcLastExtInfoUpdateTime;
2437     + m_dcLastExtStatusUpdateTime = ud.m_dcLastExtStatusUpdateTime;
2438     + m_dcInsideSpecified = true;
2439     + }
2440     + if ( ud.m_iconSpecified )
2441     + {
2442     + m_iconChecksumType = ud.m_iconChecksumType;
2443     + m_md5IconHash = ud.m_md5IconHash;
2444     + m_iconSpecified = true;
2445     + }
2446     + m_availableMessage = ud.m_availableMessage;
2447     +}
2448     +
2449     //kate: tab-width 4; indent-mode csands;
2450     --- kopete/protocols/oscar/liboscar/coreprotocol.cpp (revision 488948)
2451     +++ kopete/protocols/oscar/liboscar/coreprotocol.cpp (revision 495340)
2452     @@ -194,19 +194,19 @@
2453     return bytesParsed;
2454     }
2455    
2456     - m_din = new QDataStream( wire, IO_ReadOnly );
2457     + QDataStream din( wire, IO_ReadOnly );
2458    
2459     // look at first four bytes and decide what to do with the chunk
2460     - if ( okToProceed() )
2461     + if ( okToProceed( din ) )
2462     {
2463     - *m_din >> flapStart;
2464     + din >> flapStart;
2465     QByteArray packet;
2466     packet.duplicate( wire );
2467     if ( flapStart == 0x2A )
2468     {
2469     - *m_din >> flapChannel;
2470     - *m_din >> flapLength; //discard the first one it's not really the flap length
2471     - *m_din >> flapLength;
2472     + din >> flapChannel;
2473     + din >> flapLength; //discard the first one it's not really the flap length
2474     + din >> flapLength;
2475     if ( wire.size() < flapLength )
2476     {
2477     kdDebug(OSCAR_RAW_DEBUG) << k_funcinfo
2478     @@ -231,8 +231,8 @@
2479    
2480     if ( flapChannel == 2 )
2481     {
2482     - *m_din >> s1;
2483     - *m_din >> s2;
2484     + din >> s1;
2485     + din >> s2;
2486    
2487     Transfer * t = m_snacProtocol->parse( packet, bytesParsed );
2488     if ( t )
2489     @@ -256,7 +256,6 @@
2490     }
2491    
2492     }
2493     - delete m_din;
2494     return bytesParsed;
2495     }
2496    
2497     @@ -270,19 +269,16 @@
2498     kdDebug(OSCAR_RAW_DEBUG) << out.data() << endl;
2499     }
2500    
2501     -bool CoreProtocol::okToProceed()
2502     +bool CoreProtocol::okToProceed( const QDataStream &din )
2503     {
2504     - if ( m_din )
2505     + if ( din.atEnd() )
2506     {
2507     - if ( m_din->atEnd() )
2508     - {
2509     - m_state = NeedMore;
2510     - kdDebug(OSCAR_RAW_DEBUG) << k_funcinfo << "Server message ended prematurely!" << endl;
2511     - }
2512     - else
2513     - return true;
2514     + m_state = NeedMore;
2515     + kdDebug(OSCAR_RAW_DEBUG) << k_funcinfo << "Server message ended prematurely!" << endl;
2516     + return false;
2517     }
2518     - return false;
2519     + else
2520     + return true;
2521     }
2522    
2523     #include "coreprotocol.moc"
2524     --- kopete/protocols/oscar/liboscar/coreprotocol.h (revision 488948)
2525     +++ kopete/protocols/oscar/liboscar/coreprotocol.h (revision 495340)
2526     @@ -87,7 +87,7 @@
2527     /**
2528     * Check that there is data to read, and set the protocol's state if there isn't any.
2529     */
2530     - bool okToProceed();
2531     + bool okToProceed( const QDataStream &din );
2532     /**
2533     * Convert incoming wire data into a Transfer object and queue it
2534     * @return number of bytes from the input that were parsed into a Transfer
2535     @@ -96,7 +96,6 @@
2536    
2537     private:
2538     QByteArray m_in; // buffer containing unprocessed bytes we received
2539     - QDataStream* m_din; // contains the packet currently being parsed
2540     int m_error;
2541     Transfer* m_inTransfer; // the transfer that is being received
2542     int m_state; // represents the protocol's overall state
2543     --- kopete/protocols/oscar/liboscar/client.cpp (revision 488948)
2544     +++ kopete/protocols/oscar/liboscar/client.cpp (revision 495340)
2545     @@ -485,8 +485,8 @@
2546     if ( msg.hasProperty( Oscar::Message::AutoResponse ) )
2547     {
2548     // we got a response to a status message request.
2549     - kdDebug( OSCAR_RAW_DEBUG ) << k_funcinfo << "Received an away message: " << msg.text() << endl;
2550     - emit receivedAwayMessage( msg.sender(), msg.text() );
2551     + kdDebug( OSCAR_RAW_DEBUG ) << k_funcinfo << "Received an away message." << endl;
2552     + emit receivedAwayMessage( msg );
2553     }
2554     }
2555     else
2556     --- kopete/protocols/oscar/liboscar/offlinemessagestask.cpp (revision 488948)
2557     +++ kopete/protocols/oscar/liboscar/offlinemessagestask.cpp (revision 495340)
2558     @@ -127,7 +127,12 @@
2559     time = time.addSecs( tz );
2560    
2561     QDateTime hackyTime( date, time );
2562     - Oscar::Message message( msg.data(), type, flags, hackyTime );
2563     + Oscar::Message message;
2564     + message.setType( type );
2565     + message.addProperty( flags );
2566     + message.addProperty( Oscar::Message::NotDecoded );
2567     + message.setTextArray( msg );
2568     + message.setTimestamp( hackyTime );
2569     message.setSender( QString::number( senderUin ) );
2570     message.setReceiver( QString::number( receiverUin ) );
2571    
2572     --- kopete/protocols/oscar/liboscar/client.h (revision 488948)
2573     +++ kopete/protocols/oscar/liboscar/client.h (revision 495340)
2574     @@ -375,6 +375,7 @@
2575    
2576     void receivedProfile( const QString& contact, const QString& profile );
2577     void receivedAwayMessage( const QString& contact, const QString& message );
2578     + void receivedAwayMessage( const Oscar::Message& message );
2579     void receivedUserInfo( const QString& contact, const UserDetails& details );
2580    
2581     /** We warned a user */
2582     --- kopete/protocols/oscar/liboscar/userdetails.h (revision 488948)
2583     +++ kopete/protocols/oscar/liboscar/userdetails.h (revision 495340)
2584     @@ -55,11 +55,28 @@
2585     * It only updates what's available.
2586     */
2587     void fill( Buffer* buffer );
2588     +
2589     + /**
2590     + * Merge only those data from another UserDetails
2591     + * which are marked as specified.
2592     + */
2593     + void merge( const UserDetails& ud );
2594     +
2595     + bool userClassSpecified() const { return m_userClassSpecified; }
2596     + bool memberSinceSpecified() const { return m_memberSinceSpecified; }
2597     + bool onlineSinceSpecified() const { return m_onlineSinceSpecified; }
2598     + bool numSecondsOnlineSpecified() const { return m_numSecondsOnlineSpecified; }
2599     + bool idleTimeSpecified() const { return m_idleTimeSpecified; }
2600     + bool extendedStatusSpecified() const { return m_extendedStatusSpecified; }
2601     + bool capabilitiesSpecified() const { return m_capabilitiesSpecified; }
2602     + bool dcOutsideSpecified() const { return m_dcOutsideSpecified; }
2603     + bool dcInsideSpecified() const { return m_dcInsideSpecified; }
2604     + bool iconSpecified() const { return m_iconSpecified; }
2605     private:
2606     //! Do client detection
2607     void detectClient();
2608     -
2609    
2610     +
2611     private:
2612     QString m_userId; /// the screename/uin of the contact
2613     int m_warningLevel; /// the warning level of the contact
2614     @@ -87,6 +104,17 @@
2615     QByteArray m_md5IconHash; /// Buddy Icon MD5 Hash - TLV 0x1D
2616     QString m_availableMessage; /// Message a person can have when available - TLV 0x0D
2617    
2618     + bool m_userClassSpecified;
2619     + bool m_memberSinceSpecified;
2620     + bool m_onlineSinceSpecified;
2621     + bool m_numSecondsOnlineSpecified;
2622     + bool m_idleTimeSpecified;
2623     + bool m_extendedStatusSpecified;
2624     + bool m_capabilitiesSpecified;
2625     + bool m_dcOutsideSpecified;
2626     + bool m_dcInsideSpecified;
2627     + bool m_iconSpecified;
2628     +
2629     };
2630    
2631     #endif
2632     --- kopete/protocols/oscar/liboscar/messagereceivertask.cpp (revision 488948)
2633     +++ kopete/protocols/oscar/liboscar/messagereceivertask.cpp (revision 495340)
2634     @@ -407,7 +407,30 @@
2635    
2636     kdDebug(OSCAR_RAW_DEBUG) << k_funcinfo << "Message type is: " << messageType << endl;
2637    
2638     - msg->setText( b->getLELNTS() );
2639     + QCString msgtext( b->getLELNTS() );
2640     + int prop = Oscar::Message::NotDecoded;
2641     + if ( messageType == 0x01 )
2642     + {
2643     + int fgcolor = b->getLEDWord();
2644     + int bgcolor = b->getLEDWord();
2645     +
2646     + while ( b->length() >= 4 )
2647     + {
2648     + int capLength = b->getLEDWord();
2649     + if ( b->length() < capLength )
2650     + break;
2651     +
2652     + QByteArray cap( b->getBlock( capLength ) );
2653     + if ( qstrncmp ( cap.data(), "{0946134E-4C7F-11D1-8222-444553540000}", capLength ) == 0 )
2654     + prop = Oscar::Message::UCS2;
2655     + }
2656     + }
2657     +
2658     + msg->addProperty( prop );
2659     + if ( prop == Oscar::Message::UCS2 )
2660     + msg->setText( QString::fromUtf8( msgtext ) );
2661     + else
2662     + msg->setTextArray( msgtext );
2663    
2664     if ( ( messageType & 0xF0 ) == 0xE0 ) // check higher byte for value E -> status message request
2665     msg->addProperty( Oscar::Message::StatusMessageRequest );
2666     --- kopete/protocols/oscar/oscarcontact.cpp (revision 488948)
2667     +++ kopete/protocols/oscar/oscarcontact.cpp (revision 495340)
2668     @@ -178,41 +178,41 @@
2669     setProperty( Kopete::Global::Properties::self()->onlineSince(), details.onlineSinceTime() );
2670     setIdleTime( details.idleTime() );
2671     m_warningLevel = details.warningLevel();
2672     - m_details = details;
2673     + m_details.merge( details );
2674    
2675     QStringList capList;
2676     // Append client name and version in case we found one
2677     - if ( details.userClass() & 0x0080 /* WIRELESS */ )
2678     + if ( m_details.userClass() & 0x0080 /* WIRELESS */ )
2679     capList << i18n( "Mobile AIM Client" );
2680     else
2681     {
2682     - if ( !details.clientName().isEmpty() )
2683     + if ( !m_details.clientName().isEmpty() )
2684     {
2685     capList << i18n( "Translators: client name and version",
2686     - "%1").arg( details.clientName() );
2687     + "%1").arg( m_details.clientName() );
2688     }
2689     }
2690    
2691     // and now for some general informative capabilities
2692     - if ( details.hasCap( CAP_BUDDYICON ) )
2693     + if ( m_details.hasCap( CAP_BUDDYICON ) )
2694     capList << i18n( "Buddy icons" );
2695     - if ( details.hasCap( CAP_UTF8 ) )
2696     + if ( m_details.hasCap( CAP_UTF8 ) )
2697     capList << i18n( "UTF-8" );
2698     - if ( details.hasCap( CAP_RTFMSGS ) )
2699     + if ( m_details.hasCap( CAP_RTFMSGS ) )
2700     capList << i18n( "Rich text messages" );
2701     - if ( details.hasCap( CAP_CHAT ) )
2702     + if ( m_details.hasCap( CAP_CHAT ) )
2703     capList << i18n( "Group chat" );
2704     - if ( details.hasCap( CAP_VOICE ) )
2705     + if ( m_details.hasCap( CAP_VOICE ) )
2706     capList << i18n( "Voice chat" );
2707     - if ( details.hasCap( CAP_IMIMAGE ) )
2708     + if ( m_details.hasCap( CAP_IMIMAGE ) )
2709     capList << i18n( "DirectIM/IMImage" );
2710     - if ( details.hasCap( CAP_SENDBUDDYLIST ) )
2711     + if ( m_details.hasCap( CAP_SENDBUDDYLIST ) )
2712     capList << i18n( "Send buddy list" );
2713     - if ( details.hasCap( CAP_SENDFILE ) )
2714     + if ( m_details.hasCap( CAP_SENDFILE ) )
2715     capList << i18n( "File transfers" );
2716     - if ( details.hasCap( CAP_GAMES ) || details.hasCap( CAP_GAMES2 ) )
2717     + if ( m_details.hasCap( CAP_GAMES ) || m_details.hasCap( CAP_GAMES2 ) )
2718     capList << i18n( "Games" );
2719     - if ( details.hasCap( CAP_TRILLIAN ) )
2720     + if ( m_details.hasCap( CAP_TRILLIAN ) )
2721     capList << i18n( "Trillian user" );
2722    
2723     m_clientFeatures = capList.join( ", " );
2724     --- kopete/protocols/oscar/oscaraccount.cpp (revision 488948)
2725     +++ kopete/protocols/oscar/oscaraccount.cpp (revision 495340)
2726     @@ -255,7 +255,8 @@
2727     }
2728     kdDebug(OSCAR_GEN_DEBUG) << k_funcinfo << "the following contacts are not on the server side list"
2729     << nonServerContactList << endl;
2730     - if ( !nonServerContactList.isEmpty() )
2731     + bool showMissingContactsDialog = configGroup()->readBoolEntry(QString::fromLatin1("ShowMissingContactsDialog"), true);
2732     + if ( !nonServerContactList.isEmpty() && showMissingContactsDialog )
2733     {
2734     d->olnscDialog = new OscarListNonServerContacts( Kopete::UI::Global::mainWidget() );
2735     QObject::connect( d->olnscDialog, SIGNAL( closing() ),
2736     @@ -322,6 +323,10 @@
2737    
2738     }
2739    
2740     + bool showOnce = d->olnscDialog->onlyShowOnce();
2741     + configGroup()->writeEntry( QString::fromLatin1("ShowMissingContactsDialog") , !showOnce);
2742     + configGroup()->sync();
2743     +
2744     d->olnscDialog->delayedDestruct();
2745     d->olnscDialog = 0L;
2746     }
2747     --- kopete/protocols/oscar/oscarlistcontactsbase.ui (revision 488948)
2748     +++ kopete/protocols/oscar/oscarlistcontactsbase.ui (revision 495340)
2749     @@ -8,15 +8,15 @@
2750     <rect>
2751     <x>0</x>
2752     <y>0</y>
2753     - <width>459</width>
2754     - <height>266</height>
2755     + <width>478</width>
2756     + <height>361</height>
2757     </rect>
2758     </property>
2759     - <grid>
2760     + <vbox>
2761     <property name="name">
2762     <cstring>unnamed</cstring>
2763     </property>
2764     - <widget class="QLabel" row="0" column="0">
2765     + <widget class="QLabel">
2766     <property name="name">
2767     <cstring>textLabel1</cstring>
2768     </property>
2769     @@ -24,12 +24,26 @@
2770     <string>The following contacts are not on your contact list. Would you like to add them?</string>
2771     </property>
2772     </widget>
2773     - <widget class="QListBox" row="1" column="0">
2774     + <widget class="QListBox">
2775     <property name="name">
2776     <cstring>notServerContacts</cstring>
2777     </property>
2778     + <property name="frameShape">
2779     + <enum>StyledPanel</enum>
2780     + </property>
2781     + <property name="frameShadow">
2782     + <enum>Sunken</enum>
2783     + </property>
2784     </widget>
2785     - </grid>
2786     + <widget class="QCheckBox">
2787     + <property name="name">
2788     + <cstring>doNotShowAgain</cstring>
2789     + </property>
2790     + <property name="text">
2791     + <string>Do &amp;not ask again</string>
2792     + </property>
2793     + </widget>
2794     + </vbox>
2795     </widget>
2796     <layoutdefaults spacing="6" margin="11"/>
2797     </UI>
2798     --- kopete/protocols/oscar/icq/icqprotocol.cpp (revision 488948)
2799     +++ kopete/protocols/oscar/icq/icqprotocol.cpp (revision 495340)
2800     @@ -641,7 +641,7 @@
2801     mInterests.insert(142, i18n("Health and beauty"));
2802     mInterests.insert(143, i18n("Media"));
2803     mInterests.insert(144, i18n("Household products"));
2804     - mInterests.insert(145, i18n("Mail order catalogue"));
2805     + mInterests.insert(145, i18n("Mail order catalog"));
2806     mInterests.insert(146, i18n("Business services"));
2807     mInterests.insert(147, i18n("Audio and visual"));
2808     mInterests.insert(148, i18n("Sporting and athletic"));
2809     --- kopete/protocols/oscar/icq/icqcontact.cpp (revision 488948)
2810     +++ kopete/protocols/oscar/icq/icqcontact.cpp (revision 495340)
2811     @@ -75,6 +75,8 @@
2812     this, SLOT( userInfoUpdated( const QString&, const UserDetails& ) ) );
2813     QObject::connect( mAccount->engine(), SIGNAL( receivedAwayMessage( const QString&, const QString& ) ),
2814     this, SLOT( receivedStatusMessage( const QString&, const QString& ) ) );
2815     + QObject::connect( mAccount->engine(), SIGNAL( receivedAwayMessage( const Oscar::Message& ) ),
2816     + this, SLOT( receivedStatusMessage( const Oscar::Message& ) ) );
2817     QObject::connect( this, SIGNAL( featuresUpdated() ), this, SLOT( updateFeatures() ) );
2818    
2819     }
2820     @@ -147,15 +149,21 @@
2821     }
2822    
2823    
2824     - if ( details.dcExternalIp().isUnspecified() )
2825     - removeProperty( mProtocol->ipAddress );
2826     - else
2827     - setProperty( mProtocol->ipAddress, details.dcExternalIp().toString() );
2828     + if ( details.dcOutsideSpecified() )
2829     + {
2830     + if ( details.dcExternalIp().isUnspecified() )
2831     + removeProperty( mProtocol->ipAddress );
2832     + else
2833     + setProperty( mProtocol->ipAddress, details.dcExternalIp().toString() );
2834     + }
2835    
2836     - if ( details.clientName().isEmpty() )
2837     - removeProperty( mProtocol->clientFeatures );
2838     - else
2839     - setProperty( mProtocol->clientFeatures, details.clientName() );
2840     + if ( details.capabilitiesSpecified() )
2841     + {
2842     + if ( details.clientName().isEmpty() )
2843     + removeProperty( mProtocol->clientFeatures );
2844     + else
2845     + setProperty( mProtocol->clientFeatures, details.clientName() );
2846     + }
2847    
2848     OscarContact::userInfoUpdated( contact, details );
2849     }
2850     @@ -338,6 +346,25 @@
2851     removeProperty( mProtocol->awayMessage );
2852     }
2853    
2854     +void ICQContact::receivedStatusMessage( const Oscar::Message &message )
2855     +{
2856     + if ( Oscar::normalize( message.sender() ) != Oscar::normalize( contactId() ) )
2857     + return;
2858     +
2859     + //decode message
2860     + QTextCodec* codec = QTextCodec::codecForMib( this->property( "contactEncoding" ).value().toInt() );
2861     +
2862     + QString realText = message.text();
2863     + if ( message.properties() & Oscar::Message::NotDecoded )
2864     + realText = codec->toUnicode( message.textArray() );
2865     +
2866     +
2867     + if ( !realText.isEmpty() )
2868     + setProperty( mProtocol->awayMessage, realText );
2869     + else
2870     + removeProperty( mProtocol->awayMessage );
2871     +}
2872     +
2873     void ICQContact::slotSendMsg( Kopete::Message& msg, Kopete::ChatSession* session )
2874     {
2875     //Why is this unused?
2876     --- kopete/protocols/oscar/icq/ui/icqsearchbase.ui (revision 488948)
2877     +++ kopete/protocols/oscar/icq/ui/icqsearchbase.ui (revision 495340)
2878     @@ -101,7 +101,7 @@
2879     <string></string>
2880     </property>
2881     <property name="whatsThis" stdset="0">
2882     - <string>Show informations about the selected contact</string>
2883     + <string>Show information about the selected contact</string>
2884     </property>
2885     </widget>
2886     <spacer row="0" column="1">
2887     --- kopete/protocols/oscar/icq/icqcontact.h (revision 488948)
2888     +++ kopete/protocols/oscar/icq/icqcontact.h (revision 495340)
2889     @@ -134,6 +134,7 @@
2890     void changeEncodingDialogClosed( int );
2891    
2892     void receivedStatusMessage( const QString &contact, const QString &message );
2893     + void receivedStatusMessage( const Oscar::Message &message );
2894    
2895     //void slotCloseAwayMessageDialog();
2896     //void slotReadAwayMessage();
2897     --- kopete/protocols/msn/dispatcher.cpp (revision 488948)
2898     +++ kopete/protocols/msn/dispatcher.cpp (revision 495340)
2899     @@ -139,7 +139,7 @@
2900     writer << (Q_INT32)1;
2901     // Write the file name in utf-16 to the stream.
2902     QTextStream ts(header, IO_WriteOnly);
2903     - ts.setEncoding(QTextStream::Unicode);
2904     + ts.setEncoding(QTextStream::RawUnicode);
2905     ts.device()->at(20);
2906     ts << path.section('/', -1);
2907     // NOTE Background Sharing base64 [540..569]
2908     --- kopete/protocols/msn/outgoingtransfer.cpp (revision 488948)
2909     +++ kopete/protocols/msn/outgoingtransfer.cpp (revision 495340)
2910     @@ -200,7 +200,7 @@
2911     if(m_transfer)
2912     {
2913     // Inform the user of the file transfer cancelation.
2914     - m_transfer->slotError(KIO::ERR_ABORTED, i18n("File transfer cancelled."));
2915     + m_transfer->slotError(KIO::ERR_ABORTED, i18n("File transfer canceled."));
2916     }
2917     }
2918     // Dispose of this transfer context.
2919     @@ -307,7 +307,7 @@
2920     if(m_transfer)
2921     {
2922     // Inform the user of the file transfer cancelation.
2923     - m_transfer->slotError(KIO::ERR_ABORTED, i18n("File transfer cancelled."));
2924     + m_transfer->slotError(KIO::ERR_ABORTED, i18n("File transfer canceled."));
2925     }
2926    
2927     if(m_file && m_file->isOpen()){
2928     --- kopete/protocols/msn/msnchatsession.cpp (revision 488948)
2929     +++ kopete/protocols/msn/msnchatsession.cpp (revision 495340)
2930     @@ -84,7 +84,7 @@
2931     m_actionNudge=new KAction( i18n( "Send Nudge" ), 0, this, SLOT(slotSendNudge() ), actionCollection(), "msnSendNudge" ) ;
2932     m_actionNudge->setEnabled(false);
2933     #if MSN_WEBCAM
2934     - m_actionWebcamReceive=new KAction( i18n( "Invite to Receive User Webcam" ), 0, this, SLOT(slotWebcamReceive() ), actionCollection(), "msnWebcamReceive" ) ;
2935     + m_actionWebcamReceive=new KAction( i18n( "View Contact's Webcam" ), 0, this, SLOT(slotWebcamReceive() ), actionCollection(), "msnWebcamReceive" ) ;
2936     m_actionWebcamReceive->setEnabled(false);
2937     m_actionWebcamSend=new KAction( i18n( "Send Webcam" ), 0, this, SLOT(slotWebcamSend() ), actionCollection(), "msnWebcamSend" ) ;
2938     #endif
2939     @@ -639,7 +639,7 @@
2940     {
2941     // FIXME: When nudge is the first received message, you can't see your own message you send before the others send you a message.
2942     // Ok, this is only with chat window style which use "Parse All Message" flag.
2943     - QString nudgeBody = i18n( "You have received a nudge!" );
2944     + QString nudgeBody = i18n( "You have received a nudge." );
2945     Kopete::Message msg = Kopete::Message(myself(), members(), nudgeBody, Kopete::Message::Internal, Kopete::Message::PlainText );
2946     appendMessage( msg );
2947     // Emit the nudge/buzz notification (configured by user).
2948     --- kopete/protocols/msn/ui/msneditaccountui.ui (revision 488948)
2949     +++ kopete/protocols/msn/ui/msneditaccountui.ui (revision 495340)
2950     @@ -274,7 +274,7 @@
2951     <string>&lt;qt&gt;&lt;p&gt;Indicate when Kopete will download the display pictures of contacts&lt;/p&gt;
2952     &lt;dl&gt;&lt;dt&gt;Only manually&lt;/dt&gt;&lt;dd&gt;The picture is not downloaded automatically. It is only downloaded when the user requests it&lt;/dd&gt;
2953     &lt;dt&gt;When a chat is open&lt;/dt&gt;&lt;dd&gt;The picture is downloaded when a conversation socket is opened, i.e. when you open a chat window&lt;/dd&gt;
2954     -&lt;dt&gt;Automatically&lt;/dt&gt;&lt;dd&gt;Always try to download the picture if the contact has one. &lt;b&gt;Note :&lt;/b&gt; this will open a socket, and let know the user you are downloading their picture.&lt;/dd&gt;&lt;/dl&gt;</string>
2955     +&lt;dt&gt;Automatically&lt;/dt&gt;&lt;dd&gt;Always try to download the picture if the contact has one. &lt;b&gt;Note:&lt;/b&gt; this will open a socket, and let the user know you are downloading their picture.&lt;/dd&gt;&lt;/dl&gt;</string>
2956     </property>
2957     </widget>
2958     <widget class="QComboBox">
2959     @@ -311,7 +311,7 @@
2960     <string>&lt;qt&gt;&lt;p&gt;Indicate when Kopete will download the pictures of contacts&lt;/p&gt;
2961     &lt;dl&gt;&lt;dt&gt;Only manually&lt;/dt&gt;&lt;dd&gt;The picture is not downloaded automatically. It is only downloaded when the user requests it&lt;/dd&gt;
2962     &lt;dt&gt;When a chat is open&lt;/dt&gt;&lt;dd&gt;The picture is downloaded when a conversation socket is opened, i.e. when you open a chat window&lt;/dd&gt;
2963     -&lt;dt&gt;Automatically&lt;/dt&gt;&lt;dd&gt;Always try to download the picture if the contact has one. &lt;b&gt;Note :&lt;/b&gt; this will open a socket, and let know the user you are downloading their picture.&lt;/dd&gt;&lt;/dl&gt;</string>
2964     +&lt;dt&gt;Automatically&lt;/dt&gt;&lt;dd&gt;Always try to download the picture if the contact has one. &lt;b&gt;Note:&lt;/b&gt; this will open a socket, and let the user know you are downloading their picture.&lt;/dd&gt;&lt;/dl&gt;</string>
2965     </property>
2966     </widget>
2967     </hbox>
2968     @@ -375,7 +375,7 @@
2969     <bool>true</bool>
2970     </property>
2971     <property name="toolTip" stdset="0">
2972     - <string>&lt;qt&gt;Make it possible to your contacts to detect if you are using Kopete.&lt;br&gt;We recommend to leave this checked&lt;/qt&gt;</string>
2973     + <string>&lt;qt&gt;Make it possible for your contacts to detect if you are using Kopete.&lt;br&gt;We recommend leaving this checked.&lt;/qt&gt;</string>
2974     </property>
2975     <property name="whatsThis" stdset="0">
2976     <string>Third party MSN clients, such as Kopete, give users the ability to let other third party clients guess which client they are using. We recommend leaving this checkbox checked.</string>
2977     @@ -472,7 +472,7 @@
2978     <cstring>textLabel1_5</cstring>
2979     </property>
2980     <property name="text">
2981     - <string>There is also privacy options in the "Contacts" tab</string>
2982     + <string>There are also privacy options in the "Contacts" tab</string>
2983     </property>
2984     <property name="alignment">
2985     <set>WordBreak|AlignCenter</set>
2986     @@ -1242,7 +1242,7 @@
2987     <string>S&amp;pecify a port for incoming webcam connection:</string>
2988     </property>
2989     <property name="whatsThis" stdset="0">
2990     - <string>If you are behind a firewall, you may specify a port to use for the incoming connection, and configure your firewall to accept connections on this port. Incoming connections are used for the webcam. If you don't specify yourself a port, the operating system will choose an available port for you. It is recommended to leave the checkbox unchecked.</string>
2991     + <string>If you are behind a firewall, you may specify a port to use for the incoming connection, and configure your firewall to accept connections on this port. Incoming connections are used for the webcam. If you don't specify a port yourself, the operating system will choose an available port for you. It is recommended to leave the checkbox unchecked.</string>
2992     </property>
2993     </widget>
2994     <widget class="QSpinBox">
2995     @@ -1262,8 +1262,7 @@
2996     <number>6891</number>
2997     </property>
2998     <property name="whatsThis" stdset="0">
2999     - <string>If you are behind a firewall, you may specify a port to use for the incoming connection, and configure your firewall to
3000     - accept connections on this port. Incoming connections are used for the webcam. If you don't specify yourself a port, the operating system will choose an available port for you. It is recommended to leave the checkbox unchecked.</string>
3001     + <string>If you are behind a firewall, you may specify a port to use for the incoming connection, and configure your firewall to accept connections on this port. Incoming connections are used for the webcam. If you don't specify a port yourself, the operating system will choose an available port for you. It is recommended to leave the checkbox unchecked.</string>
3002     </property>
3003     </widget>
3004     </hbox>
3005     --- kopete/kopete/eventsrc (revision 488948)
3006     +++ kopete/kopete/eventsrc (revision 495340)
3007     @@ -972,6 +972,7 @@
3008     Name[fr]=Erreur de connexion
3009     Name[ga]=Earráid Naisc
3010     Name[gl]=Erro de Conexión
3011     +Name[hu]=Csatlakozási hiba
3012     Name[is]=Villa í tengingu
3013     Name[it]=Errore di connessione
3014     Name[nb]=Koblingsfeil
3015     @@ -1001,6 +1002,7 @@
3016     Comment[eu]=Errore bat gertatu da konexioan
3017     Comment[fr]=Une erreur de connexion est apparue
3018     Comment[gl]=Ocorreu un erro na conexión
3019     +Comment[hu]=Hiba történt csatlakozás közben
3020     Comment[is]=Villa kom upp þegar reynt var að tengjast
3021     Comment[it]=Si è verificato un errore di connessione
3022     Comment[nb]=Det har oppstått en feil ved tilkobling
3023     @@ -1033,6 +1035,7 @@
3024     Name[eu]=Konexioa galdu da
3025     Name[fr]=Connexion perdue
3026     Name[gl]=Conexión Perdida
3027     +Name[hu]=A kapcsolat megszakadt
3028     Name[is]=Tengingu tapað
3029     Name[it]=Connessione chiusa
3030     Name[nb]=Tilkobling mistet
3031     @@ -1050,36 +1053,18 @@
3032     Name[uk]=З'єднання втрачено
3033     Name[uz]=Уланиш узилди
3034     Name[zh_CN]=连接已丢失
3035     -Comment=The connection have been lost
3036     -Comment[bg]=Връзката е прекъсната
3037     -Comment[ca]=S'ha perdut la connexió
3038     -Comment[cs]=Spojení bylo ztraceno
3039     +Comment=The connection has been lost
3040     Comment[da]=Forbindelsen er gået tabt
3041     -Comment[de]=Die Verbindung wurde unterbrochen
3042     Comment[el]=Η σύνδεση έκλεισε
3043     -Comment[en_GB]=The connection has been lost
3044     -Comment[es]=La conexión se perdió
3045     +Comment[es]=Se perdió la conexión
3046     Comment[et]=Ühendus kadus
3047     -Comment[eu]=Konexioa galdu da
3048     Comment[fr]=La connexion a été perdue
3049     -Comment[gl]=Perdeuse a conexión
3050     -Comment[is]=Tengingin tapaðist
3051     -Comment[it]=La connessione è stata chiusa
3052     -Comment[nb]=Tilkoblingen er mistet
3053     +Comment[hu]=A kapcsolat megszakadt
3054     Comment[nl]=De verbinding is verbroken
3055     -Comment[nn]=Samband er stengt
3056     -Comment[pl]=Połączenie zostało stracone
3057     Comment[pt]=A ligação foi-se abaixo
3058     -Comment[pt_BR]=A conexão foi perdida
3059     -Comment[ru]=Соединение было утеряно
3060     -Comment[sl]=Povezava je bila prekinjena
3061     -Comment[sr]=Веза је изгубљена
3062     -Comment[sr@Latn]=Veza je izgubljena
3063     +Comment[pt_BR]=A ligação foi-se abaixo
3064     Comment[sv]=Anslutningen har förlorats
3065     -Comment[tr]=Bağlantı kesildi
3066     Comment[uk]=З'єднання було втрачено
3067     -Comment[uz]=Ўрнатилган алоқа узилди
3068     -Comment[zh_CN]=连接已丢失
3069     default_presentation=16
3070    
3071     [cannot_connect]
3072     @@ -1096,6 +1081,7 @@
3073     Name[fr]=Impossible de se connecter
3074     Name[ga]=Ní Féidir Nasc a Dhéanamh
3075     Name[gl]=Non se pode conectar
3076     +Name[hu]=Nem sikerült csatlakozni
3077     Name[is]=Get ekki tengst
3078     Name[it]=Impossibile connettersi
3079     Name[nb]=Kan ikke koble til
3080     @@ -1125,6 +1111,7 @@
3081     Comment[eu]=Kopete-k ezin du zerbitzuarekin konektatu
3082     Comment[fr]=Kopete ne peut pas se connecter à ce service
3083     Comment[gl]=Kopete non pode conectar co servicio
3084     +Comment[hu]=A Kopete nem tudott csatlakozni a szolgáltatóhoz
3085     Comment[is]=Kopete gat ekki tengst þjónustunni
3086     Comment[it]=Kopete non è in grado di connettersi al servizio
3087     Comment[nb]=Kopete kan ikke koble til tjenesten
3088     @@ -1157,6 +1144,7 @@
3089     Name[fr]=Problèmes réseaux
3090     Name[ga]=Fadhbanna Líonra
3091     Name[gl]=Problemas na rede
3092     +Name[hu]=Hálózati hibák
3093     Name[is]=Netvandamál
3094     Name[it]=Problemi di rete
3095     Name[nb]=Nettverksproblemer
3096     @@ -1186,6 +1174,7 @@
3097     Comment[eu]=Sareak arazoak ditu
3098     Comment[fr]=Le réseau rencontre des problèmes
3099     Comment[gl]=A rede está experimentando problemas
3100     +Comment[hu]=Hiba lépett fel a hálózaton
3101     Comment[is]=Það er vandamál með netið
3102     Comment[it]=Ci sono dei problemi di rete
3103     Comment[ja]=ネットワークは問題を抱えています
3104     @@ -1217,6 +1206,7 @@
3105     Name[eu]=Zerbitzariaren barne-errorea
3106     Name[fr]=Erreur interne du serveur
3107     Name[gl]=Erro Interno do Servidor
3108     +Name[hu]=Belső kiszolgálóhiba
3109     Name[is]=Innri villa í þjóni
3110     Name[it]=Errore interno del server
3111     Name[ja]=内部サーバーエラー
3112     @@ -1234,37 +1224,18 @@
3113     Name[tr]=Sunucu İç Hatası
3114     Name[uk]=Внутрішня помилка сервера
3115     Name[zh_CN]=服务器内部错误
3116     -Comment=An service internal error has occurred
3117     -Comment[bg]=Вътрешна грешка на сървъра
3118     -Comment[ca]=Hi ha hagut un error intern del servei
3119     -Comment[cs]=Nastala interní chyba na serveru
3120     +Comment=A service internal error has occurred
3121     Comment[da]=En intern fejl for tjenesten er opstået
3122     -Comment[de]=Bei diesem Dienst ist ein interner Serverfehler aufgetreten.
3123     Comment[el]=Παρουσιάστηκε ένα εσωτερικό σφάλμα της υπηρεσίας
3124     -Comment[en_GB]=A service internal error has occurred
3125     Comment[es]=Ocurrió un error interno en el servicio
3126     Comment[et]=Tekkis teenuse sisemine viga
3127     -Comment[eu]=Zerbitzuaren barne-errore bat gertatu da
3128     -Comment[fr]=Une erreur interne du serveur s'est produite
3129     -Comment[gl]=Ocorreu un erro interno do servicio
3130     -Comment[is]=Innri villa í þjónustu hefur átt sér stað
3131     -Comment[it]=Si è verificato un errore interno del servizio
3132     -Comment[ja]=サービス内部エラーが発生しました
3133     -Comment[nb]=Det har oppstått en intern feil ved tjenesten
3134     +Comment[fr]=Une erreur interne au service s'est produite
3135     +Comment[hu]=Belső hiba történt a szolgáltatásban
3136     Comment[nl]=Er deed zich een interne fout op de server voor
3137     -Comment[nn]=Det har skjedd ein feil internt i tenesta
3138     -Comment[pl]=Wystąpił błąd wewnętrzny usługi
3139     Comment[pt]=Ocorreu um erro interno do serviço
3140     Comment[pt_BR]=Ocorreu um erro interno do serviço
3141     -Comment[ru]=В службе возникла внутренняя ошибка
3142     -Comment[sl]=Prišlo je do notranje napake pri storitvi
3143     -Comment[sr]=Дошло јо до интерне грешке сервера
3144     -Comment[sr@Latn]=Došlo jo do interne greške servera
3145     Comment[sv]=Ett internt fel har inträffat i tjänsten
3146     -Comment[tr]=Servis İç Hatası meydana geldi
3147     Comment[uk]=Трапилась внутрішня помилка служби
3148     -Comment[uz]=Хизматда ички хато рўй берди
3149     -Comment[zh_CN]=发生了服务内部错误
3150     default_presentation=2
3151    
3152     [buzz_nudge]
3153     @@ -1278,6 +1249,7 @@
3154     Name[et]=Mõmin/müks
3155     Name[eu]=Burrumbada/Ukondokada
3156     Name[fr]=Vibration
3157     +Name[hu]=Figyelemfelhívó
3158     Name[is]=Ýta við
3159     Name[it]=Buzz/Trillo
3160     Name[pl]=Pobudka/kuksaniec
3161     @@ -1300,6 +1272,7 @@
3162     Comment[et]=Kontakt müksas sind.
3163     Comment[eu]=Kontaktu batek burrumbada/ukondokada bat bidali dizu.
3164     Comment[fr]=Un contact vous a envoyé une vibration.
3165     +Comment[hu]=Egy partner figyelemfelhívó üzenetet küldött.
3166     Comment[is]=Notandi hefur ýtt við þér.
3167     Comment[it]=Un contatto ti ha inviato un buzz/trillo.
3168     Comment[nb]=En kontakt har sendt deg en buzz/nudge
3169     --- kopete/kopete/config/appearance/appearanceconfig_emoticons.ui (revision 488948)
3170     +++ kopete/kopete/config/appearance/appearanceconfig_emoticons.ui (revision 495340)
3171     @@ -41,7 +41,7 @@
3172     <bool>true</bool>
3173     </property>
3174     <property name="whatsThis" stdset="0">
3175     - <string>If this is checked, only emoticon that are separated from the text with spaces will be shown as image</string>
3176     + <string>If this is checked, only emoticons that are separated from the text by spaces will be shown as images.</string>
3177     </property>
3178     </widget>
3179     <widget class="QLabel">
3180     @@ -106,7 +106,7 @@
3181     <string>&amp;Get New Themes...</string>
3182     </property>
3183     <property name="whatsThis" stdset="0">
3184     - <string>Download emoticon theme on internet</string>
3185     + <string>Download emoticon theme from the Internet</string>
3186     </property>
3187     </widget>
3188     <widget class="QPushButton">
3189     --- kopete/kopete/config/appearance/appearanceconfig.cpp (revision 488948)
3190     +++ kopete/kopete/config/appearance/appearanceconfig.cpp (revision 495340)
3191     @@ -707,7 +707,7 @@
3192     "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
3193     "<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\n"
3194     "<xsl:output method=\"html\"/>\n"
3195     - "<xsl:template match=\"message\">\n\n\n\n</xsl:template>\n</xsl:stylesheet>" ) );
3196     + "<xsl:template match=\"message\">\n\n\n\n</xsl:template>\n</xsl:stylesheet>" ) )
3197     {
3198     KRun::runURL( KURL(locateLocal("appdata", QString::fromLatin1("styles/%1.xsl").arg( styleName ) )) , "text/plain");
3199     currentStyle = QString::null; //force to update preview;
3200     --- kopete/kopete/config/behavior/behaviorconfig_events.ui (revision 488948)
3201     +++ kopete/kopete/config/behavior/behaviorconfig_events.ui (revision 495340)
3202     @@ -83,7 +83,7 @@
3203     <string>Left mouse click on flashing system tray opens message instead of restoring/minimizing contact list</string>
3204     </property>
3205     <property name="whatsThis" stdset="0">
3206     - <string>A left mouse click on the flashing system tray opens the incoming message instead of restoring/minimizing the contact list (e.g. to check who sent messages). A middle click always opens this message.</string>
3207     + <string>A left mouse click on the flashing system tray icon opens the incoming message instead of restoring/minimizing the contact list (e.g. to check who is sending messages). A middle click always opens this message.</string>
3208     </property>
3209     </widget>
3210     </hbox>
3211     @@ -226,7 +226,7 @@
3212     <string>Switch to the desktop which contains the chat window for the sender when opening his/her message</string>
3213     </property>
3214     <property name="whatsThis" stdset="0">
3215     - <string>If there is already a chat window opened for the sender of the message opening his/her message will cause a switch to the desktop which contains this chat window.</string>
3216     + <string>If there is already a chat window open for the sender of the message, opening his/her message will cause a switch to the desktop which contains this chat window.</string>
3217     </property>
3218     </widget>
3219     <widget class="QCheckBox">
3220     --- kopete/kopete/config/behavior/behaviorconfig_general.ui (revision 488948)
3221     +++ kopete/kopete/config/behavior/behaviorconfig_general.ui (revision 495340)
3222     @@ -85,7 +85,7 @@
3223     <string>Use a message queue instead of instantly opening a chat window on incoming messages</string>
3224     </property>
3225     <property name="whatsThis" stdset="0">
3226     - <string>Use a message for new incoming messages. New messages are messages that cannot be displayed in an already open chat window. Only queued messages triggers notification via bubble and flashing tray.</string>
3227     + <string>Use a message for new incoming messages. New messages are messages that cannot be displayed in an already open chat window. Only queued messages trigger notification via bubble and flashing tray icon.</string>
3228     </property>
3229     </widget>
3230     <widget class="QLayoutWidget">
3231     @@ -127,7 +127,7 @@
3232     <string>Also add unread messages to queue</string>
3233     </property>
3234     <property name="whatsThis" stdset="0">
3235     - <string>Unread messages are messages that will be displayed in an already opened but inactive chat window. Only incoming queued messages triggers notification via bubble and flashing tray. With this option disabled only new incoming messages are queued, i.e. messages that cannot be displayed in an already open chat window.</string>
3236     + <string>Unread messages are messages that will be displayed in an already opened but inactive chat window. Only incoming queued messages trigger notification via bubble and flashing tray icon. With this option disabled only new incoming messages are queued, i.e. messages that cannot be displayed in an already open chat window.</string>
3237     </property>
3238     </widget>
3239     </hbox>
3240     --- kopete/kopete/config/avdevice/kopete_avdeviceconfig.desktop (revision 488948)
3241     +++ kopete/kopete/config/avdevice/kopete_avdeviceconfig.desktop (revision 495340)
3242     @@ -26,6 +26,7 @@
3243     Name[fr]=Périphériques
3244     Name[ga]=Gléasanna
3245     Name[gl]=Dispositivos
3246     +Name[hu]=Eszközök
3247     Name[id]=Divais
3248     Name[is]=Tæki
3249     Name[it]=Periferiche
3250     @@ -65,6 +66,7 @@
3251     Comment[eu]=Hemen Kopete-ren bideo eta audio ezarpenak ezar ditzakezu
3252     Comment[fr]=Vous pouvez modifier ici la configuration des périphériques audio et vidéo de Kopete
3253     Comment[gl]=Aquí podes modificar as opcións dos dispositivos de video e audio de Kopete
3254     +Comment[hu]=Itt lehet módosítani a Kopete video- és hangbeállításait
3255     Comment[is]=Hér getur þú breytt vídeó- og hljóðtæki stillingum Kopete
3256     Comment[it]=Qui puoi modificare le impostazioni audio e video di Kopete
3257     Comment[nb]=Her kan du endre innstillinger for lyd og bilde i Kopete
3258     --- kopete/kopete/config/identity/kopeteidentityconfig.cpp (revision 488948)
3259     +++ kopete/kopete/config/identity/kopeteidentityconfig.cpp (revision 495340)
3260     @@ -147,8 +147,6 @@
3261     connect(d->m_view->lineNickname, SIGNAL(textChanged(const QString& )), this, SLOT(slotSettingsChanged()));
3262     connect(d->m_view->comboNameContact, SIGNAL(activated(int )), this, SLOT(slotSettingsChanged()));
3263     connect(d->m_view->comboPhotoContact, SIGNAL(activated(int )), this, SLOT(slotEnableAndDisableWidgets()));
3264     -
3265     - connect(this, SIGNAL(changed(bool)), this, SLOT(slotSettingsChanged()));
3266     }
3267    
3268     KopeteIdentityConfig::~KopeteIdentityConfig()
3269     --- kopete/kopete/config/identity/kopete_identityconfig.desktop (revision 488948)
3270     +++ kopete/kopete/config/identity/kopete_identityconfig.desktop (revision 495340)
3271     @@ -25,6 +25,7 @@
3272     Name[fr]=Identité
3273     Name[ga]=Aitheantas
3274     Name[gl]=Indentidade
3275     +Name[hu]=Azonosító
3276     Name[is]=Auðkenni
3277     Name[it]=Identità
3278     Name[lt]=Tapatybė
3279     @@ -56,6 +57,7 @@
3280     Comment[fr]=Vous pouvez gérer ici votre identité principale
3281     Comment[ga]=Tig Leat d'Aitheantas a Láimhseáil Anseo
3282     Comment[gl]=Aquí podes xestionar a súa identidade global
3283     +Comment[hu]=Itt lehet kezelni a globális azonosítókat
3284     Comment[is]=Hér geturðu haldið utan um víðværa auðkennið þitt
3285     Comment[it]=Qui puoi gestire la tua identità globale
3286     Comment[nb]=Her kan du behandle din globale identitet
3287     --- kopete/kopete/chatwindow/chatview.cpp (revision 488948)
3288     +++ kopete/kopete/chatwindow/chatview.cpp (revision 495340)
3289     @@ -884,7 +884,7 @@
3290     {
3291     Kopete::ContactPtrList members = m_manager->members();
3292     Kopete::Contact *contact = members.first();
3293     - if ( contact && contact->canAcceptFiles() );
3294     + if ( contact && contact->canAcceptFiles() )
3295     event->accept();
3296     }
3297     else
3298     --- kopete/kopete/chatwindow/emoticonselector.cpp (revision 488948)
3299     +++ kopete/kopete/chatwindow/emoticonselector.cpp (revision 495340)
3300     @@ -47,7 +47,7 @@
3301     // Some of the custom icons are rather large
3302     // so lets limit them to a maximum size for this display panel
3303     //
3304     - if (p.width() > 32 or p.height() > 32)
3305     + if (p.width() > 32 || p.height() > 32)
3306     p.resize(32, 32);
3307     setMinimumSize(p.size());
3308     }
3309     --- kopete/kopete/kopeteeditglobalidentitywidget.cpp (revision 488948)
3310     +++ kopete/kopete/kopeteeditglobalidentitywidget.cpp (revision 495340)
3311     @@ -98,8 +98,9 @@
3312     // Update the picture (change the size of it)
3313     d->iconSize = size;
3314     d->labelPicture->setMinimumSize(QSize(d->iconSize, d->iconSize));
3315     - d->labelPicture->setMaximumSize(QSize(d->iconSize, d->iconSize));
3316     - d->labelPicture->setPixmap(QPixmap(d->myself->photo().smoothScale(d->iconSize, d->iconSize, QImage::ScaleMin)));
3317     + d->labelPicture->setMaximumSize(QSize(d->iconSize, d->iconSize));
3318     + if( !d->myself->photo().isNull() )
3319     + d->labelPicture->setPixmap(QPixmap(d->myself->photo().smoothScale(d->iconSize, d->iconSize, QImage::ScaleMin)));
3320     }
3321    
3322     void KopeteEditGlobalIdentityWidget::iconSizeChanged()
3323     @@ -112,8 +113,9 @@
3324     // Update the picture (change the size of it)
3325     d->iconSize = tb->iconSize();
3326     d->labelPicture->setMinimumSize(QSize(d->iconSize, d->iconSize));
3327     - d->labelPicture->setMaximumSize(QSize(d->iconSize, d->iconSize));
3328     - d->labelPicture->setPixmap(QPixmap(d->myself->photo().smoothScale(d->iconSize, d->iconSize, QImage::ScaleMin)));
3329     + d->labelPicture->setMaximumSize(QSize(d->iconSize, d->iconSize));
3330     + if( !d->myself->photo().isNull() )
3331     + d->labelPicture->setPixmap(QPixmap(d->myself->photo().smoothScale(d->iconSize, d->iconSize, QImage::ScaleMin)));
3332     }
3333     }
3334    
3335     @@ -145,8 +147,11 @@
3336     if(key == Kopete::Global::Properties::self()->photo().key())
3337     {
3338     // Update the picture and the tooltip
3339     - d->labelPicture->setPixmap(QPixmap(d->myself->photo().smoothScale(d->iconSize, d->iconSize, QImage::ScaleMin)));
3340     - QToolTip::add(d->labelPicture, "<qt><img src=\""+ value.toString() +"\"></qt>");
3341     + if( !d->myself->photo().isNull() )
3342     + {
3343     + d->labelPicture->setPixmap(QPixmap(d->myself->photo().smoothScale(d->iconSize, d->iconSize, QImage::ScaleMin)));
3344     + QToolTip::add(d->labelPicture, "<qt><img src=\""+ value.toString() +"\"></qt>");
3345     + }
3346     }
3347     else if(key == Kopete::Global::Properties::self()->nickName().key())
3348     {
3349     --- kopete/configure.in.in (revision 488948)
3350     +++ kopete/configure.in.in (revision 495340)
3351     @@ -16,7 +16,8 @@
3352    
3353     KOPETE_INCLUDES='-I$(top_srcdir)/kopete/libkopete -I$(top_builddir)/kopete/libkopete -I$(top_srcdir)/kopete/libkopete/avdevice -I$(top_srcdir)/kopete/libkopete/ui -I$(top_builddir)/kopete/libkopete/ui'
3354    
3355     -AC_ARG_ENABLE(smpppd, [ --enable-smpppd enable support for smpppd],
3356     +AC_ARG_ENABLE(smpppd,
3357     +[AC_HELP_STRING([--enable-smpppd], [enable support for the SuSE Meta PPP Daemon (smpppd) (default is NO)])],
3358     [
3359     if test $enableval = yes; then
3360     AC_DEFINE(USE_SMPPPD, 1, [enable support for the smpppd])
3361     --- kopete/libkopete/kopeteutils.cpp (revision 488948)
3362     +++ kopete/libkopete/kopeteutils.cpp (revision 495340)
3363     @@ -36,12 +36,12 @@
3364     #include "kopeteuiglobal.h"
3365    
3366     static const QString notifyConnectionLost_DefaultMessage = i18n("You have been disconnected.");
3367     -static const QString notifyConnectionLost_DefaultCaption = i18n("Connection Lost.");
3368     -static const QString notifyConnectionLost_DefaultExplanation = i18n("Kopete lost the channel used to talk to the instant messaging system.\nThis can be either your internet access went down, , the service is experiencing problems, or the service disconnected you because you tried to connect with the same account from another location. Try connecting again later.");
3369     +static const QString notifyConnectionLost_DefaultCaption = i18n("Connection Lost");
3370     +static const QString notifyConnectionLost_DefaultExplanation = i18n("Kopete lost the channel used to talk to the instant messaging system.\nThis can be because your Internet connection went down, the service is experiencing problems, or the service disconnected you because you tried to connect using the same account from another location. Try connecting again later.");
3371    
3372     static const QString notifyCannotConnect_DefaultMessage = i18n("Can't connect with the instant messaging server or peers.");
3373     static const QString notifyCannotConnect_DefaultCaption = i18n("Can't connect.");
3374     -static const QString notifyCannotConnect_DefaultExplanation = i18n("This means Kopete can't reach the instant messaging server or peers.\nThis can be either your internet access is down or the server is experiencing problems. Try connecting again later.");
3375     +static const QString notifyCannotConnect_DefaultExplanation = i18n("This means Kopete can't reach the instant messaging server or peers.\nThis can be either your Internet access is down or the server is experiencing problems. Try connecting again later.");
3376    
3377     namespace Kopete
3378     {
3379     --- kopete/libkopete/kopetechatsession.cpp (revision 488948)
3380     +++ kopete/libkopete/kopetechatsession.cpp (revision 495340)
3381     @@ -261,7 +261,7 @@
3382    
3383     void Kopete::ChatSession::emitNudgeNotification()
3384     {
3385     - KNotification::event( QString::fromLatin1("buzz_nudge"), i18n("A contact send you a buzz/nudge.!") );
3386     + KNotification::event( QString::fromLatin1("buzz_nudge"), i18n("A contact sent you a buzz/nudge.") );
3387     }
3388    
3389     void Kopete::ChatSession::appendMessage( Kopete::Message &msg )
3390     --- kopete/libkopete/kopetecontactlist.cpp (revision 488948)
3391     +++ kopete/libkopete/kopetecontactlist.cpp (revision 495340)
3392     @@ -299,12 +299,8 @@
3393    
3394     void ContactList::loadGlobalIdentity()
3395     {
3396     - bool useGlobalIdentity;
3397     -
3398     - useGlobalIdentity = Kopete::Config::enableGlobalIdentity();
3399     -
3400     // Apply the global identity
3401     - if(useGlobalIdentity)
3402     + if(Kopete::Config::enableGlobalIdentity())
3403     {
3404     connect(myself(), SIGNAL(displayNameChanged(const QString&, const QString&)), this, SLOT(slotDisplayNameChanged()));
3405     connect(myself(), SIGNAL(photoChanged()), this, SLOT(slotPhotoChanged()));
3406     @@ -447,7 +443,8 @@
3407     Kopete::ContactList::self()->addGroup( group );
3408     }
3409     }
3410     - else if( element.tagName() == QString::fromLatin1("myself-meta-contact") )
3411     + // Only load myself metacontact information when Global Identity is enabled.
3412     + else if( element.tagName() == QString::fromLatin1("myself-meta-contact") && Kopete::Config::enableGlobalIdentity() )
3413     {
3414     if( !myself()->fromXML( element ) )
3415     {
3416     @@ -901,9 +898,12 @@
3417     doc.documentElement().appendChild( doc.importNode( m->toXML(), true ) );
3418    
3419     // Save myself metacontact information
3420     - QDomElement myselfElement = myself()->toXML(true); // Save minimal information.
3421     - myselfElement.setTagName( QString::fromLatin1("myself-meta-contact") );
3422     - doc.documentElement().appendChild( doc.importNode( myselfElement, true ) );
3423     + if( Kopete::Config::enableGlobalIdentity() )
3424     + {
3425     + QDomElement myselfElement = myself()->toXML(true); // Save minimal information.
3426     + myselfElement.setTagName( QString::fromLatin1("myself-meta-contact") );
3427     + doc.documentElement().appendChild( doc.importNode( myselfElement, true ) );
3428     + }
3429    
3430     return doc;
3431     }
3432     --- kopete/libkopete/kopetemetacontact.cpp (revision 488948)
3433     +++ kopete/libkopete/kopetemetacontact.cpp (revision 495340)
3434     @@ -193,12 +193,6 @@
3435     }
3436     else
3437     {
3438     - // if the contact was a source of property data, clean
3439     - if (displayNameSourceContact() == c)
3440     - setDisplayNameSourceContact(0L);
3441     - if (photoSourceContact() == c)
3442     - setPhotoSourceContact(0L);
3443     -
3444     // must check before removing, or will always be false
3445     bool wasTrackingName = ( !displayNameSourceContact() && (displayNameSource() == SourceContact) );
3446     bool wasTrackingPhoto = ( !photoSourceContact() && (photoSource() == SourceContact) );
3447     @@ -206,7 +200,14 @@
3448     QString currDisplayName = displayName();
3449    
3450     d->contacts.remove( c );
3451     +
3452     + // if the contact was a source of property data, clean
3453     + if (displayNameSourceContact() == c)
3454     + setDisplayNameSourceContact(0L);
3455     + if (photoSourceContact() == c)
3456     + setPhotoSourceContact(0L);
3457    
3458     +
3459     if ( wasTrackingName )
3460     {
3461     // Oh! this contact was the source for the metacontact's name
3462     @@ -611,10 +612,22 @@
3463     }
3464     else if ( source == SourceContact )
3465     {
3466     + if ( d->displayNameSourceContact==0 )
3467     + {
3468     + if( d->contacts.count() >= 1 )
3469     + {// don't call setDisplayNameSource , or there will probably be an infinite loop
3470     + d->displayNameSourceContact=d->contacts.first();
3471     +// kdDebug( 14010 ) << k_funcinfo << " setting displayname source for " << metaContactId() << endl;
3472     + }
3473     + }
3474     if ( displayNameSourceContact() != 0L )
3475     {
3476     return nameFromContact(displayNameSourceContact());
3477     }
3478     + else
3479     + {
3480     +// kdDebug( 14010 ) << k_funcinfo << " source == SourceContact , but there is no displayNameSourceContact for contact " << metaContactId() << endl;
3481     + }
3482     }
3483     return d->displayName;
3484     }
3485     @@ -942,7 +955,6 @@
3486     // set contact source metadata
3487     if (displayNameSourceContact())
3488     {
3489     - //kdDebug(14010) << k_funcinfo << "serializing name source " << nameFromContact(displayNameSourceContact()) << endl;
3490     QDomElement contactNameSource = metaContact.createElement( QString::fromUtf8("contact-source") );
3491     contactNameSource.setAttribute( NSCID_ELEM, displayNameSourceContact()->contactId() );
3492     contactNameSource.setAttribute( NSPID_ELEM, displayNameSourceContact()->protocol()->pluginId() );
3493     --- kopete/libkopete/kopeteawayaction.h (revision 488948)
3494     +++ kopete/libkopete/kopeteawayaction.h (revision 495340)
3495     @@ -61,6 +61,11 @@
3496     const KShortcut &cut, const QObject *receiver, const char *slot,
3497     QObject *parent, const char *name = 0);
3498    
3499     + /**
3500     + * Destructor.
3501     + */
3502     + ~AwayAction();
3503     +
3504     signals:
3505     /**
3506     * @brief Emits when the user selects an away message
3507     --- kopete/libkopete/kopeteaccount.cpp (revision 488948)
3508     +++ kopete/libkopete/kopeteaccount.cpp (revision 495340)
3509     @@ -123,7 +123,7 @@
3510     }
3511     if(reason== OtherClient)
3512     {
3513     - Kopete::Utils::notifyConnectionLost(this, i18n("You have been disconnected"), i18n( "You have connected from another client or computer to the account '%1'" ).arg(d->id), i18n("Most proprietary Instant Messaging services does not allow you to connect from more than one location. Check that nobody is using you account without your permission. If you need a service that supports connection from various locations at the same time, use the Jabber protocol."));
3514     + Kopete::Utils::notifyConnectionLost(this, i18n("You have been disconnected"), i18n( "You have connected from another client or computer to the account '%1'" ).arg(d->id), i18n("Most proprietary Instant Messaging services do not allow you to connect from more than one location. Check that nobody is using your account without your permission. If you need a service that supports connection from various locations at the same time, use the Jabber protocol."));
3515     }
3516     }
3517    
3518     --- kopete/libkopete/kopeteawayaction.cpp (revision 488948)
3519     +++ kopete/libkopete/kopeteawayaction.cpp (revision 495340)
3520     @@ -68,6 +68,11 @@
3521     slotAwayChanged();
3522     }
3523    
3524     +AwayAction::~AwayAction()
3525     +{
3526     + delete d;
3527     +}
3528     +
3529     void AwayAction::slotAwayChanged()
3530     {
3531     QStringList awayMessages = Kopete::Away::getInstance()->getMessages();
3532     --- kopete/libkopete/ui/kopetefileconfirmdialog.cpp (revision 488948)
3533     +++ kopete/libkopete/ui/kopetefileconfirmdialog.cpp (revision 495340)
3534     @@ -42,7 +42,7 @@
3535     m_view=new FileConfirmBase(this, "FileConfirmView");
3536     m_view->m_from->setText( info.contact()->metaContact()->displayName() + QString::fromLatin1( " <" ) +
3537     info.contact()->contactId() + QString::fromLatin1( "> &quo