Пример #1
0
        protected override void OnViewStateChanged(string key)
        {
            #region Check AutoLogin

            if (key == "CheckAutoLogin")
            {
                try
                {
                    using (new WaitWrapper())
                    {
                        Globals.BaseLogic.AutoLogin();
                    }

                    Initialize("LoginSuccess");
                }
                catch (VKException ex)
                {
                    string message = ExceptionTranslation.TranslateException(ex);

                    if (!string.IsNullOrEmpty(message))
                    {
                        if (ex.LocalizedMessage == ExceptionMessage.IncorrectLoginOrPassword)
                        {
                            Globals.BaseLogic.IDataLogic.SetToken(string.Empty);

                            MasterForm.Navigate <LoginController>("IncorrectLoginOrPassword");
                        }
                        else if (ex.LocalizedMessage == ExceptionMessage.NoSavedToken)
                        {
                            MasterForm.Navigate <LoginController>();
                        }
                        else if (ex.LocalizedMessage == ExceptionMessage.UnknownError)
                        {
                            MasterForm.Navigate <LoginController>("UnknownError");
                        }
                        else
                        {
                            Initialize("LoginSuccess");
                        }
                    }
                }
                catch (OutOfMemoryException)
                {
                    DialogControl.ShowQuery(Resources.OutOfMemory, DialogButtons.OK);
                }
            }

            #endregion

            #region InitializeSettings

            else if (key == "InitializeSettings")
            {
                using (new WaitWrapper())
                {
                    // если приложение запущено при остановленном нотификаторе, то очищаем кэш
                    // это единственное место, где осуществляется это действие

                    //if (!Interprocess.IsServiceRunning)
                    {
                        Cache.DeleteEntryFromCache(string.Empty, "ShortActivityResponse");
                        Cache.DeleteEntryFromCache(string.Empty, "ShortUpdatesPhotosResponse");
                        Cache.DeleteEntryFromCache(string.Empty, "ShortWallResponse");
                        Cache.DeleteEntryFromCache(string.Empty, "ShortPhotosCommentsRespounse");
                    }

                    #region SetShowEventButtons

                    if (Globals.BaseLogic.IDataLogic.GetShowButtonMessages())
                    {
                        Globals.BaseLogic.IDataLogic.SetShowButtonMessages();
                    }

                    if (Globals.BaseLogic.IDataLogic.GetShowButtonComments())
                    {
                        Globals.BaseLogic.IDataLogic.SetShowButtonComments();
                    }

                    if (Globals.BaseLogic.IDataLogic.GetShowButtonFriends())
                    {
                        Globals.BaseLogic.IDataLogic.SetShowButtonFriends();
                    }

                    if (Globals.BaseLogic.IDataLogic.GetShowButtonFriendsNews())
                    {
                        Globals.BaseLogic.IDataLogic.SetShowButtonFriendsNews();
                    }

                    if (Globals.BaseLogic.IDataLogic.GetShowButtonFriendsPhotos())
                    {
                        Globals.BaseLogic.IDataLogic.SetShowButtonFriendsPhotos();
                    }

                    if (Globals.BaseLogic.IDataLogic.GetShowButtonWallMessages())
                    {
                        Globals.BaseLogic.IDataLogic.SetShowButtonWallMessages();
                    }

                    #endregion

                    Configuration.LoadConfigSettings();
                    Configuration.SaveConfigSettings();

                    #region старт/стоп нотификатора

                    if (Configuration.BackgroundNotification != BackgroundNotificationTypes.Off)
                    {
                        Globals.BaseLogic.IDataLogic.SetNtfAutorun();

                        OnViewStateChanged("StartNotificator");
                    }
                    else
                    {
                        OnViewStateChanged("StopNotificator");

                        Globals.BaseLogic.IDataLogic.DelNtfAutorun();
                    }

                    OnViewStateChanged("StopNotificator");

                    #endregion
                }
            }

            #endregion

            #region StartNotificator

            if (key == "StartNotificator")
            {
                if (!string.IsNullOrEmpty(Globals.BaseLogic.IDataLogic.GetToken()))
                {
                    //// запуск службы нотификатора
                    //try
                    //{
                    //    if (!Interprocess.IsServiceRunning)
                    //    {
                    //        Interprocess.StartService();
                    //    }
                    //}
                    //catch (Exception ex)
                    //{
                    //    ViewData["NotificatorStartError"] = ex.Message;
                    //    view.UpdateView("NotificatorStartFail");
                    //}
                }
                else
                {
                    DialogControl.ShowQuery(Resources.MainView_Button_NotificatorCantStart, DialogButtons.OK);
                }
            }

            #endregion

            #region StopNotificator

            if (key == "StopNotificator")
            {
                // остановка службы нотификатора
                //Interprocess.StopService();
            }

            #endregion

            #region GetMainViewData

            if (key == "GetMainViewData")
            {
                LoadingControlInterface lc = LoadingControl.CreateLoading(Resources.DataLoading);

                Thread asyncDataThread = new Thread(delegate { AsyncGetMainViewData(lc); });

                asyncDataThread.IsBackground = true;
                asyncDataThread.Start();

                lc.ShowLoading(false);

                if (lc.Abort)
                {
                    asyncDataThread.Abort();
                }
            }

            #endregion

            #region GoToUploadPhoto

            if (key == "GoToUploadPhoto")
            {
                MasterForm.Navigate <UploadPhotoController>();
            }

            #endregion

            #region AutoUpdate

            if (key == "AutoUpdate")
            {
                var updateHelper = new UpdateHelper((UIViewBase)ViewData["MainViewThis"]);

                updateHelper.CheckNewVersion();
            }

            #endregion

            #region ChangeStatus

            if (key == "ChangeStatus")
            {
                MasterForm.Navigate <ChangeStatusController>((string)ViewData["UserStatus"]);
            }

            #endregion

            #region CheckNewEvents

            if (key == "CheckNewEvents")
            {
                // проверка флага необходимости обновления списка событий
                if (Globals.BaseLogic.IDataLogic.GetRefreshEventsFlag() == "1")
                {
                    try
                    {
                        // загрузка событий
                        EventsGetResponse newEventsGetResponse = Globals.BaseLogic.EventsGet(false, false, false);

                        ViewData["MessagesCount"]      = string.Empty;
                        ViewData["CommentsCount"]      = string.Empty;
                        ViewData["FriendsCount"]       = string.Empty;
                        ViewData["FriendsNewsCount"]   = string.Empty;
                        ViewData["FriendsPhotosCount"] = string.Empty;
                        ViewData["WallCount"]          = string.Empty;

                        foreach (Event newEvent in newEventsGetResponse.events)
                        {
                            switch (newEvent.type)
                            {
                            case EventType.Messages:
                                ViewData["MessagesCount"] = newEvent.number.ToString();
                                break;

                            case EventType.Comments:
                                ViewData["CommentsCount"] = newEvent.number.ToString();
                                break;

                            case EventType.Friends:
                                ViewData["FriendsCount"] = newEvent.number.ToString();
                                break;

                            case EventType.FriendsNews:
                                ViewData["FriendsNewsCount"] = newEvent.number.ToString();
                                break;

                            case EventType.FriendsPhotos:
                                ViewData["FriendsPhotosCount"] = newEvent.number.ToString();
                                break;

                            case EventType.WallMessages:
                                ViewData["WallCount"] = newEvent.number.ToString();
                                break;
                            }
                        }

                        view.UpdateView("RefreshEventsInfo");
                    }
                    catch (Exception ex)
                    {
                        //
                    }
                }
            }

            #endregion



            #region GoToNews

            if (key == "GoToNews")
            {
                MasterForm.Navigate <StatusUpdatesListController>();
            }

            #endregion

            #region GoToFriends

            if (key == "GoToFriends")
            {
                MasterForm.Navigate <FriendsListController>();
            }

            #endregion

            #region GoToMessages

            if (key == "GoToMessages")
            {
                MasterForm.Navigate <MessagesChainsListController>();
            }

            #endregion

            #region GoToExtras

            if (key == "GoToExtras")
            {
                MasterForm.Navigate <ExtraController>();
            }

            #endregion
        }
