private void SaveIarCommand(List <string> args, TTY io, UUID limitedToScene) { if (args[0] == "help") { string outp = "Available commands:\n"; outp += "save iar [--noassets] <firstname> <lastname> <inventorypath> <filename>\n"; io.Write(outp); return; } string firstname = null; string lastname = null; string filename = null; string inventorypath = null; var options = InventoryArchiver.IAR.SaveOptions.None; for (int argi = 2; argi < args.Count; ++argi) { string arg = args[argi]; if (arg == "--noassets") { options |= InventoryArchiver.IAR.SaveOptions.NoAssets; } else if (firstname == null) { firstname = arg; } else if (lastname == null) { lastname = arg; } else if (inventorypath == null) { inventorypath = arg; } else { filename = arg; } } if (string.IsNullOrEmpty(filename)) { io.Write("missing parameters"); return; } UserAccount account; UUID token; try { account = Authenticate(firstname, lastname, io.GetPass("Password"), out token); } catch (Exception e) { io.WriteFormatted("failed to authenticate: {0}", e.Message); return; } try { using (var s = new FileStream(filename, FileMode.Create, FileAccess.Write)) { InventoryArchiver.IAR.Save(account.Principal, m_InventoryService, m_AssetService, m_AvatarNameServices, options, filename, inventorypath, io); } io.Write("IAR saved successfully."); } catch (Exception e) { io.WriteFormatted("IAR saving failed: {0}", e.Message); } finally { m_AuthInfoService.ReleaseToken(account.Principal.ID, token); } }
private void LoadIarCommand(List <string> args, TTY io, UUID limitedToScene) { if (args[0] == "help") { string outp = "Available commands:\n"; outp += "load iar [-m|--merge] [--noassets] <firstname> <lastname> <inventorypath> <filename>\n"; io.Write(outp); return; } string filename = null; string firstname = null; string lastname = null; string inventorypath = null; var options = InventoryArchiver.IAR.LoadOptions.None; for (int argi = 2; argi < args.Count; ++argi) { string arg = args[argi]; if (arg == "--skip-assets") { options |= InventoryArchiver.IAR.LoadOptions.NoAssets; } else if (arg == "--merge" || arg == "-m") { options |= InventoryArchiver.IAR.LoadOptions.Merge; } else if (firstname == null) { firstname = arg; } else if (lastname == null) { lastname = arg; } else if (inventorypath == null) { inventorypath = arg; } else { filename = arg; } } if (string.IsNullOrEmpty(filename)) { io.Write("No filename or url specified.\n"); return; } UserAccount account; UUID token; try { account = Authenticate(firstname, lastname, io.GetPass("Password"), out token); } catch (Exception e) { io.WriteFormatted("failed to authenticate: {0}", e.Message); return; } try { using (Stream s = Uri.IsWellFormedUriString(filename, UriKind.Absolute) ? new HttpClient.Get(filename).ExecuteStreamRequest() : new FileStream(filename, FileMode.Open, FileAccess.Read)) { InventoryArchiver.IAR.Load(account.Principal, m_InventoryService, m_AssetService, m_AvatarNameServices, options, s, inventorypath, io); } io.Write("IAR loaded successfully."); } catch (InventoryArchiver.IAR.IARFormatException) { io.Write("IAR file is corrupt"); } catch (Exception e) { m_Log.Info("IAR load exception encountered", e); io.Write(e.Message); } finally { m_AuthInfoService.ReleaseToken(account.Principal.ID, token); } }