Beispiel #1
0
        void Inventory_FolderUpdated(object sender, FolderUpdatedEventArgs e)
        {
            if (COF == null)
            {
                return;
            }

            if (e.FolderID == COF.UUID && e.Success)
            {
                COF = (InventoryFolder)Client.Inventory.Store[COF.UUID];
                lock (FolderSync)
                {
                    lock (Content) Content.Clear();


                    List <UUID> items  = new List <UUID>();
                    List <UUID> owners = new List <UUID>();

                    foreach (var link in ContentLinks())
                    {
                        //if (Client.Inventory.Store.Contains(link.AssetUUID))
                        //{
                        //    continue;
                        //}
                        items.Add(link.AssetUUID);
                        owners.Add(Client.Self.AgentID);
                    }

                    if (items.Count > 0)
                    {
                        Client.Inventory.RequestFetchInventory(items, owners);
                    }
                }
            }
        }
Beispiel #2
0
        public void Inventory_FolderUpdated(object sender, FolderUpdatedEventArgs e)
        {
            List <InventoryBase> contents = Client.Inventory.Store.GetContents(e.FolderID);
            Hashtable            roothash = new Hashtable();

            roothash.Add("MessageType", "FolderUpdated");
            roothash.Add("FolderID", e.FolderID);
            List <Hashtable> response = new List <Hashtable>();

            lock (LoadedInventory)
            {
                foreach (InventoryBase o in contents)
                {
                    if (LoadedInventory.Contains(o.UUID))
                    {
                        continue;
                    }
                    LoadedInventory.Add(o.UUID);
                    Hashtable hash = new Hashtable();
                    if (o is InventoryFolder)
                    {
                        InventoryFolder folder = (InventoryFolder)o;
                        hash.Add("Type", "InventoryFolder");
                        hash.Add("Name", folder.Name);
                        hash.Add("PreferredType", folder.PreferredType);
                        hash.Add("OwnerID", folder.OwnerID);
                        hash.Add("UUID", folder.UUID);
                        response.Add(hash);
                    }
                    else if (o is InventoryItem)
                    {
                        InventoryItem item = (InventoryItem)o;
                        hash.Add("Type", "InventoryItem");
                        hash.Add("Name", item.Name);
                        hash.Add("UUID", item.UUID);
                        hash.Add("AssetType", item.AssetType);
                        hash.Add("AssetUUID", item.AssetUUID);
                        hash.Add("CreatorID", item.CreatorID);
                        hash.Add("OwnerID", item.OwnerID);
                        hash.Add("CreationDate", item.CreationDate);
                        hash.Add("Description", item.Description);
                        hash.Add("Flags", item.Flags);
                        hash.Add("InventoryType", item.InventoryType);
                        hash.Add("Permissions", item.Permissions);
                        response.Add(hash);
                    }
                }
            }
            roothash.Add("Contents", response);
            enqueue(roothash);
        }
        void Inventory_FolderUpdated(object sender, FolderUpdatedEventArgs e)
        {
            if (e.Success)
            {
                //Console.WriteLine("Folder " + e.FolderID + " updated");
                bool fetch = false;
                lock (m_processed)
                {
                    if (!m_processed.Contains(e.FolderID))
                    {
                        m_processed.Add(e.FolderID);
                        fetch = true;
                    }
                }

                if (fetch)
                {
                    List <InventoryFolder> m_foldersToFetch = new List <InventoryFolder>();
                    foreach (InventoryBase item in Bot.Client.Inventory.Store.GetContents(e.FolderID))
                    {
                        if (item is InventoryFolder)
                        {
                            InventoryFolder f = new InventoryFolder(item.UUID);
                            f.OwnerID = item.OwnerID;
                            m_foldersToFetch.Add(f);
                        }
                    }
                    if (m_foldersToFetch.Count > 0)
                    {
                        m_Requests += 1;
                        Bot.Client.Inventory.RequestFolderContentsCap(m_foldersToFetch, Bot.Client.Network.CurrentSim.Caps.CapabilityURI("FetchInventoryDescendents2"), true, true, InventorySortOrder.ByDate);
                    }
                }

                if (Bot.Client.Inventory.Store.Items.Count >= 15739)
                {
                    m_StopWatch.Stop();
                    Console.WriteLine("Stop! Total items: " + Bot.Client.Inventory.Store.Items.Count + "; Total requests: " + m_Requests + "; Time: " + m_StopWatch.Elapsed);
                }
            }
        }
Beispiel #4
0
 private void Inventory_OnFolderUpdated(object sender, FolderUpdatedEventArgs e)
 {
     UpdateFolder(e.FolderID);
 }
 private void Inventory_OnFolderUpdated(object sender, FolderUpdatedEventArgs e)
 {
     UpdateFolder(e.FolderID);
 }
Beispiel #6
0
        /// <summary>
        /// 指定ファイル・フォルダを対象にしてデータベース更新
        /// </summary>
        /// <param name="args"></param>
        /// <returns></returns>
        private async Task CheckFolderUpdateAsync(FolderUpdatedEventArgs args)
        {
            using (await asyncLock.LockAsync())
            {
                this.IsCreatingSubject.OnNext(true);

                await Task.Run(async() =>
                {
                    this.Creator.IgnoredFolders = null;
                    this.Creator.Completely     = this.RefreshLibraryCompletely;
                    this.Creator.Level          = this.FileCheckLevel;// PropertiesLevel.Basic;

                    if (args.AddedFiles.Length + args.RemovedFiles.Length >= 128)
                    {
                        var folderPathDictionary
                            = args.Folders.Distinct().ToDictionary(x => x, x => new FolderInformation(x)
                        {
                            IsTopDirectoryOnly = false,
                            RefreshEnable      = true,
                        });


                        var parentFolders = args.AddedFiles
                                            .Concat(args.RemovedFiles)
                                            .AsParallel()
                                            .Select(x => System.IO.Path.GetDirectoryName(x))
                                            .Distinct()
                                            .ToArray();


                        var existing = folderPathDictionary
                                       .Select(x => PathUtility.WithPostSeparator(x.Key))
                                       .ToArray();

                        foreach (var item in parentFolders)
                        {
                            var path = PathUtility.WithPostSeparator(item);
                            if (!existing.Any(x => path.StartsWith(x)))
                            {
                                folderPathDictionary.Add(item, new FolderInformation(item)
                                {
                                    RefreshEnable      = true,
                                    IsTopDirectoryOnly = true,
                                });
                            }
                        }

                        this.Creator.Folders = folderPathDictionary.Select(x => x.Value).ToArray();

                        await this.Creator.RefreshLibraryAsync(LibraryLoadAction.FolderChanged);
                    }
                    else
                    {
                        this.Creator.Folders = args.Folders
                                               .Select(x => new FolderInformation(x)
                        {
                            IsTopDirectoryOnly = false,
                            RefreshEnable      = true,
                        })
                                               .ToArray();

                        await this.Creator.RefreshLibraryAsync
                            (LibraryLoadAction.FolderChanged, args.AddedFiles, args.RemovedFiles);
                    }
                });

                this.IsCreatingSubject.OnNext(false);
            }
        }
 private void FashionBotModuleMain_OnFolderUpdated(object sender, FolderUpdatedEventArgs e)
 {
     EnumerateClothing();
 }