Esempio n. 1
0
        private static bool ValidateEntry(MetaDataModel.Entry entry, MetaDataEntry doc, IWorkspaceItem item, out string defaultMessage)
        {
            const string DONT_SHOW = "DONT SHOW";

            if (entry.IsArray)
            {
                if (doc.Value == null)
                {
                    foreach (var value in doc.Entries)
                    {
                        if (!ValidateSingleMetaEntry(entry, value.Value, item, out defaultMessage))
                        {
                            return(false);
                        }
                    }
                    defaultMessage = DONT_SHOW;
                    return(true);
                }
                else
                {
                    defaultMessage = DONT_SHOW;
                    return(false);
                }
            }
            else if (doc.Value == null)
            {
                defaultMessage = "Entry has to contain a value";
                return(false);
            }
            else
            {
                return(ValidateSingleMetaEntry(entry, doc.Value, item, out defaultMessage));
            }
        }
Esempio n. 2
0
        /// <inheritdoc />
        protected override void HandleJavaMeta(MetaDataEntry entry)
        {
            base.HandleJavaMeta(entry);

            if (entry.Index == 14 && entry is MetadataByte data)
            {
                var isSmall = (data.Value & 0x01) != 0;

                SetSmall(isSmall);

                var hasArms     = (data.Value & 0x04) != 0;
                var noBasePlate = (data.Value & 0x08) != 0;
                var setMarker   = (data.Value & 0x10) != 0;

                if (setMarker)
                {
                    Width  = 0f;
                    Height = 0f;
                    NoAi   = true;
                }
                //IsInvisible = setMarker;

                var renderer = ModelRenderer;
                if (renderer != null)
                {
                    renderer.SetVisibility("leftarm", hasArms);
                    renderer.SetVisibility("rightarm", hasArms);
                    renderer.SetVisibility("baseplate", !noBasePlate);
                }
            }
            else if (entry.Index >= 15 && entry.Index <= 20 && entry is MetadataRotation rotation)
            {
                switch (entry.Index)
                {
                case 15:                         //Head
                    SetHeadRotation(rotation.Rotation);
                    break;

                case 16:                         //Body
                    SetBodyRotation(rotation.Rotation);
                    break;

                case 17:                         //Left Arm
                    SetArmRotation(rotation.Rotation, true);
                    break;

                case 18:                         //Right Arm
                    SetArmRotation(rotation.Rotation, false);
                    break;

                case 19:                         //Left Leg
                    SetLegRotation(rotation.Rotation, true);
                    break;

                case 20:                         //Right Leg
                    SetLegRotation(rotation.Rotation, false);
                    break;
                }
            }
        }
Esempio n. 3
0
        /// <inheritdoc />
        protected override void HandleJavaMeta(MetaDataEntry entry)
        {
            base.HandleJavaMeta(entry);

            if (entry.Index == 14 && entry is MetadataFloat flt)
            {
                //Additional hearts
                //HealthManager.MaxHealth
            }
            else if (entry.Index == 15 && entry is MetadataVarInt score)
            {
                Score = score.Value;
            }
            else if (entry.Index == 16 && entry is MetadataByte data)
            {
                SkinFlags.Value = data.Value;

                if (ModelRenderer != null)
                {
                    SkinFlags.ApplyTo(ModelRenderer);
                }
            }
            else if (entry.Index == 17 && entry is MetadataByte metaByte)
            {
                IsLeftHanded = metaByte.Value == 0;
            }
        }
Esempio n. 4
0
        //TODO: Handle hand animations

        /// <inheritdoc />
        protected override void HandleJavaMeta(MetaDataEntry entry)
        {
            base.HandleJavaMeta(entry);

            /*if (entry.Index == 7 && entry is MetadataByte data)
             * {
             *      bool handActive = (data.Value & 0x01) != 0;
             *
             *      if (handActive)
             *      {
             *              bool offHandActive = (data.Value & 0x02) != 0;
             *              var item = GetItemInHand(!offHandActive);
             *
             *              if (item != null)
             *              {
             *                      if (item is ItemEdible) //Food or drink
             *                      {
             *
             *                      }
             *                      else if (item.ItemType == ItemType.Sword || item.ItemType == ItemType.Shield)
             *                      {
             *
             *                      }
             *                      else if (item.ItemType == ItemType.AnyTool)
             *                      {
             *
             *                      }
             *              }
             *      }
             * }
             * else*/if (entry.Index == 8 && entry is MetadataFloat flt)
            {
                HealthManager.Health = flt.Value;
            }
        }
