Author: axeld Date: 2009-12-08 15:55:14 +0100 (Tue, 08 Dec 2009) New Revision: 34555 Changeset: http://dev.haiku-os.org/changeset/34555/haiku Modified: haiku/trunk/src/kits/media/DataExchange.cpp haiku/trunk/src/kits/media/MediaFiles.cpp Log: * Should have been part of r34554. Modified: haiku/trunk/src/kits/media/DataExchange.cpp =================================================================== --- haiku/trunk/src/kits/media/DataExchange.cpp 2009-12-08 14:22:56 UTC (rev 34554) +++ haiku/trunk/src/kits/media/DataExchange.cpp 2009-12-08 14:55:14 UTC (rev 34555) @@ -80,11 +80,13 @@ status_t -request_data::SendReply(status_t result, reply_data *reply, int replysize) const +request_data::SendReply(status_t result, reply_data *reply, + size_t replySize) const { reply->result = result; // we cheat and use the (command_data *) version of SendToPort - return SendToPort(reply_port, 0, reinterpret_cast<command_data *>(reply), replysize); + return SendToPort(reply_port, 0, reinterpret_cast<command_data *>(reply), + replySize); } Modified: haiku/trunk/src/kits/media/MediaFiles.cpp =================================================================== --- haiku/trunk/src/kits/media/MediaFiles.cpp 2009-12-08 14:22:56 UTC (rev 34554) +++ haiku/trunk/src/kits/media/MediaFiles.cpp 2009-12-08 14:55:14 UTC (rev 34555) @@ -1,5 +1,5 @@ /* - * Copyright 2002-2008, Haiku, Inc. All rights reserved. + * Copyright 2002-2009, Haiku, Inc. All rights reserved. * Distributed under the terms of the MIT License. * * Authors: @@ -9,17 +9,18 @@ #include <MediaFiles.h> -#include "DataExchange.h" -#include "debug.h" +#include <AppMisc.h> +#include <DataExchange.h> +#include <debug.h> + const char BMediaFiles::B_SOUNDS[] = "Sounds"; BMediaFiles::BMediaFiles() : fTypeIndex(-1), - fCurrentType(""), fItemIndex(-1) { @@ -28,7 +29,8 @@ BMediaFiles::~BMediaFiles() { - // TODO: Cleanup! + _ClearTypes(); + _ClearItems(); } @@ -36,50 +38,34 @@ BMediaFiles::RewindTypes() { CALLED(); - status_t rv; - server_rewindtypes_request request; - server_rewindtypes_reply reply; - for (int32 i = 0; i < fTypes.CountItems(); i++) - delete (BString*)fTypes.ItemAt(i); + _ClearTypes(); - fTypes.MakeEmpty(); + server_get_media_types_request request; + request.team = BPrivate::current_team(); - TRACE("BMediaFiles::RewindTypes: sending SERVER_REWINDTYPES\n"); - - rv = QueryServer(SERVER_REWINDTYPES, &request, sizeof(request), &reply, - sizeof(reply)); - if (rv != B_OK) { - ERROR("BMediaFiles::RewindTypes: failed to rewindtypes " - "(error %#lx)\n", rv); - return rv; + server_get_media_types_reply reply; + status_t status = QueryServer(SERVER_GET_MEDIA_FILE_TYPES, &request, + sizeof(request), &reply, sizeof(reply)); + if (status != B_OK) { + ERROR("BMediaFiles::RewindTypes: failed to rewind types: %s\n", + strerror(status)); + return status; } - char *types; - area_id clone; - - clone = clone_area("rewind types clone", reinterpret_cast<void **>(&types), - B_ANY_ADDRESS, B_READ_AREA | B_WRITE_AREA, reply.area); - if (clone < B_OK) { - ERROR("BMediaFiles::RewindTypes failed to clone area, %#lx\n", clone); - delete_area(reply.area); - return B_ERROR; - } - + const char* types = (const char*)reply.address; for (int32 i = 0; i < reply.count; i++) fTypes.AddItem(new BString(types + i * B_MEDIA_NAME_LENGTH)); - delete_area(clone); delete_area(reply.area); fTypeIndex = 0; - return B_OK; } status_t -BMediaFiles::GetNextType(BString *out_type) +BMediaFiles::GetNextType(BString* _type) { CALLED(); if (fTypeIndex < 0 || fTypeIndex >= fTypes.CountItems()) { @@ -87,7 +73,7 @@ return B_BAD_INDEX; } - *out_type = *(BString*)fTypes.ItemAt(fTypeIndex); + *_type = *(BString*)fTypes.ItemAt(fTypeIndex); fTypeIndex++; return B_OK; @@ -95,61 +81,44 @@ status_t -BMediaFiles::RewindRefs(const char *type) +BMediaFiles::RewindRefs(const char* type) { CALLED(); - status_t rv; - server_rewindrefs_request request; - server_rewindrefs_reply reply; - for (int32 i = 0; i < fItems.CountItems(); i++) - delete (BString*)fItems.ItemAt(i); + _ClearItems(); - fItems.MakeEmpty(); + TRACE("BMediaFiles::RewindRefs: sending SERVER_GET_MEDIA_FILE_ITEMS for " + "type %s\n", type); - TRACE("BMediaFiles::RewindRefs: sending SERVER_REWINDREFS for type %s\n", - type); + server_get_media_items_request request; + request.team = BPrivate::current_team(); strncpy(request.type, type, B_MEDIA_NAME_LENGTH); - rv = QueryServer(SERVER_REWINDREFS, &request, sizeof(request), &reply, - sizeof(reply)); - if (rv != B_OK) { - ERROR("BMediaFiles::RewindRefs: failed to rewindrefs (error %#lx)\n", - rv); - return rv; + server_get_media_items_reply reply; + status_t status = QueryServer(SERVER_GET_MEDIA_FILE_ITEMS, &request, + sizeof(request), &reply, sizeof(reply)); + if (status != B_OK) { + ERROR("BMediaFiles::RewindRefs: failed to rewind refs: %s\n", + strerror(status)); + return status; } - if (reply.count>0) { - char *items; - area_id clone; - - clone = clone_area("rewind refs clone", - reinterpret_cast<void **>(&items), B_ANY_ADDRESS, B_READ_AREA - | B_WRITE_AREA, reply.area); - if (clone < B_OK) { - ERROR("BMediaFiles::RewindRefs failed to clone area, %#lx\n", - clone); - delete_area(reply.area); - return B_ERROR; - } - - for (int32 i = 0; i < reply.count; i++) { - fItems.AddItem(new BString(items + i * B_MEDIA_NAME_LENGTH)); - } - - delete_area(clone); - delete_area(reply.area); + const char* items = (const char*)reply.address; + for (int32 i = 0; i < reply.count; i++) { + fItems.AddItem(new BString(items + i * B_MEDIA_NAME_LENGTH, + B_MEDIA_NAME_LENGTH)); } - fCurrentType = BString(type); - fItemIndex = 0; + delete_area(reply.area); + fCurrentType = type; + fItemIndex = 0; return B_OK; } status_t -BMediaFiles::GetNextRef(BString *out_type, entry_ref *out_ref) +BMediaFiles::GetNextRef(BString* _type, entry_ref* _ref) { CALLED(); if (fItemIndex < 0 || fItemIndex >= fItems.CountItems()) { @@ -157,75 +126,66 @@ return B_BAD_INDEX; } - *out_type = *(BString*)fItems.ItemAt(fItemIndex); - fItemIndex++; + *_type = *(BString*)fItems.ItemAt(fItemIndex); + GetRefFor(fCurrentType.String(), _type->String(), _ref); - GetRefFor(fCurrentType.String(), out_type->String(), out_ref); - + fItemIndex++; return B_OK; } status_t -BMediaFiles::GetRefFor(const char *type, const char *item, entry_ref *out_ref) +BMediaFiles::GetRefFor(const char* type, const char* item, entry_ref* _ref) { CALLED(); - status_t rv; - server_getreffor_request request; - server_getreffor_reply reply; + if (type == NULL || item == NULL || _ref == NULL) + return B_BAD_VALUE; + + server_get_ref_for_request request; strncpy(request.type, type, B_MEDIA_NAME_LENGTH); strncpy(request.item, item, B_MEDIA_NAME_LENGTH); - TRACE("BMediaFiles::GetRefFor: sending SERVER_GETREFFOR\n"); - - rv = QueryServer(SERVER_GETREFFOR, &request, sizeof(request), &reply, - sizeof(reply)); - if (rv != B_OK) { - entry_ref ref; - *out_ref = ref; - ERROR("BMediaFiles::GetRefFor: failed to getreffor (error %#lx)\n", - rv); - return rv; + server_get_ref_for_reply reply; + status_t status = QueryServer(SERVER_GET_REF_FOR, &request, sizeof(request), + &reply, sizeof(reply)); + if (status != B_OK) { + ERROR("BMediaFiles::GetRefFor: failed: %s\n", strerror(status)); + return status; } - *out_ref = reply.ref; - + *_ref = reply.ref; return B_OK; } status_t -BMediaFiles::GetAudioGainFor(const char * type, const char * item, - float * out_audio_gain) +BMediaFiles::GetAudioGainFor(const char* type, const char* item, + float* _audioGain) { UNIMPLEMENTED(); - *out_audio_gain = 1.0f; + *_audioGain = 1.0f; return B_OK; } status_t -BMediaFiles::SetRefFor(const char *type, const char *item, - const entry_ref &ref) +BMediaFiles::SetRefFor(const char* type, const char* item, + const entry_ref& ref) { CALLED(); - status_t rv; - server_setreffor_request request; - server_setreffor_reply reply; + server_set_ref_for_request request; strncpy(request.type, type, B_MEDIA_NAME_LENGTH); strncpy(request.item, item, B_MEDIA_NAME_LENGTH); request.ref = ref; - TRACE("BMediaFiles::SetRefFor: sending SERVER_SETREFFOR\n"); - - rv = QueryServer(SERVER_SETREFFOR, &request, sizeof(request), &reply, - sizeof(reply)); - if (rv != B_OK) { - ERROR("BMediaFiles::SetRefFor: failed to setreffor (error %#lx)\n", - rv); - return rv; + server_set_ref_for_reply reply; + status_t status = QueryServer(SERVER_SET_REF_FOR, &request, sizeof(request), + &reply, sizeof(reply)); + if (status != B_OK) { + ERROR("BMediaFiles::SetRefFor: failed: %s\n", strerror(status)); + return status; } return B_OK; @@ -233,8 +193,8 @@ status_t -BMediaFiles::SetAudioGainFor(const char * type, const char * item, - float audio_gain) +BMediaFiles::SetAudioGainFor(const char* type, const char* item, + float audioGain) { UNIMPLEMENTED(); return B_OK; @@ -242,25 +202,21 @@ status_t -BMediaFiles::RemoveRefFor(const char *type, const char *item, +BMediaFiles::RemoveRefFor(const char* type, const char* item, const entry_ref &ref) { - status_t rv; - server_removereffor_request request; - server_removereffor_reply reply; + CALLED(); + server_remove_ref_for_request request; strncpy(request.type, type, B_MEDIA_NAME_LENGTH); strncpy(request.item, item, B_MEDIA_NAME_LENGTH); - request.ref = ref; - TRACE("BMediaFiles::RemoveRefFor: sending SERVER_REMOVEREFFOR\n"); - - rv = QueryServer(SERVER_REMOVEREFFOR, &request, sizeof(request), &reply, - sizeof(reply)); - if (rv != B_OK) { - ERROR("BMediaFiles::RemoveRefFor: failed to removereffor " - "(error %#lx)\n", rv); - return rv; + server_remove_ref_for_reply reply; + status_t status = QueryServer(SERVER_REMOVE_REF_FOR, &request, + sizeof(request), &reply, sizeof(reply)); + if (status != B_OK) { + ERROR("BMediaFiles::RemoveRefFor: failed: %s\n", strerror(status)); + return status; } return B_OK; @@ -268,42 +224,65 @@ status_t -BMediaFiles::RemoveItem(const char *type, const char *item) +BMediaFiles::RemoveItem(const char* type, const char* item) { - status_t rv; - server_removeitem_request request; - server_removeitem_reply reply; + CALLED(); + server_remove_media_item_request request; strncpy(request.type, type, B_MEDIA_NAME_LENGTH); strncpy(request.item, item, B_MEDIA_NAME_LENGTH); - TRACE("BMediaFiles::RemoveItem: sending SERVER_REMOVEITEM\n"); - - rv = QueryServer(SERVER_REMOVEITEM, &request, sizeof(request), &reply, - sizeof(reply)); - if (rv != B_OK) { - ERROR("BMediaFiles::RemoveItem: failed to removeitem (error %#lx)\n", - rv); - return rv; + server_remove_media_item_reply reply; + status_t status = QueryServer(SERVER_REMOVE_MEDIA_ITEM, &request, + sizeof(request), &reply, sizeof(reply)); + if (status != B_OK) { + ERROR("BMediaFiles::RemoveItem: failed: %s\n", strerror(status)); + return status; } return B_OK; } +// #pragma mark - private + + +void +BMediaFiles::_ClearTypes() +{ + for (int32 i = 0; i < fItems.CountItems(); i++) + delete (BString*)fItems.ItemAt(i); + + fTypes.MakeEmpty(); +} + + +void +BMediaFiles::_ClearItems() +{ + for (int32 i = 0; i < fItems.CountItems(); i++) + delete (BString*)fItems.ItemAt(i); + + fItems.MakeEmpty(); +} + + // #pragma mark - FBC padding -status_t BMediaFiles::_Reserved_MediaFiles_0(void *,...) + +status_t +BMediaFiles::_Reserved_MediaFiles_0(void*,...) { // TODO: Someone didn't understand FBC return B_ERROR; } -status_t BMediaFiles::_Reserved_MediaFiles_1(void *,...) { return B_ERROR; } -status_t BMediaFiles::_Reserved_MediaFiles_2(void *,...) { return B_ERROR; } -status_t BMediaFiles::_Reserved_MediaFiles_3(void *,...) { return B_ERROR; } -status_t BMediaFiles::_Reserved_MediaFiles_4(void *,...) { return B_ERROR; } -status_t BMediaFiles::_Reserved_MediaFiles_5(void *,...) { return B_ERROR; } -status_t BMediaFiles::_Reserved_MediaFiles_6(void *,...) { return B_ERROR; } -status_t BMediaFiles::_Reserved_MediaFiles_7(void *,...) { return B_ERROR; } +status_t BMediaFiles::_Reserved_MediaFiles_1(void*,...) { return B_ERROR; } +status_t BMediaFiles::_Reserved_MediaFiles_2(void*,...) { return B_ERROR; } +status_t BMediaFiles::_Reserved_MediaFiles_3(void*,...) { return B_ERROR; } +status_t BMediaFiles::_Reserved_MediaFiles_4(void*,...) { return B_ERROR; } +status_t BMediaFiles::_Reserved_MediaFiles_5(void*,...) { return B_ERROR; } +status_t BMediaFiles::_Reserved_MediaFiles_6(void*,...) { return B_ERROR; } +status_t BMediaFiles::_Reserved_MediaFiles_7(void*,...) { return B_ERROR; } +