Fix multimedia directory copy from pc.

This commit is contained in:
codestation
2014-05-04 22:11:48 -04:30
parent 45416b2bfe
commit 1f5b6e2074
4 changed files with 61 additions and 18 deletions

View File

@@ -93,6 +93,7 @@ void CmaClient::connectWireless()
setActive(true);
do {
qDebug("Waiting for wireless connection");
if((vita = VitaMTP_Get_First_Wireless_Vita(&host, 0, CC::deviceRegistered, CC::generatePin, CC::registrationComplete)) != NULL) {
qDebug("Starting new wireless connection");
processNewConnection(vita);

View File

@@ -265,9 +265,46 @@ void CmaEvent::vitaEventSendCopyConfirmationInfo(vita_event_t *event, int eventI
QMutexLocker locker(&m_db->mutex);
qint64 size;
qint64 total_size = 0;
// check if the item is a single folder
if(info->count == 1) {
metadata_t meta;
if(m_db->getObjectMetadata(info->ohfi[0], meta)) {
// got a folder
if(meta.dataType & Folder) {
metadata_t *meta_list = NULL;
if(m_db->getObjectList(info->ohfi[0], &meta_list)) {
int count = 0;
metadata_t *meta = meta_list;
// count files
while(meta) {
if(meta->dataType & File) {
count++;
}
meta = meta->next_metadata;
}
// create struct to hold all the file identifiers
info = (copy_confirmation_info_t *)malloc(sizeof(uint32_t) * count + sizeof(copy_confirmation_info_t));
meta = meta_list;
info->count = 0;
// copy all the file ohfi
while(meta) {
if(meta->dataType & File) {
info->ohfi[info->count] = meta->ohfi;
total_size += meta->size;
info->count++;
}
meta = meta->next_metadata;
}
}
m_db->freeMetadata(meta_list);
}
}
} else {
qint64 size;
for(quint32 i = 0; i < info->count; i++) {
if((size = m_db->getObjectSize(info->ohfi[i])) < 0) {
qWarning("Cannot find OHFI %d", info->ohfi[i]);
@@ -277,6 +314,7 @@ void CmaEvent::vitaEventSendCopyConfirmationInfo(vita_event_t *event, int eventI
total_size += size;
}
}
if(VitaMTP_SendCopyConfirmationInfo(device, eventId, info, total_size) != PTP_RC_OK) {
qWarning("Error sending copy confirmation");
@@ -440,7 +478,7 @@ void CmaEvent::vitaEventSendObject(vita_event_t *event, int eventId)
// send the data over
qDebug("Sending %s of %lu bytes to device", metadata->name, len);
qDebug("OHFI %d with handle 0x%08X", ohfi, parentHandle);
qDebug("OHFI %d with handle 0x%08X", metadata->ohfi, parentHandle);
VitaMTP_RegisterCancelEventId(eventId);
quint16 ret = VitaMTP_SendObject_Callback(device, &parentHandle, &handle, metadata, &CmaEvent::readCallback);

View File

@@ -49,10 +49,11 @@ void CMARootObject::initObject(const QString &path)
case VITA_OHFI_PHOTO:
metadata.dataType = Photo;
this->path = path;
num_filters = 2;
filters = new metadata_t[2];
createFilter(&filters[0], "Folders", VITA_DIR_TYPE_MASK_PHOTO | VITA_DIR_TYPE_MASK_ROOT | VITA_DIR_TYPE_MASK_REGULAR);
createFilter(&filters[1], "All", VITA_DIR_TYPE_MASK_PHOTO | VITA_DIR_TYPE_MASK_ROOT | VITA_DIR_TYPE_MASK_ALL);
num_filters = 3;
filters = new metadata_t[3];
createFilter(&filters[0], "All", VITA_DIR_TYPE_MASK_PHOTO | VITA_DIR_TYPE_MASK_ROOT | VITA_DIR_TYPE_MASK_ALL);
createFilter(&filters[1], "Month", VITA_DIR_TYPE_MASK_PHOTO | VITA_DIR_TYPE_MASK_ROOT | VITA_DIR_TYPE_MASK_MONTH);
createFilter(&filters[2], "Folders", VITA_DIR_TYPE_MASK_PHOTO | VITA_DIR_TYPE_MASK_ROOT | VITA_DIR_TYPE_MASK_REGULAR);
break;
case VITA_OHFI_VIDEO:
@@ -60,8 +61,8 @@ void CMARootObject::initObject(const QString &path)
this->path = path;
num_filters = 2;
filters = new metadata_t[2];
createFilter(&filters[0], "Folders", VITA_DIR_TYPE_MASK_VIDEO | VITA_DIR_TYPE_MASK_ROOT | VITA_DIR_TYPE_MASK_REGULAR);
createFilter(&filters[1], "All", VITA_DIR_TYPE_MASK_VIDEO | VITA_DIR_TYPE_MASK_ROOT | VITA_DIR_TYPE_MASK_ALL);
createFilter(&filters[0], "All", VITA_DIR_TYPE_MASK_VIDEO | VITA_DIR_TYPE_MASK_ROOT | VITA_DIR_TYPE_MASK_ALL);
createFilter(&filters[1], "Folders", VITA_DIR_TYPE_MASK_VIDEO | VITA_DIR_TYPE_MASK_ROOT | VITA_DIR_TYPE_MASK_REGULAR);
break;
case VITA_OHFI_VITAAPP:

View File

@@ -327,13 +327,16 @@ int QListDB::acceptFilteredObject(const CMAObject *parent, const CMAObject *curr
result = (current->metadata.dataType & Music);
}
if(type == (VITA_DIR_TYPE_MASK_MUSIC | VITA_DIR_TYPE_MASK_ROOT | VITA_DIR_TYPE_MASK_ARTISTS)) {
if(MASK_SET(type, VITA_DIR_TYPE_MASK_ARTISTS)) {
// unimplemented
return 0;
} else if(type == (VITA_DIR_TYPE_MASK_MUSIC | VITA_DIR_TYPE_MASK_ROOT | VITA_DIR_TYPE_MASK_GENRES)) {
} else if(MASK_SET(type, VITA_DIR_TYPE_MASK_GENRES)) {
// unimplemented
return 0;
} else if(type == (VITA_DIR_TYPE_MASK_MUSIC | VITA_DIR_TYPE_MASK_ROOT | VITA_DIR_TYPE_MASK_PLAYLISTS)) {
} else if(MASK_SET(type, VITA_DIR_TYPE_MASK_PLAYLISTS)) {
// unimplemented
return 0;
} else if(MASK_SET(type, VITA_DIR_TYPE_MASK_MONTH)) {
// unimplemented
return 0;
} else if(type & (VITA_DIR_TYPE_MASK_ALL | VITA_DIR_TYPE_MASK_SONGS)) {