2007-08-05 19:48:04 +00:00
|
|
|
/***************************************************************************
|
|
|
|
* __________ __ ___.
|
|
|
|
* 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();
|
2007-08-23 15:24:28 +00:00
|
|
|
|
2007-08-05 19:48:04 +00:00
|
|
|
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;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2007-08-23 22:07:21 +00:00
|
|
|
int n;
|
|
|
|
|
2007-08-05 19:48:04 +00:00
|
|
|
//try ipodpatcher
|
2007-08-23 15:24:28 +00:00
|
|
|
struct ipod_t ipod;
|
2007-08-23 22:07:21 +00:00
|
|
|
n = ipod_scan(&ipod);
|
2007-08-23 15:24:28 +00:00
|
|
|
if(n == 1) {
|
|
|
|
qDebug() << "Ipod found:" << ipod.modelstr << "at" << ipod.diskname;
|
|
|
|
m_device = ipod.targetname;
|
|
|
|
m_mountpoint = resolveMountPoint(ipod.diskname);
|
|
|
|
return true;
|
|
|
|
}
|
2007-08-05 19:48:04 +00:00
|
|
|
|
|
|
|
//try sansapatcher
|
2007-08-23 22:07:21 +00:00
|
|
|
struct sansa_t sansa;
|
|
|
|
n = sansa_scan(&sansa);
|
|
|
|
if(n == 1) {
|
|
|
|
qDebug() << "Sansa found:" << "sansae200" << "at" << sansa.diskname;
|
|
|
|
m_device = "sansae200";
|
|
|
|
m_mountpoint = resolveMountPoint(sansa.diskname);
|
|
|
|
return true;
|
|
|
|
}
|
2007-08-23 15:24:28 +00:00
|
|
|
|
2007-08-05 19:48:04 +00:00
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
QStringList Autodetection::getMountpoints()
|
|
|
|
{
|
2007-08-05 22:13:40 +00:00
|
|
|
#if defined(Q_OS_WIN32)
|
2007-08-05 19:48:04 +00:00
|
|
|
QStringList tempList;
|
|
|
|
QFileInfoList list = QDir::drives();
|
|
|
|
for(int i=0; i<list.size();i++)
|
|
|
|
{
|
|
|
|
tempList << list.at(i).absolutePath();
|
|
|
|
}
|
|
|
|
return tempList;
|
|
|
|
|
2007-08-05 22:13:40 +00:00
|
|
|
#elif defined(Q_OS_MACX)
|
2007-08-05 19:48:04 +00:00
|
|
|
QDir dir("/Volumes");
|
|
|
|
return dir.entryList();
|
2007-08-05 22:13:40 +00:00
|
|
|
#elif defined(Q_OS_LINUX)
|
2007-08-05 19:48:04 +00:00
|
|
|
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
|
|
|
|
}
|
|
|
|
|
2007-08-23 15:24:28 +00:00
|
|
|
QString Autodetection::resolveMountPoint(QString device)
|
|
|
|
{
|
|
|
|
qDebug() << "Autodetection::resolveMountPoint(QString)" << device;
|
|
|
|
#if defined(Q_OS_LINUX)
|
|
|
|
FILE *fp = fopen( "/proc/mounts", "r" );
|
|
|
|
if( !fp ) return QString("");
|
|
|
|
char *dev, *dir;
|
|
|
|
while( fscanf( fp, "%as %as %*s %*s %*s %*s", &dev, &dir ) != EOF )
|
|
|
|
{
|
|
|
|
if( QString(dev).startsWith(device) )
|
|
|
|
{
|
|
|
|
QString directory = dir;
|
|
|
|
free( dev );
|
|
|
|
free( dir );
|
2007-08-23 22:07:21 +00:00
|
|
|
fclose(fp);
|
2007-08-23 15:24:28 +00:00
|
|
|
return directory;
|
|
|
|
}
|
|
|
|
free( dev );
|
|
|
|
free( dir );
|
|
|
|
}
|
|
|
|
fclose( fp );
|
|
|
|
|
|
|
|
#endif
|
|
|
|
return QString("");
|
2007-08-05 19:48:04 +00:00
|
|
|
|
2007-08-23 15:24:28 +00:00
|
|
|
}
|