Esempio n. 5
0
        /// <inheritdoc />
        protected override void HandleJavaMeta(MetaDataEntry entry)
        {
            base.HandleJavaMeta(entry);

            if (entry.Index >= 15 && entry.Index <= 20 && entry is MetadataRotation rotation)
            {
                switch (entry.Index)
                {
                case 15:                         //Head
                    SetHeadRotation(rotation.Rotation);
                    break;

                case 16:                         //Body
                    SetBodyRotation(rotation.Rotation);
                    break;

                case 17:                         //Left Arm
                    SetArmRotation(rotation.Rotation, true);
                    break;

                case 18:                         //Right Arm
                    SetArmRotation(rotation.Rotation, false);
                    break;

                case 19:                         //Left Leg
                    SetLegRotation(rotation.Rotation, true);
                    break;

                case 20:                         //Right Leg
                    SetLegRotation(rotation.Rotation, false);
                    break;
                }
            }
        }
        internal XmlDocument ToXml(string group, ITestResultSerializerFactory serializerFactory)
        {
            XmlDocument doc = new XmlDocument();
            //Check Metadata for xml serializer type, TDS is default value
            MetaDataEntry entry = ServiceLocator.Resolve <ConfigurationHolder>().GetFromMetaData(this.ProjectID, group, "XMLVersion");

            XMLAdapter.AdapterType xmlType = XMLAdapter.AdapterType.TDS;
            if (entry != null)
            {
                xmlType = Utilities.Utility.Value(entry.TextVal, XMLAdapter.AdapterType.TDS);
            }

            // if set to 1/true, any demographics in the file will be preserved
            //  Used only in the OSS environment to minimize configuration
            entry = ServiceLocator.Resolve <ConfigurationHolder>().GetFromMetaData(this.ProjectID, group, "IncludeAllDemographics");

            SerializationConfig config = null;

            if (entry != null && Convert.ToBoolean(entry.IntVal))
            {
                config = new SerializationConfigIncludeAllDemographics();
            }
            else
            {
                //get the serialization config from the project metadata
                config = new SerializationConfig(/*ConfigurationHolder.IncludeAccommodations(ProjectID, group),*/
                    ServiceLocator.Resolve <ConfigurationHolder>().GetRTSAttributes(this.projectID, group));
            }

            doc.LoadXml(serializerFactory.CreateSerializer(xmlType.ToString(), this).Serialize(config));
            return(doc);
        }
Esempio n. 7
0
        /// <inheritdoc />
        protected override void HandleJavaMeta(MetaDataEntry entry)
        {
            base.HandleJavaMeta(entry);

            if (entry.Index == 18 && entry is MetadataBool boolean)
            {
                IsBegging = boolean.Value;
            }
        }
Esempio n. 8
0
        /// <inheritdoc />
        protected override void HandleJavaMeta(MetaDataEntry entry)
        {
            base.HandleJavaMeta(entry);

            if (entry.Index == 8 && entry is MetadataFloat flt)
            {
                HealthManager.Health = flt.Value;
            }
        }
Esempio n. 9
0
        /// <inheritdoc />
        protected override void HandleJavaMeta(MetaDataEntry entry)
        {
            base.HandleJavaMeta(entry);

            if (entry.Index == 18 && entry is MetadataVarInt varint)
            {
                Variant = (ParrotType)varint.Value;
            }
        }
Esempio n. 10
0
        /// <inheritdoc />
        protected override void HandleJavaMeta(MetaDataEntry entry)
        {
            base.HandleJavaMeta(entry);

            if (entry.Index == 15 && entry is MetadataVarInt mtd)
            {
                Size = mtd.Value;
            }
        }
