control_metadata.cpp 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. // Copyright 2018 yuzu emulator team
  2. // Licensed under GPLv2 or any later version
  3. // Refer to the license.txt file included.
  4. #include "common/string_util.h"
  5. #include "common/swap.h"
  6. #include "core/file_sys/control_metadata.h"
  7. namespace FileSys {
  8. const std::array<const char*, 15> LANGUAGE_NAMES = {
  9. "AmericanEnglish", "BritishEnglish", "Japanese",
  10. "French", "German", "LatinAmericanSpanish",
  11. "Spanish", "Italian", "Dutch",
  12. "CanadianFrench", "Portugese", "Russian",
  13. "Korean", "Taiwanese", "Chinese",
  14. };
  15. std::string LanguageEntry::GetApplicationName() const {
  16. return Common::StringFromFixedZeroTerminatedBuffer(application_name.data(),
  17. application_name.size());
  18. }
  19. std::string LanguageEntry::GetDeveloperName() const {
  20. return Common::StringFromFixedZeroTerminatedBuffer(developer_name.data(),
  21. developer_name.size());
  22. }
  23. NACP::NACP(VirtualFile file) : raw(std::make_unique<RawNACP>()) {
  24. file->ReadObject(raw.get());
  25. }
  26. NACP::~NACP() = default;
  27. const LanguageEntry& NACP::GetLanguageEntry(Language language) const {
  28. if (language != Language::Default) {
  29. return raw->language_entries.at(static_cast<u8>(language));
  30. }
  31. for (const auto& language_entry : raw->language_entries) {
  32. if (!language_entry.GetApplicationName().empty())
  33. return language_entry;
  34. }
  35. // Fallback to English
  36. return GetLanguageEntry(Language::AmericanEnglish);
  37. }
  38. std::string NACP::GetApplicationName(Language language) const {
  39. return GetLanguageEntry(language).GetApplicationName();
  40. }
  41. std::string NACP::GetDeveloperName(Language language) const {
  42. return GetLanguageEntry(language).GetDeveloperName();
  43. }
  44. u64 NACP::GetTitleId() const {
  45. return raw->title_id;
  46. }
  47. u64 NACP::GetDLCBaseTitleId() const {
  48. return raw->dlc_base_title_id;
  49. }
  50. std::string NACP::GetVersionString() const {
  51. return Common::StringFromFixedZeroTerminatedBuffer(raw->version_string.data(),
  52. raw->version_string.size());
  53. }
  54. std::vector<u8> NACP::GetRawBytes() const {
  55. std::vector<u8> out(sizeof(RawNACP));
  56. std::memcpy(out.data(), raw.get(), sizeof(RawNACP));
  57. return out;
  58. }
  59. } // namespace FileSys