// Add Icon By Type
// This script reads the 'Type' of every Item in the current Playlist
// and set the Item's Icon accordingly.

// Written by Cad Delworth, Leith FM, Edinburgh, Scotland
// http://www.leithfm.co.uk

// USAGE:
// 1. Put mAirList into ASSIST mode.
// 2. Load the Playlist with the items whose Type values you wish to read.
// 3. Run this script.

const
// Name of script, used as a prefix to all SystemLog messages (default: 'AddIconByType script: ')
// If you change this, keep a colon and space as the last two characters.
  SCRIPTNAME = 'AddIconByType script: ';

// Path, prefix, and suffix of graphics file name
  GRAPHICS_FILENAME_PATH = 'C:\Program Files\mAirList\3\images\';
  GRAPHICS_FILENAME_PREFIX = 'icon_';
  GRAPHICS_FILENAME_SUFFIX = '.png';

// The name of the graphics file to use for each Type.
// Set all values to empty strings ('') EXCEPT for the Types where you want to set icons.
// Values are (hopefully?) obvious.
  MUSIC_GRAPHICS_FILE        = '';
  VOICE_GRAPHICS_FILE        = 'voicetrack';
  NEWS_GRAPHICS_FILE         = '';
  ADVERTISING_GRAPHICS_FILE  = 'advertisement';
  PACKAGE_GRAPHICS_FILE      = '';
  JINGLE_GRAPHICS_FILE       = 'LFMlogo';
  SOUND_GRAPHICS_FILE        = '';
  EFFECT_GRAPHICS_FILE       = '';
  TRAILER_GRAPHICS_FILE      = '';
  PROMO_GRAPHICS_FILE        = 'promo';
  SPONSORSHIP_GRAPHICS_FILE  = '';
  SWEEPER_GRAPHICS_FILE      = 'LFMlogo';
  DROP_GRAPHICS_FILE         = '';
  STATIONID_GRAPHICS_FILE    = 'LFMlogo';
  BED_GRAPHICS_FILE          = '';
  INSTRUMENTAL_GRAPHICS_FILE = '';
  SHOW_GRAPHICS_FILE         = '';
  OTHER_GRAPHICS_FILE        = '';
  CUSTOM1_GRAPHICS_FILE      = '';
  CUSTOM2_GRAPHICS_FILE      = '';
  CUSTOM3_GRAPHICS_FILE      = '';
  CUSTOM4_GRAPHICS_FILE      = '';

var
  i, iChangedItemCount, iItemCount, iMax: integer;
  sIconFileName, sPlaylist: string;
  currentItem: IPlaylistItem;
  piType: TPlaylistItemType;

procedure ProcessCurrentPlaylist;
begin

  SystemLog(SCRIPTNAME
    + 'Processing Playlist '
    + sPlaylist
    + ' ('
    + IntToStr(iItemCount)
    + ' items), please wait ...');

  iChangedItemCount := 0;
  iMax := iItemCount - 1;

  for i := 0 to iMax do
  begin

    currentItem := CurrentPlaylist.GetItem(i);
    piType := currentItem.GetItemType;
    
    sIconFileName := '';

// Set a string to match the type
    case piType of
      pitMusic:        sIconFileName := MUSIC_GRAPHICS_FILE;
      pitVoice:        sIconFileName := VOICE_GRAPHICS_FILE;
      pitNews:         sIconFileName := NEWS_GRAPHICS_FILE;
      pitAdvertising:  sIconFileName := ADVERTISING_GRAPHICS_FILE;
      pitPackage:      sIconFileName := PACKAGE_GRAPHICS_FILE;
      pitJingle:       sIconFileName := JINGLE_GRAPHICS_FILE;
      pitSound:        sIconFileName := SOUND_GRAPHICS_FILE;
      pitEffect:       sIconFileName := EFFECT_GRAPHICS_FILE;
      pitTrailer:      sIconFileName := TRAILER_GRAPHICS_FILE;
      pitPromo:        sIconFileName := PROMO_GRAPHICS_FILE;
      pitSponsorship:  sIconFileName := SPONSORSHIP_GRAPHICS_FILE;
      pitSweeper:      sIconFileName := SWEEPER_GRAPHICS_FILE;
      pitDrop:         sIconFileName := DROP_GRAPHICS_FILE;
      pitStationID:    sIconFileName := STATIONID_GRAPHICS_FILE;
      pitBed:          sIconFileName := BED_GRAPHICS_FILE;
      pitInstrumental: sIconFileName := INSTRUMENTAL_GRAPHICS_FILE;
      pitShow:         sIconFileName := SHOW_GRAPHICS_FILE;
      pitOther:        sIconFileName := OTHER_GRAPHICS_FILE;
      pitCustom1:      sIconFileName := CUSTOM1_GRAPHICS_FILE;
      pitCustom2:      sIconFileName := CUSTOM2_GRAPHICS_FILE;
      pitCustom3:      sIconFileName := CUSTOM3_GRAPHICS_FILE;
      pitCustom4:      sIconFileName := CUSTOM4_GRAPHICS_FILE;
    end;

    if sIconFileName <> '' then
    begin
      sIconFileName :=
        GRAPHICS_FILENAME_PATH
        + GRAPHICS_FILENAME_PREFIX
        + sIconFileName
        + GRAPHICS_FILENAME_SUFFIX;
      currentItem.BeginUpdate;
      try
        currentItem.GetIconData.Clear;
        currentItem.SetIconFileName(sIconFileName);
        iChangedItemCount := iChangedItemCount + 1;
      finally
        currentItem.EndUpdate;
      end;
    end;
    
  end;  // of Item loop
  
  SystemLog(SCRIPTNAME
    + 'Processing complete. '
    + IntToStr(iChangedItemCount)
    + ' of '
    + IntToStr(iItemCount)
    + ' item icons were changed.');

end;

begin
  sPlaylist := IntToStr(CurrentPlaybackControl.GetIndex + 1);
  iItemCount := CurrentPlaylist.GetCount;
  if iItemCount < 1 then
    SystemLog(SCRIPTNAME + 'Please put one or more items in Playlist ' + sPlaylist + ', then try again.')
  else if CurrentPlaybackControl.GetAutomation = true then
    SystemLog(SCRIPTNAME + 'Please put Playlist ' + sPlaylist + ' into ASSIST mode, then try again.')
  else
  begin
    ProcessCurrentPlaylist;
  end;
end.