Esempio n. 11
0
        /// <inheritdoc />
        protected override void HandleJavaMeta(MetaDataEntry entry)
        {
            base.HandleJavaMeta(entry);

            if (entry.Index == 15 && entry is MetadataByte meta)
            {
                IsHanging = (meta.Value & 0x01) != 0;
            }
        }
Esempio n. 12
0
        /// <inheritdoc />
        protected override void HandleJavaMeta(MetaDataEntry entry)
        {
            base.HandleJavaMeta(entry);

            if (entry.Index == 18 && entry is MetadataBool val)
            {
                IsChested = val.Value;
            }
        }
Esempio n. 13
0
        /// <inheritdoc />
        protected override void HandleJavaMeta(MetaDataEntry entry)
        {
            base.HandleJavaMeta(entry);

            if (entry.Index == 16 && entry is MetadataVarInt variant)
            {
                TryUpdateTexture("minecraft:fox", variant.Value == 0 ? "red" : "arctic");
            }
        }
Esempio n. 14
0
        protected override void HandleJavaMeta(MetaDataEntry entry)
        {
            base.HandleJavaMeta(entry);

            if (entry.Index == 16 && entry is MetadataString variant)
            {
                TryUpdateTexture("minecraft:mooshroom", variant.Value == "red" ? "default" : "brown");
            }
        }
Esempio n. 15
0
        /// <inheritdoc />
        protected override void HandleJavaMeta(MetaDataEntry entry)
        {
            base.HandleJavaMeta(entry);

            if (entry.Index == 21 && entry is MetadataVarInt variant)
            {
                SetVariant(variant.Value);
            }
        }
Esempio n. 16
0
        /// <inheritdoc />
        protected override void HandleJavaMeta(MetaDataEntry entry)
        {
            base.HandleJavaMeta(entry);

            if (entry.Index == 17 && entry is MetadataByte metaByte)
            {
                IsLeftHanded = metaByte.Value == 0;
            }
        }
Esempio n. 17
0
        /// <inheritdoc />
        protected override void HandleJavaMeta(MetaDataEntry entry)
        {
            base.HandleJavaMeta(entry);

            if (entry.Index == 15 && entry is MetadataByte mtd)
            {
                IsWallClimbing = (mtd.Value & 0x01) != 0;
            }
        }
Esempio n. 18
0
        protected override void HandleJavaMeta(MetaDataEntry entry)
        {
            base.HandleJavaMeta(entry);

            if (entry.Index == 16 && entry is MetadataByte meta)
            {
                SetSheared((meta.Value & 0x10) != 0);
                SetColor(meta.Value & 0x0F);
            }
        }
Esempio n. 19
0
        /// <inheritdoc />
        protected override void HandleJavaMeta(MetaDataEntry entry)
        {
            base.HandleJavaMeta(entry);

            if (entry.Index == 17 && entry is MetadataVillagerData villagerData)
            {
                string texture = villagerData.Profession.ToString().ToLower();
                TryUpdateTexture("minecraft:villager", texture);
            }
        }
Esempio n. 20
0
        /// <inheritdoc />
        protected override void HandleJavaMeta(MetaDataEntry entry)
        {
            base.HandleJavaMeta(entry);

            if (entry.Index == 7 && entry is MetadataPosition position)
            {
                KnownPosition.X = position.Position.X;
                KnownPosition.Y = position.Position.Y;
                KnownPosition.Z = position.Position.Z;
            }
        }
Esempio n. 21
0
        /// <inheritdoc />
        protected override void HandleJavaMeta(MetaDataEntry entry)
        {
            base.HandleJavaMeta(entry);

            if (entry.Index == 16 && entry is MetadataByte meta)
            {
                IsSitting = (meta.Value & 0x01) != 0;
                IsAngry   = (meta.Value & 0x02) != 0;
                IsTamed   = (meta.Value & 0x04) != 0;
            }
        }
