Resource

Resource Basics

Resource Name Redetect Main Versions
Resource Version 1.0
Category Version
Downloads 738
Release Date 12/14/2022 5:57:00 PM
 

Resource Details

Description This script will use the current version detection setting from the preferences and use that on a set of selected thumbnails to redetect the main version.
Installation Instructions na
Usage Instructions 1. Select one or more version sets
2. Right click on a selected thumb and select "Run Script from Repository->Versions->Redetect Main Versions"
Changes in this version na
Special Requirements
 

Author Information

Author Name IDimager Support
 

Script

  function RedetectMainVersionFor(AImage: TImageItem): Boolean;
  var
    AVDO: TidVersionDetectionObject;
    AMainDI, AVersionDI: TidVersionDetectionItem;
    ANewMainDI: TidVersionDetectionItem;
    AMainVersion, AVersion: TCatalogItem;
    AVersions: TCatalogItems;
    i: Integer;
  begin
    result := False;

    AMainVersion := TCatalogItem.Create(nil);
    AVersions := TCatalogItems.Create(TCatalogItem, '');
    AVDO := TidVersionDetectionObject.Create;
    AMainDI := TidVersionDetectionItem.Create(nil);

    if not PublicCatalog.FindMainVersionForImage(AImage, AMainVersion) then
      AMainVersion.PopFromImage(AImage, False);

    PublicCatalog.EnumVersionsForItem(AMainVersion, AVersions);
    if AVersions.Count > 0 then
    begin
      AMainDI.ItemGUID     := AMainVersion.GUID;
      AMainDI.FileName     := AMainVersion.FileName;
      AMainDI.MediumType   := AMainVersion.MediumType;
      AMainDI.MediumName   := AMainVersion.MediumName;
      AMainDI.MediumSerial := AMainVersion.MediumSerial;
      AMainDI.ReferenceCatalogItem := AMainVersion;

      for i := 0 to AVersions.Count - 1 do
      begin
        AVersion := AVersions.Items[i];

        AVersionDI := AMainDI.Versions.Add;
        AVersionDI.ItemGUID     := AVersion.GUID;
        AVersionDI.FileName     := AVersion.FileName;
        AVersionDI.MediumType   := AVersion.MediumType;
        AVersionDI.MediumName   := AVersion.MediumName;
        AVersionDI.MediumSerial := AVersion.MediumSerial;
        AVersionDI.ReferenceCatalogItem := AVersion;
      end;

      ANewMainDI := AVDO.MatchFor(AMainDI, PublicOptions.VersionMatchSettings.MainVersionMatching, nil);
      if Assigned(ANewMainDI) then
      begin
        if ANewMainDI.ItemGUID = AMainDI.ItemGUID then
        begin
          // store the new main version
          PublicCatalog.UpdateMainVersion(AMainDI.ReferenceCatalogItem, ANewMainDI.ReferenceCatalogItem);
          result := True;
        end;
      end;
    end;

    AMainDI.Free;
    AVDO.Free;
    AVersions.Free;
    AMainVersion.Free;
  end;

var
  AProgress: TxomProgress;
  i, AHit: Integer;
begin
  AProgress := TxomProgress.Create(nil);

  AProgress.Caption := 'Redetecting main versions';
  AProgress.Max := Selected.Count;

  AHit := 0;
  for i := 0 to Selected.Count - 1 do
  begin
    AProgress.Pos := i + 1;
    if RedetectMainVersionFor(Selected.Items[i]) then
      AHit := AHit + 1;
  end;

  AProgress.Free;

  if AHit > 0 then
    Say('Done. ' + IntToStr(AHit) + 'main versions have been updated.')
  else
    Say('No changes needed.');
end;