mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-06 23:11:25 +12:00
cellSearch: fix cellSearchStartListSearch
Fixes listing BGM in Gundam. The returned content was always empty. Playback of the tracks will still require a MusicSelectionContext and cellMusic playback, which isn't implemented yet.
This commit is contained in:
parent
0a34403ef8
commit
b1a9e87ecf
2 changed files with 31 additions and 21 deletions
|
@ -102,17 +102,6 @@ struct search_object_t
|
||||||
std::vector<content_id_type> content_ids;
|
std::vector<content_id_type> content_ids;
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename D>
|
|
||||||
void parse_metadata(D& dst, const utils::media_info& mi, const std::string& key, const std::string& def, usz max_length)
|
|
||||||
{
|
|
||||||
std::string value = mi.get_metadata<std::string>(key, def);
|
|
||||||
if (value.size() > max_length)
|
|
||||||
{
|
|
||||||
value.resize(max_length);
|
|
||||||
}
|
|
||||||
strcpy_trunc(dst, value);
|
|
||||||
};
|
|
||||||
|
|
||||||
error_code check_search_state(search_state state, search_state action)
|
error_code check_search_state(search_state state, search_state action)
|
||||||
{
|
{
|
||||||
switch (action)
|
switch (action)
|
||||||
|
@ -651,7 +640,7 @@ error_code cellSearchStartListSearch(CellSearchListSearchType type, CellSearchSo
|
||||||
content_map.map.emplace(hash, curr_find);
|
content_map.map.emplace(hash, curr_find);
|
||||||
curr_search->content_ids.emplace_back(hash, curr_find); // place this file's "ID" into the list of found types
|
curr_search->content_ids.emplace_back(hash, curr_find); // place this file's "ID" into the list of found types
|
||||||
|
|
||||||
cellSearch.notice("cellSearchStartListSearch(): Content ID: %08X, Path: \"%s\"", hash, item_path);
|
cellSearch.notice("cellSearchStartListSearch(): CellSearchId: 0x%x, Content ID: %08X, Path: \"%s\"", id, hash, item_path);
|
||||||
}
|
}
|
||||||
else // list is already stored and tracked
|
else // list is already stored and tracked
|
||||||
{
|
{
|
||||||
|
@ -659,8 +648,9 @@ error_code cellSearchStartListSearch(CellSearchListSearchType type, CellSearchSo
|
||||||
// Perform checks to see if the identified list has been modified since last checked
|
// Perform checks to see if the identified list has been modified since last checked
|
||||||
// In which case, update the stored content's properties
|
// In which case, update the stored content's properties
|
||||||
// auto content_found = &content_map->at(content_id);
|
// auto content_found = &content_map->at(content_id);
|
||||||
// curr_search->content_ids.emplace_back(found->first, found->second);
|
curr_search->content_ids.emplace_back(found->first, found->second);
|
||||||
cellSearch.notice("cellSearchStartListSearch(): Already tracked: Content ID: %08X, Path: \"%s\"", hash, item_path);
|
|
||||||
|
cellSearch.notice("cellSearchStartListSearch(): Already tracked: CellSearchId: 0x%x, Content ID: %08X, Path: \"%s\"", id, hash, item_path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -870,7 +860,7 @@ error_code cellSearchStartContentSearchInList(vm::cptr<CellSearchContentId> list
|
||||||
content_map.map.emplace(hash, curr_find);
|
content_map.map.emplace(hash, curr_find);
|
||||||
curr_search->content_ids.emplace_back(hash, curr_find); // place this file's "ID" into the list of found types
|
curr_search->content_ids.emplace_back(hash, curr_find); // place this file's "ID" into the list of found types
|
||||||
|
|
||||||
cellSearch.notice("cellSearchStartContentSearchInList(): Content ID: %08X, Path: \"%s\"", hash, item_path);
|
cellSearch.notice("cellSearchStartContentSearchInList(): CellSearchId: 0x%x, Content ID: %08X, Path: \"%s\"", id, hash, item_path);
|
||||||
}
|
}
|
||||||
else // file is already stored and tracked
|
else // file is already stored and tracked
|
||||||
{
|
{
|
||||||
|
@ -880,7 +870,7 @@ error_code cellSearchStartContentSearchInList(vm::cptr<CellSearchContentId> list
|
||||||
// auto content_found = &content_map->at(content_id);
|
// auto content_found = &content_map->at(content_id);
|
||||||
curr_search->content_ids.emplace_back(found->first, found->second);
|
curr_search->content_ids.emplace_back(found->first, found->second);
|
||||||
|
|
||||||
cellSearch.notice("cellSearchStartContentSearchInList(): Already Tracked: Content ID: %08X, Path: \"%s\"", hash, item_path);
|
cellSearch.notice("cellSearchStartContentSearchInList(): Already Tracked: CellSearchId: 0x%x, Content ID: %08X, Path: \"%s\"", id, hash, item_path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -1052,7 +1042,7 @@ error_code cellSearchStartContentSearch(CellSearchContentSearchType type, CellSe
|
||||||
content_map.map.emplace(hash, curr_find);
|
content_map.map.emplace(hash, curr_find);
|
||||||
curr_search->content_ids.emplace_back(hash, curr_find); // place this file's "ID" into the list of found types
|
curr_search->content_ids.emplace_back(hash, curr_find); // place this file's "ID" into the list of found types
|
||||||
|
|
||||||
cellSearch.notice("cellSearchStartContentSearch(): Content ID: %08X, Path: \"%s\"", hash, item_path);
|
cellSearch.notice("cellSearchStartContentSearch(): CellSearchId: 0x%x, Content ID: %08X, Path: \"%s\"", id, hash, item_path);
|
||||||
}
|
}
|
||||||
else // file is already stored and tracked
|
else // file is already stored and tracked
|
||||||
{ // TODO
|
{ // TODO
|
||||||
|
@ -1061,7 +1051,7 @@ error_code cellSearchStartContentSearch(CellSearchContentSearchType type, CellSe
|
||||||
// auto content_found = &content_map->at(content_id);
|
// auto content_found = &content_map->at(content_id);
|
||||||
curr_search->content_ids.emplace_back(found->first, found->second);
|
curr_search->content_ids.emplace_back(found->first, found->second);
|
||||||
|
|
||||||
cellSearch.notice("cellSearchStartContentSearch(): Already Tracked: Content ID: %08X, Path: \"%s\"", hash, item_path);
|
cellSearch.notice("cellSearchStartContentSearch(): Already Tracked: CellSearchId: 0x%x, Content ID: %08X, Path: \"%s\"", id, hash, item_path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -1480,34 +1470,43 @@ error_code cellSearchGetMusicSelectionContext(CellSearchId searchId, vm::cptr<Ce
|
||||||
if (content != searchObject->content_ids.cend() && content->second)
|
if (content != searchObject->content_ids.cend() && content->second)
|
||||||
{
|
{
|
||||||
// Check if the type of the found content is correct
|
// Check if the type of the found content is correct
|
||||||
|
if (content->second->type != CELL_SEARCH_CONTENTTYPE_MUSIC)
|
||||||
|
{
|
||||||
|
return { CELL_SEARCH_ERROR_INVALID_CONTENTTYPE, fmt::format("Type: %d, Expected: CELL_SEARCH_CONTENTTYPE_MUSIC")};
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if the type of the found content matches our search content type
|
||||||
if (content->second->type != first_content->type)
|
if (content->second->type != first_content->type)
|
||||||
{
|
{
|
||||||
return CELL_SEARCH_ERROR_NOT_SUPPORTED_CONTEXT;
|
return { CELL_SEARCH_ERROR_NOT_SUPPORTED_CONTEXT, fmt::format("Type: %d, Expected: %d", +content->second->type, +first_content->type) };
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Use the found content
|
// TODO: Use the found content
|
||||||
// first track/playlist of context = content->second;
|
// first track/playlist of context = content->second;
|
||||||
|
cellSearch.todo("cellSearchGetMusicSelectionContext(): Hash=%08X, Assign found track: Type=0x%x, Path=%s", content_hash, +content->second->type, content->second->infoPath.contentPath);
|
||||||
}
|
}
|
||||||
else if (first_content->type == CELL_SEARCH_CONTENTTYPE_MUSICLIST)
|
else if (first_content->type == CELL_SEARCH_CONTENTTYPE_MUSICLIST)
|
||||||
{
|
{
|
||||||
// Abort if we can't find the playlist.
|
// Abort if we can't find the playlist.
|
||||||
return CELL_SEARCH_ERROR_CONTENT_NOT_FOUND;
|
return { CELL_SEARCH_ERROR_CONTENT_NOT_FOUND, "Type: CELL_SEARCH_CONTENTTYPE_MUSICLIST" };
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// TODO: Select the first track by default
|
// TODO: Select the first track by default
|
||||||
// first track of context = first_content;
|
// first track of context = first_content;
|
||||||
|
cellSearch.todo("cellSearchGetMusicSelectionContext(): Hash=%08X, Assign first track: Type=0x%x, Path=%s", content_hash, +first_content->type, first_content->infoPath.contentPath);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (first_content->type == CELL_SEARCH_CONTENTTYPE_MUSICLIST)
|
else if (first_content->type == CELL_SEARCH_CONTENTTYPE_MUSICLIST)
|
||||||
{
|
{
|
||||||
// Abort if we don't have the necessary info to select a playlist.
|
// Abort if we don't have the necessary info to select a playlist.
|
||||||
return CELL_SEARCH_ERROR_NOT_SUPPORTED_CONTEXT;
|
return { CELL_SEARCH_ERROR_NOT_SUPPORTED_CONTEXT, "Type: CELL_SEARCH_CONTENTTYPE_MUSICLIST" };
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// TODO: Select the first track by default
|
// TODO: Select the first track by default
|
||||||
// first track of context = first_content;
|
// first track of context = first_content;
|
||||||
|
cellSearch.todo("cellSearchGetMusicSelectionContext(): Assign first track: Type=0x%x, Path=%s", +first_content->type, first_content->infoPath.contentPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Use repeatMode and option in our context, depending on the type (list vs single)
|
// TODO: Use repeatMode and option in our context, depending on the type (list vs single)
|
||||||
|
|
|
@ -21,4 +21,15 @@ namespace utils
|
||||||
};
|
};
|
||||||
|
|
||||||
std::pair<bool, media_info> get_media_info(const std::string& path, s32 av_media_type);
|
std::pair<bool, media_info> get_media_info(const std::string& path, s32 av_media_type);
|
||||||
|
|
||||||
|
template <typename D>
|
||||||
|
void parse_metadata(D& dst, const utils::media_info& mi, const std::string& key, const std::string& def, usz max_length)
|
||||||
|
{
|
||||||
|
std::string value = mi.get_metadata<std::string>(key, def);
|
||||||
|
if (value.size() > max_length)
|
||||||
|
{
|
||||||
|
value.resize(max_length);
|
||||||
|
}
|
||||||
|
strcpy_trunc(dst, value);
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue