8 Commits

Author SHA1 Message Date
Relationship 32af9fe29b Update RelationshipsJukeBox.toc 2026-07-05 10:01:17 +01:00
Relationship 282517f2d4 Add files via upload 2026-07-05 10:00:43 +01:00
Relationship 2062be4c5b Delete RelationshipsJukeBox.toc 2026-07-05 10:00:10 +01:00
Relationship 74e91c6da1 Delete GeneratePlaylist.ps1 2026-07-05 10:00:06 +01:00
Relationship acc770233f Delete GeneratePlaylist.bat 2026-07-05 10:00:02 +01:00
Relationship 80cfdff8f6 Delete Core.lua 2026-07-05 09:59:58 +01:00
Relationship 634ebd62c4 Update README.md 2026-07-05 08:39:45 +01:00
Relationship 00e05690ec Delete AutoPlaylist.lua 2026-07-05 08:28:18 +01:00
4 changed files with 237 additions and 260 deletions
-217
View File
@@ -1,217 +0,0 @@
RelationshipsJukeboxAutoPlaylist = {}
RelationshipsJukeboxAutoPlaylist.tracks = {
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\01 - Pantera - Walk.mp3", name = "01 - Pantera - Walk", duration = 316 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\01. Session.mp3", name = "01. Session", duration = 145 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\01. What I_ve Done.mp3", name = "01. What I_ve Done", duration = 206 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\02 - Metallica - Master Of Puppets.mp3", name = "02 - Metallica - Master Of Puppets", duration = 516 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\02. Doomsday Clock.mp3", name = "02. Doomsday Clock", duration = 224 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\02. This Is the New Shit.mp3", name = "02. This Is the New Shit", duration = 261 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\03 - Slayer - Raining Blood.mp3", name = "03 - Slayer - Raining Blood", duration = 255 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\03. Reload.mp3", name = "03. Reload", duration = 266 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\03. This Moment.mp3", name = "03. This Moment", duration = 186 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\04 - Slipknot - Duality.mp3", name = "04 - Slipknot - Duality", duration = 253 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\04. Before It_s Too Late _Sam and Mikaela_s Theme_.mp3", name = "04. Before It_s Too Late _Sam and Mikaela_s Theme_", duration = 186 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\04. Furious Angels _Instrumental_.mp3", name = "04. Furious Angels _Instrumental_", duration = 330 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\05 - Iron Maiden - The Trooper - 2015 Remaster.mp3", name = "05 - Iron Maiden - The Trooper - 2015 Remaster", duration = 253 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\05. Lucky You.mp3", name = "05. Lucky You", duration = 251 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\05. Pretty Handsome Awkward.mp3", name = "05. Pretty Handsome Awkward", duration = 216 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\06 - System Of A Down - Chop Suey_.mp3", name = "06 - System Of A Down - Chop Suey_", duration = 211 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\06. Passion_s Killing Floor.mp3", name = "06. Passion_s Killing Floor", duration = 311 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\06. The Passportal.mp3", name = "06. The Passportal", duration = 140 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\07 - Megadeth - Symphony Of Destruction.mp3", name = "07 - Megadeth - Symphony Of Destruction", duration = 247 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\07. Sleeping Awake.mp3", name = "07. Sleeping Awake", duration = 204 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\07. What_s It Feel Like to Be a Ghost.mp3", name = "07. What_s It Feel Like to Be a Ghost", duration = 225 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\08 - Rammstein - Du hast.mp3", name = "08 - Rammstein - Du hast", duration = 235 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\08. Bruises.mp3", name = "08. Bruises", duration = 156 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\08. Second to None _Feat. Mike Shinoda_.mp3", name = "08. Second to None _Feat. Mike Shinoda_", duration = 188 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\09 - TOOL - Stinkfist.mp3", name = "09 - TOOL - Stinkfist", duration = 313 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\09. Calm Like A Bomb.mp3", name = "09. Calm Like A Bomb", duration = 299 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\09. End of the World.mp3", name = "09. End of the World", duration = 251 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\10 - Five Finger Death Punch - Under and Over It.mp3", name = "10 - Five Finger Death Punch - Under and Over It", duration = 219 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\10. Dread Rock.mp3", name = "10. Dread Rock", duration = 281 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\10. Retina and the Sky.mp3", name = "10. Retina and the Sky", duration = 218 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\11 - Lamb of God - Laid to Rest.mp3", name = "11 - Lamb of God - Laid to Rest", duration = 231 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\11. Technical Difficulties.mp3", name = "11. Technical Difficulties", duration = 260 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\11. Zion.mp3", name = "11. Zion", duration = 274 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\12 - Motörhead - Ace of Spades.mp3", name = "12 - Motörhead - Ace of Spades", duration = 169 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\12. Transformers Theme.mp3", name = "12. Transformers Theme", duration = 167 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\12. When The World Ends _Oakenfold Remix_.mp3", name = "12. When The World Ends _Oakenfold Remix_", duration = 327 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\13 - Avenged Sevenfold - Hail to the King.mp3", name = "13 - Avenged Sevenfold - Hail to the King", duration = 306 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\13. Transformers Theme _More Than Meets The Eye_.mp3", name = "13. Transformers Theme _More Than Meets The Eye_", duration = 128 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\14 - Black Sabbath - Paranoid.mp3", name = "14 - Black Sabbath - Paranoid", duration = 169 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\15 - Korn - Freak On a Leash.mp3", name = "15 - Korn - Freak On a Leash", duration = 256 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\16 - Marilyn Manson - The Beautiful People.mp3", name = "16 - Marilyn Manson - The Beautiful People", duration = 223 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\17 - Volbeat - A Warrior_s Call.mp3", name = "17 - Volbeat - A Warrior_s Call", duration = 264 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\18 - Suicidal Tendencies - You Can_t Bring Me Down.mp3", name = "18 - Suicidal Tendencies - You Can_t Bring Me Down", duration = 348 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\19 - Metallica - Enter Sandman.mp3", name = "19 - Metallica - Enter Sandman", duration = 331 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\20 - Mastodon - Blood and Thunder.mp3", name = "20 - Mastodon - Blood and Thunder", duration = 229 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\21 - Anthrax - Madhouse.mp3", name = "21 - Anthrax - Madhouse", duration = 260 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\22 - Sepultura - Roots Bloody Roots.mp3", name = "22 - Sepultura - Roots Bloody Roots", duration = 213 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\23 - Bring Me The Horizon - Shadow Moses.mp3", name = "23 - Bring Me The Horizon - Shadow Moses", duration = 244 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\24 - Rob Zombie - Dragula.mp3", name = "24 - Rob Zombie - Dragula", duration = 223 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\25 - System Of A Down - Sugar.mp3", name = "25 - System Of A Down - Sugar", duration = 154 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\26 - Mudvayne - Dig.mp3", name = "26 - Mudvayne - Dig", duration = 163 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\27 - Bullet For My Valentine - Your Betrayal.mp3", name = "27 - Bullet For My Valentine - Your Betrayal", duration = 292 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\28 - Dope - Die MF Die.mp3", name = "28 - Dope - Die MF Die", duration = 187 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\29 - Judas Priest - Painkiller.mp3", name = "29 - Judas Priest - Painkiller", duration = 366 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\30 - Clawfinger - Biggest _ The Best - Remastered version.mp3", name = "30 - Clawfinger - Biggest _ The Best - Remastered version", duration = 232 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\31 - Exodus - The Toxic Waltz.mp3", name = "31 - Exodus - The Toxic Waltz", duration = 291 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\32 - Machine Head - Davidian.mp3", name = "32 - Machine Head - Davidian", duration = 297 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\33 - Fear Factory - Linchpin.mp3", name = "33 - Fear Factory - Linchpin", duration = 205 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\34 - DOWN - Stone the Crow.mp3", name = "34 - DOWN - Stone the Crow", duration = 283 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\35 - Pantera - Cowboys from Hell.mp3", name = "35 - Pantera - Cowboys from Hell", duration = 244 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\36 - Parkway Drive - Carrion.mp3", name = "36 - Parkway Drive - Carrion", duration = 189 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\37 - Alice In Chains - Would.mp3", name = "37 - Alice In Chains - Would", duration = 207 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\38 - Gojira - Flying whales.mp3", name = "38 - Gojira - Flying whales", duration = 465 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\39 - Slipknot - Wait and Bleed.mp3", name = "39 - Slipknot - Wait and Bleed", duration = 148 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\40 - Deftones - My Own Summer _Shove It_.mp3", name = "40 - Deftones - My Own Summer _Shove It_", duration = 216 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\41 - Coal Chamber - Loco.mp3", name = "41 - Coal Chamber - Loco", duration = 255 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\42 - Prong - Snap Your Fingers_ Snap Your Neck.mp3", name = "42 - Prong - Snap Your Fingers_ Snap Your Neck", duration = 252 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\43 - Trivium - Dying in Your Arms.mp3", name = "43 - Trivium - Dying in Your Arms", duration = 174 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\44 - Slayer - South Of Heaven.mp3", name = "44 - Slayer - South Of Heaven", duration = 299 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\45 - Life Of Agony - River Runs Red.mp3", name = "45 - Life Of Agony - River Runs Red", duration = 115 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\46 - Testament - Electric Crown.mp3", name = "46 - Testament - Electric Crown", duration = 331 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\47 - Disturbed - Down with the Sickness.mp3", name = "47 - Disturbed - Down with the Sickness", duration = 279 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\48 - In Flames - Only for the Weak.mp3", name = "48 - In Flames - Only for the Weak", duration = 298 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\49 - Limp Bizkit - Break Stuff.mp3", name = "49 - Limp Bizkit - Break Stuff", duration = 167 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\50 - Within Temptation - Stand My Ground.mp3", name = "50 - Within Temptation - Stand My Ground", duration = 269 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\51 - Accept - Balls to the Wall.mp3", name = "51 - Accept - Balls to the Wall", duration = 343 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\52 - Amon Amarth - Twilight Of The Thunder God.mp3", name = "52 - Amon Amarth - Twilight Of The Thunder God", duration = 249 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\53 - W.A.S.P. - I Wanna Be Somebody.mp3", name = "53 - W.A.S.P. - I Wanna Be Somebody", duration = 224 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\54 - Hatebreed - Looking Down the Barrel of Today.mp3", name = "54 - Hatebreed - Looking Down the Barrel of Today", duration = 162 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\55 - Static-X - Push It.mp3", name = "55 - Static-X - Push It", duration = 155 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\56 - Killswitch Engage - My Curse.mp3", name = "56 - Killswitch Engage - My Curse", duration = 245 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\57 - Ministry - Just One Fix.mp3", name = "57 - Ministry - Just One Fix", duration = 311 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\58 - Paradise Lost - Enchantment - 2011 Remasterred.mp3", name = "58 - Paradise Lost - Enchantment - 2011 Remasterred", duration = 366 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\59 - King Diamond - Abigail - Reissue.mp3", name = "59 - King Diamond - Abigail - Reissue", duration = 291 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\60 - Ghost - Ritual.mp3", name = "60 - Ghost - Ritual", duration = 269 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\61 - Twisted Sister - I Wanna Rock.mp3", name = "61 - Twisted Sister - I Wanna Rock", duration = 180 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\62 - Manowar - Kings of Metal.mp3", name = "62 - Manowar - Kings of Metal", duration = 224 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\63 - Type O Negative - Black No. 1 _Little Miss Scare -All_.mp3", name = "63 - Type O Negative - Black No. 1 _Little Miss Scare -All_", duration = 676 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\64 - Lacuna Coil - Heaven_s a Lie.mp3", name = "64 - Lacuna Coil - Heaven_s a Lie", duration = 287 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\65 - Nightwish - Nemo.mp3", name = "65 - Nightwish - Nemo", duration = 277 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\66 - Meshuggah - Bleed.mp3", name = "66 - Meshuggah - Bleed", duration = 443 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\67 - White Zombie - Thunder Kiss _65.mp3", name = "67 - White Zombie - Thunder Kiss _65", duration = 235 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\68 - Arch Enemy - War Eternal.mp3", name = "68 - Arch Enemy - War Eternal", duration = 257 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\69 - Death Angel - The Ultra-Violence.mp3", name = "69 - Death Angel - The Ultra-Violence", duration = 634 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\70 - Soil - Halo.mp3", name = "70 - Soil - Halo", duration = 196 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\71 - Dream Theater - Panic Attack.mp3", name = "71 - Dream Theater - Panic Attack", duration = 437 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\72 - Strapping Young Lad - Love.mp3", name = "72 - Strapping Young Lad - Love", duration = 294 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\73 - As I Lay Dying - The Sound Of Truth.mp3", name = "73 - As I Lay Dying - The Sound Of Truth", duration = 261 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\74 - Godsmack - 1000hp.mp3", name = "74 - Godsmack - 1000hp", duration = 227 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\75 - Sacred Reich - The American Way.mp3", name = "75 - Sacred Reich - The American Way", duration = 222 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\76 - Overkill - Elimination.mp3", name = "76 - Overkill - Elimination", duration = 276 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\77 - Children Of Bodom - Are You Dead Yet.mp3", name = "77 - Children Of Bodom - Are You Dead Yet", duration = 235 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Cheese - 10x Karma.mp3", name = "Cheese - 10x Karma", duration = 332 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Cheese - Doobie Tunes 1 _ 2.mp3", name = "Cheese - Doobie Tunes 1 _ 2", duration = 337 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Cheese - Few Seconds Of Pain.mp3", name = "Cheese - Few Seconds Of Pain", duration = 153 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Cheese - Fine.mp3", name = "Cheese - Fine", duration = 269 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Cheese - Gaido.mp3", name = "Cheese - Gaido", duration = 253 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Cheese -Trilogy.mp3", name = "Cheese -Trilogy", duration = 275 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Chico Science - Sink or Swim.mp3", name = "Chico Science - Sink or Swim", duration = 250 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Chicosci - A Promise.mp3", name = "Chicosci - A Promise", duration = 185 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Chicosci - Chicosci Vampire Social Club.mp3", name = "Chicosci - Chicosci Vampire Social Club", duration = 183 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Chicosci - Paris.mp3", name = "Chicosci - Paris", duration = 238 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Chicosci - Raspberry_ Girl.mp3", name = "Chicosci - Raspberry_ Girl", duration = 213 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Disturbed - Down With The Sickness.mp3", name = "Disturbed - Down With The Sickness", duration = 279 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Disturbed - Indestructible.mp3", name = "Disturbed - Indestructible", duration = 278 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Disturbed - Stricken.mp3", name = "Disturbed - Stricken", duration = 248 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Disturbed - Stupify.mp3", name = "Disturbed - Stupify", duration = 274 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Disturbed - The Vengeful One.mp3", name = "Disturbed - The Vengeful One", duration = 253 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Donkey Kong Country - Gangplank Galleon.ogg", name = "Donkey Kong Country - Gangplank Galleon", duration = 194 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Drowning Pool - Bodies _2014_.mp3", name = "Drowning Pool - Bodies _2014_", duration = 203 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Drowning Pool - Feel Like I Do.mp3", name = "Drowning Pool - Feel Like I Do", duration = 214 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Drowning Pool - Numb _2004_.mp3", name = "Drowning Pool - Numb _2004_", duration = 213 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Drowning Pool - Sinner _2014_.mp3", name = "Drowning Pool - Sinner _2014_", duration = 148 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Drowning Pool - Step Up _2004_.mp3", name = "Drowning Pool - Step Up _2004_", duration = 198 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Drowning Pool - Tear Away.mp3", name = "Drowning Pool - Tear Away", duration = 273 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Evanescence - Bring Me To Life.mp3", name = "Evanescence - Bring Me To Life", duration = 238 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Evanescence - My Immortal.mp3", name = "Evanescence - My Immortal", duration = 265 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Greyhoundz - Even.mp3", name = "Greyhoundz - Even", duration = 218 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Greyhoundz - Jack In Da Box.mp3", name = "Greyhoundz - Jack In Da Box", duration = 268 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Greyhoundz - Karmic.mp3", name = "Greyhoundz - Karmic", duration = 224 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Greyhoundz - Mr. P.I.G..mp3", name = "Greyhoundz - Mr. P.I.G.", duration = 190 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Greyhoundz - Pigface.mp3", name = "Greyhoundz - Pigface", duration = 217 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Greyhoundz - Your Puppet And Clown.mp3", name = "Greyhoundz - Your Puppet And Clown", duration = 306 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Korn - Blind.mp3", name = "Korn - Blind", duration = 261 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Korn - Falling Away From Me.mp3", name = "Korn - Falling Away From Me", duration = 271 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Korn - Freak On A Leash.mp3", name = "Korn - Freak On A Leash", duration = 257 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Korn - Got The Life.mp3", name = "Korn - Got The Life", duration = 226 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Korn - Here To Stay.mp3", name = "Korn - Here To Stay", duration = 272 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Limp Bizkit - Behind Blue Eyes.mp3", name = "Limp Bizkit - Behind Blue Eyes", duration = 366 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Limp Bizkit - Break Stuff.mp3", name = "Limp Bizkit - Break Stuff", duration = 167 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Limp Bizkit - My Generation.mp3", name = "Limp Bizkit - My Generation", duration = 222 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Limp Bizkit - My Way.mp3", name = "Limp Bizkit - My Way", duration = 274 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Limp Bizkit - Nookie.mp3", name = "Limp Bizkit - Nookie", duration = 290 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Limp Bizkit - Re-Arranged.mp3", name = "Limp Bizkit - Re-Arranged", duration = 355 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Limp Bizkit - Rollin' (Air Raid Vehicle).mp3", name = "Limp Bizkit - Rollin' (Air Raid Vehicle)", duration = 214 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Limp Bizkit - Rollin_ _Air Raid Vehicle_.mp3", name = "Limp Bizkit - Rollin_ _Air Raid Vehicle_", duration = 214 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Limp Bizkit - Rollin_ Air Raid Vehicle.mp3", name = "Limp Bizkit - Rollin_ Air Raid Vehicle", duration = 214 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Limp Bizkit - Take A Look Around.mp3", name = "Limp Bizkit - Take A Look Around", duration = 322 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Linkin Park - Breaking the Habit.mp3", name = "Linkin Park - Breaking the Habit", duration = 197 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Linkin Park - Crawling.mp3", name = "Linkin Park - Crawling", duration = 210 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Linkin Park - Faint.mp3", name = "Linkin Park - Faint", duration = 163 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Linkin Park - In the End.mp3", name = "Linkin Park - In the End", duration = 217 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Linkin Park - My December.mp3", name = "Linkin Park - My December", duration = 260 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Linkin Park - Numb.mp3", name = "Linkin Park - Numb", duration = 188 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Linkin Park - One Step Closer.mp3", name = "Linkin Park - One Step Closer", duration = 156 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Linkin Park - Papercut.mp3", name = "Linkin Park - Papercut", duration = 185 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Linkin Park - Somewhere I Belong.mp3", name = "Linkin Park - Somewhere I Belong", duration = 215 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Loopo_b.wav", name = "Loopo_b", duration = 1 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Mudvayne - _2000_ 02 Dig.mp3", name = "Mudvayne - _2000_ 02 Dig", duration = 162 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Mudvayne - _2000_ 05 Death Blooms.mp3", name = "Mudvayne - _2000_ 05 Death Blooms", duration = 292 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Mudvayne - _2005_ 01 Determined.mp3", name = "Mudvayne - _2005_ 01 Determined", duration = 160 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Mudvayne - _2005_ 03 Happy.mp3", name = "Mudvayne - _2005_ 03 Happy", duration = 218 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Mudvayne - _2005_ 08 Forget To Remember.mp3", name = "Mudvayne - _2005_ 08 Forget To Remember", duration = 216 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\P.O.D. - Alive.mp3", name = "P.O.D. - Alive", duration = 204 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\P.O.D. - Boom.mp3", name = "P.O.D. - Boom", duration = 189 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\P.O.D. - Satellite.mp3", name = "P.O.D. - Satellite", duration = 211 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\P.O.D. - Youth_of_the_nation.mp3", name = "P.O.D. - Youth_of_the_nation", duration = 260 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Papa Roach - Between Angels And Insects.mp3", name = "Papa Roach - Between Angels And Insects", duration = 235 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Papa Roach - Getting Away With Murder.mp3", name = "Papa Roach - Getting Away With Murder", duration = 193 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Papa Roach - Last Resort.mp3", name = "Papa Roach - Last Resort", duration = 200 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Papa Roach - Scars.mp3", name = "Papa Roach - Scars", duration = 209 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Papa Roach - She Loves Me Not.mp3", name = "Papa Roach - She Loves Me Not", duration = 210 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Queso - Furlan.mp3", name = "Queso - Furlan", duration = 275 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Queso - Insekta.mp3", name = "Queso - Insekta", duration = 371 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Queso - Tiamat.mp3", name = "Queso - Tiamat", duration = 291 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Seether - Broken _Feat. Amy Lee_.mp3", name = "Seether - Broken _Feat. Amy Lee_", duration = 259 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Seether - Fake It.mp3", name = "Seether - Fake It", duration = 194 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Seether - Fine Again.mp3", name = "Seether - Fine Again", duration = 246 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Seether - Love Her.mp3", name = "Seether - Love Her", duration = 252 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Seether - Remedy.mp3", name = "Seether - Remedy", duration = 208 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Seether - Save Today.mp3", name = "Seether - Save Today", duration = 289 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Seether - Tied My Hands.mp3", name = "Seether - Tied My Hands", duration = 314 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Slapshock - Agent Orange.mp3", name = "Slapshock - Agent Orange", duration = 248 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Slapshock - Anino Mo.mp3", name = "Slapshock - Anino Mo", duration = 303 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Slapshock - Carino Brutal.mp3", name = "Slapshock - Carino Brutal", duration = 266 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Slapshock - Direction.mp3", name = "Slapshock - Direction", duration = 224 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Slapshock - Get Away.mp3", name = "Slapshock - Get Away", duration = 249 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Slapshock - Numb.mp3", name = "Slapshock - Numb", duration = 344 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Slapshock - Waiting.mp3", name = "Slapshock - Waiting", duration = 242 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Slipknot - _Sic_.mp3", name = "Slipknot - _Sic_", duration = 201 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Slipknot - Before I Forget.mp3", name = "Slipknot - Before I Forget", duration = 279 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Slipknot - Duality.mp3", name = "Slipknot - Duality", duration = 253 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Slipknot - Snuff.mp3", name = "Slipknot - Snuff", duration = 277 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Slipknot - Vermilion Pt. 2.mp3", name = "Slipknot - Vermilion Pt. 2", duration = 225 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Slipknot - Wait and Bleed.mp3", name = "Slipknot - Wait and Bleed", duration = 148 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\SOAD - Aerials.mp3", name = "SOAD - Aerials", duration = 372 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\SOAD - B.Y.O.B..mp3", name = "SOAD - B.Y.O.B.", duration = 256 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\SOAD - Chop Suey_.mp3", name = "SOAD - Chop Suey_", duration = 211 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\SOAD - Hypnotize.mp3", name = "SOAD - Hypnotize", duration = 190 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\SOAD - Lonely Day.mp3", name = "SOAD - Lonely Day", duration = 168 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\SOAD - Question_.mp3", name = "SOAD - Question_", duration = 201 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\SOAD - Spiders.mp3", name = "SOAD - Spiders", duration = 216 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\SOAD - Sugar.mp3", name = "SOAD - Sugar", duration = 154 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\SOAD - Toxicity.mp3", name = "SOAD - Toxicity", duration = 219 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Staind - Fade.mp3", name = "Staind - Fade", duration = 244 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Staind - It_s Been Awhile.mp3", name = "Staind - It_s Been Awhile", duration = 266 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Staind - Outside.mp3", name = "Staind - Outside", duration = 293 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Staind - So Far Away.mp3", name = "Staind - So Far Away", duration = 246 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Three Days Grace - Animal I Have Become.mp3", name = "Three Days Grace - Animal I Have Become", duration = 232 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Three Days Grace - I Hate Everything About You.mp3", name = "Three Days Grace - I Hate Everything About You", duration = 232 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Three Days Grace - Never Too Late.mp3", name = "Three Days Grace - Never Too Late", duration = 210 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Three Days Grace - Riot.mp3", name = "Three Days Grace - Riot", duration = 208 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Three Days Grace - Time Of Dying.mp3", name = "Three Days Grace - Time Of Dying", duration = 189 },
{ path = "Interface\\AddOns\\RelationshipsJukeBox\\Media\\Trapt - Headstrong _Explicit Version_.mp3", name = "Trapt - Headstrong _Explicit Version_", duration = 293 },
}
+230 -35
View File
@@ -27,6 +27,17 @@ RJ.prevCooldownUntil = 0 -- timestamp until which Previous is blocked (1s cool
RJ.stopCooldownUntil = 0 -- timestamp until which Stop is blocked (1s cooldown)
local COOLDOWN_SECS = 1 -- universal cooldown for all playback buttons
-- Marquee (scrolling text) state for mini player
RJ.marqueeOffset = 0 -- current pixel offset for scrolling
RJ.marqueeSpeed = 25 -- pixels per second
RJ.marqueeGap = 0 -- legacy gap value; smooth looping now uses a text separator instead
RJ.marqueeSeparator = ""
RJ.marqueeCycleWidth = 0 -- width of one full repeated cycle
RJ.marqueeLastUpdate = 0 -- last OnUpdate timestamp
RJ.marqueeFullText = "" -- the repeated display text used for looping
RJ.marqueeSingleWidth = 0 -- pixel width of the single-copy display text
RJ.marqueeSingleText = "" -- the single-copy display text (before duplication)
-- Polling state: when a track has no duration metadata, we poll IsPlaying
-- to detect when it finishes, so autoplay/shuffle can advance.
RJ.pollingForEnd = false
@@ -895,21 +906,51 @@ end
local function CreateRow(parent, i)
local row = CreateFrame("Frame", nil, parent)
row:SetWidth(680)
row:SetHeight(24)
row:SetHeight(27)
if row.SetBackdrop then
row:SetBackdrop({
bgFile = "Interface\\Tooltips\\UI-Tooltip-Background",
edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border",
tile = true, tileSize = 8, edgeSize = 8,
insets = { left = 2, right = 2, top = 2, bottom = 2 }
})
row:SetBackdropColor(0, 0, 0, 0.35)
-- Give every track its own visible container so each song reads like a
-- separate boxed row instead of one flat list.
--
-- Some 1.12-based clients are inconsistent about drawing SetBackdrop()
-- borders on anonymous child frames. Use explicit textures instead so the
-- row box always appears on Turtle WoW / OctoWoW.
row.bg = row:CreateTexture(nil, "BACKGROUND")
row.bg:SetPoint("TOPLEFT", row, "TOPLEFT", 1, -1)
row.bg:SetPoint("BOTTOMRIGHT", row, "BOTTOMRIGHT", -1, 1)
if math.mod(i, 2) == 1 then
row.bg:SetTexture(0.10, 0.10, 0.10, 0.82)
else
row.bg:SetTexture(0.06, 0.06, 0.06, 0.78)
end
row.borderTop = row:CreateTexture(nil, "BORDER")
row.borderTop:SetPoint("TOPLEFT", row, "TOPLEFT", 0, 0)
row.borderTop:SetPoint("TOPRIGHT", row, "TOPRIGHT", 0, 0)
row.borderTop:SetHeight(1)
row.borderTop:SetTexture(0.45, 0.45, 0.45, 0.95)
row.borderBottom = row:CreateTexture(nil, "BORDER")
row.borderBottom:SetPoint("BOTTOMLEFT", row, "BOTTOMLEFT", 0, 0)
row.borderBottom:SetPoint("BOTTOMRIGHT", row, "BOTTOMRIGHT", 0, 0)
row.borderBottom:SetHeight(1)
row.borderBottom:SetTexture(0.45, 0.45, 0.45, 0.95)
row.borderLeft = row:CreateTexture(nil, "BORDER")
row.borderLeft:SetPoint("TOPLEFT", row, "TOPLEFT", 0, 0)
row.borderLeft:SetPoint("BOTTOMLEFT", row, "BOTTOMLEFT", 0, 0)
row.borderLeft:SetWidth(1)
row.borderLeft:SetTexture(0.45, 0.45, 0.45, 0.95)
row.borderRight = row:CreateTexture(nil, "BORDER")
row.borderRight:SetPoint("TOPRIGHT", row, "TOPRIGHT", 0, 0)
row.borderRight:SetPoint("BOTTOMRIGHT", row, "BOTTOMRIGHT", 0, 0)
row.borderRight:SetWidth(1)
row.borderRight:SetTexture(0.45, 0.45, 0.45, 0.95)
row.label = row:CreateFontString(nil, "OVERLAY", "GameFontNormalSmall")
row.label:SetPoint("LEFT", row, "LEFT", 8, 0)
row.label:SetWidth(500)
row.label:SetPoint("LEFT", row, "LEFT", 10, 0)
row.label:SetWidth(496)
row.label:SetJustifyH("LEFT")
row.label:SetText("")
@@ -951,6 +992,7 @@ local function CreateUI()
tile = true, tileSize = 32, edgeSize = 32,
insets = { left = 11, right = 12, top = 12, bottom = 11 }
})
f:SetBackdropColor(0, 0, 0, 0.85)
end
-- Title bar
@@ -1004,9 +1046,9 @@ local function CreateUI()
for i = 1, RJ.pageSize do
local row = CreateRow(listAnchor, i)
if i == 1 then
row:SetPoint("TOPLEFT", listAnchor, "TOPLEFT", 0, 0)
row:SetPoint("TOPLEFT", listAnchor, "TOPLEFT", 0, 1)
else
row:SetPoint("TOPLEFT", RJ.rows[i-1], "BOTTOMLEFT", 0, -4)
row:SetPoint("TOPLEFT", RJ.rows[i-1], "BOTTOMLEFT", 0, -1)
end
RJ.rows[i] = row
end
@@ -1087,15 +1129,29 @@ function RefreshMiniPlayer()
local isActive = RJ.currentPath ~= nil
local now = GetTime()
-- Track name label (shows pause indicator in text since no pause button)
-- Build the display text for the mini player. The ScrollFrame marquee
-- will lay it out on the next frame; here we only reset state when the
-- visible text actually changes.
local newText
if RJ.currentName and RJ.currentName ~= "" then
if RJ.isPaused then
mf.trackLabel:SetText("|| " .. RJ.currentName)
newText = "|| " .. RJ.currentName
else
mf.trackLabel:SetText("> " .. RJ.currentName)
newText = RJ.currentName
end
else
mf.trackLabel:SetText("Relationships Jukebox")
newText = "Relationships Jukebox"
end
if RJ.marqueeSingleText ~= newText then
if mf.trackLabel then
mf.trackLabel:SetText(newText)
end
RJ.marqueeOffset = 0
RJ.marqueeLastUpdate = 0
RJ.marqueeCycleWidth = 0
RJ.marqueeSingleText = ""
RJ.marqueeSingleWidth = 0
end
-- Enable/disable buttons with 1-second cooldown checks
@@ -1128,7 +1184,7 @@ local function CreateMiniPlayer()
local mf = CreateFrame("Frame", ADDON_NAME .. "MiniFrame", UIParent)
RJ.miniFrame = mf
mf:SetWidth(176)
mf:SetWidth(216)
mf:SetHeight(56)
mf:SetPoint("TOPRIGHT", UIParent, "TOPRIGHT", -60, -200)
mf:SetMovable(true)
@@ -1137,6 +1193,9 @@ local function CreateMiniPlayer()
mf:SetScript("OnDragStart", function() mf:StartMoving() end)
mf:SetScript("OnDragStop", function() mf:StopMovingOrSizing() end)
mf:SetClampedToScreen(true)
mf:SetScript("OnShow", function()
RJ.marqueeLastUpdate = 0
end)
if mf.SetBackdrop then
mf:SetBackdrop({
@@ -1148,25 +1207,150 @@ local function CreateMiniPlayer()
mf:SetBackdropColor(0, 0, 0, 0.7)
end
-- Track name (top row)
mf.trackLabel = mf:CreateFontString(nil, "OVERLAY", "GameFontNormalSmall")
mf.trackLabel:SetPoint("TOPLEFT", mf, "TOPLEFT", 8, -6)
mf.trackLabel:SetPoint("RIGHT", mf, "RIGHT", -24, 0)
mf.trackLabel:SetJustifyH("LEFT")
mf.trackLabel:SetTextColor(0.4, 1, 0.4)
mf.trackLabel:SetText("Relationships Jukebox")
-- Track name (top row) - marquee scrolling text
-- Use a ScrollFrame viewport plus repeated labels so the text scrolls
-- smoothly at the pixel level without re-slicing strings every frame.
mf.trackClip = CreateFrame("ScrollFrame", nil, mf)
mf.trackClip:SetPoint("TOPLEFT", mf, "TOPLEFT", 8, -9)
mf.trackClip:SetPoint("BOTTOMRIGHT", mf, "TOPRIGHT", -8, -27)
mf.trackClip:SetHorizontalScroll(0)
-- Minimize button (top-right corner)
mf.minBtn = MakeButton(nil, mf, 20, 18, "_")
mf.minBtn:SetPoint("TOPRIGHT", mf, "TOPRIGHT", -4, -2)
mf.minBtn:SetScript("OnClick", function()
mf:Hide()
if RJ.minimapButton then
RJ.minimapButton:Show()
mf.trackCanvas = CreateFrame("Frame", nil, mf.trackClip)
mf.trackCanvas:SetWidth(1)
mf.trackCanvas:SetHeight(14)
mf.trackClip:SetScrollChild(mf.trackCanvas)
mf.trackLabels = {}
for labelIndex = 1, 3 do
local label = mf.trackCanvas:CreateFontString(nil, "OVERLAY", "GameFontNormalSmall")
label:SetJustifyH("LEFT")
label:SetTextColor(0.4, 1, 0.4)
label:SetText("Relationships Jukebox")
mf.trackLabels[labelIndex] = label
end
mf.trackLabel = mf.trackLabels[1]
local function PositionMiniMarquee(offset)
mf.trackCanvas:ClearAllPoints()
if RJ.marqueeCycleWidth > 0 then
-- Keep the middle copy inside the viewport and slide the whole strip to
-- the left. Wrapping happens by reusing the previous/next copies, so the
-- text never disappears into a blank gap between loops.
mf.trackCanvas:SetPoint("TOPLEFT", mf.trackClip, "TOPLEFT", -RJ.marqueeCycleWidth - offset, 0)
else
mf.trackCanvas:SetPoint("TOPLEFT", mf.trackClip, "TOPLEFT", 0, 0)
end
end
local function LayoutMiniMarquee(singleText)
if not singleText or singleText == "" then
singleText = "Relationships Jukebox"
end
local viewWidth = mf.trackClip:GetWidth()
if viewWidth <= 0 then return end
mf.trackLabels[1]:SetText(singleText)
local singleWidth
if mf.trackLabels[1].GetStringWidth then
singleWidth = mf.trackLabels[1]:GetStringWidth()
else
singleWidth = string.len(singleText) * 7
end
RJ.marqueeSingleText = singleText
RJ.marqueeSingleWidth = singleWidth
if singleWidth <= viewWidth or singleWidth == 0 then
RJ.marqueeCycleWidth = 0
RJ.marqueeOffset = 0
RJ.marqueeFullText = singleText
mf.trackLabels[1]:ClearAllPoints()
mf.trackLabels[1]:SetPoint("TOPLEFT", mf.trackCanvas, "TOPLEFT", 0, 0)
mf.trackLabels[1]:SetText(singleText)
mf.trackLabels[2]:SetText("")
mf.trackLabels[3]:SetText("")
mf.trackCanvas:SetWidth(math.max(viewWidth, singleWidth))
PositionMiniMarquee(0)
return
end
RJ.marqueeFullText = singleText .. (RJ.marqueeSeparator or " ")
for labelIndex = 1, 3 do
mf.trackLabels[labelIndex]:SetText(RJ.marqueeFullText)
end
if mf.trackLabels[1].GetStringWidth then
RJ.marqueeCycleWidth = mf.trackLabels[1]:GetStringWidth()
else
RJ.marqueeCycleWidth = string.len(RJ.marqueeFullText) * 7
end
for labelIndex = 1, 3 do
mf.trackLabels[labelIndex]:ClearAllPoints()
mf.trackLabels[labelIndex]:SetPoint("TOPLEFT", mf.trackCanvas, "TOPLEFT", (labelIndex - 1) * RJ.marqueeCycleWidth, 0)
end
mf.trackCanvas:SetWidth(RJ.marqueeCycleWidth * 3)
PositionMiniMarquee(RJ.marqueeOffset)
end
-- Smooth marquee update fully clipped to the mini player bounds.
mf:SetScript("OnUpdate", function()
local singleText
if RJ.currentName and RJ.currentName ~= "" then
if RJ.isPaused then
singleText = "|| " .. RJ.currentName
else
singleText = RJ.currentName
end
else
singleText = "Relationships Jukebox"
end
if RJ.marqueeSingleText ~= singleText then
RJ.marqueeOffset = 0
RJ.marqueeLastUpdate = 0
LayoutMiniMarquee(singleText)
end
if not RJ.currentName or RJ.currentName == "" then
RJ.marqueeOffset = 0
RJ.marqueeLastUpdate = 0
PositionMiniMarquee(0)
return
end
if RJ.marqueeCycleWidth <= 0 then
PositionMiniMarquee(0)
return
end
local now = GetTime()
if RJ.marqueeLastUpdate == 0 then
RJ.marqueeLastUpdate = now
PositionMiniMarquee(RJ.marqueeOffset)
return
end
local elapsed = now - RJ.marqueeLastUpdate
RJ.marqueeLastUpdate = now
if elapsed > 0.5 then elapsed = 0.5 end
RJ.marqueeOffset = RJ.marqueeOffset + (RJ.marqueeSpeed * elapsed)
while RJ.marqueeOffset >= RJ.marqueeCycleWidth do
RJ.marqueeOffset = RJ.marqueeOffset - RJ.marqueeCycleWidth
end
PositionMiniMarquee(RJ.marqueeOffset)
end)
-- Control buttons (bottom row)
-- Control buttons (bottom row): <<, Stop, >>, +, -
mf.prevBtn = MakeButton(nil, mf, 40, 20, "<<")
mf.prevBtn:SetPoint("BOTTOMLEFT", mf, "BOTTOMLEFT", 6, 6)
mf.prevBtn:SetScript("OnClick", PreviousTrack)
@@ -1182,7 +1366,7 @@ local function CreateMiniPlayer()
mf.skipBtn:SetScript("OnClick", SkipTrack)
mf.skipBtn:Disable()
-- Open full GUI button (far right)
-- Open full GUI button
mf.openBtn = MakeButton(nil, mf, 28, 20, "+")
mf.openBtn:SetPoint("LEFT", mf.skipBtn, "RIGHT", 4, 0)
mf.openBtn:SetScript("OnClick", function()
@@ -1192,11 +1376,22 @@ local function CreateMiniPlayer()
end
end)
-- Minimize button (bottom row, after + button)
mf.minBtn = MakeButton(nil, mf, 28, 20, "-")
mf.minBtn:SetPoint("LEFT", mf.openBtn, "RIGHT", 4, 0)
mf.minBtn:SetScript("OnClick", function()
mf:Hide()
if RJ.minimapButton then
RJ.minimapButton:Show()
end
end)
mf:Show()
-- Reset marquee timer when mini player first appears
RJ.marqueeLastUpdate = 0
RefreshMiniPlayer()
end
-----------------------------------------------------------------------
-- Minimap button
-----------------------------------------------------------------------
+6 -7
View File
@@ -19,9 +19,8 @@ The addon scans a local `Media` folder, builds a playlist automatically, and let
- **Right-click:** Toggle Full GUI
- Automatically imports tracks from `AutoPlaylist.lua`
- Stores track names and durations for smoother autoplay and shuffle playback
- Attempts to improve **WoW 1.12 MP3 compatibility** by sanitizing problematic MP3 files during playlist generation
- Works even without metadata by falling back to estimated durations
- Attempts to improve MP3, WAV, and OGG compatibility by sanitizing problematic files during playlist generation
- Works without metadata by falling back to estimated durations
## Installation
@@ -72,8 +71,8 @@ AutoPlaylist.lua
- creates or updates `AutoPlaylist.lua`
- captures track names
- tries to determine durations
- checks MP3 files for WoW 1.12 compatibility issues
- optionally uses `ffmpeg` / `ffprobe` for better metadata and MP3 sanitization
- checks MP3, WAV, and OGG files for WoW 1.12 compatibility issues
- optionally uses `ffmpeg` / `ffprobe` for better metadata and MP3, WAV, and OGG sanitization
After generating the playlist, use `/reload` so the addon can import the updated track list.
@@ -174,9 +173,9 @@ Important: if the audio file still exists in the `Media` folder and is still inc
- Make sure `AutoPlaylist.lua` was created
- Use `/reload`
### Some MP3s do not play
### Some MP3, WAV, and OGG files do not play
WoW 1.12 can be picky about MP3 encoding. Re-run the generator and let it sanitize files if `ffmpeg` is available.
WoW 1.12 can be picky about MP3, WAV, and OGG encoding. Re-run the generator and let it sanitize files if `ffmpeg` is available.
### Durations seem wrong
+1 -1
View File
@@ -2,7 +2,7 @@
## Title: Relationships Jukebox
## Notes: Simple in-game MP3/WAV/OGG player with GUI.
## Author: Relationship
## Version: 1.1
## Version: 1.2
## SavedVariables: RelationshipsJukeboxDB
## X-Website: https://github.com/Relationship-OctoWoW/RelationshipsJukeBox
## X-GitHub: https://github.com/Relationship-OctoWoW/RelationshipsJukeBox