25 if (arg_vec.empty()) {
26 return absl::InvalidArgumentError(
27 "Usage: palette <export|import> [options]");
30 const std::string& action = arg_vec[0];
31 std::vector<std::string> new_args(arg_vec.begin() + 1, arg_vec.end());
33 if (action ==
"export") {
35 }
else if (action ==
"import") {
39 return absl::InvalidArgumentError(
"Invalid action for palette command.");
44 const std::vector<std::string>& arg_vec) {
45 std::string group_name;
47 std::string output_file;
49 for (
size_t i = 0; i < arg_vec.size(); ++i) {
50 const std::string& arg = arg_vec[i];
51 if ((arg ==
"--group") && i + 1 < arg_vec.size()) {
52 group_name = arg_vec[++i];
53 }
else if ((arg ==
"--id") && i + 1 < arg_vec.size()) {
54 palette_id = std::stoi(arg_vec[++i]);
55 }
else if ((arg ==
"--to") && i + 1 < arg_vec.size()) {
56 output_file = arg_vec[++i];
60 if (group_name.empty() || palette_id == -1 || output_file.empty()) {
61 return absl::InvalidArgumentError(
62 "Usage: palette export --group <group> --id <id> --to <file>");
65 std::string rom_file = absl::GetFlag(FLAGS_rom);
66 if (rom_file.empty()) {
67 return absl::InvalidArgumentError(
68 "ROM file must be provided via --rom flag.");
74 return absl::AbortedError(
"Failed to load ROM.");
80 if (!load_status.ok()) {
81 return absl::AbortedError(
"Failed to load game data.");
86 return absl::NotFoundError(
"Palette group not found.");
89 auto palette = palette_group->palette(palette_id);
90 if (palette.empty()) {
91 return absl::NotFoundError(
"Palette not found.");
94 std::vector<SDL_Color> sdl_palette;
95 for (
const auto& color : palette) {
97 sdl_color.r = color.rgb().x;
98 sdl_color.g = color.rgb().y;
99 sdl_color.b = color.rgb().z;
101 sdl_palette.push_back(sdl_color);
109 std::cout <<
"Successfully exported palette " << palette_id <<
" from group "
110 << group_name <<
" to " << output_file << std::endl;
112 return absl::OkStatus();
117 const std::vector<std::string>& arg_vec) {
118 std::string group_name;
120 std::string input_file;
122 for (
size_t i = 0; i < arg_vec.size(); ++i) {
123 const std::string& arg = arg_vec[i];
124 if ((arg ==
"--group") && i + 1 < arg_vec.size()) {
125 group_name = arg_vec[++i];
126 }
else if ((arg ==
"--id") && i + 1 < arg_vec.size()) {
127 palette_id = std::stoi(arg_vec[++i]);
128 }
else if ((arg ==
"--from") && i + 1 < arg_vec.size()) {
129 input_file = arg_vec[++i];
133 if (group_name.empty() || palette_id == -1 || input_file.empty()) {
134 return absl::InvalidArgumentError(
135 "Usage: palette import --group <group> --id <id> --from <file>");
138 std::string rom_file = absl::GetFlag(FLAGS_rom);
139 if (rom_file.empty()) {
140 return absl::InvalidArgumentError(
141 "ROM file must be provided via --rom flag.");
147 return absl::AbortedError(
"Failed to load ROM.");
153 if (!load_status.ok()) {
154 return absl::AbortedError(
"Failed to load game data.");
158 if (sdl_palette.empty()) {
159 return absl::AbortedError(
"Failed to load palette file.");
163 for (
const auto& sdl_color : sdl_palette) {
169 if (!palette_group) {
170 return absl::NotFoundError(
"Palette group not found.");
174 auto* pal = palette_group->mutable_palette(palette_id);
178 auto save_status = rom.
SaveToFile({.save_new =
false});
179 if (!save_status.ok()) {
183 std::cout <<
"Successfully imported palette " << palette_id <<
" to group "
184 << group_name <<
" from " << input_file << std::endl;
185 std::cout <<
"✅ ROM saved to: " << rom.
filename() << std::endl;
187 return absl::OkStatus();