示例#1
0
        /// <summary>
        /// Загрузка списка комменарием для конкретного фото
        /// </summary>
        /// <param name="uid"></param>
        /// <param name="photoID"></param>
        /// <param name="count"></param>
        /// <param name="isRefresh"></param>
        /// <param name="restoreSession"></param>
        /// <returns></returns>
        public PhotosCommentsResponse LoadCommentsToPhoto(int uid, int photoID, int count, bool isRefresh, bool restoreSession, PhotosCommentsResponseHistory photosCommentsRespounseHistory)
        {
            DebugHelper.WriteLogEntry("BaseLogic.LoadCommentsToPhoto");

            // т.к. "общий" кэш все равно нужен в работе
            PhotosCommentsResponseHistory newPhotosCommentsRespounseHistory;

            try
            {
                if (photosCommentsRespounseHistory == null)
                {
                    //newPhotosCommentsRespounseHistory = Cache.Cache.LoadFromCache<PhotosCommentsResponseHistory>(string.Empty, "PhotosCommentsResponseHistory");
                    newPhotosCommentsRespounseHistory = DataModel.Data.PhotosCommentsResponseHistoryData;
                }
                else
                {
                    newPhotosCommentsRespounseHistory = photosCommentsRespounseHistory;
                }

                if (newPhotosCommentsRespounseHistory == null)
                {
                    throw new Exception();
                }
            }
            catch (Exception)
            {
                newPhotosCommentsRespounseHistory = new PhotosCommentsResponseHistory();
            }

            try
            {
                if (isRefresh)
                {
                    throw new Exception();
                }

                // ищем нужный айтем
                PhotosCommentsResponse newPhotosCommentsResponse = newPhotosCommentsRespounseHistory.GetItem(photoID);

                if (newPhotosCommentsResponse != null)
                {
                    return newPhotosCommentsResponse; // выводим, если нашли
                }
                else
                {
                    throw new Exception(); // обращаемся к серверу, если нет
                }
            }
            catch (Exception)
            {
                if (!isRefresh) return null;

                //WiFi
                if (_iDataLogic.GetOnlyWIFI() == "1")
                {
                    if (!CoreHelper.TurnWiFi(true))
                    {
                        throw new VKException(ExceptionMessage.NoConnection);
                    }
                }

                // восстанавливаем сессию
                if (restoreSession)
                {
                    AutoLogin();
                }

                ErrorResponse newErrorResponse = null;
                PhotosCommentsResponse newPhotosCommentsResponse = null;

                // считываем требуемое количество комментариев к фотографии
                try
                {
                    //throw new NullReferenceException();

                    newPhotosCommentsResponse = _iCommunicationLogic.LoadPhotosCommentsData(_iDataLogic.GetUid(), _iDataLogic.GetSessionKey(), "0", Convert.ToString(count - 1), uid.ToString() + "_" + photoID.ToString(), out newErrorResponse);
                }
                catch (VKException)
                {
                    throw;
                }
                catch (TimeoutException ex)
                {
                    DebugHelper.WriteLogEntry("BaseLogic.LoadCommentsToPhoto TimeoutException Message: " + ex.Message);
                    DebugHelper.WriteLogEntry("BaseLogic.LoadCommentsToPhoto TimeoutException StackTrace: " + ex.StackTrace);

                    throw new VKException(ExceptionMessage.NoConnection);
                }
                catch (WebException ex)
                {
                    DebugHelper.WriteLogEntry("BaseLogic.LoadCommentsToPhoto WebException Message: " + ex.Message);
                    DebugHelper.WriteLogEntry("BaseLogic.LoadCommentsToPhoto WebException StackTrace: " + ex.StackTrace);

                    throw new VKException(ExceptionMessage.NoConnection);
                }
                catch (OutOfMemoryException ex)
                {
                    DebugHelper.WriteLogEntry("BaseLogic.LoadCommentsToPhoto OutOfMemoryException Message: " + ex.Message);
                    DebugHelper.WriteLogEntry("BaseLogic.LoadCommentsToPhoto OutOfMemoryException StackTrace: " + ex.StackTrace);

                    throw;
                }
                catch (Exception ex)
                {
                    DebugHelper.WriteLogEntry("BaseLogic.LoadCommentsToPhoto Exception Message: " + ex.Message);
                    DebugHelper.WriteLogEntry("BaseLogic.LoadCommentsToPhoto Exception StackTrace: " + ex.StackTrace);
                }

                if (newPhotosCommentsResponse == null)
                {
                    if (newErrorResponse != null)
                    {
                        if (newErrorResponse.error_code == "1")
                        {
                            if (!restoreSession)
                            {
                                return LoadCommentsToPhoto(uid, photoID, count, isRefresh, true, null);
                            }
                            else
                            {
                                throw new VKException(ExceptionMessage.ServerUnavalible);
                            }
                        }
                        else if (newErrorResponse.error_code == "2")
                        {
                            throw new VKException(ExceptionMessage.AccountBloked);
                        }
                        else
                        {
                            throw new VKException(ExceptionMessage.UnknownError);
                        }
                    }
                    else
                    {
                        //throw new VKException(ExceptionMessage.UnknownError);
                    }
                }

                newPhotosCommentsResponse.pcrPhotoID = photoID; // устанавливаем ID фото

                newPhotosCommentsRespounseHistory.DelItem(photoID); // удаляем данные по фото, на случай если они есть
                newPhotosCommentsRespounseHistory.AddItem(newPhotosCommentsResponse); // добавляем полученные данные

                ////сохраняем в кэш всю историю
                //try
                //{
                //    DebugHelper.WriteLogEntry("(Кэш) Сохранение данных PhotosCommentsResponseHistory...");

                //    bool result;

                //    if (photosCommentsRespounseHistory == null)
                //    {
                //        result = Cache.Cache.SaveToCache(newPhotosCommentsRespounseHistory, string.Empty, "PhotosCommentsResponseHistory");
                //    }
                //    else
                //    {
                //        result = true;
                //    }

                //    if (result)
                //    {
                //        DebugHelper.WriteLogEntry("(Кэш) Данные PhotosCommentsResponseHistory успешно сохранены.");
                //    }
                //    else
                //    {
                //        DebugHelper.WriteLogEntry("(Кэш) Данные PhotosCommentsResponseHistory не сохранены.");
                //    }
                //}
                //catch (Exception)
                //{
                //    DebugHelper.WriteLogEntry("(Кэш) В процессе сохранения данных PhotosCommentsResponseHistory произошла ошибка.");
                //}

                if (photosCommentsRespounseHistory == null)
                {
                    //result = Cache.Cache.SaveToCache(newPhotosCommentsRespounseHistory, string.Empty, "PhotosCommentsResponseHistory");
                    DataModel.Data.PhotosCommentsResponseHistoryData = newPhotosCommentsRespounseHistory;
                }

                return newPhotosCommentsResponse;
            }
        }