summaryrefslogtreecommitdiff
path: root/noncore/apps/opie-gutenbrowser/NetworkDialog.cpp
Unidiff
Diffstat (limited to 'noncore/apps/opie-gutenbrowser/NetworkDialog.cpp') (more/less context) (show whitespace changes)
-rw-r--r--noncore/apps/opie-gutenbrowser/NetworkDialog.cpp329
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>
14extern "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
33QProgressBar* ProgressBar1;
34QPushButton* buttonCancel;
35static netbuf *conn = NULL;
36
37static 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
48NetworkDialog::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
77NetworkDialog::~NetworkDialog() {
78}
79
80void 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
128void 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
151void NetworkDialog::connectionTimeSlot() {
152// qDebug("Connections timed out");
153// ftpQuit();
154// qApp->processEvents();
155// repaint();
156// reject();
157}
158
159
160/*
161downloads the file networkUrl */
162bool 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
304void 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}