author | llornkcor <llornkcor> | 2004-04-07 13:07:42 (UTC) |
---|---|---|
committer | llornkcor <llornkcor> | 2004-04-07 13:07:42 (UTC) |
commit | fc42c7317c956e5bc6e74bfbb1ec185d2faa79f4 (patch) (unidiff) | |
tree | 703e89c7178f764aab25028d4525f74340b28dcb /noncore/apps/opie-gutenbrowser/NetworkDialog.cpp | |
parent | 9e1ecade17a77c3d50aecc4c92091d852e99e8d9 (diff) | |
download | opie-fc42c7317c956e5bc6e74bfbb1ec185d2faa79f4.zip opie-fc42c7317c956e5bc6e74bfbb1ec185d2faa79f4.tar.gz opie-fc42c7317c956e5bc6e74bfbb1ec185d2faa79f4.tar.bz2 |
add gutenbrowser
Diffstat (limited to 'noncore/apps/opie-gutenbrowser/NetworkDialog.cpp') (more/less context) (show whitespace changes)
-rw-r--r-- | noncore/apps/opie-gutenbrowser/NetworkDialog.cpp | 329 |
1 files changed, 329 insertions, 0 deletions
diff --git a/noncore/apps/opie-gutenbrowser/NetworkDialog.cpp b/noncore/apps/opie-gutenbrowser/NetworkDialog.cpp new file mode 100644 index 0000000..e8ade87 --- a/dev/null +++ b/noncore/apps/opie-gutenbrowser/NetworkDialog.cpp | |||
@@ -0,0 +1,329 @@ | |||
1 | // /*************************************************************************** | ||
2 | // NetworkDialog.cpp - description | ||
3 | // begin : Sun Aug 27 2000 | ||
4 | // copyright : (C) 2000 - 2004 by L.J. Potter | ||
5 | // email : ljp@llornkcor.com | ||
6 | // * This program is free software; you can redistribute it and/or modify * | ||
7 | // * it under the terms of the GNU General Public License as published by * | ||
8 | // * the Free Software Foundation; either version 2 of the License, or * | ||
9 | // * (at your option) any later version. * | ||
10 | // ***************************************************************************/ | ||
11 | // // half-assed attempt at providing a network dialog. | ||
12 | // /* Created: Sun Aug 27 15:24:52 2000*/ | ||
13 | #include <unistd.h> | ||
14 | extern "C" { | ||
15 | #include "../../net/ftplib/ftplib.h" | ||
16 | } | ||
17 | |||
18 | |||
19 | #include "NetworkDialog.h" | ||
20 | #include "gutenbrowser.h" | ||
21 | |||
22 | #include <qprogressbar.h> | ||
23 | #include <qstringlist.h> | ||
24 | #include <qpe/config.h> | ||
25 | #include <qvaluelist.h> | ||
26 | #include <qapplication.h> | ||
27 | #include <qfile.h> | ||
28 | #include <qstringlist.h> | ||
29 | #include <qlabel.h> | ||
30 | #include <qpushbutton.h> | ||
31 | #include <qlayout.h> | ||
32 | |||
33 | QProgressBar* ProgressBar1; | ||
34 | QPushButton* buttonCancel; | ||
35 | static netbuf *conn = NULL; | ||
36 | |||
37 | static int log_progress(netbuf *ctl, int xfered, void *arg) { | ||
38 | int fsz = *(int *)arg; | ||
39 | int pct = (xfered * 100) / fsz; | ||
40 | printf("%3d%%\r", pct); | ||
41 | fflush(stdout); | ||
42 | ProgressBar1->setProgress(xfered); | ||
43 | qApp->processEvents(); | ||
44 | |||
45 | return 1; | ||
46 | } | ||
47 | |||
48 | NetworkDialog::NetworkDialog( QWidget* parent, const char* name, bool modal, WFlags fl, const QStringList netL) | ||
49 | : QDialog( parent, name, modal, fl ) | ||
50 | { | ||
51 | |||
52 | ftp_host = netL[0]; | ||
53 | networkUrl = strUrl = netL[0]; | ||
54 | |||
55 | dir = ftp_base_dir = netL[1]; | ||
56 | localFileName = netL[2]; | ||
57 | s_partialFileName = netL[3]; | ||
58 | |||
59 | resize(240,110); | ||
60 | |||
61 | local_library = (QDir::homeDirPath ()) +"/Applications/gutenbrowser/"; | ||
62 | // autoOk = autoDownload; | ||
63 | // if( networkUrl.find("ftp",0,false)== -1 ) { | ||
64 | // if ( !name ) | ||
65 | // setName( "HTTP NetworkDialog" ); | ||
66 | // setCaption( tr( "HTTP Download ) ); | ||
67 | // qInitNetworkProtocols(); // registers ftp protocol // for now | ||
68 | // QNetworkProtocol::registerNetworkProtocol( "http", new QNetworkProtocolFactory<Http> ); | ||
69 | // } else { | ||
70 | if ( !name ) | ||
71 | setName( "FTP NetworkDialog" ); | ||
72 | setCaption(tr("FTP Download")); | ||
73 | // } | ||
74 | initDialog(); //opens file to be written | ||
75 | } | ||
76 | |||
77 | NetworkDialog::~NetworkDialog() { | ||
78 | } | ||
79 | |||
80 | void NetworkDialog::initDialog() { | ||
81 | |||
82 | totalBytesDownloaded=0; | ||
83 | warnLabel = new QLabel( this, "TextLabel" ); | ||
84 | warnLabel ->setText( tr( "Push Ok to download file...." ) ); | ||
85 | TextLabel3 = new QLabel( this, "TextLabel3" ); | ||
86 | TextLabel3->setText( ""); | ||
87 | QWidget* Layout1 = new QWidget( this, "Layout1" ); | ||
88 | |||
89 | hbox = new QHBoxLayout(Layout1); | ||
90 | hbox->setMargin(4); | ||
91 | |||
92 | ProgressBar1 = new QProgressBar( Layout1, "ProgressBar1" ); | ||
93 | ProgressBar1->setProgress(0); | ||
94 | hbox->addWidget(ProgressBar1,10,AlignCenter); | ||
95 | |||
96 | hbox->addStretch(1); | ||
97 | buttonOk = new QPushButton( Layout1, "buttonOk" ); | ||
98 | buttonOk->setText( tr( "&OK" ) ); | ||
99 | hbox->addWidget(buttonOk,0,AlignRight); | ||
100 | hbox->addSpacing(5); | ||
101 | buttonCancel = new QPushButton( Layout1, "buttonCancel" ); | ||
102 | buttonCancel->setText( tr( "&Cancel" ) ); | ||
103 | buttonCancel->setAutoDefault( TRUE ); | ||
104 | buttonCancel->setDefault( TRUE ); | ||
105 | hbox->addWidget(buttonCancel,0,AlignRight); | ||
106 | |||
107 | ProgressBar1->setFixedSize(140,22); | ||
108 | buttonOk->setFixedSize(35,22); | ||
109 | buttonCancel->setFixedSize(35,22); | ||
110 | warnLabel ->setGeometry( QRect( 5,1,230,25)); | ||
111 | TextLabel3->setGeometry( QRect( 5,20,230,25)); | ||
112 | Layout1->setGeometry( QRect(1,60,235,50)); //TODO check these!! | ||
113 | |||
114 | // timer= new QTimer(this,"vu timer"); | ||
115 | // connectionTimer=new QTimer(this,"connectionTimeout"); | ||
116 | |||
117 | connect(buttonOk,SIGNAL(clicked()),this,SLOT(doOk())); | ||
118 | connect(buttonCancel,SIGNAL(clicked()),this,SLOT(reject())); | ||
119 | // connect( timer, SIGNAL(timeout()), this , SLOT(timeSlot())); | ||
120 | // connect( connectionTimer,SIGNAL( timeout()),this,SLOT( connectionTimeSlot())); | ||
121 | if(autoOk) { | ||
122 | qWarning("XXXXXXXXXXXXXXXXXXXXXXXX"); | ||
123 | buttonOk->setDown(true); | ||
124 | doOk(); | ||
125 | } | ||
126 | } | ||
127 | |||
128 | void NetworkDialog::timeSlot() { | ||
129 | |||
130 | // if(timerProgess < 19 && posTimer) { | ||
131 | // ProgressBar1->setProgress(timerProgess); | ||
132 | // timerProgess++; | ||
133 | // } else if(timerProgess > 19 && posTimer) { | ||
134 | // ProgressBar1->setProgress(timerProgess); | ||
135 | // timerProgess++; | ||
136 | // posTimer=FALSE; | ||
137 | // } | ||
138 | // if(timerProgess > 1 &&!posTimer) { | ||
139 | // ProgressBar1->setProgress(timerProgess); | ||
140 | // timerProgess--; | ||
141 | // } else if(timerProgess > 1 &&!posTimer){ | ||
142 | // ProgressBar1->setProgress(timerProgess); | ||
143 | // timerProgess--; | ||
144 | // posTimer=TRUE; | ||
145 | // } | ||
146 | // // qDebug("timer event"); | ||
147 | // qApp->processEvents(); | ||
148 | // repaint(); | ||
149 | } | ||
150 | |||
151 | void NetworkDialog::connectionTimeSlot() { | ||
152 | // qDebug("Connections timed out"); | ||
153 | // ftpQuit(); | ||
154 | // qApp->processEvents(); | ||
155 | // repaint(); | ||
156 | // reject(); | ||
157 | } | ||
158 | |||
159 | |||
160 | /* | ||
161 | downloads the file networkUrl */ | ||
162 | bool NetworkDialog::downloadFile( QString networkUrl ) | ||
163 | { | ||
164 | int fsz; | ||
165 | // timer->start( 250 , FALSE); | ||
166 | // posTimer=TRUE; | ||
167 | // connectionTimer->start( 600 , FALSE); | ||
168 | warnLabel ->setText( ""); | ||
169 | qApp->processEvents(); | ||
170 | qDebug("Downloading: %s",networkUrl.latin1()); | ||
171 | qDebug("Into: %s",localFileName.latin1()); | ||
172 | if( networkUrl.length() > 5) { | ||
173 | QString ftp_user = "anonymous"; | ||
174 | QString ftp_pass = "zaurus@gutenbrowser.com"; | ||
175 | // ftp_host= networkUrl.mid(networkUrl.find("ftp://",0, TRUE), | ||
176 | if(ftp_host.length() < 2) { | ||
177 | qDebug("Please select an ftp host" ); | ||
178 | successDownload=false; | ||
179 | QMessageBox::message("Note","You need to select an ftp host"); | ||
180 | return false; | ||
181 | } | ||
182 | QString msg; | ||
183 | qDebug(ftp_host); | ||
184 | qDebug("Opening ftp connection."); | ||
185 | warnLabel->setText("connecting to: "+ftp_host ); | ||
186 | qApp->processEvents(); | ||
187 | /////////// Open FTP connection | ||
188 | if (!FtpConnect( ftp_host.latin1(), &conn)) { | ||
189 | i=0; | ||
190 | successDownload=false; | ||
191 | QMessageBox::message("Note","Unable to connect to\n"+ftp_host); | ||
192 | return false; | ||
193 | } | ||
194 | TextLabel3->setText("Opening ftp connection."); | ||
195 | qApp->processEvents(); | ||
196 | if (!FtpLogin( ftp_user.latin1(), ftp_pass.latin1(),conn )) { | ||
197 | FtpQuit(conn); | ||
198 | successDownload=false; | ||
199 | msg.sprintf("Unable to log in\n%s",FtpLastResponse(conn)); | ||
200 | QMessageBox::message("Note",msg); | ||
201 | return false; | ||
202 | } | ||
203 | qDebug("Changing directories."); | ||
204 | TextLabel3->setText("Changing directories."); | ||
205 | qApp->processEvents(); | ||
206 | if (!FtpChdir( dir.latin1(), conn )) { | ||
207 | successDownload=false; | ||
208 | msg.sprintf("Unable to change directories "+dir+"\n%s",FtpLastResponse(conn)); | ||
209 | QMessageBox::message("Note",msg); | ||
210 | FtpQuit(conn); | ||
211 | return false; | ||
212 | } | ||
213 | // if (!FtpNlst( "./.guten_temp", dir, conn)) { | ||
214 | // successDownload=false; | ||
215 | // msg.sprintf("Unable to change directories "+dir+"\n%s",FtpLastResponse(conn)); | ||
216 | // QMessageBox::message("Note",msg); | ||
217 | // FtpQuit(conn); | ||
218 | // return false; | ||
219 | // } | ||
220 | qDebug("Requesting directory list."); | ||
221 | TextLabel3->setText("Getting directory list."); | ||
222 | qApp->processEvents(); | ||
223 | if (!FtpDir( "./.guten_temp", dir.latin1(), conn) ) { | ||
224 | msg.sprintf("Unable to list the directory\n"+dir+"\n%s",FtpLastResponse(conn)); | ||
225 | QMessageBox::message("Note",msg); | ||
226 | successDownload=false; | ||
227 | FtpQuit(conn); | ||
228 | return false; | ||
229 | } | ||
230 | QFile tmp("./.guten_temp"); | ||
231 | QString s, File_Name; | ||
232 | |||
233 | if (tmp.open(IO_ReadOnly)) { | ||
234 | QTextStream t( &tmp ); // use a text stream | ||
235 | qDebug("Finding partial filename "+s_partialFileName); | ||
236 | while ( !t.eof()) { | ||
237 | s = t.readLine(); | ||
238 | |||
239 | if (s.contains(s_partialFileName, FALSE)) { | ||
240 | QString str = s.right( (s.length()) - (s.find(s_partialFileName, FALSE)) ); | ||
241 | |||
242 | if (str.contains(".txt")) { | ||
243 | File_Name = str; | ||
244 | qDebug("Found file_name "+ File_Name); | ||
245 | break; | ||
246 | } | ||
247 | // if (str.contains(".zip")) { | ||
248 | // File_Name = str; | ||
249 | // qDebug("Found file_name "+ File_Name); | ||
250 | // break; | ||
251 | // } | ||
252 | |||
253 | } | ||
254 | } //end of while loop | ||
255 | tmp.close(); | ||
256 | // tmp.remove(); ///TODO this is for release version Zaurus | ||
257 | } | ||
258 | else | ||
259 | qDebug("Error opening temp file."); | ||
260 | |||
261 | Config cfg("Gutenbrowser"); | ||
262 | cfg.setGroup("General"); | ||
263 | QString temp=cfg.readEntry("DownloadDirectory",local_library); | ||
264 | |||
265 | localFileName = temp+File_Name; | ||
266 | qDebug("Requesting file "+ File_Name); | ||
267 | qDebug( "Saving as "+localFileName); | ||
268 | msg="Requesting file "+ File_Name; | ||
269 | TextLabel3->setText(msg); | ||
270 | qApp->processEvents(); | ||
271 | if( File_Name.length()>3) { | ||
272 | if (!FtpSize( File_Name.latin1(), &fsz, FTPLIB_ASCII, conn)) | ||
273 | fsz = 0; | ||
274 | QString temp; | ||
275 | temp.sprintf( File_Name+" "+" %dkb", fsz); | ||
276 | TextLabel3->setText(temp); | ||
277 | |||
278 | ProgressBar1->setTotalSteps(fsz); | ||
279 | FtpOptions(FTPLIB_CALLBACK, (long) log_progress, conn); | ||
280 | FtpOptions(FTPLIB_IDLETIME, (long) 1000, conn); | ||
281 | FtpOptions(FTPLIB_CALLBACKARG, (long) &fsz, conn); | ||
282 | FtpOptions(FTPLIB_CALLBACKBYTES, (long) fsz/10, conn); | ||
283 | |||
284 | if (!FtpGet( localFileName.latin1(), File_Name.latin1(), FTPLIB_ASCII, conn)) { | ||
285 | msg.sprintf("Could not download "+ File_Name+"\n%s",FtpLastResponse(conn)); | ||
286 | successDownload=false; | ||
287 | QMessageBox::message("Note",msg); | ||
288 | update(); | ||
289 | } | ||
290 | } else { | ||
291 | QMessageBox::message("Note","Could not download file "+ File_Name); | ||
292 | successDownload=false; | ||
293 | FtpQuit(conn); | ||
294 | return false; | ||
295 | } | ||
296 | qDebug("Ftp session successful"); | ||
297 | successDownload=TRUE; | ||
298 | FtpQuit(conn); | ||
299 | return true; | ||
300 | } //no network url | ||
301 | return false; | ||
302 | } | ||
303 | |||
304 | void NetworkDialog::doOk() { | ||
305 | qWarning("Do OK"); | ||
306 | QString loginStr; | ||
307 | loginStr = "gutenbrowser"; | ||
308 | if ( !ftp_host.isEmpty() ) { | ||
309 | if( ftp_host.find( "/", ftp_host.length() - 1,TRUE) != -1 && ftp_host.find("ftp://",0, TRUE) != -1) { | ||
310 | TextLabel3->setText( tr( "List remote dir:\n" + ftp_host) ); | ||
311 | // TextLabel2->setText( tr( "local file to download into: " +localFileName ) ); | ||
312 | |||
313 | if( downloadFile(ftp_host)) | ||
314 | successDownload = true; | ||
315 | else { | ||
316 | successDownload = false; | ||
317 | reject(); | ||
318 | } | ||
319 | } else { | ||
320 | if(downloadFile(ftp_host)) | ||
321 | successDownload = true; | ||
322 | else { | ||
323 | successDownload = false; | ||
324 | reject(); | ||
325 | } | ||
326 | } | ||
327 | } | ||
328 | accept(); | ||
329 | } | ||