author | zecke <zecke> | 2002-07-14 18:04:14 (UTC) |
---|---|---|
committer | zecke <zecke> | 2002-07-14 18:04:14 (UTC) |
commit | 26c7e63572e729b4846e4f7551bb041aa6d4bd83 (patch) (side-by-side diff) | |
tree | 5c3bc09142bd19e84fbebb88f2e37b02e6d603cd | |
parent | 31e233a6cf72bc853137ea05285f4d0f41665365 (diff) | |
download | opie-26c7e63572e729b4846e4f7551bb041aa6d4bd83.zip opie-26c7e63572e729b4846e4f7551bb041aa6d4bd83.tar.gz opie-26c7e63572e729b4846e4f7551bb041aa6d4bd83.tar.bz2 |
- able to configure HCID
- able to save and restore known devices
- able to scan servivces and shows the right pixmap too
- able to do some more
- scan dialog clean up ( tiny )
-rw-r--r-- | noncore/net/opietooth/manager/bluebase.cpp | 84 | ||||
-rw-r--r-- | noncore/net/opietooth/manager/bluebase.h | 1 | ||||
-rw-r--r-- | noncore/net/opietooth/manager/bticonloader.cpp | 2 | ||||
-rw-r--r-- | noncore/net/opietooth/manager/devicehandler.cpp | 87 | ||||
-rw-r--r-- | noncore/net/opietooth/manager/devicehandler.h | 41 | ||||
-rw-r--r-- | noncore/net/opietooth/manager/hciconfwrapper.cpp | 74 | ||||
-rw-r--r-- | noncore/net/opietooth/manager/hciconfwrapper.h | 4 | ||||
-rw-r--r-- | noncore/net/opietooth/manager/manager.pro | 17 | ||||
-rw-r--r-- | noncore/net/opietooth/manager/popuphelper.cpp | 4 | ||||
-rw-r--r-- | noncore/net/opietooth/manager/scandialog.cpp | 35 | ||||
-rw-r--r-- | noncore/net/opietooth/manager/scandialog.h | 6 |
11 files changed, 281 insertions, 74 deletions
diff --git a/noncore/net/opietooth/manager/bluebase.cpp b/noncore/net/opietooth/manager/bluebase.cpp index 3f2f138..598ce16 100644 --- a/noncore/net/opietooth/manager/bluebase.cpp +++ b/noncore/net/opietooth/manager/bluebase.cpp @@ -20,4 +20,6 @@ #include "hciconfwrapper.h" +#include <stdlib.h> + #include <qframe.h> #include <qlabel.h> @@ -45,4 +47,5 @@ #include <services.h> +#include "devicehandler.h" #include "btconnectionitem.h" @@ -67,6 +70,6 @@ using namespace OpieTooth; connect( m_localDevice, SIGNAL( available( const QString&, bool ) ), this, SLOT( deviceActive( const QString& , bool ) ) ); - connect( m_localDevice, SIGNAL( connections( Connection::ValueList ) ), - this, SLOT( addConnectedDevices( Connection::ValueList ) ) ); + connect( m_localDevice, SIGNAL( connections( ConnectionState::ValueList ) ), + this, SLOT( addConnectedDevices( ConnectionState::ValueList ) ) ); //Load all icons needed @@ -104,4 +107,5 @@ using namespace OpieTooth; addConnectedDevices(); m_iconLoader = new BTIconLoader(); + readSavedDevices(); } @@ -141,6 +145,7 @@ using namespace OpieTooth; void BlueBase::writeToHciConfig() { - - HciConfWrapper hciconf ( "/tmp/hcid.conf" ); + qWarning("writeToHciConfig"); + HciConfWrapper hciconf ( "/etc/bluetooth/hcid.conf" ); + hciconf.load(); hciconf.setPinHelper( "/bin/QtPalmtop/bin/blue-pin" ); @@ -153,4 +158,5 @@ using namespace OpieTooth; hciconf.setPscan( m_enablePagescan ); hciconf.setIscan( m_enableInquiryscan ); + hciconf.save(); } @@ -163,24 +169,7 @@ using namespace OpieTooth; QValueList<RemoteDevice> loadedDevices; + DeviceHandler handler; + loadedDevices = handler.load(); - QDir deviceListSave( QDir::homeDirPath() + "/Settings/bluetooth/"); - // list of .conf files - QStringList devicesFileList = deviceListSave.entryList(); - - // cut .conf of to get the mac and also read the name entry in it. - - for ( QStringList::Iterator it = devicesFileList.begin(); it != devicesFileList.end(); ++it ) { - - QString name; - QString mac; - qDebug((*it).latin1() ); - Config conf((*it)); - conf.setGroup("Info"); - name = conf.readEntry("name", "Error"); - qDebug("MAC: " + mac); - qDebug("NAME: " + name); - RemoteDevice currentDevice( mac , name ); - loadedDevices.append( currentDevice ); - } addSearchedDevices( loadedDevices ); } @@ -194,5 +183,5 @@ using namespace OpieTooth; BTListItem* item; BTDeviceItem* device; - + RemoteDevice::ValueList list; for ( ; it.current(); ++it ) { item = (BTListItem*)it.current(); @@ -200,10 +189,14 @@ using namespace OpieTooth; continue; device = (BTDeviceItem*)item; - // seperate config file for each device, to store more information in future. - qDebug( "/Settings/bluetooth/" + device->mac() + ".conf"); - Config conf( QDir::homeDirPath() + "/Settings/bluetooth/" + device->mac() + ".conf", Config::File ); - conf.setGroup( "Info" ); - conf.writeEntry( "name", device->name() ); + + list.append( device->remoteDevice() ); } + /* + * if not empty save the List through DeviceHandler + */ + if ( list.isEmpty() ) + return; + DeviceHandler handler; + handler.save( list ); } @@ -264,4 +257,7 @@ using namespace OpieTooth; for( it = newDevices.begin(); it != newDevices.end() ; ++it ) { + if (find( (*it) )) // is already inserted + continue; + deviceItem = new BTDeviceItem( ListView2 , (*it) ); deviceItem->setExpandable ( true ); @@ -334,8 +330,12 @@ void BlueBase::startServiceActionHold( QListViewItem * item, const QPoint & poin QMap<int, QString>::Iterator it = list.begin(); QPopupMenu *popup =0l; - if ( it != list.end() ) + if ( it != list.end() ) { + qWarning("Searching id %d %s", it.key(), it.data().latin1() ); popup = m_popHelper.find( it.key(), service->services(), service->parent() ); + }else { + qWarning("Empty"); + } if ( popup == 0l ) { @@ -406,7 +406,8 @@ void BlueBase::startServiceActionHold( QListViewItem * item, const QPoint & poin list = (*it2).classIdList(); classIt = list.begin(); - int classId; + int classId=0; if ( classIt != list.end() ) classId = classIt.key(); + serviceItem->setPixmap( 0, m_iconLoader->serviceIcon( classId ) ); } @@ -511,2 +512,23 @@ void BlueBase::startServiceActionHold( QListViewItem * item, const QPoint & poin } +/** + * find searches the ListView for a BTDeviceItem containig + * the same Device if found return true else false + * @param dev RemoteDevice to find + * @return returns true if found + */ +bool BlueBase::find( const RemoteDevice& rem ) { + QListViewItemIterator it( ListView2 ); + BTListItem* item; + BTDeviceItem* device; + for (; it.current(); ++it ) { + item = (BTListItem*) it.current(); + if ( item->typeId() != BTListItem::Device ) + continue; + + device = (BTDeviceItem*)item; + if ( rem.equals( device->remoteDevice() ) ) + return true; + } + return false; // not found +} diff --git a/noncore/net/opietooth/manager/bluebase.h b/noncore/net/opietooth/manager/bluebase.h index bbc519c..a68a04b 100644 --- a/noncore/net/opietooth/manager/bluebase.h +++ b/noncore/net/opietooth/manager/bluebase.h @@ -47,4 +47,5 @@ namespace OpieTooth { private: + bool find( const RemoteDevice& device ); void readConfig(); void writeConfig(); diff --git a/noncore/net/opietooth/manager/bticonloader.cpp b/noncore/net/opietooth/manager/bticonloader.cpp index f299117..a26af54 100644 --- a/noncore/net/opietooth/manager/bticonloader.cpp +++ b/noncore/net/opietooth/manager/bticonloader.cpp @@ -67,5 +67,5 @@ namespace OpieTooth { QMap<int, QString>::Iterator it; - it = deviceIcons.find( serviceClass ); + it = serviceIcons.find( serviceClass ); iconName = it.data(); diff --git a/noncore/net/opietooth/manager/devicehandler.cpp b/noncore/net/opietooth/manager/devicehandler.cpp new file mode 100644 index 0000000..9c5b817 --- a/dev/null +++ b/noncore/net/opietooth/manager/devicehandler.cpp @@ -0,0 +1,87 @@ + +#include <stdlib.h> + +#include <qdir.h> +#include <qpe/config.h> + +#include "devicehandler.h" + +using namespace OpieTooth; + +DeviceHandler::DeviceHandler() { + +}; +DeviceHandler::~DeviceHandler() { + +} + +RemoteDevice::ValueList DeviceHandler::load() { + RemoteDevice::ValueList list; +QString path = QDir::homeDirPath() + "/Settings/bluetooth"; + QDir deviceListSave( path); + + // list of .conf files + QStringList devicesFileList = deviceListSave.entryList(); + + + // cut .conf of to get the mac and also read the name entry in it. + if (!devicesFileList.isEmpty() ) { + QString name; + QString mac; + QStringList::Iterator it; + for (it = devicesFileList.begin(); it != devicesFileList.end(); ++it ) { + if ( (*it) == "." || (*it) == ".." ) + continue; + + qDebug((*it).latin1() ); + Config conf(path + "/"+(*it), Config::File); + conf.setGroup("Info"); + name = conf.readEntry("name", "Error"); + mac = conf.readEntry("mac", QString::null); + qDebug("MAC: " + mac); + qDebug("NAME: " + name); + if (mac.isEmpty() ) + continue; + RemoteDevice currentDevice( mac , name ); + list.append( currentDevice ); + } + } + return list; +}; +/* + * This is some how rude but make sure all old devices + * are getting deleted + */ +void DeviceHandler::save( const RemoteDevice::ValueList& list) { + QCString rm; + rm += "rm -rf "; + rm += QDir::homeDirPath() + "/Settings/bluetooth"; + system ( rm.data() ); + + if (list.isEmpty() ) // no need to create the dir + return; + + /** + * Create a new dir + */ + rm = "mkdir "; + rm += QDir::homeDirPath() + "/Settings/bluetooth"; + qWarning("out %s", rm.data() ); + system( rm.data() ); + + RemoteDevice::ValueList::ConstIterator it; + // write the config + + for ( it = list.begin(); it != list.end(); ++it ) { + qDebug( "/Settings/bluetooth/" + (*it).mac() + ".conf"); + + Config conf( QDir::homeDirPath() + + "/Settings/bluetooth/" + + (*it).mac() + ".conf", Config::File ); + + conf.setGroup( "Info" ); + conf.writeEntry( "name", (*it).name() ); + conf.writeEntry( "mac", (*it).mac() ); + } + +} diff --git a/noncore/net/opietooth/manager/devicehandler.h b/noncore/net/opietooth/manager/devicehandler.h new file mode 100644 index 0000000..5cfe048 --- a/dev/null +++ b/noncore/net/opietooth/manager/devicehandler.h @@ -0,0 +1,41 @@ + +#ifndef OPIE_TOOTH_DEVICE_HANDLER_H +#define OPIE_TOOTH_DEVICE_HANDLER_H + +#include <qvaluelist.h> + +#include <remotedevice.h> + +namespace OpieTooth { + /** + * DeviceHandler is responsible for loading + * and saving devices from a config File + */ + class DeviceHandler { + public: + /** + * c'tor + */ + DeviceHandler(); + + /** + * d'tor + */ + ~DeviceHandler(); + + /** + * loads from $HOME/Settings/bluetooth/ * + */ + RemoteDevice::ValueList load(); + + /** + * Saves to $HOME/Settings/bluetooth + */ + void save( const RemoteDevice::ValueList & ); + + }; + + +}; + +#endif diff --git a/noncore/net/opietooth/manager/hciconfwrapper.cpp b/noncore/net/opietooth/manager/hciconfwrapper.cpp index 5f74fee..46eed42 100644 --- a/noncore/net/opietooth/manager/hciconfwrapper.cpp +++ b/noncore/net/opietooth/manager/hciconfwrapper.cpp @@ -67,27 +67,12 @@ namespace OpieTooth { void HciConfWrapper::setValue(const QString &key, const QString &value ) { - QFile f( m_fileName ); - QFile f2( m_fileName ); - - if ( !f.open( IO_ReadOnly) ) { - qDebug("Could not open readonly"); + if (m_file.isEmpty() ) // load first return; - } - - if ( !f2.open( IO_ReadWrite ) ) { - qDebug("Just readonly - not enough"); - return; - } - QStringList list; - qDebug(m_fileName); - QTextStream stream ( &f); - QTextStream outstream (&f2); + QStringList::Iterator it; QString str; - while ( !(str=stream.readLine()).isNull() ) { - - - //qDebug(str); + for (it = m_file.begin(); it != m_file.end(); ++it ) { + str = (*it); if( (str.contains(key)) > 0 ) { qDebug("Found"); @@ -101,12 +86,55 @@ namespace OpieTooth { } qDebug( str ); + it = m_file.remove( it ); + it = m_file.insert( it, str ); + //return; the regexp is too wide -zecke // all set + } } - outstream << str << endl; + + } - f.close(); + /** + * This loads the config file and stores it inside + * the m_file + */ + void HciConfWrapper::load() { + qWarning("loaded"); + m_file.clear(); + QFile file( m_fileName ); + if (!file.open( IO_ReadOnly ) ) { + qDebug("Could not open"); + return; + } + + /** + * readAll() into a QByteArray + * QStringList::split('\n', array ) + * would this be faster? -zecke + */ + QTextStream stream(&file ); + QString tmp; + while ( !stream.atEnd() ) { + tmp = stream.readLine(); + m_file.append( tmp ); + } + } + void HciConfWrapper::save() { + qWarning("save"); + if (m_file.isEmpty() ) // load first + return; + + QFile file( m_fileName ); + if ( !file.open(IO_WriteOnly ) ) { + qWarning("could not open %s", m_fileName.latin1() ); + return; + } - f2.flush(); - f2.close(); + QTextStream stream(&file ); + QStringList::Iterator it; + for ( it = m_file.begin(); it != m_file.end(); ++it ) { + stream << (*it) << endl; } + qWarning("saved"); + }; } diff --git a/noncore/net/opietooth/manager/hciconfwrapper.h b/noncore/net/opietooth/manager/hciconfwrapper.h index de8c9a8..0c4b290 100644 --- a/noncore/net/opietooth/manager/hciconfwrapper.h +++ b/noncore/net/opietooth/manager/hciconfwrapper.h @@ -3,4 +3,5 @@ #include <qstring.h> +#include <qstringlist.h> namespace OpieTooth { @@ -11,4 +12,6 @@ namespace OpieTooth { HciConfWrapper( const QString &fileName ); ~HciConfWrapper(); + void load(); + void save(); void setPinHelper( const QString& app ); @@ -24,4 +27,5 @@ namespace OpieTooth { QString m_fileName; + QStringList m_file; }; diff --git a/noncore/net/opietooth/manager/manager.pro b/noncore/net/opietooth/manager/manager.pro index 0bdd6b9..762b028 100644 --- a/noncore/net/opietooth/manager/manager.pro +++ b/noncore/net/opietooth/manager/manager.pro @@ -2,6 +2,19 @@ TEMPLATE = app CONFIG = qt warn_on debug #CONFIG = qt warn_on release -HEADERS = btconnectionitem.h btdeviceitem.h btserviceitem.h stdpopups.h popuphelper.h bluebase.h scandialog.h btlistitem.h hciconfwrapper.h bticonloader.h pppdialog.h obexdialog.h -SOURCES = btconnectionitem.cpp btdeviceitem.cpp btserviceitem.h stdpopups.cpp popuphelper.cpp main.cpp bluebase.cpp scandialog.cpp btlistitem.cpp hciconfwrapper.cpp bticonloader.cpp pppdialog.cpp obexdialog.cpp +HEADERS = btconnectionitem.h btdeviceitem.h \ + btserviceitem.h stdpopups.h \ + popuphelper.h bluebase.h \ + scandialog.h btlistitem.h \ + hciconfwrapper.h bticonloader.h \ + pppdialog.h obexdialog.h \ + devicehandler.h + +SOURCES = btconnectionitem.cpp btdeviceitem.cpp \ + btserviceitem.cpp stdpopups.cpp \ + popuphelper.cpp main.cpp \ + bluebase.cpp scandialog.cpp \ + btlistitem.cpp hciconfwrapper.cpp \ + bticonloader.cpp pppdialog.cpp \ + obexdialog.cpp devicehandler.cpp INCLUDEPATH += $(OPIEDIR)/include INCLUDEPATH += $(OPIEDIR)/noncore/net/opietooth/lib diff --git a/noncore/net/opietooth/manager/popuphelper.cpp b/noncore/net/opietooth/manager/popuphelper.cpp index 26c4b02..4ef1ed5 100644 --- a/noncore/net/opietooth/manager/popuphelper.cpp +++ b/noncore/net/opietooth/manager/popuphelper.cpp @@ -16,8 +16,8 @@ void PopupHelper::insert( int id, popupFactory fact ) { } QPopupMenu* PopupHelper::find( int id, const Services& ser, QListViewItem* item ) { - qWarning("find"); + //qWarning("find"); FactoryMap::Iterator it = m_map.find(id ); if ( it != m_map.end() ) { - qWarning("found"); + //qWarning("found"); popupFactory fact = it.data(); return (*fact)(ser, item); diff --git a/noncore/net/opietooth/manager/scandialog.cpp b/noncore/net/opietooth/manager/scandialog.cpp index 3d6c928..9ce1b6a 100644 --- a/noncore/net/opietooth/manager/scandialog.cpp +++ b/noncore/net/opietooth/manager/scandialog.cpp @@ -66,14 +66,12 @@ namespace OpieTooth { QFrame *buttonFrame = new QFrame(Frame7, ""); - StartButton = new QPushButton( buttonFrame, "StartButton" ); - StartButton->setText( tr( "Start scan" ) ); + StartStopButton = new QPushButton( buttonFrame, "StartButton" ); + StartStopButton->setText( tr( "Start scan" ) ); - StopButton = new QPushButton( buttonFrame, "StopButton" ); - StopButton->setText( tr( "Cancel scan" ) ); QHBoxLayout *buttonLayout = new QHBoxLayout(buttonFrame); - buttonLayout->addWidget(StartButton); - buttonLayout->addWidget(StopButton); + buttonLayout->addWidget(StartStopButton); +// buttonLayout->addWidget(StopButton); ListView1 = new QListView( privateLayoutWidget, "ListView1" ); @@ -89,10 +87,10 @@ namespace OpieTooth { localDevice = new Manager( "hci0" ); - connect( StartButton, SIGNAL( clicked() ), this, SLOT( startSearch() ) ); - connect( StopButton, SIGNAL( clicked() ), this, SLOT( stopSearch() ) ); + connect( StartStopButton, SIGNAL( clicked() ), this, SLOT( startSearch() ) ); connect( localDevice, SIGNAL( foundDevices( const QString& , RemoteDevice::ValueList ) ), this, SLOT(fillList(const QString& , RemoteDevice::ValueList ) ) ) ; // connect( this, SIGNAL( accept() ), this, SLOT( emitToManager() )); progressStat = 0; + m_search = false; } @@ -101,8 +99,8 @@ namespace OpieTooth { progressStat++; - if (progressStat++ < 20) { + if (progressStat++ < 20 && m_search ) { QTimer::singleShot( 2000, this, SLOT(progressTimer() ) ); - } progress->setProgress(progressStat++); + } } @@ -115,4 +113,9 @@ namespace OpieTooth { void ScanDialog::startSearch() { + if ( m_search ) { + stopSearch(); + return; + } + m_search = true; progress->setProgress(0); progressStat = 0; @@ -127,4 +130,6 @@ namespace OpieTooth { // when finished, it emmite foundDevices() // checken ob initialisiert , qcop ans applet. + StartStopButton->setText( tr("Stop scan")); + localDevice->searchDevices(); @@ -132,9 +137,10 @@ namespace OpieTooth { void ScanDialog::stopSearch() { - + m_search = true; } - void ScanDialog::fillList(const QString& device, RemoteDevice::ValueList deviceList) { - + void ScanDialog::fillList(const QString&, RemoteDevice::ValueList deviceList) { + progress->setProgress(0); + progressStat = 0; qDebug("fill List"); QCheckListItem * deviceItem; @@ -146,4 +152,6 @@ namespace OpieTooth { deviceItem->setText(1, (*it).mac() ); } + m_search = false; + StartStopButton->setText(tr ("Start scan") ); } @@ -176,4 +184,5 @@ namespace OpieTooth { */ ScanDialog::~ScanDialog() { + qWarning("delete scan dialog"); delete localDevice; } diff --git a/noncore/net/opietooth/manager/scandialog.h b/noncore/net/opietooth/manager/scandialog.h index f18784d..8f8d39a 100644 --- a/noncore/net/opietooth/manager/scandialog.h +++ b/noncore/net/opietooth/manager/scandialog.h @@ -47,8 +47,9 @@ class Device; ~ScanDialog(); + private: // make them private -zecke QFrame* Frame7; QProgressBar* progress; - QPushButton* StartButton; - QPushButton* StopButton; + QPushButton* StartStopButton; +// QPushButton* StopButton; QListView* ListView1; @@ -66,4 +67,5 @@ public slots: private: + bool m_search:1; void emitToManager(); Manager *localDevice; |