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); setActive(true);
do { do {
qDebug("Waiting for wireless connection");
if((vita = VitaMTP_Get_First_Wireless_Vita(&host, 0, CC::deviceRegistered, CC::generatePin, CC::registrationComplete)) != NULL) { if((vita = VitaMTP_Get_First_Wireless_Vita(&host, 0, CC::deviceRegistered, CC::generatePin, CC::registrationComplete)) != NULL) {
qDebug("Starting new wireless connection"); qDebug("Starting new wireless connection");
processNewConnection(vita); processNewConnection(vita);

View File

@@ -265,17 +265,55 @@ void CmaEvent::vitaEventSendCopyConfirmationInfo(vita_event_t *event, int eventI
QMutexLocker locker(&m_db->mutex); QMutexLocker locker(&m_db->mutex);
qint64 size;
qint64 total_size = 0; qint64 total_size = 0;
for(quint32 i = 0; i < info->count; i++) { // check if the item is a single folder
if((size = m_db->getObjectSize(info->ohfi[i])) < 0) { if(info->count == 1) {
qWarning("Cannot find OHFI %d", info->ohfi[i]); metadata_t meta;
free(info); if(m_db->getObjectMetadata(info->ohfi[0], meta)) {
return; // 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;
}
total_size += size; }
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]);
free(info);
return;
}
total_size += size;
}
} }
if(VitaMTP_SendCopyConfirmationInfo(device, eventId, info, total_size) != PTP_RC_OK) { if(VitaMTP_SendCopyConfirmationInfo(device, eventId, info, total_size) != PTP_RC_OK) {
@@ -440,7 +478,7 @@ void CmaEvent::vitaEventSendObject(vita_event_t *event, int eventId)
// send the data over // send the data over
qDebug("Sending %s of %lu bytes to device", metadata->name, len); 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); VitaMTP_RegisterCancelEventId(eventId);
quint16 ret = VitaMTP_SendObject_Callback(device, &parentHandle, &handle, metadata, &CmaEvent::readCallback); 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: case VITA_OHFI_PHOTO:
metadata.dataType = Photo; metadata.dataType = Photo;
this->path = path; this->path = path;
num_filters = 2; num_filters = 3;
filters = new metadata_t[2]; filters = new metadata_t[3];
createFilter(&filters[0], "Folders", VITA_DIR_TYPE_MASK_PHOTO | VITA_DIR_TYPE_MASK_ROOT | VITA_DIR_TYPE_MASK_REGULAR); createFilter(&filters[0], "All", VITA_DIR_TYPE_MASK_PHOTO | VITA_DIR_TYPE_MASK_ROOT | VITA_DIR_TYPE_MASK_ALL);
createFilter(&filters[1], "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; break;
case VITA_OHFI_VIDEO: case VITA_OHFI_VIDEO:
@@ -60,8 +61,8 @@ void CMARootObject::initObject(const QString &path)
this->path = path; this->path = path;
num_filters = 2; num_filters = 2;
filters = new metadata_t[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[0], "All", VITA_DIR_TYPE_MASK_VIDEO | VITA_DIR_TYPE_MASK_ROOT | VITA_DIR_TYPE_MASK_ALL);
createFilter(&filters[1], "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; break;
case VITA_OHFI_VITAAPP: case VITA_OHFI_VITAAPP:

View File

@@ -327,13 +327,16 @@ int QListDB::acceptFilteredObject(const CMAObject *parent, const CMAObject *curr
result = (current->metadata.dataType & Music); 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 // unimplemented
return 0; 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 // unimplemented
return 0; 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 // unimplemented
return 0; return 0;
} else if(type & (VITA_DIR_TYPE_MASK_ALL | VITA_DIR_TYPE_MASK_SONGS)) { } else if(type & (VITA_DIR_TYPE_MASK_ALL | VITA_DIR_TYPE_MASK_SONGS)) {