Storing and restoring the resource downloading state

Check also Multipart Multithreaded Downloading

procedure TfmTestDownloader.btDownLoadClick(Sender: TObject);   
begin   
   if clDownloader1.IsBusy then Exit;   
 
   clDownloader1.URL :=
        
'http://www.clevercomponents.com/images/testimage.jpg';   
   clDownloader1.LocalFile := 'testimage.jpg';   
   clDownLoader1.Start();   
end

procedure TfmTestDownloader.StoreResourceInfo;   
var   
   i: Integer;   
   IniFile: TIniFile;   
begin   
   IniFile := TIniFile.Create('set.ini');   
   try   
      IniFile.WriteString('Download','URL', clDownLoader1.URL);   
      IniFile.WriteString('Download','LocalFile', clDownLoader1.LocalFile);   
      IniFile.WriteInteger('ResourceState''Count', clDownLoader1.ResourceState.Count);   
      IniFile.WriteInteger('ResourceState''ResourceSize', clDownLoader1.ResourceState.ResourceSize);   
      for i := 0 to clDownLoader1.ResourceState.Count - 1 do   
      begin   
         IniFile.WriteInteger('ResourceStateItem' + IntToStr(i), 'ResourcePos', clDownLoader1.ResourceState[i].ResourcePos);   
         IniFile.WriteInteger('ResourceStateItem' + IntToStr(i), 'BytesToProceed', clDownLoader1.ResourceState[i].BytesToProceed);   
         IniFile.WriteInteger('ResourceStateItem' + IntToStr(i), 'BytesProceed', clDownLoader1.ResourceState[i].BytesProceed);   
      end;   
   finally   
      IniFile.Free();   
   end;   
end

procedure TfmTestDownloader.RestoreResourceInfo;   
var   
   i, cnt: Integer;   
   IniFile: TIniFile;   
   Item: TclResourceStateItem;   
begin   
   clDownLoader1.ResourceState.Clear();   
   if not FileExists('set.ini'then Exit;   
   IniFile := TIniFile.Create('set.ini');   
   try   
      clDownloader1.URL:=IniFile.ReadString('Download''URL''');   
      clDownloader1.LocalFile:=IniFile.ReadString('Download''LocalFile''');   
      cnt := IniFile.ReadInteger('ResourceState''Count'0);   
      clDownLoader1.ResourceState.ResourceSize := IniFile.ReadInteger('ResourceState''ResourceSize'0);   
      for i := 0 to cnt - 1 do   
      begin   
         Item := clDownLoader1.ResourceState.Add();   
         Item.ResourcePos := IniFile.ReadInteger('ResourceStateItem' + IntToStr(i), 'ResourcePos'0);   
         Item.BytesToProceed := IniFile.ReadInteger('ResourceStateItem' + IntToStr(i), 'BytesToProceed'0);   
         Item.BytesProceed := IniFile.ReadInteger('ResourceStateItem' + IntToStr(i), 'BytesProceed'0);   
      end;   
   finally   
      IniFile.Free();   
   end;   
end;  

procedure TfmTestDownloader.FormClose(
    Sender: TObject; 
var Action: TCloseAction);   
begin   
   StoreResourceInfo();   
end;    
 
 
procedure TfmTestDownloader.FormCreate(Sender: TObject);   
begin   
   RestoreResourceInfo();   
end;   
 

Add Feedback