Exemple #1
0
        // Scans the file for ogg rating/playcount tags as defined by the Quod Libet standard
        // All applicable tags are overwritten with the new values, regardless of tag author
        public static void StoreRating(int rating, TagLib.Ogg.XiphComment xiphtag)
        {
            ArrayList ratingFieldnames = new ArrayList();

            // Collect list of rating tags to be updated:
            foreach (string fieldname in xiphtag)
            {
                if (fieldname.StartsWith(RatingPrefix, StringComparison.OrdinalIgnoreCase)
                    || String.Compare(fieldname, MediaMonkeyRatingField, StringComparison.OrdinalIgnoreCase) == 0)
                {
                    ratingFieldnames.Add(fieldname);
                }
            }
            // Add "HOWLER" tags if no rating tags were found and track is not "unrated":
            if (ratingFieldnames.Count == 0 && rating >= 0)
            {
                ratingFieldnames.Add(RatingPrefix + HowlerName);
            }

            if (rating < 0)
            {
                foreach (string ratingname in ratingFieldnames)
                    xiphtag.RemoveField(ratingname);
            }
            else
            {
                int bansheeRating = (int) Math.Ceiling(rating / 20.0);
                string bansheeRatingString = BansheeToOgg(bansheeRating);
                foreach (string ratingname in ratingFieldnames)
                {
                    if (String.Compare(ratingname, String.Concat(RatingPrefix, HowlerName), StringComparison.OrdinalIgnoreCase) == 0
                        || String.Compare(ratingname, MediaMonkeyRatingField, StringComparison.OrdinalIgnoreCase) == 0)
                    {
                        xiphtag.SetField(ratingname, rating.ToString(CultureInfo.InvariantCulture));
                    }

                    else if (ratingname.StartsWith(RatingPrefix, StringComparison.OrdinalIgnoreCase))
                    {
                        xiphtag.SetField(ratingname, bansheeRatingString);
                    }
                }
            }
        }
Exemple #2
0
        public static void StorePlayCount(int playcount, TagLib.Ogg.XiphComment xiphtag)
        {
            ArrayList playcountFieldnames = new ArrayList();

            // Collect list of  playcount tags to be updated:
            foreach (string fieldname in xiphtag)
            {
                if (fieldname.StartsWith(PlaycountPrefix, StringComparison.OrdinalIgnoreCase))
                {
                    playcountFieldnames.Add(fieldname);
                }
            }
            // Add "BANSHEE" tags if no playcount tags were found:
            if (playcountFieldnames.Count == 0)
            {
                playcountFieldnames.Add(PlaycountPrefix + HowlerName);
            }

            string oggPlaycount = playcount.ToString(CultureInfo.InvariantCulture);
            foreach (string playcountname in playcountFieldnames)
            {
                xiphtag.SetField(playcountname, oggPlaycount);
            }
        }