// Get information of the current user as a `Person`. public Person GetUser() { var settingsPath = Locator.Locate("mmsetting.archive"); var settings = Unarchiver.DeepParse(PropertyListParser.Parse(settingsPath)); var me = new Person(); DictUtil.TryGet(settings, "UsrName", out me.UsrName); DictUtil.TryGet(settings, "AliasName", out me.Alias); DictUtil.TryGet(settings, "NickName", out me.NickName); if (DictUtil.TryGetSubclass(settings, "new_dicsetting", out var setting)) { DictUtil.TryGet(setting, "headimgurl", out me.Portrait); DictUtil.TryGet(setting, "headhdimgurl", out me.PortraitHD); } return(me); }
static void Main(string[] args) { var unarchiver = new Unarchiver(); var basePath = string.Join(" ", args); var unpackedFiles = unarchiver.Unarchive(basePath); foreach (var file in unpackedFiles) { Console.WriteLine("Extracted file: {0}", file); } Console.WriteLine(); Console.WriteLine("Done."); Console.ReadLine(); }
private static MBFile ReadFileBlob(Stream blob) { var dict = Unarchiver.DeepParse(PropertyListParser.Parse(blob)); var mbFile = new MBFile(); DictUtil.TryGet(dict, "RelativePath", out mbFile.RelativePath); DictUtil.TryGet(dict, "Target", out mbFile.Target); DictUtil.TryGet(dict, "Mode", out mbFile.Mode); DictUtil.TryGet(dict, "InodeNumber", out mbFile.InodeNumber); DictUtil.TryGet(dict, "UserID", out mbFile.UserID); DictUtil.TryGet(dict, "GroupID", out mbFile.GroupID); DictUtil.TryGet(dict, "LastModified", out mbFile.LastModified); DictUtil.TryGet(dict, "LastStatusChange", out mbFile.LastStatusChange); DictUtil.TryGet(dict, "Birth", out mbFile.Birth); DictUtil.TryGet(dict, "Size", out mbFile.Size); DictUtil.TryGet(dict, "ProtectionClass", out mbFile.ProtectionClass); return(mbFile); }
/// <summary> /// Start the archive extraction asynchronously. /// </summary> /// <returns></returns> private async Task StartExtractionAsync() { string archiveFile = _gateway.GetBackupArchivePath(); string outputDirectory = _gateway.GetOutputFolderPath(); string password = _gateway.GetPassword(); bool ignoreWriteErrors = _gateway.GetIgnoreFileWriteErrors(); bool dryRun = _gateway.GetDryRun(); _tokenSource = new CancellationTokenSource(); CancellationToken token = _tokenSource.Token; try { using (Unarchiver extractor = Unarchiver.CreateForFile(archiveFile, password)) { // Wire events _totalArchiveSize = 0; extractor.ArchiveInformationEvent += onArchiveInformationHandler; extractor.ProgressEvent += OnProgressHandler; extractor.EntityEvent += onEntityHandler; Task t = Task.Factory.StartNew( () => { if (extractor == null) { throw new Exception("Internal state consistency violation: extractor object is null"); } // Get the appropriate writer IDataWriter writer = new NullWriter(); if (!dryRun) { writer = new DirectFileWriter(outputDirectory); if (ignoreWriteErrors) { // TODO Use a different file writer when we are asked to ignore write errorss writer = new DirectFileWriter(outputDirectory); } } // Test the extraction extractor.Extract(token, writer); }, token, TaskCreationOptions.None, TaskScheduler.Default ); await t; } } catch (Exception e) { Exception targetException = (e.InnerException == null) ? e : e.InnerException; _gateway.SetTaskbarProgressState(TaskBarProgress.TaskbarStates.Error); // Show error message _gateway.showErrorMessage(_languageResource.GetString("LBL_ERROR_CAPTION"), targetException.Message); } _gateway.SetExtractionOptionsState(true); ResetProgress(); }