Пример #2
0
        private void FillEventsListModel(EventsGetResponse eventsGetResponse)
        {
            view.Model.Clear();

            EventButton viewItemMessages      = null;
            EventButton viewItemComments      = null;
            EventButton viewItemFriends       = null;
            EventButton viewItemFriendsNews   = null;
            EventButton viewItemFriendsPhotos = null;
            EventButton viewItemWallMessages  = null;

            foreach (Event ev in eventsGetResponse.events)
            {
                switch (ev.type)
                {
                case EventType.Messages:
                    viewItemMessages       = new EventButton(Resources.MainView_Label_Messages, Convert.ToInt16(ev.number), ev.type, MasterForm.SkinManager.GetImage("Message"));
                    viewItemMessages.Count = ev.number;
                    break;

                case EventType.Comments:
                    viewItemComments       = new EventButton(Resources.MainView_Label_Comments, Convert.ToInt16(ev.number), ev.type, MasterForm.GetSkinManagerImageInvoked("Guest"));
                    viewItemComments.Count = ev.number;
                    break;

                case EventType.Friends:
                    viewItemFriends       = new EventButton(Resources.MainView_Label_Friends, Convert.ToInt16(ev.number), ev.type, MasterForm.GetSkinManagerImageInvoked("Mark"));
                    viewItemFriends.Count = ev.number;
                    break;

                case EventType.FriendsNews:
                    viewItemFriendsNews       = new EventButton(Resources.MainView_Label_FriendsNews, Convert.ToInt16(ev.number), ev.type, MasterForm.GetSkinManagerImageInvoked("Notification"));
                    viewItemFriendsNews.Count = ev.number;
                    break;

                case EventType.FriendsPhotos:
                    viewItemFriendsPhotos       = new EventButton(Resources.MainView_Label_FriendsPhotos, Convert.ToInt16(ev.number), ev.type, MasterForm.GetSkinManagerImageInvoked("Activities"));
                    viewItemFriendsPhotos.Count = ev.number;
                    break;

                case EventType.WallMessages:
                    viewItemWallMessages       = new EventButton(Resources.MainView_Label_WallMessages, Convert.ToInt16(ev.number), ev.type, MasterForm.GetSkinManagerImageInvoked("Discussion"));
                    viewItemWallMessages.Count = ev.number;
                    break;
                }
            }

            // формирование списка по порядку

            // сообщения
            if (Globals.BaseLogic.IDataLogic.GetShowButtonMessages())
            {
                if (viewItemMessages == null)
                {
                    viewItemMessages       = new EventButton(Resources.MainView_Label_Messages, 0, EventType.Messages, MasterForm.GetSkinManagerImageInvoked("Message"));
                    viewItemMessages.Count = 0;
                    view.Model.Add(viewItemMessages);
                }
                else
                {
                    view.Model.Add(viewItemMessages);
                }
            }

            // уведомления
            if (Globals.BaseLogic.IDataLogic.GetShowButtonComments())
            {
                if (viewItemComments == null)
                {
                    viewItemComments       = new EventButton(Resources.MainView_Label_FriendsNews, 0, EventType.Comments, MasterForm.GetSkinManagerImageInvoked("Notification"));
                    viewItemComments.Count = 0;
                    view.Model.Add(viewItemComments);
                }
                else
                {
                    view.Model.Add(viewItemComments);
                }
            }

            // обсуждения
            if (Globals.BaseLogic.IDataLogic.GetShowButtonFriends())
            {
                if (viewItemFriends == null)
                {
                    viewItemFriends       = new EventButton(Resources.MainView_Label_WallMessages, 0, EventType.Friends, MasterForm.GetSkinManagerImageInvoked("Discussion"));
                    viewItemFriends.Count = 0;
                    view.Model.Add(viewItemFriends);
                }
                else
                {
                    view.Model.Add(viewItemFriends);
                }
            }

            // лента
            if (Globals.BaseLogic.IDataLogic.GetShowButtonFriendsNews())
            {
                if (viewItemFriendsNews == null)
                {
                    viewItemFriendsNews       = new EventButton(Resources.MainView_Label_FriendsPhotos, 0, EventType.FriendsNews, MasterForm.GetSkinManagerImageInvoked("Activities"));
                    viewItemFriendsNews.Count = 0;
                    view.Model.Add(viewItemFriendsNews);
                }
                else
                {
                    view.Model.Add(viewItemFriendsNews);
                }
            }

            // гости
            if (Globals.BaseLogic.IDataLogic.GetShowButtonFriendsPhotos())
            {
                if (viewItemFriendsPhotos == null)
                {
                    viewItemFriendsPhotos       = new EventButton(Resources.MainView_Label_Comments, 0, EventType.FriendsPhotos, MasterForm.GetSkinManagerImageInvoked("Guest"));
                    viewItemFriendsPhotos.Count = 0;
                    view.Model.Add(viewItemFriendsPhotos);
                }
                else
                {
                    view.Model.Add(viewItemFriendsPhotos);
                }
            }

            // оценки
            if (Globals.BaseLogic.IDataLogic.GetShowButtonWallMessages())
            {
                if (viewItemWallMessages == null)
                {
                    viewItemWallMessages       = new EventButton(Resources.MainView_Label_Friends, 0, EventType.WallMessages, MasterForm.GetSkinManagerImageInvoked("Mark"));
                    viewItemWallMessages.Count = 0;
                    view.Model.Add(viewItemWallMessages);
                }
                else
                {
                    view.Model.Add(viewItemWallMessages);
                }
            }
        }