Esempio n. 22
0
        /// <inheritdoc />
        protected override void HandleJavaMeta(MetaDataEntry entry)
        {
            base.HandleJavaMeta(entry);

            if (entry.Index == 16 && entry is MetadataBool charged)
            {
                IsCharged = charged.Value;
            }
            else if (entry.Index == 17 && entry is MetadataBool ignited)
            {
                IsIgnited = ignited.Value;
            }
        }
Esempio n. 23
0
        /// <inheritdoc />
        protected override void HandleJavaMeta(MetaDataEntry entry)
        {
            base.HandleJavaMeta(entry);

            if (entry.Index == 7 && entry is MetadataSlot slot)
            {
                var item = JavaWorldProvider.GetItemFromSlotData(slot.Value);
                if (item != null)
                {
                    SetItem(item);
                }
            }
        }
Esempio n. 24
0
        private static void AddMetaDataEntry(Block block, LineInfo lineInfo, string ln, int offset, int remainingSpaces, int length = -1, bool isAddOffsetRequired = true)
        {
            int pos   = lineInfo.LineOffset;
            int line  = lineInfo.LineNumber;
            int index = ln.IndexOf(':');

            if (index > -1)
            {
                string name = ln.Substring(0, index);

                var entry = new MetaDataEntry {
                    Name = name, NameStartPosition = pos, LineNumber = line
                };
                for (int i = index + 1; i < ln.Length; i++)
                {
                    if (ln[i] == '[' || ln[i] == '"' || char.IsLetterOrDigit(ln[i]))
                    {
                        index = i;
                        break;
                    }
                }
                string value = ln.Substring(index).Trim('\n', ' ', '\t', '"');
                if (value.Length > 0)
                {
                    if (value[0] == '[')
                    {
                        var values = value.Split(',');
                        for (int i = 0; i < values.Length; i++)
                        {
                            values[i] = values[i].Trim('[', ']', ' ');
                            if (values[i].Length > 0)
                            {
                                entry.Entries.Add(new MetaDataEntry {
                                    Value = values[i].Trim('"')
                                });
                            }
                        }
                    }
                    else
                    {
                        entry.Value = value;
                    }
                    entry.ValueStartPosition = index + pos;
                    entry.ValueLength        = ln.Length - index;
                }

                block.MetaData.Entries.Add(entry);
            }
        }
Esempio n. 25
0
File: Bee.cs Progetto: lvyitian/Alex
        /// <inheritdoc />
        protected override void HandleJavaMeta(MetaDataEntry entry)
        {
            base.HandleJavaMeta(entry);

            if (entry.Index == 16 && entry is MetadataByte meta)
            {
                IsAngry   = (meta.Value & 0x02) != 0;
                HasStung  = (meta.Value & 0x04) != 0;
                HasNectar = (meta.Value & 0x08) != 0;
            }

            if (entry.Index == 17 && entry is MetadataVarInt angerTime)
            {
                AngerTime = angerTime.Value;
            }
        }
Esempio n. 26
0
 private void SaveValidationResult(MetaDataEntry result)
 {
     try
     {
         if (result.Status == "ERRORS" && result.ContactEmail != null && result.ContactEmail != "" && result.ContactEmail.Contains('@'))
         {
             using (var session = MvcApplication.Store.OpenSession())
             {
                 session.Store(result);
                 session.SaveChanges();
             }
         }
     }
     catch (Exception ex) {
         Log.Error(ex.Message);
     }
 }
Esempio n. 27
0
        /// <inheritdoc />
        protected override void HandleJavaMeta(MetaDataEntry entry)
        {
            base.HandleJavaMeta(entry);

            if (entry.Index == 14 && entry is MetadataByte bitMask)
            {
                //NoAi = ((bitMask.Value & 0x01) != 0);

                if ((bitMask.Value & 0x02) != 0)                 //Left Handed
                {
                    IsLeftHanded = true;
                }
                else
                {
                    IsLeftHanded = false;
                }
            }
        }
