19 if (file_path.empty()) {
20 spdlog::error(
"Exiv2Provider::readXmp: File path is empty.");
24 spdlog::debug(
"Exiv2Provider::readXmp: Attempting to read XMP from file: {}", file_path);
31 Exiv2::Image::UniquePtr image = Exiv2::ImageFactory::open(file_path.data());
33 spdlog::warn(
"Exiv2Provider::readXmp: Failed to open image file with Exiv2: {}", file_path);
38 image->readMetadata();
40 const Exiv2::XmpData& xmp_data = image->xmpData();
42 if (xmp_data.empty()) {
43 spdlog::debug(
"Exiv2Provider::readXmp: No XMP data found in file: {}", file_path);
48 std::string xmp_packet;
49 if (Exiv2::XmpParser::encode(xmp_packet, xmp_data) != 0) {
50 spdlog::error(
"Exiv2Provider::readXmp: Failed to encode XMP data to packet for file: {}", file_path);
54 spdlog::debug(
"Exiv2Provider::readXmp: Successfully read XMP packet (size {}) from file: {}", xmp_packet.size(), file_path);
56 }
catch (
const Exiv2::Error& e) {
57 spdlog::error(
"Exiv2Provider::readXmp: Exiv2 error reading XMP from file '{}': {}", file_path, e.what());
59 }
catch (
const std::exception& e) {
60 spdlog::error(
"Exiv2Provider::readXmp: Standard exception reading XMP from file '{}': {}", file_path, e.what());
67 if (file_path.empty()) {
68 spdlog::error(
"Exiv2Provider::writeXmp: File path is empty.");
72 spdlog::debug(
"Exiv2Provider::writeXmp: Attempting to write XMP packet (size {}) to file: {}", xmp_data.size(), file_path);
79 Exiv2::Image::UniquePtr image = Exiv2::ImageFactory::open(file_path.data());
81 spdlog::error(
"Exiv2Provider::writeXmp: Failed to open image file with Exiv2 for writing: {}", file_path);
86 image->readMetadata();
88 Exiv2::XmpData xmp_container;
91 if (!xmp_data.empty()) {
92 if (Exiv2::XmpParser::decode(xmp_container, xmp_data.data()) != 0) {
93 spdlog::error(
"Exiv2Provider::writeXmp: Failed to decode provided XMP packet for file: {}", file_path);
97 spdlog::warn(
"Exiv2Provider::writeXmp: Attempting to write empty XMP packet. This will effectively remove XMP metadata.");
101 image->setXmpData(xmp_container);
104 image->writeMetadata();
106 spdlog::info(
"Exiv2Provider::writeXmp: Successfully wrote XMP packet to file: {}", file_path);
108 }
catch (
const Exiv2::Error& e) {
109 spdlog::error(
"Exiv2Provider::writeXmp: Exiv2 error writing XMP to file '{}': {}", file_path, e.what());
111 }
catch (
const std::exception& e) {
112 spdlog::error(
"Exiv2Provider::writeXmp: Standard exception writing XMP to file '{}': {}", file_path, e.what());