Пример #3
0
        protected override void OnInitialize(params object[] parameters)
        {
            if ((parameters != null) && (parameters.Length > 0))
            {
                string param0 = parameters[0] as string;

                if (param0.Equals("LoadingPreview"))
                {
                    try
                    {
                        // загрузка событий
                        EventsGetResponse newEventsGetResponse = Globals.BaseLogic.EventsGet(false, false, true);

                        FillEventsListModel(newEventsGetResponse);
                        view.UpdateView("RefreshEventsInfo");

                        // профиль
                        User user = Globals.BaseLogic.GetAuthorizedUserInfo(false, false);

                        ViewData["UserName"]   = user.FirstName + " " + user.LastName;
                        ViewData["UserStatus"] = user.Status;
                        ViewData["Gender"]     = user.Sex;

                        view.UpdateView("RefreshUserInfo");

                        // аватар
                        bool res = Globals.BaseLogic.ICommunicationLogic.LoadImage(user.Photo200px, HttpUtility.GetMd5Hash(user.Photo200px), false, _afterLoadImageEventHandler, UISettings.CalcPix(50), 0, "int");

                        if (res)
                        {
                            ViewData["AvatarPath"] = SystemConfiguration.AppInstallPath + "//Cache//Files//" + HttpUtility.GetMd5Hash(user.Photo200px);
                            view.UpdateView("RefreshAvatarFromCache");
                        }
                    }
                    catch (Exception)
                    {
                        //
                    }
                }
                else if (param0.Equals("LoginSuccess"))
                {
                    SetOnlineMode(this, new EventArgs());

                    //???
                    OnViewStateChanged("InitializeSettings");
                    ViewData["IsFirstStart"] = "1";
                    OnViewStateChanged("GetMainViewData");
                }
                else if (param0.Equals("LoginFail"))
                {
                    if (SetOfflineMode != null)
                    {
                        SetOfflineMode(this, new EventArgs());
                    }
                }
                else if (param0.Equals("LoginConnectionErrorFail"))
                {
                    ViewData["ConnectionError"] = true;
                }
                else if (param0.Equals("Status"))
                {
                    string param1 = parameters[1] as string;

                    if (param1 != null)
                    {
                        ViewData["CurrentStatus"] = parameters[1] as string;
                        ViewData["UserStatus"]    = ViewData["CurrentStatus"];

                        view.UpdateView("RefreshStatusBox");
                    }
                }
            }

            base.OnInitialize(parameters);
        }
