Removed context from logging.

Fixed homedir detection.
Fixed config file creation.
Send smartphone device model on broadcast.
This commit is contained in:
codestation
2015-03-22 22:27:44 -04:30
parent 023d46cf0f
commit 3899cd6715
3 changed files with 75 additions and 12 deletions

View File

@@ -3,7 +3,7 @@ include(../common/defines.pri)
TARGET = qcma_android TARGET = qcma_android
TEMPLATE=app TEMPLATE=app
QT += network sql QT += network sql androidextras
LIBS += -L../common -lqcma_common LIBS += -L../common -lqcma_common
# this library needs to link statically their deps but Qt doesn't pass --static to PKGCONFIG # this library needs to link statically their deps but Qt doesn't pass --static to PKGCONFIG

View File

@@ -21,20 +21,57 @@
#include <QDebug> #include <QDebug>
#include <QLibraryInfo> #include <QLibraryInfo>
#include <QLocale> #include <QLocale>
#include <QFile>
#include <QStringList> #include <QStringList>
#include <QTextCodec> #include <QTextCodec>
#include <QThread> #include <QThread>
#include <QTranslator> #include <QTranslator>
#include <QStandardPaths>
#include <inttypes.h> #include <inttypes.h>
#include <unistd.h>
#include <vitamtp.h> #include <vitamtp.h>
#include <android/log.h>
#include "servicemanager.h" #include "servicemanager.h"
static QString getAppName()
{
pid_t pid = getpid();
QString cmdline = QString("/proc/%1/cmdline").arg(pid);
QFile file(cmdline);
return file.open(QIODevice::ReadOnly) ? file.readLine() : "";
}
static void cleanOutput(QtMsgType type, const QMessageLogContext &, const QString & msg)
{
QByteArray localMsg = msg.toLocal8Bit();
const char *message = localMsg.constData();
switch (type) {
case QtDebugMsg:
__android_log_print(ANDROID_LOG_INFO, "qcma", "%s", message);
break;
case QtWarningMsg:
__android_log_print(ANDROID_LOG_WARN, "qcma", "%s", message);
break;
case QtCriticalMsg:
__android_log_print(ANDROID_LOG_ERROR, "qcma", "%s", message);
break;
case QtFatalMsg:
__android_log_print(ANDROID_LOG_FATAL, "qcma", "%s", message);
abort();
}
}
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
QCoreApplication app(argc, argv); QCoreApplication app(argc, argv);
app.setApplicationName("Qcma"); app.setApplicationName("qcma");
// FIXME: libmtp sends SIGPIPE if a socket write fails crashing the whole app // FIXME: libmtp sends SIGPIPE if a socket write fails crashing the whole app
// the proper fix is to libmtp to handle the cancel properly or ignoring // the proper fix is to libmtp to handle the cancel properly or ignoring
@@ -44,8 +81,18 @@ int main(int argc, char *argv[])
// stdout goes to /dev/null on android // stdout goes to /dev/null on android
VitaMTP_Set_Logging(VitaMTP_NONE); VitaMTP_Set_Logging(VitaMTP_NONE);
qInstallMessageHandler(cleanOutput);
qDebug("Starting Qcma %s", QCMA_VER); qDebug("Starting Qcma %s", QCMA_VER);
QString appname = getAppName();
qDebug("Class name: %s", qPrintable(appname));
// set $HOME, Qt/Android doesn't currently do this
qputenv("HOME", QString("/data/data/%1").arg(appname).toLocal8Bit());
app.addLibraryPath(appname + "/lib");
QTranslator translator; QTranslator translator;
QString locale = "en"; //QLocale().system().name(); QString locale = "en"; //QLocale().system().name();
qDebug() << "Current locale:" << locale; qDebug() << "Current locale:" << locale;
@@ -71,7 +118,7 @@ int main(int argc, char *argv[])
qDebug("Starting main thread: 0x%016" PRIxPTR, (uintptr_t)QThread::currentThreadId()); qDebug("Starting main thread: 0x%016" PRIxPTR, (uintptr_t)QThread::currentThreadId());
// set the organization/application for QSettings to work properly // set the organization/application for QSettings to work properly
app.setOrganizationName("codestation"); app.setOrganizationName("qcma");
app.setApplicationName("qcma"); app.setApplicationName("qcma");
ServiceManager manager; ServiceManager manager;

View File

