예제 #1
0
        public IActionResult Grab(string id)
        {
            AllMusicTemplate template = new AllMusicTemplate().Find(id.Replace(".mp3", ""));
            Neo4JProxy       proxy    = new Neo4JProxy();
            var result = proxy.Query(template, GraphDriver.Session());

            foreach (var record in result)
            {
                MusicFileViewModel model = new MusicFileViewModel()
                {
                    Title     = record["title"] as string,
                    Artist    = record["artist"] as string,
                    Album     = record["album"] as string,
                    Genre     = record["genre"] as string,
                    Directory = record["directory"] as string,
                    Filename  = record["filename"] as string,
                    Hash      = record["hash"] as string,
                    Mime      = record["mime"] as string
                };

                string filepath = model.Filename;
                byte[] filedata = System.IO.File.ReadAllBytes(filepath);

                string filename = "song" + Path.GetExtension(model.Filename);
                return(File(filedata, "audio/mpeg3", filename));
            }

            return(NotFound());
        }
예제 #2
0
        public IActionResult Library(string a = "")
        {
            AllMusicTemplate template = new AllMusicTemplate().StartsWith(a);
            Neo4JProxy       proxy    = new Neo4JProxy();
            var result = proxy.Query(template, GraphDriver.Session());

            var library = new List <MusicFileViewModel>();

            foreach (var record in result)
            {
                MusicFileViewModel model = new MusicFileViewModel()
                {
                    Title     = record["title"] as string,
                    Artist    = record["artist"] as string,
                    Album     = record["album"] as string,
                    Genre     = record["genre"] as string,
                    Directory = record["directory"] as string,
                    Filename  = record["filename"] as string,
                    Hash      = record["hash"] as string
                };
                library.Add(model);
            }

            return(View(library));
        }
예제 #3
0
 public void RemoveMusicFileFromPlaylist(MusicFileViewModel musicFile,
                                         MusicPlaylistViewModel playlist)
 {
     if (playlist.musicFileList.ToList().Exists(m => m
                                                == musicFile))
     {
         playlist.Remove(musicFile);
         App.SendMessageToBackground(MessageType.RemoveFromPlaylist, playlist.Name + "\t" + musicFile.Id);
     }
 }
 public async void SetCurrentItem(MusicFileViewModel currentItem)
 {
     if (currentItem != null && App.musicPlayerData.CurrentPlaylist == currentPlaylist)
     {
         App.musicPlayerData.SetCurrentMusicFile(currentItem);
         await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
         {
             musicListview.SelectedItem = currentItem;
             musicListview.ScrollIntoView(currentItem, ScrollIntoViewAlignment.Leading);
         });
     }
 }
예제 #5
0
 /// <summary>
 /// Method for adding given music file to given playlist
 /// and notyfing background player about made changes
 /// </summary>
 /// <param name="musicFile">Music file to add to playlist</param>
 /// <param name="playlist">Playlist for music file to be added</param>
 public async void AddMusicFileToPlaylist(MusicFileViewModel musicFile, MusicPlaylistViewModel playlist)
 {
     if (!playlist.musicFileList.ToList().Exists(m => m
                                                 == musicFile))
     {
         playlist.Add(musicFile);
         App.SendMessageToBackground(MessageType.AddToPlaylist, playlist.Name + "\t" + musicFile.Id);
     }
     else
     {
         await new MessageDialog("Wybrany utwór już znajduje się w liście odtwarzania!", "Błąd").ShowAsync();
     }
 }
        private async void RemoveFromPlaylistBtn_Tapped(object sender, TappedRoutedEventArgs e)
        {
            MusicFileViewModel musicToDelete = ((Grid)((AppBarButton)
                                                       sender).Parent).DataContext as MusicFileViewModel;

            if (musicToDelete != null)
            {
                if (await App.AskForConfirmation("Czy na pewno chcesz "
                                                 + "usunąć wybrany utwór z listy odtwarzania?"))
                {
                    App.musicPlayerData.RemoveMusicFileFromPlaylist(
                        musicToDelete, currentPlaylist);
                    Refresh();
                }
            }
        }
