author | kergoth <kergoth> | 2003-08-09 17:29:36 (UTC) |
---|---|---|
committer | kergoth <kergoth> | 2003-08-09 17:29:36 (UTC) |
commit | a0bab0e281fbaf6f6ebbb1a48e5c06426bfbbb93 (patch) (side-by-side diff) | |
tree | 5ce78e1a5dedd31b7851d53bf9f072bd44edd1b0 /core | |
parent | a7e015198a8c5ad3b6e144a9032b059086253e00 (diff) | |
download | opie-a0bab0e281fbaf6f6ebbb1a48e5c06426bfbbb93.zip opie-a0bab0e281fbaf6f6ebbb1a48e5c06426bfbbb93.tar.gz opie-a0bab0e281fbaf6f6ebbb1a48e5c06426bfbbb93.tar.bz2 |
Merge from BRANCH_1_0
-rw-r--r-- | core/applets/batteryapplet/battery.cpp | 10 | ||||
-rw-r--r-- | core/applets/batteryapplet/batterystatus.cpp | 2 | ||||
-rw-r--r-- | core/applets/cardmon/cardmon.cpp | 4 | ||||
-rw-r--r-- | core/applets/homeapplet/home.h | 0 | ||||
-rw-r--r-- | core/applets/restartapplet2/.cvsignore | 1 | ||||
-rw-r--r-- | core/applets/suspendapplet/suspend.h | 0 | ||||
-rw-r--r-- | core/launcher/launcher.cpp | 158 | ||||
-rw-r--r-- | core/obex/obex.cc | 13 | ||||
-rw-r--r-- | core/obex/obexhandler.cpp | 2 | ||||
-rw-r--r-- | core/obex/obeximpl.cpp | 2 | ||||
-rw-r--r-- | core/obex/obexsend.cpp | 2 | ||||
-rw-r--r-- | core/obex/receiver.cpp | 73 | ||||
-rw-r--r-- | core/obex/receiver.h | 5 |
13 files changed, 130 insertions, 142 deletions
diff --git a/core/applets/batteryapplet/battery.cpp b/core/applets/batteryapplet/battery.cpp index 480d261..078ce8d 100644 --- a/core/applets/batteryapplet/battery.cpp +++ b/core/applets/batteryapplet/battery.cpp @@ -113,36 +113,26 @@ void BatteryMeter::chargeTimeout() if ( batteryView ) batteryView->updatePercent( percent ); } void BatteryMeter::paintEvent( QPaintEvent* ) { if ( style == 1 ) { QPainter p(this); QFont f( "Fixed", AppLnk::smallIconSize()/2 ); QFontMetrics fm( f ); p.setFont( f ); - if ( percent > 98 ) { - p.drawText( 0, 0, width(), height(), Qt::AlignCenter, tr( "F" ) ); - } - else if ( percent < 5 ) - { - p.drawText( 0, 0, width(), height(), Qt::AlignCenter, tr( "E" ) ); - } - else - { p.drawText( 0, AppLnk::smallIconSize()/2, QString::number( percent ) ); p.drawText( AppLnk::smallIconSize()/4, AppLnk::smallIconSize(), "%" ); - } return; } QPainter p(this); QColor color; QColor g = gray.light( 160 ); switch ( ps->acStatus() ) { case PowerStatus::Offline: color = blue.light( 150 ); break; case PowerStatus::Online: color = green.dark( 130 ).light( 180 ); break; default: color = red.light( 160 ); } diff --git a/core/applets/batteryapplet/batterystatus.cpp b/core/applets/batteryapplet/batterystatus.cpp index 092a48d..5936b5d 100644 --- a/core/applets/batteryapplet/batterystatus.cpp +++ b/core/applets/batteryapplet/batterystatus.cpp @@ -231,25 +231,25 @@ void BatteryStatus::paintEvent( QPaintEvent * ) { QString jacketMsg; if (bat2) { p.setPen(black); p.drawText(10,220, tr("Percentage battery remaining: ") + perc2 + " " + jackStatus); p.drawText(10,240, tr("Battery time remaining: ") + sec2); jacketMsg = tr("Jacket " + jackChem); } else { jackPercent = 0; jacketMsg = tr("No jacket with battery inserted"); } - int jackPerc = ( jackPercent / 100.0 ) * screenWidth - 47; + int jackPerc = ( jackPercent / 100.0 ) * ( screenWidth - 47 ) ; qDrawShadePanel( &p, 9, 160, rightEnd1, 39, colorGroup(), TRUE, 1, NULL); qDrawShadePanel( &p, rightEnd2, 167, 12, 24, colorGroup(), TRUE, 1, NULL); drawSegment( &p, QRect( 10, 160, jackPerc, 40 ), lightc, darkc, lightc.light(115), 6 ); drawSegment( &p, QRect( 11 + jackPerc, 160, rightEnd1 - jackPerc, 40 ), white.light(80), black, white.light(90), 6 ); drawSegment( &p, QRect( rightEnd2, 167, 10, 25 ), white.light(80), black, white.light(90), 2 ); p.setPen( black ); p.drawText(15, 180, jacketMsg); } } diff --git a/core/applets/cardmon/cardmon.cpp b/core/applets/cardmon/cardmon.cpp index b8c4553..4ed09b8 100644 --- a/core/applets/cardmon/cardmon.cpp +++ b/core/applets/cardmon/cardmon.cpp @@ -263,25 +263,27 @@ bool CardMonitor::getStatusPcmcia(int showPopUp) if (cardWas1 != cardInPcmcia1) { if (cardInPcmcia1) { text += tr("New card: "); what = "on"; } else { text += tr("Ejected: "); what = "off"; } text += cardInPcmcia1Name; popUp(text, "cardmon/" + cardInPcmcia1Type); } +#ifndef QT_NO_SOUND QSound::play(Resource::findSound("cardmon/card" + what)); +#endif } } else { // no file found qDebug("no file found"); cardInPcmcia0 = FALSE; cardInPcmcia1 = FALSE; } repaint( FALSE ); return ((cardWas0 == cardInPcmcia0 && cardWas1 == cardInPcmcia1) ? FALSE : TRUE); } @@ -315,25 +317,27 @@ bool CardMonitor::getStatusSd(int showPopUp) if (!showPopUp && cardWas != cardInSd) { QString text = QString::null; QString what = QString::null; if (cardInSd) { text += "New card: SD/MMC"; what = "on"; } else { text += "Ejected: SD/MMC"; what = "off"; } //qDebug("TEXT: " + text ); +#ifndef QT_NO_SOUND QSound::play(Resource::findSound("cardmon/card" + what)); +#endif popUp(text, "cardmon/ide"); // XX add SD pic } #else #error "Not on Linux" #endif repaint( FALSE ); return ((cardWas == cardInSd) ? FALSE : TRUE); } void CardMonitor::paintEvent(QPaintEvent *) { diff --git a/core/applets/homeapplet/home.h b/core/applets/homeapplet/home.h index 64af97d..1186caf 100644 --- a/core/applets/homeapplet/home.h +++ b/core/applets/homeapplet/home.h diff --git a/core/applets/restartapplet2/.cvsignore b/core/applets/restartapplet2/.cvsignore index a403d26..4943911 100644 --- a/core/applets/restartapplet2/.cvsignore +++ b/core/applets/restartapplet2/.cvsignore @@ -1,7 +1,6 @@ *.moc *.~ Makefile* config.in moc_* opieobjconfig.in -opieobj diff --git a/core/applets/suspendapplet/suspend.h b/core/applets/suspendapplet/suspend.h index 0c92bcb..75467c1 100644 --- a/core/applets/suspendapplet/suspend.h +++ b/core/applets/suspendapplet/suspend.h diff --git a/core/launcher/launcher.cpp b/core/launcher/launcher.cpp index 0205622..8b2907a 100644 --- a/core/launcher/launcher.cpp +++ b/core/launcher/launcher.cpp @@ -13,26 +13,24 @@ ** ** 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. ** **********************************************************************/ // WARNING: Do *NOT* define this yourself. The SL5xxx from SHARP does NOT // have this class. #define QTOPIA_INTERNAL_FSLP -//#include <opie/ofiledialog.h> -#include <opie/ofileselector.h> #include <qpe/qcopenvelope_qws.h> #include <qpe/resource.h> #include <qpe/applnk.h> #include <qpe/config.h> #include <qpe/global.h> #include <qpe/qpeapplication.h> #include <qpe/mimetype.h> #include <qpe/storage.h> #include <qpe/palmtoprecord.h> #include <qpe/version.h> @@ -156,59 +154,59 @@ void CategoryTabWidget::nextTab() void CategoryTabWidget::showTab(const QString& id) { if ( categoryBar ) { int idx = ids.findIndex( id ); categoryBar->setCurrentTab( idx ); } } void CategoryTabWidget::addItem( const QString& linkfile ) { -// int i=0; -// AppLnk *app = new AppLnk(linkfile); -// if ( !app->isValid() ) { -// delete app; -// app=0; -// } -// if ( !app || !app->file().isEmpty() ) { + int i=0; + AppLnk *app = new AppLnk(linkfile); + if ( !app->isValid() ) { + delete app; + app=0; + } + if ( !app || !app->file().isEmpty() ) { // A document -// delete app; -// app = new DocLnk(linkfile); -// if ( app->fileKnown() ) { -// ((LauncherView*)(stack->widget(ids.count()-1)))->addItem(app); -// } else { -// ((LauncherView*)(stack->widget(ids.count()-1)))->sort(); -// delete app; -// } -// return; -// } + delete app; + app = new DocLnk(linkfile); + if ( app->fileKnown() ) { + ((LauncherView*)(stack->widget(ids.count()-1)))->addItem(app); + } else { + ((LauncherView*)(stack->widget(ids.count()-1)))->sort(); + delete app; + } + return; + } // An application -// for ( QStringList::Iterator it=ids.begin(); it!=ids.end(); ++it) { -// if ( !(*it).isEmpty() ) { -// QRegExp tf(*it,FALSE,TRUE); -// if ( tf.match(app->type()) >= 0 ) { -// ((LauncherView*)stack->widget(i))->addItem(app); -// return; -// } -// i++; - // } - // } + for ( QStringList::Iterator it=ids.begin(); it!=ids.end(); ++it) { + if ( !(*it).isEmpty() ) { + QRegExp tf(*it,FALSE,TRUE); + if ( tf.match(app->type()) >= 0 ) { + ((LauncherView*)stack->widget(i))->addItem(app); + return; + } + i++; + } + } QCopEnvelope e("QPE/TaskBar","reloadApps()"); } void CategoryTabWidget::initializeCategories(AppLnkSet* rootFolder, - AppLnkSet* /*docFolder*/, const QList<FileSystem> & /*fs*/) + AppLnkSet* docFolder, const QList<FileSystem> &fs) { QString current; if ( categoryBar ) { int c = categoryBar->currentTab(); if ( c >= 0 ) current = ids[c]; } delete categoryBar; categoryBar = new CategoryTabBar( this ); QPalette pal = categoryBar->palette(); pal.setColor( QColorGroup::Light, pal.color(QPalette::Active,QColorGroup::Shadow) ); pal.setColor( QColorGroup::Background, pal.active().background().light(110) ); @@ -244,70 +242,49 @@ void CategoryTabWidget::initializeCategories(AppLnkSet* rootFolder, } } ++it; } rootFolder->detachChildren(); for (int i=0; i<tabs; i++) ((LauncherView*)stack->widget(i))->sort(); // all documents QImage img( Resource::loadImage( "DocsIcon" ) ); QPixmap pm; pm = img.smoothScale( AppLnk::smallIconSize(), AppLnk::smallIconSize() ); - - //ljpotter - CategoryTab *catTab ; - catTab = new CategoryTab( pm, "Documents" ); - - categoryBar->addTab( catTab ); - - fileSel = new DocumentTab( stack, 4, 0, "/",""); - stack->addWidget( fileSel, tabs++ ); - - // fileSel->hide(); - - connect( fileSel, SIGNAL( fileSelected( const DocLnk & )), - this, SLOT(clickie(const DocLnk&)) ); - -// connect( fileSel, SIGNAL( fileSelected( const QString & )), -// this, SLOT(clickie(const QString&)) ); + docview = newView( "Documents", // No tr + pm, tr("Documents")); + docview->populate( docFolder, QString::null ); + docFolder->detachChildren(); + docview->setFileSystems(fs); + docview->setToolsEnabled(TRUE); + setTabAppearance( "Documents", cfg ); // No tr connect( categoryBar, SIGNAL(selected(int)), stack, SLOT(raiseWidget(int)) ); ((LauncherView*)stack->widget(0))->setFocus(); cfg. setGroup ( "GUI" ); setBusyIndicatorType ( cfg. readEntry ( "BusyType", QString::null )); if ( !current.isNull() ) { showTab(current); } categoryBar->show(); stack->show(); - QCopEnvelope e("QPE/TaskBar","reloadApps()"); } -void CategoryTabWidget::clickie(const DocLnk &lnk) { - lnk.execute(); - // fileSel->reparse(); -} - -void CategoryTabWidget::clickie(const QString &appStr) { -// DocLnk lnk(appStr); -// lnk.execute(); -} - void CategoryTabWidget::setTabAppearance( const QString &id, Config &cfg ) { QString grp( "Tab %1" ); // No tr cfg.setGroup( grp.arg(id) ); LauncherView *v = view( id ); int idx = ids.findIndex( id ); CategoryTab *tab = (CategoryTab *)categoryBar->tab( idx ); // View QString view = cfg.readEntry( "View", "Icon" ); if ( view == "List" ) // No tr v->setViewMode( LauncherView::List ); @@ -332,90 +309,94 @@ void CategoryTabWidget::setTabAppearance( const QString &id, Config &cfg ) QString tabCol = cfg.readEntry( "TabColor" ); if ( tabCol.isEmpty() ) tab->bgColor = QColor(); else tab->bgColor = QColor(tabCol); QString tabTextCol = cfg.readEntry( "TabTextColor" ); if ( tabTextCol.isEmpty() ) tab->fgColor = QColor(); else tab->fgColor = QColor(tabTextCol); } -//void CategoryTabWidget::updateDocs(AppLnkSet* docFolder, const QList<FileSystem> & /*fs*/) -//{ - // docFolder->detachChildren(); -//} +void CategoryTabWidget::updateDocs(AppLnkSet* docFolder, const QList<FileSystem> &fs) +{ + docview->populate( docFolder, QString::null ); + docFolder->detachChildren(); + docview->setFileSystems(fs); + docview->updateTools(); +} void CategoryTabWidget::tabProperties() { LauncherView *view = (LauncherView*)stack->widget( categoryBar->currentTab() ); 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 ); } delete m; } QString CategoryTabWidget::getAllDocLinkInfo() const { - return ""; + return docview->getAllDocLinkInfo(); } LauncherView* CategoryTabWidget::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*))); connect( view, SIGNAL(rightPressed(AppLnk*)), this, SIGNAL(rightPressed(AppLnk*))); ids.append(id); categoryBar->addTab( new CategoryTab( pm, label ) ); stack->addWidget( view, tabs++ ); return view; } void CategoryTabWidget::updateLink(const QString& linkfile) { - // LauncherView* view; - qApp->processEvents(); -// while ((view = (LauncherView*)stack->widget(i++))) { -// if ( view->removeLink(linkfile) ) -// break; -// } - // addItem(linkfile); - fileSel->reparse(); + int i=0; + LauncherView* view; + //qApp->processEvents(); + while ((view = (LauncherView*)stack->widget(i++))) { + if ( view->removeLink(linkfile) ) + break; + } + addItem(linkfile); + docview->updateTools(); } void CategoryTabWidget::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 CategoryTabWidget::setBusy(bool on) { if ( on ) ((LauncherView*)stack->visibleWidget())->setBusy(TRUE); else - for (int i=0; i<tabs-1; i++) + for (int i=0; i<tabs; i++) ((LauncherView*)stack->widget(i))->setBusy(FALSE); } LauncherView *CategoryTabWidget::view( const QString &id ) { int idx = ids.findIndex( id ); return (LauncherView *)stack->widget(idx); } void CategoryTabWidget::setBusyIndicatorType ( const QString &type ) { for ( QStringList::Iterator it = ids. begin ( ); it != ids. end ( ); ++it ) @@ -658,25 +639,24 @@ Launcher::Launcher( QWidget* parent, const char* name, WFlags fl ) m_timeStamp = QString::number( stamp ); tabs = new CategoryTabWidget( this ); setCentralWidget( tabs ); connect( tabs, SIGNAL(selected(const QString&)), this, SLOT(viewSelected(const QString&)) ); connect( tabs, SIGNAL(clicked(const AppLnk*)), this, SLOT(select(const AppLnk*))); connect( tabs, SIGNAL(rightPressed(AppLnk*)), this, SLOT(properties(AppLnk*))); - #if !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 &)) ); QCopChannel *channel = new QCopChannel( "QPE/Launcher", this ); connect( channel, SIGNAL(received(const QCString&, const QByteArray&)), this, SLOT(launcherMessage(const QCString&, const QByteArray&)) ); #endif storage = new StorageInfo( this ); connect( storage, SIGNAL( disksChanged() ), SLOT( storageChanged() ) ); @@ -743,78 +723,77 @@ void Launcher::updateMimeTypes(AppLnkSet* folder) * Reason: scanning huge mediums, microdirvers for examples * consomes time. To avoid that we invented the MediumMountCheck * * a) the user globally disabled medium checking. We can ignore * all removable medium * b) the user enabled medium checking globally and we need to use this mimefilter * c) the user enabled medium checking on a per medium bases * c1) we already checked and its not ask again turns * c2) we need to ask and then apply the mimefilter */ void Launcher::loadDocs() // ok here comes a hack belonging to Global:: { + OWait *owait = new OWait(); Global::statusMessage( tr( "Finding documents" ) ); owait->show(); qApp->processEvents(); - if(docsFolder) delete docsFolder; + + delete docsFolder; docsFolder = new DocLnkSet; + DocLnkSet *tmp = 0; QString home = QString(getenv("HOME")) + "/Documents"; tmp = new DocLnkSet( home , QString::null); docsFolder->appendFrom( *tmp ); delete tmp; // RAM documents StorageInfo storage; const QList<FileSystem> &fileSystems = storage.fileSystems(); QListIterator<FileSystem> it ( fileSystems ); for ( ; it.current(); ++it ) { if ( (*it)->disk() == "/dev/mtdblock6" || (*it)->disk() == "tmpfs" ) { tmp = new DocLnkSet( (*it)->path(), QString::null ); docsFolder->appendFrom( *tmp ); delete tmp; } } Config mediumCfg( "medium"); mediumCfg.setGroup("main"); // a) -zecke we don't want to check - if(!mediumCfg.readBoolEntry("use", true ) ) { - owait->hide(); - delete owait; + if(!mediumCfg.readBoolEntry("use", true ) ) return; - } + // find out wich filesystems are new in this round // We will do this by having a timestamp inside each mountpoint // if the current timestamp doesn't match this is a new file system and // come up with our MediumMountGui :) let the hacking begin int stamp = uidgen.generate(); QString newStamp = QString::number( stamp ); // generates newtime Stamp // b) if( mediumCfg.readBoolEntry("global", true ) ){ QString mime = configToMime(&mediumCfg).join(";"); for( it.toFirst(); it.current(); ++it ){ if( (*it)->isRemovable() ){ tmp = new DocLnkSet( (*it)->path(), mime ); docsFolder->appendFrom( *tmp ); delete tmp; } } // done - owait->hide(); - delete owait; return; // save the else } // c) zecke for ( it.toFirst(); it.current(); ++it ) { if ( (*it)->isRemovable() ) { // let's find out if we should search on it Config cfg( (*it)->path() + "/.opiestorage.cf", Config::File); cfg.setGroup("main"); QString stamp = cfg.readEntry("timestamp", QDateTime::currentDateTime().toString() ); /** This medium is uptodate */ if( stamp == m_timeStamp ){ // ok we know this card cfg.writeEntry("timestamp", newStamp ); //just write a new timestamp @@ -860,36 +839,37 @@ void Launcher::loadDocs() // ok here comes a hack belonging to Global:: } } } } m_timeStamp = newStamp; owait->hide(); delete owait; } void Launcher::updateTabs() { MimeType::updateApplications(); // ### reads all applnks twice + delete rootFolder; rootFolder = new AppLnkSet( MimeType::appsFolderName() ); loadDocs(); tabs->initializeCategories(rootFolder, docsFolder, storage->fileSystems()); } void Launcher::updateDocs() { loadDocs(); - // tabs->updateDocs(docsFolder,storage->fileSystems()); + tabs->updateDocs(docsFolder,storage->fileSystems()); } void Launcher::viewSelected(const QString& s) { setCaption( s + tr(" - Launcher") ); } void Launcher::nextView() { tabs->nextTab(); } @@ -1328,28 +1308,12 @@ bool Launcher::mkdir(const QString &localPath) void Launcher::preloadApps() { Config cfg("Launcher"); cfg.setGroup("Preload"); QStringList apps = cfg.readListEntry("Apps",','); for (QStringList::ConstIterator it=apps.begin(); it!=apps.end(); ++it) { #ifndef QT_NO_COP QCopEnvelope e("QPE/Application/"+(*it).local8Bit(), "enablePreload()"); #endif } } - -DocumentTab::DocumentTab( QWidget *parent, int mode, int selector, const QString &dirName, const QString &fileName) - : OFileSelector(parent,mode,selector,dirName,fileName) -{ - setYesCancelVisible(false); - setToolbarVisible(false); - setPermissionBarVisible(false); - setLineEditVisible(false) ; - //setChooserVisible( bool chooser ); - -} - -DocumentTab::~DocumentTab() { - -} - diff --git a/core/obex/obex.cc b/core/obex/obex.cc index 595fed9..2a306de 100644 --- a/core/obex/obex.cc +++ b/core/obex/obex.cc @@ -2,24 +2,26 @@ #include <qapplication.h> #include <qfile.h> #include <qfileinfo.h> #include <qtextcodec.h> #include <qpe/qcopenvelope_qws.h> #include <opie/oprocess.h> #include "obex.h" using namespace OpieObex; +/* 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() ) ); }; @@ -100,47 +102,36 @@ void Obex::sendNow(){ 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 - for (int i = 0; i < len; i++ ) { - printf("%c", buf[i] ); - } - printf("\n"); QByteArray ar( len ); memcpy( ar.data(), buf, len ); qWarning("parsed: %s", ar.data() ); 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() ); - if (filename.contains( 'ö' ) || filename.contains( 'ä' ) || filename.contains('ü' ) ) { - qWarning("renaming!!!!"); - QFileInfo inf( filename ); - QString newName = "/tmp/opie-obex." + inf.extension(); - ::rename( QFile::encodeName( filename ).data(), newName ); - qWarning("name is %s", QFile::encodeName( filename ).data() ); - } emit receivedFile( filename ); } }else{ emit done(false); }; delete m_rec; m_rec = 0; receive(); } void Obex::sendEnd() { if (m_send->normalExit() ) { diff --git a/core/obex/obexhandler.cpp b/core/obex/obexhandler.cpp index 6509d12..5aaf63c 100644 --- a/core/obex/obexhandler.cpp +++ b/core/obex/obexhandler.cpp @@ -1,22 +1,24 @@ #include <qcopchannel_qws.h> #include <qpe/qcopenvelope_qws.h> #include "obexsend.h" #include "receiver.h" #include "obexhandler.h" using namespace OpieObex; +/* TRANSLATOR OpieObex::ObexHandler */ + ObexHandler::ObexHandler() { m_wasRec = false; m_sender = 0l; m_receiver = 0l; QCopChannel* chan = new QCopChannel("QPE/Obex"); connect(chan, SIGNAL(received(const QCString&, const QByteArray& ) ), this, SLOT(irdaMessage(const QCString&, const QByteArray& ) ) ); } ObexHandler::~ObexHandler() { delete m_sender; delete m_receiver; } diff --git a/core/obex/obeximpl.cpp b/core/obex/obeximpl.cpp index 12a078f..5bfc779 100644 --- a/core/obex/obeximpl.cpp +++ b/core/obex/obeximpl.cpp @@ -1,17 +1,19 @@ #include "obexhandler.h" #include "obeximpl.h" using namespace OpieObex; +/* TRANSLATOR OpieObex::ObexImpl */ + ObexImpl::ObexImpl() { m_handler = new ObexHandler; } ObexImpl::~ObexImpl() { delete m_handler; } QRESULT ObexImpl::queryInterface( const QUuid& uuid, QUnknownInterface **iface ) { *iface = 0; if ( uuid == IID_QUnknown ) { *iface = this; }else if ( uuid == IID_ObexInterface ) *iface = this; diff --git a/core/obex/obexsend.cpp b/core/obex/obexsend.cpp index 2931cf7..cf5d958 100644 --- a/core/obex/obexsend.cpp +++ b/core/obex/obexsend.cpp @@ -6,24 +6,26 @@ #include <qtl.h> #include <qcopchannel_qws.h> #include <qpe/resource.h> #include <qpe/qcopenvelope_qws.h> #include "obex.h" #include "obexsend.h" using namespace OpieObex; +/* TRANSLATOR OpieObex::SendWidget */ + SendWidget::SendWidget( QWidget* parent, const char* name ) : QWidget( parent, name ) { initUI(); } SendWidget::~SendWidget() { } void SendWidget::initUI() { m_obex = new Obex(this, "obex"); connect(m_obex, SIGNAL(error(int) ), this, SLOT(slotIrError(int) ) ); connect(m_obex, SIGNAL(sent(bool) ), diff --git a/core/obex/receiver.cpp b/core/obex/receiver.cpp index 31c6afe..bf9e30c 100644 --- a/core/obex/receiver.cpp +++ b/core/obex/receiver.cpp @@ -1,46 +1,52 @@ #include <sys/types.h> #include <sys/stat.h> #include <sys/mman.h> +#include <stdlib.h> // int system #include <unistd.h> #include <fcntl.h> #include <qfile.h> #include <qfileinfo.h> #include <qlabel.h> #include <qhbox.h> +#include <qregexp.h> #include <qtextview.h> #include <qpushbutton.h> #include <qpe/applnk.h> #include <qpe/qpeapplication.h> #include <qpe/qcopenvelope_qws.h> +#include <qpe/global.h> #include "obex.h" #include "receiver.h" using namespace OpieObex; +/* TRANSLATOR OpieObex::Receiver */ + Receiver::Receiver() { m_obex = new Obex(this, "Receiver"); connect(m_obex, SIGNAL(receivedFile(const QString& ) ), this, SLOT(slotReceived(const QString& ) ) ); m_obex->receive(); } Receiver::~Receiver() { m_obex->setReceiveEnabled( false ); delete m_obex; } -void Receiver::slotReceived( const QString& file ) { +void Receiver::slotReceived( const QString& _file ) { + QString file = _file; int check = checkFile(file); if ( check == AddressBook ) handleAddr( file ); else if ( check == Datebook ) handleDateTodo( file ); else handleOther( file ); } void Receiver::handleAddr( const QString& str ) { QCopEnvelope e("QPE/Application/addressbook", "setDocument(QString)" ); e << str; } @@ -50,39 +56,76 @@ void Receiver::handleDateTodo( const QString& str ) { e0 << str; QCopEnvelope e1("QPE/Application/datebook", "setDocument(QString)" ); e1 << str; } /* * Handle other asks if it should accept the * beamed object and creates a DocLnk */ void Receiver::handleOther( const QString& other ) { OtherHandler* hand = new OtherHandler(); hand->handle( other ); } -int Receiver::checkFile( const QString& file ) { +void Receiver::tidyUp( QString& _file, const QString& ending) { + /* libversit fails on BASE64 encoding we try to sed it away */ + QString file = _file; + char foo[24]; // big enough + (void)::strcpy(foo, "/tmp/opie-XXXXXX"); + + int fd = ::mkstemp(foo); + + if ( fd == -1 ) + return; + + (void)::strncat( foo, ending.latin1(), 4 ); + _file = QString::fromLatin1( foo ); + QString cmd = QString("sed -e \"s/^\\(X-MICROSOFT-BODYINK\\)\\;/\\1:/;\" < %2 > %2 ").arg( Global::shellQuote(file)).arg( Global::shellQuote(_file) ); + qWarning("Executing: %s", cmd.latin1() ); + (void)::system( cmd.latin1() ); + + cmd = QString("rm %1").arg( Global::shellQuote(file) ); + (void)::system( cmd.latin1() ); +} +int Receiver::checkFile( QString& file ) { qWarning("check file!! %s", file.latin1() ); int ret; + QString ending; + if (file.right(4) == ".vcs" ) { ret = Datebook; + ending = QString::fromLatin1(".vcs"); }else if ( file.right(4) == ".vcf") { ret = AddressBook; + ending = QString::fromLatin1(".vcf"); }else ret = Other; + if (ending.isEmpty() ) + return ret; + + /** + * currently the parser is broken in regard of BASE64 encoding + * and M$ likes to send that. So we will executed a small + * tidy up system sed script + * At this point we can also remove umlaute from the filename + */ + tidyUp( file, ending ); + qWarning("check it now %d", ret ); return ret; } +/* TRANSLATOR OpieObex::OtherHandler */ + OtherHandler::OtherHandler() : QVBox() { QHBox* box = new QHBox(this); QLabel* lbl = new QLabel(box); lbl->setText(tr("<qt><b>Received:</b></qt>")); m_na = new QLabel(box); QFrame* frame = new QFrame(this); frame->setFrameShape( QFrame::HLine ); frame->setFrameShadow( QFrame::Sunken ); @@ -124,49 +167,37 @@ void OtherHandler::accept() { copy(m_file, na ); DocLnk lnk(na); lnk.writeLink(); QFile::remove(m_file); delete this; } void OtherHandler::deny() { QFile::remove( m_file ); delete this; } QString OtherHandler::targetName( const QString& file ) { QFileInfo info( file ); + + /* $HOME needs to be set!!!! */ + Global::createDocDir(); + QString newFile = QPEApplication::documentDir()+ "/"+ info.baseName(); QString newFileBase = newFile; int trie = 0; while (QFile::exists(newFile + "."+info.extension() ) ) { newFile = newFileBase + "_"+QString::number(trie) ; trie++; } newFile += "." + info.extension(); return newFile; } /* fast cpy */ void OtherHandler::copy(const QString& src, const QString& file) { qWarning("src %s, dest %s", src.latin1(),file.latin1() ); - int src_fd = ::open( QFile::encodeName( src ), O_RDONLY ); - int to_fd = ::open( QFile::encodeName( file), O_RDWR| O_CREAT| O_TRUNC, - S_IRUSR, S_IWUSR, S_IRGRP, S_IRGRP ); - - struct stat stater; - ::fstat(src_fd, &stater ); - ::lseek(to_fd, stater.st_size-1, SEEK_SET ); - ::write(to_fd, "", 1 ); - - void *src_addr, *dest_addr; - src_addr = ::mmap(0, stater.st_size, PROT_READ, - MAP_FILE | MAP_SHARED, src_fd, 0 ); - dest_addr= ::mmap(0, stater.st_size, PROT_READ | PROT_WRITE, - MAP_FILE | MAP_PRIVATE, to_fd, 0 ); - - ::memcpy(dest_addr , src_addr, stater.st_size ); - ::munmap(src_addr , stater.st_size ); - ::munmap(dest_addr, stater.st_size ); - + QString cmd = QString("mv %1 %2").arg( Global::shellQuote( src )). + arg( Global::shellQuote( file ) ); + ::system( cmd.latin1() ); // done } diff --git a/core/obex/receiver.h b/core/obex/receiver.h index 5b20146..e1d54df 100644 --- a/core/obex/receiver.h +++ b/core/obex/receiver.h @@ -12,27 +12,30 @@ namespace OpieObex { class OtherHandler; class Receiver : public QObject { Q_OBJECT public: enum { Datebook , AddressBook, Other }; Receiver(); ~Receiver(); private: void handleAddr(const QString& ); void handleDateTodo(const QString& ); void handleOther(const QString& ); - int checkFile( const QString& file ); + /* will alter the file name */ + int checkFile( QString& file ); bool testDateTodo(const QString& file); bool testAddressbook(const QString& file); + /* called by checkFile */ + void tidyUp( QString& file, const QString& ending ); private slots: void slotReceived( const QString& ); private: Obex* m_obex; }; class OtherHandler : public QVBox { Q_OBJECT public: OtherHandler(); |