Пример #1
0
        protected void SyncPlaylist(IEnumerable <PlaylistMusicItem> tracks)
        {
            var trackCount = tracks.Count();
            var iterIndex  = 0;

            foreach (var song in tracks)
            {
                if (Songs.Count <= iterIndex)
                {
                    Songs.Add(song);
                }
                else
                {
                    var existingItem = Songs[iterIndex];
                    if (song.Song.Id != existingItem.Song.Id || song.Index != existingItem.Index)
                    {
                        Songs.Insert(iterIndex, song);
                    }
                    else
                    {
                        existingItem.Index = iterIndex;
                    }
                }
                iterIndex++;
            }
            while (Songs.Count > trackCount)
            {
                Songs.RemoveAt(trackCount);
            }
        }
 public void AddSong(string path)
 {
     if (Songs.Where(song => song.Path == path).Count() != 0)
     {
         Songs.Add(new Song(path));
     }
 }
Пример #3
0
        private void LoadFiles(FileInfo[] files)
        {
            foreach (var file in files)
            {
                if (SupportedExtentions.Length == 0 || SupportedExtentions.Contains(file.Extension))
                {
                    var fileMetadata = ShellFile.FromFilePath(file.FullName);

                    var song = new Song()
                    {
                        Path = file.FullName,

                        Title =
                            fileMetadata.Properties.System.Title?.Value
                            ?? fileMetadata.Name,

                        Duration = (int)
                                   (fileMetadata.Properties.System.Media.Duration?.Value ?? 0) / 10_000_000,

                        Album = new Album()
                        {
                            Title = fileMetadata.Properties.System.Music.AlbumTitle?.Value,
                            Year  = (int)(fileMetadata.Properties.System.Media.Year?.Value ?? 0),
                        },

                        Artist = new Artist()
                        {
                            Name = fileMetadata.Properties.System.Music.Artist?.Value?.FirstOrDefault()
                        }
                    };

                    Songs.Add(song);
                }
            }
        }
        public PlaylistModel(StorageConfiguration storageConfiguration, string file, IList <SongModel> songLibrary)
        {
            _storageConfiguration = storageConfiguration;

            Name     = Path.GetFileNameWithoutExtension(file);
            FilePath = file;

            var lines    = File.ReadAllLines(file);
            var basePath = _storageConfiguration.RootDirectory;

            if (_storageConfiguration.PlaylistDirectory != null)
            {
                basePath = Path.Combine(basePath, _storageConfiguration.PlaylistDirectory);
            }
            foreach (var line in lines)
            {
                if (line.StartsWith("#EXTM3U") || line.StartsWith("#EXTINF") || line.StartsWith("#EXT"))
                {
                    continue;
                }

                var filePath = Path.Combine(basePath, line);

                var song = songLibrary.FirstOrDefault(x => Path.GetFullPath(x.FilePath) == Path.GetFullPath(filePath));
                if (song != null)
                {
                    Songs.Add(song);
                }
            }
        }
Пример #5
0
        // -Path
        public Aimp4Group(StreamReader reader)
        {
            var line = reader.ReadLine();

            if (string.IsNullOrWhiteSpace(line))
            {
                return;
            }
            if (line.StartsWith("-"))
            {
                _path = line.Substring(1);
            }

            do
            {
                var pos = Util.GetActualPosition(reader);
                line = reader.ReadLine();

                if (line.StartsWith("-"))
                {
                    // Read past the end of the group, rewind stream and stop.
                    Util.SetActualPosition(reader, pos);
                    break;
                }
                var song = new Aimp4Song(line);
                Songs.Add(song);
            } while (!reader.EndOfStream);
        }
Пример #6
0
        public async Task SearchExecute()
        {
            try
            {
                if (string.IsNullOrWhiteSpace(SearchQuery))
                {
                    await ClearExecute();

                    return;
                }

                await ExecuteBusyAction(async() =>
                {
                    Songs.Clear();
                    var songs = await YoutubeSearchService.SearchVideo($"{SearchQuery} karaoke", 1);
                    foreach (var song in songs)
                    {
                        Songs.Add(song);
                    }
                });
            }
            catch (System.Exception ex)
            {
                Debug.WriteLine(ex);
            }
        }
