22 if (arg_vec.empty()) {
23 return absl::InvalidArgumentError(
24 "Usage: palette <export|import> [options]");
27 const std::string& action = arg_vec[0];
28 std::vector<std::string> new_args(arg_vec.begin() + 1, arg_vec.end());
30 if (action ==
"export") {
32 }
else if (action ==
"import") {
36 return absl::InvalidArgumentError(
"Invalid action for palette command.");
41 const std::vector<std::string>& arg_vec) {
42 std::string group_name;
44 std::string output_file;
46 for (
size_t i = 0; i < arg_vec.size(); ++i) {
47 const std::string& arg = arg_vec[i];
48 if ((arg ==
"--group") && i + 1 < arg_vec.size()) {
49 group_name = arg_vec[++i];
50 }
else if ((arg ==
"--id") && i + 1 < arg_vec.size()) {
51 palette_id = std::stoi(arg_vec[++i]);
52 }
else if ((arg ==
"--to") && i + 1 < arg_vec.size()) {
53 output_file = arg_vec[++i];
57 if (group_name.empty() || palette_id == -1 || output_file.empty()) {
58 return absl::InvalidArgumentError(
59 "Usage: palette export --group <group> --id <id> --to <file>");
62 std::string rom_file = absl::GetFlag(FLAGS_rom);
63 if (rom_file.empty()) {
64 return absl::InvalidArgumentError(
65 "ROM file must be provided via --rom flag.");
71 return absl::AbortedError(
"Failed to load ROM.");
77 if (!load_status.ok()) {
78 return absl::AbortedError(
"Failed to load game data.");
83 return absl::NotFoundError(
"Palette group not found.");
86 auto palette = palette_group->palette(palette_id);
87 if (palette.empty()) {
88 return absl::NotFoundError(
"Palette not found.");
91 std::vector<SDL_Color> sdl_palette;
92 for (
const auto& color : palette) {
94 sdl_color.r = color.rgb().x;
95 sdl_color.g = color.rgb().y;
96 sdl_color.b = color.rgb().z;
98 sdl_palette.push_back(sdl_color);
106 std::cout <<
"Successfully exported palette " << palette_id <<
" from group "
107 << group_name <<
" to " << output_file << std::endl;
109 return absl::OkStatus();
114 const std::vector<std::string>& arg_vec) {
115 std::string group_name;
117 std::string input_file;
119 for (
size_t i = 0; i < arg_vec.size(); ++i) {
120 const std::string& arg = arg_vec[i];
121 if ((arg ==
"--group") && i + 1 < arg_vec.size()) {
122 group_name = arg_vec[++i];
123 }
else if ((arg ==
"--id") && i + 1 < arg_vec.size()) {
124 palette_id = std::stoi(arg_vec[++i]);
125 }
else if ((arg ==
"--from") && i + 1 < arg_vec.size()) {
126 input_file = arg_vec[++i];
130 if (group_name.empty() || palette_id == -1 || input_file.empty()) {
131 return absl::InvalidArgumentError(
132 "Usage: palette import --group <group> --id <id> --from <file>");
135 std::string rom_file = absl::GetFlag(FLAGS_rom);
136 if (rom_file.empty()) {
137 return absl::InvalidArgumentError(
138 "ROM file must be provided via --rom flag.");
144 return absl::AbortedError(
"Failed to load ROM.");
150 if (!load_status.ok()) {
151 return absl::AbortedError(
"Failed to load game data.");
155 if (sdl_palette.empty()) {
156 return absl::AbortedError(
"Failed to load palette file.");
160 for (
const auto& sdl_color : sdl_palette) {
166 if (!palette_group) {
167 return absl::NotFoundError(
"Palette group not found.");
171 auto* pal = palette_group->mutable_palette(palette_id);
175 auto save_status = rom.
SaveToFile({.save_new =
false});
176 if (!save_status.ok()) {
180 std::cout <<
"Successfully imported palette " << palette_id <<
" to group "
181 << group_name <<
" from " << input_file << std::endl;
182 std::cout <<
"✅ ROM saved to: " << rom.
filename() << std::endl;
184 return absl::OkStatus();