@@ -28,6 +28,7 @@
#include <QSettings> #include <QSettings>
#include <QStandardPaths> #include <QStandardPaths>
#include <QTextStream> #include <QTextStream>
#include <QAndroidJniObject>
#include <vitamtp.h> #include <vitamtp.h>
ServiceManager::ServiceManager(QObject *obj_parent) : ServiceManager::ServiceManager(QObject *obj_parent) :
@@ -56,10 +57,7 @@ void ServiceManager::refreshDatabase()
void ServiceManager::start() void ServiceManager::start()
{ {
if(VitaMTP_Init() < 0) { VitaMTP_Init();
qCritical("Cannot initialize VitaMTP library");
return;
}
loadDefaultSettings(); loadDefaultSettings();
@@ -144,9 +142,19 @@ void ServiceManager::threadStopped()
void ServiceManager::loadDefaultSettings() void ServiceManager::loadDefaultSettings()
{ {
QString defaultdir; QString defaultdir = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation);
// save config to /sdcard, remove when the app works properly
qputenv("XDG_CONFIG_HOME", defaultdir.toLocal8Bit());
QSettings settings; QSettings settings;
// skip initialization if some config is already present
if(!settings.value("appsPath").isNull())
return;
qDebug("saving to: %s", qPrintable(settings.fileName()));
defaultdir = QStandardPaths::writableLocation(QStandardPaths::PicturesLocation); defaultdir = QStandardPaths::writableLocation(QStandardPaths::PicturesLocation);
qDebug("photoPath: %s", qPrintable(defaultdir)); qDebug("photoPath: %s", qPrintable(defaultdir));
settings.setValue("photoPath", defaultdir); settings.setValue("photoPath", defaultdir);
@@ -159,23 +167,23 @@ void ServiceManager::loadDefaultSettings()
qDebug("photoPath: %s", qPrintable(defaultdir)); qDebug("photoPath: %s", qPrintable(defaultdir));
settings.setValue("videoPath", defaultdir); settings.setValue("videoPath", defaultdir);
defaultdir = QStandardPaths::writableLocation(QStandardPaths::HomeLocation); defaultdir = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation);
defaultdir.append(QDir::separator()).append("PS Vita"); defaultdir.append(QDir::separator()).append("PS Vita");
qDebug("appsPath: %s", qPrintable(defaultdir)); qDebug("appsPath: %s", qPrintable(defaultdir));
settings.setValue("appsPath", defaultdir); settings.setValue("appsPath", defaultdir);
defaultdir = QStandardPaths::writableLocation(QStandardPaths::HomeLocation); defaultdir = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation);
defaultdir.append(QDir::separator()).append("PSV Updates"); defaultdir.append(QDir::separator()).append("PSV Updates");
qDebug("urlPath: %s", qPrintable(defaultdir)); qDebug("urlPath: %s", qPrintable(defaultdir));
settings.setValue("urlPath", defaultdir); settings.setValue("urlPath", defaultdir);
defaultdir = QStandardPaths::writableLocation(QStandardPaths::HomeLocation); defaultdir = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation);
defaultdir.append(QDir::separator()).append("PSV Packages"); defaultdir.append(QDir::separator()).append("PSV Packages");
qDebug("pkgPath: %s", qPrintable(defaultdir)); qDebug("pkgPath: %s", qPrintable(defaultdir));
settings.setValue("pkgPath", defaultdir); settings.setValue("pkgPath", defaultdir);
settings.setValue("offlineMode", true); settings.setValue("offlineMode", true);
settings.setValue("skipMetadata", false); settings.setValue("skipMetadata", true);
// disable USB for now // disable USB for now
settings.setValue("disableUSB", true); settings.setValue("disableUSB", true);
@@ -192,4 +200,12 @@ void ServiceManager::loadDefaultSettings()
settings.setValue("protocolIndex", 0); settings.setValue("protocolIndex", 0);
settings.setValue("protocolVersion", VITAMTP_PROTOCOL_MAX_VERSION); settings.setValue("protocolVersion", VITAMTP_PROTOCOL_MAX_VERSION);
QString deviceName = QAndroidJniObject::getStaticObjectField(
"android/os/Build", "MODEL", "Ljava/lang/String;").toString();
qDebug("Detected device model: %s", qPrintable(deviceName));
settings.setValue("hostName", deviceName);
settings.sync();
} }