示例#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;
        }