Removed context from logging.
Fixed homedir detection. Fixed config file creation. Send smartphone device model on broadcast.
This commit is contained in:
		@@ -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
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user