Example #1
0
    public TidalAlbumList RandomCopy()
    {
        var retVal = new TidalAlbumList()
        {
            State = ListState.random
        };
        var copy = new TidalAlbumList(Name, this);

        var random = new Random();

        while (copy.Count > 0)
        {
            if (copy.Count == 1)
            {
                retVal.AddAlbum(copy.GetAlbumAt(0));
                copy.RemoveAlbum(0);
            }
            else
            {
                var index = random.Next(copy.Count);
                retVal.AddAlbum(copy.GetAlbumAt(index));
                copy.RemoveAlbum(index);
            }
        }

        return(retVal);
    }
Example #2
0
 public Playlist()
 {
     Albums = new TidalAlbumList()
     {
         State = ListState.random
     };
 }
Example #3
0
    public TidalAlbumList RandomSublist(int size)
    {
        if (size > Count)
        {
            throw new ArgumentException("Size cannot exceed library size");
        }

        var randomList = RandomCopy();
        var retVal     = new TidalAlbumList()
        {
            State = ListState.random
        };

        var index = 0;

        while (retVal.Count < size)
        {
            //if retVal already contains an album with the potential artist, skip, size permitting
            var albumToAdd = randomList.GetAlbumAt(index);

            if (retVal.Any(a => a.Artist == albumToAdd.Artist))
            {
                //see if we have enough room.
                var stillToAdd       = size - retVal.Count;
                var sourceAlbumsLeft = randomList.Count - (index + 1);
                //just skip one. If it's that artist again, it was meant to be.
                if (stillToAdd <= sourceAlbumsLeft)
                {
                    index++;
                    albumToAdd = randomList.GetAlbumAt(index);
                }
            }

            retVal.AddAlbum(albumToAdd);
            index++;
        }

        return(retVal);
    }
Example #4
0
        static void Main(string[] args)
        {
            var masterList = new TidalAlbumList()
            {
                Name = "From file"
            };

            using (StreamReader reader = new StreamReader("Data2.txt")){
                var line = reader.ReadLine();
                while (line != null)
                {
                    var parts = line.Split('\t');
                    masterList.AddAlbum(new TidalAlbum(parts[0], parts[1], null));
                    line = reader.ReadLine();
                }
            }

            var startNumber    = 56;
            var availableCount = masterList.AvailableList().Count;

            using (StreamWriter writer = new StreamWriter("Playlist2.txt", false))
            {
                while (availableCount > 16)
                {
                    var playList     = masterList.AvailableList().RandomSublist(16);
                    var playListName = $"PL{startNumber++}";
                    playList.Name = playListName;
                    playList.ForEach(ta => ta.PlayList = playListName);
                    masterList.AssignPlaylist(playList, playListName);
                    var outPut = playList.ToStringList();
                    outPut.ForEach(l => writer.WriteLine(l));
                    availableCount = masterList.AvailableList().Count;
                    writer.WriteLine();
                }
            }
        }