From bd80842dd522b6351a2346b9ddfcaba39a62304d Mon Sep 17 00:00:00 2001 From: codestation Date: Sun, 4 May 2014 11:16:36 -0430 Subject: [PATCH] Fix bug when transferring PSP savedatas. --- src/cmaevent.cpp | 2 +- src/database.h | 1 + src/qlistdb.cpp | 18 ++++++++++++++++++ src/qlistdb.h | 1 + src/sqlitedb.cpp | 7 +++++++ src/sqlitedb.h | 1 + 6 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/cmaevent.cpp b/src/cmaevent.cpp index ac88139..ad37cb2 100644 --- a/src/cmaevent.cpp +++ b/src/cmaevent.cpp @@ -402,7 +402,7 @@ void CmaEvent::vitaEventSendObject(vita_event_t *event, int eventId) qDebug("Searching object with OHFI %d", ohfi); metadata_t *metadata = NULL; - if(!m_db->getObjectMetadatas(ohfi, &metadata)) { + if(!m_db->getObjectList(ohfi, &metadata)) { qWarning("Failed to find OHFI %d", ohfi); VitaMTP_ReportResult(device, eventId, PTP_RC_VITA_Invalid_OHFI); return; diff --git a/src/database.h b/src/database.h index cc8d3c4..35ca211 100644 --- a/src/database.h +++ b/src/database.h @@ -71,6 +71,7 @@ public: virtual bool deleteEntry(int ohfi, int root_ohfi = 0) = 0; virtual QString getAbsolutePath(int ohfi) = 0; virtual QString getRelativePath(int ohfi) = 0; + virtual bool getObjectList(int ohfi, metadata_t **metadata) = 0; virtual bool getObjectMetadata(int ohfi, metadata_t &metadata) = 0; virtual int getObjectMetadatas(int parent_ohfi, metadata_t **metadata, int index = 0, int max_number = 0) = 0; virtual qint64 getObjectSize(int ohfi) = 0; diff --git a/src/qlistdb.cpp b/src/qlistdb.cpp index 1d0303c..06e76f2 100644 --- a/src/qlistdb.cpp +++ b/src/qlistdb.cpp @@ -390,6 +390,24 @@ bool QListDB::deleteEntry(int ohfi, int root_ohfi) return false; } +bool QListDB::getObjectList(int ohfi, metadata_t **metadata) +{ + find_data iters; + if(find(ohfi, iters)) { + CMAObject *object; + do { + object = *iters.it; + *metadata = &object->metadata; + metadata = &(*metadata)->next_metadata; + *metadata = NULL; + object = *++iters.it; + } while(iters.it != iters.end && object->metadata.ohfiParent >= OHFI_OFFSET); + return true; + } + return false; +} + + int QListDB::getObjectMetadatas(int parent_ohfi, metadata_t **metadata, int index, int max_number) { QMutexLocker locker(&mutex); diff --git a/src/qlistdb.h b/src/qlistdb.h index da45c86..2d9d357 100644 --- a/src/qlistdb.h +++ b/src/qlistdb.h @@ -49,6 +49,7 @@ public: int childObjectCount(int parent_ohfi); bool deleteEntry(int ohfi, int root_ohfi = 0); QString getAbsolutePath(int ohfi); + bool getObjectList(int ohfi, metadata_t **metadata); bool getObjectMetadata(int ohfi, metadata_t &metadata); int getObjectMetadatas(int parent_ohfi, metadata_t **metadata, int index = 0, int max_number = 0); qint64 getObjectSize(int ohfi); diff --git a/src/sqlitedb.cpp b/src/sqlitedb.cpp index 2ae99c0..dba5c30 100644 --- a/src/sqlitedb.cpp +++ b/src/sqlitedb.cpp @@ -1309,3 +1309,10 @@ bool SQLiteDB::insertVirtualEntries() return true; } + +bool SQLiteDB::getObjectList(int ohfi, metadata_t **metadata) +{ + Q_UNUSED(ohfi); + Q_UNUSED(metadata); + return false; +} diff --git a/src/sqlitedb.h b/src/sqlitedb.h index 669d820..c39d2e0 100644 --- a/src/sqlitedb.h +++ b/src/sqlitedb.h @@ -53,6 +53,7 @@ public: int childObjectCount(int parent_ohfi); bool deleteEntry(int ohfi, int root_ohfi = 0); QString getAbsolutePath(int ohfi); + bool getObjectList(int ohfi, metadata_t **metadata); bool getObjectMetadata(int ohfi, metadata_t &metadata); int getObjectMetadatas(int parent_ohfi, metadata_t **metadata, int index = 0, int max_number = 0); qint64 getObjectSize(int ohfi);