rbutilqt: initial port of the autodetection. (use only rockbox-info.txt at the moment)

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@14199 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Dominik Wenger 2007-08-05 19:48:04 +00:00
parent b311367481
commit 421411b73a
5 changed files with 207 additions and 2 deletions

View file

@ -0,0 +1,99 @@
/***************************************************************************
* __________ __ ___.
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
* \/ \/ \/ \/ \/
*
* Copyright (C) 2007 by Dominik Wenger
* $Id: autodetection.cpp 14027 2007-07-27 17:42:49Z domonoky $
*
* All files in this archive are subject to the GNU General Public License.
* See the file COPYING in the source tree root for full license agreement.
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
* KIND, either express or implied.
*
****************************************************************************/
#include "autodetection.h"
Autodetection::Autodetection(QObject* parent): QObject(parent)
{
}
bool Autodetection::detect()
{
m_device = "";
m_mountpoint = "";
// Try detection via rockbox.info
QStringList mountpoints = getMountpoints();
for(int i=0; i< mountpoints.size();i++)
{
QDir dir(mountpoints.at(i));
if(dir.exists())
{
QFile file(mountpoints.at(i) + "/.rockbox/rockbox-info.txt");
if(file.exists())
{
file.open(QIODevice::ReadOnly | QIODevice::Text);
QString line = file.readLine();
if(line.startsWith("Target: "))
{
line.remove("Target: ");
m_device = line;
m_mountpoint = mountpoints.at(i);
return true;
}
}
}
}
//try ipodpatcher
//try sansapatcher
return false;
}
QStringList Autodetection::getMountpoints()
{
#ifdef Q_OS_WIN32
QStringList tempList;
QFileInfoList list = QDir::drives();
for(int i=0; i<list.size();i++)
{
tempList << list.at(i).absolutePath();
}
return tempList;
#elif Q_OS_MACX
QDir dir("/Volumes");
return dir.entryList();
#elif Q_OS_LINUX
QStringList tempList;
FILE *fp = fopen( "/proc/mounts", "r" );
if( !fp ) return tempList;
char *dev, *dir;
while( fscanf( fp, "%as %as %*s %*s %*s %*s", &dev, &dir ) != EOF )
{
tempList << dir;
free( dev );
free( dir );
}
fclose( fp );
return tempList;
#else
#error Unknown Plattform
#endif
}

View file

@ -0,0 +1,47 @@
/***************************************************************************
* __________ __ ___.
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
* \/ \/ \/ \/ \/
*
* Copyright (C) 2007 by Dominik Wenger
* $Id: autodetection.h 14027 2007-07-27 17:42:49Z domonoky $
*
* All files in this archive are subject to the GNU General Public License.
* See the file COPYING in the source tree root for full license agreement.
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
* KIND, either express or implied.
*
****************************************************************************/
#ifndef AUTODETECTION_H_
#define AUTODETECTION_H_
#include <QtGui>
class Autodetection :public QObject
{
Q_OBJECT
public:
Autodetection(QObject* parent=0);
bool detect();
QString getDevice() {return m_device;}
QString getMountPoint() {return m_mountpoint;}
private:
QStringList getMountpoints();
QString m_device;
QString m_mountpoint;
};
#endif /*AUTODETECTION_H_*/

View file

@ -20,6 +20,7 @@
#include <QtGui>
#include "configure.h"
#include "autodetection.h"
#include "ui_configurefrm.h"
#ifdef __linux
@ -61,6 +62,7 @@ Config::Config(QWidget *parent) : QDialog(parent)
connect(ui.radioNoProxy, SIGNAL(toggled(bool)), this, SLOT(setNoProxy(bool)));
connect(ui.radioSystemProxy, SIGNAL(toggled(bool)), this, SLOT(setSystemProxy(bool)));
connect(ui.browseMountPoint, SIGNAL(clicked()), this, SLOT(browseFolder()));
connect(ui.buttonAutodetect,SIGNAL(clicked()),this,SLOT(autodetect()));
// disable unimplemented stuff
ui.buttonCacheBrowse->setEnabled(false);
@ -68,10 +70,11 @@ Config::Config(QWidget *parent) : QDialog(parent)
ui.cacheOfflineMode->setEnabled(false);
ui.buttonCacheClear->setEnabled(false);
ui.buttonAutodetect->setEnabled(false);
//ui.buttonAutodetect->setEnabled(false);
}
void Config::accept()
{
qDebug() << "Config::accept()";
@ -338,3 +341,56 @@ void Config::browseFolder()
userSettings->setValue("defaults/mountpoint", files.at(0));
}
}
void Config::autodetect()
{
Autodetection detector(this);
if(detector.detect()) //let it detect
{
QString devicename = detector.getDevice();
//deexpand the platform
ui.treeDevices->selectedItems().at(0)->parent()->setExpanded(false);
//deselect the selected item
ui.treeDevices->selectedItems().at(0)->setSelected(false);
// find the new item
//enumerate al plattform items
QList<QTreeWidgetItem*> itmList= ui.treeDevices->findItems("*",Qt::MatchWildcard);
for(int i=0; i< itmList.size();i++)
{
//enumerate device items
for(int j=0;j < itmList.at(i)->childCount();j++)
{
QString data = itmList.at(i)->child(j)->data(0, Qt::UserRole).toString();
if( devicename.contains(data)) //item found
{
itmList.at(i)->child(j)->setSelected(true); //select the item
itmList.at(i)->setExpanded(true); //expand the platform item
break;
}
}
}
if(detector.getMountPoint() != "" )
{
ui.mountPoint->setText(detector.getMountPoint());
}
else
{
QMessageBox::warning(this, tr("Autodetection"),
tr("Could not detect a Mountpoint.\n"
"Select your Mountpoint manually."),
QMessageBox::Ok ,QMessageBox::Ok);
}
}
else
{
QMessageBox::warning(this, tr("Autodetection"),
tr("Could not detect a device.\n"
"Select your device and Mountpoint manually."),
QMessageBox::Ok ,QMessageBox::Ok);
}
}

View file

@ -54,6 +54,7 @@ class Config : public QDialog
void setSystemProxy(bool);
void updateLanguage(void);
void browseFolder(void);
void autodetect(void);
};
#endif

View file

@ -11,6 +11,7 @@ SOURCES += rbutilqt.cpp \
progressloggergui.cpp \
installtalkwindow.cpp \
talkfile.cpp \
autodetection.cpp \
../ipodpatcher/ipodpatcher.c \
../sansapatcher/sansapatcher.c \
irivertools/irivertools.cpp \
@ -33,6 +34,7 @@ HEADERS += rbutilqt.h \
installbl.h \
installtalkwindow.h \
talkfile.h \
autodetection.h \
progressloggerinterface.h \
progressloggergui.h \
../ipodpatcher/ipodpatcher.h \