/// <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));
        }
示例#3
0
        /// <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;
        }
示例#4
0
 /// <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)
 {
 }
示例#5
0
 /// <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)
 {
 }
示例#6
0
 /// <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;
 }
示例#7
0
 /// <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;
 }