Example #1
0
 //---------------------------------------------------------------------------------------
 private void PushRequest(TaxonCommentRequest _request)
 {
     lock (_ListRequest)
     {
         _ListRequest.Add(_request);
     }
     _Thread.Priority = ThreadPriority.Normal;
     _LockEvent.Set();
 }
Example #2
0
        //---------------------------------------------------------------------------------------
        private TaxonCommentRequest PopRequest()
        {
            TaxonCommentRequest result = null;

            lock (_ListRequest)
            {
                if (_ListRequest.Count > 0)
                {
                    result = _ListRequest[0];
                    _ListRequest.RemoveAt(0);
                }
            }
            return(result);
        }
Example #3
0
        //---------------------------------------------------------------------------------------
        public void GetComment(object _owner, TaxonTreeNode _t, bool _recursive, OnCommentLoaded _callback)
        {
            FreeComment(_owner);

            TaxonCommentRequest request = new TaxonCommentRequest
            {
                Owner        = _owner,
                MainTaxon    = _t,
                CurrentTaxon = _t,
                Recursive    = _recursive,
                Callback     = _callback
            };

            PushRequest(request);
        }
Example #4
0
        void TaxonCommentsLoop()
        {
            while (!_Exit)
            {
                _LockEvent.WaitOne();

                if (_ListRequest.Count == 0)
                {
                    _LockEvent.Reset();
                    _Thread.Priority = ThreadPriority.Lowest;
                    continue;
                }

                TaxonCommentRequest request = PopRequest();
                Console.WriteLine(request.CurrentTaxon.Desc.RefMultiName.Main);
                if (request == null)
                {
                    continue;
                }

                string comment = null;
                if (!GetCommentFromMemory(request.CurrentTaxon, ref comment))
                {
                    CommentFileDesc commentFile = CommentFile(request.CurrentTaxon);

                    if (commentFile != null)
                    {
                        try
                        {
                            if (commentFile.Collection.IsDistant())
                            {
                                using (WebClient client = new WebClient())
                                {
                                    client.Encoding = System.Text.Encoding.UTF8;
                                    string url = commentFile.GetDistantPath();
                                    Console.WriteLine(url);
                                    comment = client.DownloadString(url);
                                }
                            }
                            else
                            {
                                VinceToolbox.fileFunctions.readTextFile(commentFile.GetHtmlName(), ref comment);
                            }
                            comment = TransformHTMLComment(comment, commentFile);
                            // StoreCommentInMemory(request.CurrentTaxon, comment);
                        }
                        catch { }
                    }
                }
                // request.Callback(request.Owner, request.MainTaxon, request.CurrentTaxon, comment);

                if (request.Result == null)
                {
                    request.Result = new TaxonCommentRequestResult()
                    {
                        Main = request.MainTaxon
                    }
                }
                ;
                request.Result.Comments.Add(new Tuple <TaxonTreeNode, string>(request.CurrentTaxon, comment));


                if (request.Recursive && request.CurrentTaxon.Father != null)
                {
                    request.CurrentTaxon = request.CurrentTaxon.Father;
                    PushRequest(request);
                }
                else
                {
                    request.Callback(request.Owner, request.Result);
                }
            }
        }

        //=========================================================================================
        // Request list
        //

        List <TaxonCommentRequest> _ListRequest = new List <TaxonCommentRequest>();