Пример #4
0
        private void AsyncGetMainViewData(LoadingControlInterface lc)
        {
            bool isRefresh = (Configuration.AutoUpdateAtStart || (string)ViewData["IsRefreshMainViewData"] == "1");

            // загрузка данных главной страницы
            try
            {
                lc.Current = 5;

                // загрузка событий
                EventsGetResponse newEventsGetResponse = Globals.BaseLogic.EventsGet(isRefresh, false, true);
                lc.Current = 10;

                FillEventsListModel(newEventsGetResponse);
                view.UpdateView("RefreshEventsInfo");

                if (lc.Abort)
                {
                    isRefresh = false;
                }

                // загрузка профиля
                User user = Globals.BaseLogic.GetAuthorizedUserInfo(isRefresh, false);
                lc.Current = 20;

                ViewData["UserName"]   = user.FirstName + " " + user.LastName;
                ViewData["UserStatus"] = user.Status;
                view.UpdateView("RefreshUserInfo");

                if (lc.Abort)
                {
                    isRefresh = false;
                }

                //загрузка аватара
                bool res = Globals.BaseLogic.ICommunicationLogic.LoadImage(user.Photo200px, HttpUtility.GetMd5Hash(user.Photo200px), isRefresh, _afterLoadImageEventHandler, UISettings.CalcPix(50), 0, "int");
                lc.Current = 30;

                if (res)
                {
                    ViewData["AvatarPath"] = SystemConfiguration.AppInstallPath + "//Cache//Files//" + HttpUtility.GetMd5Hash(user.Photo200px);
                }
                else
                {
                    ViewData["AvatarPath"] = string.Empty;
                }

                view.UpdateView("RefreshAvatarFromCache");

                // прогружаем очередь...
                var t = new Thread(delegate { Globals.BaseLogic.ICommunicationLogic.LoadImagesInDictionary(); })
                {
                    IsBackground = true
                };

                t.Start();
            }
            catch (VKException ex)
            {
                string error = ExceptionTranslation.TranslateException(ex);

                if (!String.IsNullOrEmpty(error))
                {
                    ViewData["GetError"] = error;

                    view.UpdateView("GetFail");

                    if (ex.LocalizedMessage.Equals(ExceptionMessage.IncorrectLoginOrPassword))
                    {
                        Globals.BaseLogic.IDataLogic.SetToken(string.Empty);

                        MasterForm.Navigate <LoginController>();
                    }
                }

                // если не обновились, грузим из кэша
                try
                {
                    // загрузка событий
                    EventsGetResponse newEventsGetResponse = Globals.BaseLogic.EventsGet(false, false, true);
                    lc.Current = 40;

                    FillEventsListModel(newEventsGetResponse);
                    view.UpdateView("RefreshEventsInfo");

                    // профиль
                    User user = Globals.BaseLogic.GetAuthorizedUserInfo(false, false);
                    lc.Current = 50;

                    ViewData["UserName"]   = user.FirstName + " " + user.LastName;
                    ViewData["UserStatus"] = user.Status;

                    view.UpdateView("RefreshUserInfo");

                    // аватар
                    bool res = Globals.BaseLogic.ICommunicationLogic.LoadImage(user.Photo200px, HttpUtility.GetMd5Hash(user.Photo200px), false, _afterLoadImageEventHandler, UISettings.CalcPix(50), 0, "int");
                    lc.Current = 60;

                    if (res)
                    {
                        ViewData["AvatarPath"] = SystemConfiguration.AppInstallPath + "//Cache//Files//" + HttpUtility.GetMd5Hash(user.Photo200px);
                    }
                    else
                    {
                        ViewData["AvatarPath"] = string.Empty;
                    }

                    view.UpdateView("RefreshAvatarFromCache");
                }
                catch (Exception e)
                {
                    DebugHelper.WriteLogEntry(e, "Error reading from cache");
                }
            }
            catch (OutOfMemoryException)
            {
                ViewData["GetError"] = Resources.OutOfMemory;
                view.UpdateView("GetFail");
            }
            catch (Exception ex)
            {
                DebugHelper.WriteLogEntry(ex.Message);
            }

            // прогрузить остальные данные при старте
            if (((string)ViewData["IsFirstStart"]).Equals("1") && Configuration.AutoUpdateAtStart)
            {
                try
                {
                    // список друзей
                    if (lc.Abort)
                    {
                        isRefresh = false;
                    }

                    Globals.BaseLogic.LoadFriendsList(isRefresh, false);
                    lc.Current = 70;

                    // список обновлений статусов
                    if (lc.Abort)
                    {
                        isRefresh = false;
                    }

                    Globals.BaseLogic.LoadActivityDataList(25, isRefresh, false);
                    lc.Current = 80;

                    // список комментариев к фотографиям пользователя
                    if (lc.Abort)
                    {
                        isRefresh = false;
                    }

                    Globals.BaseLogic.LoadPhotosComments(25, isRefresh, false);
                    lc.Current = 90;

                    // список заголовков цепочек сообщений пользователя
                    if (lc.Abort)
                    {
                        isRefresh = false;
                    }

                    Globals.BaseLogic.GetShortCorrespondence(isRefresh, false);
                    lc.Current = 95;
                }
                catch (VKException ex)
                {
                    DebugHelper.WriteLogEntry("Can't download data at start: " + ex.LocalizedMessage + ex.StackTrace);
                }
                catch (OutOfMemoryException ex)
                {
                    DebugHelper.WriteLogEntry("Can't download data at start: " + ex.Message + ex.StackTrace);
                }
                catch (Exception ex)
                {
                    DebugHelper.WriteLogEntry("Can't download data at start: " + ex.Message);
                }
            }

            lc.Current = 100;
        }
