Beispiel #1
0
        /* Function: ReleaseFileSource
         * Releases a <FileSource> claimed via <PickFileSource()> after all processing is complete on it.
         */
        protected void ReleaseFileSource(FileSource fileSource, FileSourceAdder fileSourceAdder, bool scanningCompleted)
        {
            lock (accessLock)
            {
                // If scanning wasn't completed allow it to be chosen again
                if (!scanningCompleted)
                {
                    // Need to find which index it was at
                    for (int i = 0; i < fileSources.Count; i++)
                    {
                        if ((object)fileSources[i] == (object)fileSource)
                        {
                            fileSourcesClaimed[i] = false;
                            fileSourceAdders[i]   = null;
                            break;
                        }
                    }
                }

                if (fileSource is FileSources.Folder)
                {
                    folderPrefixesClaimed.Remove(
                        (fileSource as FileSources.Folder).Path.Prefix
                        );
                }
            }
        }
Beispiel #2
0
        // Group: Initialization and Configuration Functions
        // __________________________________________________________________________


        /* Function: Adder
         */
        public Adder(Engine.Instance engineInstance) : base(engineInstance)
        {
            fileSources           = Manager.FileSources;
            fileSourcesClaimed    = new bool[fileSources.Count];
            fileSourceAdders      = new FileSourceAdder[fileSources.Count];
            folderPrefixesClaimed = new StringSet(KeySettings.IgnoreCase);

            accessLock = new object();
        }
Beispiel #3
0
        // Group: Individual File Management Functions
        // __________________________________________________________________________


        /* Function: PickFileSource
         *
         * Returns a <FileSource> that is available to be scanned for files and its corresponding <FileSourceAdder>, or false if there
         * aren't any.  You must pass them to <ReleaseFileSource()> when done.
         *
         * If this function returns false it doesn't mean that there are no unscanned <FileSources> remaining, as it may be requiring
         * some to be scanned sequentially to prevent multiple sources on the same disk from being scanned at the same time.  So
         * while this function may return null while a particular <FileSource> is being scanned, it may return another one after it's
         * released.
         */
        protected bool PickFileSource(out FileSource fileSource, out FileSourceAdder fileSourceAdder)
        {
            lock (accessLock)
            {
                for (int i = 0; i < fileSources.Count; i++)
                {
                    if (fileSourcesClaimed[i] == false)
                    {
                        fileSource = fileSources[i];

                        if (fileSource is FileSources.Folder)
                        {
                            string folderPrefix = (fileSource as FileSources.Folder).Path.Prefix;

                            if (folderPrefixesClaimed.Contains(folderPrefix) == false)
                            {
                                fileSourcesClaimed[i] = true;
                                folderPrefixesClaimed.Add(folderPrefix);
                                fileSourceAdder     = fileSource.CreateAdderProcess();
                                fileSourceAdders[i] = fileSourceAdder;
                                return(true);
                            }
                        }
                        else                         // not a folder
                        {
                            fileSourcesClaimed[i] = true;
                            fileSourceAdder       = fileSource.CreateAdderProcess();
                            fileSourceAdders[i]   = fileSourceAdder;
                            return(true);
                        }
                    }
                }
            }

            fileSource      = null;
            fileSourceAdder = null;
            return(false);
        }