Пример #1
0
        private async void CheckCredentials(object sender, RoutedEventArgs e)
        {
            if (UAC.GetInstance().UserId == -1)
            {
                //Frame.Navigate(typeof(Login));
                //return;
                UAC.GetInstance().Authorize("admin", "p@ssw0rd");
            }
            if (firstLoad)
            {
                ApplicationDataContainer localSettings = ApplicationData.Current.LocalSettings;
                if (!(localSettings.Values["picturesFolder"] is string))
                {
                    await new Windows.UI.Popups.MessageDialog("Please select folder where posters will be stored").ShowAsync();
                    FolderPicker folderPicker = new FolderPicker();
                    folderPicker.FileTypeFilter.Add("*");
                    StorageFolder folder = await folderPicker.PickSingleFolderAsync();

                    if (folder == null)
                    {
                        return;
                    }
                    string folderToken = StorageApplicationPermissions.FutureAccessList.Add(folder);
                    localSettings.Values["picturesFolder"] = folderToken;
                }
                firstLoad              = false;
                sortCB.SelectedIndex   = SortOption.SortOptions.FindIndex(j => j.SortProperty == SortProperties.ViewDate);
                filterCB.SelectedIndex = FilterOption.FilterOptions.FindIndex(j => j.Filter == Filters.GetAll);
            }
        }
Пример #2
0
        private async void SaveBtn_Click(object sender, RoutedEventArgs e)
        {
            if (InfoFlyout.IsOpen)
            {
                InfoFlyout.Hide();
            }
            if (Movies.Any(x => x.HasErrors))
            {
                InfoText.Text = "Пожалуйста, сначала исправьте ошибки в таблице";
                InfoFlyout.ShowAt(dgv);
                return;
            }
            SaveBtn.IsEnabled = false;
            MoviesController controller = MoviesController.GetInstance();
            int result = await controller.SaveMovies(Movies.Select(x => x.Movie).ToList());

            int userId   = UAC.GetInstance().UserId;
            int viewings = await controller.SaveViewings(Movies.Select(
                                                             x => new ViewingData(x.Movie.ID, userId, DateTime.Parse(x.Date), x.Rate)).ToList());

            InfoText.Text = string.Format("Сохранено {0}/{1} фильмов{2}Добавлено {3}/{1} просмотров",
                                          result, Movies.Count, Environment.NewLine, viewings);
            InfoFlyout.ShowAt(dgv);
            Movies          = new List <MovieDisplay>();
            dgv.ItemsSource = Movies;
        }
Пример #3
0
 public bool ChangeUserPwd(string oldPwd, string newPwd)
 {
     using (var db = new Context())
     {
         int uid  = UAC.GetInstance().UserId;
         var user = db.Users
                    .DefaultIfEmpty(null)
                    .FirstOrDefault(x => x.ID == uid);
         if (!user.Pwd.Equals(oldPwd))
         {
             return(false);
         }
         user.Pwd = newPwd;
         db.Users.Update(user);
         db.SaveChanges();
         return(true);
     }
 }
Пример #4
0
        private async void ActionButton_Tapped(object sender, TappedRoutedEventArgs e)
        {
            ActionButton.IsEnabled = false;
            DateTime      date   = DateTime.Now.Date;
            ContentDialog dialog = new ContentDialog()
            {
                Title             = "Подтвердите действие",
                Content           = string.Format("Добавить просмотр за {0} с оценкой {1}?", date.ToShortDateString(), Rate.Text),
                PrimaryButtonText = "Да",
                CloseButtonText   = "Нет"
            };
            var result = await dialog.ShowAsync();

            if (result == ContentDialogResult.Primary)
            {
                ViewingData viewing = new ViewingData(id, UAC.GetInstance().UserId, date, float.Parse(Rate.Text));
                int         z       = await MoviesController.GetInstance().SaveViewings(new List <ViewingData>()
                {
                    viewing
                });

                if (z > 0)
                {
                    InfoText.Text = "Просмотр добавлен";
                    List <ViewingData> viewings = MoviesController.GetInstance().GetViewings(id, UAC.GetInstance().UserId);
                    tViewings.Text = string.Join(
                        ", ", viewings.Select(x => string.Format("{0} ({1:F1})", x.Date.ToShortDateString(), x.Rating)));
                }
                else
                {
                    InfoText.Text = "Что-то пошло не так";
                }
                InfoFlyout.ShowAt(Rate);
                Rate.Text = "";
            }
            else
            {
                ActionButton.IsEnabled = true;
            }
        }
