void Assets_OnAssetReceived(AssetDownload transfer, Asset asset)
{
if (InvokeRequired)
{
if (!instance.MonoRuntime || IsHandleCreated)
BeginInvoke(new MethodInvoker(() => Assets_OnAssetReceived(transfer, asset)));
return;
}
if (transfer.Success)
{
AssetNotecard n = (AssetNotecard)asset;
n.Decode();
receivedNotecard = n;
string noteText = string.Empty;
rtbContent.Clear();
for (int i = 0; i < n.BodyText.Length; i++)
{
char c = n.BodyText[i];
if ((int)c == 0xdbc0)
{
int index = (int)n.BodyText[++i] - 0xdc00;
InventoryItem e = n.EmbeddedItems[index];
rtbContent.AppendText(noteText);
rtbContent.InsertLink(e.Name, string.Format("radegast://embeddedasset/{0}", index));
noteText = string.Empty;
}
else
{
noteText += c;
}
}
rtbContent.Text += noteText;
if (n.EmbeddedItems != null && n.EmbeddedItems.Count > 0)
{
tbtnAttachments.Enabled = true;
tbtnAttachments.Visible = true;
foreach (InventoryItem item in n.EmbeddedItems)
{
int ix = InventoryConsole.GetItemImageIndex(item.AssetType.ToString().ToLower());
ToolStripMenuItem titem = new ToolStripMenuItem(item.Name);
if (ix != -1)
{
titem.Image = frmMain.ResourceImages.Images[ix];
titem.DisplayStyle = ToolStripItemDisplayStyle.ImageAndText;
}
else
{
titem.DisplayStyle = ToolStripItemDisplayStyle.Text;
}
titem.Name = item.UUID.ToString(); ;
titem.Tag = item;
titem.Click += new EventHandler(attachmentMenuItem_Click);
var saveToInv = new ToolStripMenuItem("Save to inventory");
saveToInv.Click += (object xsender, EventArgs xe) =>
{
client.Inventory.RequestCopyItemFromNotecard(UUID.Zero,
notecard.UUID,
client.Inventory.FindFolderForType(item.AssetType),
item.UUID,
Inventory_OnInventoryItemCopied);
};
titem.DropDownItems.Add(saveToInv);
tbtnAttachments.DropDownItems.Add(titem);
}
}
UpdateStatus("OK");
rtbContent.Focus();
}
else
{
UpdateStatus("Failed");
rtbContent.Text = "Failed to download notecard. " + transfer.Status;
}
}