Пример #5
0
        /* Ненужный код
         *  DebugHelper.WriteLogEntry("Notificator OnTimerTick.");
         *  System.Drawing.Icon curIcon = Properties.Resources.Events;
         *
         *  bool newEvent = false;
         *  bool newMessage = false;
         *  bool newComment = false;
         *  bool newFriend = false;
         *  bool newFriendsPhotos = false;
         *  bool newFriendsNews = false;
         *  bool newWallMessages = false;
         *  bool oldEvent = false;
         *  string nfnText = "";
         *
         *  GetEventsResponse eventsGetResponse = _baseLogic.EventsGet(true, false);
         *
         *  try
         *  {
         #region Проверка событий (пришли новые или нет)
         *      if (eventsGetResponse.MessagesCount > _eventsGetResponsePrev.MessagesCount) newMessage = true;
         *      if (eventsGetResponse.CommentsCount > _eventsGetResponsePrev.CommentsCount) newComment = true;
         *      if (eventsGetResponse.FriendsCount > _eventsGetResponsePrev.FriendsCount)   newFriend = true;
         *      if (eventsGetResponse.FriendsPhotosCount > _eventsGetResponsePrev.FriendsPhotosCount) newFriendsPhotos = true;
         *      if (eventsGetResponse.FriendsNewsCount > _eventsGetResponsePrev.FriendsNewsCount) newFriendsNews = true;
         *      if (eventsGetResponse.WallCount > _eventsGetResponsePrev.WallCount) newWallMessages = true;
         #endregion
         *
         #region Проверяем пришли ли новые типы событий
         *      if (newMessage)
         *          oldEvent = _eventsGetResponsePrev.MessagesCount > 0;
         *      if (newComment)
         *          oldEvent = _eventsGetResponsePrev.CommentsCount > 0;
         *      if (newFriend)
         *          oldEvent = _eventsGetResponsePrev.FriendsCount > 0;
         *      if (newFriendsPhotos)
         *          oldEvent = _eventsGetResponsePrev.FriendsPhotosCount > 0;
         *      if (newFriendsNews)
         *          oldEvent = _eventsGetResponsePrev.FriendsNewsCount > 0;
         *      if (newWallMessages)
         *          oldEvent = _eventsGetResponsePrev.WallCount > 0;
         #endregion
         *
         #region Обработка по каждому типу
         *      if (newMessage && !(newComment || newFriend || newFriendsPhotos || newFriendsNews || newWallMessages))
         *      {
         *          DebugHelper.WriteLogEntry("Notificator new message.");
         *          curIcon = Properties.Resources.Messages;
         *          nfnText = String.Format("{0} ({1})", "Новых сообщений", eventsGetResponse.MessagesCount);
         *          if (nfnText != "") newEvent = true;
         *      }
         *      if (!newMessage && (newComment || newFriend || newFriendsPhotos || newFriendsNews || newWallMessages))
         *      {
         *          DebugHelper.WriteLogEntry("Notificator new event.");
         *          curIcon = Properties.Resources.Events;
         *          nfnText = "";
         *          if (newComment) nfnText += String.Format("{0} ({1})<br>", "Новых комментариев к фото",  eventsGetResponse.CommentsCount);
         *          if (newFriend)  nfnText += String.Format("{0} ({1})<br>", "Hовых приглашений дружить", eventsGetResponse.FriendsCount);
         *          if (newFriendsPhotos) nfnText += String.Format("{0} ({1})<br>", "Новых фотографий друзей", eventsGetResponse.FriendsPhotosCount);
         *          if (newFriendsNews) nfnText += String.Format("{0} ({1})<br>", "Новостей друзей", eventsGetResponse.FriendsNewsCount);
         *          if (newWallMessages) nfnText += String.Format("{0} ({1})<br>", "Новых сообщений на стене", eventsGetResponse.WallCount);
         *
         *          if (nfnText != "") newEvent = true;
         *      }
         *      if (newMessage && (newComment || newFriend || newFriendsPhotos || newFriendsNews || newWallMessages))
         *      {
         *          DebugHelper.WriteLogEntry("Notificator new message and event.");
         *          curIcon = Properties.Resources.BothEvMes;
         *          nfnText = "";
         *
         *          if (newMessage) nfnText += String.Format("{0} ({1})<br>", "Новых сообщений",            eventsGetResponse.MessagesCount);
         *          if (newComment) nfnText += String.Format("{0} ({1})<br>", "Новых комментариев к фото",   eventsGetResponse.CommentsCount);
         *          if (newFriend)  nfnText += String.Format("{0} ({1})<br>", "Hовых приглашений дружить",  eventsGetResponse.FriendsCount);
         *          if (newFriendsPhotos) nfnText += String.Format("{0} ({1})<br>", "Новых фотографий друзей", eventsGetResponse.FriendsPhotosCount);
         *          if (newFriendsNews) nfnText += String.Format("{0} ({1})<br>", "Новостей друзей", eventsGetResponse.FriendsNewsCount);
         *          if (newWallMessages) nfnText += String.Format("{0} ({1})<br>", "Новых сообщений на стене", eventsGetResponse.WallCount);
         *
         *          if (nfnText != "") newEvent = true;
         *
         *      }
         #endregion
         *
         *      _eventsGetResponsePrev = eventsGetResponse;
         *
         #region Вывод нотификации если есть новые события
         *      //Вывод нотификации если есть новые события
         *      try
         *      {
         *          if (newEvent)
         *          {
         *              //SetEvent для приложения, сигнализирующий о том, что есть новые события
         *              _baseLogic.IDataLogic.SetRefreshEventsFlag("1");
         *
         *              OnNotificationShow(nfnText, curIcon, oldEvent);
         *          }
         *      }
         *      catch (Exception ex)
         *      {
         *          DebugHelper.WriteLogEntry(String.Format("{0}: {1}", Properties.Resources.Program_OnTimerTick_NfnError, ex.Message));
         *          //#if DEBUG
         *          //MessageBox.Show(String.Format("{0}: {1}", Properties.Resources.Program_OnTimerTick_NfnError, ex.Message));
         *          //#endif
         *      }
         #endregion
         *  }
         *  catch (Exception ex)
         *  {
         *      DebugHelper.WriteLogEntry(String.Format("{0}: {1}", Properties.Resources.Program_OnTimerTick_Error, ex.Message));
         *      //#if DEBUG
         *      //MessageBox.Show(String.Format("{0}: {1}", Properties.Resources.Program_OnTimerTick_Error, ex.Message));
         *      //#endif
         *  }
         * }
         */
        #endregion

        static void GetData()
        {
            DebugHelper.WriteLogEntry("Notificator GetData");
            bool showMessage, showComments, showFriends, showFriendsNews, showFriendsPhotos, showWallMessages, newEvent, oldEvent = true;
            bool newMessage, newComments, newFriends, newFriendsNews, newFriendsPhotos, newWallMessages;
            Icon curIcon = Resources.Messages;

            showMessage = showComments = showFriends = showFriendsNews = showFriendsPhotos = showWallMessages = newEvent = newMessage = newComments = newFriends = newFriendsNews = newFriendsPhotos = newWallMessages = false;
            string nfnText = "";

            try
            {
                //Инициализация _eventsGetResponsePrev значениями из реестра
                if (_eventsGetResponsePrev.events.Count == 0)
                {
                    _eventsGetResponsePrev = _baseLogic.IDataLogic.EventsGet();
                }

                //Оновление событий с сервера
                //получение обновленных значений из реестра
                EventsGetResponse eventsGetResponse = null;
                try
                {
                    eventsGetResponse = _baseLogic.EventsGet(true, false, true);
                }
                catch (VKException ex)
                {
                    DebugHelper.WriteLogEntry("***7");
                    CatchErrors(ex);
                    DebugHelper.WriteLogEntry("***8");
                }
                catch (Exception ex)
                {
                    DebugHelper.WriteLogEntry(ex, "Unexpected error");
                }
                DebugHelper.WriteLogEntry("***9");

                //Если значений в реестре не было, то делаю количество всех ивентов 0
                if (_eventsGetResponsePrev.events.Count == 0)
                {
                    _eventsGetResponsePrev = eventsGetResponse;
                    foreach (Event ev in _eventsGetResponsePrev.events)
                    {
                        ev.number = 0;
                    }
                }
                DebugHelper.WriteLogEntry("***10");

                if (eventsGetResponse != null)
                {
                    #region Проверка какие события показывать
                    foreach (Event ev in eventsGetResponse.events)
                    {
                        switch (ev.type)
                        {
                        case EventType.Messages:
                            if (ev.number > 0)
                            {
                                showMessage = true;
                            }
                            break;

                        case EventType.Comments:
                            if (ev.number > 0)
                            {
                                showComments = true;
                            }
                            break;

                        case EventType.Friends:
                            if (ev.number > 0)
                            {
                                showFriends = true;
                            }
                            break;

                        case EventType.FriendsNews:
                            if (ev.number > 0)
                            {
                                showFriendsNews = true;
                            }
                            break;

                            /*
                             * case EventType.FriendsPhotos:
                             * if (ev.number > 0) showFriendsPhotos = true;
                             * break;
                             * case EventType.WallMessages:
                             * if (ev.number > 0) showWallMessages = true;
                             * break;
                             */
                        }
                    }
                    #endregion
                    DebugHelper.WriteLogEntry("***11");

                    #region Проверяем изменился ли счетчик событий с последнего обновления
                    foreach (Event ev in eventsGetResponse.events)
                    {
                        switch (ev.type)
                        {
                        case EventType.Messages:
                            foreach (Event evPrev in _eventsGetResponsePrev.events)
                            {
                                if (evPrev.type == ev.type)
                                {
                                    if (ev.number > evPrev.number)
                                    {
                                        newMessage = true;
                                    }
                                }
                            }
                            break;

                        case EventType.Comments:
                            foreach (Event evPrev in _eventsGetResponsePrev.events)
                            {
                                if (evPrev.type == ev.type)
                                {
                                    if (ev.number > evPrev.number)
                                    {
                                        newComments = true;
                                    }
                                }
                            }
                            break;

                        case EventType.Friends:
                            foreach (Event evPrev in _eventsGetResponsePrev.events)
                            {
                                if (evPrev.type == ev.type)
                                {
                                    if (ev.number > evPrev.number)
                                    {
                                        newFriends = true;
                                    }
                                }
                            }
                            break;

                        case EventType.FriendsNews:
                            foreach (Event evPrev in _eventsGetResponsePrev.events)
                            {
                                if (evPrev.type == ev.type)
                                {
                                    if (ev.number > evPrev.number)
                                    {
                                        newFriendsNews = true;
                                    }
                                }
                            }
                            break;

                            /*
                             * case EventType.FriendsPhotos:
                             * foreach (Event evPrev in _eventsGetResponsePrev.events)
                             * if (evPrev.type == ev.type)
                             * if (ev.number > evPrev.number) newFriendsPhotos = true;
                             * break;
                             * case EventType.WallMessages:
                             * foreach (Event evPrev in _eventsGetResponsePrev.events)
                             * if (evPrev.type == ev.type)
                             * if (ev.number > evPrev.number) newWallMessages = true;
                             * break;
                             */
                        }
                    }

                    #endregion
                    DebugHelper.WriteLogEntry("***12");

                    #region Проверка происходило ли событие раньше
                    oldEvent = true;
                    foreach (Event evPrev in _eventsGetResponsePrev.events)
                    {
                        switch (evPrev.type)
                        {
                        case EventType.Messages:
                            if (newMessage)
                            {
                                if (evPrev.number == 0)
                                {
                                    oldEvent = false;
                                }
                            }
                            break;

                        case EventType.Comments:
                            if (newComments)
                            {
                                if (evPrev.number == 0)
                                {
                                    oldEvent = false;
                                }
                            }
                            break;

                        case EventType.Friends:
                            if (newFriends)
                            {
                                if (evPrev.number == 0)
                                {
                                    oldEvent = false;
                                }
                            }
                            break;

                        case EventType.FriendsNews:
                            if (newFriendsNews)
                            {
                                if (evPrev.number == 0)
                                {
                                    oldEvent = false;
                                }
                            }
                            break;

                            /*
                             * case EventType.FriendsPhotos:
                             * if (newFriendsPhotos)
                             * if (evPrev.number == 0) oldEvent = false;
                             * break;
                             * case EventType.WallMessages:
                             * if (newWallMessages)
                             * if (evPrev.number == 0) oldEvent = false;
                             * break;
                             */
                        }
                    }
                    #endregion
                    DebugHelper.WriteLogEntry("***13");

                    #region Определение иконки
                    curIcon = showMessage ? Resources.Messages : Resources.Events;

                    #endregion
                    DebugHelper.WriteLogEntry("***14");

                    //MessageBox.Show(showMessage + ":" + showFriends + ":" + showFriendsNews);
                    //MessageBox.Show(newMessage + ":" + newFriends + ":" + newFriendsNews);

                    #region Формирование текста сообщения

                    if (newMessage || newComments || newFriends || newFriendsNews /*|| newFriendsPhotos || newWallMessages*/)
                    {
                        DebugHelper.WriteLogEntry("Got new event");
                        nfnText = "";

                        #region текст
                        foreach (Event ev in eventsGetResponse.events)
                        {
                            switch (ev.type)
                            {
                            case EventType.Messages:
                                if (showMessage)
                                {
                                    nfnText += String.Format("{0} (+{1})<br>", Resources.Program_OnTimerTick_NfnMess, ev.number);
                                }
                                break;
                            }
                        }
                        foreach (Event ev in eventsGetResponse.events)
                        {
                            switch (ev.type)
                            {
                            case EventType.Comments:
                                if (showComments)
                                {
                                    nfnText += String.Format("{0} (+{1})<br>", Resources.Program_OnTimerTick_NfnCmnts, ev.number);
                                }
                                break;
                            }
                        }
                        foreach (Event ev in eventsGetResponse.events)
                        {
                            switch (ev.type)
                            {
                            case EventType.Friends:
                                if (showFriends)
                                {
                                    nfnText += String.Format("{0} (+{1})<br>", Resources.Program_OnTimerTick_NfnFrnds, ev.number);
                                }
                                break;
                            }
                        }

                        foreach (Event ev in eventsGetResponse.events)
                        {
                            switch (ev.type)
                            {
                            case EventType.FriendsNews:
                                if (showFriendsNews)
                                {
                                    nfnText += String.Format("{0} (+{1})<br>", Resources.Program_OnTimerTick_NfnFrndsNs, ev.number);
                                }
                                break;
                            }
                        }

                        /*
                         * foreach (Event ev in eventsGetResponse.events)
                         * {
                         *  switch (ev.type)
                         *  {
                         *      case EventType.FriendsPhotos:
                         *          if (showFriendsPhotos) nfnText += String.Format("{0} (+{1})<br>", Resources.Program_OnTimerTick_NfnFrndsPh, ev.number);
                         *          break;
                         *  }
                         * }
                         *
                         * foreach (Event ev in eventsGetResponse.events)
                         * {
                         *  switch (ev.type)
                         *  {
                         *      case EventType.WallMessages:
                         *          if (showWallMessages) nfnText += String.Format("{0} (+{1})<br>", Resources.Program_OnTimerTick_NfnFrnds, ev.number);
                         *          break;
                         *  }
                         * }
                         */

                        #endregion
                        DebugHelper.WriteLogEntry("***15");

                        DebugHelper.WriteLogEntry("Notification text(new event): " + nfnText);
                        if (nfnText != "")
                        {
                            newEvent = true;
                        }

                        //Чтобы попапилась и будила
                        _notification.StraightToTray = false;
                        _notification.DisplayOn      = true;
                    }
                    else
                    {
                        #region Если не пришло новое событие - модификация текста
                        // меняем текст в нотификаторе
                        DebugHelper.WriteLogEntry("No new events, just change text (dec counters)");
                        if (_notification != null)
                        {
                            nfnText = "";

                            #region текст
                            foreach (Event ev in eventsGetResponse.events)
                            {
                                switch (ev.type)
                                {
                                case EventType.Messages:
                                    if (showMessage)
                                    {
                                        nfnText += String.Format("{0} (+{1})<br>", Resources.Program_OnTimerTick_NfnMess, ev.number);
                                    }
                                    break;
                                }
                            }
                            foreach (Event ev in eventsGetResponse.events)
                            {
                                switch (ev.type)
                                {
                                case EventType.Comments:
                                    if (showComments)
                                    {
                                        nfnText += String.Format("{0} (+{1})<br>", Resources.Program_OnTimerTick_NfnCmnts, ev.number);
                                    }
                                    break;
                                }
                            }
                            foreach (Event ev in eventsGetResponse.events)
                            {
                                switch (ev.type)
                                {
                                case EventType.Friends:
                                    if (showFriends)
                                    {
                                        nfnText += String.Format("{0} (+{1})<br>", Resources.Program_OnTimerTick_NfnFrnds, ev.number);
                                    }
                                    break;
                                }
                            }

                            foreach (Event ev in eventsGetResponse.events)
                            {
                                switch (ev.type)
                                {
                                case EventType.FriendsNews:
                                    if (showFriendsNews)
                                    {
                                        nfnText += String.Format("{0} (+{1})<br>", Resources.Program_OnTimerTick_NfnFrndsNs, ev.number);
                                    }
                                    break;
                                }
                            }

                            /*
                             * foreach (Event ev in eventsGetResponse.events)
                             * {
                             *  switch (ev.type)
                             *  {
                             *      case EventType.FriendsPhotos:
                             *          if (showFriendsPhotos) nfnText += String.Format("{0} (+{1})<br>", Resources.Program_OnTimerTick_NfnFrnds, ev.number);
                             *          break;
                             *  }
                             * }
                             *
                             * foreach (Event ev in eventsGetResponse.events)
                             * {
                             *  switch (ev.type)
                             *  {
                             *      case EventType.WallMessages:
                             *          if (showWallMessages) nfnText += String.Format("{0} (+{1})<br>", Resources.Program_OnTimerTick_NfnFrnds, ev.number);
                             *          break;
                             *  }
                             * }
                             */
                            #endregion
                            DebugHelper.WriteLogEntry("***16");

                            DebugHelper.WriteLogEntry("Notification text(mod): " + nfnText);

                            //Чтобы не попапилась и не будила
                            _notification.StraightToTray = true;
                            _notification.DisplayOn      = false;
                            //Если текст нотификации изменился на "ничто" - скрыть ее
                            if (nfnText == "")
                            {
                                _notification.Visible = false;
                            }
                            else
                            {
                                _notification.Text = nfnText;
                            }
                        }
                        #endregion
                    }
                    #endregion

                    //if (nfnText != "")
                    //nfnText += string.Format("<br>{0}", GetBirthdayString());

                    DebugHelper.WriteLogEntry("***17");
                }


                DebugHelper.WriteLogEntry("***21");

                #region Вывод нотификации если есть новые события
                //Вывод нотификации если есть новые события
                try
                {
                    if (newEvent)
                    {
                        DebugHelper.WriteLogEntry("***22");

                        //SetEvent для приложения, сигнализирующий о том, что есть новые события
                        _baseLogic.IDataLogic.SetRefreshEventsFlag("1");

                        OnNotificationShow(nfnText, curIcon, oldEvent);
                    }
                }
                catch (Exception ex)
                {
                    DebugHelper.WriteLogEntry(ex, Resources.Program_OnTimerTick_NfnError);
                }
                #endregion
                DebugHelper.WriteLogEntry("***23");

                if (eventsGetResponse != null)
                {
                    _eventsGetResponsePrev = eventsGetResponse;
                }
            }
            catch (Exception ex)
            {
                DebugHelper.WriteLogEntry(ex, Resources.Program_OnTimerTick_Error);
            }
        }
