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.
1. Select a podcast in List [Movies].
2. Click "Download podcast"