{"version":3,"file":"angular-last-fm-scrobbles.mjs","sources":["../../../projects/last-fm-scrobbles/src/lib/last-fm-scrobbles.service.ts","../../../projects/last-fm-scrobbles/src/lib/spotify-logo.ts","../../../projects/last-fm-scrobbles/src/lib/equalizer.component.ts","../../../projects/last-fm-scrobbles/src/lib/last-fm-scrobbles.component.ts","../../../projects/last-fm-scrobbles/src/lib/last-fm-scrobbles.component.html","../../../projects/last-fm-scrobbles/src/lib/last-fm-scrobbles.module.ts","../../../projects/last-fm-scrobbles/src/public-api.ts","../../../projects/last-fm-scrobbles/src/angular-last-fm-scrobbles.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { LastFmTrack } from './interfaces';\nimport { switchMap, tap, map, take } from 'rxjs/operators';\nimport { zip, of } from 'rxjs';\n\n@Injectable()\nexport class LastFmScrobblesService {\n  RECENT_TRACKS_URL = '';\n\n  recentTracks$$: BehaviorSubject<LastFmTrack[]> = new BehaviorSubject([]);\n  authToken = '';\n  cachedSpotifyInfo = {};\n\n  constructor(private http: HttpClient) {}\n\n  init(username: string, apiKey: string, spotifyClientId?: string, spotifyClientSecret?): void {\n    this.RECENT_TRACKS_URL =\n      `https://ws.audioscrobbler.com/2.0/?method=user.getrecenttracks&user=${username}&api_key=${apiKey}&format=json&limit=10`;\n    this.getRecentTracks();\n    // Check every 20 seconds\n    window.setInterval(this.getRecentTracks.bind(this), 20000);\n    if (spotifyClientId && spotifyClientSecret) {\n      this.authSpotify(spotifyClientId, spotifyClientSecret).subscribe(\n        (response: {access_token: string}) => {this.authToken = response.access_token},\n      );\n    }\n  }\n\n  getRecentTracks(): void {\n    this.http.get(this.RECENT_TRACKS_URL).subscribe((response: {recenttracks: {track: LastFmTrack[]}}) => {\n      this.recentTracks$$.next(response.recenttracks.track);\n    });\n  }\n\n  getSpotifyInfo(track: LastFmTrack) {\n    if (this.cachedSpotifyInfo[track.url]) {\n      return of(this.cachedSpotifyInfo[track.url]);\n    }\n    const spotifyLookupUrl =`https://api.spotify.com/v1/search?q=${track.artist['#text']}%20-%20${track.name}&type=track`;\n    const headers = {\n      'Authorization': 'Bearer ' + this.authToken,\n    }\n    return this.http.get(spotifyLookupUrl, {headers}).pipe(\n      take(1),\n      map((response: {tracks: {items: {}[]}}) => response.tracks.items[0]),\n      tap((response) => {\n        this.cachedSpotifyInfo[track.url] = response;\n      }),\n    );\n  }\n\n  authSpotify(clientId: string, clientSecret: string) {\n    const headers = {\n      'Authorization': 'Basic ' + (btoa(clientId + ':' + clientSecret)),\n      'Content-Type': 'application/x-www-form-urlencoded',\n    };\n\n    return this.http.post('https://accounts.spotify.com/api/token', 'grant_type=client_credentials', {headers});\n  }\n\n  get recentTracks$(): Observable<LastFmTrack[]> {\n    return this.recentTracks$$.asObservable();\n  }\n}\n","export const ENCODED_SPOTIFY_LOGO = 'data:image/png;base64,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';\n","import { Component, Input } from '@angular/core';\n\n@Component({\n  selector: 'last-fm-internal-eq',\n  template: `\n    <div class=\"equalizer-container\">\n      <ol *ngFor=\"let barIndex of Arr(numberOfBars).fill(1)\" class=\"equalizer-column\">\n        <li class=\"color-bar\" [style.backgroundColor]=\"color\"></li>\n      </ol>\n    </div>\n  `,\n  styleUrls: ['./equalizer.component.scss']\n})\nexport class LastFmInternalEqComponent {\n  @Input() color;\n  numberOfBars = 100;\n  Arr = Array;\n}\n","import { Component, OnInit, Input } from '@angular/core';\nimport { LastFmScrobblesService } from './last-fm-scrobbles.service';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { LastFmTrack } from './interfaces';\nimport { ENCODED_SPOTIFY_LOGO } from './spotify-logo';\n\nfunction hexToRgba(hexCode: string, opacity: number){\n  var c;\n  if(/^#([A-Fa-f0-9]{3}){1,2}$/.test(hexCode)){\n      c = hexCode.substring(1).split('');\n      if(c.length== 3){\n          c= [c[0], c[0], c[1], c[1], c[2], c[2]];\n      }\n      c= '0x'+c.join('');\n      return `rgba(${[(c>>16)&255, (c>>8)&255, c&255].join(',')},${(opacity / 100).toString()})`;\n  }\n  throw new Error('Bad Hex');\n}\n\nfunction blendColours(baseColor: string, colorToMix: string, opacity: number) {\n  const baseNum = parseInt(baseColor.replace(\"#\",\"\"),16);\n  let rBase = (baseNum >> 16);\n  let gBase = (baseNum >> 8 & 0x00FF);\n  let bBase = (baseNum & 0x0000FF);\n  const mixNum = parseInt(colorToMix.replace(\"#\",\"\"),16);\n  let rMix = (mixNum >> 16);\n  let gMix = (mixNum >> 8 & 0x00FF);\n  let bMix = (mixNum & 0x0000FF);\n\n  const rDiff = rBase - rMix;\n  const gDiff = gBase - gMix;\n  const bDiff = bBase - bMix;\n\n  const rNew = rBase - Math.floor(rDiff*(opacity*2.55/100));\n  const gNew = gBase - Math.floor(gDiff*(opacity*2.55/100));\n  const bNew = bBase - Math.floor(bDiff*(opacity*2.55/100));\n\n  console.log(rBase, gBase, bBase);\n  console.log(rMix, gMix, bMix);\n  console.log(rDiff, gDiff, bDiff);\n  console.log(rNew, gNew, bNew);\n\n  return \"#\" + (0x1000000 + (rNew<255?rNew<1?0:rNew:255)*0x10000 + (gNew<255?gNew<1?0:gNew:255)*0x100 + (bNew<255?bNew<1?0:bNew:255)).toString(16).slice(1);\n}\n\n@Component({\n  selector: 'last-fm-scrobbles',\n  templateUrl: './last-fm-scrobbles.component.html',\n  styleUrls: ['./last-fm-scrobbles.component.scss']\n})\nexport class LastFmScrobblesComponent implements OnInit {\n  @Input() apiKey: string;\n  @Input() username: string;\n  @Input() spotifyClientId: string;\n  @Input() spotifyClientSecret: string;\n  @Input() theme: 'black'|'white' = 'black';\n  @Input() accentColor: string = '#FF6E6E';\n  @Input() backgroundColor?: string;\n  recentTracks$: Observable<LastFmTrack[]>;\n  recentlyPlayedTracks$: Observable<LastFmTrack[]>;\n  latestTrack$: Observable<LastFmTrack>;\n  isNowPlaying$: Observable<boolean>;\n  expandRecent = false;\n  audioPlayer = new Audio();\n  spotifyLogo = ENCODED_SPOTIFY_LOGO;\n\n  get darkAccentColor() {\n    return hexToRgba(this.accentColor, 15);\n  }\n\n  get medAccentColor() {\n    return hexToRgba(this.accentColor, 25);\n  }\n\n  get brightAccentColor() {\n    return hexToRgba(this.accentColor, 35);\n  }\n\n\n  get bgColor() {\n    if (this.backgroundColor) {\n      return this.backgroundColor;\n    }\n    if (this.theme === 'white') {\n      return '#ffffff'\n    }\n    return '#000000';\n  }\n\n  get accentBackground() {\n    return blendColours(this.bgColor, this.accentColor, 15);\n  }\n\n  get bgGradient() {\n    return `linear-gradient(0deg, ${hexToRgba(this.bgColor, 100)} 0%,  ${hexToRgba(this.bgColor, 70)} 25%, ${hexToRgba(this.bgColor, 0)} 100%)`\n  }\n\n  constructor(private lastFmScrobblesService: LastFmScrobblesService) {}\n  ngOnInit(): void {\n    this.recentTracks$ = this.lastFmScrobblesService.recentTracks$;\n    this.recentlyPlayedTracks$ = this.recentTracks$.pipe(\n      map(tracks => tracks.filter((_, i) => i > 0)),\n    );\n    this.latestTrack$ = this.recentTracks$.pipe(\n      map(tracks => tracks ? tracks[0] : null)\n    );\n    this.isNowPlaying$ = this.latestTrack$.pipe(\n      map(track => track['@attr'] ? track['@attr'].nowplaying === 'true' : false)\n    );\n    this.lastFmScrobblesService.init(this.username, this.apiKey, this.spotifyClientId, this.spotifyClientSecret);\n    this.audioPlayer.onended = () => {\n      this.audioPlayer.src = '';\n    }\n  }\n\n  getSpotifyInfoForTrack(track: LastFmTrack) {\n    return this.lastFmScrobblesService.getSpotifyInfo(track);\n  }\n\n  playAudio(audioUrl: string, event) {\n    if (audioUrl !== this.audioPlayer.src) {\n      this.audioPlayer.pause();\n      this.audioPlayer.src = audioUrl;\n      this.audioPlayer.load();\n      this.audioPlayer.play();\n    } else {\n      if(this.audioPlayer.paused) {\n        this.audioPlayer.play();\n      } else {\n        this.audioPlayer.pause();\n      }\n    }\n    event.stopPropagation();\n    event.preventDefault();\n  }\n\n  get currentAudio() {\n    return this.audioPlayer.src;\n  }\n\n  get audioPlaying() {\n    return !this.audioPlayer.paused;\n  }\n}\n","<ng-container *ngIf=\"latestTrack$ | async as latestTrack\">\n  <h3>\n    <mat-icon>headset</mat-icon\n    >{{\n      (isNowPlaying$ | async)\n        ? \"Currently listening to:\"\n        : \"My last-played track:\"\n    }}\n  </h3>\n  <div\n    matRipple\n    [matRippleColor]=\"medAccentColor\"\n    (click)=\"expandRecent = !expandRecent\"\n    class=\"latest-track\"\n    [ngClass]=\"{\n      'now-playing': isNowPlaying$ | async,\n      expanded: expandRecent,\n      'white-theme': theme === 'white',\n      'black-theme': theme === 'black'\n    }\"\n    [style.background-color]=\"expandRecent ? accentBackground : null\"\n  >\n    <last-fm-internal-eq\n      [color]=\"medAccentColor\"\n      *ngIf=\"isNowPlaying$ | async\"\n    ></last-fm-internal-eq>\n    <div class=\"album-art\">\n      <img\n        *ngIf=\"\n          latestTrack.image[latestTrack.image.length - 1]['#text'];\n          else noalbumart\n        \"\n        [src]=\"latestTrack.image[latestTrack.image.length - 1]['#text']\"\n      />\n      <ng-template #noalbumart>\n        <div class=\"no-album-art\"><mat-icon>headset</mat-icon></div>\n      </ng-template>\n    </div>\n    <div class=\"track-info\">\n      <div class=\"artist\">{{ latestTrack.artist[\"#text\"] }}</div>\n      <div class=\"name\">{{ latestTrack.name }}</div>\n    </div>\n    <div class=\"actions\">\n      <ng-container\n        *ngIf=\"getSpotifyInfoForTrack(latestTrack) | async as spotifyInfo\"\n      >\n        <button\n          *ngIf=\"spotifyInfo.preview_url\"\n          mat-icon-button\n          (click)=\"playAudio(spotifyInfo.preview_url, $event)\"\n        >\n          <mat-icon>{{\n            audioPlaying && currentAudio === spotifyInfo.preview_url\n              ? \"pause\"\n              : \"play_arrow\"\n          }}</mat-icon>\n        </button>\n        <a\n          mat-icon-button\n          (click)=\"$event.stopPropagation()\"\n          [href]=\"spotifyInfo.external_urls.spotify\"\n          target=\"_blank\"\n        >\n          <img [src]=\"spotifyLogo\" />\n        </a>\n      </ng-container>\n      <mat-icon class=\"expand-icon\">{{\n        expandRecent ? \"keyboard_arrow_up\" : \"keyboard_arrow_down\"\n      }}</mat-icon>\n    </div>\n  </div>\n  <ng-container *ngIf=\"recentlyPlayedTracks$ | async as recentTracks\">\n    <div\n      [ngClass]=\"{\n        visible: recentTracks.length > 1 && expandRecent,\n        'white-theme': theme === 'white',\n        'black-theme': theme === 'black'\n      }\"\n      class=\"recently-played\"\n    >\n      <h3>Recently Played:</h3>\n      <div *ngFor=\"let track of recentTracks\" class=\"recent-track\">\n        <div class=\"album-art\">\n          <img\n            *ngIf=\"\n              track.image[track.image.length - 1]['#text'];\n              else noalbumartrecent\n            \"\n            [src]=\"track.image[track.image.length - 1]['#text']\"\n          />\n          <ng-template #noalbumartrecent>\n            <div class=\"no-album-art\"><mat-icon>headset</mat-icon></div>\n          </ng-template>\n        </div>\n        <div class=\"track-info\">\n          <div class=\"artist\">{{ track.artist[\"#text\"] }}</div>\n          -\n          <div class=\"name\">{{ track.name }}</div>\n        </div>\n        <div\n          class=\"link\"\n          *ngIf=\"getSpotifyInfoForTrack(track) | async as spotifyInfo\"\n        >\n          <button\n            mat-icon-button\n            (click)=\"playAudio(spotifyInfo.preview_url, $event)\"\n            *ngIf=\"!!spotifyInfo.preview_url\"\n          >\n            <mat-icon>{{\n              audioPlaying && currentAudio === spotifyInfo.preview_url\n                ? \"pause\"\n                : \"play_arrow\"\n            }}</mat-icon>\n          </button>\n          <a\n            mat-icon-button\n            [href]=\"spotifyInfo.external_urls.spotify\"\n            target=\"_blank\"\n            ><img [src]=\"spotifyLogo\"\n          /></a>\n        </div>\n      </div>\n      <div\n        class=\"gradient-overlay\"\n        [style.background]=\"bgColor\"\n        [style.background]=\"bgGradient\"\n      ></div>\n    </div>\n  </ng-container>\n</ng-container>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HttpClientModule } from '@angular/common/http';\nimport { BrowserModule } from '@angular/platform-browser';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { MatRippleModule } from '@angular/material/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { LastFmScrobblesComponent } from './last-fm-scrobbles.component';\nimport { LastFmScrobblesService } from './last-fm-scrobbles.service';\nimport { LastFmInternalEqComponent } from './equalizer.component';\n\n@NgModule({\n  declarations: [\n    LastFmScrobblesComponent,\n    LastFmInternalEqComponent\n  ],\n  imports: [\n    BrowserAnimationsModule,\n    MatRippleModule,\n    MatIconModule,\n    MatButtonModule,\n    BrowserModule,\n    HttpClientModule\n  ],\n  exports: [LastFmScrobblesComponent],\n  providers: [LastFmScrobblesService],\n})\nexport class LastFmScrobblesModule { }\n","/*\n * Public API Surface of last-fm-scrobbles\n */\n\nexport * from './lib/last-fm-scrobbles.service';\nexport * from './lib/last-fm-scrobbles.component';\nexport * from './lib/last-fm-scrobbles.module';\nexport * from './lib/interfaces';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i1.LastFmScrobblesService","i6.LastFmInternalEqComponent"],"mappings":"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"}