private HomeLocalViewModel()
        {
            var musicCollection = new LoadingCollection <AudioFile>();

            musicCollection.OnMoreItemsRequested = GetMoreAudio;
            MusicCollection = musicCollection;

            RefreshCommand = new RelayCommand(async() =>
            {
                await MusicFilesService.GetMusicLocal(true);
            });
        }
Beispiel #2
0
        protected async override void OnNavigatedTo(NavigationEventArgs ee)
        {
            if (HomeViewModel.Playlists.Count == 0)
            {
                await PlaylistsService.SetPlaylistLocal();
            }

            if (HomeViewModel.Music.Count == 0)
            {
                await MusicFilesService.GetMusicLocal();

                HomeViewModel.CountMusic();
            }

            HomeViewModel.OnNavigate();
        }
        async void AddToPlaylist(PlaylistFile playlist)
        {
            try
            {
                if (playlist.TracksFiles.Any(t => t == Track))
                {
                    return;
                }
                Track.PlaylistId = playlist.Id;
                playlist.TracksFiles.Add(Track);
                await Services.PlaylistsService.SavePlaylist(playlist);

                var index = StaticContent.Music.IndexOf(Track);
                var track = StaticContent.Music[index];
                track.PlaylistId = playlist.Id;
                await MusicFilesService.UpdateMusicCollection();
            }catch (Exception e)
            {
                await ContentDialogService.Show(new ExceptionDialog("Невозможно добавить трек в плейлист", "Возможно, плейлиста не существует или трек был удален", e));
            }
        }
        private async void Page_Loaded(object sender, RoutedEventArgs e)
        {
            goPro.Visibility = StaticContent.IsPro ? Visibility.Collapsed : Visibility.Visible;
            if (!StaticContent.OpenFiles)
            {
                Models.LastPlay  lastPlayMusic = null;
                Models.AudioFile track         = null;

                try
                {
                    lastPlayMusic = await MusicFilesService.GetLastPlayAudio();

                    track = lastPlayMusic.Track;
                }catch
                {
                }

                if (track != null)
                {
                    try
                    {
                        if (track.IsLocal)
                        {
                            try
                            {
                                track.Source = await StorageFile.GetFileFromPathAsync(track.SourceString);

                                track.Duration = TimeSpan.FromSeconds(track.DurationSeconds);
                            }
                            catch (Exception)
                            {
                                track.Source = await StorageFile.GetFileFromApplicationUriAsync(new Uri(track.SourceString));

                                track.Duration = TimeSpan.FromSeconds(track.DurationSeconds);
                            }

                            if (lastPlayMusic.Playlist != null)
                            {
                                var playlist = lastPlayMusic.Playlist.ToAudioPlaylist();
                                playlist.CurrentItem = track;
                                StaticContent.AudioService.SetCurrentPlaylist(playlist);
                            }
                            else
                            {
                                StaticContent.AudioService.CurrentPlaylist.CurrentItem = track;
                            }
                        }
                        else
                        {
                            track.Duration = TimeSpan.FromSeconds(track.DurationSeconds);
                            if (lastPlayMusic.Playlist != null)
                            {
                                var playlist = lastPlayMusic.Playlist.ToAudioPlaylist();
                                playlist.CurrentItem = track;
                                StaticContent.AudioService.SetCurrentPlaylist(playlist);
                            }
                            else
                            {
                                StaticContent.AudioService.CurrentPlaylist.CurrentItem = track;
                            }
                        }
                    }catch (Exception ee)
                    {
                        await ContentDialogService.Show(new ExceptionDialog("Ошибка при инициализации страницы плеера", "Возможно, трек, который последний раз играл - был удален или поврежден или к нему нет доступа.", ee));
                    }

                    StaticContent.Volume = lastPlayMusic.Volume;
                    if (StaticContent.AudioService.IsPlaying)
                    {
                        StaticContent.AudioService.Pause();
                    }
                }
            }
        }
        private async void Button_Click(object sender, RoutedEventArgs e)
        {
            ProgressRing.IsActive  = true;
            Start.Text             = "Music X выполняет первичную настройку. Пожалуйста, подождите...";
            ButtonStart.Visibility = Visibility.Collapsed;

            //создание папки с плейлистами.
            var localpath = ApplicationData.Current.LocalFolder;

            if (await localpath.TryGetItemAsync("Playlists") == null)
            {
                var pathPlaylists = await localpath.CreateFolderAsync("Playlists");

                StaticContent.PlaylistsFolder = pathPlaylists;
                var filePlaylistId1 = await pathPlaylists.CreateFileAsync("Id1.json");

                var filePlaylistId2 = await pathPlaylists.CreateFileAsync("Id2.json");

                var playlistLastPlay = new Models.PlaylistFile()
                {
                    Artist      = "Music X",
                    Cover       = "ms-appx:///Assets/Images/latest.png",
                    Id          = 1,
                    Name        = "Слушали недавно",
                    IsLocal     = true,
                    TracksFiles = new List <AudioFile>()
                };

                var playlistFavorite = new Models.PlaylistFile()
                {
                    Artist      = "Music X",
                    Cover       = "ms-appx:///Assets/Images/favorites.png",
                    Id          = 2,
                    Name        = "Избранное",
                    IsLocal     = true,
                    TracksFiles = new List <AudioFile>()
                };

                var jsonPlaylistId1 = JsonConvert.SerializeObject(playlistLastPlay);
                var jsonPlaylistId2 = JsonConvert.SerializeObject(playlistFavorite);
                await FileIO.WriteTextAsync(filePlaylistId1, jsonPlaylistId1);

                await FileIO.WriteTextAsync(filePlaylistId2, jsonPlaylistId2);
            }

            if (await localpath.TryGetItemAsync("Covers") == null)
            {
                StaticContent.CoversFolder = await localpath.CreateFolderAsync("Covers");
            }

            if (await localpath.TryGetItemAsync("MusicCollection.json") == null)
            {
                var musicFile = await localpath.CreateFileAsync("MusicCollection.json");

                var musicString = JsonConvert.SerializeObject(new MusicCollection()
                {
                    Music          = new List <AudioFile>(),
                    DateLastUpdate = "none"
                });
                await FileIO.WriteTextAsync(musicFile, musicString);
            }

            if (await localpath.TryGetItemAsync("LastPlay.json") == null)
            {
                var lastFile = await localpath.CreateFileAsync("LastPlay.json");

                var audio = new AudioFile()
                {
                    Artist          = "",
                    Cover           = "ms-appx:///Assets/Images/placeholder.png",
                    DurationMinutes = "00:00",
                    DurationSeconds = 0,
                    Id           = -2,
                    InternalId   = -2,
                    OwnerId      = -2,
                    PlaylistId   = 1,
                    SourceString = "ms-appx:///Assets/Audio/song.mp3",
                    Source       = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Assets/Audio/song.mp3")),
                    Title        = "Сейчас ничего не воспроизводится"
                };
                var lastplayModel = new LastPlay()
                {
                    Playlist = null,
                    Track    = audio,
                    Volume   = 1.0f,
                };
                var jsonLastFile = JsonConvert.SerializeObject(lastplayModel);
                await FileIO.WriteTextAsync(lastFile, jsonLastFile);
            }

            if (await localpath.TryGetItemAsync("ConfigApp.json") == null)
            {
                var configFile = await localpath.CreateFileAsync("ConfigApp.json");

                var config = new ConfigApp()
                {
                    FindInDocumentsLibrary = false,
                    FindInMusicLibrary     = true,
                    ThemeApp    = 0,
                    StreamMusic = true
                };
                var configString = JsonConvert.SerializeObject(config);
                await FileIO.WriteTextAsync(configFile, configString);

                StaticContent.Config = config;
            }

            var settings = ApplicationData.Current.LocalSettings;

            settings.Values["themeApp"] = 0;

            await LikedArtistsService.CreateLikedArtstsFile();

            await MusicFilesService.GetMusicLocal(true);

            var rootFrame = (Frame)Window.Current.Content;

            rootFrame.Navigate(typeof(Views.MainFrameView), null);
        }
        public TrackControl()
        {
            this.InitializeComponent();

            PlayCommand = new RelayCommand(async() =>
            {
                if (Track.IsLocal)
                {
                    await PlayMusicService.PlayMusicForLibrary(Track, 1);
                }
                else
                {
                    await MusicService.PlayMusic(Track, 1);
                }
            });



            DeleteCommand = new RelayCommand(async() =>
            {
                try
                {
                    if (Track.IsLocal)
                    {
                        StaticContent.Music.Remove(Track);
                        AudioFile trackByPlaylist = null;
                        if (Track.PlaylistId != 0)
                        {
                            var playlist    = await Services.PlaylistsService.GetById(Track.PlaylistId);
                            trackByPlaylist = playlist.TracksFiles.Single(t => t.SourceString == Track.SourceString);
                            playlist.TracksFiles.Remove(trackByPlaylist);
                            await Services.PlaylistsService.SavePlaylist(playlist);
                        }
                        if (trackByPlaylist != null)
                        {
                            if (trackByPlaylist.Source == null)
                            {
                                trackByPlaylist.Source = await StorageFile.GetFileFromPathAsync(Track.SourceString);
                            }
                            await trackByPlaylist.Source.DeleteAsync();
                        }
                        else
                        {
                            if (Track.Source == null)
                            {
                                Track.Source = await StorageFile.GetFileFromPathAsync(Track.SourceString);
                            }
                            await Track.Source.DeleteAsync();
                        }

                        await MusicFilesService.UpdateMusicCollection();
                    }
                    else
                    {
                        //TODO: удаление трека ебаный врот
                    }
                }catch (Exception e)
                {
                    await ContentDialogService.Show(new ExceptionDialog("Невозможно удалить этот трек", "Возможно, этот трек был уже удален.", e));
                }
            });

            AddToFavoriteCommand = new RelayCommand(async() =>
            {
                try
                {
                    if (Track.IsLocal)
                    {
                        var playlist = await Services.PlaylistsService.GetById(2);
                        if (playlist.TracksFiles.Any(t => t.SourceString == Track.SourceString))
                        {
                            var dialog = new MessageDialog("Данный трек уже добавлен в избранное", "Ошибка при добавлении в избранное");
                            await dialog.ShowAsync();
                        }
                        else
                        {
                            Like.Visibility    = Visibility.Collapsed;
                            LikeAdd.Visibility = Visibility.Visible;
                            Track.IsFavorite   = true;
                            playlist.TracksFiles.Add(Track);
                            await Services.PlaylistsService.SavePlaylist(playlist);
                        }
                    }
                    else
                    {
                    }
                }catch (Exception e)
                {
                    await ContentDialogService.Show(new ExceptionDialog("Невозможно добавить трек в избранное", "Возможно, этот трек поврежден или не существует плейлиста, если ошибка будет повторяться, переустановите приложение.", e));
                }
            });

            RemoveFavoriteCommand = new RelayCommand(() =>
            {
            });

            AddOnLibraryCommand = new RelayCommand(async() =>
            {
                try
                {
                    await Fooxboy.MusicX.Core.VKontakte.Music.Add.ToLibrary(Track.Id, Track.AccessKey);
                    await new MessageDialog("Трек добавлен в Вашу библиотеку").ShowAsync();
                }catch (Flurl.Http.FlurlHttpException)
                {
                    InternetService.GoToOfflineMode();
                }
                catch (Exception e)
                {
                    await ContentDialogService.Show(new ExceptionDialog("Ошибка при добавлении трека", "Возникла ошибка при добавлении трека в Вашу библиотеку", e));
                }
            });

            GetPropertyCommand = new RelayCommand(async() =>
            {
                await ContentDialogService.Show(new PropertiesTrackContentDialog(Track));
            });

            GoToArtistCommand = new RelayCommand(() =>
            {
                StaticContent.NavigationContentService.Go(typeof(ArtistView), new ArtistParameter()
                {
                    Id   = Track.ArtistId,
                    Name = Track.Artist
                });
            });
        }