Пример #5
0
 private async void Button_Click(object sender, RoutedEventArgs e)
 {
     Context.IsLocalDB = dbTypeCB.IsChecked ?? true;
     using (var db = new Context())
         if (db.Users.Count() < 1)
         {
             db.Users.Add(new User()
             {
                 ID = 1, Name = "admin", Pwd = "p@ssw0rd", Role = Roles.ROLE_ADMIN
             });
             db.SaveChanges();
         }
     if (UAC.GetInstance().Authorize(loginTB.Text, passTB.Password))
     {
         Frame.Navigate(typeof(MainPage));
     }
     else
     {
         await new Windows.UI.Popups.MessageDialog(
             "Неверные данные учётной записи", "Вход не выполнен").ShowAsync();
     }
 }
Пример #6
0
        public UserStatistics(Context context)
        {
            int uid = UAC.GetInstance().UserId;

            ViewingsCount = context.Viewings
                            .Count(x => x.UserID == uid);
            MoviesCount = context.Viewings
                          .Where(x => x.UserID == uid)
                          .GroupBy(x => x.MovieID)
                          .Select(x => x.First())
                          .Count();
            TotalRuntime = TimeSpan.FromMinutes(context.Viewings
                                                .Where(z => z.UserID == uid)
                                                .Select(x => x.Movie)
                                                .Sum(y => y.Runtime));
            GenrePercentage = context.Viewings
                              .Where(z => z.UserID == uid && z.Movie.Genres.Count > 0)
                              .Select(x => x.Movie.Genres.First())
                              .GroupBy(y => y.GenreId, y => y.Genre.Name)
                              .Select(w => new Tuple <string, float>(w.First(), w.Count()))
                              .OrderByDescending(x => x.Item2)
                              .Take(3)
                              .ToList();
        }
Пример #7
0
        public PagedResult <MovieData> GetMovies(object param, int page, int count,
                                                 Filters filter, SortProperties sort)
        {
            using (var db = new Context())
            {
                IQueryable <Movie> query = db.Movies;
                int uid = UAC.GetInstance().UserId;
                switch (sort)
                {
                case SortProperties.RatingUser:
                    query = db.Viewings
                            .Where(z => z.UserID == uid)
                            .OrderByDescending(x => x.Rating)
                            .Select(y => y.Movie);
                    break;

                case SortProperties.ViewDate:
                    query = db.Viewings
                            .Where(z => z.UserID == uid)
                            .OrderByDescending(x => x.Date)
                            .Select(y => y.Movie);
                    break;
                }
                switch (filter)
                {
                case Filters.GetByActor:
                    if (param is PersonData)
                    {
                        query = query.Where(x =>
                                            x.Actors.Exists(y => y.ActorId == (param as PersonData).ID));
                    }
                    else
                    {
                        return(new PagedResult <MovieData>());
                    }
                    break;

                case Filters.GetByCountry:
                    if (param is CountryData)
                    {
                        query = query.Where(x =>
                                            x.Countries.Exists(y => y.CountryId == (param as CountryData).ID));
                    }
                    else
                    {
                        return(new PagedResult <MovieData>());
                    }
                    break;

                case Filters.GetByDirector:
                    if (param is PersonData)
                    {
                        query = query.Where(x =>
                                            x.Directors.Exists(y => y.DirectorId == (param as PersonData).ID));
                    }
                    else
                    {
                        return(new PagedResult <MovieData>());
                    }
                    break;

                case Filters.GetByScreenwriter:
                    if (param is PersonData)
                    {
                        query = query.Where(x =>
                                            x.Screenwriters.Exists(y => y.ScreenwriterId == (param as PersonData).ID));
                    }
                    else
                    {
                        return(new PagedResult <MovieData>());
                    }
                    break;

                case Filters.GetByGenre:
                    if (param is GenreData)
                    {
                        query = query.Where(x =>
                                            x.Genres.Exists(y => y.GenreId == (param as GenreData).ID));
                    }
                    else
                    {
                        return(new PagedResult <MovieData>());
                    }
                    break;

                case Filters.GetByStoryline:
                    if (param is string)
                    {
                        query = query.Where(x =>
                                            x.Storyline.Contains(param as string, StringComparison.OrdinalIgnoreCase));
                    }
                    else
                    {
                        return(new PagedResult <MovieData>());
                    }
                    break;

                case Filters.GetByTitle:
                    if (param is string)
                    {
                        query = query.Where(x =>
                                            x.LocalizedTitle.Contains(param as string, StringComparison.OrdinalIgnoreCase) ||
                                            x.OriginalTitle.Contains(param as string, StringComparison.OrdinalIgnoreCase));
                    }
                    else
                    {
                        return(new PagedResult <MovieData>());
                    }
                    break;

                case Filters.GetByYearPeriod:
                    if (param is Tuple <short, short> )
                    {
                        query = query.Where(x =>
                                            x.Year >= (param as Tuple <short, short>).Item1 &&
                                            x.Year <= (param as Tuple <short, short>).Item2);
                    }
                    else
                    {
                        return(new PagedResult <MovieData>());
                    }
                    break;
                }
                switch (sort)
                {
                case SortProperties.OriginalTitle:
                    query = query.OrderBy(x => x.OriginalTitle);
                    break;

                case SortProperties.Year:
                    query = query.OrderBy(x => x.Year);
                    break;

                case SortProperties.RatingIMDB:
                    query = query.OrderByDescending(x => x.RatingIMDB);
                    break;
                }
                PagedResult <Movie> movies = query.GetPaged(page, count);
                return(new PagedResult <MovieData>()
                {
                    CurrentPage = movies.CurrentPage,
                    PageCount = movies.PageCount,
                    PageSize = movies.PageSize,
                    RowCount = movies.RowCount,
                    Results = movies.Results.Select(x => new MovieData()
                    {
                        ID = x.ID,
                        LocalizedTitle = x.LocalizedTitle,
                        OriginalTitle = x.OriginalTitle,
                        Year = x.Year,
                        RatingIMDB = x.RatingIMDB
                    }).ToList()
                });
            }
        }
