public async Task<ExtractProgramResult> ExtractProgram(CancellationToken taskCancellationToken) { ExtractProgramResult _extractResult = new ExtractProgramResult { Status = ExtractProgramStatus.Success }; try { if (_programStream == null && _onlineProgram == null) throw new Exception( "SetProgramStream or SetDownloadHeader have to be called before calling StartImportProgram."); if (_programStream == null && _onlineProgram == null) throw new Exception("SetProgramStream and SetDownloadHeader cannot be used together."); // old simple portable downloader var cancellationTokenSource = new CancellationTokenSource(); if (_onlineProgram != null) { _programStream = await Task.Run(() => ServiceLocator.WebCommunicationService.DownloadAsync( _onlineProgram.DownloadUrl, _onlineProgram.Name, cancellationTokenSource.Token), taskCancellationToken); } // new downloader //if (_onlineProgram != null) //{ // await Task.Run(() => ServiceLocator.WebCommunicationService.DownloadAsyncAlternativ( // _onlineProgram.DownloadUrl, _onlineProgram.ProjectName), taskCancellationToken); //} //using (var storage = StorageSystem.GetStorage()) //{ // var stream = await storage.OpenFileAsync(Path.Combine(StorageConstants.TempProgramImportZipPath, _onlineProgram.ProjectName + ".catrobat"), // StorageFileMode.Open, StorageFileAccess.Read); // await ServiceLocator.ZipService.UnzipCatrobatPackageIntoIsolatedStorage( // stream, StorageConstants.TempProgramImportPath); //} if (_cancellationTokenSource.Token.IsCancellationRequested == false) { await ServiceLocator.ZipService.UnzipCatrobatPackageIntoIsolatedStorage( _programStream, StorageConstants.TempProgramImportPath); } } catch (Exception) { _extractResult.Status = ExtractProgramStatus.Error; } using (var storage = StorageSystem.GetStorage()) { await storage.DeleteDirectoryAsync(StorageConstants.TempProgramImportZipPath); } return _extractResult; }