Esempio n. 28
0
        /// <inheritdoc />
        protected override void HandleJavaMeta(MetaDataEntry entry)
        {
            base.HandleJavaMeta(entry);

            if (entry.Index == 16 && entry is MetadataByte data)
            {
                IsTamed     = (data.Value & 0x02) != 0;
                IsSaddled   = (data.Value & 0x04) != 0;
                HasBred     = (data.Value & 0x08) != 0;
                IsEating    = (data.Value & 0x10) != 0;
                IsRearing   = (data.Value & 0x20) != 0;
                IsMouthOpen = (data.Value & 0x40) != 0;
            }

            if (entry.Index == 17 && entry is MetadataOptUUID uuid)
            {
                Owner = uuid.HasValue ? uuid.Value : null;
            }
        }
Esempio n. 29
0
        public void GetAllMetadata()
        {
            MetadataIndexViewModel model = new MetadataIndexViewModel();
            int offset = 1;
            int limit  = 50;

            model = _metadataService.SearchMetadata("", "", offset, limit);

            foreach (var item in model.MetadataItems)
            {
                MetaDataEntry md = ValidateMetadata(item.Uuid);
                SaveValidationResult(md);
            }

            int numberOfRecordsMatched = model.TotalNumberOfRecords;
            int next = model.OffsetNext();

            try
            {
                while (next < numberOfRecordsMatched)
                {
                    model = _metadataService.SearchMetadata("", "", next, limit);

                    foreach (var item in model.MetadataItems)
                    {
                        MetaDataEntry md = ValidateMetadata(item.Uuid);
                        SaveValidationResult(md);
                    }

                    next = model.OffsetNext();
                    if (next == 0)
                    {
                        break;
                    }
                }
            }
            catch (Exception e)
            {
                Log.Error(e.Message);
            }
        }
        /// <summary>
        /// get all Filenames inside a folder and adds it into a List
        /// </summary>
        /// <param name="folder"></param>
        private void getFilesInFolder(List <string> folder)
        {
            int i = 1;

            foreach (string rootFolder in _allFolders)
            {
                Console.WriteLine("**************************************************************************************************");
                List <MetaDataEntry> metaDataEntries = new List <MetaDataEntry>();

                DirectoryInfo di = new DirectoryInfo(rootFolder);

                if (di.GetFiles().Length > 0)
                {
                    foreach (FileInfo fileInfo in di.GetFiles())
                    {
                        if (!fileInfo.Name.EndsWith(".xml") && !fileInfo.Name.EndsWith(".ffs_db") && !fileInfo.Name.EndsWith(".db"))
                        {
                            string tmp_Name = fileInfo.FullName.Remove(0, RootPath.Length);

                            string uriPath = Helper.convert(tmp_Name);

                            MetaDataEntry entry = new MetaDataEntry(fileInfo.Name, _iniReader.Read("RootPath", "Web") + uriPath);
                            metaDataEntries.Add(entry);
                        }
                    }
                    _fileWriter.PathForMetadataXml = rootFolder;
                    _fileWriter.WriteMetadataXml(metaDataEntries);
                }

                Console.WriteLine($"{i} von {_allFolders.Count} verarbeitet.");
                Console.WriteLine("");
                Console.WriteLine("**************************************************************************************************");

                i++;
            }
        }
