Skip to content

Commit

Permalink
Merge branch 'localbuilding'
Browse files Browse the repository at this point in the history
  • Loading branch information
cinderblocks committed Jan 19, 2025
2 parents a4e94c8 + 528efd7 commit bd3d671
Show file tree
Hide file tree
Showing 9 changed files with 187 additions and 236 deletions.
73 changes: 27 additions & 46 deletions Radegast/Core/InitialOutfit.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/**
/*
* Radegast Metaverse Client
* Copyright(c) 2009-2014, Radegast Development Team
* Copyright(c) 2016-2020, Sjofn, LLC
* Copyright(c) 2016-2025, Sjofn, LLC
* All rights reserved.
*
* Radegast is free software: you can redistribute it and/or modify
Expand All @@ -20,41 +20,33 @@

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using OpenMetaverse;

namespace Radegast
{
public class InitialOutfit
{

RadegastInstance Instance;
GridClient Client => Instance.Client;
Inventory Store;
private RadegastInstance Instance;
private GridClient Client => Instance.Client;
private Inventory Store;

public InitialOutfit(RadegastInstance instance)
{
Instance = instance;
Store = Client.Inventory.Store;
}

public static InventoryNode FindNodeMyName(InventoryNode root, string name)
public static InventoryNode FindNodeByName(InventoryNode root, string name)
{
if (root.Data.Name == name)
{
return root;
}

foreach (var node in root.Nodes.Values)
{
var ret = FindNodeMyName(node, name);
if (ret != null)
{
return ret;
}
}

return null;
return root.Nodes.Values.Select(node => FindNodeByName(node, name))
.FirstOrDefault(ret => ret != null);
}

public UUID CreateFolder(UUID parent, string name, FolderType type)
Expand All @@ -64,30 +56,23 @@ public UUID CreateFolder(UUID parent, string name, FolderType type)

EventHandler<InventoryObjectAddedEventArgs> handler = (sender, e) =>
{
if (e.Obj.Name == name && e.Obj is InventoryFolder && ((InventoryFolder)e.Obj).PreferredType == type)
if (e.Obj.Name == name && e.Obj is InventoryFolder folder && folder.PreferredType == type)
{
ret = e.Obj.UUID;
ret = folder.UUID;
folderCreated.Set();
Logger.Log("Created folder " + e.Obj.Name, Helpers.LogLevel.Info);
Logger.Log("Created folder " + folder.Name, Helpers.LogLevel.Info);
}
};

Client.Inventory.Store.InventoryObjectAdded += handler;
ret = Client.Inventory.CreateFolder(parent, name, type);
bool success = folderCreated.WaitOne(20 * 1000, false);
bool success = folderCreated.WaitOne(TimeSpan.FromSeconds(20), false);
Client.Inventory.Store.InventoryObjectAdded -= handler;

if (success)
{
return ret;
}
else
{
return UUID.Zero;
}
return success ? ret : UUID.Zero;
}

List<InventoryBase> FetchFolder(InventoryFolder folder)
private List<InventoryBase> FetchFolder(InventoryFolder folder)
{
List<InventoryBase> ret = new List<InventoryBase>();

Expand All @@ -103,7 +88,7 @@ List<InventoryBase> FetchFolder(InventoryFolder folder)
};

Client.Inventory.FolderUpdated += handler;
Client.Inventory.RequestFolderContents(folder.UUID, folder.OwnerID, true, true, InventorySortOrder.ByName);
var task = Client.Inventory.RequestFolderContents(folder.UUID, folder.OwnerID, true, true, InventorySortOrder.ByName);
bool success = folderFetched.WaitOne(20 * 1000, false);
Client.Inventory.FolderUpdated -= handler;
return ret;
Expand Down Expand Up @@ -141,7 +126,7 @@ public UUID CopyFolder(InventoryFolder folder, UUID destination)
{
itemCopied.Set();
});
if (itemCopied.WaitOne(20 * 1000, false))
if (itemCopied.WaitOne(TimeSpan.FromSeconds(20), false))
{
Logger.Log("Copied item " + item.Name, Helpers.LogLevel.Info);
}
Expand All @@ -150,9 +135,9 @@ public UUID CopyFolder(InventoryFolder folder, UUID destination)
Logger.Log("Failed to copy item " + item.Name, Helpers.LogLevel.Warning);
}
}
else if (item is InventoryFolder)
else if (item is InventoryFolder inventoryFolder)
{
CopyFolder((InventoryFolder)item, newFolderID);
CopyFolder(inventoryFolder, newFolderID);
}
}

Expand All @@ -166,10 +151,10 @@ public void SetInitialOutfit(string outfit)
t.Start();
}

void PerformInit(string initialOutfitName)
private void PerformInit(string initialOutfitName)
{
Logger.Log("Starting initial outfit thread (first login)", Helpers.LogLevel.Debug);
var outfitFolder = FindNodeMyName(Store.LibraryRootNode, initialOutfitName);
var outfitFolder = FindNodeByName(Store.LibraryRootNode, initialOutfitName);

if (outfitFolder == null)
{
Expand All @@ -178,19 +163,15 @@ void PerformInit(string initialOutfitName)

CheckFolders();

UUID newClothingFolder = CopyFolder((InventoryFolder)outfitFolder.Data, Client.Inventory.FindFolderForType(AssetType.Clothing));
UUID newClothingFolder = CopyFolder((InventoryFolder)outfitFolder.Data,
Client.Inventory.FindFolderForType(AssetType.Clothing));

List<InventoryItem> newOutfit = new List<InventoryItem>();
foreach (var item in Store.GetContents(newClothingFolder))
{
if (item is InventoryWearable || item is InventoryAttachment || item is InventoryObject)
{
newOutfit.Add((InventoryItem)item);
}
}
List<InventoryItem> newOutfit = Store.GetContents(newClothingFolder)
.Where(item => item is InventoryWearable || item is InventoryAttachment || item is InventoryObject)
.Cast<InventoryItem>().ToList();

Instance.COF.ReplaceOutfit(newOutfit);
Logger.Log("Intial outfit thread (first login) exiting", Helpers.LogLevel.Debug);
Logger.Log("Initial outfit thread (first login) exiting", Helpers.LogLevel.Debug);
}
}
}
33 changes: 14 additions & 19 deletions Radegast/GUI/Consoles/GroupsConsole.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/**
/*
* Radegast Metaverse Client
* Copyright(c) 2009-2014, Radegast Development Team
* Copyright(c) 2016-2020, Sjofn, LLC
* Copyright(c) 2016-2025, Sjofn, LLC
* All rights reserved.
*
* Radegast is free software: you can redistribute it and/or modify
Expand Down Expand Up @@ -66,13 +66,12 @@ void Groups_GroupRoleDataReply(object sender, GroupRolesDataReplyEventArgs e)
return;
}

if (!(txtKeys.Tag is Group)) return;
Group g = (Group)txtKeys.Tag;
if (g.ID != e.GroupID) return;
if (!(txtKeys.Tag is Group group)) { return; }
if (group.ID != e.GroupID) return;

foreach (var r in e.Roles)
{
txtKeys.AppendText(string.Format("Role \"{0}\": {1}{2}", r.Value.Name, r.Key, Environment.NewLine));
txtKeys.AppendText($"Role \"{r.Value.Name}\": {r.Key}{Environment.NewLine}");
}
}

Expand All @@ -88,15 +87,18 @@ void Groups_GroupCreatedReply(object sender, GroupCreatedReplyEventArgs e)
{
BeginInvoke(new MethodInvoker(() =>
{
lblCreateStatus.Text = string.Format("Group creation failed: {0}", e.Message);
lblCreateStatus.Text = $"Group creation failed: {e.Message}";
}
));
}
}

void Groups_CurrentGroups(object sender, CurrentGroupsEventArgs e)
{
BeginInvoke(new MethodInvoker(UpdateDisplay));
if (IsHandleCreated)
{
BeginInvoke(new MethodInvoker(UpdateDisplay));
}
}

private object DisplaySyncRoot = new object();
Expand Down Expand Up @@ -125,15 +127,8 @@ public void UpdateDisplay()
}
}

lblGroupNr.Text = string.Format("{0} groups", instance.Groups.Count);
if (client.Network.MaxAgentGroups > 0)
{
lblGrpMax.Text = string.Format("max {0} groups", client.Network.MaxAgentGroups);
}
else
{
lblGrpMax.Text = string.Empty;
}
lblGroupNr.Text = $"{instance.Groups.Count} groups";
lblGrpMax.Text = client.Network.MaxAgentGroups > 0 ? $"max {client.Network.MaxAgentGroups} groups" : string.Empty;

if (newGrpID != UUID.Zero)
{
Expand Down Expand Up @@ -165,7 +160,7 @@ private void leaveBtn_Click(object sender, EventArgs e)
return;
}

if(MessageBox.Show(string.Format("Leave {0}?", g.Name), "Confirmation", MessageBoxButtons.YesNo, MessageBoxIcon.Asterisk) == DialogResult.Yes)
if(MessageBox.Show($"Leave {g.Name}?", "Confirmation", MessageBoxButtons.YesNo, MessageBoxIcon.Asterisk) == DialogResult.Yes)
{
client.Groups.LeaveGroup(g.ID);
listBox1.Items.Remove(g);
Expand Down Expand Up @@ -352,7 +347,7 @@ private void btnKeys_Click(object sender, EventArgs e)
{
txtKeys.Text = string.Empty;
txtKeys.Tag = g;
txtKeys.AppendText(string.Format("Group \"{0}\": {1}{2}", g.Name, g.ID, Environment.NewLine));
txtKeys.AppendText($"Group \"{g.Name}\": {g.ID}{Environment.NewLine}");
client.Groups.RequestGroupRoles(g.ID);
}
}
Expand Down
14 changes: 6 additions & 8 deletions Radegast/GUI/Consoles/Inventory/CurrentOutfitFolder.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/**
* Radegast Metaverse Client
* Copyright(c) 2009-2014, Radegast Development Team
* Copyright(c) 2016-2022, Sjofn, LLC
* Copyright(c) 2016-2025, Sjofn, LLC
* All rights reserved.
*
* Radegast is free software: you can redistribute it and/or modify
Expand All @@ -22,6 +22,7 @@
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using OpenMetaverse;

namespace Radegast
Expand Down Expand Up @@ -179,11 +180,6 @@ private void Network_EventQueueRunning(object sender, EventQueueRunningEventArgs

#region Private methods

private void RequestDescendants(UUID folderID)
{
Client.Inventory.RequestFolderContents(folderID, Client.Self.AgentID, true, true, InventorySortOrder.ByDate);
}

private void InitCOF()
{
var rootContent = Client.Inventory.Store.GetContents(Client.Inventory.Store.RootFolder.UUID);
Expand All @@ -202,13 +198,15 @@ private void InitCOF()
}
else
{
RequestDescendants(COF.UUID);
Task task = Client.Inventory.RequestFolderContents(COF.UUID, Client.Self.AgentID,
true, true, InventorySortOrder.ByDate);
}
}

private void CreateCOF()
{
UUID cofID = Client.Inventory.CreateFolder(Client.Inventory.Store.RootFolder.UUID, "Current Outfit", FolderType.CurrentOutfit);
UUID cofID = Client.Inventory.CreateFolder(Client.Inventory.Store.RootFolder.UUID,
"Current Outfit", FolderType.CurrentOutfit);
if (Client.Inventory.Store.Contains(cofID) && Client.Inventory.Store[cofID] is InventoryFolder folder)
{
COF = folder;
Expand Down
Loading

0 comments on commit bd3d671

Please sign in to comment.