예제 #7
0
        public IActionResult AlbumArt(string hash)
        {
            AllMusicTemplate template = new AllMusicTemplate().Find(hash);
            Neo4JProxy       proxy    = new Neo4JProxy();
            var result = proxy.Query(template, GraphDriver.Session());

            foreach (var record in result)
            {
                MusicFileViewModel model = new MusicFileViewModel()
                {
                    Title    = record["title"] as string,
                    Artist   = record["artist"] as string,
                    Album    = record["album"] as string,
                    Genre    = record["genre"] as string,
                    Hash     = record["hash"] as string,
                    Mime     = record["mime"] as string,
                    AlbumArt = record["albumart"] as string
                };

                return(Json(model));
            }

            return(NotFound());
        }
예제 #8
0
        private async void MessageReceivedFromBackground(object sender, MediaPlayerDataReceivedEventArgs arguments)
        {
            object message;

            try
            {
                if (arguments.Data.TryGetValue(MessageType.Message.ToString(), out message))
                {
                    //It is a command, handle it
                    Command command;
                    if (Enum.TryParse(message.ToString(), out command))
                    {
                        switch (command)
                        {
                        case Command.Pause:

                            break;

                        case Command.Play:

                            break;
                        }
                    }
                    else
                    {
                        Debug.WriteLine("An error occured while processing send command");
                    }
                }
                else if (arguments.Data.TryGetValue(MessageType.MediaPlaybackItem.ToString(), out message))
                {
                    await Task.Delay(400);

                    MusicFileViewModel musicFile = musicPlayerData.CurrentPlaylist
                                                   .musicFileList.Where(m => m.Id == message.ToString()).Single();
                    if (musicPlayerData.CurrentPlaylist == musicPlayerData.MainPlaylist)
                    {
                        MainPage.Instance.SetCurrentItem(musicFile);
                    }
                    else
                    {
                        MusicPlaylistView.Instance.SetCurrentItem(musicFile);
                    }
                }
                else if (arguments.Data.TryGetValue(MessageType.Playlist.ToString(), out message))
                {
                    //There is a playlist to add, handle it
                    MusicPlaylistViewModel playlist = null;
                    string dataSeparator            = "\t";
                    string filesSeparator           = "\n";

                    string[] playlistData = message.ToString().Split(filesSeparator.ToCharArray().Single());

                    //Validate that first element in data is name of playlist
                    if (playlistData[0].Split(dataSeparator.ToCharArray().Single()).Length != 1)
                    {
                        throw new Exception("Incorrect data frame");
                    }
                    else
                    {
                        if (musicPlayerData.MusicPlaylists.Where(m => m
                                                                 .Name == playlistData[0]).Count() == 0)
                        {
                            playlist = new MusicPlaylistViewModel(playlistData[0]);
                            //Remove first element which contains playlist name
                            List <string> playlistList = playlistData.ToList();
                            playlistList.RemoveAt(0);
                            foreach (var musicData in playlistList)
                            {
                                if (musicData != "")
                                {
                                    playlist.Add(musicPlayerData.MainPlaylist.musicFileList
                                                 .Where(m => m.Id == musicData).Single());
                                }
                            }
                            //Playlist is ready, add it to list
                            musicPlayerData.AddPlaylist(playlist);
                        }
                        else
                        {
                            throw new Exception("Playlist already exists");
                        }
                    }
                }
                else if (arguments.Data.TryGetValue(MessageType.CurrentPlaylist.ToString(), out message))
                {
                    if (musicPlayerData.MainPlaylist.Name == message.ToString())
                    {
                        musicPlayerData.SetCurrentPlaylist(musicPlayerData.MainPlaylist);
                    }
                    else if (musicPlayerData.MusicPlaylists.Where(m => m.Name == message.ToString()).Count() == 1)
                    {
                        musicPlayerData.SetCurrentPlaylist(musicPlayerData.MusicPlaylists.Where(m => m.Name == message.ToString()).Single());
                    }
                }
                else if (arguments.Data.TryGetValue(MessageType.MainPlaylist.ToString(), out message))
                {
                    //Main playlist have changed, update it
                    MusicPlaylistViewModel mainPlaylist = null;
                    string dataSeparator  = "\t";
                    string filesSeparator = "\n";

                    string[] playlistData = message.ToString().Split(filesSeparator.ToCharArray().Single());

                    //Validate that first element in data is name of playlist
                    if (playlistData[0].Split(dataSeparator.ToCharArray().Single()).Length != 1)
                    {
                        throw new Exception("Incorrect data frame");
                    }
                    else
                    {
                        mainPlaylist = new MusicPlaylistViewModel(playlistData[0]);
                        //Remove first element which contains playlist name
                        List <string> playlistList = playlistData.ToList();
                        playlistList.RemoveAt(0);
                        foreach (var musicData in playlistList)
                        {
                            if (musicData != "")
                            {
                                string[] musicDetails = musicData.Split(dataSeparator.ToCharArray().Single());
                                if (musicDetails.Length != 4)
                                {
                                    //Data is incomplete or corrupted, abort
                                    throw new Exception("Data is either corrupted or incomplete");
                                }
                                else
                                {
                                    MusicFileViewModel musicFile = new MusicFileViewModel();
                                    musicFile.Id       = musicDetails[0];
                                    musicFile.Title    = musicDetails[1];
                                    musicFile.Artist   = musicDetails[2];
                                    musicFile.Duration = TimeSpan.Parse(musicDetails[3]);
                                    mainPlaylist.musicFileList.Add(musicFile);
                                }
                            }
                        }
                        //Playlist is ready, set is as current
                        musicPlayerData.SetMainPlaylist(mainPlaylist);
                    }
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex);
            }
        }
