summaryrefslogtreecommitdiff
authorkergoth <kergoth>2003-08-09 17:00:23 (UTC)
committer kergoth <kergoth>2003-08-09 17:00:23 (UTC)
commitc33d5ec60361238e50a4a9d6e0eec03e396dce60 (patch) (unidiff)
tree31c0c85dc4262044db90c7918014bc45265ef420
parent78c296d534589835801fb6374ac9d43d44b2b1c9 (diff)
downloadopie-c33d5ec60361238e50a4a9d6e0eec03e396dce60.zip
opie-c33d5ec60361238e50a4a9d6e0eec03e396dce60.tar.gz
opie-c33d5ec60361238e50a4a9d6e0eec03e396dce60.tar.bz2
Merge from BRANCH_1_0
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/mailit/config.in2
-rw-r--r--noncore/net/mailit/popclient.cpp57
-rw-r--r--noncore/net/mailit/resource.cpp136
-rw-r--r--noncore/net/mailit/resource.h80
-rw-r--r--noncore/net/mailit/smtpclient.cpp6
-rw-r--r--noncore/net/mailit/viewatt.cpp24
-rw-r--r--noncore/net/opieftp/opieftp.pro2
-rw-r--r--noncore/net/opieirc/config.in2
-rw-r--r--noncore/net/opieirc/ircchannellist.cpp11
-rw-r--r--noncore/net/opieirc/ircchannellist.h1
-rw-r--r--noncore/net/opieirc/ircchanneltab.cpp1
-rw-r--r--noncore/net/opieirc/ircmessageparser.cpp23
-rw-r--r--noncore/net/opieirc/ircservertab.cpp26
-rw-r--r--noncore/net/opieirc/ircsession.cpp4
-rw-r--r--noncore/net/opieirc/ircsession.h1
-rw-r--r--noncore/net/opietooth/blue-pin/pindlg.cc1
-rw-r--r--noncore/net/opietooth/blue-pin/pindlg.h13
-rw-r--r--noncore/net/opietooth/blue-pin/pindlgbase.ui244
-rw-r--r--noncore/net/opietooth/manager/bluebase.cpp2
-rw-r--r--noncore/net/ubrowser/httpfactory.cpp12
-rw-r--r--noncore/net/ubrowser/mainview.cpp6
-rw-r--r--noncore/net/ubrowser/opie-ubrowser.control10
-rw-r--r--noncore/unsupported/mailit/config.in2
-rw-r--r--noncore/unsupported/mailit/popclient.cpp57
-rw-r--r--noncore/unsupported/mailit/resource.cpp136
-rw-r--r--noncore/unsupported/mailit/resource.h80
-rw-r--r--noncore/unsupported/mailit/smtpclient.cpp6
-rw-r--r--noncore/unsupported/mailit/viewatt.cpp24
28 files changed, 334 insertions, 635 deletions
diff --git a/noncore/net/mailit/config.in b/noncore/net/mailit/config.in
index 142b840..2b56b5f 100644
--- a/noncore/net/mailit/config.in
+++ b/noncore/net/mailit/config.in
@@ -1,4 +1,4 @@
1 config MAILIT 1 config MAILIT
2 boolean "opie-mailit (a simple POP3 email client)" 2 boolean "mailit"
3 default "n" 3 default "n"
4 depends ( LIBQPE || LIBQPE-X11 ) 4 depends ( LIBQPE || LIBQPE-X11 )
diff --git a/noncore/net/mailit/popclient.cpp b/noncore/net/mailit/popclient.cpp
index 5da3bcb..1df6b2b 100644
--- a/noncore/net/mailit/popclient.cpp
+++ b/noncore/net/mailit/popclient.cpp
@@ -1,331 +1,332 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2001 Trolltech AS. All rights reserved. 2** Copyright (C) 2001 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of Qt Palmtop Environment. 4** This file is part of Qt Palmtop Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20#include "popclient.h" 20#include "popclient.h"
21#include "emailhandler.h" 21#include "emailhandler.h"
22//#define APOP_TEST 22//#define APOP_TEST
23 23
24extern "C" { 24extern "C" {
25#include "md5.h" 25#include "md5.h"
26} 26}
27 27
28#include <qcstring.h> 28#include <qcstring.h>
29 29
30PopClient::PopClient() 30PopClient::PopClient()
31{ 31{
32 32
33 socket = new QSocket(this, "popClient"); 33 socket = new QSocket(this, "popClient");
34 connect(socket, SIGNAL(error(int)), this, SLOT(errorHandling(int))); 34 connect(socket, SIGNAL(error(int)), this, SLOT(errorHandling(int)));
35 connect(socket, SIGNAL(connected()), this, SLOT(connectionEstablished())); 35 connect(socket, SIGNAL(connected()), this, SLOT(connectionEstablished()));
36 connect(socket, SIGNAL(readyRead()), this, SLOT(incomingData())); 36 connect(socket, SIGNAL(readyRead()), this, SLOT(incomingData()));
37 37
38 stream = new QTextStream(socket); 38 stream = new QTextStream(socket);
39 39
40 receiving = FALSE; 40 receiving = FALSE;
41 synchronize = FALSE; 41 synchronize = FALSE;
42 lastSync = 0; 42 lastSync = 0;
43 headerLimit = 0; 43 headerLimit = 0;
44 mailList = 0;
44 preview = FALSE; 45 preview = FALSE;
45} 46}
46 47
47PopClient::~PopClient() 48PopClient::~PopClient()
48{ 49{
49 delete socket; 50 delete socket;
50 delete stream; 51 delete stream;
51} 52}
52 53
53void PopClient::newConnection(const QString &target, int port) 54void PopClient::newConnection(const QString &target, int port)
54{ 55{
55 if (receiving) { 56 if (receiving) {
56 qWarning("socket in use, connection refused"); 57 qWarning("socket in use, connection refused");
57 return; 58 return;
58 } 59 }
59 60
60 status = Init; 61 status = Init;
61 62
62 socket->connectToHost(target, port); 63 socket->connectToHost(target, port);
63 receiving = TRUE; 64 receiving = TRUE;
64 //selected = FALSE; 65 //selected = FALSE;
65 66
66 emit updateStatus(tr("DNS lookup")); 67 emit updateStatus(tr("DNS lookup"));
67} 68}
68 69
69void PopClient::setAccount(const QString &popUser, const QString &popPasswd) 70void PopClient::setAccount(const QString &popUser, const QString &popPasswd)
70{ 71{
71 popUserName = popUser; 72 popUserName = popUser;
72 popPassword = popPasswd; 73 popPassword = popPasswd;
73} 74}
74 75
75void PopClient::setSynchronize(int lastCount) 76void PopClient::setSynchronize(int lastCount)
76{ 77{
77 synchronize = TRUE; 78 synchronize = TRUE;
78 lastSync = lastCount; 79 lastSync = lastCount;
79} 80}
80 81
81void PopClient::removeSynchronize() 82void PopClient::removeSynchronize()
82{ 83{
83 synchronize = FALSE; 84 synchronize = FALSE;
84 lastSync = 0; 85 lastSync = 0;
85} 86}
86 87
87void PopClient::headersOnly(bool headers, int limit) 88void PopClient::headersOnly(bool headers, int limit)
88{ 89{
89 preview = headers; 90 preview = headers;
90 headerLimit = limit; 91 headerLimit = limit;
91} 92}
92 93
93void PopClient::setSelectedMails(MailList *list) 94void PopClient::setSelectedMails(MailList *list)
94{ 95{
95 selected = TRUE; 96 selected = TRUE;
96 mailList = list; 97 mailList = list;
97} 98}
98 99
99void PopClient::connectionEstablished() 100void PopClient::connectionEstablished()
100{ 101{
101 emit updateStatus(tr("Connection established")); 102 emit updateStatus(tr("Connection established"));
102} 103}
103 104
104void PopClient::errorHandling(int status) 105void PopClient::errorHandling(int status)
105{ 106{
106 errorHandlingWithMsg( status, QString::null ); 107 errorHandlingWithMsg( status, QString::null );
107} 108}
108void PopClient::errorHandlingWithMsg(int status, const QString & Msg ) 109void PopClient::errorHandlingWithMsg(int status, const QString & Msg )
109{ 110{
110 emit updateStatus(tr("Error Occured")); 111 emit updateStatus(tr("Error Occured"));
111 emit errorOccurred(status, Msg); 112 emit errorOccurred(status, Msg);
112 socket->close(); 113 socket->close();
113 receiving = FALSE; 114 receiving = FALSE;
114} 115}
115 116
116void PopClient::incomingData() 117void PopClient::incomingData()
117{ 118{
118 QString response, temp, temp2, timeStamp; 119 QString response, temp, temp2, timeStamp;
119 QString md5Source; 120 QString md5Source;
120 int start, end; 121 int start, end;
121// char *md5Digest; 122// char *md5Digest;
122 char md5Digest[16]; 123 char md5Digest[16];
123// if ( !socket->canReadLine() ) 124// if ( !socket->canReadLine() )
124// return; 125// return;
125 126
126 127
127 response = socket->readLine(); 128 response = socket->readLine();
128 129
129 switch(status) { 130 switch(status) {
130 //logging in 131 //logging in
131 case Init: { 132 case Init: {
132#ifdef APOP_TEST 133#ifdef APOP_TEST
133 start = response.find('<',0); 134 start = response.find('<',0);
134 end = response.find('>', start); 135 end = response.find('>', start);
135 if( start >= 0 && end > start ) 136 if( start >= 0 && end > start )
136 { 137 {
137 timeStamp = response.mid( start , end - start + 1); 138 timeStamp = response.mid( start , end - start + 1);
138 md5Source = timeStamp + popPassword; 139 md5Source = timeStamp + popPassword;
139 140
140 md5_buffer( (char const *)md5Source, md5Source.length(),&md5Digest[0]); 141 md5_buffer( (char const *)md5Source, md5Source.length(),&md5Digest[0]);
141 142
142 for(int j =0;j < MD5_DIGEST_LENGTH ;j++) 143 for(int j =0;j < MD5_DIGEST_LENGTH ;j++)
143 { 144 {
144 printf("%x", md5Digest[j]); 145 printf("%x", md5Digest[j]);
145 } 146 }
146 printf("\n"); 147 printf("\n");
147// qDebug(md5Digest); 148// qDebug(md5Digest);
148 *stream << "APOP " << popUserName << " " << md5Digest << "\r\n"; 149 *stream << "APOP " << popUserName << " " << md5Digest << "\r\n";
149 // qDebug("%s", stream); 150 // qDebug("%s", stream);
150 status = Stat; 151 status = Stat;
151 } 152 }
152 else 153 else
153#endif 154#endif
154 { 155 {
155 timeStamp = ""; 156 timeStamp = "";
156 *stream << "USER " << popUserName << "\r\n"; 157 *stream << "USER " << popUserName << "\r\n";
157 status = Pass; 158 status = Pass;
158 } 159 }
159 160
160 break; 161 break;
161 } 162 }
162 163
163 case Pass: { 164 case Pass: {
164 *stream << "PASS " << popPassword << "\r\n"; 165 *stream << "PASS " << popPassword << "\r\n";
165 status = Stat; 166 status = Stat;
166 167
167 break; 168 break;
168 } 169 }
169 //ask for number of messages 170 //ask for number of messages
170 case Stat: { 171 case Stat: {
171 if (response[0] == '+') { 172 if (response[0] == '+') {
172 *stream << "STAT" << "\r\n"; 173 *stream << "STAT" << "\r\n";
173 status = Mcnt; 174 status = Mcnt;
174 } else errorHandlingWithMsg(ErrLoginFailed, response); 175 } else errorHandlingWithMsg(ErrLoginFailed, response);
175 break; 176 break;
176 } 177 }
177 //get count of messages, eg "+OK 4 900.." -> int 4 178 //get count of messages, eg "+OK 4 900.." -> int 4
178 case Mcnt: { 179 case Mcnt: {
179 if (response[0] == '+') { 180 if (response[0] == '+') {
180 temp = response.replace(0, 4, ""); 181 temp = response.replace(0, 4, "");
181 int x = temp.find(" ", 0); 182 int x = temp.find(" ", 0);
182 temp.truncate((uint) x); 183 temp.truncate((uint) x);
183 newMessages = temp.toInt(); 184 newMessages = temp.toInt();
184 messageCount = 1; 185 messageCount = 1;
185 status = List; 186 status = List;
186 187
187 if (synchronize) { 188 if (synchronize) {
188 //messages deleted from server, reload all 189 //messages deleted from server, reload all
189 if (newMessages < lastSync) 190 if (newMessages < lastSync)
190 lastSync = 0; 191 lastSync = 0;
191 messageCount = 1; 192 messageCount = 1;
192 } 193 }
193 194
194 if (selected) { 195 if (selected && mailList ) {
195 int *ptr = mailList->first(); 196 int *ptr = mailList->first();
196 if (ptr != 0) { 197 if (ptr != 0) {
197 newMessages++; //to ensure no early jumpout 198 newMessages++; //to ensure no early jumpout
198 messageCount = *ptr; 199 messageCount = *ptr;
199 } else newMessages = 0; 200 } else newMessages = 0;
200 } 201 }
201 202
202 } else errorHandlingWithMsg(ErrUnknownResponse, response); 203 } else errorHandlingWithMsg(ErrUnknownResponse, response);
203 } 204 }
204 //Read message number x, count upwards to messageCount 205 //Read message number x, count upwards to messageCount
205 case List: { 206 case List: {
206 if (messageCount <= newMessages) { 207 if (messageCount <= newMessages) {
207 *stream << "LIST " << messageCount << "\r\n"; 208 *stream << "LIST " << messageCount << "\r\n";
208 status = Size; 209 status = Size;
209 temp2.setNum(newMessages - lastSync); 210 temp2.setNum(newMessages - lastSync);
210 temp.setNum(messageCount - lastSync); 211 temp.setNum(messageCount - lastSync);
211 if (!selected) { 212 if (!selected) {
212 emit updateStatus(tr("Retrieving ") + temp + "/" + temp2); 213 emit updateStatus(tr("Retrieving ") + temp + "/" + temp2);
213 } else { 214 } else {
214 //completing a previously closed transfer 215 //completing a previously closed transfer
215 /* if ( (messageCount - lastSync) <= 0) { 216 /* if ( (messageCount - lastSync) <= 0) {
216 temp.setNum(messageCount); 217 temp.setNum(messageCount);
217 emit updateStatus(tr("Previous message ") + temp); 218 emit updateStatus(tr("Previous message ") + temp);
218 } else {*/ 219 } else {*/
219 emit updateStatus(tr("Completing message ") + temp); 220 emit updateStatus(tr("Completing message ") + temp);
220 //} 221 //}
221 } 222 }
222 break; 223 break;
223 } else { 224 } else {
224 emit updateStatus(tr("No new Messages")); 225 emit updateStatus(tr("No new Messages"));
225 status = Quit; 226 status = Quit;
226 } 227 }
227 } 228 }
228 //get size of message, eg "500 characters in message.." -> int 500 229 //get size of message, eg "500 characters in message.." -> int 500
229 case Size: { 230 case Size: {
230 if (status != Quit) { //because of idiotic switch 231 if (status != Quit) { //because of idiotic switch
231 if (response[0] == '+') { 232 if (response[0] == '+') {
232 temp = response.replace(0, 4, ""); 233 temp = response.replace(0, 4, "");
233 int x = temp.find(" ", 0); 234 int x = temp.find(" ", 0);
234 temp = temp.right(temp.length() - ((uint) x + 1) ); 235 temp = temp.right(temp.length() - ((uint) x + 1) );
235 mailSize = temp.toInt(); 236 mailSize = temp.toInt();
236 emit currentMailSize(mailSize); 237 emit currentMailSize(mailSize);
237 238
238 status = Retr; 239 status = Retr;
239 } else { 240 } else {
240 //qWarning(response); 241 //qWarning(response);
241 errorHandlingWithMsg(ErrUnknownResponse, response); 242 errorHandlingWithMsg(ErrUnknownResponse, response);
242 } 243 }
243 } 244 }
244 } 245 }
245 //Read message number x, count upwards to messageCount 246 //Read message number x, count upwards to messageCount
246 case Retr: { 247 case Retr: {
247 if (status != Quit) { 248 if (status != Quit) {
248 if ((selected)||(mailSize <= headerLimit)) 249 if ((selected)||(mailSize <= headerLimit))
249 { 250 {
250 *stream << "RETR " << messageCount << "\r\n"; 251 *stream << "RETR " << messageCount << "\r\n";
251 } else { //only header 252 } else { //only header
252 *stream << "TOP " << messageCount << " 0\r\n"; 253 *stream << "TOP " << messageCount << " 0\r\n";
253 } 254 }
254 messageCount++; 255 messageCount++;
255 status = Ignore; 256 status = Ignore;
256 break; 257 break;
257 } } 258 } }
258 case Ignore: { 259 case Ignore: {
259 if (status != Quit) { //because of idiotic switch 260 if (status != Quit) { //because of idiotic switch
260 if (response[0] == '+') { 261 if (response[0] == '+') {
261 message = ""; 262 message = "";
262 status = Read; 263 status = Read;
263 if (!socket->canReadLine()) //sync. problems 264 if (!socket->canReadLine()) //sync. problems
264 break; 265 break;
265 response = socket->readLine(); 266 response = socket->readLine();
266 } else errorHandlingWithMsg(ErrUnknownResponse, response); 267 } else errorHandlingWithMsg(ErrUnknownResponse, response);
267 } 268 }
268 } 269 }
269 //add all incoming lines to body. When size is reached, send 270 //add all incoming lines to body. When size is reached, send
270 //message, and go back to read new message 271 //message, and go back to read new message
271 case Read: { 272 case Read: {
272 if (status != Quit) { //because of idiotic switch 273 if (status != Quit) { //because of idiotic switch
273 message += response; 274 message += response;
274 while ( socket->canReadLine() ) { 275 while ( socket->canReadLine() ) {
275 response = socket->readLine(); 276 response = socket->readLine();
276 message += response; 277 message += response;
277 } 278 }
278 emit downloadedSize(message.length()); 279 emit downloadedSize(message.length());
279 int x = message.find("\r\n.\r\n",-5); 280 int x = message.find("\r\n.\r\n",-5);
280 if (x == -1) { 281 if (x == -1) {
281 break; 282 break;
282 } else { //message reach entire size 283 } else { //message reach entire size
283 if ( (selected)||(mailSize <= headerLimit)) //mail size limit is not used if late download is active 284 if ( (selected)||(mailSize <= headerLimit)) //mail size limit is not used if late download is active
284 { 285 {
285 emit newMessage(message, messageCount-1, mailSize, TRUE); 286 emit newMessage(message, messageCount-1, mailSize, TRUE);
286 } else { //incomplete mail downloaded 287 } else { //incomplete mail downloaded
287 emit newMessage(message, messageCount-1, mailSize, FALSE); 288 emit newMessage(message, messageCount-1, mailSize, FALSE);
288 } 289 }
289 290
290 if ((messageCount > newMessages)||(selected)) //last message ? 291 if ((messageCount > newMessages)||(selected)) //last message ?
291 { 292 {
292 status = Quit; 293 status = Quit;
293 if (selected) { //grab next from queue 294 if (selected) { //grab next from queue
294 newMessages--; 295 newMessages--;
295 status = Quit; 296 status = Quit;
296 } 297 }
297 } 298 }
298 else 299 else
299 { 300 {
300 *stream << "LIST " << messageCount << "\r\n"; 301 *stream << "LIST " << messageCount << "\r\n";
301 status = Size; 302 status = Size;
302 temp2.setNum(newMessages - lastSync); 303 temp2.setNum(newMessages - lastSync);
303 temp.setNum(messageCount - lastSync); 304 temp.setNum(messageCount - lastSync);
304 emit updateStatus(tr("Retrieving ") + temp + "/" + temp2); 305 emit updateStatus(tr("Retrieving ") + temp + "/" + temp2);
305 306
306 break; 307 break;
307 } 308 }
308 } 309 }
309 } 310 }
310 if (status != Quit) 311 if (status != Quit)
311 break; 312 break;
312 } 313 }
313 case Quit: { 314 case Quit: {
314 *stream << "Quit\r\n"; 315 *stream << "Quit\r\n";
315 status = Done; 316 status = Done;
316 int newM = newMessages - lastSync; 317 int newM = newMessages - lastSync;
317 if (newM > 0) { 318 if (newM > 0) {
318 temp.setNum(newM); 319 temp.setNum(newM);
319 emit updateStatus(temp + tr(" new messages")); 320 emit updateStatus(temp + tr(" new messages"));
320 } else { 321 } else {
321 emit updateStatus(tr("No new messages")); 322 emit updateStatus(tr("No new messages"));
322 } 323 }
323 324
324 socket->close(); 325 socket->close();
325 receiving = FALSE; 326 receiving = FALSE;
326 emit mailTransfered(newM); 327 emit mailTransfered(newM);
327 break; 328 break;
328 } 329 }
329 } 330 }
330 331
331} 332}
diff --git a/noncore/net/mailit/resource.cpp b/noncore/net/mailit/resource.cpp
deleted file mode 100644
index dc19880..0000000
--- a/noncore/net/mailit/resource.cpp
+++ b/dev/null
@@ -1,136 +0,0 @@
1/**********************************************************************
2** Copyright (C) 2000 Trolltech AS. All rights reserved.
3**
4** This file is part of Qtopia Environment.
5**
6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file.
10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15**
16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you.
18**
19**********************************************************************/
20
21#include "qpeapplication.h"
22#include "resource.h"
23#include <qdir.h>
24#include <qfile.h>
25#include <qregexp.h>
26#include <qpixmapcache.h>
27#include <qpainter.h>
28
29#include "inlinepics_p.h"
30
31/*!
32 \class Resource resource.h
33 \brief The Resource class provides access to named resources.
34
35 The resources may be provided from files or other sources.
36*/
37
38/*!
39 \fn Resource::Resource()
40 \internal
41*/
42
43/*!
44 Returns the QPixmap named \a pix. You should avoid including
45 any filename type extension (eg. .png, .xpm).
46*/
47QPixmap Resource::loadPixmap( const QString &pix )
48{
49 QPixmap pm;
50 QString key="QPE_"+pix;
51 if ( !QPixmapCache::find(key,pm) ) {
52 pm.convertFromImage(loadImage(pix));
53 QPixmapCache::insert(key,pm);
54 }
55 return pm;
56}
57
58/*!
59 Returns the QBitmap named \a pix. You should avoid including
60 any filename type extension (eg. .png, .xpm).
61*/
62QBitmap Resource::loadBitmap( const QString &pix )
63{
64 QBitmap bm;
65 bm = loadPixmap(pix);
66 return bm;
67}
68
69/*!
70 Returns the filename of a pixmap named \a pix. You should avoid including
71 any filename type extension (eg. .png, .xpm).
72
73 Normally you will use loadPixmap() rather than this function.
74*/
75QString Resource::findPixmap( const QString &pix )
76{
77 QString picsPath = QPEApplication::qpeDir() + "pics/";
78
79 if ( QFile( picsPath + pix + ".png").exists() )
80 return picsPath + pix + ".png";
81 else if ( QFile( picsPath + pix + ".xpm").exists() )
82 return picsPath + pix + ".xpm";
83 else if ( QFile( picsPath + pix ).exists() )
84 return picsPath + pix;
85
86 //qDebug("Cannot find pixmap: %s", pix.latin1());
87 return QString();
88}
89
90/*!
91 Returns a sound file for a sound named \a name.
92 You should avoid including any filename type extension (eg. .wav, .au, .mp3).
93*/
94QString Resource::findSound( const QString &name )
95{
96 QString picsPath = QPEApplication::qpeDir() + "sounds/";
97
98 QString result;
99 if ( QFile( (result = picsPath + name + ".wav") ).exists() )
100 return result;
101
102 return QString();
103}
104
105/*!
106 Returns a list of all sound names.
107*/
108QStringList Resource::allSounds()
109{
110 QDir resourcedir( QPEApplication::qpeDir() + "sounds/", "*.wav" );
111 QStringList entries = resourcedir.entryList();
112 QStringList result;
113 for (QStringList::Iterator i=entries.begin(); i != entries.end(); ++i)
114 result.append((*i).replace(QRegExp("\\.wav"),""));
115 return result;
116}
117
118/*!
119 Returns the QImage named \a name. You should avoid including
120 any filename type extension (eg. .png, .xpm).
121*/
122QImage Resource::loadImage( const QString &name)
123{
124 QImage img = qembed_findImage(name.latin1());
125 if ( img.isNull() )
126 return QImage(findPixmap(name));
127 return img;
128}
129
130/*!
131 \fn QIconSet Resource::loadIconSet( const QString &name )
132
133 Returns a QIconSet for the pixmap named \a name. A disabled icon is
134 generated that conforms to the Qtopia look & feel. You should avoid
135 including any filename type extension (eg. .png, .xpm).
136*/
diff --git a/noncore/net/mailit/resource.h b/noncore/net/mailit/resource.h
deleted file mode 100644
index 982c58a..0000000
--- a/noncore/net/mailit/resource.h
+++ b/dev/null
@@ -1,80 +0,0 @@
1/**********************************************************************
2** Copyright (C) 2000 Trolltech AS. All rights reserved.
3**
4** This file is part of Qtopia Environment.
5**
6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file.
10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15**
16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you.
18**
19**********************************************************************/
20#ifndef PIXMAPLOADER_H
21#define PIXMAPLOADER_H
22
23#include <qimage.h>
24#include <qbitmap.h>
25#include <qiconset.h>
26#include <qstringlist.h>
27
28class Resource
29{
30public:
31 Resource() {}
32
33 static QImage loadImage( const QString &name);
34
35 static QPixmap loadPixmap( const QString &name );
36 static QBitmap loadBitmap( const QString &name );
37 static QString findPixmap( const QString &name );
38
39 static QIconSet loadIconSet( const QString &name );
40
41 static QString findSound( const QString &name );
42 static QStringList allSounds();
43};
44
45// Inline for compatibility with SHARP ROMs
46inline QIconSet Resource::loadIconSet( const QString &pix )
47{
48 QImage img = loadImage( pix );
49 QPixmap pm;
50 pm.convertFromImage( img );
51 QIconSet is( pm );
52 QIconSet::Size size = pm.width() <= 22 ? QIconSet::Small : QIconSet::Large;
53
54 QPixmap dpm = loadPixmap( pix + "_disabled" );
55
56 #ifndef QT_NO_DEPTH_32// have alpha-blended pixmaps
57 if ( dpm.isNull() ) {
58 QImage dimg( img.width(), img.height(), 32 );
59 for ( int y = 0; y < img.height(); y++ ) {
60 for ( int x = 0; x < img.width(); x++ ) {
61 QRgb p = img.pixel( x, y );
62 uint a = (p & 0xff000000) / 3;
63 p = (p & 0x00ffffff) | (a & 0xff000000);
64 dimg.setPixel( x, y, p );
65 }
66 }
67
68 dimg.setAlphaBuffer( TRUE );
69 dpm.convertFromImage( dimg );
70 }
71#endif
72
73 if ( !dpm.isNull() )
74 is.setPixmap( dpm, size, QIconSet::Disabled );
75
76 return is;
77}
78
79
80#endif
diff --git a/noncore/net/mailit/smtpclient.cpp b/noncore/net/mailit/smtpclient.cpp
index 5b5ef52..51ca50b 100644
--- a/noncore/net/mailit/smtpclient.cpp
+++ b/noncore/net/mailit/smtpclient.cpp
@@ -59,112 +59,112 @@ void SmtpClient::addMail(const QString &from, const QString &subject, const QStr
59 59
60 mail->from = from; 60 mail->from = from;
61 mail->subject = subject; 61 mail->subject = subject;
62 mail->to = to; 62 mail->to = to;
63 mail->body = body; 63 mail->body = body;
64 64
65 mailList.append(mail); 65 mailList.append(mail);
66} 66}
67 67
68void SmtpClient::connectionEstablished() 68void SmtpClient::connectionEstablished()
69{ 69{
70 emit updateStatus(tr("Connection established")); 70 emit updateStatus(tr("Connection established"));
71 71
72} 72}
73 73
74void SmtpClient::errorHandling(int status) 74void SmtpClient::errorHandling(int status)
75{ 75{
76 errorHandlingWithMsg( status, QString::null ); 76 errorHandlingWithMsg( status, QString::null );
77} 77}
78 78
79void SmtpClient::errorHandlingWithMsg(int status, const QString & EMsg ) 79void SmtpClient::errorHandlingWithMsg(int status, const QString & EMsg )
80{ 80{
81 emit errorOccurred(status, EMsg ); 81 emit errorOccurred(status, EMsg );
82 socket->close(); 82 socket->close();
83 mailList.clear(); 83 mailList.clear();
84 sending = FALSE; 84 sending = FALSE;
85} 85}
86 86
87void SmtpClient::incomingData() 87void SmtpClient::incomingData()
88{ 88{
89 QString response; 89 QString response;
90 90
91 if (!socket->canReadLine()) 91 if (!socket->canReadLine())
92 return; 92 return;
93 93
94 response = socket->readLine(); 94 response = socket->readLine();
95 switch(status) { 95 switch(status) {
96 case Init: { 96 case Init: {
97 if (response[0] == '2') { 97 if (response[0] == '2') {
98 status = From; 98 status = From;
99 mailPtr = mailList.first(); 99 mailPtr = mailList.first();
100 *stream << "HELO there\r\n"; 100 *stream << "HELO there\r\n";
101 } else errorHandlingWithMsg(ErrUnknownResponse,response); 101 } else errorHandlingWithMsg(ErrUnknownResponse,response);
102 break; 102 break;
103 } 103 }
104 case From: { 104 case From: {
105 if (response[0] == '2') { 105 if (response[0] == '2') {
106 qDebug(mailPtr->from); 106 qDebug(mailPtr->from);
107 *stream << "MAIL FROM: <" << mailPtr->from << ">\r\n"; 107 *stream << "MAIL FROM: " << mailPtr->from << "\r\n";
108 status = Recv; 108 status = Recv;
109 } else errorHandlingWithMsg(ErrUnknownResponse, response ); 109 } else errorHandlingWithMsg(ErrUnknownResponse, response );
110 break; 110 break;
111 } 111 }
112 case Recv: { 112 case Recv: {
113 if (response[0] == '2') { 113 if (response[0] == '2') {
114 it = mailPtr->to.begin(); 114 it = mailPtr->to.begin();
115 if (it == NULL) { 115 if (it == NULL) {
116 errorHandlingWithMsg(ErrUnknownResponse,response); 116 errorHandlingWithMsg(ErrUnknownResponse,response);
117 } 117 }
118 *stream << "RCPT TO: <" << *it << ">\r\n"; 118 *stream << "RCPT TO: " << *it << "\r\n";
119 status = MRcv; 119 status = MRcv;
120 } else errorHandlingWithMsg(ErrUnknownResponse,response); 120 } else errorHandlingWithMsg(ErrUnknownResponse,response);
121 break; 121 break;
122 } 122 }
123 case MRcv: { 123 case MRcv: {
124 if (response[0] == '2') { 124 if (response[0] == '2') {
125 it++; 125 it++;
126 if ( it != mailPtr->to.end() ) { 126 if ( it != mailPtr->to.end() ) {
127 *stream << "RCPT TO: <" << *it << ">\r\n"; 127 *stream << "RCPT TO: " << *it << "\r\n";
128 break; 128 break;
129 } else { 129 } else {
130 status = Data; 130 status = Data;
131 } 131 }
132 } else errorHandlingWithMsg(ErrUnknownResponse,response); 132 } else errorHandlingWithMsg(ErrUnknownResponse,response);
133 } 133 }
134 case Data: { 134 case Data: {
135 if (response[0] == '2') { 135 if (response[0] == '2') {
136 *stream << "DATA\r\n"; 136 *stream << "DATA\r\n";
137 status = Body; 137 status = Body;
138 emit updateStatus(tr("Sending: ") + mailPtr->subject); 138 emit updateStatus(tr("Sending: ") + mailPtr->subject);
139 139
140 } else errorHandlingWithMsg(ErrUnknownResponse,response); 140 } else errorHandlingWithMsg(ErrUnknownResponse,response);
141 break; 141 break;
142 } 142 }
143 case Body: { 143 case Body: {
144 if (response[0] == '3') { 144 if (response[0] == '3') {
145 *stream << mailPtr->body << "\r\n.\r\n"; 145 *stream << mailPtr->body << "\r\n.\r\n";
146 mailPtr = mailList.next(); 146 mailPtr = mailList.next();
147 if (mailPtr != NULL) { 147 if (mailPtr != NULL) {
148 status = From; 148 status = From;
149 } else { 149 } else {
150 status = Quit; 150 status = Quit;
151 } 151 }
152 } else errorHandlingWithMsg(ErrUnknownResponse,response); 152 } else errorHandlingWithMsg(ErrUnknownResponse,response);
153 break; 153 break;
154 } 154 }
155 case Quit: { 155 case Quit: {
156 if (response[0] == '2') { 156 if (response[0] == '2') {
157 *stream << "QUIT\r\n"; 157 *stream << "QUIT\r\n";
158 status = Done; 158 status = Done;
159 QString temp; 159 QString temp;
160 temp.setNum(mailList.count()); 160 temp.setNum(mailList.count());
161 emit updateStatus(tr("Sent ") + temp + tr(" messages")); 161 emit updateStatus(tr("Sent ") + temp + tr(" messages"));
162 emit mailSent(); 162 emit mailSent();
163 mailList.clear(); 163 mailList.clear();
164 sending = FALSE; 164 sending = FALSE;
165 socket->close(); 165 socket->close();
166 } else errorHandlingWithMsg(ErrUnknownResponse,response); 166 } else errorHandlingWithMsg(ErrUnknownResponse,response);
167 break; 167 break;
168 } 168 }
169 } 169 }
170} 170}
diff --git a/noncore/net/mailit/viewatt.cpp b/noncore/net/mailit/viewatt.cpp
index 293e137..3515ba5 100644
--- a/noncore/net/mailit/viewatt.cpp
+++ b/noncore/net/mailit/viewatt.cpp
@@ -1,121 +1,121 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2001 Trolltech AS. All rights reserved. 2** Copyright (C) 2001 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of Qt Palmtop Environment. 4** This file is part of Qt Palmtop Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20#include "resource.h" 20#include <qpe/resource.h>
21#include "viewatt.h" 21#include "viewatt.h"
22#include <qwhatsthis.h> 22#include <qwhatsthis.h>
23#include <qpe/applnk.h> 23#include <qpe/applnk.h>
24#include <qpe/mimetype.h> 24#include <qpe/mimetype.h>
25 25
26ViewAtt::ViewAtt(QWidget *parent, const char *name, WFlags f) 26ViewAtt::ViewAtt(QWidget *parent, const char *name, WFlags f)
27 : QMainWindow(parent, name, f) 27 : QMainWindow(parent, name, f)
28{ 28{
29 setCaption(tr("Exploring attatchments")); 29 setCaption(tr("Exploring attatchments"));
30 30
31 setToolBarsMovable( FALSE ); 31 setToolBarsMovable( FALSE );
32 bar = new QToolBar(this); 32 bar = new QToolBar(this);
33 installButton = new QAction( tr( "Install" ), Resource::loadPixmap( "exec" ), QString::null, CTRL + Key_C, this, 0 ); 33 installButton = new QAction( tr( "Install" ), Resource::loadPixmap( "exec" ), QString::null, CTRL + Key_C, this, 0 );
34 connect(installButton, SIGNAL(activated()), this, SLOT(install()) ); 34 connect(installButton, SIGNAL(activated()), this, SLOT(install()) );
35 installButton->setWhatsThis(tr("Click here to install the attachment to your Documents")); 35 installButton->setWhatsThis(tr("Click here to install the attachment to your Documents"));
36 36
37 listView = new QListView(this, "AttView"); 37 listView = new QListView(this, "AttView");
38 listView->addColumn( tr("Attatchment") ); 38 listView->addColumn( tr("Attatchment") );
39 listView->addColumn( tr("Type") ); 39 listView->addColumn( tr("Type") );
40 listView->addColumn( tr("Installed") ); 40 listView->addColumn( tr("Installed") );
41 setCentralWidget(listView); 41 setCentralWidget(listView);
42 QWhatsThis::add(listView,QWidget::tr("This is an overview about all attachments in the mail")); 42 QWhatsThis::add(listView,QWidget::tr("This is an overview about all attachments in the mail"));
43} 43}
44 44
45void ViewAtt::update(Email *mailIn, bool inbox) 45void ViewAtt::update(Email *mailIn, bool inbox)
46{ 46{
47 QListViewItem *item; 47 QListViewItem *item;
48 Enclosure *ePtr; 48 Enclosure *ePtr;
49
50 49
51 50
51
52 listView->clear(); 52 listView->clear();
53 if (inbox) { 53 if (inbox) {
54 bar->clear(); 54 bar->clear();
55 installButton->addTo( bar ); 55 installButton->addTo( bar );
56 bar->show(); 56 bar->show();
57 } else { 57 } else {
58 bar->hide(); 58 bar->hide();
59 } 59 }
60 60
61 mail = mailIn; 61 mail = mailIn;
62 for ( ePtr=mail->files.first(); ePtr != 0; ePtr=mail->files.next() ) { 62 for ( ePtr=mail->files.first(); ePtr != 0; ePtr=mail->files.next() ) {
63 63
64 QString isInstalled = tr("No"); 64 QString isInstalled = tr("No");
65 if (ePtr->installed) 65 if (ePtr->installed)
66 isInstalled = tr("Yes"); 66 isInstalled = tr("Yes");
67 item = new QListViewItem(listView, ePtr->originalName, ePtr->contentType, isInstalled); 67 item = new QListViewItem(listView, ePtr->originalName, ePtr->contentType, isInstalled);
68 68
69 const QString& mtypeDef=(const QString&) ePtr->contentType+"/"+ePtr->contentAttribute; 69 const QString& mtypeDef=(const QString&) ePtr->contentType+"/"+ePtr->contentAttribute;
70 70
71 MimeType mt(mtypeDef); 71 MimeType mt(mtypeDef);
72 72
73 item->setPixmap(0, mt.pixmap()); 73 item->setPixmap(0, mt.pixmap());
74 74
75 /* 75 /*
76 if (ePtr->contentType == "TEXT") { 76 if (ePtr->contentType == "TEXT") {
77 actions = new QAction( tr("View"), Resource::loadPixmap("TextEditor"), QString::null, CTRL + Key_C, this, 0); 77 actions = new QAction( tr("View"), Resource::loadPixmap("TextEditor"), QString::null, CTRL + Key_C, this, 0);
78 actions->addTo(bar); 78 actions->addTo(bar);
79 } 79 }
80 if (ePtr->contentType == "AUDIO") { 80 if (ePtr->contentType == "AUDIO") {
81 actions = new QAction( tr("Play"), Resource::loadPixmap("SoundPlayer"), QString::null, CTRL + Key_C, this, 0); 81 actions = new QAction( tr("Play"), Resource::loadPixmap("SoundPlayer"), QString::null, CTRL + Key_C, this, 0);
82 actions->addTo(bar); 82 actions->addTo(bar);
83 item->setPixmap(0, Resource::loadPixmap("play")); 83 item->setPixmap(0, Resource::loadPixmap("play"));
84 } 84 }
85 if (ePtr->contentType == "IMAGE") { 85 if (ePtr->contentType == "IMAGE") {
86 actions = new QAction( tr("Show"), Resource::loadPixmap("pixmap"), QString::null, CTRL + Key_C, this, 0); 86 actions = new QAction( tr("Show"), Resource::loadPixmap("pixmap"), QString::null, CTRL + Key_C, this, 0);
87 actions->addTo(bar); 87 actions->addTo(bar);
88 item->setPixmap(0, Resource::loadPixmap("pixmap")); 88 item->setPixmap(0, Resource::loadPixmap("pixmap"));
89 }*/ 89 }*/
90 } 90 }
91} 91}
92 92
93void ViewAtt::install() 93void ViewAtt::install()
94{ 94{
95 Enclosure *ePtr, *selPtr; 95 Enclosure *ePtr, *selPtr;
96 QListViewItem *item; 96 QListViewItem *item;
97 QString filename; 97 QString filename;
98 DocLnk d; 98 DocLnk d;
99 99
100 item = listView->selectedItem(); 100 item = listView->selectedItem();
101 if (item != NULL) { 101 if (item != NULL) {
102 filename = item->text(0); 102 filename = item->text(0);
103 selPtr = NULL; 103 selPtr = NULL;
104 for ( ePtr=mail->files.first(); ePtr != 0; ePtr=mail->files.next() ) { 104 for ( ePtr=mail->files.first(); ePtr != 0; ePtr=mail->files.next() ) {
105 if (ePtr->originalName == filename) 105 if (ePtr->originalName == filename)
106 selPtr = ePtr; 106 selPtr = ePtr;
107 } 107 }
108 108
109 if (selPtr == NULL) { 109 if (selPtr == NULL) {
110 qWarning("Internal error, file is not installed to documents"); 110 qWarning("Internal error, file is not installed to documents");
111 return; 111 return;
112 } 112 }
113 113
114 d.setName(selPtr->originalName); 114 d.setName(selPtr->originalName);
115 d.setFile(selPtr->path + selPtr->name); 115 d.setFile(selPtr->path + selPtr->name);
116 d.setType(selPtr->contentType + "/" + selPtr->contentAttribute); 116 d.setType(selPtr->contentType + "/" + selPtr->contentAttribute);
117 d.writeLink(); 117 d.writeLink();
118 selPtr->installed = TRUE; 118 selPtr->installed = TRUE;
119 item->setText(2, tr("Yes")); 119 item->setText(2, tr("Yes"));
120 } 120 }
121} 121}
diff --git a/noncore/net/opieftp/opieftp.pro b/noncore/net/opieftp/opieftp.pro
index dbccd98..ac16819 100644
--- a/noncore/net/opieftp/opieftp.pro
+++ b/noncore/net/opieftp/opieftp.pro
@@ -1,31 +1,31 @@
1TEMPLATE = app 1TEMPLATE = app
2CONFIG += qt warn_on release 2CONFIG += qt warn_on release
3HEADERS = opieftp.h inputDialog.h ftplib.h 3HEADERS = opieftp.h inputDialog.h
4SOURCES = opieftp.cpp inputDialog.cpp main.cpp 4SOURCES = opieftp.cpp inputDialog.cpp main.cpp
5TARGET = opieftp 5TARGET = opieftp
6DESTDIR = $(OPIEDIR)/bin 6DESTDIR = $(OPIEDIR)/bin
7INCLUDEPATH += $(OPIEDIR)/include 7INCLUDEPATH += $(OPIEDIR)/include
8DEPENDPATH += $(OPIEDIR)/include 8DEPENDPATH += $(OPIEDIR)/include
9LIBS += -lqpe -lftplib 9LIBS += -lqpe -lftplib
10 10
11TRANSLATIONS = ../../../i18n/de/opieftp.ts \ 11TRANSLATIONS = ../../../i18n/de/opieftp.ts \
12 ../../../i18n/nl/opieftp.ts \ 12 ../../../i18n/nl/opieftp.ts \
13 ../../../i18n/da/opieftp.ts \ 13 ../../../i18n/da/opieftp.ts \
14 ../../../i18n/xx/opieftp.ts \ 14 ../../../i18n/xx/opieftp.ts \
15 ../../../i18n/en/opieftp.ts \ 15 ../../../i18n/en/opieftp.ts \
16 ../../../i18n/es/opieftp.ts \ 16 ../../../i18n/es/opieftp.ts \
17 ../../../i18n/fr/opieftp.ts \ 17 ../../../i18n/fr/opieftp.ts \
18 ../../../i18n/hu/opieftp.ts \ 18 ../../../i18n/hu/opieftp.ts \
19 ../../../i18n/ja/opieftp.ts \ 19 ../../../i18n/ja/opieftp.ts \
20 ../../../i18n/ko/opieftp.ts \ 20 ../../../i18n/ko/opieftp.ts \
21 ../../../i18n/no/opieftp.ts \ 21 ../../../i18n/no/opieftp.ts \
22 ../../../i18n/pl/opieftp.ts \ 22 ../../../i18n/pl/opieftp.ts \
23 ../../../i18n/pt/opieftp.ts \ 23 ../../../i18n/pt/opieftp.ts \
24 ../../../i18n/pt_BR/opieftp.ts \ 24 ../../../i18n/pt_BR/opieftp.ts \
25 ../../../i18n/sl/opieftp.ts \ 25 ../../../i18n/sl/opieftp.ts \
26 ../../../i18n/zh_CN/opieftp.ts \ 26 ../../../i18n/zh_CN/opieftp.ts \
27 ../../../i18n/zh_TW/opieftp.ts 27 ../../../i18n/zh_TW/opieftp.ts
28 28
29 29
30 30
31include ( $(OPIEDIR)/include.pro ) 31include ( $(OPIEDIR)/include.pro )
diff --git a/noncore/net/opieirc/config.in b/noncore/net/opieirc/config.in
index 30184a9..7c6949d 100644
--- a/noncore/net/opieirc/config.in
+++ b/noncore/net/opieirc/config.in
@@ -1,4 +1,4 @@
1 config OPIEIRC 1 config OPIEIRC
2 boolean "opieirc" 2 boolean "opie-irc (chat via your favorite IRC server)"
3 default "y" 3 default "y"
4 depends ( LIBQPE || LIBQPE-X11 ) && LIBOPIE 4 depends ( LIBQPE || LIBQPE-X11 ) && LIBOPIE
diff --git a/noncore/net/opieirc/ircchannellist.cpp b/noncore/net/opieirc/ircchannellist.cpp
index e592d05..566b223 100644
--- a/noncore/net/opieirc/ircchannellist.cpp
+++ b/noncore/net/opieirc/ircchannellist.cpp
@@ -1,37 +1,48 @@
1#include <qpe/resource.h> 1#include <qpe/resource.h>
2#include <qpixmap.h> 2#include <qpixmap.h>
3#include "ircchannellist.h" 3#include "ircchannellist.h"
4 4
5IRCChannelList::IRCChannelList(IRCChannel *channel, QWidget *parent, const char *name, WFlags f) : QListBox(parent, name, f) { 5IRCChannelList::IRCChannelList(IRCChannel *channel, QWidget *parent, const char *name, WFlags f) : QListBox(parent, name, f) {
6 m_channel = channel; 6 m_channel = channel;
7} 7}
8 8
9void IRCChannelList::update() { 9void IRCChannelList::update() {
10 QPixmap op = Resource::loadPixmap("opieirc/op"); 10 QPixmap op = Resource::loadPixmap("opieirc/op");
11 QPixmap hop = Resource::loadPixmap("opieirc/hop"); 11 QPixmap hop = Resource::loadPixmap("opieirc/hop");
12 QPixmap voice = Resource::loadPixmap("opieirc/voice"); 12 QPixmap voice = Resource::loadPixmap("opieirc/voice");
13 QListIterator<IRCChannelPerson> it = m_channel->people(); 13 QListIterator<IRCChannelPerson> it = m_channel->people();
14 clear(); 14 clear();
15 for (; it.current(); ++it) { 15 for (; it.current(); ++it) {
16 IRCChannelPerson *person = it.current(); 16 IRCChannelPerson *person = it.current();
17 if (person->flags & PERSON_FLAG_OP) { 17 if (person->flags & PERSON_FLAG_OP) {
18 insertItem(op, person->person->nick()); 18 insertItem(op, person->person->nick());
19 } else if (person->flags & PERSON_FLAG_HALFOP) { 19 } else if (person->flags & PERSON_FLAG_HALFOP) {
20 insertItem(op, person->person->nick()); 20 insertItem(op, person->person->nick());
21 } else if (person->flags & PERSON_FLAG_VOICE) { 21 } else if (person->flags & PERSON_FLAG_VOICE) {
22 insertItem(voice, person->person->nick()); 22 insertItem(voice, person->person->nick());
23 } else { 23 } else {
24 insertItem(person->person->nick()); 24 insertItem(person->person->nick());
25 } 25 }
26 } 26 }
27 sort(); 27 sort();
28} 28}
29 29
30 30
31bool IRCChannelList::hasPerson(QString nick) { 31bool IRCChannelList::hasPerson(QString nick) {
32 for (unsigned int i=0; i<count(); i++) { 32 for (unsigned int i=0; i<count(); i++) {
33 if (text(i) == nick) 33 if (text(i) == nick)
34 return TRUE; 34 return TRUE;
35 } 35 }
36 return FALSE; 36 return FALSE;
37} 37}
38
39bool IRCChannelList::removePerson(QString nick) {
40 for (unsigned int i=0; i<count(); i++) {
41 if (text(i) == nick){
42 removeItem(i);
43 return TRUE;
44 }
45 }
46 return FALSE;
47}
48
diff --git a/noncore/net/opieirc/ircchannellist.h b/noncore/net/opieirc/ircchannellist.h
index fa3c8cd..deab649 100644
--- a/noncore/net/opieirc/ircchannellist.h
+++ b/noncore/net/opieirc/ircchannellist.h
@@ -1,36 +1,37 @@
1/* 1/*
2 OpieIRC - An embedded IRC client 2 OpieIRC - An embedded IRC client
3 Copyright (C) 2002 Wenzel Jakob 3 Copyright (C) 2002 Wenzel Jakob
4 4
5 This program is free software; you can redistribute it and/or modify 5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by 6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or 7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version. 8 (at your option) any later version.
9 9
10 This program is distributed in the hope that it will be useful, 10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details. 13 GNU General Public License for more details.
14 14
15 You should have received a copy of the GNU General Public License 15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software 16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 18
19*/ 19*/
20 20
21#ifndef __IRCCHANNELLIST_H 21#ifndef __IRCCHANNELLIST_H
22#define __IRCCHANNELLIST_H 22#define __IRCCHANNELLIST_H
23 23
24#include <qlistbox.h> 24#include <qlistbox.h>
25#include "ircchannel.h" 25#include "ircchannel.h"
26 26
27class IRCChannelList : public QListBox { 27class IRCChannelList : public QListBox {
28public: 28public:
29 IRCChannelList(IRCChannel *channel, QWidget *parent = 0, const char *name = 0, WFlags f = 0); 29 IRCChannelList(IRCChannel *channel, QWidget *parent = 0, const char *name = 0, WFlags f = 0);
30 void update(); 30 void update();
31 bool hasPerson(QString nick); 31 bool hasPerson(QString nick);
32 bool removePerson(QString nick);
32protected: 33protected:
33 IRCChannel *m_channel; 34 IRCChannel *m_channel;
34}; 35};
35 36
36#endif /* __IRCCHANNELLIST_H */ 37#endif /* __IRCCHANNELLIST_H */
diff --git a/noncore/net/opieirc/ircchanneltab.cpp b/noncore/net/opieirc/ircchanneltab.cpp
index beb8bce..2b8b65e 100644
--- a/noncore/net/opieirc/ircchanneltab.cpp
+++ b/noncore/net/opieirc/ircchanneltab.cpp
@@ -17,96 +17,97 @@ IRCChannelTab::IRCChannelTab(IRCChannel *channel, IRCServerTab *parentTab, MainW
17 m_textview->setVScrollBarMode(QScrollView::AlwaysOn); 17 m_textview->setVScrollBarMode(QScrollView::AlwaysOn);
18 m_listVisible = TRUE; 18 m_listVisible = TRUE;
19 m_listButton = new QPushButton(">", m_textview); 19 m_listButton = new QPushButton(">", m_textview);
20 m_textview->setCornerWidget(m_listButton); 20 m_textview->setCornerWidget(m_listButton);
21 m_textview->setTextFormat(RichText); 21 m_textview->setTextFormat(RichText);
22 QWhatsThis::add(m_textview, tr("Channel discussion")); 22 QWhatsThis::add(m_textview, tr("Channel discussion"));
23 connect(m_listButton, SIGNAL(clicked()), this, SLOT(toggleList())); 23 connect(m_listButton, SIGNAL(clicked()), this, SLOT(toggleList()));
24 m_list = new IRCChannelList(m_channel, hbox); 24 m_list = new IRCChannelList(m_channel, hbox);
25 m_list->update(); 25 m_list->update();
26 m_list->setMaximumWidth(LISTWIDTH); 26 m_list->setMaximumWidth(LISTWIDTH);
27 m_field = new IRCHistoryLineEdit(this); 27 m_field = new IRCHistoryLineEdit(this);
28 QWhatsThis::add(m_field, tr("Type your message here to participate in the channel discussion")); 28 QWhatsThis::add(m_field, tr("Type your message here to participate in the channel discussion"));
29 m_popup = new QPopupMenu(m_list); 29 m_popup = new QPopupMenu(m_list);
30 m_lines = 0; 30 m_lines = 0;
31 /* Required so that embedded-style "right" clicks work */ 31 /* Required so that embedded-style "right" clicks work */
32 QPEApplication::setStylusOperation(m_list->viewport(), QPEApplication::RightOnHold); 32 QPEApplication::setStylusOperation(m_list->viewport(), QPEApplication::RightOnHold);
33 connect(m_list, SIGNAL(mouseButtonPressed(int, QListBoxItem *, const QPoint&)), this, SLOT(mouseButtonPressed(int, QListBoxItem *, const QPoint &))); 33 connect(m_list, SIGNAL(mouseButtonPressed(int, QListBoxItem *, const QPoint&)), this, SLOT(mouseButtonPressed(int, QListBoxItem *, const QPoint &)));
34 /* Construct the popup menu */ 34 /* Construct the popup menu */
35 QPopupMenu *ctcpMenu = new QPopupMenu(m_list); 35 QPopupMenu *ctcpMenu = new QPopupMenu(m_list);
36 m_popup->insertItem(Resource::loadPixmap("opieirc/ctcp"), tr("CTCP"), ctcpMenu); 36 m_popup->insertItem(Resource::loadPixmap("opieirc/ctcp"), tr("CTCP"), ctcpMenu);
37 m_popup->insertItem(Resource::loadPixmap("opieirc/query"), tr("Query"), this, SLOT(popupQuery())); 37 m_popup->insertItem(Resource::loadPixmap("opieirc/query"), tr("Query"), this, SLOT(popupQuery()));
38 ctcpMenu->insertItem(Resource::loadPixmap("opieirc/ping"), tr("Ping"), this, SLOT(popupPing())); 38 ctcpMenu->insertItem(Resource::loadPixmap("opieirc/ping"), tr("Ping"), this, SLOT(popupPing()));
39 ctcpMenu->insertItem(Resource::loadPixmap("opieirc/version"), tr("Version"), this, SLOT(popupVersion())); 39 ctcpMenu->insertItem(Resource::loadPixmap("opieirc/version"), tr("Version"), this, SLOT(popupVersion()));
40 ctcpMenu->insertItem(Resource::loadPixmap("opieirc/whois"), tr("Whois"), this, SLOT(popupWhois())); 40 ctcpMenu->insertItem(Resource::loadPixmap("opieirc/whois"), tr("Whois"), this, SLOT(popupWhois()));
41 connect(m_mainWindow, SIGNAL(updateScroll()), this, SLOT(scrolling())); 41 connect(m_mainWindow, SIGNAL(updateScroll()), this, SLOT(scrolling()));
42 m_layout->add(hbox); 42 m_layout->add(hbox);
43 hbox->show(); 43 hbox->show();
44 m_layout->add(m_field); 44 m_layout->add(m_field);
45 m_field->setFocus(); 45 m_field->setFocus();
46 connect(m_field, SIGNAL(returnPressed()), this, SLOT(processCommand())); 46 connect(m_field, SIGNAL(returnPressed()), this, SLOT(processCommand()));
47 settingsChanged(); 47 settingsChanged();
48} 48}
49 49
50void IRCChannelTab::scrolling(){ 50void IRCChannelTab::scrolling(){
51 m_textview->ensureVisible(0, m_textview->contentsHeight()); 51 m_textview->ensureVisible(0, m_textview->contentsHeight());
52} 52}
53 53
54void IRCChannelTab::appendText(QString text) { 54void IRCChannelTab::appendText(QString text) {
55 /* not using append because it creates layout problems */ 55 /* not using append because it creates layout problems */
56 QString txt = m_textview->text() + text + "\n"; 56 QString txt = m_textview->text() + text + "\n";
57 if (m_maxLines > 0 && m_lines >= m_maxLines) { 57 if (m_maxLines > 0 && m_lines >= m_maxLines) {
58 int firstBreak = txt.find('\n'); 58 int firstBreak = txt.find('\n');
59 if (firstBreak != -1) { 59 if (firstBreak != -1) {
60 txt = "<qt bgcolor=\"" + m_backgroundColor + "\"/>" + txt.right(txt.length() - (firstBreak + 1)); 60 txt = "<qt bgcolor=\"" + m_backgroundColor + "\"/>" + txt.right(txt.length() - (firstBreak + 1));
61 } 61 }
62 } else { 62 } else {
63 m_lines++; 63 m_lines++;
64 } 64 }
65 m_textview->ensureVisible(0, m_textview->contentsHeight());
65 m_textview->setText(txt); 66 m_textview->setText(txt);
66 m_textview->ensureVisible(0, m_textview->contentsHeight()); 67 m_textview->ensureVisible(0, m_textview->contentsHeight());
67 emit changed(this); 68 emit changed(this);
68} 69}
69 70
70IRCChannelTab::~IRCChannelTab() { 71IRCChannelTab::~IRCChannelTab() {
71 m_parentTab->removeChannelTab(this); 72 m_parentTab->removeChannelTab(this);
72} 73}
73 74
74void IRCChannelTab::processCommand() { 75void IRCChannelTab::processCommand() {
75 QString text = m_field->text(); 76 QString text = m_field->text();
76 if (text.length()>0) { 77 if (text.length()>0) {
77 if (session()->isSessionActive()) { 78 if (session()->isSessionActive()) {
78 if (text.startsWith("/") && !text.startsWith("//")) { 79 if (text.startsWith("/") && !text.startsWith("//")) {
79 /* Command mode */ 80 /* Command mode */
80 m_parentTab->executeCommand(this, text);; 81 m_parentTab->executeCommand(this, text);;
81 } else { 82 } else {
82 if (text.startsWith("//")) 83 if (text.startsWith("//"))
83 text = text.right(text.length()-1); 84 text = text.right(text.length()-1);
84 session()->sendMessage(m_channel, m_field->text()); 85 session()->sendMessage(m_channel, m_field->text());
85 appendText("<font color=\"" + m_textColor + "\">&lt;</font><font color=\"" + m_selfColor + "\">"+m_parentTab->server()->nick()+"</font><font color=\"" + m_textColor + "\">&gt; "+IRCOutput::toHTML(m_field->text())+"</font><br>"); 86 appendText("<font color=\"" + m_textColor + "\">&lt;</font><font color=\"" + m_selfColor + "\">"+m_parentTab->server()->nick()+"</font><font color=\"" + m_textColor + "\">&gt; "+IRCOutput::toHTML(m_field->text())+"</font><br>");
86 } 87 }
87 } else { 88 } else {
88 appendText("<font color=\"" + m_errorColor + "\">"+tr("Disconnected")+"</font><br>"); 89 appendText("<font color=\"" + m_errorColor + "\">"+tr("Disconnected")+"</font><br>");
89 } 90 }
90 } 91 }
91 m_field->clear(); 92 m_field->clear();
92} 93}
93 94
94void IRCChannelTab::settingsChanged() { 95void IRCChannelTab::settingsChanged() {
95 m_textview->setText("<qt bgcolor=\"" + m_backgroundColor + "\"/>"); 96 m_textview->setText("<qt bgcolor=\"" + m_backgroundColor + "\"/>");
96 m_lines = 0; 97 m_lines = 0;
97} 98}
98 99
99void IRCChannelTab::toggleList() { 100void IRCChannelTab::toggleList() {
100 if (m_listVisible) { 101 if (m_listVisible) {
101 m_list->setMaximumWidth(0); 102 m_list->setMaximumWidth(0);
102 m_listButton->setText("<"); 103 m_listButton->setText("<");
103 } else { 104 } else {
104 m_list->setMaximumWidth(LISTWIDTH); 105 m_list->setMaximumWidth(LISTWIDTH);
105 m_listButton->setText(">"); 106 m_listButton->setText(">");
106 } 107 }
107 m_listVisible = !m_listVisible; 108 m_listVisible = !m_listVisible;
108} 109}
109 110
110void IRCChannelTab::mouseButtonPressed(int mouse, QListBoxItem *, const QPoint &point) { 111void IRCChannelTab::mouseButtonPressed(int mouse, QListBoxItem *, const QPoint &point) {
111 switch (mouse) { 112 switch (mouse) {
112 case 1: 113 case 1:
diff --git a/noncore/net/opieirc/ircmessageparser.cpp b/noncore/net/opieirc/ircmessageparser.cpp
index 6b88f34..400ff41 100644
--- a/noncore/net/opieirc/ircmessageparser.cpp
+++ b/noncore/net/opieirc/ircmessageparser.cpp
@@ -161,111 +161,125 @@ void IRCMessageParser::parseLiteralPart(IRCMessage *message) {
161 output.addParam(person); 161 output.addParam(person);
162 emit outputReady(output); 162 emit outputReady(output);
163 delete person; 163 delete person;
164 } else { 164 } else {
165 emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Parting person not found - desynchronized?"))); 165 emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Parting person not found - desynchronized?")));
166 } 166 }
167 } 167 }
168 } else { 168 } else {
169 emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Channel for part not found - desynchronized?"))); 169 emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Channel for part not found - desynchronized?")));
170 } 170 }
171} 171}
172 172
173void IRCMessageParser::parseLiteralPrivMsg(IRCMessage *message) { 173void IRCMessageParser::parseLiteralPrivMsg(IRCMessage *message) {
174 if (m_session->m_server->nick() == message->param(0)) { 174 if (m_session->m_server->nick() == message->param(0)) {
175 /* IRC Query message detected, verify sender and display it */ 175 /* IRC Query message detected, verify sender and display it */
176 IRCPerson mask(message->prefix()); 176 IRCPerson mask(message->prefix());
177 IRCPerson *person = m_session->getPerson(mask.nick()); 177 IRCPerson *person = m_session->getPerson(mask.nick());
178 if (!person) { 178 if (!person) {
179 /* Person not yet known, create and add to the current session */ 179 /* Person not yet known, create and add to the current session */
180 person = new IRCPerson(message->prefix()); 180 person = new IRCPerson(message->prefix());
181 m_session->addPerson(person); 181 m_session->addPerson(person);
182 } 182 }
183 IRCOutput output(OUTPUT_QUERYPRIVMSG, message->param(1)); 183 IRCOutput output(OUTPUT_QUERYPRIVMSG, message->param(1));
184 output.addParam(person); 184 output.addParam(person);
185 emit outputReady(output); 185 emit outputReady(output);
186 } else if (message->param(0).at(0) == '#' || message->param(0).at(0) == '+') { 186 } else if (message->param(0).at(0) == '#' || message->param(0).at(0) == '+') {
187 /* IRC Channel message detected, verify sender, channel and display it */ 187 /* IRC Channel message detected, verify sender, channel and display it */
188 IRCChannel *channel = m_session->getChannel(message->param(0).lower()); 188 IRCChannel *channel = m_session->getChannel(message->param(0).lower());
189 if (channel) { 189 if (channel) {
190 IRCPerson mask(message->prefix()); 190 IRCPerson mask(message->prefix());
191 IRCChannelPerson *person = channel->getPerson(mask.nick()); 191 IRCChannelPerson *person = channel->getPerson(mask.nick());
192 if (person) { 192 if (person) {
193 IRCOutput output(OUTPUT_CHANPRIVMSG, message->param(1)); 193 IRCOutput output(OUTPUT_CHANPRIVMSG, message->param(1));
194 output.addParam(channel); 194 output.addParam(channel);
195 output.addParam(person); 195 output.addParam(person);
196 emit outputReady(output); 196 emit outputReady(output);
197 } else { 197 } else {
198 emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Channel message with unknown sender"))); 198 emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Channel message with unknown sender")));
199 } 199 }
200 } else { 200 } else {
201 emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Channel message with unknown channel %1").arg(message->param(0).lower()) )); 201 emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Channel message with unknown channel %1").arg(message->param(0).lower()) ));
202 } 202 }
203 } else { 203 } else {
204 emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Received PRIVMSG of unknown type"))); 204 emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Received PRIVMSG of unknown type")));
205 } 205 }
206} 206}
207 207
208void IRCMessageParser::parseLiteralNick(IRCMessage *message) { 208void IRCMessageParser::parseLiteralNick(IRCMessage *message) {
209
209 IRCPerson mask(message->prefix()); 210 IRCPerson mask(message->prefix());
210 211 /* this way of handling nick changes really sucks */
211 if (mask.nick() == m_session->m_server->nick()) { 212 if (mask.nick() == m_session->m_server->nick()) {
212 /* We are changing our nickname */ 213 /* We are changing our nickname */
213 m_session->m_server->setNick(message->param(0)); 214 m_session->m_server->setNick(message->param(0));
214 IRCOutput output(OUTPUT_NICKCHANGE, tr("You are now known as %1").arg( message->param(0))); 215 IRCOutput output(OUTPUT_NICKCHANGE, tr("You are now known as %1").arg( message->param(0)));
215 output.addParam(0); 216 output.addParam(0);
216 emit outputReady(output); 217 emit outputReady(output);
217 } else { 218 } else {
218 /* Someone else is */ 219 /* Someone else is */
219 IRCPerson *person = m_session->getPerson(mask.nick()); 220 IRCPerson *person = m_session->getPerson(mask.nick());
220 if (person) { 221 if (person) {
221 IRCOutput output(OUTPUT_NICKCHANGE, tr("%1 is now known as %2").arg( mask.nick() ).arg( message->param(0 ))); 222 //IRCOutput output(OUTPUT_NICKCHANGE, tr("%1 is now known as %2").arg( mask.nick() ).arg( message->param(0)));
222 output.addParam(person); 223
223 emit outputReady(output); 224 /* new code starts here -- this removes the person from all channels */
225 QList<IRCChannel> channels;
226 m_session->getChannelsByPerson(person, channels);
227 QListIterator<IRCChannel> it(channels);
228 for (;it.current(); ++it) {
229 IRCChannelPerson *chanperson = it.current()->getPerson(mask.nick());
230 it.current()->removePerson(chanperson);
231 chanperson->person->setNick(message->param(0));
232 it.current()->addPerson(chanperson);
233 IRCOutput output(OUTPUT_NICKCHANGE, tr("%1 is now known as %2").arg( mask.nick() ).arg( message->param(0)));
234 output.addParam(person);
235 emit outputReady(output);
236 }
237 /* new code ends here */
224 } else { 238 } else {
225 emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Nickname change of an unknown person"))); 239 emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Nickname change of an unknown person")));
226 } 240 }
227 } 241 }
228} 242}
229 243
230void IRCMessageParser::parseLiteralQuit(IRCMessage *message) { 244void IRCMessageParser::parseLiteralQuit(IRCMessage *message) {
231 IRCPerson mask(message->prefix()); 245 IRCPerson mask(message->prefix());
232 IRCPerson *person = m_session->getPerson(mask.nick()); 246 IRCPerson *person = m_session->getPerson(mask.nick());
233 if (person) { 247 if (person) {
234 QList<IRCChannel> channels; 248 QList<IRCChannel> channels;
235 m_session->getChannelsByPerson(person, channels); 249 m_session->getChannelsByPerson(person, channels);
236 QListIterator<IRCChannel> it(channels); 250 QListIterator<IRCChannel> it(channels);
237 for (;it.current(); ++it) { 251 for (;it.current(); ++it) {
238 IRCChannelPerson *chanperson = it.current()->getPerson(mask.nick()); 252 IRCChannelPerson *chanperson = it.current()->getPerson(mask.nick());
239 it.current()->removePerson(chanperson); 253 it.current()->removePerson(chanperson);
240 delete chanperson; 254 delete chanperson;
241 } 255 }
242 m_session->removePerson(person); 256 m_session->removePerson(person);
243 IRCOutput output(OUTPUT_QUIT, tr("%1 has quit (%2)" ).arg( mask.nick() ).arg( message->param(0) )); 257 IRCOutput output(OUTPUT_QUIT, tr("%1 has quit (%2)" ).arg( mask.nick() ).arg( message->param(0) ));
244 output.addParam(person); 258 output.addParam(person);
245 emit outputReady(output); 259 emit outputReady(output);
246 delete person; 260 delete person;
247 } else { 261 } else {
248 emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Unknown person quit - desynchronized?"))); 262 emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Unknown person quit - desynchronized?")));
249 } 263 }
250} 264}
251 265
252void IRCMessageParser::parseLiteralTopic(IRCMessage *message) { 266void IRCMessageParser::parseLiteralTopic(IRCMessage *message) {
253 IRCPerson mask(message->prefix()); 267 IRCPerson mask(message->prefix());
254 IRCChannel *channel = m_session->getChannel(message->param(0).lower()); 268 IRCChannel *channel = m_session->getChannel(message->param(0).lower());
255 if (channel) { 269 if (channel) {
256 IRCOutput output(OUTPUT_TOPIC, mask.nick() + tr(" changed topic to ") + "\"" + message->param(1) + "\""); 270 IRCOutput output(OUTPUT_TOPIC, mask.nick() + tr(" changed topic to ") + "\"" + message->param(1) + "\"");
257 output.addParam(channel); 271 output.addParam(channel);
258 emit outputReady(output); 272 emit outputReady(output);
259 } else { 273 } else {
260 emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Unknown channel topic - desynchronized?"))); 274 emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Unknown channel topic - desynchronized?")));
261 } 275 }
262} 276}
263 277
264void IRCMessageParser::parseLiteralError(IRCMessage *message) { 278void IRCMessageParser::parseLiteralError(IRCMessage *message) {
265 emit outputReady(IRCOutput(OUTPUT_ERROR, message->allParameters())); 279 emit outputReady(IRCOutput(OUTPUT_ERROR, message->allParameters()));
266} 280}
267 281
268void IRCMessageParser::parseCTCPPing(IRCMessage *message) { 282void IRCMessageParser::parseCTCPPing(IRCMessage *message) {
269 IRCPerson mask(message->prefix()); 283 IRCPerson mask(message->prefix());
270 m_session->m_connection->sendCTCP(mask.nick(), "PING " + message->allParameters()); 284 m_session->m_connection->sendCTCP(mask.nick(), "PING " + message->allParameters());
271 emit outputReady(IRCOutput(OUTPUT_CTCP, tr("Received a CTCP PING from ")+mask.nick())); 285 emit outputReady(IRCOutput(OUTPUT_CTCP, tr("Received a CTCP PING from ")+mask.nick()));
@@ -352,96 +366,97 @@ void IRCMessageParser::parseLiteralMode(IRCMessage *message) {
352 } 366 }
353 } else { 367 } else {
354 emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Mode change with unknown person - Desynchronized?"))); 368 emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Mode change with unknown person - Desynchronized?")));
355 } 369 }
356 } else if (temp == "v") { 370 } else if (temp == "v") {
357 stream >> temp; 371 stream >> temp;
358 IRCChannelPerson *person = channel->getPerson(temp); 372 IRCChannelPerson *person = channel->getPerson(temp);
359 if (person) { 373 if (person) {
360 if (set) { 374 if (set) {
361 person->flags |= PERSON_FLAG_VOICE; 375 person->flags |= PERSON_FLAG_VOICE;
362 IRCOutput output(OUTPUT_CHANPERSONMODE, mask.nick() + tr(" gives voice to " + person->person->nick())); 376 IRCOutput output(OUTPUT_CHANPERSONMODE, mask.nick() + tr(" gives voice to " + person->person->nick()));
363 output.addParam(channel); 377 output.addParam(channel);
364 output.addParam(person); 378 output.addParam(person);
365 emit outputReady(output); 379 emit outputReady(output);
366 } else { 380 } else {
367 person->flags &= 0xFFFF - PERSON_FLAG_VOICE; 381 person->flags &= 0xFFFF - PERSON_FLAG_VOICE;
368 IRCOutput output(OUTPUT_CHANPERSONMODE, mask.nick() + tr(" removes voice from " + person->person->nick())); 382 IRCOutput output(OUTPUT_CHANPERSONMODE, mask.nick() + tr(" removes voice from " + person->person->nick()));
369 output.addParam(channel); 383 output.addParam(channel);
370 output.addParam(person); 384 output.addParam(person);
371 emit outputReady(output); 385 emit outputReady(output);
372 } 386 }
373 } else { 387 } else {
374 emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Mode change with unknown person - Desynchronized?"))); 388 emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Mode change with unknown person - Desynchronized?")));
375 } 389 }
376 } else { 390 } else {
377 emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Mode change with unknown flag"))); 391 emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Mode change with unknown flag")));
378 } 392 }
379 } 393 }
380 } else { 394 } else {
381 emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Mode change with unknown kannel - Desynchronized?"))); 395 emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Mode change with unknown kannel - Desynchronized?")));
382 } 396 }
383 } else { 397 } else {
384 emit outputReady(IRCOutput(OUTPUT_ERROR, tr("User modes not supported yet"))); 398 emit outputReady(IRCOutput(OUTPUT_ERROR, tr("User modes not supported yet")));
385 } 399 }
386} 400}
387 401
388void IRCMessageParser::parseLiteralKick(IRCMessage *message) { 402void IRCMessageParser::parseLiteralKick(IRCMessage *message) {
389 IRCPerson mask(message->prefix()); 403 IRCPerson mask(message->prefix());
390 IRCChannel *channel = m_session->getChannel(message->param(0).lower()); 404 IRCChannel *channel = m_session->getChannel(message->param(0).lower());
391 if (channel) { 405 if (channel) {
392 IRCChannelPerson *person = channel->getPerson(message->param(1)); 406 IRCChannelPerson *person = channel->getPerson(message->param(1));
393 if (person) { 407 if (person) {
394 if (person->person->nick() == m_session->m_server->nick()) { 408 if (person->person->nick() == m_session->m_server->nick()) {
395 m_session->removeChannel(channel); 409 m_session->removeChannel(channel);
396 IRCOutput output(OUTPUT_SELFKICK, tr("You were kicked from ") + channel->channelname() + tr(" by ") + mask.nick() + " (" + message->param(2) + ")"); 410 IRCOutput output(OUTPUT_SELFKICK, tr("You were kicked from ") + channel->channelname() + tr(" by ") + mask.nick() + " (" + message->param(2) + ")");
397 output.addParam(channel); 411 output.addParam(channel);
398 emit outputReady(output); 412 emit outputReady(output);
399 } else { 413 } else {
414 /* someone else got kicked */
400 channel->removePerson(person); 415 channel->removePerson(person);
401 IRCOutput output(OUTPUT_OTHERKICK, person->person->nick() + tr(" was kicked from ") + channel->channelname() + tr(" by ") + mask.nick()+ " (" + message->param(2) + ")"); 416 IRCOutput output(OUTPUT_OTHERKICK, person->person->nick() + tr(" was kicked from ") + channel->channelname() + tr(" by ") + mask.nick()+ " (" + message->param(2) + ")");
402 output.addParam(channel); 417 output.addParam(channel);
403 output.addParam(person); 418 output.addParam(person);
404 emit outputReady(output); 419 emit outputReady(output);
405 } 420 }
406 } else { 421 } else {
407 emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Unknown person kick - desynchronized?"))); 422 emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Unknown person kick - desynchronized?")));
408 } 423 }
409 } else { 424 } else {
410 emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Unknown channel kick - desynchronized?"))); 425 emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Unknown channel kick - desynchronized?")));
411 } 426 }
412} 427}
413 428
414void IRCMessageParser::parseNumerical001(IRCMessage *message) { 429void IRCMessageParser::parseNumerical001(IRCMessage *message) {
415 /* Welcome to IRC message, display */ 430 /* Welcome to IRC message, display */
416 emit outputReady(IRCOutput(OUTPUT_SERVERMESSAGE, message->param(1))); 431 emit outputReady(IRCOutput(OUTPUT_SERVERMESSAGE, message->param(1)));
417} 432}
418 433
419void IRCMessageParser::parseNumerical002(IRCMessage *message) { 434void IRCMessageParser::parseNumerical002(IRCMessage *message) {
420 emit outputReady(IRCOutput(OUTPUT_SERVERMESSAGE, message->param(1))); 435 emit outputReady(IRCOutput(OUTPUT_SERVERMESSAGE, message->param(1)));
421} 436}
422 437
423void IRCMessageParser::parseNumerical003(IRCMessage *message) { 438void IRCMessageParser::parseNumerical003(IRCMessage *message) {
424 emit outputReady(IRCOutput(OUTPUT_SERVERMESSAGE, message->param(1))); 439 emit outputReady(IRCOutput(OUTPUT_SERVERMESSAGE, message->param(1)));
425} 440}
426 441
427void IRCMessageParser::parseNumerical004(IRCMessage *message) { 442void IRCMessageParser::parseNumerical004(IRCMessage *message) {
428 emit outputReady(IRCOutput(OUTPUT_SERVERMESSAGE, message->allParameters())); 443 emit outputReady(IRCOutput(OUTPUT_SERVERMESSAGE, message->allParameters()));
429} 444}
430 445
431void IRCMessageParser::parseNumerical005(IRCMessage *message) { 446void IRCMessageParser::parseNumerical005(IRCMessage *message) {
432 emit outputReady(IRCOutput(OUTPUT_SERVERMESSAGE, message->allParameters())); 447 emit outputReady(IRCOutput(OUTPUT_SERVERMESSAGE, message->allParameters()));
433} 448}
434 449
435void IRCMessageParser::parseNumericalStats(IRCMessage *message) { 450void IRCMessageParser::parseNumericalStats(IRCMessage *message) {
436 emit outputReady(IRCOutput(OUTPUT_SERVERMESSAGE, message->param(1))); 451 emit outputReady(IRCOutput(OUTPUT_SERVERMESSAGE, message->param(1)));
437} 452}
438 453
439void IRCMessageParser::parseNumericalNames(IRCMessage *message) { 454void IRCMessageParser::parseNumericalNames(IRCMessage *message) {
440 /* Name list sent when joining a channel */ 455 /* Name list sent when joining a channel */
441 IRCChannel *channel = m_session->getChannel(message->param(2).lower()); 456 IRCChannel *channel = m_session->getChannel(message->param(2).lower());
442 if (channel != 0) { 457 if (channel != 0) {
443 QString people = message->param(3); 458 QString people = message->param(3);
444 QTextIStream stream(&people); 459 QTextIStream stream(&people);
445 QString temp; 460 QString temp;
446 461
447 while (!stream.atEnd()) { 462 while (!stream.atEnd()) {
diff --git a/noncore/net/opieirc/ircservertab.cpp b/noncore/net/opieirc/ircservertab.cpp
index 1d9520a..2c28507 100644
--- a/noncore/net/opieirc/ircservertab.cpp
+++ b/noncore/net/opieirc/ircservertab.cpp
@@ -77,109 +77,103 @@ QString *IRCServerTab::mynick() {
77 77
78IRCServer *IRCServerTab::server() { 78IRCServer *IRCServerTab::server() {
79 return &m_server; 79 return &m_server;
80} 80}
81 81
82void IRCServerTab::settingsChanged() { 82void IRCServerTab::settingsChanged() {
83 m_textview->setText("<qt bgcolor=\"" + m_backgroundColor + "\"/>"); 83 m_textview->setText("<qt bgcolor=\"" + m_backgroundColor + "\"/>");
84 m_lines = 0; 84 m_lines = 0;
85} 85}
86 86
87void IRCServerTab::executeCommand(IRCTab *tab, QString line) { 87void IRCServerTab::executeCommand(IRCTab *tab, QString line) {
88 QTextIStream stream(&line); 88 QTextIStream stream(&line);
89 QString command; 89 QString command;
90 stream >> command; 90 stream >> command;
91 command = command.upper().right(command.length()-1); 91 command = command.upper().right(command.length()-1);
92 92
93 //JOIN 93 //JOIN
94 if (command == "JOIN" || command == "J") { 94 if (command == "JOIN" || command == "J") {
95 QString channel; 95 QString channel;
96 stream >> channel; 96 stream >> channel;
97 if (channel.length() > 0 && (channel.startsWith("#") || channel.startsWith("+"))) { 97 if (channel.length() > 0 && (channel.startsWith("#") || channel.startsWith("+"))) {
98 m_session->join(channel); 98 m_session->join(channel);
99 } else { 99 } else {
100 tab->appendText("<font color=\"" + m_errorColor + "\">Unknown channel format!</font><br>"); 100 tab->appendText("<font color=\"" + m_errorColor + "\">Unknown channel format!</font><br>");
101 } 101 }
102 } 102 }
103 103
104 //KICK 104 //KICK
105 else if (command == "KICK"){ 105 else if (command == "KICK"){
106 QString nickname; 106 QString nickname;
107 stream >> nickname; 107 stream >> nickname;
108 if (nickname.length() > 0) { 108 if (nickname.length() > 0) {
109 if (line.length() > 7 + nickname.length()) { 109 if (line.length() > 7 + nickname.length()) {
110 QString text = line.right(line.length()-nickname.length()-7); 110 QString text = line.right(line.length()-nickname.length()-7);
111 IRCPerson person; 111 IRCPerson person;
112 person.setNick(nickname); 112 person.setNick(nickname);
113 m_session->kick(((IRCChannelTab *)tab)->channel(), &person, text); 113 m_session->kick(((IRCChannelTab *)tab)->channel(), &person, text);
114 } else { 114 } else {
115 IRCPerson person; 115 IRCPerson person;
116 person.setNick(nickname); 116 person.setNick(nickname);
117 m_session->kick(((IRCChannelTab *)tab)->channel(), &person); 117 m_session->kick(((IRCChannelTab *)tab)->channel(), &person);
118 } 118 }
119 } 119 }
120 } 120 }
121 121
122 else if (command == "OP"){ 122 else if (command == "OP"){
123 QString nickname; 123 QString nickname;
124 stream >> nickname; 124 stream >> nickname;
125 if (nickname.length() > 0) { 125 if (nickname.length() > 0) {
126 if (line.length() > 7 + nickname.length()) { 126 QString text = line.right(line.length()-nickname.length()-5);
127 QString text = line.right(line.length()-nickname.length()-7);
128 IRCPerson person;
129 person.setNick(nickname);
130 m_session->kick(((IRCChannelTab *)tab)->channel(), &person, text);
131 } else {
132 IRCPerson person; 127 IRCPerson person;
133 person.setNick(nickname); 128 person.setNick(nickname);
134 m_session->kick(((IRCChannelTab *)tab)->channel(), &person); 129 m_session->op(((IRCChannelTab *)tab)->channel(), &person);
135 } 130 }
136 } 131 }
137 }
138 132
139 //SEND MODES 133 //SEND MODES
140 else if (command == "MODE"){ 134 else if (command == "MODE"){
141 QString text = line.right(line.length()-6); 135 QString text = line.right(line.length()-6);
142 if (text.length() > 0) { 136 if (text.length() > 0) {
143 m_session->mode(text); 137 m_session->mode(text);
144 } else { 138 } else {
145 tab->appendText("<font color=\"" + m_errorColor + "\">/mode channel {[+|-]|o|p|s|i|t|n|b|v} [limit] [user] [ban mask]<br>/mode nickname {[+|-]|i|w|s|o}</font><br>"); 139 tab->appendText("<font color=\"" + m_errorColor + "\">/mode channel {[+|-]|o|p|s|i|t|n|b|v} [limit] [user] [ban mask]<br>/mode nickname {[+|-]|i|w|s|o}</font><br>");
146 } 140 }
147 } 141 }
148 //SEND RAW MESSAGE TO SERVER, COMPLETELY UNCHECKED - anything in the RFC...or really anything you want 142 //SEND RAW MESSAGE TO SERVER, COMPLETELY UNCHECKED - anything in the RFC...or really anything you want
149 else if (command == "RAW"){ 143 else if (command == "RAW"){
150 QString text = line.right(line.length()-5); 144 QString text = line.right(line.length()-5);
151 if (text.length() > 0) { 145 if (text.length() > 0) {
152 m_session->raw(text); 146 m_session->raw(text);
153 } 147 }
154 } 148 }
155 else if (command == "SUSPEND"){ 149 else if (command == "SUSPEND"){
156 QString text = line.right(line.length()-9); 150 QString text = line.right(line.length()-9);
157 if (text.upper() == "ON") { 151 if (text.upper() == "ON") {
158 QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Enable; 152 QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Enable;
159 } 153 }
160 else if (text.upper() == "OFF"){ 154 else if (text.upper() == "OFF"){
161 QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Disable; 155 QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Disable;
162 } else { 156 } else {
163 tab->appendText("<font color=\"" + m_errorColor + "\">Line: "+ line +"</font><br>Text: "+text); 157 tab->appendText("<font color=\"" + m_errorColor + "\">Line: "+ line +"</font><br>Text: "+text);
164 } 158 }
165 } 159 }
166 160
167 else if (command == "QUIT"){ 161 else if (command == "QUIT"){
168 QString text = line.right(line.length()-6); 162 QString text = line.right(line.length()-6);
169 if (text.length() > 0) { 163 if (text.length() > 0) {
170 m_session->quit(text); 164 m_session->quit(text);
171 } else { 165 } else {
172 m_session->quit(); 166 m_session->quit();
173 } 167 }
174 } 168 }
175 169
176 //SEND ACTION 170 //SEND ACTION
177 else if (command == "ME") { 171 else if (command == "ME") {
178 QString text = line.right(line.length()-4); 172 QString text = line.right(line.length()-4);
179 if (text.length() > 0) { 173 if (text.length() > 0) {
180 if (tab->isA("IRCChannelTab")) { 174 if (tab->isA("IRCChannelTab")) {
181 tab->appendText("<font color=\"" + m_selfColor + "\">*" + IRCOutput::toHTML(m_server.nick()) + " " + IRCOutput::toHTML(text) + "</font><br>"); 175 tab->appendText("<font color=\"" + m_selfColor + "\">*" + IRCOutput::toHTML(m_server.nick()) + " " + IRCOutput::toHTML(text) + "</font><br>");
182 m_session->sendAction(((IRCChannelTab *)tab)->channel(), text); 176 m_session->sendAction(((IRCChannelTab *)tab)->channel(), text);
183 } else if (tab->isA("IRCQueryTab")) { 177 } else if (tab->isA("IRCQueryTab")) {
184 tab->appendText("<font color=\"" + m_selfColor + "\">*" + IRCOutput::toHTML(m_server.nick()) + " " + IRCOutput::toHTML(text) + "</font><br>"); 178 tab->appendText("<font color=\"" + m_selfColor + "\">*" + IRCOutput::toHTML(m_server.nick()) + " " + IRCOutput::toHTML(text) + "</font><br>");
185 m_session->sendAction(((IRCQueryTab *)tab)->person(), text); 179 m_session->sendAction(((IRCQueryTab *)tab)->person(), text);
@@ -301,68 +295,80 @@ void IRCServerTab::display(IRCOutput output) {
301 queryTab = new IRCQueryTab((IRCPerson *)output.getParam(0), this, m_mainWindow, (QWidget *)parent()); 295 queryTab = new IRCQueryTab((IRCPerson *)output.getParam(0), this, m_mainWindow, (QWidget *)parent());
302 m_queryTabs.append(queryTab); 296 m_queryTabs.append(queryTab);
303 m_mainWindow->addTab(queryTab); 297 m_mainWindow->addTab(queryTab);
304 } 298 }
305 queryTab->display(output); 299 queryTab->display(output);
306 } 300 }
307 break; 301 break;
308 case OUTPUT_SELFPART: { 302 case OUTPUT_SELFPART: {
309 IRCChannelTab *channelTab = getTabForChannel((IRCChannel *)output.getParam(0)); 303 IRCChannelTab *channelTab = getTabForChannel((IRCChannel *)output.getParam(0));
310 if (channelTab) 304 if (channelTab)
311 m_mainWindow->killTab(channelTab); 305 m_mainWindow->killTab(channelTab);
312 } 306 }
313 break; 307 break;
314 case OUTPUT_SELFKICK: { 308 case OUTPUT_SELFKICK: {
315 appendText("<font color=\"" + m_errorColor + "\">" + output.htmlMessage() + "</font><br>"); 309 appendText("<font color=\"" + m_errorColor + "\">" + output.htmlMessage() + "</font><br>");
316 IRCChannelTab *channelTab = getTabForChannel((IRCChannel *)output.getParam(0)); 310 IRCChannelTab *channelTab = getTabForChannel((IRCChannel *)output.getParam(0));
317 if (channelTab) 311 if (channelTab)
318 m_mainWindow->killTab(channelTab); 312 m_mainWindow->killTab(channelTab);
319 } 313 }
320 break; 314 break;
321 case OUTPUT_CHANACTION: { 315 case OUTPUT_CHANACTION: {
322 IRCChannelTab *channelTab = getTabForChannel((IRCChannel *)output.getParam(0)); 316 IRCChannelTab *channelTab = getTabForChannel((IRCChannel *)output.getParam(0));
323 channelTab->appendText("<font color=\"" + m_otherColor + "\">"+output.htmlMessage()+"</font><br>"); 317 channelTab->appendText("<font color=\"" + m_otherColor + "\">"+output.htmlMessage()+"</font><br>");
324 } 318 }
325 break; 319 break;
326 case OUTPUT_TOPIC: { 320 case OUTPUT_TOPIC: {
327 IRCChannel *channel = (IRCChannel *) output.getParam(0); 321 IRCChannel *channel = (IRCChannel *) output.getParam(0);
328 if (channel) { 322 if (channel) {
329 IRCChannelTab *channelTab = getTabForChannel(channel); 323 IRCChannelTab *channelTab = getTabForChannel(channel);
330 if (channelTab) { 324 if (channelTab) {
331 channelTab->appendText("<font color=\"" + m_notificationColor + "\">"+output.htmlMessage()+"</font><br>"); 325 channelTab->appendText("<font color=\"" + m_notificationColor + "\">"+output.htmlMessage()+"</font><br>");
332 return; 326 return;
333 } 327 }
334 } 328 }
335 appendText("<font color=\"" + m_notificationColor + "\">"+output.htmlMessage()+"</font><br>"); 329 appendText("<font color=\"" + m_notificationColor + "\">"+output.htmlMessage()+"</font><br>");
336 } 330 }
337 break; 331 break;
338 case OUTPUT_QUIT: { 332 case OUTPUT_QUIT: {
339 QString nick = ((IRCPerson *)output.getParam(0))->nick(); 333 QString nick = ((IRCPerson *)output.getParam(0))->nick();
340 QListIterator<IRCChannelTab> it(m_channelTabs); 334 QListIterator<IRCChannelTab> it(m_channelTabs);
341 for (; it.current(); ++it) { 335 for (; it.current(); ++it) {
342 if (it.current()->list()->hasPerson(nick)) { 336 if (it.current()->list()->hasPerson(nick)) {
343 it.current()->appendText("<font color=\"" + m_notificationColor + "\">"+output.htmlMessage()+"</font><br>"); 337 it.current()->appendText("<font color=\"" + m_notificationColor + "\">"+output.htmlMessage()+"</font><br>");
344 it.current()->list()->update(); 338 it.current()->list()->update();
345 } 339 }
346 } 340 }
347 } 341 }
348 break; 342 break;
349 case OUTPUT_OTHERJOIN: 343/* case OUTPUT_NICKCHANGE: {
344 //WAS HERE
345 QString nick = ((IRCPerson *)output.getParam(0))->nick();
346 QListIterator<IRCChannelTab> it(m_channelTabs);
347 for (; it.current(); ++it) {
348 if (it.current()->list()->hasPerson(nick)) {
349 it.current()->appendText("<font color=\"" + m_notificationColor + "\">"+output.htmlMessage()+"</font><br>");
350 it.current()->list()->update();
351 }
352 }
353 }
354 break;
355 */ case OUTPUT_OTHERJOIN:
350 case OUTPUT_OTHERKICK: 356 case OUTPUT_OTHERKICK:
351 case OUTPUT_CHANPERSONMODE: 357 case OUTPUT_CHANPERSONMODE:
352 case OUTPUT_OTHERPART: { 358 case OUTPUT_OTHERPART: {
353 IRCChannelTab *channelTab = getTabForChannel((IRCChannel *)output.getParam(0)); 359 IRCChannelTab *channelTab = getTabForChannel((IRCChannel *)output.getParam(0));
354 channelTab->appendText("<font color=\"" + m_notificationColor + "\">"+output.htmlMessage()+"</font><br>"); 360 channelTab->appendText("<font color=\"" + m_notificationColor + "\">"+output.htmlMessage()+"</font><br>");
355 channelTab->list()->update(); 361 channelTab->list()->update();
356 } 362 }
357 break; 363 break;
358 case OUTPUT_CTCP: 364 case OUTPUT_CTCP:
359 appendText("<font color=\"" + m_notificationColor + "\">" + output.htmlMessage() + "</font><br>"); 365 appendText("<font color=\"" + m_notificationColor + "\">" + output.htmlMessage() + "</font><br>");
360 break; 366 break;
361 case OUTPUT_ERROR: 367 case OUTPUT_ERROR:
362 appendText("<font color=\"" + m_errorColor + "\">" + output.htmlMessage() + "</font><br>"); 368 appendText("<font color=\"" + m_errorColor + "\">" + output.htmlMessage() + "</font><br>");
363 break; 369 break;
364 default: 370 default:
365 appendText("<font color=\"" + m_serverColor + "\">" + output.htmlMessage() + "</font><br>"); 371 appendText("<font color=\"" + m_serverColor + "\">" + output.htmlMessage() + "</font><br>");
366 break; 372 break;
367 } 373 }
368} 374}
diff --git a/noncore/net/opieirc/ircsession.cpp b/noncore/net/opieirc/ircsession.cpp
index 1cc1ee2..6404d71 100644
--- a/noncore/net/opieirc/ircsession.cpp
+++ b/noncore/net/opieirc/ircsession.cpp
@@ -15,96 +15,100 @@ IRCSession::~IRCSession() {
15 /* We want this to get deleted automatically */ 15 /* We want this to get deleted automatically */
16 m_channels.setAutoDelete(TRUE); 16 m_channels.setAutoDelete(TRUE);
17 m_people.setAutoDelete(TRUE); 17 m_people.setAutoDelete(TRUE);
18 18
19 delete m_parser; 19 delete m_parser;
20 delete m_connection; 20 delete m_connection;
21} 21}
22 22
23void IRCSession::beginSession() { 23void IRCSession::beginSession() {
24 m_connection->doConnect(); 24 m_connection->doConnect();
25} 25}
26 26
27void IRCSession::join(QString channelname) { 27void IRCSession::join(QString channelname) {
28 m_connection->sendLine("JOIN "+channelname); 28 m_connection->sendLine("JOIN "+channelname);
29} 29}
30 30
31void IRCSession::quit(){ 31void IRCSession::quit(){
32 m_connection->sendLine("QUIT :[OI] I'm too good to need a reason"); 32 m_connection->sendLine("QUIT :[OI] I'm too good to need a reason");
33} 33}
34 34
35void IRCSession::quit(QString message){ 35void IRCSession::quit(QString message){
36 m_connection->sendLine("QUIT :" + message); 36 m_connection->sendLine("QUIT :" + message);
37} 37}
38 38
39void IRCSession::topic(IRCChannel *channel, QString message){ 39void IRCSession::topic(IRCChannel *channel, QString message){
40 m_connection->sendLine("TOPIC :" + channel->channelname() + " " + message); 40 m_connection->sendLine("TOPIC :" + channel->channelname() + " " + message);
41} 41}
42 42
43void IRCSession::mode(IRCChannel *channel, QString message){ 43void IRCSession::mode(IRCChannel *channel, QString message){
44 m_connection->sendLine("MODE " + channel->channelname() + " " + message); 44 m_connection->sendLine("MODE " + channel->channelname() + " " + message);
45} 45}
46 46
47void IRCSession::mode(IRCPerson *person, QString message){ 47void IRCSession::mode(IRCPerson *person, QString message){
48 m_connection->sendLine("MODE " + person->nick() + " " + message); 48 m_connection->sendLine("MODE " + person->nick() + " " + message);
49} 49}
50 50
51void IRCSession::mode(QString message){ 51void IRCSession::mode(QString message){
52 m_connection->sendLine("MODE " + message); 52 m_connection->sendLine("MODE " + message);
53} 53}
54 54
55void IRCSession::raw(QString message){ 55void IRCSession::raw(QString message){
56 m_connection->sendLine(message); 56 m_connection->sendLine(message);
57} 57}
58 58
59void IRCSession::kick(IRCChannel *channel, IRCPerson *person) { 59void IRCSession::kick(IRCChannel *channel, IRCPerson *person) {
60 m_connection->sendLine("KICK "+ channel->channelname() + " " + person->nick() +" :0wn3d - no reason"); 60 m_connection->sendLine("KICK "+ channel->channelname() + " " + person->nick() +" :0wn3d - no reason");
61} 61}
62 62
63void IRCSession::op(IRCChannel *channel, IRCPerson *person) {
64 m_connection->sendLine("MODE "+ channel->channelname() + " +ooo " + person->nick());
65}
66
63void IRCSession::kick(IRCChannel *channel, IRCPerson *person, QString message) { 67void IRCSession::kick(IRCChannel *channel, IRCPerson *person, QString message) {
64 m_connection->sendLine("KICK "+ channel->channelname() + " " + person->nick() +" :" + message); 68 m_connection->sendLine("KICK "+ channel->channelname() + " " + person->nick() +" :" + message);
65} 69}
66 70
67void IRCSession::sendMessage(IRCPerson *person, QString message) { 71void IRCSession::sendMessage(IRCPerson *person, QString message) {
68 m_connection->sendLine("PRIVMSG " + person->nick() + " :" + message); 72 m_connection->sendLine("PRIVMSG " + person->nick() + " :" + message);
69} 73}
70 74
71void IRCSession::sendMessage(IRCChannel *channel, QString message) { 75void IRCSession::sendMessage(IRCChannel *channel, QString message) {
72 m_connection->sendLine("PRIVMSG " + channel->channelname() + " :" + message); 76 m_connection->sendLine("PRIVMSG " + channel->channelname() + " :" + message);
73} 77}
74 78
75void IRCSession::sendAction(IRCChannel *channel, QString message) { 79void IRCSession::sendAction(IRCChannel *channel, QString message) {
76 m_connection->sendLine("PRIVMSG " + channel->channelname() + " :\001ACTION " + message + "\001"); 80 m_connection->sendLine("PRIVMSG " + channel->channelname() + " :\001ACTION " + message + "\001");
77} 81}
78 82
79void IRCSession::sendAction(IRCPerson *person, QString message) { 83void IRCSession::sendAction(IRCPerson *person, QString message) {
80 m_connection->sendLine("PRIVMSG " + person->nick() + " :\001ACTION " + message + "\001"); 84 m_connection->sendLine("PRIVMSG " + person->nick() + " :\001ACTION " + message + "\001");
81} 85}
82 86
83bool IRCSession::isSessionActive() { 87bool IRCSession::isSessionActive() {
84 return m_connection->isConnected(); 88 return m_connection->isConnected();
85} 89}
86 90
87void IRCSession::endSession() { 91void IRCSession::endSession() {
88 if (m_connection->isLoggedIn()) 92 if (m_connection->isLoggedIn())
89 m_connection->sendLine("QUIT :" APP_VERSION); 93 m_connection->sendLine("QUIT :" APP_VERSION);
90 else 94 else
91 m_connection->close(); 95 m_connection->close();
92} 96}
93 97
94void IRCSession::part(IRCChannel *channel) { 98void IRCSession::part(IRCChannel *channel) {
95 m_connection->sendLine("PART " + channel->channelname() + " :" + APP_VERSION); 99 m_connection->sendLine("PART " + channel->channelname() + " :" + APP_VERSION);
96} 100}
97 101
98 102
99IRCChannel *IRCSession::getChannel(QString channelname) { 103IRCChannel *IRCSession::getChannel(QString channelname) {
100 QListIterator<IRCChannel> it(m_channels); 104 QListIterator<IRCChannel> it(m_channels);
101 for (; it.current(); ++it) { 105 for (; it.current(); ++it) {
102 if (it.current()->channelname() == channelname) { 106 if (it.current()->channelname() == channelname) {
103 return it.current(); 107 return it.current();
104 } 108 }
105 } 109 }
106 return 0; 110 return 0;
107} 111}
108 112
109IRCPerson *IRCSession::getPerson(QString nickname) { 113IRCPerson *IRCSession::getPerson(QString nickname) {
110 QListIterator<IRCPerson> it(m_people); 114 QListIterator<IRCPerson> it(m_people);
diff --git a/noncore/net/opieirc/ircsession.h b/noncore/net/opieirc/ircsession.h
index a6a3e50..f6330d8 100644
--- a/noncore/net/opieirc/ircsession.h
+++ b/noncore/net/opieirc/ircsession.h
@@ -6,78 +6,79 @@
6 it under the terms of the GNU General Public License as published by 6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or 7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version. 8 (at your option) any later version.
9 9
10 This program is distributed in the hope that it will be useful, 10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details. 13 GNU General Public License for more details.
14 14
15 You should have received a copy of the GNU General Public License 15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software 16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 18
19*/ 19*/
20 20
21#ifndef __IRCSESSION_H 21#ifndef __IRCSESSION_H
22#define __IRCSESSION_H 22#define __IRCSESSION_H
23 23
24#include <qstring.h> 24#include <qstring.h>
25#include <qlist.h> 25#include <qlist.h>
26#include "ircserver.h" 26#include "ircserver.h"
27#include "ircconnection.h" 27#include "ircconnection.h"
28#include "ircmessage.h" 28#include "ircmessage.h"
29#include "ircchannel.h" 29#include "ircchannel.h"
30#include "ircoutput.h" 30#include "ircoutput.h"
31 31
32class IRCMessageParser; 32class IRCMessageParser;
33 33
34/* The IRCSession stores all information relating to the connection 34/* The IRCSession stores all information relating to the connection
35 to one IRC server. IRCSession makes it possible to run multiple 35 to one IRC server. IRCSession makes it possible to run multiple
36 IRC server connections from within the same program */ 36 IRC server connections from within the same program */
37 37
38class IRCSession : public QObject { 38class IRCSession : public QObject {
39friend class IRCMessageParser; 39friend class IRCMessageParser;
40 Q_OBJECT 40 Q_OBJECT
41public: 41public:
42 IRCSession(IRCServer *server); 42 IRCSession(IRCServer *server);
43 ~IRCSession(); 43 ~IRCSession();
44 44
45 void join(QString channel); 45 void join(QString channel);
46 void quit(QString message); 46 void quit(QString message);
47 void quit(); 47 void quit();
48 void raw(QString message); 48 void raw(QString message);
49 void topic(IRCChannel *channel, QString message); 49 void topic(IRCChannel *channel, QString message);
50 void mode(IRCChannel *channel, QString message); 50 void mode(IRCChannel *channel, QString message);
51 void mode(IRCPerson *person, QString message); 51 void mode(IRCPerson *person, QString message);
52 void mode(QString message); 52 void mode(QString message);
53 void part(IRCChannel *channel); 53 void part(IRCChannel *channel);
54 void op(IRCChannel *channel, IRCPerson *person);
54 void kick(IRCChannel *channel, IRCPerson *person); 55 void kick(IRCChannel *channel, IRCPerson *person);
55 void kick(IRCChannel *channel, IRCPerson *person, QString message); 56 void kick(IRCChannel *channel, IRCPerson *person, QString message);
56 void beginSession(); 57 void beginSession();
57 bool isSessionActive(); 58 bool isSessionActive();
58 void endSession(); 59 void endSession();
59 void sendMessage(IRCPerson *person, QString message); 60 void sendMessage(IRCPerson *person, QString message);
60 void sendMessage(IRCChannel *channel, QString message); 61 void sendMessage(IRCChannel *channel, QString message);
61 void sendAction(IRCPerson *person, QString message); 62 void sendAction(IRCPerson *person, QString message);
62 void sendAction(IRCChannel *channel, QString message); 63 void sendAction(IRCChannel *channel, QString message);
63 IRCChannel *getChannel(QString channelname); 64 IRCChannel *getChannel(QString channelname);
64 IRCPerson *getPerson(QString nickname); 65 IRCPerson *getPerson(QString nickname);
65protected: 66protected:
66 void addPerson(IRCPerson *person); 67 void addPerson(IRCPerson *person);
67 void addChannel(IRCChannel *channel); 68 void addChannel(IRCChannel *channel);
68 void removeChannel(IRCChannel *channel); 69 void removeChannel(IRCChannel *channel);
69 void removePerson(IRCPerson *person); 70 void removePerson(IRCPerson *person);
70 void getChannelsByPerson(IRCPerson *person, QList<IRCChannel> &channels); 71 void getChannelsByPerson(IRCPerson *person, QList<IRCChannel> &channels);
71protected slots: 72protected slots:
72 void handleMessage(IRCMessage *message); 73 void handleMessage(IRCMessage *message);
73signals: 74signals:
74 void outputReady(IRCOutput output); 75 void outputReady(IRCOutput output);
75protected: 76protected:
76 IRCServer *m_server; 77 IRCServer *m_server;
77 IRCConnection *m_connection; 78 IRCConnection *m_connection;
78 IRCMessageParser *m_parser; 79 IRCMessageParser *m_parser;
79 QList<IRCChannel> m_channels; 80 QList<IRCChannel> m_channels;
80 QList<IRCPerson> m_people; 81 QList<IRCPerson> m_people;
81}; 82};
82 83
83#endif /* __IRCSESSION_H */ 84#endif /* __IRCSESSION_H */
diff --git a/noncore/net/opietooth/blue-pin/pindlg.cc b/noncore/net/opietooth/blue-pin/pindlg.cc
index 54f096e..7d60d6c 100644
--- a/noncore/net/opietooth/blue-pin/pindlg.cc
+++ b/noncore/net/opietooth/blue-pin/pindlg.cc
@@ -1,53 +1,54 @@
1 1
2#include <stdio.h> 2#include <stdio.h>
3 3
4#include <qcheckbox.h> 4#include <qcheckbox.h>
5#include <qlabel.h> 5#include <qlabel.h>
6#include <qlineedit.h> 6#include <qlineedit.h>
7#include <qtimer.h> 7#include <qtimer.h>
8 8
9#include <qpe/config.h> 9#include <qpe/config.h>
10 10
11#include "pindlg.h" 11#include "pindlg.h"
12 12
13using namespace OpieTooth; 13using namespace OpieTooth;
14 14
15PinDlg::PinDlg( const QString& status, 15PinDlg::PinDlg( const QString& status,
16 const QString& mac, QWidget* parent, 16 const QString& mac, QWidget* parent,
17 const char* name ) 17 const char* name )
18 : PinDlgBase( parent, name, WType_Modal ) 18 : PinDlgBase( parent, name, WType_Modal )
19{ 19{
20 m_mac = mac; 20 m_mac = mac;
21 test( mac ); 21 test( mac );
22 txtStatus->setText(status); 22 txtStatus->setText(status);
23 showMaximized();
23} 24}
24PinDlg::~PinDlg() { 25PinDlg::~PinDlg() {
25 26
26} 27}
27void PinDlg::setMac( const QString& mac ) { 28void PinDlg::setMac( const QString& mac ) {
28 txtStatus->setText( mac ); 29 txtStatus->setText( mac );
29} 30}
30QString PinDlg::pin() const{ 31QString PinDlg::pin() const{
31 return lnePin->text(); 32 return lnePin->text();
32} 33}
33 34
34void PinDlg::test( const QString& mac ) { 35void PinDlg::test( const QString& mac ) {
35 if (!mac.isEmpty() ) { 36 if (!mac.isEmpty() ) {
36 Config cfg("bluepin"); 37 Config cfg("bluepin");
37 cfg.setGroup(mac); 38 cfg.setGroup(mac);
38 lnePin->setText(cfg.readEntryCrypt("pin", QString::null ) ); 39 lnePin->setText(cfg.readEntryCrypt("pin", QString::null ) );
39 if ( !lnePin->text().isEmpty() ) { 40 if ( !lnePin->text().isEmpty() ) {
40 //QTimer::singleShot(100, this, SLOT(accept() ) ); 41 //QTimer::singleShot(100, this, SLOT(accept() ) );
41 } 42 }
42 43
43 } 44 }
44 45
45} 46}
46void PinDlg::accept() { 47void PinDlg::accept() {
47 if ( ckbPin->isChecked() ) { 48 if ( ckbPin->isChecked() ) {
48 Config cfg("bluepin"); 49 Config cfg("bluepin");
49 cfg.setGroup(m_mac ); 50 cfg.setGroup(m_mac );
50 cfg.writeEntryCrypt("pin", lnePin->text() ); 51 cfg.writeEntryCrypt("pin", lnePin->text() );
51 } 52 }
52 QDialog::accept(); 53 QDialog::accept();
53} 54}
diff --git a/noncore/net/opietooth/blue-pin/pindlg.h b/noncore/net/opietooth/blue-pin/pindlg.h
index b4f5ff8..5e5a763 100644
--- a/noncore/net/opietooth/blue-pin/pindlg.h
+++ b/noncore/net/opietooth/blue-pin/pindlg.h
@@ -1,26 +1,29 @@
1 1
2 2
3#include <qdialog.h> 3#include <qdialog.h>
4
5#include "pindlgbase.h" 4#include "pindlgbase.h"
6 5
7namespace OpieTooth { 6namespace OpieTooth {
7
8 class PinDlg : public PinDlgBase { 8 class PinDlg : public PinDlgBase {
9 Q_OBJECT 9
10 Q_OBJECT
11
10 public: 12 public:
11 PinDlg(const QString& text, 13 PinDlg(const QString& text,
12 const QString& mac, 14 const QString& mac,
13 QWidget* parent = 0, 15 QWidget* parent = 0,
14 const char* name= 0 ); 16 const char* name= 0 );
15 ~PinDlg(); 17 ~PinDlg();
16 void setMac( const QString& ); 18 void setMac( const QString& );
17 QString pin() const; 19 QString pin() const;
20
18 private: 21 private:
19 void test( const QString& mac ); 22 void test( const QString& mac );
20 QString m_mac; 23 QString m_mac;
21protected slots:
22 void accept();
23 };
24 24
25 protected slots:
26 void accept();
25 27
28 };
26}; 29};
diff --git a/noncore/net/opietooth/blue-pin/pindlgbase.ui b/noncore/net/opietooth/blue-pin/pindlgbase.ui
index 6966a03..889a25e 100644
--- a/noncore/net/opietooth/blue-pin/pindlgbase.ui
+++ b/noncore/net/opietooth/blue-pin/pindlgbase.ui
@@ -1,198 +1,274 @@
1<!DOCTYPE UI><UI> 1<!DOCTYPE UI><UI>
2<class>PinDlgBase</class> 2<class>PinDlgBase</class>
3<author>zecke</author> 3<author>zecke</author>
4<widget> 4<widget>
5 <class>QDialog</class> 5 <class>QDialog</class>
6 <property stdset="1"> 6 <property stdset="1">
7 <name>name</name> 7 <name>name</name>
8 <cstring>Form1</cstring> 8 <cstring>Form1</cstring>
9 </property> 9 </property>
10 <property stdset="1"> 10 <property stdset="1">
11 <name>geometry</name> 11 <name>geometry</name>
12 <rect> 12 <rect>
13 <x>0</x> 13 <x>0</x>
14 <y>0</y> 14 <y>0</y>
15 <width>248</width> 15 <width>258</width>
16 <height>167</height> 16 <height>245</height>
17 </rect> 17 </rect>
18 </property> 18 </property>
19 <property stdset="1"> 19 <property stdset="1">
20 <name>caption</name> 20 <name>caption</name>
21 <string>Please enter pin</string> 21 <string>Please enter pin</string>
22 </property> 22 </property>
23 <grid> 23 <vbox>
24 <property stdset="1"> 24 <property stdset="1">
25 <name>margin</name> 25 <name>margin</name>
26 <number>11</number> 26 <number>11</number>
27 </property> 27 </property>
28 <property stdset="1"> 28 <property stdset="1">
29 <name>spacing</name> 29 <name>spacing</name>
30 <number>6</number> 30 <number>6</number>
31 </property> 31 </property>
32 <widget row="0" column="0" > 32 <widget>
33 <class>QLabel</class>
34 <property stdset="1">
35 <name>name</name>
36 <cstring>txtStatus</cstring>
37 </property>
38 <property stdset="1">
39 <name>text</name>
40 <string></string>
41 </property>
42 <property stdset="1">
43 <name>textFormat</name>
44 <enum>RichText</enum>
45 </property>
46 </widget>
47 <spacer>
48 <property>
49 <name>name</name>
50 <cstring>Spacer4_2</cstring>
51 </property>
52 <property stdset="1">
53 <name>orientation</name>
54 <enum>Vertical</enum>
55 </property>
56 <property stdset="1">
57 <name>sizeType</name>
58 <enum>Expanding</enum>
59 </property>
60 <property>
61 <name>sizeHint</name>
62 <size>
63 <width>20</width>
64 <height>20</height>
65 </size>
66 </property>
67 </spacer>
68 <widget>
33 <class>QLayoutWidget</class> 69 <class>QLayoutWidget</class>
34 <property stdset="1"> 70 <property stdset="1">
35 <name>name</name> 71 <name>name</name>
36 <cstring>Layout6</cstring> 72 <cstring>Layout6</cstring>
37 </property> 73 </property>
38 <grid> 74 <vbox>
39 <property stdset="1"> 75 <property stdset="1">
40 <name>margin</name> 76 <name>margin</name>
41 <number>0</number> 77 <number>0</number>
42 </property> 78 </property>
43 <property stdset="1"> 79 <property stdset="1">
44 <name>spacing</name> 80 <name>spacing</name>
45 <number>6</number> 81 <number>6</number>
46 </property> 82 </property>
47 <widget row="3" column="0" rowspan="1" colspan="3" > 83 <widget>
48 <class>QLineEdit</class> 84 <class>QLabel</class>
49 <property stdset="1"> 85 <property stdset="1">
50 <name>name</name> 86 <name>name</name>
51 <cstring>lnePin</cstring> 87 <cstring>TextLabel3</cstring>
52 </property> 88 </property>
53 <property stdset="1"> 89 <property stdset="1">
54 <name>echoMode</name> 90 <name>text</name>
55 <enum>Password</enum> 91 <string>Please enter PIN:</string>
56 </property> 92 </property>
57 </widget> 93 </widget>
58 <spacer row="5" column="4" > 94 <widget>
59 <property> 95 <class>QLayoutWidget</class>
96 <property stdset="1">
60 <name>name</name> 97 <name>name</name>
61 <cstring>Spacer2</cstring> 98 <cstring>Layout5</cstring>
62 </property> 99 </property>
100 <hbox>
101 <property stdset="1">
102 <name>margin</name>
103 <number>0</number>
104 </property>
105 <property stdset="1">
106 <name>spacing</name>
107 <number>6</number>
108 </property>
109 <widget>
110 <class>QLineEdit</class>
111 <property stdset="1">
112 <name>name</name>
113 <cstring>lnePin</cstring>
114 </property>
115 <property stdset="1">
116 <name>echoMode</name>
117 <enum>Password</enum>
118 </property>
119 </widget>
120 <spacer>
121 <property>
122 <name>name</name>
123 <cstring>Spacer4</cstring>
124 </property>
125 <property stdset="1">
126 <name>orientation</name>
127 <enum>Horizontal</enum>
128 </property>
129 <property stdset="1">
130 <name>sizeType</name>
131 <enum>Fixed</enum>
132 </property>
133 <property>
134 <name>sizeHint</name>
135 <size>
136 <width>21</width>
137 <height>20</height>
138 </size>
139 </property>
140 </spacer>
141 </hbox>
142 </widget>
143 <widget>
144 <class>QCheckBox</class>
63 <property stdset="1"> 145 <property stdset="1">
64 <name>orientation</name> 146 <name>name</name>
65 <enum>Horizontal</enum> 147 <cstring>ckbPin</cstring>
66 </property> 148 </property>
67 <property stdset="1"> 149 <property stdset="1">
68 <name>sizeType</name> 150 <name>text</name>
69 <enum>Fixed</enum> 151 <string>Save pin</string>
70 </property>
71 <property>
72 <name>sizeHint</name>
73 <size>
74 <width>16</width>
75 <height>20</height>
76 </size>
77 </property> 152 </property>
78 </spacer> 153 </widget>
79 <spacer row="5" column="0" > 154 </vbox>
155 </widget>
156 <spacer>
157 <property>
158 <name>name</name>
159 <cstring>Spacer5</cstring>
160 </property>
161 <property stdset="1">
162 <name>orientation</name>
163 <enum>Vertical</enum>
164 </property>
165 <property stdset="1">
166 <name>sizeType</name>
167 <enum>Expanding</enum>
168 </property>
169 <property>
170 <name>sizeHint</name>
171 <size>
172 <width>20</width>
173 <height>20</height>
174 </size>
175 </property>
176 </spacer>
177 <widget>
178 <class>QLayoutWidget</class>
179 <property stdset="1">
180 <name>name</name>
181 <cstring>Layout7</cstring>
182 </property>
183 <hbox>
184 <property stdset="1">
185 <name>margin</name>
186 <number>0</number>
187 </property>
188 <property stdset="1">
189 <name>spacing</name>
190 <number>6</number>
191 </property>
192 <spacer>
80 <property> 193 <property>
81 <name>name</name> 194 <name>name</name>
82 <cstring>Spacer1</cstring> 195 <cstring>Spacer1</cstring>
83 </property> 196 </property>
84 <property stdset="1"> 197 <property stdset="1">
85 <name>orientation</name> 198 <name>orientation</name>
86 <enum>Horizontal</enum> 199 <enum>Horizontal</enum>
87 </property> 200 </property>
88 <property stdset="1"> 201 <property stdset="1">
89 <name>sizeType</name> 202 <name>sizeType</name>
90 <enum>Fixed</enum> 203 <enum>Fixed</enum>
91 </property> 204 </property>
92 <property> 205 <property>
93 <name>sizeHint</name> 206 <name>sizeHint</name>
94 <size> 207 <size>
95 <width>30</width> 208 <width>30</width>
96 <height>20</height> 209 <height>20</height>
97 </size> 210 </size>
98 </property> 211 </property>
99 </spacer> 212 </spacer>
100 <spacer row="3" column="3" > 213 <widget>
101 <property>
102 <name>name</name>
103 <cstring>Spacer4</cstring>
104 </property>
105 <property stdset="1">
106 <name>orientation</name>
107 <enum>Horizontal</enum>
108 </property>
109 <property stdset="1">
110 <name>sizeType</name>
111 <enum>Fixed</enum>
112 </property>
113 <property>
114 <name>sizeHint</name>
115 <size>
116 <width>21</width>
117 <height>20</height>
118 </size>
119 </property>
120 </spacer>
121 <widget row="0" column="0" rowspan="1" colspan="5" >
122 <class>QLabel</class>
123 <property stdset="1">
124 <name>name</name>
125 <cstring>txtStatus</cstring>
126 </property>
127 <property stdset="1">
128 <name>text</name>
129 <string></string>
130 </property>
131 <property stdset="1">
132 <name>textFormat</name>
133 <enum>RichText</enum>
134 </property>
135 </widget>
136 <widget row="2" column="0" rowspan="1" colspan="5" >
137 <class>QLabel</class>
138 <property stdset="1">
139 <name>name</name>
140 <cstring>TextLabel3</cstring>
141 </property>
142 <property stdset="1">
143 <name>text</name>
144 <string>Please enter PIN:</string>
145 </property>
146 </widget>
147 <widget row="5" column="1" >
148 <class>QPushButton</class> 214 <class>QPushButton</class>
149 <property stdset="1"> 215 <property stdset="1">
150 <name>name</name> 216 <name>name</name>
151 <cstring>PushButton1</cstring> 217 <cstring>PushButton1</cstring>
152 </property> 218 </property>
153 <property stdset="1"> 219 <property stdset="1">
154 <name>text</name> 220 <name>text</name>
155 <string>&amp;Ok</string> 221 <string>&amp;Ok</string>
156 </property> 222 </property>
157 </widget> 223 </widget>
158 <widget row="5" column="2" rowspan="1" colspan="2" > 224 <widget>
159 <class>QPushButton</class> 225 <class>QPushButton</class>
160 <property stdset="1"> 226 <property stdset="1">
161 <name>name</name> 227 <name>name</name>
162 <cstring>PushButton2</cstring> 228 <cstring>PushButton2</cstring>
163 </property> 229 </property>
164 <property stdset="1"> 230 <property stdset="1">
165 <name>text</name> 231 <name>text</name>
166 <string>&amp;Cancel</string> 232 <string>&amp;Cancel</string>
167 </property> 233 </property>
168 </widget> 234 </widget>
169 <widget row="4" column="0" rowspan="1" colspan="5" > 235 <spacer>
170 <class>QCheckBox</class> 236 <property>
171 <property stdset="1">
172 <name>name</name> 237 <name>name</name>
173 <cstring>ckbPin</cstring> 238 <cstring>Spacer2</cstring>
174 </property> 239 </property>
175 <property stdset="1"> 240 <property stdset="1">
176 <name>text</name> 241 <name>orientation</name>
177 <string>Save pin</string> 242 <enum>Horizontal</enum>
178 </property> 243 </property>
179 </widget> 244 <property stdset="1">
180 </grid> 245 <name>sizeType</name>
246 <enum>Fixed</enum>
247 </property>
248 <property>
249 <name>sizeHint</name>
250 <size>
251 <width>16</width>
252 <height>20</height>
253 </size>
254 </property>
255 </spacer>
256 </hbox>
181 </widget> 257 </widget>
182 </grid> 258 </vbox>
183</widget> 259</widget>
184<connections> 260<connections>
185 <connection> 261 <connection>
186 <sender>PushButton1</sender> 262 <sender>PushButton1</sender>
187 <signal>clicked()</signal> 263 <signal>clicked()</signal>
188 <receiver>Form1</receiver> 264 <receiver>Form1</receiver>
189 <slot>accept()</slot> 265 <slot>accept()</slot>
190 </connection> 266 </connection>
191 <connection> 267 <connection>
192 <sender>PushButton2</sender> 268 <sender>PushButton2</sender>
193 <signal>clicked()</signal> 269 <signal>clicked()</signal>
194 <receiver>Form1</receiver> 270 <receiver>Form1</receiver>
195 <slot>reject()</slot> 271 <slot>reject()</slot>
196 </connection> 272 </connection>
197</connections> 273</connections>
198</UI> 274</UI>
diff --git a/noncore/net/opietooth/manager/bluebase.cpp b/noncore/net/opietooth/manager/bluebase.cpp
index 935c11a..54808fa 100644
--- a/noncore/net/opietooth/manager/bluebase.cpp
+++ b/noncore/net/opietooth/manager/bluebase.cpp
@@ -105,97 +105,97 @@ BlueBase::BlueBase( QWidget* parent, const char* name, WFlags fl )
105 // search conncetions 105 // search conncetions
106 addConnectedDevices(); 106 addConnectedDevices();
107 addSignalStrength(); 107 addSignalStrength();
108 m_iconLoader = new BTIconLoader(); 108 m_iconLoader = new BTIconLoader();
109 readSavedDevices(); 109 readSavedDevices();
110} 110}
111 111
112/** 112/**
113 * Reads all options from the config file 113 * Reads all options from the config file
114 */ 114 */
115void BlueBase::readConfig() { 115void BlueBase::readConfig() {
116 116
117 Config cfg( "bluetoothmanager" ); 117 Config cfg( "bluetoothmanager" );
118 cfg.setGroup( "bluezsettings" ); 118 cfg.setGroup( "bluezsettings" );
119 119
120 m_deviceName = cfg.readEntry( "name" , "No name" ); // name the device should identify with 120 m_deviceName = cfg.readEntry( "name" , "No name" ); // name the device should identify with
121 m_defaultPasskey = cfg.readEntryCrypt( "passkey" , "" ); // <- hmm, look up how good the trolls did that, maybe too weak 121 m_defaultPasskey = cfg.readEntryCrypt( "passkey" , "" ); // <- hmm, look up how good the trolls did that, maybe too weak
122 m_useEncryption = cfg.readBoolEntry( "useEncryption" , TRUE ); 122 m_useEncryption = cfg.readBoolEntry( "useEncryption" , TRUE );
123 m_enableAuthentification = cfg.readBoolEntry( "enableAuthentification" , TRUE ); 123 m_enableAuthentification = cfg.readBoolEntry( "enableAuthentification" , TRUE );
124 m_enablePagescan = cfg.readBoolEntry( "enablePagescan" , TRUE ); 124 m_enablePagescan = cfg.readBoolEntry( "enablePagescan" , TRUE );
125 m_enableInquiryscan = cfg.readBoolEntry( "enableInquiryscan" , TRUE ); 125 m_enableInquiryscan = cfg.readBoolEntry( "enableInquiryscan" , TRUE );
126} 126}
127 127
128/** 128/**
129 * Writes all options to the config file 129 * Writes all options to the config file
130 */ 130 */
131void BlueBase::writeConfig() { 131void BlueBase::writeConfig() {
132 132
133 Config cfg( "bluetoothmanager" ); 133 Config cfg( "bluetoothmanager" );
134 cfg.setGroup( "bluezsettings" ); 134 cfg.setGroup( "bluezsettings" );
135 135
136 cfg.writeEntry( "name" , m_deviceName ); 136 cfg.writeEntry( "name" , m_deviceName );
137 cfg.writeEntryCrypt( "passkey" , m_defaultPasskey ); 137 cfg.writeEntryCrypt( "passkey" , m_defaultPasskey );
138 cfg.writeEntry( "useEncryption" , m_useEncryption ); 138 cfg.writeEntry( "useEncryption" , m_useEncryption );
139 cfg.writeEntry( "enableAuthentification" , m_enableAuthentification ); 139 cfg.writeEntry( "enableAuthentification" , m_enableAuthentification );
140 cfg.writeEntry( "enablePagescan" , m_enablePagescan ); 140 cfg.writeEntry( "enablePagescan" , m_enablePagescan );
141 cfg.writeEntry( "enableInquiryscan" , m_enableInquiryscan ); 141 cfg.writeEntry( "enableInquiryscan" , m_enableInquiryscan );
142 142
143 writeToHciConfig(); 143 writeToHciConfig();
144} 144}
145 145
146/** 146/**
147 * Modify the hcid.conf file to our needs 147 * Modify the hcid.conf file to our needs
148 */ 148 */
149void BlueBase::writeToHciConfig() { 149void BlueBase::writeToHciConfig() {
150 qWarning("writeToHciConfig"); 150 qWarning("writeToHciConfig");
151 HciConfWrapper hciconf ( "/etc/bluetooth/hcid.conf" ); 151 HciConfWrapper hciconf ( "/etc/bluetooth/hcid.conf" );
152 hciconf.load(); 152 hciconf.load();
153 hciconf.setPinHelper( "/bin/QtPalmtop/bin/blue-pin" ); 153 hciconf.setPinHelper( "/opt/QtPalmtop/bin/bluepin" );
154 hciconf.setName( m_deviceName ); 154 hciconf.setName( m_deviceName );
155 hciconf.setEncrypt( m_useEncryption ); 155 hciconf.setEncrypt( m_useEncryption );
156 hciconf.setAuth( m_enableAuthentification ); 156 hciconf.setAuth( m_enableAuthentification );
157 hciconf.setPscan( m_enablePagescan ); 157 hciconf.setPscan( m_enablePagescan );
158 hciconf.setIscan( m_enableInquiryscan ); 158 hciconf.setIscan( m_enableInquiryscan );
159 hciconf.save(); 159 hciconf.save();
160} 160}
161 161
162 162
163/** 163/**
164 * Read the list of allready known devices 164 * Read the list of allready known devices
165 */ 165 */
166void BlueBase::readSavedDevices() { 166void BlueBase::readSavedDevices() {
167 167
168 QValueList<RemoteDevice> loadedDevices; 168 QValueList<RemoteDevice> loadedDevices;
169 DeviceHandler handler; 169 DeviceHandler handler;
170 loadedDevices = handler.load(); 170 loadedDevices = handler.load();
171 171
172 addSearchedDevices( loadedDevices ); 172 addSearchedDevices( loadedDevices );
173} 173}
174 174
175 175
176/** 176/**
177 * Write the list of allready known devices 177 * Write the list of allready known devices
178 */ 178 */
179void BlueBase::writeSavedDevices() { 179void BlueBase::writeSavedDevices() {
180 QListViewItemIterator it( ListView2 ); 180 QListViewItemIterator it( ListView2 );
181 BTListItem* item; 181 BTListItem* item;
182 BTDeviceItem* device; 182 BTDeviceItem* device;
183 RemoteDevice::ValueList list; 183 RemoteDevice::ValueList list;
184 for ( ; it.current(); ++it ) { 184 for ( ; it.current(); ++it ) {
185 item = (BTListItem*)it.current(); 185 item = (BTListItem*)it.current();
186 if(item->typeId() != BTListItem::Device ) 186 if(item->typeId() != BTListItem::Device )
187 continue; 187 continue;
188 device = (BTDeviceItem*)item; 188 device = (BTDeviceItem*)item;
189 189
190 list.append( device->remoteDevice() ); 190 list.append( device->remoteDevice() );
191 } 191 }
192 /* 192 /*
193 * if not empty save the List through DeviceHandler 193 * if not empty save the List through DeviceHandler
194 */ 194 */
195 if ( list.isEmpty() ) 195 if ( list.isEmpty() )
196 return; 196 return;
197 DeviceHandler handler; 197 DeviceHandler handler;
198 handler.save( list ); 198 handler.save( list );
199} 199}
200 200
201 201
diff --git a/noncore/net/ubrowser/httpfactory.cpp b/noncore/net/ubrowser/httpfactory.cpp
index b57149f..369f206 100644
--- a/noncore/net/ubrowser/httpfactory.cpp
+++ b/noncore/net/ubrowser/httpfactory.cpp
@@ -50,135 +50,135 @@ const QMimeSource * HttpFactory::data(const QString &abs_name) const
50 name.prepend(browser->context()); 50 name.prepend(browser->context());
51 name = name.remove(0, 7); 51 name = name.remove(0, 7);
52 } 52 }
53 53
54 addrEnd = name.find('/'); 54 addrEnd = name.find('/');
55 if(addrEnd == -1) 55 if(addrEnd == -1)
56 { 56 {
57 name += '/'; 57 name += '/';
58 addrEnd = name.length()-1; 58 addrEnd = name.length()-1;
59 } 59 }
60 60
61 host = name; 61 host = name;
62 file = name; 62 file = name;
63 63
64 host.truncate(addrEnd); 64 host.truncate(addrEnd);
65 file.remove(0, addrEnd); 65 file.remove(0, addrEnd);
66 66
67 portSep = host.find(':'); 67 portSep = host.find(':');
68 if(portSep != -1) 68 if(portSep != -1)
69 { 69 {
70 portS=host; 70 portS=host;
71 host.truncate(portSep); 71 host.truncate(portSep);
72 portS.remove(0, portSep+1); 72 portS.remove(0, portSep+1);
73 port = portS.toInt(); 73 port = portS.toInt();
74 } 74 }
75 75
76 //printf("%s %s %d\n", host.latin1(), file.latin1(), port); 76 //printf("%s %s %d\n", host.latin1(), file.latin1(), port);
77 77
78 if(port == 80) 78 if(port == 80)
79 { 79 {
80 portS="80"; 80 portS="80";
81 } 81 }
82 82
83 //if(file.find(".png", file.length()-4) != -1 || file.find(".gif", file.length()-4) != -1 || file.find(".jpg", file.length()-4) != -1) 83 //if(file.find(".png", file.length()-4) != -1 || file.find(".gif", file.length()-4) != -1 || file.find(".jpg", file.length()-4) != -1)
84 //{ 84 //{
85 // isImage=true; 85 // isImage=true;
86 //} 86 //}
87 87
88 //comm->setStuff(host, portS, file, text, image, isImage); 88 //comm->setStuff(host, portS, file, text, image, isImage);
89 89
90 //socket->connectToHost(host, port); 90 //socket->connectToHost(host, port);
91 91
92 int con, bytesSent; 92 int con, bytesSent;
93 struct sockaddr_in serverAddr; 93 struct sockaddr_in serverAddr;
94 struct hostent * serverInfo = gethostbyname( host.latin1() ); 94 struct hostent * serverInfo = gethostbyname( host.latin1() );
95 95
96 if( serverInfo == NULL ) 96 if( serverInfo == NULL )
97 { 97 {
98 QMessageBox *mb = new QMessageBox("Error!", 98 QMessageBox *mb = new QMessageBox(QObject::tr("Error!"),
99 "couldnt find ip address", 99 QObject::tr("IP-Address not found"),
100 QMessageBox::NoIcon, 100 QMessageBox::NoIcon,
101 QMessageBox::Ok, 101 QMessageBox::Ok,
102 QMessageBox::NoButton, 102 QMessageBox::NoButton,
103 QMessageBox::NoButton); 103 QMessageBox::NoButton);
104 mb->exec(); 104 mb->exec();
105 perror("HttpFactory::data:"); 105 perror("HttpFactory::data:");
106 return 0; 106 return 0;
107 } 107 }
108 108
109 QByteArray data; 109 QByteArray data;
110 //printf( "HttpFactory::data: %s\n", inet_ntoa(*((struct in_addr *)serverInfo->h_addr )) ); 110 //printf( "HttpFactory::data: %s\n", inet_ntoa(*((struct in_addr *)serverInfo->h_addr )) );
111 111
112 QString request("GET " + file + " HTTP/1.1\r\nHost: " + host + ':' + portS + "\r\nConnection: close\r\n\r\n"); 112 QString request("GET " + file + " HTTP/1.1\r\nHost: " + host + ':' + portS + "\r\nConnection: close\r\n\r\n");
113 113
114 con = socket( AF_INET, SOCK_STREAM, 0 ); 114 con = socket( AF_INET, SOCK_STREAM, 0 );
115 if( con == -1 ) 115 if( con == -1 )
116 { 116 {
117 QMessageBox *mb = new QMessageBox("Error!", 117 QMessageBox *mb = new QMessageBox(QObject::tr("Error!"),
118 "couldnt create socket", 118 QObject::tr("Error creating socket"),
119 QMessageBox::NoIcon, 119 QMessageBox::NoIcon,
120 QMessageBox::Ok, 120 QMessageBox::Ok,
121 QMessageBox::NoButton, 121 QMessageBox::NoButton,
122 QMessageBox::NoButton); 122 QMessageBox::NoButton);
123 mb->exec(); 123 mb->exec();
124 perror("HttpFactory::data:"); 124 perror("HttpFactory::data:");
125 return 0; 125 return 0;
126 } 126 }
127 127
128 serverAddr.sin_family = AF_INET; 128 serverAddr.sin_family = AF_INET;
129 serverAddr.sin_port = htons( port ); 129 serverAddr.sin_port = htons( port );
130 serverAddr.sin_addr.s_addr = inet_addr( inet_ntoa(*((struct in_addr *)serverInfo->h_addr )) ); 130 serverAddr.sin_addr.s_addr = inet_addr( inet_ntoa(*((struct in_addr *)serverInfo->h_addr )) );
131 memset( &(serverAddr.sin_zero), '\0', 8 ); 131 memset( &(serverAddr.sin_zero), '\0', 8 );
132 132
133 if(::connect( con, (struct sockaddr *)&serverAddr, sizeof(struct sockaddr)) == -1 ) 133 if(::connect( con, (struct sockaddr *)&serverAddr, sizeof(struct sockaddr)) == -1 )
134 { 134 {
135 QMessageBox *mb = new QMessageBox("Error!", 135 QMessageBox *mb = new QMessageBox(QObject::tr("Error!"),
136 "couldnt connect to socket", 136 QObject::tr("Error connecting to socket"),
137 QMessageBox::NoIcon, 137 QMessageBox::NoIcon,
138 QMessageBox::Ok, 138 QMessageBox::Ok,
139 QMessageBox::NoButton, 139 QMessageBox::NoButton,
140 QMessageBox::NoButton); 140 QMessageBox::NoButton);
141 mb->exec(); 141 mb->exec();
142 perror("HttpFactory::data:"); 142 perror("HttpFactory::data:");
143 return 0; 143 return 0;
144 } 144 }
145 145
146 146
147 bytesSent = send( con, request.latin1(), request.length(), 0); 147 bytesSent = send( con, request.latin1(), request.length(), 0);
148 //printf("HttpFactory::data: bytes written: %d out of: %d\n", bytesSent, request.length() ); 148 //printf("HttpFactory::data: bytes written: %d out of: %d\n", bytesSent, request.length() );
149 //printf("HttpFactory::data: request sent:\n%s", request.latin1()); 149 //printf("HttpFactory::data: request sent:\n%s", request.latin1());
150 150
151 data = this->processResponse( con, isText ); 151 data = this->processResponse( con, isText );
152 152
153 ::close( con ); 153 ::close( con );
154 154
155 if(isText) 155 if(isText)
156 { 156 {
157 text->setText( QString( data ) ); 157 text->setText( QString( data ) );
158 return text; 158 return text;
159 } 159 }
160 else 160 else
161 { 161 {
162 image->setImage( QImage( data ) ); 162 image->setImage( QImage( data ) );
163 return image; 163 return image;
164 } 164 }
165} 165}
166 166
167const QMimeSource * HttpFactory::data(const QString &abs_or_rel_name, const QString & context) const 167const QMimeSource * HttpFactory::data(const QString &abs_or_rel_name, const QString & context) const
168{ 168{
169 printf("HttpFactory::data: using relative data func\n"); 169 printf("HttpFactory::data: using relative data func\n");
170 170
171 if(abs_or_rel_name.startsWith(context)) 171 if(abs_or_rel_name.startsWith(context))
172 { 172 {
173 return data(abs_or_rel_name); 173 return data(abs_or_rel_name);
174 } 174 }
175 else 175 else
176 { 176 {
177 return data(context + abs_or_rel_name); 177 return data(context + abs_or_rel_name);
178 } 178 }
179 179
180 return 0; 180 return 0;
181} 181}
182 182
183const QByteArray HttpFactory::processResponse( int sockfd, bool &isText ) const 183const QByteArray HttpFactory::processResponse( int sockfd, bool &isText ) const
184{ 184{
diff --git a/noncore/net/ubrowser/mainview.cpp b/noncore/net/ubrowser/mainview.cpp
index f68c5db..9302f05 100644
--- a/noncore/net/ubrowser/mainview.cpp
+++ b/noncore/net/ubrowser/mainview.cpp
@@ -1,121 +1,121 @@
1/* 1/*
2Opie-uBrowser. a very small web browser, using on QTextBrowser for html display/parsing 2Opie-uBrowser. a very small web browser, using on QTextBrowser for html display/parsing
3Copyright (C) 2002 Thomas Stephens 3Copyright (C) 2002 Thomas Stephens
4 4
5This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public 5This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public
6License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later 6License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later
7version. 7version.
8 8
9This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the 9This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
10implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General 10implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
11Public License for more details. 11Public License for more details.
12 12
13You should have received a copy of the GNU General Public License along with this program; if not, write to the Free 13You should have received a copy of the GNU General Public License along with this program; if not, write to the Free
14Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 14Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
15*/ 15*/
16 16
17 17
18#include "mainview.h" 18#include "mainview.h"
19 19
20MainView::MainView(QWidget *parent, const char *name) : QMainWindow(parent, name) 20MainView::MainView(QWidget *parent, const char *name) : QMainWindow(parent, name)
21{ 21{
22 setIcon( Resource::loadPixmap( "remote" ) ); 22 setIcon( Resource::loadPixmap( "remote" ) );
23 setCaption("uBrowser"); 23 setCaption(tr("uBrowser"));
24 24
25 setToolBarsMovable( false ); 25 setToolBarsMovable( false );
26 26
27 QPEToolBar *toolbar = new QPEToolBar(this, "toolbar"); 27 QPEToolBar *toolbar = new QPEToolBar(this, "toolbar");
28 back = new QToolButton(Resource::loadPixmap("ubrowser/back"), 0, 0, 0, 0, toolbar, "back"); 28 back = new QToolButton(Resource::loadPixmap("ubrowser/back"), 0, 0, 0, 0, toolbar, "back");
29 forward = new QToolButton(Resource::loadPixmap("ubrowser/forward"), 0, 0, 0, 0, toolbar, "forward"); 29 forward = new QToolButton(Resource::loadPixmap("ubrowser/forward"), 0, 0, 0, 0, toolbar, "forward");
30 home = new QToolButton(Resource::loadPixmap("ubrowser/home"), 0, 0, 0, 0, toolbar, "home"); 30 home = new QToolButton(Resource::loadPixmap("ubrowser/home"), 0, 0, 0, 0, toolbar, "home");
31 location = new QComboBox(true, toolbar, "location"); 31 location = new QComboBox(true, toolbar, "location");
32 go = new QToolButton(Resource::loadPixmap("ubrowser/go"), 0, 0, 0, 0, toolbar, "go"); 32 go = new QToolButton(Resource::loadPixmap("ubrowser/go"), 0, 0, 0, 0, toolbar, "go");
33 33
34 toolbar->setStretchableWidget(location); 34 toolbar->setStretchableWidget(location);
35 toolbar->setHorizontalStretchable(true); 35 toolbar->setHorizontalStretchable(true);
36 location->setAutoCompletion( true ); 36 location->setAutoCompletion( true );
37 37
38 addToolBar(toolbar); 38 addToolBar(toolbar);
39 39
40 browser = new QTextBrowser(this, "browser"); 40 browser = new QTextBrowser(this, "browser");
41 setCentralWidget(browser); 41 setCentralWidget(browser);
42 42
43//make the button take you to the location 43//make the button take you to the location
44 connect(go, SIGNAL(clicked()), this, SLOT(goClicked()) ); 44 connect(go, SIGNAL(clicked()), this, SLOT(goClicked()) );
45 connect(location->lineEdit(), SIGNAL(returnPressed()), this, SLOT(goClicked()) ); 45 connect(location->lineEdit(), SIGNAL(returnPressed()), this, SLOT(goClicked()) );
46 46
47//make back, forward and home do their thing (isnt QTextBrowser great?) 47//make back, forward and home do their thing (isnt QTextBrowser great?)
48 connect(back, SIGNAL(clicked()), browser, SLOT(backward()) ); 48 connect(back, SIGNAL(clicked()), browser, SLOT(backward()) );
49 connect(forward, SIGNAL(clicked()), browser, SLOT(forward()) ); 49 connect(forward, SIGNAL(clicked()), browser, SLOT(forward()) );
50 connect(home, SIGNAL(clicked()), browser, SLOT(home()) ); 50 connect(home, SIGNAL(clicked()), browser, SLOT(home()) );
51 51
52//make back and forward buttons be enabled, only when you can go back or forward (again, i love QTextBrowser) 52//make back and forward buttons be enabled, only when you can go back or forward (again, i love QTextBrowser)
53//this doesnt seem to work, but doesnt break anything either... 53//this doesnt seem to work, but doesnt break anything either...
54 connect(browser, SIGNAL(backwardAvailable(bool)), back, SLOT(setOn(bool)) ); 54 connect(browser, SIGNAL(backwardAvailable(bool)), back, SLOT(setOn(bool)) );
55 connect(browser, SIGNAL(forwardAvailable(bool)), forward, SLOT(setOn(bool)) ); 55 connect(browser, SIGNAL(forwardAvailable(bool)), forward, SLOT(setOn(bool)) );
56 56
57//notify me when the text of the browser has changed (like when the user clicks a link) 57//notify me when the text of the browser has changed (like when the user clicks a link)
58 connect(browser, SIGNAL(textChanged()), this, SLOT(textChanged()) ); 58 connect(browser, SIGNAL(textChanged()), this, SLOT(textChanged()) );
59 59
60 http = new HttpFactory(browser); 60 http = new HttpFactory(browser);
61 61
62 if( qApp->argc() > 1 ) 62 if( qApp->argc() > 1 )
63 { 63 {
64 char **argv = qApp->argv(); 64 char **argv = qApp->argv();
65 int i = 0; 65 int i = 0;
66 QString *openfile = new QString( argv[0] ); 66 QString *openfile = new QString( argv[0] );
67 while( openfile->contains( "ubrowser" ) == 0 && i < qApp->argc() ) 67 while( openfile->contains( "ubrowser" ) == 0 && i < qApp->argc() )
68 { 68 {
69 i++; 69 i++;
70 *openfile = argv[i]; 70 *openfile = argv[i];
71 } 71 }
72 *openfile = argv[i+1]; 72 *openfile = argv[i+1];
73 if( !openfile->startsWith( "http://" ) && !openfile->startsWith( "/" ) ) 73 if( !openfile->startsWith( "http://" ) && !openfile->startsWith( "/" ) )
74 { 74 {
75 openfile->insert( 0, QDir::currentDirPath()+"/" ); 75 openfile->insert( 0, QDir::currentDirPath()+"/" );
76 } 76 }
77 location->setEditText( *openfile ); 77 location->setEditText( *openfile );
78 goClicked(); 78 goClicked();
79 } 79 }
80} 80}
81 81
82void MainView::goClicked() 82void MainView::goClicked()
83{ 83{
84 location->insertItem( location->currentText() ); 84 location->insertItem( location->currentText() );
85 85
86 if(location->currentText().startsWith("http://") ) 86 if(location->currentText().startsWith("http://") )
87 { 87 {
88 location->setEditText(location->currentText().lower()); 88 location->setEditText(location->currentText().lower());
89 browser->setMimeSourceFactory(http); 89 browser->setMimeSourceFactory(http);
90 printf("MainView::goClicked: using http source factory\n"); 90 printf("MainView::goClicked: using http source factory\n");
91 } 91 }
92 else 92 else
93 { 93 {
94 browser->setMimeSourceFactory(QMimeSourceFactory::defaultFactory()); 94 browser->setMimeSourceFactory(QMimeSourceFactory::defaultFactory());
95 printf("MainView::goClicked: using default source factory\n"); 95 printf("MainView::goClicked: using default source factory\n");
96 } 96 }
97 97
98 browser->setSource(location->currentText()); 98 browser->setSource(location->currentText());
99} 99}
100 100
101void MainView::textChanged() 101void MainView::textChanged()
102{ 102{
103 if(browser->documentTitle().isNull()) 103 if(browser->documentTitle().isNull())
104 { 104 {
105 setCaption(browser->source() + " - uBrowser"); 105 setCaption( tr("%1 - uBrowser").arg( browser->source() ) );
106 } 106 }
107 else 107 else
108 { 108 {
109 setCaption(browser->documentTitle() + " - uBrowser"); 109 setCaption(tr(" - uBrowser").arg( browser->documentTitle() ));
110 } 110 }
111 111
112 location->setEditText(browser->source()); 112 location->setEditText(browser->source());
113} 113}
114 114
115void MainView::setDocument( const QString& applnk_filename ) 115void MainView::setDocument( const QString& applnk_filename )
116{ 116{
117 DocLnk *file = new DocLnk( applnk_filename ); 117 DocLnk *file = new DocLnk( applnk_filename );
118 118
119 location->setEditText( file->file() ); 119 location->setEditText( file->file() );
120 goClicked(); 120 goClicked();
121} 121}
diff --git a/noncore/net/ubrowser/opie-ubrowser.control b/noncore/net/ubrowser/opie-ubrowser.control
new file mode 100644
index 0000000..61a6cde
--- a/dev/null
+++ b/noncore/net/ubrowser/opie-ubrowser.control
@@ -0,0 +1,10 @@
1Package: opie-ubrowser
2Files: bin/ubrowser apps/Applications/ubrowser.desktop pics/ubrowser/*.png
3Priority: optional
4Section: opie/applications
5Maintainer: Thomas Stephens <spiralman@softhome.net>
6Architecture: arm
7Version: 0.1-$SUB_VERSION
8Depends: task-opie-minimal
9License: GPL
10Description: a very small web browser
diff --git a/noncore/unsupported/mailit/config.in b/noncore/unsupported/mailit/config.in
index 2b56b5f..142b840 100644
--- a/noncore/unsupported/mailit/config.in
+++ b/noncore/unsupported/mailit/config.in
@@ -1,4 +1,4 @@
1 config MAILIT 1 config MAILIT
2 boolean "mailit" 2 boolean "opie-mailit (a simple POP3 email client)"
3 default "n" 3 default "n"
4 depends ( LIBQPE || LIBQPE-X11 ) 4 depends ( LIBQPE || LIBQPE-X11 )
diff --git a/noncore/unsupported/mailit/popclient.cpp b/noncore/unsupported/mailit/popclient.cpp
index 5da3bcb..1df6b2b 100644
--- a/noncore/unsupported/mailit/popclient.cpp
+++ b/noncore/unsupported/mailit/popclient.cpp
@@ -1,331 +1,332 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2001 Trolltech AS. All rights reserved. 2** Copyright (C) 2001 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of Qt Palmtop Environment. 4** This file is part of Qt Palmtop Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20#include "popclient.h" 20#include "popclient.h"
21#include "emailhandler.h" 21#include "emailhandler.h"
22//#define APOP_TEST 22//#define APOP_TEST
23 23
24extern "C" { 24extern "C" {
25#include "md5.h" 25#include "md5.h"
26} 26}
27 27
28#include <qcstring.h> 28#include <qcstring.h>
29 29
30PopClient::PopClient() 30PopClient::PopClient()
31{ 31{
32 32
33 socket = new QSocket(this, "popClient"); 33 socket = new QSocket(this, "popClient");
34 connect(socket, SIGNAL(error(int)), this, SLOT(errorHandling(int))); 34 connect(socket, SIGNAL(error(int)), this, SLOT(errorHandling(int)));
35 connect(socket, SIGNAL(connected()), this, SLOT(connectionEstablished())); 35 connect(socket, SIGNAL(connected()), this, SLOT(connectionEstablished()));
36 connect(socket, SIGNAL(readyRead()), this, SLOT(incomingData())); 36 connect(socket, SIGNAL(readyRead()), this, SLOT(incomingData()));
37 37
38 stream = new QTextStream(socket); 38 stream = new QTextStream(socket);
39 39
40 receiving = FALSE; 40 receiving = FALSE;
41 synchronize = FALSE; 41 synchronize = FALSE;
42 lastSync = 0; 42 lastSync = 0;
43 headerLimit = 0; 43 headerLimit = 0;
44 mailList = 0;
44 preview = FALSE; 45 preview = FALSE;
45} 46}
46 47
47PopClient::~PopClient() 48PopClient::~PopClient()
48{ 49{
49 delete socket; 50 delete socket;
50 delete stream; 51 delete stream;
51} 52}
52 53
53void PopClient::newConnection(const QString &target, int port) 54void PopClient::newConnection(const QString &target, int port)
54{ 55{
55 if (receiving) { 56 if (receiving) {
56 qWarning("socket in use, connection refused"); 57 qWarning("socket in use, connection refused");
57 return; 58 return;
58 } 59 }
59 60
60 status = Init; 61 status = Init;
61 62
62 socket->connectToHost(target, port); 63 socket->connectToHost(target, port);
63 receiving = TRUE; 64 receiving = TRUE;
64 //selected = FALSE; 65 //selected = FALSE;
65 66
66 emit updateStatus(tr("DNS lookup")); 67 emit updateStatus(tr("DNS lookup"));
67} 68}
68 69
69void PopClient::setAccount(const QString &popUser, const QString &popPasswd) 70void PopClient::setAccount(const QString &popUser, const QString &popPasswd)
70{ 71{
71 popUserName = popUser; 72 popUserName = popUser;
72 popPassword = popPasswd; 73 popPassword = popPasswd;
73} 74}
74 75
75void PopClient::setSynchronize(int lastCount) 76void PopClient::setSynchronize(int lastCount)
76{ 77{
77 synchronize = TRUE; 78 synchronize = TRUE;
78 lastSync = lastCount; 79 lastSync = lastCount;
79} 80}
80 81
81void PopClient::removeSynchronize() 82void PopClient::removeSynchronize()
82{ 83{
83 synchronize = FALSE; 84 synchronize = FALSE;
84 lastSync = 0; 85 lastSync = 0;
85} 86}
86 87
87void PopClient::headersOnly(bool headers, int limit) 88void PopClient::headersOnly(bool headers, int limit)
88{ 89{
89 preview = headers; 90 preview = headers;
90 headerLimit = limit; 91 headerLimit = limit;
91} 92}
92 93
93void PopClient::setSelectedMails(MailList *list) 94void PopClient::setSelectedMails(MailList *list)
94{ 95{
95 selected = TRUE; 96 selected = TRUE;
96 mailList = list; 97 mailList = list;
97} 98}
98 99
99void PopClient::connectionEstablished() 100void PopClient::connectionEstablished()
100{ 101{
101 emit updateStatus(tr("Connection established")); 102 emit updateStatus(tr("Connection established"));
102} 103}
103 104
104void PopClient::errorHandling(int status) 105void PopClient::errorHandling(int status)
105{ 106{
106 errorHandlingWithMsg( status, QString::null ); 107 errorHandlingWithMsg( status, QString::null );
107} 108}
108void PopClient::errorHandlingWithMsg(int status, const QString & Msg ) 109void PopClient::errorHandlingWithMsg(int status, const QString & Msg )
109{ 110{
110 emit updateStatus(tr("Error Occured")); 111 emit updateStatus(tr("Error Occured"));
111 emit errorOccurred(status, Msg); 112 emit errorOccurred(status, Msg);
112 socket->close(); 113 socket->close();
113 receiving = FALSE; 114 receiving = FALSE;
114} 115}
115 116
116void PopClient::incomingData() 117void PopClient::incomingData()
117{ 118{
118 QString response, temp, temp2, timeStamp; 119 QString response, temp, temp2, timeStamp;
119 QString md5Source; 120 QString md5Source;
120 int start, end; 121 int start, end;
121// char *md5Digest; 122// char *md5Digest;
122 char md5Digest[16]; 123 char md5Digest[16];
123// if ( !socket->canReadLine() ) 124// if ( !socket->canReadLine() )
124// return; 125// return;
125 126
126 127
127 response = socket->readLine(); 128 response = socket->readLine();
128 129
129 switch(status) { 130 switch(status) {
130 //logging in 131 //logging in
131 case Init: { 132 case Init: {
132#ifdef APOP_TEST 133#ifdef APOP_TEST
133 start = response.find('<',0); 134 start = response.find('<',0);
134 end = response.find('>', start); 135 end = response.find('>', start);
135 if( start >= 0 && end > start ) 136 if( start >= 0 && end > start )
136 { 137 {
137 timeStamp = response.mid( start , end - start + 1); 138 timeStamp = response.mid( start , end - start + 1);
138 md5Source = timeStamp + popPassword; 139 md5Source = timeStamp + popPassword;
139 140
140 md5_buffer( (char const *)md5Source, md5Source.length(),&md5Digest[0]); 141 md5_buffer( (char const *)md5Source, md5Source.length(),&md5Digest[0]);
141 142
142 for(int j =0;j < MD5_DIGEST_LENGTH ;j++) 143 for(int j =0;j < MD5_DIGEST_LENGTH ;j++)
143 { 144 {
144 printf("%x", md5Digest[j]); 145 printf("%x", md5Digest[j]);
145 } 146 }
146 printf("\n"); 147 printf("\n");
147// qDebug(md5Digest); 148// qDebug(md5Digest);
148 *stream << "APOP " << popUserName << " " << md5Digest << "\r\n"; 149 *stream << "APOP " << popUserName << " " << md5Digest << "\r\n";
149 // qDebug("%s", stream); 150 // qDebug("%s", stream);
150 status = Stat; 151 status = Stat;
151 } 152 }
152 else 153 else
153#endif 154#endif
154 { 155 {
155 timeStamp = ""; 156 timeStamp = "";
156 *stream << "USER " << popUserName << "\r\n"; 157 *stream << "USER " << popUserName << "\r\n";
157 status = Pass; 158 status = Pass;
158 } 159 }
159 160
160 break; 161 break;
161 } 162 }
162 163
163 case Pass: { 164 case Pass: {
164 *stream << "PASS " << popPassword << "\r\n"; 165 *stream << "PASS " << popPassword << "\r\n";
165 status = Stat; 166 status = Stat;
166 167
167 break; 168 break;
168 } 169 }
169 //ask for number of messages 170 //ask for number of messages
170 case Stat: { 171 case Stat: {
171 if (response[0] == '+') { 172 if (response[0] == '+') {
172 *stream << "STAT" << "\r\n"; 173 *stream << "STAT" << "\r\n";
173 status = Mcnt; 174 status = Mcnt;
174 } else errorHandlingWithMsg(ErrLoginFailed, response); 175 } else errorHandlingWithMsg(ErrLoginFailed, response);
175 break; 176 break;
176 } 177 }
177 //get count of messages, eg "+OK 4 900.." -> int 4 178 //get count of messages, eg "+OK 4 900.." -> int 4
178 case Mcnt: { 179 case Mcnt: {
179 if (response[0] == '+') { 180 if (response[0] == '+') {
180 temp = response.replace(0, 4, ""); 181 temp = response.replace(0, 4, "");
181 int x = temp.find(" ", 0); 182 int x = temp.find(" ", 0);
182 temp.truncate((uint) x); 183 temp.truncate((uint) x);
183 newMessages = temp.toInt(); 184 newMessages = temp.toInt();
184 messageCount = 1; 185 messageCount = 1;
185 status = List; 186 status = List;
186 187
187 if (synchronize) { 188 if (synchronize) {
188 //messages deleted from server, reload all 189 //messages deleted from server, reload all
189 if (newMessages < lastSync) 190 if (newMessages < lastSync)
190 lastSync = 0; 191 lastSync = 0;
191 messageCount = 1; 192 messageCount = 1;
192 } 193 }
193 194
194 if (selected) { 195 if (selected && mailList ) {
195 int *ptr = mailList->first(); 196 int *ptr = mailList->first();
196 if (ptr != 0) { 197 if (ptr != 0) {
197 newMessages++; //to ensure no early jumpout 198 newMessages++; //to ensure no early jumpout
198 messageCount = *ptr; 199 messageCount = *ptr;
199 } else newMessages = 0; 200 } else newMessages = 0;
200 } 201 }
201 202
202 } else errorHandlingWithMsg(ErrUnknownResponse, response); 203 } else errorHandlingWithMsg(ErrUnknownResponse, response);
203 } 204 }
204 //Read message number x, count upwards to messageCount 205 //Read message number x, count upwards to messageCount
205 case List: { 206 case List: {
206 if (messageCount <= newMessages) { 207 if (messageCount <= newMessages) {
207 *stream << "LIST " << messageCount << "\r\n"; 208 *stream << "LIST " << messageCount << "\r\n";
208 status = Size; 209 status = Size;
209 temp2.setNum(newMessages - lastSync); 210 temp2.setNum(newMessages - lastSync);
210 temp.setNum(messageCount - lastSync); 211 temp.setNum(messageCount - lastSync);
211 if (!selected) { 212 if (!selected) {
212 emit updateStatus(tr("Retrieving ") + temp + "/" + temp2); 213 emit updateStatus(tr("Retrieving ") + temp + "/" + temp2);
213 } else { 214 } else {
214 //completing a previously closed transfer 215 //completing a previously closed transfer
215 /* if ( (messageCount - lastSync) <= 0) { 216 /* if ( (messageCount - lastSync) <= 0) {
216 temp.setNum(messageCount); 217 temp.setNum(messageCount);
217 emit updateStatus(tr("Previous message ") + temp); 218 emit updateStatus(tr("Previous message ") + temp);
218 } else {*/ 219 } else {*/
219 emit updateStatus(tr("Completing message ") + temp); 220 emit updateStatus(tr("Completing message ") + temp);
220 //} 221 //}
221 } 222 }
222 break; 223 break;
223 } else { 224 } else {
224 emit updateStatus(tr("No new Messages")); 225 emit updateStatus(tr("No new Messages"));
225 status = Quit; 226 status = Quit;
226 } 227 }
227 } 228 }
228 //get size of message, eg "500 characters in message.." -> int 500 229 //get size of message, eg "500 characters in message.." -> int 500
229 case Size: { 230 case Size: {
230 if (status != Quit) { //because of idiotic switch 231 if (status != Quit) { //because of idiotic switch
231 if (response[0] == '+') { 232 if (response[0] == '+') {
232 temp = response.replace(0, 4, ""); 233 temp = response.replace(0, 4, "");
233 int x = temp.find(" ", 0); 234 int x = temp.find(" ", 0);
234 temp = temp.right(temp.length() - ((uint) x + 1) ); 235 temp = temp.right(temp.length() - ((uint) x + 1) );
235 mailSize = temp.toInt(); 236 mailSize = temp.toInt();
236 emit currentMailSize(mailSize); 237 emit currentMailSize(mailSize);
237 238
238 status = Retr; 239 status = Retr;
239 } else { 240 } else {
240 //qWarning(response); 241 //qWarning(response);
241 errorHandlingWithMsg(ErrUnknownResponse, response); 242 errorHandlingWithMsg(ErrUnknownResponse, response);
242 } 243 }
243 } 244 }
244 } 245 }
245 //Read message number x, count upwards to messageCount 246 //Read message number x, count upwards to messageCount
246 case Retr: { 247 case Retr: {
247 if (status != Quit) { 248 if (status != Quit) {
248 if ((selected)||(mailSize <= headerLimit)) 249 if ((selected)||(mailSize <= headerLimit))
249 { 250 {
250 *stream << "RETR " << messageCount << "\r\n"; 251 *stream << "RETR " << messageCount << "\r\n";
251 } else { //only header 252 } else { //only header
252 *stream << "TOP " << messageCount << " 0\r\n"; 253 *stream << "TOP " << messageCount << " 0\r\n";
253 } 254 }
254 messageCount++; 255 messageCount++;
255 status = Ignore; 256 status = Ignore;
256 break; 257 break;
257 } } 258 } }
258 case Ignore: { 259 case Ignore: {
259 if (status != Quit) { //because of idiotic switch 260 if (status != Quit) { //because of idiotic switch
260 if (response[0] == '+') { 261 if (response[0] == '+') {
261 message = ""; 262 message = "";
262 status = Read; 263 status = Read;
263 if (!socket->canReadLine()) //sync. problems 264 if (!socket->canReadLine()) //sync. problems
264 break; 265 break;
265 response = socket->readLine(); 266 response = socket->readLine();
266 } else errorHandlingWithMsg(ErrUnknownResponse, response); 267 } else errorHandlingWithMsg(ErrUnknownResponse, response);
267 } 268 }
268 } 269 }
269 //add all incoming lines to body. When size is reached, send 270 //add all incoming lines to body. When size is reached, send
270 //message, and go back to read new message 271 //message, and go back to read new message
271 case Read: { 272 case Read: {
272 if (status != Quit) { //because of idiotic switch 273 if (status != Quit) { //because of idiotic switch
273 message += response; 274 message += response;
274 while ( socket->canReadLine() ) { 275 while ( socket->canReadLine() ) {
275 response = socket->readLine(); 276 response = socket->readLine();
276 message += response; 277 message += response;
277 } 278 }
278 emit downloadedSize(message.length()); 279 emit downloadedSize(message.length());
279 int x = message.find("\r\n.\r\n",-5); 280 int x = message.find("\r\n.\r\n",-5);
280 if (x == -1) { 281 if (x == -1) {
281 break; 282 break;
282 } else { //message reach entire size 283 } else { //message reach entire size
283 if ( (selected)||(mailSize <= headerLimit)) //mail size limit is not used if late download is active 284 if ( (selected)||(mailSize <= headerLimit)) //mail size limit is not used if late download is active
284 { 285 {
285 emit newMessage(message, messageCount-1, mailSize, TRUE); 286 emit newMessage(message, messageCount-1, mailSize, TRUE);
286 } else { //incomplete mail downloaded 287 } else { //incomplete mail downloaded
287 emit newMessage(message, messageCount-1, mailSize, FALSE); 288 emit newMessage(message, messageCount-1, mailSize, FALSE);
288 } 289 }
289 290
290 if ((messageCount > newMessages)||(selected)) //last message ? 291 if ((messageCount > newMessages)||(selected)) //last message ?
291 { 292 {
292 status = Quit; 293 status = Quit;
293 if (selected) { //grab next from queue 294 if (selected) { //grab next from queue
294 newMessages--; 295 newMessages--;
295 status = Quit; 296 status = Quit;
296 } 297 }
297 } 298 }
298 else 299 else
299 { 300 {
300 *stream << "LIST " << messageCount << "\r\n"; 301 *stream << "LIST " << messageCount << "\r\n";
301 status = Size; 302 status = Size;
302 temp2.setNum(newMessages - lastSync); 303 temp2.setNum(newMessages - lastSync);
303 temp.setNum(messageCount - lastSync); 304 temp.setNum(messageCount - lastSync);
304 emit updateStatus(tr("Retrieving ") + temp + "/" + temp2); 305 emit updateStatus(tr("Retrieving ") + temp + "/" + temp2);
305 306
306 break; 307 break;
307 } 308 }
308 } 309 }
309 } 310 }
310 if (status != Quit) 311 if (status != Quit)
311 break; 312 break;
312 } 313 }
313 case Quit: { 314 case Quit: {
314 *stream << "Quit\r\n"; 315 *stream << "Quit\r\n";
315 status = Done; 316 status = Done;
316 int newM = newMessages - lastSync; 317 int newM = newMessages - lastSync;
317 if (newM > 0) { 318 if (newM > 0) {
318 temp.setNum(newM); 319 temp.setNum(newM);
319 emit updateStatus(temp + tr(" new messages")); 320 emit updateStatus(temp + tr(" new messages"));
320 } else { 321 } else {
321 emit updateStatus(tr("No new messages")); 322 emit updateStatus(tr("No new messages"));
322 } 323 }
323 324
324 socket->close(); 325 socket->close();
325 receiving = FALSE; 326 receiving = FALSE;
326 emit mailTransfered(newM); 327 emit mailTransfered(newM);
327 break; 328 break;
328 } 329 }
329 } 330 }
330 331
331} 332}
diff --git a/noncore/unsupported/mailit/resource.cpp b/noncore/unsupported/mailit/resource.cpp
deleted file mode 100644
index dc19880..0000000
--- a/noncore/unsupported/mailit/resource.cpp
+++ b/dev/null
@@ -1,136 +0,0 @@
1/**********************************************************************
2** Copyright (C) 2000 Trolltech AS. All rights reserved.
3**
4** This file is part of Qtopia Environment.
5**
6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file.
10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15**
16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you.
18**
19**********************************************************************/
20
21#include "qpeapplication.h"
22#include "resource.h"
23#include <qdir.h>
24#include <qfile.h>
25#include <qregexp.h>
26#include <qpixmapcache.h>
27#include <qpainter.h>
28
29#include "inlinepics_p.h"
30
31/*!
32 \class Resource resource.h
33 \brief The Resource class provides access to named resources.
34
35 The resources may be provided from files or other sources.
36*/
37
38/*!
39 \fn Resource::Resource()
40 \internal
41*/
42
43/*!
44 Returns the QPixmap named \a pix. You should avoid including
45 any filename type extension (eg. .png, .xpm).
46*/
47QPixmap Resource::loadPixmap( const QString &pix )
48{
49 QPixmap pm;
50 QString key="QPE_"+pix;
51 if ( !QPixmapCache::find(key,pm) ) {
52 pm.convertFromImage(loadImage(pix));
53 QPixmapCache::insert(key,pm);
54 }
55 return pm;
56}
57
58/*!
59 Returns the QBitmap named \a pix. You should avoid including
60 any filename type extension (eg. .png, .xpm).
61*/
62QBitmap Resource::loadBitmap( const QString &pix )
63{
64 QBitmap bm;
65 bm = loadPixmap(pix);
66 return bm;
67}
68
69/*!
70 Returns the filename of a pixmap named \a pix. You should avoid including
71 any filename type extension (eg. .png, .xpm).
72
73 Normally you will use loadPixmap() rather than this function.
74*/
75QString Resource::findPixmap( const QString &pix )
76{
77 QString picsPath = QPEApplication::qpeDir() + "pics/";
78
79 if ( QFile( picsPath + pix + ".png").exists() )
80 return picsPath + pix + ".png";
81 else if ( QFile( picsPath + pix + ".xpm").exists() )
82 return picsPath + pix + ".xpm";
83 else if ( QFile( picsPath + pix ).exists() )
84 return picsPath + pix;
85
86 //qDebug("Cannot find pixmap: %s", pix.latin1());
87 return QString();
88}
89
90/*!
91 Returns a sound file for a sound named \a name.
92 You should avoid including any filename type extension (eg. .wav, .au, .mp3).
93*/
94QString Resource::findSound( const QString &name )
95{
96 QString picsPath = QPEApplication::qpeDir() + "sounds/";
97
98 QString result;
99 if ( QFile( (result = picsPath + name + ".wav") ).exists() )
100 return result;
101
102 return QString();
103}
104
105/*!
106 Returns a list of all sound names.
107*/
108QStringList Resource::allSounds()
109{
110 QDir resourcedir( QPEApplication::qpeDir() + "sounds/", "*.wav" );
111 QStringList entries = resourcedir.entryList();
112 QStringList result;
113 for (QStringList::Iterator i=entries.begin(); i != entries.end(); ++i)
114 result.append((*i).replace(QRegExp("\\.wav"),""));
115 return result;
116}
117
118/*!
119 Returns the QImage named \a name. You should avoid including
120 any filename type extension (eg. .png, .xpm).
121*/
122QImage Resource::loadImage( const QString &name)
123{
124 QImage img = qembed_findImage(name.latin1());
125 if ( img.isNull() )
126 return QImage(findPixmap(name));
127 return img;
128}
129
130/*!
131 \fn QIconSet Resource::loadIconSet( const QString &name )
132
133 Returns a QIconSet for the pixmap named \a name. A disabled icon is
134 generated that conforms to the Qtopia look & feel. You should avoid
135 including any filename type extension (eg. .png, .xpm).
136*/
diff --git a/noncore/unsupported/mailit/resource.h b/noncore/unsupported/mailit/resource.h
deleted file mode 100644
index 982c58a..0000000
--- a/noncore/unsupported/mailit/resource.h
+++ b/dev/null
@@ -1,80 +0,0 @@
1/**********************************************************************
2** Copyright (C) 2000 Trolltech AS. All rights reserved.
3**
4** This file is part of Qtopia Environment.
5**
6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file.
10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15**
16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you.
18**
19**********************************************************************/
20#ifndef PIXMAPLOADER_H
21#define PIXMAPLOADER_H
22
23#include <qimage.h>
24#include <qbitmap.h>
25#include <qiconset.h>
26#include <qstringlist.h>
27
28class Resource
29{
30public:
31 Resource() {}
32
33 static QImage loadImage( const QString &name);
34
35 static QPixmap loadPixmap( const QString &name );
36 static QBitmap loadBitmap( const QString &name );
37 static QString findPixmap( const QString &name );
38
39 static QIconSet loadIconSet( const QString &name );
40
41 static QString findSound( const QString &name );
42 static QStringList allSounds();
43};
44
45// Inline for compatibility with SHARP ROMs
46inline QIconSet Resource::loadIconSet( const QString &pix )
47{
48 QImage img = loadImage( pix );
49 QPixmap pm;
50 pm.convertFromImage( img );
51 QIconSet is( pm );
52 QIconSet::Size size = pm.width() <= 22 ? QIconSet::Small : QIconSet::Large;
53
54 QPixmap dpm = loadPixmap( pix + "_disabled" );
55
56 #ifndef QT_NO_DEPTH_32// have alpha-blended pixmaps
57 if ( dpm.isNull() ) {
58 QImage dimg( img.width(), img.height(), 32 );
59 for ( int y = 0; y < img.height(); y++ ) {
60 for ( int x = 0; x < img.width(); x++ ) {
61 QRgb p = img.pixel( x, y );
62 uint a = (p & 0xff000000) / 3;
63 p = (p & 0x00ffffff) | (a & 0xff000000);
64 dimg.setPixel( x, y, p );
65 }
66 }
67
68 dimg.setAlphaBuffer( TRUE );
69 dpm.convertFromImage( dimg );
70 }
71#endif
72
73 if ( !dpm.isNull() )
74 is.setPixmap( dpm, size, QIconSet::Disabled );
75
76 return is;
77}
78
79
80#endif
diff --git a/noncore/unsupported/mailit/smtpclient.cpp b/noncore/unsupported/mailit/smtpclient.cpp
index 5b5ef52..51ca50b 100644
--- a/noncore/unsupported/mailit/smtpclient.cpp
+++ b/noncore/unsupported/mailit/smtpclient.cpp
@@ -59,112 +59,112 @@ void SmtpClient::addMail(const QString &from, const QString &subject, const QStr
59 59
60 mail->from = from; 60 mail->from = from;
61 mail->subject = subject; 61 mail->subject = subject;
62 mail->to = to; 62 mail->to = to;
63 mail->body = body; 63 mail->body = body;
64 64
65 mailList.append(mail); 65 mailList.append(mail);
66} 66}
67 67
68void SmtpClient::connectionEstablished() 68void SmtpClient::connectionEstablished()
69{ 69{
70 emit updateStatus(tr("Connection established")); 70 emit updateStatus(tr("Connection established"));
71 71
72} 72}
73 73
74void SmtpClient::errorHandling(int status) 74void SmtpClient::errorHandling(int status)
75{ 75{
76 errorHandlingWithMsg( status, QString::null ); 76 errorHandlingWithMsg( status, QString::null );
77} 77}
78 78
79void SmtpClient::errorHandlingWithMsg(int status, const QString & EMsg ) 79void SmtpClient::errorHandlingWithMsg(int status, const QString & EMsg )
80{ 80{
81 emit errorOccurred(status, EMsg ); 81 emit errorOccurred(status, EMsg );
82 socket->close(); 82 socket->close();
83 mailList.clear(); 83 mailList.clear();
84 sending = FALSE; 84 sending = FALSE;
85} 85}
86 86
87void SmtpClient::incomingData() 87void SmtpClient::incomingData()
88{ 88{
89 QString response; 89 QString response;
90 90
91 if (!socket->canReadLine()) 91 if (!socket->canReadLine())
92 return; 92 return;
93 93
94 response = socket->readLine(); 94 response = socket->readLine();
95 switch(status) { 95 switch(status) {
96 case Init: { 96 case Init: {
97 if (response[0] == '2') { 97 if (response[0] == '2') {
98 status = From; 98 status = From;
99 mailPtr = mailList.first(); 99 mailPtr = mailList.first();
100 *stream << "HELO there\r\n"; 100 *stream << "HELO there\r\n";
101 } else errorHandlingWithMsg(ErrUnknownResponse,response); 101 } else errorHandlingWithMsg(ErrUnknownResponse,response);
102 break; 102 break;
103 } 103 }
104 case From: { 104 case From: {
105 if (response[0] == '2') { 105 if (response[0] == '2') {
106 qDebug(mailPtr->from); 106 qDebug(mailPtr->from);
107 *stream << "MAIL FROM: <" << mailPtr->from << ">\r\n"; 107 *stream << "MAIL FROM: " << mailPtr->from << "\r\n";
108 status = Recv; 108 status = Recv;
109 } else errorHandlingWithMsg(ErrUnknownResponse, response ); 109 } else errorHandlingWithMsg(ErrUnknownResponse, response );
110 break; 110 break;
111 } 111 }
112 case Recv: { 112 case Recv: {
113 if (response[0] == '2') { 113 if (response[0] == '2') {
114 it = mailPtr->to.begin(); 114 it = mailPtr->to.begin();
115 if (it == NULL) { 115 if (it == NULL) {
116 errorHandlingWithMsg(ErrUnknownResponse,response); 116 errorHandlingWithMsg(ErrUnknownResponse,response);
117 } 117 }
118 *stream << "RCPT TO: <" << *it << ">\r\n"; 118 *stream << "RCPT TO: " << *it << "\r\n";
119 status = MRcv; 119 status = MRcv;
120 } else errorHandlingWithMsg(ErrUnknownResponse,response); 120 } else errorHandlingWithMsg(ErrUnknownResponse,response);
121 break; 121 break;
122 } 122 }
123 case MRcv: { 123 case MRcv: {
124 if (response[0] == '2') { 124 if (response[0] == '2') {
125 it++; 125 it++;
126 if ( it != mailPtr->to.end() ) { 126 if ( it != mailPtr->to.end() ) {
127 *stream << "RCPT TO: <" << *it << ">\r\n"; 127 *stream << "RCPT TO: " << *it << "\r\n";
128 break; 128 break;
129 } else { 129 } else {
130 status = Data; 130 status = Data;
131 } 131 }
132 } else errorHandlingWithMsg(ErrUnknownResponse,response); 132 } else errorHandlingWithMsg(ErrUnknownResponse,response);
133 } 133 }
134 case Data: { 134 case Data: {
135 if (response[0] == '2') { 135 if (response[0] == '2') {
136 *stream << "DATA\r\n"; 136 *stream << "DATA\r\n";
137 status = Body; 137 status = Body;
138 emit updateStatus(tr("Sending: ") + mailPtr->subject); 138 emit updateStatus(tr("Sending: ") + mailPtr->subject);
139 139
140 } else errorHandlingWithMsg(ErrUnknownResponse,response); 140 } else errorHandlingWithMsg(ErrUnknownResponse,response);
141 break; 141 break;
142 } 142 }
143 case Body: { 143 case Body: {
144 if (response[0] == '3') { 144 if (response[0] == '3') {
145 *stream << mailPtr->body << "\r\n.\r\n"; 145 *stream << mailPtr->body << "\r\n.\r\n";
146 mailPtr = mailList.next(); 146 mailPtr = mailList.next();
147 if (mailPtr != NULL) { 147 if (mailPtr != NULL) {
148 status = From; 148 status = From;
149 } else { 149 } else {
150 status = Quit; 150 status = Quit;
151 } 151 }
152 } else errorHandlingWithMsg(ErrUnknownResponse,response); 152 } else errorHandlingWithMsg(ErrUnknownResponse,response);
153 break; 153 break;
154 } 154 }
155 case Quit: { 155 case Quit: {
156 if (response[0] == '2') { 156 if (response[0] == '2') {
157 *stream << "QUIT\r\n"; 157 *stream << "QUIT\r\n";
158 status = Done; 158 status = Done;
159 QString temp; 159 QString temp;
160 temp.setNum(mailList.count()); 160 temp.setNum(mailList.count());
161 emit updateStatus(tr("Sent ") + temp + tr(" messages")); 161 emit updateStatus(tr("Sent ") + temp + tr(" messages"));
162 emit mailSent(); 162 emit mailSent();
163 mailList.clear(); 163 mailList.clear();
164 sending = FALSE; 164 sending = FALSE;
165 socket->close(); 165 socket->close();
166 } else errorHandlingWithMsg(ErrUnknownResponse,response); 166 } else errorHandlingWithMsg(ErrUnknownResponse,response);
167 break; 167 break;
168 } 168 }
169 } 169 }
170} 170}
diff --git a/noncore/unsupported/mailit/viewatt.cpp b/noncore/unsupported/mailit/viewatt.cpp
index 293e137..3515ba5 100644
--- a/noncore/unsupported/mailit/viewatt.cpp
+++ b/noncore/unsupported/mailit/viewatt.cpp
@@ -1,121 +1,121 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2001 Trolltech AS. All rights reserved. 2** Copyright (C) 2001 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of Qt Palmtop Environment. 4** This file is part of Qt Palmtop Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20#include "resource.h" 20#include <qpe/resource.h>
21#include "viewatt.h" 21#include "viewatt.h"
22#include <qwhatsthis.h> 22#include <qwhatsthis.h>
23#include <qpe/applnk.h> 23#include <qpe/applnk.h>
24#include <qpe/mimetype.h> 24#include <qpe/mimetype.h>
25 25
26ViewAtt::ViewAtt(QWidget *parent, const char *name, WFlags f) 26ViewAtt::ViewAtt(QWidget *parent, const char *name, WFlags f)
27 : QMainWindow(parent, name, f) 27 : QMainWindow(parent, name, f)
28{ 28{
29 setCaption(tr("Exploring attatchments")); 29 setCaption(tr("Exploring attatchments"));
30 30
31 setToolBarsMovable( FALSE ); 31 setToolBarsMovable( FALSE );
32 bar = new QToolBar(this); 32 bar = new QToolBar(this);
33 installButton = new QAction( tr( "Install" ), Resource::loadPixmap( "exec" ), QString::null, CTRL + Key_C, this, 0 ); 33 installButton = new QAction( tr( "Install" ), Resource::loadPixmap( "exec" ), QString::null, CTRL + Key_C, this, 0 );
34 connect(installButton, SIGNAL(activated()), this, SLOT(install()) ); 34 connect(installButton, SIGNAL(activated()), this, SLOT(install()) );
35 installButton->setWhatsThis(tr("Click here to install the attachment to your Documents")); 35 installButton->setWhatsThis(tr("Click here to install the attachment to your Documents"));
36 36
37 listView = new QListView(this, "AttView"); 37 listView = new QListView(this, "AttView");
38 listView->addColumn( tr("Attatchment") ); 38 listView->addColumn( tr("Attatchment") );
39 listView->addColumn( tr("Type") ); 39 listView->addColumn( tr("Type") );
40 listView->addColumn( tr("Installed") ); 40 listView->addColumn( tr("Installed") );
41 setCentralWidget(listView); 41 setCentralWidget(listView);
42 QWhatsThis::add(listView,QWidget::tr("This is an overview about all attachments in the mail")); 42 QWhatsThis::add(listView,QWidget::tr("This is an overview about all attachments in the mail"));
43} 43}
44 44
45void ViewAtt::update(Email *mailIn, bool inbox) 45void ViewAtt::update(Email *mailIn, bool inbox)
46{ 46{
47 QListViewItem *item; 47 QListViewItem *item;
48 Enclosure *ePtr; 48 Enclosure *ePtr;
49
50 49
51 50
51
52 listView->clear(); 52 listView->clear();
53 if (inbox) { 53 if (inbox) {
54 bar->clear(); 54 bar->clear();
55 installButton->addTo( bar ); 55 installButton->addTo( bar );
56 bar->show(); 56 bar->show();
57 } else { 57 } else {
58 bar->hide(); 58 bar->hide();
59 } 59 }
60 60
61 mail = mailIn; 61 mail = mailIn;
62 for ( ePtr=mail->files.first(); ePtr != 0; ePtr=mail->files.next() ) { 62 for ( ePtr=mail->files.first(); ePtr != 0; ePtr=mail->files.next() ) {
63 63
64 QString isInstalled = tr("No"); 64 QString isInstalled = tr("No");
65 if (ePtr->installed) 65 if (ePtr->installed)
66 isInstalled = tr("Yes"); 66 isInstalled = tr("Yes");
67 item = new QListViewItem(listView, ePtr->originalName, ePtr->contentType, isInstalled); 67 item = new QListViewItem(listView, ePtr->originalName, ePtr->contentType, isInstalled);
68 68
69 const QString& mtypeDef=(const QString&) ePtr->contentType+"/"+ePtr->contentAttribute; 69 const QString& mtypeDef=(const QString&) ePtr->contentType+"/"+ePtr->contentAttribute;
70 70
71 MimeType mt(mtypeDef); 71 MimeType mt(mtypeDef);
72 72
73 item->setPixmap(0, mt.pixmap()); 73 item->setPixmap(0, mt.pixmap());
74 74
75 /* 75 /*
76 if (ePtr->contentType == "TEXT") { 76 if (ePtr->contentType == "TEXT") {
77 actions = new QAction( tr("View"), Resource::loadPixmap("TextEditor"), QString::null, CTRL + Key_C, this, 0); 77 actions = new QAction( tr("View"), Resource::loadPixmap("TextEditor"), QString::null, CTRL + Key_C, this, 0);
78 actions->addTo(bar); 78 actions->addTo(bar);
79 } 79 }
80 if (ePtr->contentType == "AUDIO") { 80 if (ePtr->contentType == "AUDIO") {
81 actions = new QAction( tr("Play"), Resource::loadPixmap("SoundPlayer"), QString::null, CTRL + Key_C, this, 0); 81 actions = new QAction( tr("Play"), Resource::loadPixmap("SoundPlayer"), QString::null, CTRL + Key_C, this, 0);
82 actions->addTo(bar); 82 actions->addTo(bar);
83 item->setPixmap(0, Resource::loadPixmap("play")); 83 item->setPixmap(0, Resource::loadPixmap("play"));
84 } 84 }
85 if (ePtr->contentType == "IMAGE") { 85 if (ePtr->contentType == "IMAGE") {
86 actions = new QAction( tr("Show"), Resource::loadPixmap("pixmap"), QString::null, CTRL + Key_C, this, 0); 86 actions = new QAction( tr("Show"), Resource::loadPixmap("pixmap"), QString::null, CTRL + Key_C, this, 0);
87 actions->addTo(bar); 87 actions->addTo(bar);
88 item->setPixmap(0, Resource::loadPixmap("pixmap")); 88 item->setPixmap(0, Resource::loadPixmap("pixmap"));
89 }*/ 89 }*/
90 } 90 }
91} 91}
92 92
93void ViewAtt::install() 93void ViewAtt::install()
94{ 94{
95 Enclosure *ePtr, *selPtr; 95 Enclosure *ePtr, *selPtr;
96 QListViewItem *item; 96 QListViewItem *item;
97 QString filename; 97 QString filename;
98 DocLnk d; 98 DocLnk d;
99 99
100 item = listView->selectedItem(); 100 item = listView->selectedItem();
101 if (item != NULL) { 101 if (item != NULL) {
102 filename = item->text(0); 102 filename = item->text(0);
103 selPtr = NULL; 103 selPtr = NULL;
104 for ( ePtr=mail->files.first(); ePtr != 0; ePtr=mail->files.next() ) { 104 for ( ePtr=mail->files.first(); ePtr != 0; ePtr=mail->files.next() ) {
105 if (ePtr->originalName == filename) 105 if (ePtr->originalName == filename)
106 selPtr = ePtr; 106 selPtr = ePtr;
107 } 107 }
108 108
109 if (selPtr == NULL) { 109 if (selPtr == NULL) {
110 qWarning("Internal error, file is not installed to documents"); 110 qWarning("Internal error, file is not installed to documents");
111 return; 111 return;
112 } 112 }
113 113
114 d.setName(selPtr->originalName); 114 d.setName(selPtr->originalName);
115 d.setFile(selPtr->path + selPtr->name); 115 d.setFile(selPtr->path + selPtr->name);
116 d.setType(selPtr->contentType + "/" + selPtr->contentAttribute); 116 d.setType(selPtr->contentType + "/" + selPtr->contentAttribute);
117 d.writeLink(); 117 d.writeLink();
118 selPtr->installed = TRUE; 118 selPtr->installed = TRUE;
119 item->setText(2, tr("Yes")); 119 item->setText(2, tr("Yes"));
120 } 120 }
121} 121}