summaryrefslogtreecommitdiff
authorar <ar>2004-05-02 21:32:48 (UTC)
committer ar <ar>2004-05-02 21:32:48 (UTC)
commit0a4cac124105a5732e55cb34c6b37be75083a395 (patch) (side-by-side diff)
tree33b4d2cab08c9b58893540b4ddee089b69fc9c61
parent109ed5f2a1cdfeb3680c9ec057a1083fcf8fab95 (diff)
downloadopie-0a4cac124105a5732e55cb34c6b37be75083a395.zip
opie-0a4cac124105a5732e55cb34c6b37be75083a395.tar.gz
opie-0a4cac124105a5732e55cb34c6b37be75083a395.tar.bz2
- convert qWarning to owarn
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/launcher/launcher.cpp296
-rw-r--r--core/launcher/packageslave.cpp191
-rw-r--r--core/launcher/transferserver.cpp3
-rw-r--r--core/obex/obex.cc47
-rw-r--r--core/opie-login/loginapplication.cpp315
-rw-r--r--core/pim/addressbook/namelineedit.cpp6
-rw-r--r--core/qws/transferserver.cpp6
7 files changed, 439 insertions, 425 deletions
diff --git a/core/launcher/launcher.cpp b/core/launcher/launcher.cpp
index 6afbcd8..779fe54 100644
--- a/core/launcher/launcher.cpp
+++ b/core/launcher/launcher.cpp
@@ -1,786 +1,786 @@
/**********************************************************************
** Copyright (C) 2000-2002 Trolltech AS. All rights reserved.
**
** This file is part of the Qtopia Environment.
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** See http://www.trolltech.com/gpl/ for GPL licensing information.
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**********************************************************************/
#include "startmenu.h"
#include "taskbar.h"
#include "serverinterface.h"
#include "launcherview.h"
#include "launcher.h"
#include "server.h"
/* OPIE */
#include <opie2/odebug.h>
#include <qtopia/global.h>
#ifdef Q_WS_QWS
#include <qtopia/qcopenvelope_qws.h>
#endif
#include <qtopia/resource.h>
#include <qtopia/applnk.h>
#include <qtopia/config.h>
#include <qtopia/qpeapplication.h>
#include <qtopia/mimetype.h>
#include <qtopia/private/categories.h>
#define QTOPIA_INTERNAL_FSLP
#include <qtopia/lnkproperties.h>
/* QT */
#include <qdir.h>
#ifdef Q_WS_QWS
#include <qkeyboard_qws.h>
#include <qwindowsystem_qws.h>
#endif
#include <qtimer.h>
#include <qcombobox.h>
#include <qvbox.h>
#include <qlayout.h>
#include <qstyle.h>
#include <qpushbutton.h>
#include <qtabbar.h>
#include <qwidgetstack.h>
#include <qregexp.h>
#include <qmessagebox.h>
#include <qframe.h>
#include <qpainter.h>
#include <qlabel.h>
#include <qtextstream.h>
#include <qpopupmenu.h>
/* STD */
#include <stdlib.h>
#include <assert.h>
#if defined(_OS_LINUX_) || defined(Q_OS_LINUX)
#include <unistd.h>
#include <stdio.h>
#include <sys/vfs.h>
#include <mntent.h>
#endif
static bool isVisibleWindow( int );
//===========================================================================
LauncherTabWidget::LauncherTabWidget( Launcher* parent ) :
QVBox( parent ), docview( 0 )
{
docLoadingWidgetEnabled = false;
docLoadingWidget = 0;
docLoadingWidgetProgress = 0;
launcher = parent;
categoryBar = new LauncherTabBar( this );
QPalette pal = categoryBar->palette();
pal.setColor( QColorGroup::Light, pal.color(QPalette::Active,QColorGroup::Shadow) );
pal.setColor( QColorGroup::Background, pal.active().background().light(110) );
categoryBar->setPalette( pal );
stack = new QWidgetStack(this);
connect( categoryBar, SIGNAL(selected(int)), this, SLOT(raiseTabWidget()) );
categoryBar->show();
stack->show();
#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
QCopChannel *channel = new QCopChannel( "QPE/Launcher", this );
connect( channel, SIGNAL(received(const QCString&,const QByteArray&)),
this, SLOT(launcherMessage(const QCString&,const QByteArray&)) );
connect( qApp, SIGNAL(appMessage(const QCString&,const QByteArray&)),
- this, SLOT(appMessage(const QCString&,const QByteArray&)));
+ this, SLOT(appMessage(const QCString&,const QByteArray&)));
#endif
createDocLoadingWidget();
}
void LauncherTabWidget::createDocLoadingWidget()
{
// Construct the 'doc loading widget' shown when finding documents
// ### LauncherView class needs changing to be more generic so
// this widget can change its background similar to the iconviews
// so the background for this matches
docLoadingWidget = new LauncherView( stack );
docLoadingWidget->hideIcons();
QVBox *docLoadingVBox = new QVBox( docLoadingWidget );
docLoadingVBox->setSpacing( 20 );
docLoadingVBox->setMargin( 10 );
QWidget *space1 = new QWidget( docLoadingVBox );
docLoadingVBox->setStretchFactor( space1, 1 );
QLabel *waitPixmap = new QLabel( docLoadingVBox );
waitPixmap->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)5, (QSizePolicy::SizeType)5, waitPixmap->sizePolicy().hasHeightForWidth() ) );
waitPixmap->setPixmap( Resource::loadPixmap( "bigwait" ) );
waitPixmap->setAlignment( int( QLabel::AlignCenter ) );
Config cfg( "Launcher" );
cfg.setGroup( "DocTab" );
bool docTabEnabled = cfg.readBoolEntry( "Enable", true );
QLabel *textLabel = new QLabel( docLoadingVBox );
textLabel->setAlignment( int( QLabel::AlignCenter ) );
docLoadingWidgetProgress = new QProgressBar( docLoadingVBox );
docLoadingWidgetProgress->setProgress( 0 );
docLoadingWidgetProgress->setCenterIndicator( TRUE );
docLoadingWidgetProgress->setBackgroundMode( NoBackground ); // No flicker
setProgressStyle();
if ( docTabEnabled )
{
textLabel->setText( tr( "<b>Finding Documents...</b>" ) );
}
else
{
textLabel->setText( tr( "<b>The Documents Tab<p>has been disabled.<p>"
"Use Settings->Launcher->DocTab<p>to reenable it.</b></center>" ) );
docLoadingWidgetProgress->hide();
docLoadingWidgetEnabled = true;
}
QWidget *space2 = new QWidget( docLoadingVBox );
docLoadingVBox->setStretchFactor( space2, 1 );
cfg.setGroup( "Tab Documents" ); // No tr
setTabViewAppearance( docLoadingWidget, cfg );
stack->addWidget( docLoadingWidget, 0 );
}
void LauncherTabWidget::initLayout()
{
layout()->activate();
docView()->setFocus();
categoryBar->showTab("Documents");
}
void LauncherTabWidget::appMessage(const QCString& message, const QByteArray&)
{
if ( message == "nextView()" )
- categoryBar->nextTab();
+ categoryBar->nextTab();
}
void LauncherTabWidget::raiseTabWidget()
{
if ( categoryBar->currentView() == docView()
- && docLoadingWidgetEnabled ) {
- stack->raiseWidget( docLoadingWidget );
- docLoadingWidget->updateGeometry();
+ && docLoadingWidgetEnabled ) {
+ stack->raiseWidget( docLoadingWidget );
+ docLoadingWidget->updateGeometry();
} else {
- stack->raiseWidget( categoryBar->currentView() );
+ stack->raiseWidget( categoryBar->currentView() );
}
}
void LauncherTabWidget::tabProperties()
{
LauncherView *view = categoryBar->currentView();
QPopupMenu *m = new QPopupMenu( this );
m->insertItem( tr("Icon View"), LauncherView::Icon );
m->insertItem( tr("List View"), LauncherView::List );
m->setItemChecked( (int)view->viewMode(), TRUE );
int rv = m->exec( QCursor::pos() );
if ( rv >= 0 && rv != view->viewMode() ) {
- view->setViewMode( (LauncherView::ViewMode)rv );
+ view->setViewMode( (LauncherView::ViewMode)rv );
}
delete m;
}
void LauncherTabWidget::deleteView( const QString& id )
{
LauncherTab *t = categoryBar->launcherTab(id);
if ( t ) {
- stack->removeWidget( t->view );
- delete t->view;
- categoryBar->removeTab( t );
+ stack->removeWidget( t->view );
+ delete t->view;
+ categoryBar->removeTab( t );
}
}
LauncherView* LauncherTabWidget::newView( const QString& id, const QPixmap& pm, const QString& label )
{
LauncherView* view = new LauncherView( stack );
connect( view, SIGNAL(clicked(const AppLnk*)),
- this, SIGNAL(clicked(const AppLnk*)));
+ this, SIGNAL(clicked(const AppLnk*)));
connect( view, SIGNAL(rightPressed(AppLnk*)),
- this, SIGNAL(rightPressed(AppLnk*)));
+ this, SIGNAL(rightPressed(AppLnk*)));
int n = categoryBar->count();
stack->addWidget( view, n );
LauncherTab *tab = new LauncherTab( id, view, pm, label );
categoryBar->insertTab( tab, n-1 );
if ( id == "Documents" )
- docview = view;
+ docview = view;
odebug << "inserting " << id << " at " << n-1 << "" << oendl;
Config cfg("Launcher");
setTabAppearance( tab, cfg );
cfg.setGroup( "GUI" );
view->setBusyIndicatorType( cfg.readEntry( "BusyType", QString::null ) );
return view;
}
LauncherView *LauncherTabWidget::view( const QString &id )
{
LauncherTab *t = categoryBar->launcherTab(id);
if ( !t )
- return 0;
+ return 0;
return t->view;
}
LauncherView *LauncherTabWidget::docView()
{
return docview;
}
void LauncherTabWidget::setLoadingWidgetEnabled( bool v )
{
if ( v != docLoadingWidgetEnabled && docLoadingWidget ) {
- docLoadingWidgetEnabled = v;
- raiseTabWidget();
+ docLoadingWidgetEnabled = v;
+ raiseTabWidget();
}
}
void LauncherTabWidget::setLoadingProgress( int percent )
{
docLoadingWidgetProgress->setProgress( (percent / 4) * 4 );
}
// ### this function could more to LauncherView
void LauncherTabWidget::setTabViewAppearance( LauncherView *v, Config &cfg )
{
// View
QString view = cfg.readEntry( "View", "Icon" );
if ( view == "List" ) // No tr
- v->setViewMode( LauncherView::List );
+ v->setViewMode( LauncherView::List );
QString bgType = cfg.readEntry( "BackgroundType", "Image" );
if ( bgType == "Image" ) { // No tr
- QString pm = cfg.readEntry( "BackgroundImage", "launcher/opie-background" );
- v->setBackgroundType( LauncherView::Image, pm );
+ QString pm = cfg.readEntry( "BackgroundImage", "launcher/opie-background" );
+ v->setBackgroundType( LauncherView::Image, pm );
} else if ( bgType == "SolidColor" ) {
- QString c = cfg.readEntry( "BackgroundColor" );
- v->setBackgroundType( LauncherView::SolidColor, c );
+ QString c = cfg.readEntry( "BackgroundColor" );
+ v->setBackgroundType( LauncherView::SolidColor, c );
} else {
- v->setBackgroundType( LauncherView::Ruled, QString::null );
+ v->setBackgroundType( LauncherView::Ruled, QString::null );
}
QString textCol = cfg.readEntry( "TextColor" );
if ( textCol.isEmpty() )
- v->setTextColor( QColor() );
+ v->setTextColor( QColor() );
else
- v->setTextColor( QColor(textCol) );
+ v->setTextColor( QColor(textCol) );
// bool customFont = cfg.readBoolEntry( "CustomFont", FALSE );
QStringList font = cfg.readListEntry( "Font", ',' );
if ( font.count() == 4 )
v->setViewFont( QFont(font[0], font[1].toInt(), font[2].toInt(), font[3].toInt()!=0) );
// ### FIXME TabColor TabTextColor
}
// ### Could move to LauncherTab
void LauncherTabWidget::setTabAppearance( LauncherTab *tab, Config &cfg )
{
cfg.setGroup( QString( "Tab %1" ).arg(tab->type) ); // No tr
setTabViewAppearance( tab->view, cfg );
// Tabs
QString tabCol = cfg.readEntry( "TabColor" );
if ( tabCol.isEmpty() )
- tab->bgColor = QColor();
+ tab->bgColor = QColor();
else
- tab->bgColor = QColor(tabCol);
+ tab->bgColor = QColor(tabCol);
QString tabTextCol = cfg.readEntry( "TabTextColor" );
if ( tabTextCol.isEmpty() )
- tab->fgColor = QColor();
+ tab->fgColor = QColor();
else
- tab->fgColor = QColor(tabTextCol);
+ tab->fgColor = QColor(tabTextCol);
}
void LauncherTabWidget::paletteChange( const QPalette &p )
{
QVBox::paletteChange( p );
QPalette pal = palette();
pal.setColor( QColorGroup::Light, pal.color(QPalette::Active,QColorGroup::Shadow) );
pal.setColor( QColorGroup::Background, pal.active().background().light(110) );
categoryBar->setPalette( pal );
categoryBar->update();
}
void LauncherTabWidget::styleChange( QStyle & )
{
QTimer::singleShot( 0, this, SLOT(setProgressStyle()) );
}
void LauncherTabWidget::setProgressStyle()
{
if (docLoadingWidgetProgress) {
- docLoadingWidgetProgress->setFrameShape( QProgressBar::Box );
- docLoadingWidgetProgress->setFrameShadow( QProgressBar::Plain );
- docLoadingWidgetProgress->setMargin( 1 );
- docLoadingWidgetProgress->setLineWidth( 1 );
+ docLoadingWidgetProgress->setFrameShape( QProgressBar::Box );
+ docLoadingWidgetProgress->setFrameShadow( QProgressBar::Plain );
+ docLoadingWidgetProgress->setMargin( 1 );
+ docLoadingWidgetProgress->setLineWidth( 1 );
}
}
void LauncherTabWidget::setBusy(bool on)
{
if ( on )
- currentView()->setBusy(TRUE);
+ currentView()->setBusy(TRUE);
else {
- for ( int i = 0; i < categoryBar->count(); i++ ) {
- LauncherView *view = ((LauncherTab *)categoryBar->tab(i))->view;
- view->setBusy( FALSE );
- }
+ for ( int i = 0; i < categoryBar->count(); i++ ) {
+ LauncherView *view = ((LauncherTab *)categoryBar->tab(i))->view;
+ view->setBusy( FALSE );
+ }
}
}
void LauncherTabWidget::setBusyIndicatorType( const QString& str ) {
for (int i = 0; i < categoryBar->count(); i++ ) {
LauncherView* view = static_cast<LauncherTab*>( categoryBar->tab(i) )->view;
view->setBusyIndicatorType( str );
}
}
LauncherView *LauncherTabWidget::currentView(void)
{
return (LauncherView*)stack->visibleWidget();
}
void LauncherTabWidget::launcherMessage( const QCString &msg, const QByteArray &data)
{
QDataStream stream( data, IO_ReadOnly );
if ( msg == "setTabView(QString,int)" ) {
- QString id;
- stream >> id;
- int mode;
- stream >> mode;
- if ( view(id) )
- view(id)->setViewMode( (LauncherView::ViewMode)mode );
+ QString id;
+ stream >> id;
+ int mode;
+ stream >> mode;
+ if ( view(id) )
+ view(id)->setViewMode( (LauncherView::ViewMode)mode );
} else if ( msg == "setTabBackground(QString,int,QString)" ) {
- QString id;
- stream >> id;
- int mode;
- stream >> mode;
- QString pixmapOrColor;
- stream >> pixmapOrColor;
- if ( view(id) )
- view(id)->setBackgroundType( (LauncherView::BackgroundType)mode, pixmapOrColor );
- if ( id == "Documents" )
- docLoadingWidget->setBackgroundType( (LauncherView::BackgroundType)mode, pixmapOrColor );
+ QString id;
+ stream >> id;
+ int mode;
+ stream >> mode;
+ QString pixmapOrColor;
+ stream >> pixmapOrColor;
+ if ( view(id) )
+ view(id)->setBackgroundType( (LauncherView::BackgroundType)mode, pixmapOrColor );
+ if ( id == "Documents" )
+ docLoadingWidget->setBackgroundType( (LauncherView::BackgroundType)mode, pixmapOrColor );
} else if ( msg == "setTextColor(QString,QString)" ) {
- QString id;
- stream >> id;
- QString color;
- stream >> color;
- if ( view(id) )
- view(id)->setTextColor( QColor(color) );
- if ( id == "Documents" )
- docLoadingWidget->setTextColor( QColor(color) );
+ QString id;
+ stream >> id;
+ QString color;
+ stream >> color;
+ if ( view(id) )
+ view(id)->setTextColor( QColor(color) );
+ if ( id == "Documents" )
+ docLoadingWidget->setTextColor( QColor(color) );
} else if ( msg == "setFont(QString,QString,int,int,int)" ) {
- QString id;
- stream >> id;
- QString fam;
- stream >> fam;
- int size;
- stream >> size;
- int weight;
- stream >> weight;
- int italic;
- stream >> italic;
- if ( view(id) ) {
- if ( !fam.isEmpty() ) {
- view(id)->setViewFont( QFont(fam, size, weight, italic!=0) );
+ QString id;
+ stream >> id;
+ QString fam;
+ stream >> fam;
+ int size;
+ stream >> size;
+ int weight;
+ stream >> weight;
+ int italic;
+ stream >> italic;
+ if ( view(id) ) {
+ if ( !fam.isEmpty() ) {
+ view(id)->setViewFont( QFont(fam, size, weight, italic!=0) );
odebug << "setFont: " << fam << ", " << size << ", " << weight << ", " << italic << "" << oendl;
- } else {
- view(id)->clearViewFont();
- }
- }
+ } else {
+ view(id)->clearViewFont();
+ }
+ }
}else if ( msg == "setBusyIndicatorType(QString)" ) {
QString type;
stream >> type;
setBusyIndicatorType( type );
}else if ( msg == "home()" ) {
if ( isVisibleWindow( static_cast<QWidget*>(parent())->winId() ) ) {
if (categoryBar)
categoryBar->nextTab();
}else
static_cast<QWidget*>(parent())->raise();
}
}
//---------------------------------------------------------------------------
Launcher::Launcher()
: QMainWindow( 0, "PDA User Interface", QWidget::WStyle_Customize | QWidget::WGroupLeader )
{
tabs = 0;
tb = 0;
Config cfg( "Launcher" );
cfg.setGroup( "DocTab" );
docTabEnabled = cfg.readBoolEntry( "Enable", true );
}
void Launcher::createGUI()
{
setCaption( tr("Launcher") );
// we have a pretty good idea how big we'll be
setGeometry( 0, 0, qApp->desktop()->width(), qApp->desktop()->height() );
tb = new TaskBar;
tabs = new LauncherTabWidget( this );
setCentralWidget( tabs );
ServerInterface::dockWidget( tb, ServerInterface::Bottom );
tb->show();
qApp->installEventFilter( this );
connect( qApp, SIGNAL(symbol()), this, SLOT(toggleSymbolInput()) );
connect( qApp, SIGNAL(numLockStateToggle()), this, SLOT(toggleNumLockState()) );
connect( qApp, SIGNAL(capsLockStateToggle()), this, SLOT(toggleCapsLockState()) );
connect( tb, SIGNAL(tabSelected(const QString&)),
- this, SLOT(showTab(const QString&)) );
+ this, SLOT(showTab(const QString&)) );
connect( tabs, SIGNAL(selected(const QString&)),
- this, SLOT(viewSelected(const QString&)) );
+ this, SLOT(viewSelected(const QString&)) );
connect( tabs, SIGNAL(clicked(const AppLnk*)),
- this, SLOT(select(const AppLnk*)));
+ this, SLOT(select(const AppLnk*)));
connect( tabs, SIGNAL(rightPressed(AppLnk*)),
- this, SLOT(properties(AppLnk*)));
+ this, SLOT(properties(AppLnk*)));
#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
QCopChannel* sysChannel = new QCopChannel( "QPE/System", this );
connect( sysChannel, SIGNAL(received(const QCString&,const QByteArray&)),
this, SLOT(systemMessage(const QCString&,const QByteArray&)) );
#endif
// all documents
QImage img( Resource::loadImage( "DocsIcon" ) );
QPixmap pm;
pm = img.smoothScale( AppLnk::smallIconSize(), AppLnk::smallIconSize() );
// It could add this itself if it handles docs
tabs->newView("Documents", pm, tr("Documents") )->setToolsEnabled( TRUE );
QTimer::singleShot( 0, tabs, SLOT( initLayout() ) );
qApp->setMainWidget( this );
QTimer::singleShot( 500, this, SLOT( makeVisible() ) );
}
Launcher::~Launcher()
{
if ( tb )
- destroyGUI();
+ destroyGUI();
}
bool Launcher::requiresDocuments() const
{
Config cfg( "Launcher" );
cfg.setGroup( "DocTab" );
return cfg.readBoolEntry( "Enable", true );
}
void Launcher::makeVisible()
{
showMaximized();
}
void Launcher::destroyGUI()
{
delete tb;
tb = 0;
delete tabs;
tabs =0;
}
bool Launcher::eventFilter( QObject*, QEvent *ev )
{
#ifdef QT_QWS_CUSTOM
if ( ev->type() == QEvent::KeyPress ) {
- QKeyEvent *ke = (QKeyEvent *)ev;
- if ( ke->key() == Qt::Key_F11 ) { // menu key
- QWidget *active = qApp->activeWindow();
- if ( active && active->isPopup() )
- active->close();
- else {
- Global::terminateBuiltin("calibrate"); // No tr
- tb->launchStartMenu();
- }
- return TRUE;
- }
+ QKeyEvent *ke = (QKeyEvent *)ev;
+ if ( ke->key() == Qt::Key_F11 ) { // menu key
+ QWidget *active = qApp->activeWindow();
+ if ( active && active->isPopup() )
+ active->close();
+ else {
+ Global::terminateBuiltin("calibrate"); // No tr
+ tb->launchStartMenu();
+ }
+ return TRUE;
+ }
}
#else
Q_UNUSED(ev);
#endif
return FALSE;
}
void Launcher::toggleSymbolInput()
{
tb->toggleSymbolInput();
}
void Launcher::toggleNumLockState()
{
tb->toggleNumLockState();
}
void Launcher::toggleCapsLockState()
{
tb->toggleCapsLockState();
}
static bool isVisibleWindow(int wid)
{
#ifdef Q_WS_QWS
const QList<QWSWindow> &list = qwsServer->clientWindows();
QWSWindow* w;
for (QListIterator<QWSWindow> it(list); (w=it.current()); ++it) {
- if ( w->winId() == wid )
- return !w->isFullyObscured();
+ if ( w->winId() == wid )
+ return !w->isFullyObscured();
}
#endif
return FALSE;
}
void Launcher::viewSelected(const QString& s)
{
setCaption( s + tr(" - Launcher") );
}
void Launcher::showTab(const QString& id)
{
tabs->categoryBar->showTab(id);
raise();
}
void Launcher::select( const AppLnk *appLnk )
{
if ( appLnk->type() == "Folder" ) { // No tr
- // Not supported: flat is simpler for the user
+ // Not supported: flat is simpler for the user
} else {
- if ( appLnk->exec().isNull() ) {
- int i = QMessageBox::information(this,tr("No application"),
- tr("<p>No application is defined for this document."
- "<p>Type is %1.").arg(appLnk->type()), tr("OK"), tr("View as text"), 0, 0, 1);
+ if ( appLnk->exec().isNull() ) {
+ int i = QMessageBox::information(this,tr("No application"),
+ tr("<p>No application is defined for this document."
+ "<p>Type is %1.").arg(appLnk->type()), tr("OK"), tr("View as text"), 0, 0, 1);
/* ### Fixme */
- if ( i == 1 )
- Global::execute("textedit",appLnk->file());
-
- return;
- }
- tabs->setBusy(TRUE);
- emit executing( appLnk );
- appLnk->execute();
+ if ( i == 1 )
+ Global::execute("textedit",appLnk->file());
+
+ return;
+ }
+ tabs->setBusy(TRUE);
+ emit executing( appLnk );
+ appLnk->execute();
}
}
void Launcher::properties( AppLnk *appLnk )
{
if ( appLnk->type() == "Folder" ) { // No tr
- // Not supported: flat is simpler for the user
+ // Not supported: flat is simpler for the user
} else {
/* ### libqtopia FIXME also moving docLnks... */
- LnkProperties prop(appLnk,0 );
+ LnkProperties prop(appLnk,0 );
- QPEApplication::execDialog( &prop );
+ QPEApplication::execDialog( &prop );
}
}
void Launcher::storageChanged( const QList<FileSystem> &fs )
{
// ### update combo boxes if we had a combo box for the storage type
}
void Launcher::systemMessage( const QCString &msg, const QByteArray &data)
{
QDataStream stream( data, IO_ReadOnly );
if ( msg == "busy()" ) {
- tb->startWait();
+ tb->startWait();
} else if ( msg == "notBusy(QString)" ) {
- QString app;
- stream >> app;
- tabs->setBusy(FALSE);
- tb->stopWait(app);
+ QString app;
+ stream >> app;
+ tabs->setBusy(FALSE);
+ tb->stopWait(app);
} else if (msg == "applyStyle()") {
- tabs->currentView()->relayout();
+ tabs->currentView()->relayout();
}
}
// These are the update functions from the server
void Launcher::typeAdded( const QString& type, const QString& name,
- const QPixmap& pixmap, const QPixmap& )
+ const QPixmap& pixmap, const QPixmap& )
{
tabs->newView( type, pixmap, name );
ids.append( type );
/* this will be called in applicationScanningProgress with value 100! */
// tb->refreshStartMenu();
static bool first = TRUE;
if ( first ) {
- first = FALSE;
+ first = FALSE;
tabs->categoryBar->showTab(type);
}
tabs->view( type )->setUpdatesEnabled( FALSE );
tabs->view( type )->setSortEnabled( FALSE );
}
void Launcher::typeRemoved( const QString& type )
{
tabs->view( type )->removeAllItems();
tabs->deleteView( type );
ids.remove( type );
/* this will be called in applicationScanningProgress with value 100! */
// tb->refreshStartMenu();
}
void Launcher::applicationAdded( const QString& type, const AppLnk& app )
{
if ( app.type() == "Separator" ) // No tr
- return;
+ return;
LauncherView *view = tabs->view( type );
if ( view )
- view->addItem( new AppLnk( app ), FALSE );
+ view->addItem( new AppLnk( app ), FALSE );
else
- qWarning("addAppLnk: No view for type %s. Can't add app %s!",
- type.latin1(),app.name().latin1() );
+ owarn << "addAppLnk: No view for type " << type.latin1() << ". Can't add app "
+ << app.name().latin1() << "!",
MimeType::registerApp( app );
}
void Launcher::applicationRemoved( const QString& type, const AppLnk& app )
{
LauncherView *view = tabs->view( type );
if ( view )
- view->removeLink( app.linkFile() );
+ view->removeLink( app.linkFile() );
else
owarn << "removeAppLnk: No view for " << type << "!" << oendl;
}
void Launcher::allApplicationsRemoved()
{
MimeType::clear();
for ( QStringList::ConstIterator it=ids.begin(); it!= ids.end(); ++it)
- tabs->view( (*it) )->removeAllItems();
+ tabs->view( (*it) )->removeAllItems();
}
void Launcher::documentAdded( const DocLnk& doc )
{
tabs->docView()->addItem( new DocLnk( doc ), FALSE );
}
void Launcher::aboutToAddBegin()
{
tabs->docView()->setUpdatesEnabled( false );
}
void Launcher::aboutToAddEnd()
{
tabs->docView()->setUpdatesEnabled( true );
}
void Launcher::showLoadingDocs()
{
tabs->docView()->hide();
}
void Launcher::showDocTab()
{
if ( tabs->categoryBar->currentView() == tabs->docView() )
- tabs->docView()->show();
+ tabs->docView()->show();
}
void Launcher::documentRemoved( const DocLnk& doc )
{
tabs->docView()->removeLink( doc.linkFile() );
}
void Launcher::documentChanged( const DocLnk& oldDoc, const DocLnk& newDoc )
{
documentRemoved( oldDoc );
documentAdded( newDoc );
}
void Launcher::allDocumentsRemoved()
{
tabs->docView()->removeAllItems();
}
void Launcher::applicationStateChanged( const QString& name, ApplicationState state )
{
tb->setApplicationState( name, state );
}
void Launcher::applicationScanningProgress( int percent )
{
switch ( percent ) {
case 0: {
- for ( QStringList::ConstIterator it=ids.begin(); it!= ids.end(); ++it) {
- tabs->view( (*it) )->setUpdatesEnabled( FALSE );
- tabs->view( (*it) )->setSortEnabled( FALSE );
- }
- break;
+ for ( QStringList::ConstIterator it=ids.begin(); it!= ids.end(); ++it) {
+ tabs->view( (*it) )->setUpdatesEnabled( FALSE );
+ tabs->view( (*it) )->setSortEnabled( FALSE );
+ }
+ break;
}
case 100: {
- for ( QStringList::ConstIterator it=ids.begin(); it!= ids.end(); ++it) {
- tabs->view( (*it) )->setUpdatesEnabled( TRUE );
- tabs->view( (*it) )->setSortEnabled( TRUE );
- }
+ for ( QStringList::ConstIterator it=ids.begin(); it!= ids.end(); ++it) {
+ tabs->view( (*it) )->setUpdatesEnabled( TRUE );
+ tabs->view( (*it) )->setSortEnabled( TRUE );
+ }
tb->refreshStartMenu();
- break;
+ break;
}
default:
break;
}
}
void Launcher::documentScanningProgress( int percent )
{
switch ( percent ) {
case 0: {
- tabs->setLoadingProgress( 0 );
- tabs->setLoadingWidgetEnabled( TRUE );
- tabs->docView()->setUpdatesEnabled( FALSE );
- tabs->docView()->setSortEnabled( FALSE );
- break;
+ tabs->setLoadingProgress( 0 );
+ tabs->setLoadingWidgetEnabled( TRUE );
+ tabs->docView()->setUpdatesEnabled( FALSE );
+ tabs->docView()->setSortEnabled( FALSE );
+ break;
}
case 100: {
- tabs->docView()->updateTools();
- tabs->docView()->setSortEnabled( TRUE );
- tabs->docView()->setUpdatesEnabled( TRUE );
- tabs->setLoadingWidgetEnabled( FALSE );
- break;
+ tabs->docView()->updateTools();
+ tabs->docView()->setSortEnabled( TRUE );
+ tabs->docView()->setUpdatesEnabled( TRUE );
+ tabs->setLoadingWidgetEnabled( FALSE );
+ break;
}
default:
- tabs->setLoadingProgress( percent );
+ tabs->setLoadingProgress( percent );
break;
}
}
diff --git a/core/launcher/packageslave.cpp b/core/launcher/packageslave.cpp
index a11ac86..0461432 100644
--- a/core/launcher/packageslave.cpp
+++ b/core/launcher/packageslave.cpp
@@ -1,339 +1,338 @@
/**********************************************************************
** Copyright (C) 2000-2002 Trolltech AS. All rights reserved.
**
** This file is part of the Qtopia Environment.
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** See http://www.trolltech.com/gpl/ for GPL licensing information.
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**********************************************************************/
#include "packageslave.h"
/* OPIE */
#include <opie2/odebug.h>
#include <qtopia/qprocess.h>
#ifdef Q_WS_QWS
#include <qtopia/qcopenvelope_qws.h>
#endif
using namespace Opie::Core;
/* QT */
#ifdef Q_WS_QWS
#include <qcopchannel_qws.h>
#endif
#include <qtextstream.h>
/* STD */
#include <stdlib.h>
#include <sys/stat.h> // mkdir()
#if defined(_OS_LINUX_) || defined(Q_OS_LINUX)
#include <unistd.h>
#include <sys/vfs.h>
#include <mntent.h>
#elif defined(Q_OS_MACX)
#include <unistd.h>
#endif
PackageHandler::PackageHandler( QObject *parent, char* name )
: QObject( parent, name ), packageChannel( 0 ), currentProcess( 0 ), mNoSpaceLeft( FALSE )
{
// setup qcop channel
#ifndef QT_NO_COP
packageChannel = new QCopChannel( "QPE/Package", this );
connect( packageChannel, SIGNAL( received(const QCString&,const QByteArray&) ),
- this, SLOT( qcopMessage(const QCString&,const QByteArray&) ) );
+ this, SLOT( qcopMessage(const QCString&,const QByteArray&) ) );
#endif
}
void PackageHandler::qcopMessage( const QCString &msg, const QByteArray &data )
{
QDataStream stream( data, IO_ReadOnly );
if ( msg == "installPackage(QString)" ) {
QString file;
stream >> file;
installPackage( file );
} else if ( msg == "removePackage(QString)" ) {
- QString file;
+ QString file;
stream >> file;
removePackage( file );
} else if ( msg == "addPackageFiles(QString,QString)" ) {
- QString location, listfile;
+ QString location, listfile;
stream >> location >> listfile;
addPackageFiles( location, listfile);
} else if ( msg == "addPackages(QString)" ) {
- QString location;
+ QString location;
stream >> location;
addPackages( location );
} else if ( msg == "cleanupPackageFiles(QString)" ) {
- QString listfile;
+ QString listfile;
stream >> listfile;
- cleanupPackageFiles( listfile );
+ cleanupPackageFiles( listfile );
} else if ( msg == "cleanupPackages(QString)" ) {
- QString location;
+ QString location;
stream >> location;
cleanupPackages( location );
} else if ( msg == "prepareInstall(QString,QString)" ) {
- QString size, path;
- stream >> size;
- stream >> path;
- prepareInstall( size, path );
+ QString size, path;
+ stream >> size;
+ stream >> path;
+ prepareInstall( size, path );
}
}
void PackageHandler::installPackage( const QString &package )
{
if ( mNoSpaceLeft ) {
- mNoSpaceLeft = FALSE;
- // Don't emit that for now, I still couldn't test it (Wener)
- //sendReply( "installFailed(QString)", package );
- //return;
+ mNoSpaceLeft = FALSE;
+ // Don't emit that for now, I still couldn't test it (Wener)
+ //sendReply( "installFailed(QString)", package );
+ //return;
}
-
+
currentProcess = new QProcess( QStringList() << "ipkg" << "install" << package ); // No tr
connect( currentProcess, SIGNAL( processExited() ), SLOT( iProcessExited() ) );
connect( currentProcess, SIGNAL( readyReadStdout() ), SLOT( readyReadStdout() ) );
connect( currentProcess, SIGNAL( readyReadStderr() ), SLOT( readyReadStderr() ) );
currentPackage = package;
currentProcessError="";
sendReply( "installStarted(QString)", package );
currentProcess->start();
}
void PackageHandler::removePackage( const QString &package )
{
currentProcess = new QProcess( QStringList() << "ipkg" << "remove" << package ); // No tr
connect( currentProcess, SIGNAL( processExited() ), SLOT( rmProcessExited() ) );
connect( currentProcess, SIGNAL( readyReadStdout() ), SLOT( readyReadStdout() ) );
connect( currentProcess, SIGNAL( readyReadStderr() ), SLOT( readyReadStderr() ) );
currentPackage = package;
currentProcessError="";
sendReply( "removeStarted(QString)", package );
currentProcess->start();
}
void PackageHandler::sendReply( const QCString& msg, const QString& arg )
{
#ifndef QT_NO_COP
QCopEnvelope e( "QPE/Desktop", msg );
e << arg;
#endif
}
-void PackageHandler::addPackageFiles( const QString &location,
- const QString &listfile )
+void PackageHandler::addPackageFiles( const QString &location,
+ const QString &listfile )
{
QFile f(listfile);
#ifndef Q_OS_WIN32
//make a copy so we can remove the symlinks later
mkdir( ("/usr/lib/ipkg/info/"+location).ascii(), 0777 );
system(("cp " + f.name() + " /usr/lib/ipkg/info/"+location).ascii());
#else
QDir d;
- //#### revise
+ //#### revise
odebug << "Copy file at " << __FILE__ << ": " << __LINE__ << "" << oendl;
- d.mkdir(("/usr/lib/ipkg/info/" + location).ascii());
+ d.mkdir(("/usr/lib/ipkg/info/" + location).ascii());
system(("copy " + f.name() + " /usr/lib/ipkg/info/"+location).ascii());
#endif
-
- if ( f.open(IO_ReadOnly) ) {
- QTextStream ts(&f);
- QString s;
- while ( !ts.eof() ) { // until end of file...
- s = ts.readLine(); // line of text excluding '\n'
- // for s, do link/mkdir.
- if ( s.right(1) == "/" ) {
+ if ( f.open(IO_ReadOnly) ) {
+ QTextStream ts(&f);
+
+ QString s;
+ while ( !ts.eof() ) { // until end of file...
+ s = ts.readLine(); // line of text excluding '\n'
+ // for s, do link/mkdir.
+ if ( s.right(1) == "/" ) {
odebug << "do mkdir for " << s.ascii() << "" << oendl;
#ifndef Q_OS_WIN32
- mkdir( s.ascii(), 0777 );
- //possible optimization: symlink directories
- //that don't exist already. -- Risky.
+ mkdir( s.ascii(), 0777 );
+ //possible optimization: symlink directories
+ //that don't exist already. -- Risky.
#else
- d.mkdir( s.ascii());
+ d.mkdir( s.ascii());
#endif
- } else {
+ } else {
#ifndef Q_OS_WIN32
odebug << "do symlink for " << s.ascii() << "" << oendl;
- symlink( (location + s).ascii(), s.ascii() );
+ symlink( (location + s).ascii(), s.ascii() );
#else
odebug << "Copy file instead of a symlink for WIN32" << oendl;
- if (!CopyFile((TCHAR*)qt_winTchar((location + s), TRUE), (TCHAR*)qt_winTchar(s, TRUE), FALSE))
- qWarning("Unable to create symlinkfor %s",
- (location + s).ascii());
+ if (!CopyFile((TCHAR*)qt_winTchar((location + s), TRUE), (TCHAR*)qt_winTchar(s, TRUE), FALSE))
+ owarn << "Unable to create symlinkfor " << (location + s).ascii() << oendl;
#endif
- }
- }
- f.close();
- }
+ }
+ }
+ f.close();
+ }
}
void PackageHandler::addPackages( const QString &location )
{
// get list of *.list in location/usr/lib/ipkg/info/*.list
QDir dir(location + "/usr/lib/ipkg/info", "*.list", // No tr
- QDir::Name, QDir::Files);
+ QDir::Name, QDir::Files);
if ( !dir.exists() )
- return;
-
+ return;
+
QStringList packages = dir.entryList();
for ( QStringList::Iterator it = packages.begin();
- it != packages.end(); ++it ) {
- addPackageFiles( location, *it );
+ it != packages.end(); ++it ) {
+ addPackageFiles( location, *it );
}
}
void PackageHandler::cleanupPackageFiles( const QString &listfile )
{
QFile f(listfile);
-
- if ( f.open(IO_ReadOnly) ) {
- QTextStream ts(&f);
-
- QString s;
- while ( !ts.eof() ) { // until end of file...
- s = ts.readLine(); // line of text excluding '\n'
- // for s, do link/mkdir.
- if ( s.right(1) == "/" ) {
- //should rmdir if empty, after all files have been removed
- } else {
+
+ if ( f.open(IO_ReadOnly) ) {
+ QTextStream ts(&f);
+
+ QString s;
+ while ( !ts.eof() ) { // until end of file...
+ s = ts.readLine(); // line of text excluding '\n'
+ // for s, do link/mkdir.
+ if ( s.right(1) == "/" ) {
+ //should rmdir if empty, after all files have been removed
+ } else {
#ifndef Q_OS_WIN32
odebug << "remove symlink for " << s.ascii() << "" << oendl;
- //check if it is a symlink first (don't remove /etc/passwd...)
- char buf[10]; //we don't care about the contents
- if ( ::readlink( s.ascii(),buf, 10 >= 0 ) )
- ::unlink( s.ascii() );
-#else
- // ### revise
+ //check if it is a symlink first (don't remove /etc/passwd...)
+ char buf[10]; //we don't care about the contents
+ if ( ::readlink( s.ascii(),buf, 10 >= 0 ) )
+ ::unlink( s.ascii() );
+#else
+ // ### revise
owarn << "Unable to remove symlink " << __FILE__ << ":" << __LINE__ << "" << oendl;
#endif
- }
- }
- f.close();
+ }
+ }
+ f.close();
//remove the list file
- ::unlink( listfile.ascii() );
-
- }
+ ::unlink( listfile.ascii() );
+
+ }
}
void PackageHandler::cleanupPackages( const QString &location )
{
// get list of *.list in location/usr/lib/ipkg/info/*.list
QDir dir( "/usr/lib/ipkg/info/"+location, "*.list", // No tr
- QDir::Name, QDir::Files);
+ QDir::Name, QDir::Files);
if ( !dir.exists() )
- return;
-
+ return;
+
QStringList packages = dir.entryList();
for ( QStringList::Iterator it = packages.begin();
- it != packages.end(); ++it ) {
- cleanupPackageFiles( *it );
+ it != packages.end(); ++it ) {
+ cleanupPackageFiles( *it );
}
-
- //remove the backup directory
+
+ //remove the backup directory
//###
}
void PackageHandler::prepareInstall( const QString& size, const QString& path )
{
// Check whether there will be enough space to install the next package.
bool ok;
unsigned int s = size.toUInt( &ok );
-
+
if ( !ok )
- return;
+ return;
// Shamelessly stolen from the sysinfo application (Werner)
#if defined(_OS_LINUX_) || defined(Q_OS_LINUX)
struct statfs fs;
if ( statfs( path.latin1(), &fs ) == 0 )
- if ( s > fs.f_bsize * fs.f_bavail ) {
+ if ( s > fs.f_bsize * fs.f_bavail ) {
//odebug << "############### Not enough space left ###############" << oendl;
- mNoSpaceLeft = TRUE;
- }
+ mNoSpaceLeft = TRUE;
+ }
#endif
}
void PackageHandler::iProcessExited()
{
if ( currentProcess->normalExit() && currentProcess->exitStatus() == 0 )
- sendReply( "installDone(QString)", currentPackage );
+ sendReply( "installDone(QString)", currentPackage );
else {
#ifndef QT_NO_COP
- QCopEnvelope e( "QPE/Desktop", "installFailed(QString,int,QString)" );
- e << currentPackage << currentProcess->exitStatus()
- << currentProcessError;
+ QCopEnvelope e( "QPE/Desktop", "installFailed(QString,int,QString)" );
+ e << currentPackage << currentProcess->exitStatus()
+ << currentProcessError;
#endif
}
-
+
delete currentProcess;
currentProcess = 0;
#ifndef QT_NO_COP
QCopEnvelope e("QPE/System", "linkChanged(QString)");
QString lf = QString::null;
e << lf;
#endif
unlink( currentPackage );
}
void PackageHandler::rmProcessExited()
{
if ( currentProcess->normalExit() && currentProcess->exitStatus() == 0 )
- sendReply( "removeDone(QString)", currentPackage );
+ sendReply( "removeDone(QString)", currentPackage );
else
- sendReply( "removeFailed(QString)", currentPackage );
+ sendReply( "removeFailed(QString)", currentPackage );
#ifndef QT_NO_COP
QCopEnvelope e("QPE/System", "linkChanged(QString)");
QString lf = QString::null;
e << lf;
#endif
}
void PackageHandler::readyReadStdout()
{
while ( currentProcess->canReadLineStdout() ) {
- QString line = currentProcess->readLineStdout();
- currentProcessError.append("OUT:"+line);
- if ( line.contains( "Unpacking" ) ) // No tr
- sendReply( "installStep(QString)", "one" ); // No tr
- else if ( line.contains( "Configuring" ) ) // No tr
- sendReply( "installStep(QString)", "two" ); // No tr
+ QString line = currentProcess->readLineStdout();
+ currentProcessError.append("OUT:"+line);
+ if ( line.contains( "Unpacking" ) ) // No tr
+ sendReply( "installStep(QString)", "one" ); // No tr
+ else if ( line.contains( "Configuring" ) ) // No tr
+ sendReply( "installStep(QString)", "two" ); // No tr
}
}
void PackageHandler::readyReadStderr()
{
while ( currentProcess->canReadLineStderr() ) {
- QString line = currentProcess->readLineStderr();
- currentProcessError.append("ERR:"+line);
+ QString line = currentProcess->readLineStderr();
+ currentProcessError.append("ERR:"+line);
}
}
void PackageHandler::redoPackages()
{
//get list of filesystems
//call cleanupPackages for the ones that have disappeared
//call addPackageFiles for the new ones
}
diff --git a/core/launcher/transferserver.cpp b/core/launcher/transferserver.cpp
index c3f936e..1d4ca40 100644
--- a/core/launcher/transferserver.cpp
+++ b/core/launcher/transferserver.cpp
@@ -967,386 +967,385 @@ QString ServerPI::fileListing( QFileInfo *info )
s += QString::number( info->size() ).rightJustify( 9, ' ', TRUE ) + " ";
// last modified date
QDate date = info->lastModified().date();
QTime time = info->lastModified().time();
s += date.monthName( date.month() ) + " "
+ QString::number( date.day() ).rightJustify( 2, ' ', TRUE ) + " "
+ QString::number( time.hour() ).rightJustify( 2, '0', TRUE ) + ":"
+ QString::number( time.minute() ).rightJustify( 2,'0', TRUE ) + " ";
// file name
s += info->fileName();
return s;
}
QString ServerPI::permissionString( QFileInfo *info )
{
if ( !info ) return QString( "---------" );
QString s;
// user
if ( info->permission( QFileInfo::ReadUser ) ) s += "r";
else s += "-";
if ( info->permission( QFileInfo::WriteUser ) ) s += "w";
else s += "-";
if ( info->permission( QFileInfo::ExeUser ) ) s += "x";
else s += "-";
// group
if ( info->permission( QFileInfo::ReadGroup ) ) s += "r";
else s += "-";
if ( info->permission( QFileInfo::WriteGroup ) )s += "w";
else s += "-";
if ( info->permission( QFileInfo::ExeGroup ) ) s += "x";
else s += "-";
// exec
if ( info->permission( QFileInfo::ReadOther ) ) s += "r";
else s += "-";
if ( info->permission( QFileInfo::WriteOther ) ) s += "w";
else s += "-";
if ( info->permission( QFileInfo::ExeOther ) ) s += "x";
else s += "-";
return s;
}
void ServerPI::newConnection( int socket )
{
//odebug << "New incomming connection" << oendl;
if ( !passiv ) return;
if ( wait[SendFile] ) {
QStringList targets;
if ( backupRestoreGzip( waitfile, targets ) )
dtp->sendGzipFile( waitfile, targets );
else
dtp->sendFile( waitfile );
dtp->setSocket( socket );
}
else if ( wait[RetrieveFile] ) {
odebug << "check retrieve file" << oendl;
if ( backupRestoreGzip( waitfile ) )
dtp->retrieveGzipFile( waitfile );
else
dtp->retrieveFile( waitfile, storFileSize );
dtp->setSocket( socket );
}
else if ( wait[SendByteArray] ) {
dtp->sendByteArray( waitarray );
dtp->setSocket( socket );
}
else if ( wait[RetrieveByteArray] ) {
odebug << "retrieve byte array" << oendl;
dtp->retrieveByteArray();
dtp->setSocket( socket );
}
else
waitsocket = socket;
for( int i = 0; i < 4; i++ )
wait[i] = FALSE;
}
QString ServerPI::absFilePath( const QString& file )
{
if ( file.isEmpty() ) return file;
QString filepath( file );
if ( file[0] != "/" )
filepath = directory.path() + "/" + file;
return filepath;
}
void ServerPI::timerEvent( QTimerEvent * )
{
connectionClosed();
}
ServerDTP::ServerDTP( QObject *parent, const char* name)
: QSocket( parent, name ), mode( Idle ), createTargzProc( 0 ),
retrieveTargzProc( 0 )
{
connect( this, SIGNAL( connected() ), SLOT( connected() ) );
connect( this, SIGNAL( connectionClosed() ), SLOT( connectionClosed() ) );
connect( this, SIGNAL( bytesWritten(int) ), SLOT( bytesWritten(int) ) );
connect( this, SIGNAL( readyRead() ), SLOT( readyRead() ) );
createTargzProc = new QProcess( QString("tar"), this, "createTargzProc"); // No tr
createTargzProc->setCommunication( QProcess::Stdout );
createTargzProc->setWorkingDirectory( QDir::rootDirPath() );
connect( createTargzProc, SIGNAL( processExited() ), SLOT( targzDone() ) );
retrieveTargzProc = new QProcess( this, "retrieveTargzProc" );
retrieveTargzProc->setCommunication( QProcess::Stdin );
retrieveTargzProc->setWorkingDirectory( QDir::rootDirPath() );
connect( retrieveTargzProc, SIGNAL( processExited() ),
SIGNAL( completed() ) );
connect( retrieveTargzProc, SIGNAL( processExited() ),
SLOT( extractTarDone() ) );
}
ServerDTP::~ServerDTP()
{
buf.close();
if ( RetrieveFile == mode && file.isOpen() ) {
// We're being shutdown before the client closed.
file.close();
if ( recvFileSize >= 0 && (int)file.size() != recvFileSize ) {
odebug << "STOR incomplete" << oendl;
file.remove();
}
} else {
file.close();
}
createTargzProc->kill();
}
void ServerDTP::extractTarDone()
{
odebug << "extract done" << oendl;
#ifndef QT_NO_COP
QCopEnvelope e( "QPE/System", "restoreDone(QString)" );
e << file.name();
#endif
}
void ServerDTP::connected()
{
// send file mode
switch ( mode ) {
case SendFile :
if ( !file.exists() || !file.open( IO_ReadOnly) ) {
emit failed();
mode = Idle;
return;
}
//odebug << "Debug: Sending file '" << file.name() << "'" << oendl;
bytes_written = 0;
if ( file.size() == 0 ) {
//make sure it doesn't hang on empty files
file.close();
emit completed();
mode = Idle;
} else {
// Don't write more if there is plenty buffered already.
if ( bytesToWrite() <= block_size && !file.atEnd() ) {
QCString s;
s.resize( block_size );
int bytes = file.readBlock( s.data(), block_size );
writeBlock( s.data(), bytes );
}
}
break;
case SendGzipFile:
if ( createTargzProc->isRunning() ) {
// SHOULDN'T GET HERE, BUT DOING A SAFETY CHECK ANYWAY
owarn << "Previous tar --gzip process is still running; killing it..." << oendl;
createTargzProc->kill();
}
bytes_written = 0;
odebug << "==>start send tar process" << oendl;
if ( !createTargzProc->start() )
- qWarning("Error starting %s",
- createTargzProc->arguments().join(" ").latin1());
+ owarn << "Error starting " << createTargzProc->arguments().join(" ").latin1() << oendl;
break;
case SendBuffer:
if ( !buf.open( IO_ReadOnly) ) {
emit failed();
mode = Idle;
return;
}
// odebug << "Debug: Sending byte array" << oendl;
bytes_written = 0;
while( !buf.atEnd() )
putch( buf.getch() );
buf.close();
break;
case RetrieveFile:
// retrieve file mode
if ( file.exists() && !file.remove() ) {
emit failed();
mode = Idle;
return;
}
if ( !file.open( IO_WriteOnly) ) {
emit failed();
mode = Idle;
return;
}
// odebug << "Debug: Retrieving file " << file.name() << "" << oendl;
break;
case RetrieveGzipFile:
odebug << "=-> starting tar process to receive .tgz file" << oendl;
break;
case RetrieveBuffer:
// retrieve buffer mode
if ( !buf.open( IO_WriteOnly) ) {
emit failed();
mode = Idle;
return;
}
// odebug << "Debug: Retrieving byte array" << oendl;
break;
case Idle:
odebug << "connection established but mode set to Idle; BUG!" << oendl;
break;
}
}
void ServerDTP::connectionClosed()
{
//odebug << "Debug: Data connection closed " << bytes_written << " bytes written" << oendl;
// send file mode
if ( SendFile == mode ) {
if ( bytes_written == file.size() )
emit completed();
else
emit failed();
}
// send buffer mode
else if ( SendBuffer == mode ) {
if ( bytes_written == buf.size() )
emit completed();
else
emit failed();
}
// retrieve file mode
else if ( RetrieveFile == mode ) {
file.close();
if ( recvFileSize >= 0 && (int)file.size() != recvFileSize ) {
odebug << "STOR incomplete" << oendl;
file.remove();
emit failed();
} else {
emit completed();
}
}
else if ( RetrieveGzipFile == mode ) {
odebug << "Done writing ungzip file; closing input" << oendl;
retrieveTargzProc->flushStdin();
retrieveTargzProc->closeStdin();
}
// retrieve buffer mode
else if ( RetrieveBuffer == mode ) {
buf.close();
emit completed();
}
mode = Idle;
}
void ServerDTP::bytesWritten( int bytes )
{
bytes_written += bytes;
// send file mode
if ( SendFile == mode ) {
if ( bytes_written == file.size() ) {
// odebug << "Debug: Sending complete: " << file.size() << " bytes" << oendl;
file.close();
emit completed();
mode = Idle;
}
else if( !file.atEnd() ) {
QCString s;
s.resize( block_size );
int bytes = file.readBlock( s.data(), block_size );
writeBlock( s.data(), bytes );
}
}
// send buffer mode
if ( SendBuffer == mode ) {
if ( bytes_written == buf.size() ) {
// odebug << "Debug: Sending complete: " << buf.size() << " bytes" << oendl;
emit completed();
mode = Idle;
}
}
}
void ServerDTP::readyRead()
{
// retrieve file mode
if ( RetrieveFile == mode ) {
QCString s;
s.resize( bytesAvailable() );
readBlock( s.data(), bytesAvailable() );
file.writeBlock( s.data(), s.size() );
}
else if ( RetrieveGzipFile == mode ) {
if ( !retrieveTargzProc->isRunning() )
retrieveTargzProc->start();
QByteArray s;
s.resize( bytesAvailable() );
readBlock( s.data(), bytesAvailable() );
retrieveTargzProc->writeToStdin( s );
odebug << "wrote " << s.size() << " bytes to ungzip " << oendl;
}
// retrieve buffer mode
else if ( RetrieveBuffer == mode ) {
QCString s;
s.resize( bytesAvailable() );
readBlock( s.data(), bytesAvailable() );
buf.writeBlock( s.data(), s.size() );
}
}
void ServerDTP::writeTargzBlock()
{
QByteArray block = createTargzProc->readStdout();
writeBlock( block.data(), block.size() );
odebug << "writeTargzBlock " << block.size() << "" << oendl;
}
void ServerDTP::targzDone()
{
odebug << "tar and gzip done" << oendl;
emit completed();
mode = Idle;
disconnect( createTargzProc, SIGNAL( readyReadStdout() ),
this, SLOT( writeTargzBlock() ) );
}
void ServerDTP::sendFile( const QString fn, const QHostAddress& host, Q_UINT16 port )
{
file.setName( fn );
mode = SendFile;
connectToHost( host.toString(), port );
}
void ServerDTP::sendFile( const QString fn )
{
file.setName( fn );
mode = SendFile;
}
void ServerDTP::sendGzipFile( const QString &fn,
const QStringList &archiveTargets,
const QHostAddress& host, Q_UINT16 port )
{
sendGzipFile( fn, archiveTargets );
connectToHost( host.toString(), port );
}
void ServerDTP::sendGzipFile( const QString &fn,
diff --git a/core/obex/obex.cc b/core/obex/obex.cc
index 3c99af6..7c40b90 100644
--- a/core/obex/obex.cc
+++ b/core/obex/obex.cc
@@ -1,200 +1,205 @@
+#include "obex.h"
+
+/* OPIE */
+#include <opie2/oprocess.h>
+#include <opie2/odebug.h>
+
+/* QT */
#include <qfileinfo.h>
-#include <opie2/oprocess.h>
-#include "obex.h"
using namespace OpieObex;
using namespace Opie::Core;
/* TRANSLATOR OpieObex::Obex */
Obex::Obex( QObject *parent, const char* name )
: QObject(parent, name )
{
m_rec = 0;
m_send=0;
m_count = 0;
m_receive = false;
connect( this, SIGNAL(error(int) ), // for recovering to receive
SLOT(slotError() ) );
connect( this, SIGNAL(sent(bool) ),
SLOT(slotError() ) );
};
Obex::~Obex() {
delete m_rec;
delete m_send;
}
void Obex::receive() {
m_receive = true;
m_outp = QString::null;
- qWarning("Receive" );
+ owarn << "Receive" << oendl;
m_rec = new OProcess();
*m_rec << "irobex_palm3";
// connect to the necessary slots
connect(m_rec, SIGNAL(processExited(Opie::Core::OProcess*) ),
this, SLOT(slotExited(Opie::Core::OProcess*) ) );
connect(m_rec, SIGNAL(receivedStdout(Opie::Core::OProcess*, char*, int ) ),
this, SLOT(slotStdOut(Opie::Core::OProcess*, char*, int) ) );
if(!m_rec->start(OProcess::NotifyOnExit, OProcess::AllOutput) ) {
- qWarning("could not start :(");
+ owarn << "could not start :(" oendl;
emit done( false );
delete m_rec;
m_rec = 0;
}
// emit currentTry(m_count );
}
void Obex::send( const QString& fileName) { // if currently receiving stop it send receive
m_count = 0;
m_file = fileName;
- qWarning("send %s", fileName.latin1() );
+ owarn << "send " << fileName.latin1() << oendl;
if (m_rec != 0 ) {
- qWarning("running");
+ owarn << "running" oendl;
if (m_rec->isRunning() ) {
emit error(-1 );
- qWarning("is running");
+ owarn << "is running" << oendl;
delete m_rec;
m_rec = 0;
}else{
- qWarning("is not running");
+ owarn << "is not running" << oendl;
emit error( -1 ); // we did not delete yet but it's not running slotExited is pending
return;
}
}
sendNow();
}
void Obex::sendNow(){
- qWarning("sendNow");
+ owarn << "sendNow" << oendl;
if ( m_count >= 25 ) { // could not send
emit error(-1 );
emit sent(false);
return;
}
// OProcess inititialisation
m_send = new OProcess();
*m_send << "irobex_palm3";
*m_send << QFile::encodeName(m_file);
// connect to slots Exited and and StdOut
connect(m_send, SIGNAL(processExited(Opie::Core::OProcess*) ),
this, SLOT(slotExited(Opie::Core::OProcess*)) );
connect(m_send, SIGNAL(receivedStdout(Opie::Core::OProcess*, char*, int )),
this, SLOT(slotStdOut(Opie::Core::OProcess*, char*, int) ) );
// now start it
if (!m_send->start(/*OProcess::NotifyOnExit, OProcess::AllOutput*/ ) ) {
- qWarning("could not send" );
+ owarn << "could not send" << oendl;
m_count = 25;
emit error(-1 );
delete m_send;
m_send=0;
}
// end
m_count++;
emit currentTry( m_count );
}
void Obex::slotExited(OProcess* proc ){
if (proc == m_rec ) { // receive process
received();
}else if ( proc == m_send ) {
sendEnd();
}
}
void Obex::slotStdOut(OProcess* proc, char* buf, int len){
if ( proc == m_rec ) { // only receive
QByteArray ar( len );
memcpy( ar.data(), buf, len );
- qWarning("parsed: %s", ar.data() );
+ owarn << "parsed: " << ar.data() << oendl;
m_outp.append( ar );
}
}
void Obex::received() {
if (m_rec->normalExit() ) {
if ( m_rec->exitStatus() == 0 ) { // we got one
QString filename = parseOut();
- qWarning("ACHTUNG %s", filename.latin1() );
+ owarn << "ACHTUNG " << filename.latin1() << oendl;
emit receivedFile( filename );
}
}else{
emit done(false);
};
delete m_rec;
m_rec = 0;
receive();
}
void Obex::sendEnd() {
if (m_send->normalExit() ) {
if ( m_send->exitStatus() == 0 ) {
delete m_send;
m_send=0;
- qWarning("done" );
+ owarn << "done" << oendl;
emit sent(true);
}else if (m_send->exitStatus() == 255 ) { // it failed maybe the other side wasn't ready
// let's try it again
delete m_send;
m_send = 0;
- qWarning("try sending again" );
+ owarn << "try sending again" << oendl;
sendNow();
}
}else {
emit error( -1 );
delete m_send;
m_send = 0;
}
}
QString Obex::parseOut( ){
QString path;
QStringList list = QStringList::split("\n", m_outp);
QStringList::Iterator it;
for (it = list.begin(); it != list.end(); ++it ) {
if ( (*it).startsWith("Wrote" ) ) {
int pos = (*it).findRev('(' );
if ( pos > 0 ) {
- qWarning( "%d %s", pos, (*it).mid(6 ).latin1() ) ;
- qWarning("%d %d", (*it).length(), (*it).length()-pos );
+ owarn << pos << " " << (*it).mid(6 ).latin1() << oendl;
+ owarn << (*it).length() << " " << (*it).length()-pos << oendl;
path = (*it).remove( pos, (*it).length() - pos );
- qWarning("%s", path.latin1() );
+ owarn << path.latin1() << oendl;
path = path.mid(6 );
path = path.stripWhiteSpace();
- qWarning("path %s", path.latin1() );
+ owarn << "path " << path.latin1() << oendl;
}
}
}
return path;
}
/**
* when sent is done slotError is called we will start receive again
*/
void Obex::slotError() {
- qWarning("slotError");
+ owarn << "slotError" << oendl;
if ( m_receive )
receive();
};
void Obex::setReceiveEnabled( bool receive ) {
if ( !receive ) { //
m_receive = false;
shutDownReceive();
}
}
void Obex::shutDownReceive() {
if (m_rec != 0 ) {
- qWarning("running");
+ owarn << "running" << oendl;
if (m_rec->isRunning() ) {
emit error(-1 );
- qWarning("is running");
+ owarn << "is running" << oendl;
delete m_rec;
m_rec = 0;
}
}
}
diff --git a/core/opie-login/loginapplication.cpp b/core/opie-login/loginapplication.cpp
index 1facf2d..764b24b 100644
--- a/core/opie-login/loginapplication.cpp
+++ b/core/opie-login/loginapplication.cpp
@@ -1,281 +1,288 @@
/*
               =. This file is part of the OPIE Project
             .=l. Copyright (c) 2002 Robert Griebl <sandman@handhelds.org>
           .>+-=
 _;:,     .>    :=|. This file is free software; you can
.> <`_,   >  .   <= redistribute it and/or modify it under
:`=1 )Y*s>-.--   : the terms of the GNU General Public
.="- .-=="i,     .._ License as published by the Free Software
 - .   .-<_>     .<> Foundation; either version 2 of the License,
     ._= =}       : or (at your option) any later version.
    .%`+i>       _;_.
    .i_,=:_.      -<s. This file 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 file;
  -_. . .   )=.  = see the file COPYING. If not, write to the
    --        :-=` Free Software Foundation, Inc.,
59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
*/
+#include "loginapplication.h"
+
+/* OPIE */
+#include <opie2/odebug.h>
+
+/* QT */
+
+/* STD */
#include <pwd.h>
#include <grp.h>
#include <unistd.h>
#include <stdlib.h>
#include <signal.h>
#include <sys/stat.h>
#include <sys/wait.h>
#ifdef USEPAM
extern "C" {
#include <security/pam_appl.h>
}
#else
#include <crypt.h>
#include <shadow.h>
#endif
-#include "loginapplication.h"
LoginApplication *lApp;
LoginApplication::LoginApplication ( int &argc, char **argv, pid_t parentpid )
- : QPEApplication ( argc, argv, GuiServer )
+ : QPEApplication ( argc, argv, GuiServer )
{
- lApp = this;
- m_parentpid = parentpid;
+ lApp = this;
+ m_parentpid = parentpid;
}
const char *LoginApplication::s_username = 0;
#ifdef USEPAM
const char *LoginApplication::s_pam_password = 0;
int LoginApplication::pam_helper ( int num_msg, const struct pam_message **msg, struct pam_response **resp, void * )
{
- int replies = 0;
- struct pam_response *reply = 0;
- int size = sizeof( struct pam_response );
-
- for ( int i = 0; i < num_msg; i++ ) {
- switch ( msg [i]-> msg_style ) {
- case PAM_PROMPT_ECHO_ON: // user name given to PAM already
- return PAM_CONV_ERR;
-
- case PAM_PROMPT_ECHO_OFF: // wants password
- reply = (struct pam_response *) ::realloc ( reply, size );
- if ( !reply )
- return PAM_CONV_ERR;
- size += sizeof( struct pam_response );
-
- reply [replies]. resp_retcode = PAM_SUCCESS;
- reply [replies]. resp = ::strdup ( s_pam_password );
- replies++; // PAM frees resp
- break;
-
- case PAM_TEXT_INFO:
- break;
-
- default:
- /* unknown or PAM_ERROR_MSG */
- if ( reply )
- ::free ( reply );
- return PAM_CONV_ERR;
- }
- }
- if ( reply )
- *resp = reply;
- return PAM_SUCCESS;
+ int replies = 0;
+ struct pam_response *reply = 0;
+ int size = sizeof( struct pam_response );
+
+ for ( int i = 0; i < num_msg; i++ ) {
+ switch ( msg [i]-> msg_style ) {
+ case PAM_PROMPT_ECHO_ON: // user name given to PAM already
+ return PAM_CONV_ERR;
+
+ case PAM_PROMPT_ECHO_OFF: // wants password
+ reply = (struct pam_response *) ::realloc ( reply, size );
+ if ( !reply )
+ return PAM_CONV_ERR;
+ size += sizeof( struct pam_response );
+
+ reply [replies]. resp_retcode = PAM_SUCCESS;
+ reply [replies]. resp = ::strdup ( s_pam_password );
+ replies++; // PAM frees resp
+ break;
+
+ case PAM_TEXT_INFO:
+ break;
+
+ default:
+ /* unknown or PAM_ERROR_MSG */
+ if ( reply )
+ ::free ( reply );
+ return PAM_CONV_ERR;
+ }
+ }
+ if ( reply )
+ *resp = reply;
+ return PAM_SUCCESS;
}
bool LoginApplication::checkPassword ( const char *user, const char *pass )
{
- static struct pam_conv conv = { &LoginApplication::pam_helper, 0 };
-
- int pam_error;
- pam_handle_t *pamh = 0;
-
- pam_error = ::pam_start( "xdm", user, &conv, &pamh );
- if ( pam_error == PAM_SUCCESS ) {
- s_pam_password = pass;
- pam_error = ::pam_authenticate ( pamh, 0 );
- s_pam_password = 0;
- }
- ::pam_end ( pamh, pam_error );
- return ( pam_error == PAM_SUCCESS );
+ static struct pam_conv conv = { &LoginApplication::pam_helper, 0 };
+
+ int pam_error;
+ pam_handle_t *pamh = 0;
+
+ pam_error = ::pam_start( "xdm", user, &conv, &pamh );
+ if ( pam_error == PAM_SUCCESS ) {
+ s_pam_password = pass;
+ pam_error = ::pam_authenticate ( pamh, 0 );
+ s_pam_password = 0;
+ }
+ ::pam_end ( pamh, pam_error );
+ return ( pam_error == PAM_SUCCESS );
}
#else
bool LoginApplication::checkPassword ( const char *user, const char *pass )
{
- char *encrypted, *correct;
- struct passwd *pw;
+ char *encrypted, *correct;
+ struct passwd *pw;
- if ( !user || !pass )
- return false;
+ if ( !user || !pass )
+ return false;
- pw = ::getpwnam ( user );
+ pw = ::getpwnam ( user );
- if ( !pw )
- return false;
+ if ( !pw )
+ return false;
- if (( ::strcmp ( pw-> pw_passwd, "x" ) == 0 ) || ( ::strcmp ( pw-> pw_passwd, "*" ) == 0 )) {
- struct spwd *sp = ::getspnam ( pw-> pw_name );
+ if (( ::strcmp ( pw-> pw_passwd, "x" ) == 0 ) || ( ::strcmp ( pw-> pw_passwd, "*" ) == 0 )) {
+ struct spwd *sp = ::getspnam ( pw-> pw_name );
- if ( !sp )
- return false;
+ if ( !sp )
+ return false;
- correct = sp-> sp_pwdp;
- }
- else
- correct = pw-> pw_passwd;
+ correct = sp-> sp_pwdp;
+ }
+ else
+ correct = pw-> pw_passwd;
- if ( correct == 0 || correct[0] == '\0' )
- return true;
+ if ( correct == 0 || correct[0] == '\0' )
+ return true;
- encrypted = ::crypt ( pass, correct );
- return ( ::strcmp ( encrypted, correct ) == 0 );
+ encrypted = ::crypt ( pass, correct );
+ return ( ::strcmp ( encrypted, correct ) == 0 );
}
#endif
bool LoginApplication::changeIdentity ( )
{
- const char *DEFAULT_LOGIN_PATH = "/bin:/usr/bin";
- const char *DEFAULT_ROOT_LOGIN_PATH = "/usr/sbin:/bin:/usr/bin:/sbin";
-
- if ( !s_username )
- return false;
- struct passwd *pw = ::getpwnam ( s_username );
- if ( !pw )
- return false;
-
- // we are still root at this point - try to run the pre-session script
- if ( !runRootScript ( "OPIEDIR", "share/opie-login/pre-session", s_username ))
- qWarning ( "failed to run $OPIEDIR/share/opie-login/pre-session" );
-
- bool fail = false;
- fail |= ( ::initgroups ( pw-> pw_name, pw-> pw_gid ));
- ::endgrent ( );
- fail |= ( ::setgid ( pw-> pw_gid ));
- fail |= ( ::setuid ( pw-> pw_uid ));
-
- fail |= ( ::chdir ( pw-> pw_dir ) && ::chdir ( "/" ));
-
- fail |= ( ::setenv ( "HOME", pw-> pw_dir, 1 ));
- fail |= ( ::setenv ( "SHELL", pw-> pw_shell, 1 ));
- fail |= ( ::setenv ( "USER", pw-> pw_name, 1 ));
- fail |= ( ::setenv ( "LOGNAME", pw-> pw_name, 1 ));
- fail |= ( ::setenv ( "PATH", ( pw-> pw_uid ? DEFAULT_LOGIN_PATH : DEFAULT_ROOT_LOGIN_PATH ), 1 ));
-
- return !fail;
+ const char *DEFAULT_LOGIN_PATH = "/bin:/usr/bin";
+ const char *DEFAULT_ROOT_LOGIN_PATH = "/usr/sbin:/bin:/usr/bin:/sbin";
+
+ if ( !s_username )
+ return false;
+ struct passwd *pw = ::getpwnam ( s_username );
+ if ( !pw )
+ return false;
+
+ // we are still root at this point - try to run the pre-session script
+ if ( !runRootScript ( "OPIEDIR", "share/opie-login/pre-session", s_username ))
+ owarn << "failed to run $OPIEDIR/share/opie-login/pre-session" << oendl;
+
+ bool fail = false;
+ fail |= ( ::initgroups ( pw-> pw_name, pw-> pw_gid ));
+ ::endgrent ( );
+ fail |= ( ::setgid ( pw-> pw_gid ));
+ fail |= ( ::setuid ( pw-> pw_uid ));
+
+ fail |= ( ::chdir ( pw-> pw_dir ) && ::chdir ( "/" ));
+
+ fail |= ( ::setenv ( "HOME", pw-> pw_dir, 1 ));
+ fail |= ( ::setenv ( "SHELL", pw-> pw_shell, 1 ));
+ fail |= ( ::setenv ( "USER", pw-> pw_name, 1 ));
+ fail |= ( ::setenv ( "LOGNAME", pw-> pw_name, 1 ));
+ fail |= ( ::setenv ( "PATH", ( pw-> pw_uid ? DEFAULT_LOGIN_PATH : DEFAULT_ROOT_LOGIN_PATH ), 1 ));
+
+ return !fail;
}
bool LoginApplication::login ( )
{
- execUserScript ( "HOME", ".opie-session" );
- execUserScript ( "OPIEDIR", "share/opie-login/opie-session" );
- execUserScript ( "OPIEDIR", "bin/qpe" );
-
- qWarning ( "failed to start an Opie session" );
- return false;
+ execUserScript ( "HOME", ".opie-session" );
+ execUserScript ( "OPIEDIR", "share/opie-login/opie-session" );
+ execUserScript ( "OPIEDIR", "bin/qpe" );
+
+ owarn << "failed to start an Opie session" << oendl;
+ return false;
}
void LoginApplication::logout ( )
{
- // we are now root again - try to run the post-session script
- if ( !runRootScript ( "OPIEDIR", "share/opie-login/post-session" ))
- qWarning ( "failed to run $OPIEDIR/scripts/post-session" );
+ // we are now root again - try to run the post-session script
+ if ( !runRootScript ( "OPIEDIR", "share/opie-login/post-session" ))
+ owarn << "failed to run $OPIEDIR/scripts/post-session" << oendl;
}
static char *buildarg ( const char *base, const char *script )
{
- const char *dir = base ? ::getenv ( base ) : "/";
- char *arg = new char [::strlen ( dir ) + ::strlen ( script ) + 2];
+ const char *dir = base ? ::getenv ( base ) : "/";
+ char *arg = new char [::strlen ( dir ) + ::strlen ( script ) + 2];
- ::strcpy ( arg, dir );
- ::strcat ( arg, "/" );
- ::strcat ( arg, script );
+ ::strcpy ( arg, dir );
+ ::strcat ( arg, "/" );
+ ::strcat ( arg, script );
- return arg;
+ return arg;
}
bool LoginApplication::runRootScript ( const char *base, const char *script, const char *param )
{
- bool res = false;
- char *arg = buildarg ( base, script );
-
- struct stat st;
- if (( ::stat ( arg, &st ) == 0 ) && ( st. st_uid == 0 )) {
- pid_t child = ::fork ( );
-
- if ( child == 0 ) {
- ::execl ( "/bin/sh", "-sh", arg, param, 0 );
- ::_exit ( -1 );
- }
- else if ( child > 0 ) {
- int status = 0;
-
- while ( ::waitpid ( child, &status, 0 ) < 0 ) { }
- res = ( WIFEXITED( status )) && ( WEXITSTATUS( status ) == 0 );
- }
- }
-
- delete [] arg;
- return res;
+ bool res = false;
+ char *arg = buildarg ( base, script );
+
+ struct stat st;
+ if (( ::stat ( arg, &st ) == 0 ) && ( st. st_uid == 0 )) {
+ pid_t child = ::fork ( );
+
+ if ( child == 0 ) {
+ ::execl ( "/bin/sh", "-sh", arg, param, 0 );
+ ::_exit ( -1 );
+ }
+ else if ( child > 0 ) {
+ int status = 0;
+
+ while ( ::waitpid ( child, &status, 0 ) < 0 ) { }
+ res = ( WIFEXITED( status )) && ( WEXITSTATUS( status ) == 0 );
+ }
+ }
+
+ delete [] arg;
+ return res;
}
void LoginApplication::execUserScript ( const char *base, const char *script )
{
- char *arg = buildarg ( base, script );
-
- struct stat st;
- if ( ::stat ( arg, &st ) == 0 ) {
- if ( st. st_mode & S_IXUSR )
- ::execl ( "/bin/sh", "-sh", "-c", arg, 0 );
- else
- ::execl ( "/bin/sh", "-sh", arg, 0 );
- }
+ char *arg = buildarg ( base, script );
+
+ struct stat st;
+ if ( ::stat ( arg, &st ) == 0 ) {
+ if ( st. st_mode & S_IXUSR )
+ ::execl ( "/bin/sh", "-sh", "-c", arg, 0 );
+ else
+ ::execl ( "/bin/sh", "-sh", arg, 0 );
+ }
}
const char *LoginApplication::loginAs ( )
{
- return s_username;
+ return s_username;
}
void LoginApplication::setLoginAs ( const char *name )
{
- s_username = name;
+ s_username = name;
}
QStringList LoginApplication::allUsers ( )
{
- struct passwd *pwd;
- QStringList sl;
+ struct passwd *pwd;
+ QStringList sl;
- while (( pwd = ::getpwent ( ))) {
- if (( pwd-> pw_uid == 0 ) || ( pwd-> pw_uid >= 500 && pwd-> pw_uid < 65534 ))
- sl << QString ( pwd-> pw_name );
- }
+ while (( pwd = ::getpwent ( ))) {
+ if (( pwd-> pw_uid == 0 ) || ( pwd-> pw_uid >= 500 && pwd-> pw_uid < 65534 ))
+ sl << QString ( pwd-> pw_name );
+ }
- ::endpwent ( );
+ ::endpwent ( );
- return sl;
+ return sl;
}
void LoginApplication::quitToConsole ( )
{
- QPEApplication::quit ( );
- ::kill ( m_parentpid, SIGTERM );
+ QPEApplication::quit ( );
+ ::kill ( m_parentpid, SIGTERM );
}
diff --git a/core/pim/addressbook/namelineedit.cpp b/core/pim/addressbook/namelineedit.cpp
index ba16e2c..81b959b 100644
--- a/core/pim/addressbook/namelineedit.cpp
+++ b/core/pim/addressbook/namelineedit.cpp
@@ -1,55 +1,59 @@
#include "namelineedit.h"
+/* OPIE */
+#include <opie2/odebug.h>
+
+
namespace ABOOK {
NameLineEdit::NameLineEdit( QWidget* parent, const char* name )
: QLineEdit( parent, name ), m_prevSpace( true ) {
}
NameLineEdit::NameLineEdit( const QString& str, QWidget* par,
const char* name )
: QLineEdit( str, par, name ),m_prevSpace( true ) {
}
NameLineEdit::~NameLineEdit() {
}
void NameLineEdit::keyPressEvent( QKeyEvent* ev ) {
QString t = ev->text();
int key = ev->key();
int ascii = ev->ascii();
// ### FIXME with composed events
if ( !t.isEmpty() && ( !ev->ascii() || ev->ascii()>=32 ) &&
key != Key_Delete && key != Key_Backspace &&
key != Key_Return && key != Key_Enter ) {
- qWarning( "str " + ev->text() + " %d", m_prevSpace );
+ owarn << "str " << ev->text() << " " << m_prevSpace << oendl;
if ( m_prevSpace ) {
t = t.upper();
m_prevSpace = false;
}
if ( key == Key_Space )
m_prevSpace = true;
QKeyEvent nEv(ev->type(), key, ascii, ev->state(),
t, ev->isAutoRepeat(), ev->count() );
QLineEdit::keyPressEvent( &nEv );
if ( !nEv.isAccepted() )
ev->ignore();
}else {
QLineEdit::keyPressEvent( ev );
/* if key was a backspace lets see if we should
* capitalize the next letter
*/
if ( key == Key_Backspace ) {
QString te = text();
/* if string is empty capitalize the first letter */
/* else see if we're at the end of the string */
if ( te.isEmpty() || cursorPosition() == te.length() )
m_prevSpace = true;
}
}
}
}
diff --git a/core/qws/transferserver.cpp b/core/qws/transferserver.cpp
index 777c384..7bf6719 100644
--- a/core/qws/transferserver.cpp
+++ b/core/qws/transferserver.cpp
@@ -1,215 +1,216 @@
/**********************************************************************
** Copyright (C) 2000-2002 Trolltech AS. All rights reserved.
**
** This file is part of the Qtopia Environment.
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** See http://www.trolltech.com/gpl/ for GPL licensing information.
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**********************************************************************/
/* OPIE */
#include <opie2/odebug.h>
+/* STD */
#define _XOPEN_SOURCE
#include <pwd.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <time.h>
#ifndef Q_OS_MACX
#include <shadow.h>
#endif /* Q_OS_MACX */
/* we need the _OS_LINUX stuff first ! */
#ifndef _OS_LINUX_
// Is anybody able to review this ? The include "uuid/uuid.h" couldn't be found
// anywhere ? Therfore I removed it completely..
// I think it should be made permanentyl !? (eilers)
#warning "Where should uuid/uuid.h be found ? Removed this part .. (eilers)"
#if 0
extern "C"
{
#include <uuid/uuid.h>
#define UUID_H_INCLUDED
}
#endif
#endif // not defined linux
#if defined(_OS_LINUX_)
#include <shadow.h>
#elif defined(Q_OS_MACX)
#include <stdlib.h>
#endif
#include <qtextstream.h>
#include <qmessagebox.h>
//#include <qpe/qcopchannel_qws.h>
#include <qpe/process.h>
#include <qpe/global.h>
#include <qpe/config.h>
#include <qpe/contact.h>
#include <qpe/version.h>
#include <qpe/qcopenvelope_qws.h>
#include "transferserver.h"
#include <opie2/oprocess.h>
using namespace Opie::Core;
const int block_size = 51200;
TransferServer::TransferServer( Q_UINT16 port, QObject *parent ,
const char* name )
: QServerSocket( port, 1, parent, name )
{
if ( !ok() )
owarn << "Failed to bind to port " << port << "" << oendl;
}
TransferServer::~TransferServer()
{
}
void TransferServer::newConnection( int socket )
{
(void) new ServerPI( socket, this );
}
/*
* small class in anonymous namespace
* to generate a QUUid for us
*/
namespace
{
struct UidGen
{
QString uuid();
};
#if defined(Q_OS_MACX)
QString UidGen::uuid()
{
srandom( random() );
QString numStr = QString::number( random() );
return "{" + numStr + "}";
}
#elif defined(_OS_LINUX_)
/*
* linux got a /proc/sys/kernel/random/uuid file
* it'll generate the uuids for us
*/
QString UidGen::uuid()
{
QFile file( "/proc/sys/kernel/random/uuid" );
if (!file.open(IO_ReadOnly ) )
return QString::null;
QTextStream stream(&file);
return "{" + stream.read().stripWhiteSpace() + "}";
}
#else
QString UidGen::uuid()
{
uuid_t uuid;
::uuid_generate( uuid );
return QUUid( uuid ).toString();
}
#endif
}
QString SyncAuthentication::serverId()
{
Config cfg("Security");
cfg.setGroup("Sync");
QString r = cfg.readEntry("serverid");
if ( r.isEmpty() ) {
UidGen gen;
r = gen.uuid();
cfg.writeEntry("serverid", r );
}
return r;
}
QString SyncAuthentication::ownerName()
{
QString vfilename = Global::applicationFileName("addressbook",
"businesscard.vcf");
if (QFile::exists(vfilename)) {
Contact c;
c = Contact::readVCard( vfilename )[0];
return c.fullName();
}
return "";
}
QString SyncAuthentication::loginName()
{
struct passwd *pw;
pw = getpwuid( geteuid() );
return QString::fromLocal8Bit( pw->pw_name );
}
int SyncAuthentication::isAuthorized(QHostAddress peeraddress)
{
Config cfg("Security");
cfg.setGroup("Sync");
// QString allowedstr = cfg.readEntry("auth_peer","192.168.1.0");
uint auth_peer = cfg.readNumEntry("auth_peer", 0xc0a80100);
// QHostAddress allowed;
// allowed.setAddress(allowedstr);
// uint auth_peer = allowed.ip4Addr();
uint auth_peer_bits = cfg.readNumEntry("auth_peer_bits", 24);
uint mask = auth_peer_bits >= 32 // shifting by 32 is not defined
? 0xffffffff : (((1 << auth_peer_bits) - 1) << (32 - auth_peer_bits));
return (peeraddress.ip4Addr() & mask) == auth_peer;
}
bool SyncAuthentication::checkUser( const QString& user )
{
if ( user.isEmpty() )
return FALSE;
QString euser = loginName();
return user == euser;
}
bool SyncAuthentication::checkPassword( const QString& password )
{
#ifdef ALLOW_UNIX_USER_FTP
// First, check system password...
struct passwd *pw = 0;
struct spwd *spw = 0;
pw = getpwuid( geteuid() );
spw = getspnam( pw->pw_name );
QString cpwd = QString::fromLocal8Bit( pw->pw_passwd );
if ( cpwd == "x" && spw )
cpwd = QString::fromLocal8Bit( spw->sp_pwdp );
// Note: some systems use more than crypt for passwords.
QString cpassword = QString::fromLocal8Bit( crypt( password.local8Bit(), cpwd.local8Bit() ) );
if ( cpwd == cpassword )
return TRUE;
#endif
static int lastdenial = 0;
static int denials = 0;
@@ -938,387 +939,386 @@ QString ServerPI::fileListing( QFileInfo *info )
QString ServerPI::permissionString( QFileInfo *info )
{
if ( !info )
return QString( "---------" );
QString s;
// user
if ( info->permission( QFileInfo::ReadUser ) )
s += "r";
else
s += "-";
if ( info->permission( QFileInfo::WriteUser ) )
s += "w";
else
s += "-";
if ( info->permission( QFileInfo::ExeUser ) )
s += "x";
else
s += "-";
// group
if ( info->permission( QFileInfo::ReadGroup ) )
s += "r";
else
s += "-";
if ( info->permission( QFileInfo::WriteGroup ) )
s += "w";
else
s += "-";
if ( info->permission( QFileInfo::ExeGroup ) )
s += "x";
else
s += "-";
// exec
if ( info->permission( QFileInfo::ReadOther ) )
s += "r";
else
s += "-";
if ( info->permission( QFileInfo::WriteOther ) )
s += "w";
else
s += "-";
if ( info->permission( QFileInfo::ExeOther ) )
s += "x";
else
s += "-";
return s;
}
void ServerPI::newConnection( int socket )
{
//odebug << "New incomming connection" << oendl;
if ( !passiv )
return ;
if ( wait[SendFile] ) {
QStringList targets;
if ( backupRestoreGzip( waitfile, targets ) )
dtp->sendGzipFile( waitfile, targets );
else
dtp->sendFile( waitfile );
dtp->setSocket( socket );
}
else if ( wait[RetrieveFile] ) {
odebug << "check retrieve file" << oendl;
if ( backupRestoreGzip( waitfile ) )
dtp->retrieveGzipFile( waitfile );
else
dtp->retrieveFile( waitfile );
dtp->setSocket( socket );
}
else if ( wait[SendByteArray] ) {
dtp->sendByteArray( waitarray );
dtp->setSocket( socket );
}
else if ( wait[RetrieveByteArray] ) {
odebug << "retrieve byte array" << oendl;
dtp->retrieveByteArray();
dtp->setSocket( socket );
}
else
waitsocket = socket;
for ( int i = 0; i < 4; i++ )
wait[i] = FALSE;
}
QString ServerPI::absFilePath( const QString& file )
{
if ( file.isEmpty() )
return file;
QString filepath( file );
if ( file[0] != "/" )
filepath = directory.path() + "/" + file;
return filepath;
}
void ServerPI::timerEvent( QTimerEvent * )
{
connectionClosed();
}
ServerDTP::ServerDTP( QObject *parent, const char* name)
: QSocket( parent, name ), mode( Idle ), createTargzProc( 0 ),
retrieveTargzProc( 0 ), gzipProc( 0 )
{
connect( this, SIGNAL( connected() ), SLOT( connected() ) );
connect( this, SIGNAL( connectionClosed() ), SLOT( connectionClosed() ) );
connect( this, SIGNAL( bytesWritten(int) ), SLOT( bytesWritten(int) ) );
connect( this, SIGNAL( readyRead() ), SLOT( readyRead() ) );
gzipProc = new Opie::Core::OProcess( this, "gzipProc" );
createTargzProc = new Opie::Core::OProcess( QString("tar"), this, "createTargzProc");
createTargzProc->setWorkingDirectory( QDir::rootDirPath() );
connect( createTargzProc, SIGNAL( processExited(Opie::Core::OProcess*) ), SLOT( targzDone() ) );
QStringList args = "tar";
args += "-xv";
retrieveTargzProc = new Opie::Core::OProcess( args, this, "retrieveTargzProc" );
retrieveTargzProc->setWorkingDirectory( QDir::rootDirPath() );
connect( retrieveTargzProc, SIGNAL( processExited(Opie::Core::OProcess*) ),
SIGNAL( completed() ) );
connect( retrieveTargzProc, SIGNAL( processExited(Opie::Core::OProcess*) ),
SLOT( extractTarDone() ) );
}
ServerDTP::~ServerDTP()
{
buf.close();
file.close();
createTargzProc->kill();
}
void ServerDTP::extractTarDone()
{
odebug << "extract done" << oendl;
#ifndef QT_NO_COP
QCopEnvelope e( "QPE/Desktop", "restoreDone(QString)" );
e << file.name();
#endif
}
void ServerDTP::connected()
{
// send file mode
switch ( mode ) {
case SendFile :
if ( !file.exists() || !file.open( IO_ReadOnly) ) {
emit failed();
mode = Idle;
return ;
}
//odebug << "Debug: Sending file '" << file.name() << "'" << oendl;
bytes_written = 0;
if ( file.size() == 0 ) {
//make sure it doesn't hang on empty files
file.close();
emit completed();
mode = Idle;
}
else {
if ( !file.atEnd() ) {
QCString s;
s.resize( block_size );
int bytes = file.readBlock( s.data(), block_size );
writeBlock( s.data(), bytes );
}
}
break;
case SendGzipFile:
if ( createTargzProc->isRunning() ) {
// SHOULDN'T GET HERE, BUT DOING A SAFETY CHECK ANYWAY
owarn << "Previous tar --gzip process is still running; killing it..." << oendl;
createTargzProc->kill();
}
bytes_written = 0;
odebug << "==>start send tar process" << oendl;
if ( !createTargzProc->start(Opie::Core::OProcess::NotifyOnExit, Opie::Core::OProcess::Stdout) )
- qWarning("Error starting %s or %s",
- createTargzProc->args()[0].data(),
- gzipProc->args()[0].data());
+ owarn << "Error starting " << createTargzProc->args()[0].data()
+ << " or " << gzipProc->args()[0].data() << oendl;
break;
case SendBuffer:
if ( !buf.open( IO_ReadOnly) ) {
emit failed();
mode = Idle;
return ;
}
// odebug << "Debug: Sending byte array" << oendl;
bytes_written = 0;
while ( !buf.atEnd() )
putch( buf.getch() );
buf.close();
break;
case RetrieveFile:
// retrieve file mode
if ( file.exists() && !file.remove() ) {
emit failed();
mode = Idle;
return ;
}
if ( !file.open( IO_WriteOnly) ) {
emit failed();
mode = Idle;
return ;
}
// odebug << "Debug: Retrieving file " << file.name() << "" << oendl;
break;
case RetrieveGzipFile:
odebug << "=-> starting tar process to receive .tgz file" << oendl;
break;
case RetrieveBuffer:
// retrieve buffer mode
if ( !buf.open( IO_WriteOnly) ) {
emit failed();
mode = Idle;
return ;
}
// odebug << "Debug: Retrieving byte array" << oendl;
break;
case Idle:
odebug << "connection established but mode set to Idle; BUG!" << oendl;
break;
}
}
void ServerDTP::connectionClosed()
{
//odebug << "Debug: Data connection closed " << bytes_written << " bytes written" << oendl;
// send file mode
if ( SendFile == mode ) {
if ( bytes_written == file.size() )
emit completed();
else
emit failed();
}
// send buffer mode
else if ( SendBuffer == mode ) {
if ( bytes_written == buf.size() )
emit completed();
else
emit failed();
}
// retrieve file mode
else if ( RetrieveFile == mode ) {
file.close();
emit completed();
}
else if ( RetrieveGzipFile == mode ) {
odebug << "Done writing ungzip file; closing input" << oendl;
gzipProc->flushStdin();
gzipProc->closeStdin();
}
// retrieve buffer mode
else if ( RetrieveBuffer == mode ) {
buf.close();
emit completed();
}
mode = Idle;
}
void ServerDTP::bytesWritten( int bytes )
{
bytes_written += bytes;
// send file mode
if ( SendFile == mode ) {
if ( bytes_written == file.size() ) {
// odebug << "Debug: Sending complete: " << file.size() << " bytes" << oendl;
file.close();
emit completed();
mode = Idle;
}
else if ( !file.atEnd() ) {
QCString s;
s.resize( block_size );
int bytes = file.readBlock( s.data(), block_size );
writeBlock( s.data(), bytes );
}
}
// send buffer mode
if ( SendBuffer == mode ) {
if ( bytes_written == buf.size() ) {
// odebug << "Debug: Sending complete: " << buf.size() << " bytes" << oendl;
emit completed();
mode = Idle;
}
}
}
void ServerDTP::readyRead()
{
// retrieve file mode
if ( RetrieveFile == mode ) {
QCString s;
s.resize( bytesAvailable() );
readBlock( s.data(), bytesAvailable() );
file.writeBlock( s.data(), s.size() );
}
else if ( RetrieveGzipFile == mode ) {
if ( !gzipProc->isRunning() )
gzipProc->start(Opie::Core::OProcess::NotifyOnExit, (Opie::Core::OProcess::Communication) ( Opie::Core::OProcess::Stdin | Opie::Core::OProcess::Stdout ));
QByteArray s;
s.resize( bytesAvailable() );
readBlock( s.data(), bytesAvailable() );
gzipProc->writeStdin( s.data(), s.size() );
odebug << "wrote " << s.size() << " bytes to ungzip " << oendl;
}
// retrieve buffer mode
else if ( RetrieveBuffer == mode ) {
QCString s;
s.resize( bytesAvailable() );
readBlock( s.data(), bytesAvailable() );
buf.writeBlock( s.data(), s.size() );
}
}
void ServerDTP::writeTargzBlock(Opie::Core::OProcess *, char *buffer, int buflen)
{
writeBlock( buffer, buflen );
odebug << "writeTargzBlock " << buflen << "" << oendl;
if ( !createTargzProc->isRunning() ) {
odebug << "tar and gzip done" << oendl;
emit completed();
mode = Idle;
disconnect( gzipProc, SIGNAL( receivedStdout(Opie::Core::OProcess*,char*,int) ),
this, SLOT( writeTargzBlock(Opie::Core::OProcess*,char*,int) ) );
}
}
void ServerDTP::targzDone()
{
//odebug << "targz done" << oendl;
disconnect( createTargzProc, SIGNAL( receivedStdout(Opie::Core::OProcess*,char*,int) ),
this, SLOT( gzipTarBlock(Opie::Core::OProcess*,char*,int) ) );
gzipProc->closeStdin();
}
void ServerDTP::gzipTarBlock(Opie::Core::OProcess *, char *buffer, int buflen)
{
//odebug << "gzipTarBlock" << oendl;
if ( !gzipProc->isRunning() ) {
//odebug << "auto start gzip proc" << oendl;
gzipProc->start(Opie::Core::OProcess::NotifyOnExit, (Opie::Core::OProcess::Communication) ( Opie::Core::OProcess::Stdin | Opie::Core::OProcess::Stdout ));
}
gzipProc->writeStdin( buffer, buflen );
}
void ServerDTP::sendFile( const QString fn, const QHostAddress& host, Q_UINT16 port )
{
file.setName( fn );
mode = SendFile;
connectToHost( host.toString(), port );
}
void ServerDTP::sendFile( const QString fn )
{
file.setName( fn );
mode = SendFile;
}