Пример #7
0
        /// <summary>
        /// 主界面右侧
        /// 添加歌曲的
        /// dialog 的
        /// 关闭事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="eventArgs"></param>
        private void DialogAddSongs(object sender, DialogClosingEventArgs eventArgs)
        {
            if (eventArgs.Parameter.Equals(true) && !string.IsNullOrWhiteSpace(AddSongsTextBox.Text))
            {
                var      keyword  = AddSongsTextBox.Text;
                SongInfo songInfo = null;

                if (SearchModules.PrimaryModule != SearchModules.NullModule)
                {
                    songInfo = SearchModules.PrimaryModule.SafeSearch(keyword);
                }

                if (songInfo == null)
                {
                    if (SearchModules.SecondaryModule != SearchModules.NullModule)
                    {
                        songInfo = SearchModules.SecondaryModule.SafeSearch(keyword);
                    }
                }

                if (songInfo == null)
                {
                    return;
                }

                Songs.Add(new SongItem(songInfo, "主播")); // TODO: 点歌人名字
            }
            AddSongsTextBox.Text = string.Empty;
        }
Пример #8
0
        // #Group:Path|1
        public Aimp3Group(StreamReader reader)
        {
            var line = reader.ReadLine();

            if (string.IsNullOrWhiteSpace(line))
            {
                return;
            }
            var variable = line.Substring(1, line.IndexOf(':') - 1);
            var value    = line.Substring(variable.Length + 2);

            // No idea what that number on the end is for.
            _parts = value.Split('|');

            do
            {
                var pos = Util.GetActualPosition(reader);
                line     = reader.ReadLine();
                variable = line.Substring(1, line.IndexOf(':') - 1);
                value    = line.Substring(variable.Length + 2);

                if (variable == "Track")
                {
                    var song = new Aimp3Song(value);
                    Songs.Add(song);
                }
                else
                {
                    // Read past the end of the group, rewind stream and stop.
                    Util.SetActualPosition(reader, pos);
                    break;
                }
            } while (!reader.EndOfStream);
        }
Пример #9
0
        void LoadSongs(NSPC.NSPC nspc)
        {
            int songIndex = 1; // why is this game 1 based? (0 will do strange things)

            foreach (var s in nspc.Songs)
            {
                var song = new Song();
                song.SongIndex = songIndex;
                songIndex++;

                foreach (var p in s.Parts)
                {
                    var part = new Part();

                    foreach (var t in p.Tracks)
                    {
                        var channel = new Channel();

                        channel.LoadFromNSPCTrack(t);

                        part.Channels.Add(channel);
                    }

                    song.Parts.Add(part);
                }

                Songs.Add(song);
            }
        }
Пример #10
0
 //Updates the list of songs from the dictionary. This is done so that the observable list of songs is smoothly updated as they are discovered asynchronously by the file finder threads.
 public static void UpdateAndOrderSongs()
 {
     if (Songs.Count != SongDict.Count)
     {
         List <string> Songkeys = new List <string>(); // ArtistDict.Keys as List<string>;
         foreach (string key in SongDict.Keys)
         {
             Songkeys.Add(key);
         }
         if (Songkeys != null)
         {
             Songkeys.Sort();//((x, y) => );
             Songkeys.Sort((x, y) => SongListStorage.SongDict[x].Title.Replace("The ", "").CompareTo(SongListStorage.SongDict[y].Title.Replace("The ", "")));
             //Songs.Clear();
             for (int i = 0; i < Songkeys.Count; i++)
             {
                 string songkey = Songkeys[i];
                 Songs.Insert(i, SongDict[songkey]);
                 if (i < Songs.Count)
                 {
                     Songs[i] = SongDict[songkey];
                 }
                 else
                 {
                     Songs.Add(SongDict[songkey]);
                 }
             }
         }
     }
 }