Esempio n. 31
0
        /***** private members ***********************************************/
        /**
         * AddFile adds a new entry (hash, path, lastwritetime, metadata)
         * to the list of shared files.
         */
        private void AddFile(string filePathQ)
        {
            try
            {
                // add file to hashing queue
                try
                {
                    m_HashingQueue.Lock();
                    if (!m_HashingQueue.Contains(filePathQ))
                    {
                        m_HashingQueue.Enqueue(filePathQ);
                    }
                }
                finally
                {
                    m_HashingQueue.Unlock();
                }

                // if no hashing thread is running, start a new hashing thread
                if (m_HashingThread == null || !m_HashingThread.IsAlive)
                {
                    m_HashingThread = new Thread(delegate()
                    {
                        while (!m_HashingQueue.IsEmpty)
                        {
                            try
                            {
                                string filePath = string.Empty;
                                try
                                {
                                    m_HashingQueue.Lock();
                                    filePath = m_HashingQueue.Dequeue();
                                }
                                finally
                                {
                                    m_HashingQueue.Unlock();
                                }
                                if (File.Exists(filePath))
                                {
                                    byte[] fileHash = null;
                                    string hashSource = "unknown";
                                    SharedFileEntry knownSharedFileEntry = null;

                                    // check to see if the file is already in the database
                                    try
                                    {
                                        m_SharedFileEntries.Lock();
                                        foreach (SharedFileEntry sharedFileEntry in m_SharedFileEntries.Values)
                                        {
                                            if (Path.GetFileName(sharedFileEntry.FilePath).Equals(Path.GetFileName(filePath)) &&
                                                new FileInfo(filePath).LastWriteTime.Equals(sharedFileEntry.LastWriteTime))
                                            {
                                                knownSharedFileEntry = sharedFileEntry;
                                                break;
                                            }
                                        }

                                        if (knownSharedFileEntry != null)
                                        {
                                            // file is already known, use the existing hash
                                            m_SharedFileEntries.Remove(knownSharedFileEntry.FilePath);
                                            fileHash = knownSharedFileEntry.FileHash;
                                            hashSource = "database";
                                        }
                                        else
                                        {
                                            // file is not known, so we have to calculate the hash
                                            FileStream fileStream = null;
                                            while (fileStream == null)
                                            {
                                                try
                                                {
                                                    fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read);
                                                }
                                                catch (System.IO.IOException)
                                                {
                                                }
                                            }
                                            //FileStream fileStream = new FileStream(filePath, FileMode.Open);
                                            fileHash = ComputeHashes.SHA512Compute(fileStream);
                                            fileStream.Close();
                                            hashSource = "new file";
                                        }

                                        // check if hashed file is still valid (not removed during hashing)
                                        // and add to shared file entries
                                        foreach (string sharedDir in m_SharedDirectories)
                                        {
                                            if (filePath.Contains(sharedDir))
                                            {
                                                m_SharedFileEntries[filePath] = new SharedFileEntry(filePath, fileHash, new FileInfo(filePath).LastWriteTime);
                                                goto fileValid;
                                            }
                                        }
                                    }
                                    finally
                                    {
                                        m_SharedFileEntries.Unlock();
                                    }
                                    continue;
                                fileValid:

                                    // add to meta data entries and shared files
                                    try
                                    {
                                        m_SharedFiles.Lock();

                                        string fileHashString = Core.ByteArrayToString(fileHash);
                                        if (!m_SharedFiles.ContainsKey(fileHashString))
                                        {
                                            MetaDataEntry metaDataEntry;
                                            if (!m_MetaDataEntries.TryGetValue(fileHashString, out metaDataEntry))
                                                metaDataEntry = new MetaDataEntry();
                                            m_SharedFiles.Add(new SharedFile(filePath, fileHash, metaDataEntry.MetaData, metaDataEntry.Comment, metaDataEntry.Rating, metaDataEntry.LastRequest));
                                        }
                                    }
                                    finally
                                    {
                                        m_SharedFiles.Unlock();
                                    }

                                    m_Logger.Log("Added file from {0} \"{1}\"", hashSource, filePath);
                                }
                                else
                                {
                                    m_Logger.Log("AddFile: File does not exist: \"{0}\"", filePath);
                                }
                            }
                            catch (Exception ex)
                            {
                                m_Logger.Log("AddFile: An exception was thrown during hashing: {0}", ex);
                            }
                        }
                    });
                    m_HashingThread.IsBackground = true;
                    m_HashingThread.Priority = ThreadPriority.Lowest;
                    m_HashingThread.Start();
                }
            }
            catch (Exception ex)
            {
                m_Logger.Log(ex, "An exception was thrown while adding a shared file!");
            }
        }
