Пример #1
0
        void CacheController_RefreshCompleted(object sender, RefreshCompletedEventArgs e)
        {
            this.Flush();
            SyncCompletedEventArgs args = new SyncCompletedEventArgs(e.Cancelled, e.Error, e.Statistics);

            this.OnSyncCompleted(args);
        }
Пример #2
0
        /// <summary>
        /// Handles the cache controller refresh completed event.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void CacheController_RefreshCompleted(object sender, RefreshCompletedEventArgs e)
        {
            SyncInactive = true;

            if (e.Error == null)
            {
                LastSyncStatus = "Synchronization with service completed successfully";
            }
            else
            {
                LastSyncStatus = "Synchronization failed: " + e.Error.ToString();
            }
        }
Пример #3
0
        public override async Task <bool> RefreshItemsAsync()
        {
            isRefreshing = true;
            sourceCancel = new CancellationTokenSource();
            cancelToken  = sourceCancel.Token;
            bool isOK         = false;
            int  oldItemCount = itemCount;

            if (forceRefresh)
            {
                oldItemCount = itemCount;
                itemCount    = -1;
                forceRefresh = false;
            }
            try
            {
                (bool isSucces, List <IContentItem> list, string error) = await yClient.FetchAllItemsAsync(whichPage, itemCount, cancelToken).ConfigureAwait(false);

                isOK         = isSucces;
                itemCount    = oldItemCount;
                errorMessage = error;
                if (isOK && !cancelToken.IsCancellationRequested)
                {
                    newItems.Clear();
                    var keepItems = new List <IContentItem>();
                    var newIds    = new List <int>();
                    var keepIds   = new List <int>();

                    int howManyToFetch = list.Count >= itemCount ? itemCount : list.Count;
                    var newIdsList     = new List <int>(howManyToFetch);

                    for (int i = 0; i < howManyToFetch; i++)
                    {
                        newIdsList.Add(list[i].ItemId);
                    }
                    for (int i = 0; i < howManyToFetch; i++)
                    {
                        if (cancelToken.IsCancellationRequested)
                        {
                            isOK = false;
                            break;
                        }
                        if (!currentIds.Contains(newIdsList[i]))
                        {
                            newItems.Add(list[i]);
                            newIds.Add(newIdsList[i]);
                        }
                        else
                        {
                            keepItems.Add(list[i]);
                            keepIds.Add(newIdsList[i]);
                        }
                    }

                    currentItems.Clear();
                    currentIds.Clear();
                    foreach (IContentItem item in keepItems)
                    {
                        currentItems.Add(item);
                        currentIds.Add(item.ItemId);
                    }
                    foreach (IContentItem item in newItems)
                    {
                        currentItems.Add(item);
                        currentIds.Add(item.ItemId);
                    }
                }
            }
            catch (TaskCanceledException te)
            {
                errorMessage = $"{errorMessage}: {te.ToString()}";
                Logger.Log(errorMessage, Logger.Level.Error);
            }
            if (sourceCancel != null)
            {
                sourceCancel.Dispose();
            }
            sourceCancel = null;
            var e = new RefreshCompletedEventArgs(isOK);

            OnRefreshCompleted(e);
            itemCount    = oldItemCount;
            isRefreshing = false;
            return(isOK);
        }