Пример #6
0
        static void Main(string[] args)
        {
            InitNotification();

            //Определение нотификаций и событий
            _notification                    = new NotificationWithSoftKeys();
            _notification.LeftSoftKey        = new NotificationSoftKey(SoftKeyType.Hide, Properties.Resources.Program_LeftSoftKey);
            _notification.RightSoftKey       = new NotificationSoftKey(SoftKeyType.Dismiss, Properties.Resources.Program_RightSoftKey);
            _notification.RightSoftKeyClick += OnNotificationRightSoftKeyClick;

            //Запуск сервиса и регистрация сообщения для него
            ServiceApplication.Name = Interprocess.ServiceName;
            ServiceApplication.RegisterMessage(Interprocess.WM_QUIT_SERVICE);
            ServiceApplication.RegisterMessage(Interprocess.WM_TIMER_TICK);
            ServiceApplication.OnRegisteredMessage += ServiceApplication_OnRegisteredMessage;

            Cache.InitPath(SystemConfiguration.AppInstallPath + "\\Cache");
            _baseLogic = new BaseLogic(new DataLogic(), new CommunicationLogic());
            //_baseLogic.IDataLogic.ClearNotificationTempDataInCache();
            _eventsGetResponsePrev = new EventsGetResponse();

            //автовход
            if (_baseLogic.IDataLogic.GetToken() != "")
            {
                try
                {
                    _baseLogic.AutoLogin();
                    _eventsGetResponsePrev = _baseLogic.EventsGet(true, false, true);

                    DebugHelper.WriteLogEntry("Notificator AutoLogin success.");

                    /*_eventsGetResponsePrev.CommentsCount = 0;
                    *  _eventsGetResponsePrev.FriendsCount = 0;
                    *  _eventsGetResponsePrev.MessagesCount = 0;*/
                }
                catch (VKException ex)
                {
                    CatchErrors(ex);
                }
                catch (Exception ex)
                {
                    DebugHelper.WriteLogEntry(ex, "Unexpected error.");
                }
            }
            else
            {
                DebugHelper.WriteLogEntry("Notificator service can't be started, there are no token in registry.");
                Application.Exit();
            }

            //Устанавливаем время последней проверки
            _lastCheckedTime = DateTime.Now;

            //Считываем из реестра значение периода проверки
            _checkInterval = GetCheckInterval();

            //Задаем время, когда необходимо будет разбудить устройство
            try
            {
                WakeupScheduler.ScheduleWakeUp(_lastCheckedTime.AddMilliseconds(_checkInterval));
            }
            catch (ExternalException exception)
            {
                DebugHelper.WriteLogEntry(exception, exception.Message);
                throw;
            }
            catch (Exception exception)
            {
                DebugHelper.WriteLogEntry(exception, "Error in scheduling wakeup program launch");
                throw;
            }

            ServiceApplication.Run();
        }