Пример #11
0
        private void OpenSongsMethod()
        {
            var dialog = new OpenFileDialog
            {
                Multiselect = true,
                Filter      = "Audio files (*.mp3)|*.mp3|All files (*.*)|*.*",
            };

            if (dialog.ShowDialog() != true)
            {
                return;
            }
            foreach (var item in dialog.FileNames)
            {
                var tagfile = TagLib.File.Create(item);
                Songs.Add(new SongEntry
                {
                    SongName   = string.IsNullOrEmpty(tagfile.Tag.Title) ? tagfile.Name.Substring(tagfile.Name.LastIndexOf("\\", StringComparison.Ordinal) + 1) : tagfile.Tag.Title,
                    ArtistName = tagfile.Tag.Performers.Length > 0 ? tagfile.Tag.Performers[0] : "unknown",
                    Duration   = tagfile.Properties.Duration == TimeSpan.Zero ? TimeSpan.Zero : tagfile.Properties.Duration,
                    IsSelected = false,
                    Uri        = new Uri(item, UriKind.Relative)
                });
            }
            foreach (var item in Songs)
            {
                item.Index = Songs.IndexOf(item) + 1;
            }
            CurrentSong = Songs[0];
        }
Пример #12
0
        public void LoadSongs(string path)
        {
            using (FileStream fileStream = File.OpenRead(@path))
                using (StreamReader reader = new StreamReader(fileStream))
                {
                    while (!reader.EndOfStream)
                    {
                        int    i    = 0;
                        string line = reader.ReadLine();

                        if (line == "" || line[0] == '#')
                        {
                            continue;
                        }

                        string[] values = line.Split(',');

                        Song song = new Song();
                        song.Id     = Int32.Parse(values[i++]);
                        song.Title  = values[i++];
                        song.Album  = GetAlbum(Int32.Parse(values[i++]));
                        song.Length = Int32.Parse(values[i++]);
                        song.Album.AddSong(song);

                        Songs.Add(song);
                    }
                }
        }
Пример #13
0
        private void SaveSong(string songBefore)
        {
            YoutubeLink = videoSearch.SearchQuery(songBefore, 1).FirstOrDefault().Url;
            if (!String.IsNullOrEmpty(songBefore))
            {
                // extract songtitle from metadata header. Trim was needed, because some stations don't trim the songtitle

                Song songsearched = Songs.Where(x => x.Songname == songBefore).FirstOrDefault();
                if (songsearched == null)
                {
                    // Keyword


                    var song = new Song();

                    song.Songname     = songBefore;
                    song.SavedFile    = "Radios\\" + songBefore + ".mp3";
                    song.StartTime    = 0;
                    song.EndTime      = 0;
                    song.NumberPlayed = 1;
                    song.ExportSong   = false;
                    song.YoutubeLink  = YoutubeLink;
                    Application.Current.Dispatcher.BeginInvoke(new Action(() =>
                    {
                        Songs.Add(song);
                        var convertedJson = JsonConvert.SerializeObject(Songs, Formatting.Indented);
                        File.WriteAllText("Radios\\" + RadioName + ".json", convertedJson);
                    }));
                }
                else
                {
                    songsearched.NumberPlayed++;
                }
            }
        }
Пример #14
0
        public void NewPlaylist()
        {
            Songs.Clear();
            MediaMetadata.Clear();
            OpenFileDialog dlg = new OpenFileDialog();

            dlg.Filter      = "All Media Files|*.wav;*.aac;*.wma;*.wmv;*.avi;*.mpg;*.mpeg;*.m1v;*.mp2;*.mp3;*.mpa;*.mpe;*.m3u;*.mp4;*.mov;*.3g2;*.3gp2;*.3gp;*.3gpp;*.m4a;*.cda;*.aif;*.aifc;*.aiff;*.mid;*.midi;*.rmi;*.mkv;*.WAV;*.AAC;*.WMA;*.WMV;*.AVI;*.MPG;*.MPEG;*.M1V;*.MP2;*.MP3;*.MPA;*.MPE;*.M3U;*.MP4;*.MOV;*.3G2;*.3GP2;*.3GP;*.3GPP;*.M4A;*.CDA;*.AIF;*.AIFC;*.AIFF;*.MID;*.MIDI;*.RMI;*.MKV";
            dlg.Multiselect = true;
            DialogResult dialogResult = dlg.ShowDialog();

            if (dialogResult == System.Windows.Forms.DialogResult.OK)
            {
                foreach (String file in dlg.FileNames)
                {
                    Songs.Add(file);
                    _element = new TagLibMetadata(file);
                    if (_element.MetaDataTL.Tag.Title == null)
                    {
                        _element.MetaDataTL.Tag.Title = "Unknown";
                    }
                    //if (element.MetaDataTL.Tag.Performers.Length < 0)
                    //{
                    //    element.MetaDataTL.Tag.Performers = new string[1] { "Unknown" };
                    //    element.MetaDataTL.Save();
                    //}
                    //element.MetaDataTL.Tag.Performers[0] = "Unknown";
                    MediaMetadata.Add(_element);
                }
                IndexList = new int[Songs.Count];
                for (int i = 0; i < Songs.Count; i++)
                {
                    IndexList[i] = i;
                }
            }
        }
