summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--noncore/net/ubrowser/httpfactory.cpp40
-rw-r--r--noncore/net/ubrowser/main.cpp4
-rw-r--r--noncore/net/ubrowser/mainview.cpp24
-rw-r--r--noncore/net/ubrowser/mainview.h2
4 files changed, 44 insertions, 26 deletions
diff --git a/noncore/net/ubrowser/httpfactory.cpp b/noncore/net/ubrowser/httpfactory.cpp
index 154d5d0..b57149f 100644
--- a/noncore/net/ubrowser/httpfactory.cpp
+++ b/noncore/net/ubrowser/httpfactory.cpp
@@ -18,156 +18,156 @@ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
HttpFactory::HttpFactory(QTextBrowser *newBrowser):QMimeSourceFactory()
{
// socket = new QSocket;
text = new QTextDrag;
browser=newBrowser;
// comm = new HttpComm(socket, browser);
image = new QImageDrag;
}
const QMimeSource * HttpFactory::data(const QString &abs_name) const
{
printf("HttpFactory::data: using absolute data func\n");
int port=80, addrEnd, portSep;
QString host, file, portS, name, tempString;
bool done=false, isText=true;
// comm->setUp((QString *)&abs_name);
name = abs_name;
// name = name.lower();
name = name.stripWhiteSpace();
- printf("%s\n", name.latin1());
+// printf("%s\n", name.latin1());
if(name.startsWith("http://"))
{
name = name.remove(0, 7);
}
else
{
name.prepend(browser->context());
name = name.remove(0, 7);
}
addrEnd = name.find('/');
if(addrEnd == -1)
{
name += '/';
addrEnd = name.length()-1;
}
host = name;
file = name;
host.truncate(addrEnd);
file.remove(0, addrEnd);
portSep = host.find(':');
if(portSep != -1)
{
portS=host;
host.truncate(portSep);
portS.remove(0, portSep+1);
port = portS.toInt();
}
- printf("%s %s %d\n", host.latin1(), file.latin1(), port);
+// printf("%s %s %d\n", host.latin1(), file.latin1(), port);
if(port == 80)
{
portS="80";
}
// if(file.find(".png", file.length()-4) != -1 || file.find(".gif", file.length()-4) != -1 || file.find(".jpg", file.length()-4) != -1)
// {
// isImage=true;
// }
// comm->setStuff(host, portS, file, text, image, isImage);
// socket->connectToHost(host, port);
int con, bytesSent;
struct sockaddr_in serverAddr;
struct hostent * serverInfo = gethostbyname( host.latin1() );
if( serverInfo == NULL )
{
QMessageBox *mb = new QMessageBox("Error!",
"couldnt find ip address",
QMessageBox::NoIcon,
QMessageBox::Ok,
QMessageBox::NoButton,
QMessageBox::NoButton);
mb->exec();
perror("HttpFactory::data:");
return 0;
}
QByteArray data;
- printf( "HttpFactory::data: %s\n", inet_ntoa(*((struct in_addr *)serverInfo->h_addr )) );
+// printf( "HttpFactory::data: %s\n", inet_ntoa(*((struct in_addr *)serverInfo->h_addr )) );
QString request("GET " + file + " HTTP/1.1\r\nHost: " + host + ':' + portS + "\r\nConnection: close\r\n\r\n");
con = socket( AF_INET, SOCK_STREAM, 0 );
if( con == -1 )
{
QMessageBox *mb = new QMessageBox("Error!",
"couldnt create socket",
QMessageBox::NoIcon,
QMessageBox::Ok,
QMessageBox::NoButton,
QMessageBox::NoButton);
mb->exec();
perror("HttpFactory::data:");
return 0;
}
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons( port );
serverAddr.sin_addr.s_addr = inet_addr( inet_ntoa(*((struct in_addr *)serverInfo->h_addr )) );
memset( &(serverAddr.sin_zero), '\0', 8 );
if(::connect( con, (struct sockaddr *)&serverAddr, sizeof(struct sockaddr)) == -1 )
{
QMessageBox *mb = new QMessageBox("Error!",
"couldnt connect to socket",
QMessageBox::NoIcon,
QMessageBox::Ok,
QMessageBox::NoButton,
QMessageBox::NoButton);
mb->exec();
perror("HttpFactory::data:");
return 0;
}
bytesSent = send( con, request.latin1(), request.length(), 0);
- printf("HttpFactory::data: bytes written: %d out of: %d\n", bytesSent, request.length() );
- printf("HttpFactory::data: request sent:\n%s", request.latin1());
+// printf("HttpFactory::data: bytes written: %d out of: %d\n", bytesSent, request.length() );
+// printf("HttpFactory::data: request sent:\n%s", request.latin1());
data = this->processResponse( con, isText );
::close( con );
if(isText)
{
text->setText( QString( data ) );
return text;
}
else
{
image->setImage( QImage( data ) );
return image;
}
}
const QMimeSource * HttpFactory::data(const QString &abs_or_rel_name, const QString & context) const
{
printf("HttpFactory::data: using relative data func\n");
if(abs_or_rel_name.startsWith(context))
{
return data(abs_or_rel_name);
@@ -195,182 +195,182 @@ const QByteArray HttpFactory::processResponse( int sockfd, bool &isText ) const
}
while( !done )
{
recv( sockfd, inputBin.data(), inputBin.size(), 0 );
currentLine += *(inputBin.data());
if( *(inputBin.data()) == '\n' )
{
if( currentLine.isEmpty() || currentLine.startsWith( "\r") )
{
printf( "HttpFactory::processResponse: end of header\n" );
if( chunked )
{
return recieveChunked( sockfd );
} else {
return recieveNormal( sockfd, dataLength );
}
done = true;
}
if( currentLine.contains( "Transfer-Encoding: chunked", false) >= 1 )
{
chunked = true;
- printf( "HttpFactory::processResponse: chunked encoding\n" );
+// printf( "HttpFactory::processResponse: chunked encoding\n" );
}
if( currentLine.contains( "Content-Type: text", false ) >= 1 )
{
isText = true;
- printf( "HttpFactory::processResponse: content type text\n" );
+// printf( "HttpFactory::processResponse: content type text\n" );
if( currentLine.contains( "html", false ) >= 1)
{
browser->setTextFormat(Qt::RichText);
- printf( "HttpFactory::processResponse: content type html\n" );
+// printf( "HttpFactory::processResponse: content type html\n" );
}
}
if( currentLine.contains( "Content-Type: image", false ) >= 1 )
{
isText = false;
- printf( "HttpFactory::processResponse: content type image\n" );
+// printf( "HttpFactory::processResponse: content type image\n" );
}
if( currentLine.contains( "Content-Length", false ) >= 1 )
{
currentLine.remove( 0, 16 );
dataLength = currentLine.toInt();
- printf( "HttpFactory::processResponse: content length: %d\n", dataLength );
+// printf( "HttpFactory::processResponse: content length: %d\n", dataLength );
}
if( currentLine.contains( "404", false ) >= 1 )
{
- printf( "HttpFactory::processResponse: 404 error\n" );
+// printf( "HttpFactory::processResponse: 404 error\n" );
return 0;
}
currentLine = "";
- printf("HttpFactory::processResponse: reseting currentLine: %s\n", currentLine.latin1() );
+// printf("HttpFactory::processResponse: reseting currentLine: %s\n", currentLine.latin1() );
}
}
}
const QByteArray HttpFactory::recieveNormal( int sockfd, int dataLen ) const
{
- printf( "HttpFactory::recieveNormal: recieving w/out chunked encoding\n" );
+// printf( "HttpFactory::recieveNormal: recieving w/out chunked encoding\n" );
QByteArray data( dataLen );
QByteArray temp( dataLen );
int recieved, i;
recieved = recv( sockfd, temp.data(), temp.size(), 0 );
// printf( "HttpFactory::recieveNormal: found some data: %s\n", (char *)temp.data() );
for( i = 0; i < recieved; i++ )
{
data[i] = temp[i];
}
dataLen -= recieved;
while( dataLen > 0 )
{
recieved = recv( sockfd, temp.data(), temp.size(), 0 );
dataLen -= recieved;
// printf( "HttpFactory::recieveNormal: found some more data: %s\n", (char *)temp.data() );
for( int j = 0; j < recieved; j++ )
{
data[i] = temp[j];
i++;
}
temp.fill('\0');
}
- printf( "HttpFactory::recieveNormal: end of data\n" );
+// printf( "HttpFactory::recieveNormal: end of data\n" );
return data;
}
const QByteArray HttpFactory::recieveChunked( int sockfd ) const
{
- printf( "HttpFactory::recieveChunked: recieving data with chunked encoding\n" );
+// printf( "HttpFactory::recieveChunked: recieving data with chunked encoding\n" );
QByteArray data;
QByteArray temp( 1 );
int recieved, i = 0, cSize = 0;
QString cSizeS;
// printf( "HttpFactory::recieveChunked: temp.size(): %d\n", temp.size() );
recv( sockfd, temp.data(), temp.size(), 0 );
while( *(temp.data()) != '\n' && *(temp.data()) != ';' )
{
// printf( "HttpFactory::recieveChunked: temp.size(): %d\n", temp.size() );
// printf( "HttpFactory::recieveChunked: temp.data(): %c\n", temp[0] );
cSizeS += temp[0];
recv( sockfd, temp.data(), temp.size(), 0 );
}
- printf( "HttpFactory::recieveChunked: cSizeS: %s\n", cSizeS.latin1() );
+// printf( "HttpFactory::recieveChunked: cSizeS: %s\n", cSizeS.latin1() );
cSize = cSizeS.toInt( 0, 16 );
- printf( "HttpFactory::recieveChunked: first chunk of size: %d\n", cSize );
+// printf( "HttpFactory::recieveChunked: first chunk of size: %d\n", cSize );
if( *(temp.data()) == ';' )
{
while( *(temp.data()) != '\n' )
{
recv( sockfd, temp.data(), temp.size(), 0 );
}
}
temp.fill( '\0', cSize );
data.fill( '\0', cSize );
while( cSize > 0 )
{
while( cSize > 0 )
{
recieved = recv( sockfd, temp.data(), temp.size(), 0 );
cSize -= recieved;
for( int j = 0; j < recieved; j++ )
{
data[i] = temp[j];
i++;
}
temp.fill('\0', cSize);
}
// printf( "HttpFactory::recieveChunked: current data:\n%s", data.data() );
temp.fill('\0', 1);
cSizeS = "";
cSize = 0;
recv( sockfd, temp.data(), temp.size(), 0 );
if( *(temp.data()) == '\r' )
{
recv( sockfd, temp.data(), temp.size(), 0 );
}
recv( sockfd, temp.data(), temp.size(), 0 );
while( *(temp.data()) != '\n' && *(temp.data()) != ';' )
{
// printf( "HttpFactory::recieveChunked: temp.size(): %d\n", temp.size() );
// printf( "HttpFactory::recieveChunked: temp.data(): %d\n", temp[0] );
cSizeS += temp[0];
recv( sockfd, temp.data(), temp.size(), 0 );
}
- printf( "HttpFactory::recieveChunked: cSizeS: %s\n", cSizeS.latin1() );
+// printf( "HttpFactory::recieveChunked: cSizeS: %s\n", cSizeS.latin1() );
cSize = cSizeS.toInt( 0, 16 );
- printf( "HttpFactory::recieveChunked: next chunk of size: %d\n", cSize );
+// printf( "HttpFactory::recieveChunked: next chunk of size: %d\n", cSize );
if( *(temp.data()) == ';' )
{
while( *(temp.data()) != '\n' )
{
recv( sockfd, temp.data(), temp.size(), 0 );
}
}
temp.fill( '\0', cSize );
data.resize( data.size() + cSize );
}
- printf( "HttpFactory::recieveChunked: end of data\n" );
+// printf( "HttpFactory::recieveChunked: end of data\n" );
return data;
}
diff --git a/noncore/net/ubrowser/main.cpp b/noncore/net/ubrowser/main.cpp
index fe0f243..e4a873d 100644
--- a/noncore/net/ubrowser/main.cpp
+++ b/noncore/net/ubrowser/main.cpp
@@ -2,28 +2,28 @@
Opie-uBrowser. a very small web browser, using on QTextBrowser for html display/parsing
Copyright (C) 2002 Thomas Stephens
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public
License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later
version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include <qpe/qpeapplication.h>
#include "mainview.h"
int main( int argc, char **argv )
{
QPEApplication a( argc, argv );
MainView w;
- a.setMainWidget( &w );
- w.showMaximized();
+// a.setMainWidget( &w );
+ a.showMainDocumentWidget( &w );
return a.exec();
}
diff --git a/noncore/net/ubrowser/mainview.cpp b/noncore/net/ubrowser/mainview.cpp
index d3f4c57..f68c5db 100644
--- a/noncore/net/ubrowser/mainview.cpp
+++ b/noncore/net/ubrowser/mainview.cpp
@@ -12,94 +12,110 @@ Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "mainview.h"
MainView::MainView(QWidget *parent, const char *name) : QMainWindow(parent, name)
{
setIcon( Resource::loadPixmap( "remote" ) );
setCaption("uBrowser");
setToolBarsMovable( false );
QPEToolBar *toolbar = new QPEToolBar(this, "toolbar");
back = new QToolButton(Resource::loadPixmap("ubrowser/back"), 0, 0, 0, 0, toolbar, "back");
forward = new QToolButton(Resource::loadPixmap("ubrowser/forward"), 0, 0, 0, 0, toolbar, "forward");
home = new QToolButton(Resource::loadPixmap("ubrowser/home"), 0, 0, 0, 0, toolbar, "home");
location = new QComboBox(true, toolbar, "location");
go = new QToolButton(Resource::loadPixmap("ubrowser/go"), 0, 0, 0, 0, toolbar, "go");
toolbar->setStretchableWidget(location);
toolbar->setHorizontalStretchable(true);
+ location->setAutoCompletion( true );
addToolBar(toolbar);
browser = new QTextBrowser(this, "browser");
setCentralWidget(browser);
//make the button take you to the location
connect(go, SIGNAL(clicked()), this, SLOT(goClicked()) );
connect(location->lineEdit(), SIGNAL(returnPressed()), this, SLOT(goClicked()) );
//make back, forward and home do their thing (isnt QTextBrowser great?)
connect(back, SIGNAL(clicked()), browser, SLOT(backward()) );
connect(forward, SIGNAL(clicked()), browser, SLOT(forward()) );
connect(home, SIGNAL(clicked()), browser, SLOT(home()) );
//make back and forward buttons be enabled, only when you can go back or forward (again, i love QTextBrowser)
//this doesnt seem to work, but doesnt break anything either...
connect(browser, SIGNAL(backwardAvailable(bool)), back, SLOT(setOn(bool)) );
connect(browser, SIGNAL(forwardAvailable(bool)), forward, SLOT(setOn(bool)) );
//notify me when the text of the browser has changed (like when the user clicks a link)
connect(browser, SIGNAL(textChanged()), this, SLOT(textChanged()) );
http = new HttpFactory(browser);
if( qApp->argc() > 1 )
{
char **argv = qApp->argv();
- QString *argv1 = new QString( argv[1] );
- if( !argv1->startsWith( "http://" ) && !argv1->startsWith( "/" ) )
+ int i = 0;
+ QString *openfile = new QString( argv[0] );
+ while( openfile->contains( "ubrowser" ) == 0 && i < qApp->argc() )
{
- argv1->insert( 0, QDir::currentDirPath()+"/" );
+ i++;
+ *openfile = argv[i];
}
- location->setEditText( *argv1 );
+ *openfile = argv[i+1];
+ if( !openfile->startsWith( "http://" ) && !openfile->startsWith( "/" ) )
+ {
+ openfile->insert( 0, QDir::currentDirPath()+"/" );
+ }
+ location->setEditText( *openfile );
goClicked();
}
}
void MainView::goClicked()
{
location->insertItem( location->currentText() );
if(location->currentText().startsWith("http://") )
{
location->setEditText(location->currentText().lower());
browser->setMimeSourceFactory(http);
printf("MainView::goClicked: using http source factory\n");
}
else
{
browser->setMimeSourceFactory(QMimeSourceFactory::defaultFactory());
printf("MainView::goClicked: using default source factory\n");
}
browser->setSource(location->currentText());
}
void MainView::textChanged()
{
if(browser->documentTitle().isNull())
{
setCaption(browser->source() + " - uBrowser");
}
else
{
setCaption(browser->documentTitle() + " - uBrowser");
}
location->setEditText(browser->source());
}
+
+void MainView::setDocument( const QString& applnk_filename )
+{
+ DocLnk *file = new DocLnk( applnk_filename );
+
+ location->setEditText( file->file() );
+ goClicked();
+}
diff --git a/noncore/net/ubrowser/mainview.h b/noncore/net/ubrowser/mainview.h
index 1a9b0db..20e2c70 100644
--- a/noncore/net/ubrowser/mainview.h
+++ b/noncore/net/ubrowser/mainview.h
@@ -1,50 +1,52 @@
/*
Opie-uBrowser. a very small web browser, using on QTextBrowser for html display/parsing
Copyright (C) 2002 Thomas Stephens
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public
License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later
version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include <qpe/resource.h>
#include <qpe/qpetoolbar.h>
+#include <qpe/applnk.h>
#include <qapplication.h>
#include <qmainwindow.h>
#include <qwidget.h>
#include <qtextbrowser.h>
#include <qtoolbutton.h>
#include <qcombobox.h>
#include <qlayout.h>
#include <qlineedit.h>
#include <qdir.h>
#include <stdio.h>
#include "httpfactory.h"
class MainView : public QMainWindow
{
Q_OBJECT
public:
MainView(QWidget *parent=0, const char *name=0);
public slots:
void goClicked();
void textChanged();
+ void setDocument( const QString& applnk_filename );
private:
QToolButton *back;
QToolButton *forward;
QToolButton *home;
QToolButton *go;
QComboBox *location;
QTextBrowser *browser;
HttpFactory *http;
};