private void FixPerms(InventoryNodeBase node) { m_log.DebugFormat("[LIBRARY MODULE]: Fixing perms for {0} {1}", node.Name, node.ID); if (node is InventoryItemBase) { InventoryItemBase item = (InventoryItemBase)node; item.BasePermissions = (uint)PermissionMask.All; item.EveryOnePermissions = (uint)PermissionMask.All - (uint)PermissionMask.Modify; item.CurrentPermissions = (uint)PermissionMask.All; item.NextPermissions = (uint)PermissionMask.All; } }
public void SendBulkUpdateInventory(InventoryNodeBase node) { throw new System.NotImplementedException(); }
public string NodeToPath(UUID agent_id, InventoryNodeBase node) { string path = ""; UUID parentID = UUID.Zero; InventoryFolderBase currentFolder = null; if (node is InventoryFolderBase) { parentID = ((InventoryFolderBase)node).ParentID; path = node.Name + "/"; } if (node is InventoryItemBase) { parentID = ((InventoryItemBase)node).Folder; path = node.Name; } List<InventoryFolderBase> folders = m_InventoryService.GetInventorySkeleton(agent_id); while (parentID != UUID.Zero) { InventoryFolderBase fetchFolder = new InventoryFolderBase(parentID, agent_id); currentFolder = m_InventoryService.GetFolder(fetchFolder); if (currentFolder.ParentID != UUID.Zero) { path = currentFolder.Name + "/" + path; } parentID = currentFolder.ParentID; } return path; }
private HttpStatusCode CopyItemToNonExistentDestination(UUID agent_id, string local_destination, InventoryNodeBase source_node, Dictionary<string, HttpStatusCode> status_values, string destName) { InventoryFolderBase destinationParentFolder = CreateFolderPath(agent_id, local_destination, true); //fetch item and copy it InventoryItemBase sourceItemBase = m_InventoryService.GetItem(new InventoryItemBase(source_node.ID, agent_id)); HttpStatusCode created = CopyItem(agent_id, sourceItemBase, destinationParentFolder, destName); if (created == HttpStatusCode.Created) // copy item properties { //m_InventoryPropertyHandler.CopyProperties(path, "/inventory/" + agent_id.ToString() + "/" + local_destination); m_InventoryPropertyHandler.CopyProperties(agent_id, source_node, "/inventory/" + agent_id.ToString() + "/" + local_destination); } status_values.Add(NodeToPath(agent_id, source_node), created); return (HttpStatusCode)207; }
private HttpStatusCode SetErrorsAndReturnMultiStatus(UUID agent_id, InventoryNodeBase source_node, ref Dictionary<string, HttpStatusCode> multiStatus, HttpStatusCode[] errors) { foreach (HttpStatusCode hsc in errors) { multiStatus.Add(NodeToPath(agent_id, source_node), hsc); } return (HttpStatusCode)207; }
public static IWebDAVResource InventoryToDAV(string path, InventoryNodeBase invObject) { if (invObject is InventoryFolderBase) { InventoryFolderBase folder = (InventoryFolderBase)invObject; return new WebDAVFolder(path, Utils.Epoch, Utils.Epoch, DateTime.UtcNow, false); } else if (invObject is InventoryItemBase) { InventoryItemBase item = (InventoryItemBase)invObject; DateTime creationDate = Utils.UnixTimeToDateTime(item.CreationDate); string contentType = CableBeachUtils.SLAssetTypeToContentType(item.AssetType); return new WebDAVFile(path, contentType, 0, creationDate, creationDate, DateTime.UtcNow, false, false); } else { return null; } }
private HttpStatusCode MoveItemToNonExistentDestination(UUID agent_id, string local_destination, InventoryNodeBase source_node, Dictionary<string, HttpStatusCode> status_values, string destName) { InventoryFolderBase destinationParentFolder = CreateFolderPath(agent_id, local_destination, true); InventoryItemBase sourceItemBase = m_InventoryService.GetItem(new InventoryItemBase(source_node.ID, agent_id)); string sourcePath = "/inventory/" + agent_id.ToString() + "/" + NodeToPath(agent_id, sourceItemBase); sourceItemBase.Folder = destinationParentFolder.ID; sourceItemBase.Name = destName; if (m_InventoryService.UpdateItem(sourceItemBase)) { m_InventoryPropertyHandler.MoveProperties(sourcePath, "/inventory/" + agent_id.ToString() + "/" + local_destination); status_values.Add(NodeToPath(agent_id, source_node), HttpStatusCode.OK); } else { status_values.Add(NodeToPath(agent_id, source_node), HttpStatusCode.InternalServerError); } return HttpStatusCode.OK; }
private string CollectObjectProperties(InventoryNodeBase node, ref List<IWebDAVResource> dav_entries, string path) { string resourcePath; string name = node.Name; name = HttpUtility.UrlPathEncode(name); //encode spaces to %20 etc if (path.EndsWith("/")) resourcePath = path + name; else resourcePath = path + "/" + name; if (node is InventoryFolderBase) resourcePath = resourcePath + "/"; IWebDAVResource resource = m_PropertyProvider.Load(resourcePath); if (resource == null) { resource = WebDAVServerConnector.InventoryToDAV(resourcePath, node); m_PropertyProvider.Save(resource); } if (resource != null) dav_entries.Add(resource); return resourcePath; }
internal void MoveProperties(UUID agent_id, InventoryNodeBase source_node, List<string> custom_properties) { string rootOrigin = custom_properties[custom_properties.Count - 1]; custom_properties.Remove(rootOrigin); string rootDestiny = "/" + m_SubDomain + "/" + agent_id.ToString() + "/" + m_WebDAVServerConnector.NodeToPath(agent_id, source_node); IWebDAVResource folder = m_PropertyProvider.Load(rootOrigin); m_PropertyProvider.Remove(folder); folder.Path = rootDestiny; m_PropertyProvider.Save(folder); foreach (string path in custom_properties) { IWebDAVResource resource = m_PropertyProvider.Load(path); m_PropertyProvider.Remove(resource); string endPart = resource.Path.Substring(rootOrigin.Length); resource.Path = rootDestiny + endPart; m_PropertyProvider.Save(resource); } }
private HttpStatusCode CopyFolderToNonExistentDestination(UUID agent_id, string local_destionation, InventoryNodeBase source_node, DepthHeader depth, Dictionary<string, HttpStatusCode> status_values, string destName) { InventoryFolderBase destinationParentFolder = CreateFolderPath(agent_id, local_destionation, true); //fetch folder and copy it InventoryFolderBase sourceFolderToCopy = m_InventoryService.GetFolder(new InventoryFolderBase(source_node.ID, agent_id)); sourceFolderToCopy.Name = destName; HttpStatusCode ret = RecursiveCopyFolder(agent_id, sourceFolderToCopy, destinationParentFolder, depth, status_values); status_values.Add(NodeToPath(agent_id, source_node), ret); return (HttpStatusCode)207; }
internal List<string> PreparePropertiesMove(UUID agent_id, InventoryNodeBase source_node) { string rootPath = "/" + m_SubDomain + "/" + agent_id.ToString() + "/" + m_WebDAVServerConnector.NodeToPath(agent_id, source_node); List<string> allPaths = m_PropertyProvider.LoadFolderCustomPropertiesPresentation(rootPath); // set root path to last element allPaths.Remove(rootPath); allPaths.Add(rootPath); return allPaths; }
public bool MoveProperties(UUID agent_id, InventoryNodeBase node, string destiny_path) { string originalPath = m_WebDAVServerConnector.NodeToPath(agent_id, node); MoveProperties(originalPath, destiny_path); return true; }
public bool CopyProperties(UUID agent_id, InventoryNodeBase node, string destiny_path) { string originalPath = "/inventory/" + agent_id.ToString() + "/" + m_WebDAVServerConnector.NodeToPath(agent_id, node); CopyProperties(originalPath, destiny_path); return true; }
private void FixPerms(InventoryNodeBase node) { if (node is InventoryItemBase) { InventoryItemBase item = (InventoryItemBase) node; item.BasePermissions = 0x7FFFFFFF; item.EveryOnePermissions = 0x7FFFFFFF; item.CurrentPermissions = 0x7FFFFFFF; item.NextPermissions = 0x7FFFFFFF; } }
private HttpStatusCode MoveFolderToNonExistentDestination(UUID agent_id, string local_destination, InventoryNodeBase source_node, DepthHeader depth, Dictionary<string, HttpStatusCode> status_values, string destName) { InventoryFolderBase destinationParentFolder = CreateFolderPath(agent_id, local_destination, true); InventoryFolderBase sourceFolderBase = m_InventoryService.GetFolder(new InventoryFolderBase(source_node.ID, agent_id)); List<string> customProperties = m_InventoryPropertyHandler.PreparePropertiesMove(agent_id, source_node); sourceFolderBase.ParentID = destinationParentFolder.ID; sourceFolderBase.Name = destName; if (m_InventoryService.UpdateFolder(sourceFolderBase)) { m_InventoryPropertyHandler.MoveProperties(agent_id, sourceFolderBase, customProperties); status_values.Add(NodeToPath(agent_id, source_node), HttpStatusCode.OK); } else { status_values.Add(NodeToPath(agent_id, source_node), HttpStatusCode.InternalServerError); } return HttpStatusCode.OK; }
public virtual void SendBulkUpdateInventory(InventoryNodeBase node) { }
public static InventoryBlock InventoryToMessage(InventoryNodeBase obj) { if (obj is InventoryItemBase) { // Inventory item InventoryItemBase item = (InventoryItemBase)obj; InventoryBlockItem itemObj = new InventoryBlockItem(); itemObj.AssetID = item.AssetID; itemObj.ContentType = CableBeachUtils.SLAssetTypeToContentType(item.AssetType); itemObj.CreationDate = OpenMetaverse.Utils.UnixTimeToDateTime(item.CreationDate); UUID.TryParse(item.CreatorId, out itemObj.CreatorID); itemObj.Description = item.Description; itemObj.Flags = item.Flags; itemObj.GroupID = item.GroupID; itemObj.GroupOwned = item.GroupOwned; itemObj.ID = item.ID; itemObj.Name = item.Name; itemObj.OwnerID = item.Owner; itemObj.ParentID = item.Folder; itemObj.PermsBase = item.BasePermissions; itemObj.PermsEveryone = item.EveryOnePermissions; itemObj.PermsGroup = item.GroupPermissions; itemObj.PermsNext = item.NextPermissions; itemObj.PermsOwner = item.CurrentPermissions; itemObj.SalePrice = item.SalePrice; itemObj.SaleType = item.SaleType; return itemObj; } else if (obj is InventoryFolderImpl) { // Inventory folder that potentially contains child objects InventoryFolderImpl folder = (InventoryFolderImpl)obj; InventoryBlockFolder folderObj = new InventoryBlockFolder(); folderObj.ID = folder.ID; folderObj.Name = folder.Name; folderObj.OwnerID = folder.Owner; folderObj.ParentID = folder.ParentID; folderObj.PreferredContentType = CableBeachUtils.SLAssetTypeToContentType(folder.Type); folderObj.Version = folder.Version; if (folder.Items != null) { folderObj.Children = new InventoryBlock[folder.Items.Count]; int i = 0; foreach (InventoryNodeBase child in folder.Items.Values) folderObj.Children[i++] = InventoryToMessage(child); } else { folderObj.Children = new InventoryBlock[0]; } return folderObj; } else if (obj is InventoryFolderBase) { // Basic inventory folder object, no children InventoryFolderBase folder = (InventoryFolderBase)obj; InventoryBlockFolder folderObj = new InventoryBlockFolder(); folderObj.ID = folder.ID; folderObj.Name = folder.Name; folderObj.OwnerID = folder.Owner; folderObj.ParentID = folder.ParentID; folderObj.PreferredContentType = CableBeachUtils.SLAssetTypeToContentType(folder.Type); folderObj.Version = folder.Version; folderObj.Children = new InventoryBlock[0]; return folderObj; } else { throw new ArgumentException("Unrecognized inventory node type " + obj.GetType().FullName); } }