Пример #8
0
        protected async override void OnNavigatedTo(NavigationEventArgs args)
        {
            if (!(args.Parameter is int))
            {
                return;
            }
            id = (int)args.Parameter;
            MovieData movie = await MoviesController.GetInstance().GetMovie(id);

            bool isNew = movie == null;

            //Название, если есть только в одном варианте, выводится без слэша
            titleText.Text = string.IsNullOrWhiteSpace(movie.LocalizedTitle) || string.IsNullOrWhiteSpace(movie.OriginalTitle) ?
                             movie.OriginalTitle + movie.LocalizedTitle :
                             movie.OriginalTitle + " / " + movie.LocalizedTitle;
            //Все харакетеристики
            tYear.Text         = movie.Year.ToString();
            tCountry.Text      = string.Join(", ", movie.Countries.Select(x => x.Name));
            tDirector.Text     = string.Join(", ", movie.Directors.Select(x => x.Name));
            tScreenwriter.Text = string.Join(", ", movie.Screenwriters.Select(x => x.Name));
            tTagline.Text      = movie.TagLine;
            tGenre.Text        = string.Join(", ", movie.Genres.Select(x => x.Name));
            tRuntime.Text      = TimeSpan.FromMinutes(movie.Runtime).ToString(@"h\:mm");
            tActors.Text       = string.Join(", ", movie.Actors.Select(x => x.Name));
            tPlot.Text         = movie.Storyline.Replace("<br>", Environment.NewLine);
            tRateKP.Text       = movie.RatingKP.ToString("F3");
            tRateIMDB.Text     = movie.RatingIMDB.ToString("F1");
            //Добавим данные о просмотрах, если они были
            if (!isNew)
            {
                List <ViewingData> viewings = MoviesController.GetInstance().GetViewings(movie.ID, UAC.GetInstance().UserId);
                if (viewings.Count > 0)
                {
                    tViewings.Text = string.Join(
                        ", ", viewings.Select(x => string.Format("{0} ({1:F1})", x.Date.ToShortDateString(), x.Rating)));
                }
                else
                {
                    tViewings.Text       = "нет";
                    tViewings.Foreground = new SolidColorBrush(Windows.UI.Colors.Gray);
                }
            }

            ApplicationDataContainer localSettings = ApplicationData.Current.LocalSettings;

            if (localSettings.Values["picturesFolder"] is string folderToken)
            {
                StorageFolder nfolder = await StorageApplicationPermissions.FutureAccessList.GetFolderAsync(folderToken);

                if (await nfolder.TryGetItemAsync(Path.GetFileName(movie.PosterLink)) is StorageFile image)
                {
                    using (var stream = await image.OpenReadAsync())
                    {
                        BitmapImage bitmapImage = new BitmapImage();
                        await bitmapImage.SetSourceAsync(stream);

                        poster.Source = bitmapImage;
                    }
                }
                else
                {
                    poster.Source = new BitmapImage(new Uri(movie.PosterLink));
                }
            }
        }