예제 #9
0
 /// <summary>
 /// Method which sets currently played music file to given music file
 /// and notifies background player
 /// </summary>
 /// <param name="musicFile">Music file to set as current</param>
 public void SetCurrentMusicFile(MusicFileViewModel musicFile)
 {
     CurrentMusicFile = musicFile;
     App.SendMessageToBackground(MessageType.MediaPlaybackItem, CurrentMusicFile.Id);
 }
예제 #10
0
        private void btnGo_Click(object sender, EventArgs e)
        {
            DistilTitle  distilTitle  = new DistilTitle();
            TitleExtract titleExtract = new TitleExtract();

            GlobalUserConfig config = new GlobalUserConfig();

            GlobalUserConfig.ParentFolderPath = txtPath.Text.Trim();
            DirectoryProcess     dProcess = new DirectoryProcess();
            List <DirectoryInfo> dirList  = dProcess.GetDirectories();

            FileInfo[]  musicFiles   = null;
            TagLib.File tagMusicFile = null;

            Simile.Algorithm.AlgorithmFactory algFactory = new Algorithm.AlgorithmFactory();

            //string newTitle = "";
            // string artistOrBandName = "";
            //  Simile.SimileEnums.GroupCategory grpCategory = SimileEnums.GroupCategory.Unknown;
            Simile.DBProcess.MusicBand   musicBand   = new Simile.DBProcess.MusicBand();
            Simile.DBProcess.MusicArtist musicArtist = new Simile.DBProcess.MusicArtist();

            List <MusicFileViewModel> listMusicFileViewModel = new List <MusicFileViewModel>();
            MusicFileViewModel        musicFileViewModel     = null;

            List <clsErrorRpt> errorRpts = new List <clsErrorRpt>();
            clsErrorRpt        errR      = null;

            foreach (DirectoryInfo dir in dirList)
            {
                musicFiles = dir.GetFiles(GlobalUserConfig.FileType);



                foreach (FileInfo finfo in musicFiles)
                {
                    try
                    {
                        FileInfo musicFile = finfo;

                        //
                        errR          = new clsErrorRpt();
                        errR.FileName = musicFile.Name;
                        errR.Path     = musicFile.FullName;

                        //

                        tagMusicFile = TagLib.File.Create(musicFile.FullName);

                        //if tag is null then avoid the file and get next file.
                        if (tagMusicFile.Tag == null)
                        {
                            continue;
                        }



                        musicFileViewModel          = new MusicFileViewModel();
                        musicFileViewModel.Title    = tagMusicFile.Tag.Title.Trim(); // newTitle.Trim();
                        musicFileViewModel.FileName = musicFile.Name.Trim();
                        musicFileViewModel.Path     = musicFile.DirectoryName.Trim();

                        var artistName = "";
                        var bandName   = "";


                        //----------------------------
                        if (tagMusicFile.Tag.AlbumArtists != null && tagMusicFile.Tag.AlbumArtists.Count() > 0)
                        {
                            string tmpAlbArtists = "";
                            var    test          = tagMusicFile.Tag.AlbumArtists;
                            foreach (var val in test)
                            {
                                tmpAlbArtists += val.Trim();
                            }

                            if (!string.IsNullOrEmpty(tmpAlbArtists))
                            {
                                using (var modelContext = new MusicPlayEntities3())
                                {
                                    Simile.MusicArtist tmpArtist = modelContext.MusicArtists.Where(r => r.ArtistName.ToUpper() == tmpAlbArtists.ToUpper()).FirstOrDefault();
                                    if (tmpArtist != null)
                                    {
                                        musicFileViewModel.Artist   = tmpArtist.ArtistName.Trim();
                                        musicFileViewModel.ArtistId = tmpArtist.Id;
                                    }
                                }

                                using (var modelContext = new MusicPlayEntities3())
                                {
                                    Simile.MusicBand tmpBand = modelContext.MusicBands.Where(r => r.BandName.ToUpper() == tmpAlbArtists.ToUpper()).FirstOrDefault();
                                    if (tmpBand != null)
                                    {
                                        musicFileViewModel.Band   = tmpBand.BandName.Trim();
                                        musicFileViewModel.BandId = tmpBand.Id;
                                    }
                                }
                            }
                        }


                        //-----------------------------



                        //////////////////



                        if (musicFileViewModel.BandId == 0)
                        {
                            var tmpBandName = musicFile.Directory.Name.Trim();

                            using (var modelContext = new MusicPlayEntities3())
                            {
                                Simile.MusicBand tmpBand = modelContext.MusicBands.Where(r => r.BandName.ToUpper() == tmpBandName.ToUpper()).FirstOrDefault();
                                if (tmpBand != null)
                                {
                                    musicFileViewModel.Band   = tmpBand.BandName.Trim();
                                    musicFileViewModel.BandId = tmpBand.Id;
                                }
                            }
                        }

                        if (musicFileViewModel.ArtistId == 0)
                        {
                            var tmpArtistName = musicFile.Directory.Name.Trim();
                            using (var modelContext = new MusicPlayEntities3())
                            {
                                Simile.MusicArtist tmpArtist = modelContext.MusicArtists.Where(r => r.ArtistName.ToUpper() == tmpArtistName.ToUpper()).FirstOrDefault();
                                if (tmpArtist != null)
                                {
                                    musicFileViewModel.Artist   = tmpArtist.ArtistName.Trim();
                                    musicFileViewModel.ArtistId = tmpArtist.Id;
                                }
                            }
                        }

                        ////////////////////

                        if (!string.IsNullOrEmpty(tagMusicFile.Tag.Comment))
                        {
                            var splitComments = tagMusicFile.Tag.Comment.Split(';');

                            foreach (var val in splitComments)
                            {
                                var childSplit = val.ToString().Split('=');
                                if (childSplit.Length == 2)
                                {
                                    if (childSplit[0].Trim() == "Artist")
                                    {
                                        artistName = childSplit[1].Trim();
                                    }

                                    if (childSplit[0].Trim() == "Band")
                                    {
                                        bandName = childSplit[1].Trim();
                                    }
                                }
                            }
                        }

                        if (musicFileViewModel.BandId == 0 && !string.IsNullOrEmpty(bandName))
                        {
                            using (var modelContext = new MusicPlayEntities3())
                            {
                                Simile.MusicBand tmpBand = modelContext.MusicBands.Where(r => r.BandName.ToUpper() == bandName.ToUpper()).FirstOrDefault();
                                musicFileViewModel.Band   = tmpBand.BandName.Trim();
                                musicFileViewModel.BandId = tmpBand.Id;
                            }
                        }

                        if (musicFileViewModel.ArtistId == 0 && !string.IsNullOrEmpty(artistName))
                        {
                            using (var modelContext = new MusicPlayEntities3())
                            {
                                Simile.MusicArtist tmpArtist = modelContext.MusicArtists.Where(r => r.ArtistName.ToUpper() == artistName.ToUpper()).FirstOrDefault();
                                musicFileViewModel.Artist   = tmpArtist.ArtistName.Trim();
                                musicFileViewModel.ArtistId = tmpArtist.Id;
                            }
                        }



                        listMusicFileViewModel.Add(musicFileViewModel);
                    }
                    catch (Exception errMsg)
                    {
                        errR.Error = errMsg.Message;
                        errorRpts.Add(errR);
                        MessageBox.Show(errMsg.Message);
                    }
                } // end of for loop
            }     //end of dir for loop

            dgvMusicFiles.DataSource = listMusicFileViewModel;
        }
예제 #11
0
 private void ShowAddToPlaylistGrid(MusicFileViewModel musicFileChoosen)
 {
     selectedMusicFileToAddToPlaylist = musicFileChoosen;
     playlistsToAddTo.ItemsSource     = App.musicPlayerData.MusicPlaylists;
     addToPlaylistGrid.Visibility     = Visibility.Visible;
 }