---------------------------------------------------------------------------
| 434 | |
| 435 | //--------------------------------------------------------------------------- |
| 436 | bool ExternalMetadata(const Ztring& FileName, const Ztring& ExternalMetadata, const Ztring& ExternalMetaDataConfig, const ZtringList& Parents, const Ztring& PlaceHolder, Node* Main, Node* MI_Info) |
| 437 | { |
| 438 | if (ExternalMetaDataConfig.empty()) // ExternalMetadata is used in export only if there is ExternalMetadata config (= else it is another format) |
| 439 | return true; |
| 440 | |
| 441 | ZtringListList CSV; |
| 442 | CSV.Separator_Set(0, EOL); |
| 443 | CSV.Separator_Set(1, __T(";")); |
| 444 | CSV.Write(ExternalMetadata); |
| 445 | |
| 446 | //Check if the CSV contains at least the header + one entry |
| 447 | if (CSV.size()<2) |
| 448 | { |
| 449 | MediaInfoLib::Config.Log_Send(0xC0, 0xFF, 0, "Invalid CSV for external metadata"); |
| 450 | return false; |
| 451 | } |
| 452 | |
| 453 | //Check if the file is present in the CSV |
| 454 | if (CSV.FindValue(FileName, 0, 0, 1).empty()) |
| 455 | { |
| 456 | MediaInfoLib::Config.Log_Send(0xC0, 0xFF, 0, "File name not found in external metadata file"); |
| 457 | return false; |
| 458 | } |
| 459 | |
| 460 | //Parse XML template |
| 461 | XMLDocument Template; |
| 462 | if (Template.Parse(ExternalMetaDataConfig.To_UTF8().c_str()) != XML_SUCCESS) |
| 463 | { |
| 464 | MediaInfoLib::Config.Log_Send(0xC0, 0xFF, 0, "Invalid XML template for external metadata"); |
| 465 | return false; |
| 466 | } |
| 467 | |
| 468 | Parse_XML(Parents, PlaceHolder, Template.RootElement(), Main, &MI_Info, FileName, CSV); |
| 469 | |
| 470 | return true; |
| 471 | } |
| 472 | |
| 473 | //--------------------------------------------------------------------------- |
| 474 | #if defined(MEDIAINFO_EBUCORE_YES) || defined(MEDIAINFO_FIMS_YES) || defined(MEDIAINFO_MPEG7_YES) |