/// <summary> /// Конструктор. /// </summary> /// <param name="groupsStore">Объект для работы с хранилищем групп.</param> /// <param name="tracksStore">Объект для работы с хранилищем треков.</param> /// <param name="parser">Объект для парсинга сайтов со словами.</param> public PageCreator(IRepository <Group, Guid> groupsStore, IRepository <Track, Guid> tracksStore, LyricsSiteParser parser) { _groupsStore = groupsStore; _tracksStore = tracksStore; _parser = parser; _path = DependencyService.Get <IPath>(); _logManager = DependencyService.Get <ILogManager>(); }
/// <summary> /// Конструктор. /// </summary> /// <param name="parser">Объект для парсинга сайтов со словами песен.</param> /// <param name="tracksStore">Объект для работы с треками.</param> /// <param name="groupsStore">Объект для работы с группами.</param> public RegisterTrackViewModel(LyricsSiteParser parser, IRepository <Track, Guid> tracksStore, IRepository <Group, Guid> groupsStore, IPath path, ILogManager logManager) : base(path, logManager) { lyricsSiteParser = parser; this.tracksStore = tracksStore; this.groupsStore = groupsStore; SaveCommand = new Command(Save); PasteCommand = new Command(async(parameter) => await PasteAsync(parameter)); }
/// <summary> /// Основной конструктор. /// </summary> /// <param name="registerType">Тип регистрации трека.</param> /// <param name="group">Группа, если имеется.</param> /// <param name="track">Трек, если имеется.</param> private RegisterTrackPage(LyricsSiteParser parser, IRepository <Track, Guid> tracksStore, IRepository <Group, Guid> groupsStore, IPath path, ILogManager logManager, TrackRegisterType registerType, Group group = null, Track track = null) { RegisterTrackViewModel GetViewModel(TrackRegisterType type) { switch (type) { case TrackRegisterType.AddFromGroups: return(new NewTrackViewModel(parser, tracksStore, groupsStore, path, logManager)); case TrackRegisterType.AddFromTracks: return(new NewTrackViewModel(parser, tracksStore, groupsStore, path, logManager, group)); case TrackRegisterType.Update: return(new UpdateTrackViewModel(parser, tracksStore, groupsStore, path, logManager, track)); default: _logger.Error($"View model of type {type} not found in {typeof(RegisterTrackPage)}.{nameof(GetViewModel)}"); return(null); } } InitializeComponent(); _logger = logManager.GetLog(); _viewModel = GetViewModel(registerType); BindingContext = _viewModel; _viewModel.FocusInvalidField += OnFocusInvalidField; _viewModel.ClosePage += async() => await Navigation.PopAsync(); _viewModel.GetTextFromBuffer += async() => Clipboard.HasText ? await Clipboard.GetTextAsync() : string.Empty; _viewModel.ConfirmPaste += async() => await DisplayAlert(Resource.ConfirmPasteTitle, Resource.ConfirmPasteQuestion, Resource.AnswerYes, Resource.AnswerNo); if (group != null || track != null) { groupEntry.IsReadOnly = true; } var grayColor = Color.FromHex("aeaeae"); groupEntry.Unfocused += (sender, args) => groupEntry.PlaceholderColor = grayColor; trackEntry.Unfocused += (sender, args) => trackEntry.PlaceholderColor = grayColor; }
/// <summary> /// Конструктор для добавления трека со страницы с треками. /// </summary> /// <param name="group">Группа, которой принадлежит трек.</param> internal RegisterTrackPage(LyricsSiteParser parser, IRepository <Track, Guid> tracksStore, IRepository <Group, Guid> groupsStore, IPath path, ILogManager logManager, Group group) : this(parser, tracksStore, groupsStore, path, logManager, TrackRegisterType.AddFromTracks, group) { }
/// <summary> /// Конструктор для обновления трека со страницы с информацией о треке. /// </summary> /// <param name="track">Обновляемый трек.</param> internal RegisterTrackPage(LyricsSiteParser parser, IRepository <Track, Guid> tracksStore, IRepository <Group, Guid> groupsStore, IPath path, ILogManager logManager, Track track) : this(parser, tracksStore, groupsStore, path, logManager, TrackRegisterType.Update, track : track) { }
/// <summary> /// Конструктор. /// </summary> /// <param name="parser">Объект для парсинга сайтов со словами песен.</param> /// <param name="tracksStore">Объект для работы с треками.</param> /// <param name="groupsStore">Объект для работы с группами.</param> public UpdateTrackViewModel(LyricsSiteParser parser, IRepository <Track, Guid> tracksStore, IRepository <Group, Guid> groupsStore, IPath path, ILogManager logManager, Track track = null) : base(parser, tracksStore, groupsStore, path, logManager) { Track = track; }
/// <summary> /// Конструктор. /// </summary> /// <param name="parser">Объект для парсинга слов песен.</param> /// <param name="tracksStore">Объект для работы с треками.</param> /// <param name="groupsStore">Объект для работы с группами.</param> public NewTrackViewModel(LyricsSiteParser parser, IRepository <Track, Guid> tracksStore, IRepository <Group, Guid> groupsStore, IPath path, ILogManager logManager, Group group = null) : base(parser, tracksStore, groupsStore, path, logManager) { Group = group; Title = Resource.NewTrackTitle; }