Пример #15
0
        public Task UpdateMusicLibraryAsync()
        {
            return(Task.Run(() =>
            {
                App.Current.Dispatcher.Invoke(() =>
                {
                    Songs.Clear();

                    if (Properties.Settings.Default.MusicFolderPath != null)
                    {
                        foreach (string path in Properties.Settings.Default.MusicFolderPath)
                        {
                            foreach (var item in Directory.GetFiles(path, "*.mp3*", SearchOption.AllDirectories))
                            {
                                Song song = new Song(item);
                                if (!Songs.Contains(song))
                                {
                                    Songs.Add(song);
                                }
                            }
                        }
                    }
                });
            }));
        }
Пример #16
0
        public Song ManageSong(string filepath)
        {
            Song s = null;

            foreach (var song in Songs)
            {
                if (song.FilePath == filepath)
                {
                    s = song;
                    break;
                }
            }

            if (s == null)
            {
                s = new Song
                {
                    FilePath = filepath,
                    Presets  = new ObservableCollection <Preset>()
                };
                Songs.Add(s);
            }

            return(s);
        }
Пример #17
0
        private void NewSong_Click(object sender)
        {
            IsInEditMode = true;

            Songs.Add(new SongData("Title", "Author")
            {
                Lyric = new List <SongLyric>()
                {
                    new SongLyric()
                    {
                        Text = "Verse 1"
                    }
                }
            });

            SongData lastSong = Songs[Songs.Count - 1];

            SongData = lastSong;

            SongLyrics.Clear();

            foreach (SongLyric lyric in lastSong.Lyric)
            {
                SongLyrics.Add(lyric);
            }
        }
