Greasy Fork

RYM/ Sonemic: Average track rating

average track rating for rym/sonemic

// ==UserScript==
// @name       RYM/ Sonemic: Average track rating
// @version    1.3
// @description:en  average track rating for rym/sonemic
// @description average track rating for rym/sonemic
// @match      https://sonemic.com/release/*
// @match      https://rateyourmusic.com/release/*
// @match      http://rateyourmusic.com/release/*
// @match      http://sonemic.com/release/*
// @namespace https://greasyfork.org/users/194849
// ==/UserScript==


//RYM

var $ = unsafeWindow.jQuery;
var url = window.location.href;
var weightedRatingSum_rym = 0;
var numberOfTracks_rym = 0;
var totalDuration = 0;
var relativeTrackDuration;
var weightedRating;
var ratingSum = 0;


//calculate total album duration
$('#tracks li.track').each(function() {


    //only count time if it's not "silence"
    if($(this).html().search('silence') < 0){

         //get the track length in seconds
        var duration = $(this).find('.tracklist_duration').text().trim();
        var a = duration.split(':');
        var seconds = (+a[0]) * 60 + (+a[1])

        if(!isNaN(seconds)){
            totalDuration+=seconds;
        }
    }

});




//Iterate through the tracklist and calculate weighted rating
$('#tracks li.track').each(function() {

    var seconds = 0;
    var a;

    var rating = $(this).find('.track_rating').text();

    //check if there is a valid rating value for the track
    if(parseFloat(rating) > 0){



        if(totalDuration > 0){
        //get the track length in seconds


           var duration = $(this).find('.tracklist_duration').text().trim();
            

            //calculate the length of multipart-tracks
            if(duration.length < 1){

                var longTrackSeconds = 0;
               
                $(this).nextAll().each(function() {
                    var partDuration = $(this).find('.tracklist_duration').text().trim();
                    a = partDuration.split(':');
                    var partSeconds = (+a[0]) * 60 + (+a[1])

                    if(partSeconds > 0){
                    seconds += partSeconds;

                    }

                });


            }else{

                 a = duration.split(':');
                 seconds = (+a[0]) * 60 + (+a[1])

            }

            console.log('trackSeconds: ' + seconds);


        relativeTrackDuration = seconds / totalDuration;

        weightedRating = relativeTrackDuration * rating;
        console.log('weighted Rating track: ' + weightedRating);

            weightedRatingSum_rym += parseFloat(weightedRating);

        }

     else{
         numberOfTracks_rym++;
         ratingSum += parseFloat(rating);
         }

    }

});

var finalRating;

console.log("duration: " +totalDuration);
console.log("tracks: " +numberOfTracks_rym);
console.log("sum: " +ratingSum);

finalRating = (totalDuration > 0) ? weightedRatingSum_rym.toFixed(2) : (ratingSum / numberOfTracks_rym).toFixed(2);

var header = $('.release_page_header').text();

var useless1 = document.getElementsByClassName("release_page_header");
for (var j = 0; j < useless1.length; j++) {
  var useless2 = useless1[j].innerText;
    if(useless2.includes("listing")){

        var element = document.getElementsByClassName("release_page_header")[j];
        var str = element.innerHTML;
var text = str + "(Average: " +finalRating+ ")";
element.innerHTML = text;

    }
}



//SONEMIC

if(url.includes('sonemic')){


var heading = document.getElementsByClassName("page_object_section_header");
var finalText;
var tracklist = document.getElementsByClassName("page_fragment_track_avg_rating");
var lengths = document.getElementsByClassName("page_fragment_track_duration");
var weightedRatingSum_sonemic = 0;
var trackCounter = 0;
var totalDuration_sonemic = 0;
var totalRatings_sonemic = 0;
var finalRating_sonemic;
var lengthsavailable = false;
var weightedRating_sonemic = 0;
var tracklengths = new Array(50);

//album duration
for (var k = 0; k < tracklist.length; k++) {

        var duration = lengths[k].innerText.trim();
        var a = duration.split(':');
        var seconds = (+a[0]) * 60 + (+a[1])

        tracklengths[k] = seconds;

        if(k==0 && seconds > 0) {lengthsavailable = true;}

        var rating = parseFloat(tracklist[k].innerText);

        totalDuration_sonemic += seconds;
        totalRatings_sonemic += rating;

}

    //track lengths are available and thus a weighted rating is possible
    if(lengthsavailable){


        for (k = 0; k < tracklist.length; k++) {

        rating = parseFloat(tracklist[k].innerText);


        relativeTrackDuration = tracklengths[k] / totalDuration_sonemic;

        weightedRating_sonemic = relativeTrackDuration * rating;
        weightedRatingSum_sonemic += parseFloat(weightedRating_sonemic);



}

        finalText = "Tracks (Average: " +weightedRatingSum_sonemic.toFixed(2)+ ")";

    }


else{

finalRating_sonemic = parseFloat(totalRatings_sonemic/tracklist.length);
finalText = "Tracks (Average: " +finalRating_sonemic.toFixed(2)+ ")";

    }
heading[1].innerHTML = finalText;



  }