Script "Download podcast"

Post Reply
Eugene
Posts: 2940
Joined: Tue Nov 17, 2009 8:05 pm

Script "Download podcast"

Post by Eugene »

Used for download a podcast to directory of files pre-transcode (without transcoding)

Settings - Processing - Add
Name: Download podcast
Click "Button on the main form"
Script:

Code: Select all

const
  mpiTranscodingFinish = 100000;  // Id properties "Sign complete transcoding"
                                  // Properties less than 100000 are used by the program                                  

function GetValidFileName(const aFileName: string): string;
var
  i: Integer;
begin
  Result := aFileName;
  for i := 1 to Length(Result) do
    if Result[i] in ['<', '>', '|', '"', '\', '/', ':', '*', '?'] then
      Result[i] := ' '
end;

function DumpPipe(const aSourceFileName, aDestFileName: string): Boolean;
var
  iReadCount: Integer;
  sBuffer: string;
  SourceFileStream, DestFileStream: TFileStream;
begin
  Result := (aSourceFileName <> '') and (aDestFileName <> '');  
  if Result then begin
    SourceFileStream := TFileStream.Create(aSourceFileName, fmOpenRead);    
    try  
      DestFileStream := TFileStream.Create(aDestFileName, fmCreate);      
      try
        while Result do begin
          iReadCount := SourceFileStream.Read(sBuffer, 256 * 1024);          
          if iReadCount > 0 then
            Result := DestFileStream.Write(sBuffer, iReadCount) = iReadCount
          else
            Break           
        end      
      finally             
        DestFileStream.Free
      end      
    finally             
      SourceFileStream.Free
    end
  end
end;
                               
procedure ProcessFile(aSourceMediaItem: TWmsScriptMediaItem; const aDestDirectory: string; aCheckTranscodingFinish: Boolean);
var
  bExecuteDump: Boolean;
  DestMediaItem: TWmsScriptMediaItem;
  sDestDirectory, sDestFileName, sDestFileExt, sLogMessage, sSourceFileName, sSourceFilePath: string;
begin
  if aSourceMediaItem.Properties[mpiPodcastItem] then begin
    if SameText(aSourceMediaItem.Properties[mpiFileType], 'flv') then
      sDestFileExt := '.flv'
    else if SameText(aSourceMediaItem.Properties[mpiFileType], 'mp3') then    
      sDestFileExt := '.mp3'      
    else if aSourceMediaItem.MediaType = mtAudio then    
      sDestFileExt := '.mp3'
    else
      sDestFileExt := '.mp4';      
    sDestFileName := IncludeTrailingBackslash(aDestDirectory) +
            GetValidFileName(aSourceMediaItem.Properties[mpiTitle]) + sDestFileExt;            
    if not WmsFileLocked(sDestFileName) then begin    
      bExecuteDump := True;
      DestMediaItem := WmsFindMediaItemByFileName(sDestFileName);
      if (DestMediaItem <> nil) and (DestMediaItem.Properties[mpiTranscodingFinish] = '1') then begin
        if FileExists(sDestFileName) then
          bExecuteDump := False
        else begin 
          DestMediaItem.Properties[mpiTranscodingFinish] := '0';
          WmsDatabaseAutoSave
        end  
      end;
      if bExecuteDump then begin
        sLogMessage := 'Processing media resources: %s download podcast "' + ReplaceStr(aSourceMediaItem.Properties[mpiTitle], '%', '') + '" to file "' + sDestFileName + '"';
        WmsLogMessage(mtiInfo, Format(sLogMessage, ['Start']));        
        if DumpPipe(aSourceMediaItem.Properties[mpiMediaResourceSource], sDestFileName) then begin
          DestMediaItem := WmsFindMediaItemByFileName(sDestFileName);
          if DestMediaItem = nil then
            DestMediaItem := WmsCreateMediaItem(sDestFileName);
          if DestMediaItem <> nil then
            DestMediaItem.Properties[mpiTranscodingFinish] := '1';
          WmsDatabaseAutoSave;
          WmsLogMessage(mtiInfo, Format(sLogMessage, ['Finish']), True);
        end else
          WmsLogMessage(mtiError, Format(sLogMessage, ['Error']))
      end   
    end
  end
end;

begin
  ProcessMediaResult := False;  
  if cfgPreTranscodingDestDirectory = '' then 
    RaiseException('Not specified directory transcoded files (Settings-Transcoder-Other).')
  else begin  
    if WmsCurrentMediaListItem <> nil then begin
      ProcessFile(WmsCurrentMediaListItem, cfgPreTranscodingDestDirectory, False);
      ProcessMediaResult := True
    end else
      RaiseException('No current media resource')  
  end    
end.
Usage:
1. Select a podcast in List [Movies].
2. Click "Download podcast"
Post Reply