Пример #18
0
        private async void LoadTracklistAsync()
        {
            try
            {
                var tracks = await _tracklistWebLoader.LoadTracksAsync(Album.Performer.Name, Album.Name);

                for (var i = 0; i < tracks.Length; i++)
                {
                    var song = Mapper.Map <SongViewModel>(tracks[i]);
                    song.AlbumId = Album.Id;

                    if (i < Songs.Count)
                    {
                        song.Id  = Songs[i].Id;
                        Songs[i] = song;
                    }
                    else
                    {
                        Songs.Add(song);
                    }
                }

                FixTitles();
                FixDurations();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
Пример #19
0
        /// <summary>
        /// Retrieves songs from the data source.
        /// </summary>
        public async void LoadSongs()
        {
            await DispatcherHelper.ExecuteOnUIThreadAsync(() =>
            {
                Songs.Clear();
                Artists.Clear();
                Albums.Clear();
            });

            var songs   = App.Repository.GetAll();
            var artists = App.Repository.GetArtists();
            var albums  = App.Repository.GetAlbums();

            await DispatcherHelper.ExecuteOnUIThreadAsync(() =>
            {
                foreach (var song in songs)
                {
                    Songs.Add(song);
                }

                foreach (var artist in artists)
                {
                    Artists.Add(artist);
                }

                foreach (var album in albums)
                {
                    Albums.Add(album);
                }
            });
        }
Пример #20
0
 private void AddSong()
 {
     Songs.Add(new SongViewModel {
         Performer = this.Performer, Title = this.Title,
     });
     Performer = null;
     Title     = null;
 }
Пример #21
0
 public void AddSongToAlbum(Song songToAdd)
 {
     if (Songs == null)
     {
         Songs = new List <Song>();
     }
     Songs.Add(songToAdd);
 }
Пример #22
0
 public void Add(Song song)
 {
     if (Songs == null)
     {
         Songs = new List <Song>();
     }
     Songs.Add(song);
 }
Пример #23
0
        protected override async Task <bool> LoadAsync()
        {
            if (IsLoaded || IsBusy)
            {
                return(false);
            }
            IsBusy     = true;
            IsBusyText = "Loading Song History...";
            await Task.Run(async() =>
            {
                var randomSetlist = await WebApiClientService.GetSongsAsync();
                return(randomSetlist);
            })
            .ContinueWith(task =>
            {
                try
                {
                    if (!task.IsFaulted && task.Result != null)
                    {
                        foreach (var song in task.Result.OrderBy(s => s.SongName))
                        {
                            Songs.Add(song);
                            if (song.IsAlias)
                            {
                                Aliases.Add(song);
                            }

                            if (song.IsCover)
                            {
                                Covers.Add(song);
                            }

                            if (song.IsOriginal)
                            {
                                Originals.Add(song);
                            }
                        }
                    }
                    else
                    {
                        AlertManagerService.ShowAlert("Error Occurred Loading Song History", task.Exception.ToString());
                    }
                }
                catch (Exception e)
                {
                    AlertManagerService.ShowAlert("Error Occurred Loading Song History", e.ToString());
                }
                finally
                {
                    IsBusy   = false;
                    IsLoaded = true;
                    task.Dispose();
                }
            }, TaskScheduler.FromCurrentSynchronizationContext());

            return(true);
        }
Пример #24
0
        private void AddNewSong()
        {
            var svm = new SongViewModel();

            svm.Artist = SelectedSong.Artist;
            svm.Title  = SelectedSong.Title;
            svm.Id     = SelectedSong.Id;

            Songs.Add(svm);
        }
        public async void LoadSongs(string artist)
        {
            var songs = await App.SongRepo.GetSongsFromArtist(artist);

            foreach (var song in songs)
            {
                Songs.Add(song);
                Debug.WriteLine("Added: " + song.Artist);
            }
        }
Пример #26
0
        // Delegate Functions
        // Delegate Functions :: DecodeFunction
        private void DecodeFunction(string key, IntPtr data)
        {
            Song song = new Song(key, data);

            Songs.Add(key, song);

            // We don't "Finish", as we do this before the UI is there,
            // we don't need to emit signals
            StartAddToAlbum(song);
        }
Пример #27
0
 /// <summary>
 /// Adds a PlaylistSong to the list if a song with the same hash doesn't already exist.
 /// </summary>
 /// <param name="song"></param>
 /// <returns>True if the song was added.</returns>
 public bool TryAdd(PlaylistSong song)
 {
     if (!Songs.Any(s => s.Hash.Equals(song.Hash)))
     {
         Songs.Add(song);
         IsDirty = true;
         return(true);
     }
     return(false);
 }
Пример #28
0
        // Add list of songs in collection that fill list in view
        private void FillSongList(string path)
        {
            var songs = fileService.Open(path);

            Songs.Clear();
            foreach (var song in songs)
            {
                Songs.Add(song);
            }
        }
Пример #29
0
        public bool AddSong(Song song)
        {
            if (song == null)
            {
                return(false);
            }

            Songs.Add(song);
            return(true);
        }
Пример #30
0
        public async Task LoadAsync()
        {
            var lookup = await _songLookupService.GetSongLookupAsync();

            Songs.Clear();
            foreach (var item in lookup)
            {
                Songs.Add(new NavigationItemViewModel(item.Id, item.DisplayMember, _eventAggregator));
            }
        }
Пример #31
0
        private static Songs fillSongsFromSQLDataReader(SqlDataReader reader)
        {
            Songs allSongs = new Songs();
            Song oneSong = new Song();
            oneSong.TrackID = reader.GetString(0);
            oneSong.AlbumID = reader.GetString(1);
            oneSong.InterpretID = reader.GetString(2);
            oneSong.titel = reader.GetString(3);

            allSongs.Add(oneSong);
            return allSongs;
        }