Esempio n. 32
0
        /**
         * AddDirectory adds a directory path to the list of shared
         * directories. All files in the shared directory and its subdirectory
         * are hashed and added to the shred files list. The contents of the
         * shared directory are atomatically tracked and updated via a
         * FileSystemWatcher object.
         */
        public bool AddDirectory(string sharedDirectory)
        {
            if (sharedDirectory == null)
                throw new ArgumentNullException("sharedDirectory");

            try
            {
                if (!Directory.Exists(sharedDirectory))
                {
                    m_Logger.Log("AddDirectory: Directory does not exist: \"{0}\"", sharedDirectory);
                    return false;
                }

                // check if parent or passed directory is already shared
                // 2007-08-06 fix for Ticket #71 T.Norad
                bool hasParent = false;
                bool isAlreadyShared = false;
                DirectoryInfo parentDirectory = Directory.GetParent(sharedDirectory);
                foreach (string sharedDir in m_SharedDirectories)
                {
                    // is the directory already shared?
                    if (sharedDirectory.Equals(sharedDir))
                    {
                        isAlreadyShared = true;
                        break;
                    }
                    // is the parent already shared?
                    if (parentDirectory != null && parentDirectory.FullName.Contains(sharedDir))
                    {
                        hasParent = true;
                        break;
                    }
                }

                if (!(hasParent || isAlreadyShared))
                {
                    // add directory
                    m_SharedDirectories.Add(sharedDirectory);

                    // add directory watcher
                    FileSystemWatcher watcher = new FileSystemWatcher();
                    watcher.Path = sharedDirectory;
                    watcher.IncludeSubdirectories = true;
                    watcher.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName;
                    watcher.Changed += new FileSystemEventHandler(OnChanged);
                    watcher.Created += new FileSystemEventHandler(OnChanged);
                    watcher.Deleted += new FileSystemEventHandler(OnChanged);
                    watcher.Renamed += new RenamedEventHandler(OnRenamed);
                    watcher.EnableRaisingEvents = true;
                    m_DirectoryWatchers[sharedDirectory] = watcher;

                    m_Logger.Log(Properties.Resources_Core.AddedDirectory, sharedDirectory);
                }

                // index and hash contained files
                try
                {
                    FileInfo[] fileInfos = null;
                    while (fileInfos == null)
                    {
                        try
                        {
                            fileInfos = new DirectoryInfo(sharedDirectory).GetFiles("*", SearchOption.AllDirectories);
                        }
                        catch(Exception ex)
                        {
                            m_Logger.Log(ex, "An Exception was thrown while retrieving file information from directory \"{0}\"!", sharedDirectory);
                            // T.Norad BZ 134. break the loop if an exception is raised
                            return false;
                        }
                    }
                    SharedFileEntry sharedFileEntry;
                    foreach (FileInfo fileInfo in fileInfos)
                    {
                        if (m_SharedFileEntries.TryGetValue(fileInfo.FullName, out sharedFileEntry))
                        {
                            string fileHashString = Core.ByteArrayToString(sharedFileEntry.FileHash);

                            try
                            {
                                m_SharedFiles.Lock();
                                if (!m_SharedFiles.ContainsKey(fileHashString))
                                {
                                    MetaDataEntry metaDataEntry;
                                    if (!m_MetaDataEntries.TryGetValue(fileHashString, out metaDataEntry))
                                        metaDataEntry = new MetaDataEntry();
                                    m_SharedFiles.Add(new SharedFile(sharedFileEntry.FilePath, sharedFileEntry.FileHash, metaDataEntry.MetaData, metaDataEntry.Comment, metaDataEntry.Rating, metaDataEntry.LastRequest));
                                }
                            }
                            finally
                            {
                                m_SharedFiles.Unlock();
                            }
                        }
                        else
                        {
                            AddFile(fileInfo.FullName);
                        }
                    }
                }
                catch (Exception ex)
                {
                    m_Logger.Log(ex, "An exception was thrown while indexing shared directory \"{0}\"!", sharedDirectory);
                    return false;
                }
            }
            catch (Exception ex)
            {
                m_Logger.Log(ex, "An exception was thrown while adding a shared directory!");
                return false;
            }

            return true;
        }