private static void ClearOldReminders()
        {
            var reminders = ScheduledActionService.GetActions <Reminder>().ToArray();

            //delete reminders
            if (reminders.Length > 0)
            {
                foreach (var reminder in reminders)
                {
                    if (ScheduledActionService.Find(reminder.Name) != null)
                    {
                        ScheduledActionService.Remove(reminder.Name);
                    }

                    var friend = BirthdayUtility.GetFriendDetailsById(Convert.ToInt32(reminder.Name));

                    if (friend == null)
                    {
                        continue;
                    }

                    friend.IsReminderCreated = false;
                    BirthdayUtility.UpdateFriendDetails(friend);

                    //AppLog.writeToLog(DateTime.Now, reminder.Name + friend.UniqueId + friend.IsReminderCreated.ToString(), LogLevel.Error);
                }
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Loads necessary data and perfor initialisation checks
        /// </summary>
        private void InitialiseApp()
        {
            try
            {
                SetLicenseInfo();
                var isDbUpgraded = AppUtility.UpdateSchema();

                if (!isDbUpgraded)
                {
                    AppUtility.MigrateXmlDataToDatabase();
                    ReminderUtility.ClearAllRemindersOnUpgrade();
                    BirthdayUtility.SaveLocalCards();
                }

                UpdateLocalizedRes();

                CheckFriendBirthdayFile();
            }
            catch (Exception ex)
            {
                MessageBox.Show(AppResources.ErrAppInitialise, AppResources.ErrInitialiseTitle, MessageBoxButton.OK);
                AppLog.WriteToLog(DateTime.Now, "Error during initialisation. Error : " + ex.Message + ". Stack : " + ex.StackTrace, LogLevel.Error);
                NavigationService.Navigate(new Uri("/MainPage.xaml", UriKind.Relative));
            }
        }
        private async void UploadImageToServer(String userId, String fileName, FileStream imageStream)
        {
            try
            {
                var service = new AzureStorageService(Services.AzureConnectionString, userId);
                var status  = await service.SaveFileToBlob(fileName, imageStream);

                if (status.IsSuccess)
                {
                    var url     = Services.CardBaseUrl + userId + "/" + fileName;
                    var newCard = new CardEntity {
                        Url = url
                    };
                    BirthdayUtility.AddBirthdayCard(newCard);

                    var birthdays = DataContext as Birthdays;

                    if (birthdays != null)
                    {
                        birthdays.BirthdayCards.Add(newCard);
                    }
                }
                else
                {
                    MessageBox.Show(status.ErrorMessage, AppResources.ErrAddCard, MessageBoxButton.OK);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, AppResources.ErrAddCard, MessageBoxButton.OK);
            }
        }
        private async Task SaveFriends()
        {
            try
            {
                var friendListTask = await DownloadFriends(App.AccessToken);

                friendListTask   = App.IsTrial ? friendListTask.Take(100).ToList() : friendListTask;
                _savedFriendList = BirthdayUtility.GetFriendList();

                if (!App.UserPreferences.ContactSync.FacebookSyncEnabled.HasValue || App.UserPreferences.ContactSync.FacebookSyncEnabled.Value)
                {
                    //display status message
                    StatusText.Text = AppResources.RetrievingFbFriend;
                    foreach (var user in friendListTask)
                    {
                        //check if the friend exists already
                        if (_savedFriendList != null && _savedFriendList.Count > 0 &&
                            _savedFriendList.Exists(f => !String.IsNullOrEmpty(f.FacebookId) &&
                                                    f.FacebookId.Equals(user.FacebookId, StringComparison.InvariantCultureIgnoreCase)))
                        {
                            UpdateExistingFriendToList(user, _savedFriendList.Find(x => !String.IsNullOrEmpty(x.FacebookId) &&
                                                                                   x.FacebookId.Equals(user.FacebookId, StringComparison.InvariantCultureIgnoreCase)));
                        }
                        else
                        {
                            BirthdayUtility.AddNewFriend(user);
                        }
                    }
                }

                //Save friend list to file
                StatusText.Text = AppResources.SaveBdays;

                //update the reminder list
                StatusText.Text = AppResources.CreateBdayReminder;
                ReminderUtility.UpdateCalendarEntries();
                //BirthdayUtility.downloadProfileImages(isSync);

                //update last sync time in settings and app user preferences
                App.UserPreferences.ContactSync.LastSync = DateTime.Now;
                if (App.UserPreferences != null)
                {
                    SettingsUtility.UpdateUserSettings(App.UserPreferences);
                }

                await BirthdayUtility.SyncCards(App.UserPreferences.UserDetails.FacebookId);

                //update card sync status
                App.UserPreferences.ContactSync.CardsSynced = true;
                if (App.UserPreferences != null)
                {
                    SettingsUtility.UpdateUserSettings(App.UserPreferences);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, AppResources.ErrBuildBdayList, MessageBoxButton.OK);
                NavigationService.Navigate(new Uri("/MainPage.xaml", UriKind.Relative));
            }
        }
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            try
            {
                if (NavigationContext.QueryString.TryGetValue(UriParameter.FriendId, out Parameter))
                {
                    Action       = ActionType.Details;
                    FriendEntity = BirthdayUtility.GetFriendDetailsById(Convert.ToInt32(Parameter));
                    DataContext  = FriendEntity;
                    var birthday = DateTime.Now;

                    BirthdayText.Text = FriendEntity.Birthday.HasValue
                        ? AppResources.BirthdayOnLabel + " : " + FriendEntity.Birthday.Value.ToString("dd MMM")
                        : AppResources.BirthdayOnLabel + " : " + AppResources.NotKnownLabel;


                    //update the UI based on the action
                    UpdateUIForAction(Action);

                    AutoEmailToggle.IsChecked = FriendEntity.SendAutoEmailOnBirthday;
                    AutoEmailToggle.Content   = (FriendEntity.SendAutoEmailOnBirthday) ? "Yes" : "No";

                    //format datetime to current culture
                    BirthdayPicker.Value = new DateTime(birthday.Year, birthday.Month, birthday.Day, CultureInfo.CurrentCulture.Calendar);

                    //add buttons to app bar
                    AddAppBarButtons(FriendEntity);
                }
                else
                {
                    Action = ActionType.Add;
                    ActivateSaveButton();
                }

                //remove backstack
                while (NavigationService.BackStack.Any() && !NavigationService.BackStack.ElementAt(0).Source.ToString().Contains("/MainPage.xaml"))
                {
                    NavigationService.RemoveBackEntry();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error On Navigation", MessageBoxButton.OK);
            }
        }
        private int AddNewFriend()
        {
            //gather friend details
            var friendDetails = new FriendEntity
            {
                Name     = NameTextBox.Text,
                Birthday =
                    (BirthdayPicker.Value.HasValue)
                        ? BirthdayPicker.Value.Value
                        : new DateTime?(),
                Email                   = EmailTextBox.Text,
                PhoneNumber             = ContactTextBox.Text,
                SendAutoEmailOnBirthday = AutoEmailToggle.IsChecked != null && AutoEmailToggle.IsChecked.Value,
                ProfilePictureUrl       = Constants.DefaultProfilePic,
                TypeOfContact           = ContactType.Custom
            };

            //write updated details to db
            return(BirthdayUtility.AddNewFriend(friendDetails));
        }
        private void DeleteClick(object sender, RoutedEventArgs e)
        {
            try
            {
                if (App.IsTrial)
                {
                    //messagebox to prompt to buy
                    var buyAppForDeleteMessageBox = new CustomMessageBox
                    {
                        Height             = 300,
                        Caption            = AppResources.BuyFullVersion,
                        Message            = AppResources.BuyAppForDelete,
                        LeftButtonContent  = AppResources.BuyLabel,
                        RightButtonContent = AppResources.LaterLabel,
                        VerticalAlignment  = VerticalAlignment.Center
                    };

                    buyAppForDeleteMessageBox.Dismissed += BuyAppForDeleteMessageBoxDismissed;
                    buyAppForDeleteMessageBox.Show();

                    return;
                }

                var menuItem = sender as MenuItem;

                if (menuItem != null)
                {
                    var birthday = menuItem.DataContext as FriendBirthday;
                    if (birthday != null)
                    {
                        BirthdayUtility.DeleteFriend(birthday.Id);
                    }
                }

                BindDataContext();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, AppResources.ErrDeleting, MessageBoxButton.OK);
            }
        }
        private int UpdateFriend()
        {
            //gather friend details
            var friendDetails = DataContext as FriendEntity;

            if (friendDetails == null)
            {
                return(0);
            }

            friendDetails.Email                   = EmailTextBox.Text;
            friendDetails.PhoneNumber             = ContactTextBox.Text;
            friendDetails.SendAutoEmailOnBirthday = AutoEmailToggle.IsChecked != null && AutoEmailToggle.IsChecked.Value;
            friendDetails.Name     = NameTextBox.Text;
            friendDetails.Birthday = (BirthdayPicker.Value.HasValue) ? BirthdayPicker.Value.Value : new DateTime?();

            //write updated details to file
            BirthdayUtility.UpdateFriendDetails(friendDetails);

            return(friendDetails.UniqueId);
        }
        private void BindDataContext()
        {
            var birthdays = BirthdayUtility.GetBirthdays();

            LocalizeBirthdayText(birthdays);

            birthdays.AlphaGroupAllBirthdays = AlphaKeyGroup <FriendBirthday> .CreateGroups
                                               (
                birthdays.AllBirthdays,
                Thread.CurrentThread.CurrentUICulture,
                f => f.Name, true
                                               );

            BirthdayCardList.SelectedItems.Clear();
            birthdays.BirthdayCards = new ObservableCollection <CardEntity>();
            DataContext             = birthdays;

            foreach (var card in BirthdayUtility.GetBirthdayCards())
            {
                birthdays.BirthdayCards.Add(card);
            }
        }
        private static async Task <List <FriendEntity> > DownloadFriends(String accessToken)
        {
            var     facebookFriendList = new List <FriendEntity>();
            var     client             = new Facebook.FacebookClient(accessToken);
            dynamic result             = await client.GetTaskAsync("fql", new
            {
                q = "SELECT uid,name,pic_big,birthday_date FROM user WHERE uid in (SELECT uid2 FROM friend where uid1 = me());"
            });

            //JArray resultsList = JObject.Parse(result.ToString())["data"];
            var resultsList = result["data"];

            for (var i = 0; i < resultsList.Count; i++)
            {
                try
                {
                    var friendObject = resultsList[i];

                    var friend = new FriendEntity
                    {
                        FacebookId        = friendObject.uid.ToString(),
                        Name              = friendObject.name,
                        ProfilePictureUrl = friendObject.pic_big,
                        Birthday          =
                            (friendObject.birthday_date == null)
                                ? String.Empty
                                : BirthdayUtility.FormatFBUserBirthday(friendObject.birthday_date.ToString())
                    };

                    facebookFriendList.Add(friend);
                }
                catch (Exception ex)
                {
                    AppLog.WriteToLog(DateTime.Now, "Error getting friend data from object" + ex.Message + ex.StackTrace + ex.InnerException + ex.Data, LogLevel.Error);
                }
            }

            return(facebookFriendList);
        }
        /// <summary>
        /// Delete old calendar entries and add new ones
        /// </summary>
        public static void UpdateCalendarEntries()
        {
            try
            {
                ClearOldReminders();

                //add a dummy reminder to test in debug mode
//#if DEBUG

//                if (ScheduledActionService.Find("DummyReminder") != null)
//                {
//                    ScheduledActionService.Remove("DummyReminder");
//                }
//                Reminder dummyReminder = new Reminder("DummyReminder");
//                dummyReminder.BeginTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour, DateTime.Now.Minute + 1, 0);
//                dummyReminder.Title = AppResources.BirthdayLabel;
//                dummyReminder.Content = "Shahzad " + AppResources.BirthdayReminderMessage;
//                ScheduledActionService.Add(dummyReminder);

//#endif



                //create new reminders
                var allBirthdays = BirthdayUtility.GetBirthdays().AllBirthdays;

                if (allBirthdays == null || !allBirthdays.Any())
                {
                    return;
                }

                var orderedBirthdayList = allBirthdays.Where(b => b.DaysAhead.HasValue && b.DaysAhead > 0)
                                          .OrderBy(b => b.DaysAhead)
                                          .ToList();

                foreach (var birthday in orderedBirthdayList)
                {
                    //check to see if the reminder aleady exists and the birthday has a value
                    if (ScheduledActionService.Find(birthday.Id.ToString()) != null || !birthday.Birthday.HasValue)
                    {
                        continue;
                    }

                    //add a reminder
                    var birthdayValue = birthday.Birthday.Value;
                    var reminder      = new Reminder(birthday.Id.ToString())
                    {
                        BeginTime     = GetBeginTime(birthdayValue),
                        Content       = birthday.Name + " " + AppResources.BirthdayReminderMessage,
                        NavigationUri = new Uri("/FriendDetails.xaml?" + UriParameter.FriendId + "=" + birthday.Id, UriKind.Relative),
                        Title         = AppResources.BirthdayLabel
                    };

                    ScheduledActionService.Add(reminder);

                    //update friend details to reflect reminder created
                    var friend = BirthdayUtility.GetFriendDetailsById(birthday.Id);

                    if (friend == null)
                    {
                        continue;
                    }

                    friend.IsReminderCreated = true;
                    BirthdayUtility.UpdateFriendDetails(friend);
                }
            }
            catch (InvalidOperationException ex)
            {
                if (!ex.Message.Contains("The maximum number of ScheduledActions of this type have already been added"))
                {
                    throw;
                }
            }
        }
        private void DeleteAppBarClick(object sender, EventArgs e)
        {
            try
            {
                if (App.IsTrial)
                {
                    //messagebox to prompt to buy
                    var buyAppForDeleteMessageBox = new CustomMessageBox
                    {
                        Height             = 300,
                        Caption            = AppResources.BuyFullVersion,
                        Message            = AppResources.BuyAppForDelete,
                        LeftButtonContent  = AppResources.BuyLabel,
                        RightButtonContent = AppResources.LaterLabel,
                        VerticalAlignment  = VerticalAlignment.Center
                    };

                    buyAppForDeleteMessageBox.Dismissed += BuyAppForDeleteMessageBoxDismissed;
                    buyAppForDeleteMessageBox.Show();

                    return;
                }
                //display warning for confirmation
                var result = MessageBox.Show(AppResources.DeleteConfirmMessage, AppResources.DeleteLabel, MessageBoxButton.OKCancel);

                if (!result.Equals(MessageBoxResult.OK))
                {
                    return;
                }

                //check which list is active
                if (MainPagePanorama.SelectedItem.Equals(MostRecentPanorama))
                {
                    if (RecentBirthdayList != null && RecentBirthdayList.SelectedItems != null && RecentBirthdayList.SelectedItems.Count > 0)
                    {
                        foreach (FriendBirthday friend in RecentBirthdayList.SelectedItems)
                        {
                            BirthdayUtility.DeleteFriend(friend.Id);
                        }
                    }
                    else
                    {
                        MessageBox.Show(AppResources.WarnSelectItem, AppResources.WarnTryAgain, MessageBoxButton.OK);
                    }

                    BindDataContext();
                }
                else if (MainPagePanorama.SelectedItem.Equals(AllItemPanorama))
                {
                    if (AllBirthdayList != null && AllBirthdayList.SelectedItems != null && AllBirthdayList.SelectedItems.Count > 0)
                    {
                        foreach (FriendBirthday friend in AllBirthdayList.SelectedItems)
                        {
                            BirthdayUtility.DeleteFriend(friend.Id);
                        }
                    }
                    else
                    {
                        MessageBox.Show(AppResources.WarnSelectItem, AppResources.WarnTryAgain, MessageBoxButton.OK);
                    }

                    BindDataContext();
                }
                else if (MainPagePanorama.SelectedItem.Equals(BirthdayCardPanorama))
                {
                    //if image upload/delete is complete
                    if (NetworkInterface.GetIsNetworkAvailable())
                    {
                        if (BirthdayCardList != null && BirthdayCardList.SelectedItems != null && BirthdayCardList.SelectedItems.Count > 0)
                        {
                            var service      = new AzureStorageService(Services.AzureConnectionString, App.UserPreferences.UserDetails.FacebookId);
                            var items        = BirthdayCardList.SelectedItems;
                            var deletedCards = new List <int>();

                            if (items != null)
                            {
                                foreach (var cardEntity in items.Cast <CardEntity>())
                                {
                                    service.DeleteBlob(Path.GetFileName(cardEntity.Url));
                                    deletedCards.Add(cardEntity.Id);
                                }
                            }

                            var birthdays = DataContext as Birthdays;

                            if (birthdays == null)
                            {
                                return;
                            }

                            var birthdayCards = birthdays.BirthdayCards;

                            foreach (var cardId in deletedCards)
                            {
                                birthdayCards.Remove(birthdayCards.Single(c => c.Id == cardId));
                            }

                            //remove entry fromm database
                            BirthdayUtility.DeleteCards(deletedCards);
                        }
                        else
                        {
                            MessageBox.Show(AppResources.WarnSelectItem, AppResources.WarnTryAgain, MessageBoxButton.OK);
                        }
                    }
                    else
                    {
                        MessageBox.Show(AppResources.WarnInternetMsg, AppResources.WarnNwTitle, MessageBoxButton.OK);
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, AppResources.ErrDeleting, MessageBoxButton.OK);
            }
        }
        /// <summary>
        /// Retrieves list of recent birthdays
        /// </summary>
        /// <returns>List of friend</returns>
        private void GetRecentBirthdays()
        {
            try
            {
                var friendList      = BirthdayUtility.GetFriendList();
                var recentBirthdays = new List <FriendEntity>();
                var todayBirthday   = new List <FriendEntity>();
                var weekBirthday    = new List <FriendEntity>();
                Settings = SettingsUtility.GetUserPreferences();
                LoadLocalizedRes();
                var notificationCount = 0;
                var isReminderExpired = false;
                foreach (var friend in friendList)
                {
                    if (!friend.Birthday.HasValue || (friend.IsHidden.HasValue && friend.IsHidden.Value))
                    {
                        continue;
                    }

                    var daysAhead = DateTimeUtility.GetTimeToEvent(friend.Birthday.Value);

                    //if the birthday is today, add recent birthdays to list
                    if (daysAhead == 0)
                    {
                        //if the birthday is today, raise a toast notification
                        recentBirthdays.Add(friend);
                        todayBirthday.Add(friend);
                        notificationCount++;

                        if (friend.LastToastRaisedYear < DateTime.Now.Year)
                        {
                            if (!Settings.ReminderNotification.LocalNotifications.HasValue || Settings.ReminderNotification.LocalNotifications.Value)
                            {
                                RaiseToast(friend.Name + " " + Resources.BdayTodayMsg, Resources.BdayTileLabel, new Uri("/FriendDetails.xaml?" + UriParameter.FriendId + "=" + friend.UniqueId, UriKind.Relative));
                            }

                            //update the last notification raised year
                            friend.LastToastRaisedYear = DateTime.Now.Year;
                            BirthdayUtility.UpdateFriendDetails(friend);
                        }
                    }

                    //if birthday is tomorrow
                    if (daysAhead == 1)
                    {
                        recentBirthdays.Add(friend);
                        notificationCount++;
                    }

                    //check if reminder for upcoming birthdays exist
                    if (daysAhead > 0 && daysAhead < 7)
                    {
                        if (!friend.IsReminderCreated)
                        {
                            isReminderExpired = true;
                            notificationCount++;
                        }
                        weekBirthday.Add(friend);
                    }
                }

                //raise a toast notification if reminders have to be created
                if (isReminderExpired)
                {
                    RaiseToast(Resources.UpdateBdayReminder, Resources.BdayTileLabel, new Uri("/StartChecks.xaml?" + UriParameter.Action + "=Toast", UriKind.Relative));
                }

                //update shell tile
                UpdateTile(notificationCount, weekBirthday);

                BirthdayUtility.DownloadProfileImages("No");

                //send an email - [[to be implemented later]]
                //if (settings.ReminderNotification.SendEmailReminders && !string.IsNullOrEmpty(settings.UserDetails.Email))
                //{
                //    String emailText = getReminderEmailContent(todayBirthday);
                //    sendEmail(settings.UserDetails.Email,emailText);
                //}

                ////wish via email
                //if (todayBirthday!=null && todayBirthday.Count>0)
                //{
                //    wishViaEmail(todayBirthday);
                //}
            }
            catch (Exception ex)
            {
                AppLog.WriteToLog(DateTime.Now, ex.Message + ". " + ex.StackTrace, LogLevel.Error);
                throw;
            }
        }
 public SelectCard()
 {
     InitializeComponent();
     DataContext = BirthdayUtility.GetBirthdayCards();
 }
        private void SaveButtonClick(object sender, EventArgs e)
        {
            try
            {
                if (App.IsTrial)
                {
                    //messagebox to prompt to buy
                    var buyAppForSaveFriendMessageBox = new CustomMessageBox
                    {
                        Height             = 300,
                        Caption            = AppResources.BuyFullVersion,
                        Message            = AppResources.BuyAppForAddFriend,
                        LeftButtonContent  = AppResources.BuyLabel,
                        RightButtonContent = AppResources.LaterLabel,
                        VerticalAlignment  = VerticalAlignment.Center
                    };

                    buyAppForSaveFriendMessageBox.Dismissed += BuyAppForSaveFriendBoxDismissed;
                    buyAppForSaveFriendMessageBox.Show();

                    return;
                }
                if (String.IsNullOrEmpty(NameTextBox.Text) || !BirthdayPicker.Value.HasValue)
                {
                    MessageBox.Show(AppResources.WarnNameBdayCompulsory, AppResources.WarnDtlsReq, MessageBoxButton.OK);
                    return;
                }

                //display status message
                StatusText.Text           = AppResources.SavingFrndDtls;
                ContentStackPanel.Opacity = 0.2;
                StatusPanel.Visibility    = Visibility.Visible;
                int friendGuid;

                if (Action.Equals(ActionType.Add))
                {
                    friendGuid = AddNewFriend();
                    MessageBox.Show(AppResources.NewFrndCreatedMsg, AppResources.NewFrndAddedTitle, MessageBoxButton.OK);
                }
                else
                {
                    friendGuid = UpdateFriend();
                    MessageBox.Show(AppResources.FrndDtlsUpdated, AppResources.FrndDtlsUpdatedTitle, MessageBoxButton.OK);
                }

                //change the app bar buttons
                FriendEntity = BirthdayUtility.GetFriendDetailsById(friendGuid);
                AddAppBarButtons(FriendEntity);

                //remove focus from textbox
                RemoveFocus();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, AppResources.ErrSavingFrndDtls, MessageBoxButton.OK);
            }
            finally
            {
                //hide status screen
                StatusPanel.Visibility    = Visibility.Collapsed;
                ContentStackPanel.Opacity = 1;
            }
        }