Exemplo n.º 1
0
 public void Start(FTService ftService)
 {
     Storage       = new Storage(ftService);
     QueueIndexing = new QueueIndexing();
     Scheduler     = new Scheduler(GetTimeTable(), ScanAndIndex);
     Scheduler.Start();
 }
Exemplo n.º 2
0
        private void IndexDocuments()
        {
            try
            {
                IsIndexRunning = true;

                while (true)
                {
                    var document = QueueIndexing.DequeDocumentWithContent();

                    if (document != null)
                    {
                        try
                        {
                            if (!OnBeforeDocumentIndexing(document))
                            {
                                return;
                            }

                            Storage.IndexDocument(document, Name);
                        }
                        finally
                        {
                            OnAfterDocumentIndexing(document);
                        }
                    }
                    else if (IsScanRunning)
                    {
                        Thread.Sleep(TimeSpan.FromSeconds(1)); //wait documents from scanning
                    }
                    else
                    {
                        break;
                    }
                }
            }
            finally
            {
                Storage.SaveIndex();

                IsIndexRunning = false;
            }

            return;
        }
Exemplo n.º 3
0
        private bool ScanFolder(Folder folder)
        {
            try
            {
                if (!OnBeforeFolderScanning(folder))
                {
                    return(false);
                }

                var documents = GetDocuments(folder);

                QueueIndexing.EnqueDocuments(documents);

                IDictionary <string, string> oldVersions = null;

                if (documents.Any(x => x.HasVersion))
                {
                    oldVersions = Storage.ReadDocumentVersions(documents);
                }

                while (true)
                {
                    var document = QueueIndexing.DequeDocument();

                    if (document != null)
                    {
                        if (!ScanDocument(oldVersions, document))
                        {
                            return(false);
                        }
                    }
                    else
                    {
                        break;
                    }
                }
            }
            finally
            {
                OnAfterFolderScanning(folder);
            }

            return(true);
        }
Exemplo n.º 4
0
        private bool ScanDocument(IDictionary <string, string> oldVersions, Document document)
        {
            try
            {
                if (!OnBeforeDocumentScanning(document))
                {
                    return(false);
                }

                if (oldVersions == null ||
                    ShouldDocumentIndexed(document, oldVersions[document.Name], document.Version))
                {
                    try
                    {
                        if (!OnBeforeLoadDocumentContent(document))
                        {
                            return(false);
                        }

                        if (!document.HasContent)
                        {
                            document.Content = LoadDocumentContent(document.Name, document.Version);
                        }

                        if (document.HasContent)
                        {
                            QueueIndexing.EnqueDocumentWithContent(document);
                        }
                    }
                    finally
                    {
                        OnAfterLoadDocumentContent(document);
                    }
                }
            }
            finally
            {
                OnAfterDocumentScanning(document);
            }

            return(true);
        }
Exemplo n.º 5
0
        private void ScanFolders()
        {
            try
            {
                IsScanRunning = true;

                if (!OnBeforeScanning())
                {
                    return;
                }

                var folders = GetFolders();
                QueueIndexing.EnqueFolders(folders);

                while (true)
                {
                    var folder = QueueIndexing.DequeFolder();

                    if (folder != null)
                    {
                        if (!ScanFolder(folder))
                        {
                            return;
                        }
                    }
                    else
                    {
                        break;
                    }
                }
            }
            finally
            {
                OnAfterScanning();

                IsScanRunning = false;
            }

            return;
        }