1- using System ;
1+ using System ;
22using System . Drawing ;
33using System . Windows . Forms ;
44using System . Collections . Generic ;
1111using System . Runtime . Serialization ;
1212using System . IO ;
1313
14- using EpikLastFMApi ;
15-
14+ using EpikLastFMApi ;
15+
1616namespace MusicBeePlugin
1717{
18- public class CurrentSongInfo
19- {
20- public string Artist { get ; set ; }
21- public string Track { get ; set ; }
22- public string Album { get ; set ; }
23- public bool Playing { get ; set ; }
24- public int Index { get ; set ; }
25- public int TotalTracks { get ; set ; }
26- public string ImageUrl { get ; set ; }
27- public string YearStr { get ; set ; }
18+ public class CurrentSongInfo
19+ {
20+ public string Artist { get ; set ; }
21+ public string Track { get ; set ; }
22+ public string Album { get ; set ; }
23+ public bool Playing { get ; set ; }
24+ public int Index { get ; set ; }
25+ public int TotalTracks { get ; set ; }
26+ public string ImageUrl { get ; set ; }
27+ public string YearStr { get ; set ; }
2828 }
2929 public partial class Plugin
30- {
30+ {
3131 private MusicBeeApiInterface mbApiInterface ;
3232 private PluginInfo about = new PluginInfo ( ) ;
3333 private DiscordRpc . RichPresence presence = new DiscordRpc . RichPresence ( ) ;
@@ -60,8 +60,8 @@ public PluginInfo Initialise(IntPtr apiInterfacePtr)
6060 about . ReceiveNotifications = ( ReceiveNotificationFlags . PlayerEvents | ReceiveNotificationFlags . TagEvents ) ;
6161 about . ConfigurationPanelHeight = 48 ; // height in pixels that musicbee should reserve in a panel for config settings. When set, a handle to an empty panel will be passed to the Configure function
6262
63- InitialiseDiscord ( ) ;
64-
63+ InitialiseDiscord ( ) ;
64+
6565 return about ;
6666 }
6767
@@ -82,102 +82,102 @@ private void HandleDisconnectedCallback(int errorCode, string message) { }
8282
8383 private async Task FetchArt ( string track , string artist , string albumArtist , string album )
8484 {
85- string key = $ "{ albumArtist } _{ album } ";
86-
87- if ( ! albumArtCache . ContainsKey ( key ) )
88- {
89- string mainArtist = albumArtist . Split ( new [ ] { ", " , "; " } , StringSplitOptions . None ) [ 0 ] ;
90-
91- string url = await FmApi . AlbumGetInfo ( AlbumGetInfo_FindAlbumImg , album , mainArtist ) ;
92-
93- if ( string . IsNullOrEmpty ( url ) )
94- url = await FmApi . AlbumGetInfo ( AlbumGetInfo_FindAlbumImg , album , albumArtist ) ;
95-
96- if ( string . IsNullOrEmpty ( url ) )
97- url = await FmApi . AlbumGetInfo ( AlbumGetInfo_FindAlbumImg , album , artist , track ) ;
98-
99- if ( string . IsNullOrEmpty ( url ) )
100- url = await FmApi . AlbumSearch ( AlbumSearch_FindAlbumImg , album , mainArtist ) ;
101-
102- if ( string . IsNullOrEmpty ( url ) )
103- url = await FmApi . AlbumSearch ( AlbumSearch_FindAlbumImg , album ) ;
104-
105- if ( string . IsNullOrEmpty ( url ) )
106- albumArtCache . Add ( key , "unknown" ) ;
107- else
108- albumArtCache . Add ( key , url ) ;
109- }
110- }
111-
112- private string AlbumSearch_FindAlbumImg ( JObject Json , string ArtistRequest , string AlbumRequest )
113- {
114- Dictionary < string , string > ImageList = new Dictionary < string , string > ( ) ;
115-
116- dynamic DJson = Json ;
117-
118- JArray Albums = DJson . results . albummatches . album ;
119-
120- foreach ( dynamic Album in Albums )
121- {
122- string Artist = Album . artist ;
123- bool ArtistUnknown = string . IsNullOrWhiteSpace ( ArtistRequest ) | string . IsNullOrWhiteSpace ( Artist ) ;
124- bool IsVarious = ( ArtistRequest . ToLower ( ) == "va" | ArtistRequest . ToLower ( ) == "various artists" ) ;
125-
126- if ( Artist . ToLower ( ) == ArtistRequest . ToLower ( ) | ArtistUnknown | IsVarious )
127- {
128- string name = Album . name ;
129- JArray Images = Album . image ;
130-
131- bool FoundAlbum = ( name == AlbumRequest | name . ToLower ( ) == AlbumRequest . ToLower ( ) | name . ToLower ( ) . Replace ( " " , "" ) == AlbumRequest . ToLower ( ) . Replace ( " " , "" ) ) ;
132- bool FoundArtist = ( Artist . ToLower ( ) == ArtistRequest . ToLower ( ) ) ;
133-
134- if ( FoundAlbum | FoundArtist | ( IsVarious & FoundAlbum ) )
135- {
136- foreach ( dynamic Image in Images )
137- {
138- string url = Image [ "#text" ] ;
139- string size = Image [ "size" ] ;
140- if ( ! string . IsNullOrEmpty ( url ) & ! string . IsNullOrEmpty ( size ) )
141- ImageList . Add ( size , url ) ;
142- }
143- if ( ImageList . Count > 0 )
144- break ;
145- }
146- }
147- }
148-
149- if ( ImageList . Count == 0 )
150- return "" ;
151-
152- return ImageList . ContainsKey ( imageSize ) ? ImageList [ imageSize ] : ImageList . Values . Last ( ) ;
153- }
154-
155- private string AlbumGetInfo_FindAlbumImg ( JObject Json )
156- {
157- Dictionary < string , string > ImageList = new Dictionary < string , string > ( ) ;
158-
159- dynamic DJson = Json ;
160-
161- JArray Images = DJson . album . image ;
162-
163- foreach ( dynamic Image in Images )
164- {
165- string url = Image [ "#text" ] ;
166- string size = Image [ "size" ] ;
167- if ( ! string . IsNullOrEmpty ( url ) & ! string . IsNullOrEmpty ( size ) )
168- ImageList . Add ( size , url ) ;
169- }
170-
171- if ( ImageList . Count == 0 )
172- return "" ;
173-
174- return ImageList . ContainsKey ( imageSize ) ? ImageList [ imageSize ] : ImageList . Values . Last ( ) ;
85+ string key = $ "{ albumArtist } _{ album } ";
86+
87+ if ( ! albumArtCache . ContainsKey ( key ) )
88+ {
89+ string mainArtist = albumArtist . Split ( new [ ] { ", " , "; " } , StringSplitOptions . None ) [ 0 ] ;
90+
91+ string url = await FmApi . AlbumGetInfo ( AlbumGetInfo_FindAlbumImg , album , mainArtist ) ;
92+
93+ if ( string . IsNullOrEmpty ( url ) )
94+ url = await FmApi . AlbumGetInfo ( AlbumGetInfo_FindAlbumImg , album , albumArtist ) ;
95+
96+ if ( string . IsNullOrEmpty ( url ) )
97+ url = await FmApi . AlbumGetInfo ( AlbumGetInfo_FindAlbumImg , album , artist , track ) ;
98+
99+ if ( string . IsNullOrEmpty ( url ) )
100+ url = await FmApi . AlbumSearch ( AlbumSearch_FindAlbumImg , album , mainArtist ) ;
101+
102+ if ( string . IsNullOrEmpty ( url ) )
103+ url = await FmApi . AlbumSearch ( AlbumSearch_FindAlbumImg , album ) ;
104+
105+ if ( string . IsNullOrEmpty ( url ) )
106+ albumArtCache . Add ( key , "unknown" ) ;
107+ else
108+ albumArtCache . Add ( key , url ) ;
109+ }
110+ }
111+
112+ private string AlbumSearch_FindAlbumImg ( JObject Json , string ArtistRequest , string AlbumRequest )
113+ {
114+ Dictionary < string , string > ImageList = new Dictionary < string , string > ( ) ;
115+
116+ dynamic DJson = Json ;
117+
118+ JArray Albums = DJson . results . albummatches . album ;
119+
120+ foreach ( dynamic Album in Albums )
121+ {
122+ string Artist = Album . artist ;
123+ bool ArtistUnknown = string . IsNullOrWhiteSpace ( ArtistRequest ) | string . IsNullOrWhiteSpace ( Artist ) ;
124+ bool IsVarious = ( ArtistRequest . ToLower ( ) == "va" | ArtistRequest . ToLower ( ) == "various artists" ) ;
125+
126+ if ( Artist . ToLower ( ) == ArtistRequest . ToLower ( ) | ArtistUnknown | IsVarious )
127+ {
128+ string name = Album . name ;
129+ JArray Images = Album . image ;
130+
131+ bool FoundAlbum = ( name == AlbumRequest | name . ToLower ( ) == AlbumRequest . ToLower ( ) | name . ToLower ( ) . Replace ( " " , "" ) == AlbumRequest . ToLower ( ) . Replace ( " " , "" ) ) ;
132+ bool FoundArtist = ( Artist . ToLower ( ) == ArtistRequest . ToLower ( ) ) ;
133+
134+ if ( FoundAlbum | FoundArtist | ( IsVarious & FoundAlbum ) )
135+ {
136+ foreach ( dynamic Image in Images )
137+ {
138+ string url = Image [ "#text" ] ;
139+ string size = Image [ "size" ] ;
140+ if ( ! string . IsNullOrEmpty ( url ) & ! string . IsNullOrEmpty ( size ) )
141+ ImageList . Add ( size , url ) ;
142+ }
143+ if ( ImageList . Count > 0 )
144+ break ;
145+ }
146+ }
147+ }
148+
149+ if ( ImageList . Count == 0 )
150+ return "" ;
151+
152+ return ImageList . ContainsKey ( imageSize ) ? ImageList [ imageSize ] : ImageList . Values . Last ( ) ;
153+ }
154+
155+ private string AlbumGetInfo_FindAlbumImg ( JObject Json )
156+ {
157+ Dictionary < string , string > ImageList = new Dictionary < string , string > ( ) ;
158+
159+ dynamic DJson = Json ;
160+
161+ JArray Images = DJson . album . image ;
162+
163+ foreach ( dynamic Image in Images )
164+ {
165+ string url = Image [ "#text" ] ;
166+ string size = Image [ "size" ] ;
167+ if ( ! string . IsNullOrEmpty ( url ) & ! string . IsNullOrEmpty ( size ) )
168+ ImageList . Add ( size , url ) ;
169+ }
170+
171+ if ( ImageList . Count == 0 )
172+ return "" ;
173+
174+ return ImageList . ContainsKey ( imageSize ) ? ImageList [ imageSize ] : ImageList . Values . Last ( ) ;
175175 }
176176
177177 private void UpdatePresence ( CurrentSongInfo SongInfo )
178178 {
179- presence . largeImageKey = "albumart" ;
180-
179+ presence . largeImageKey = "albumart" ;
180+
181181 string yearStr = SongInfo . YearStr ;
182182 string album = SongInfo . Album ;
183183 string imageUrl = SongInfo . ImageUrl ;
@@ -190,14 +190,14 @@ private void UpdatePresence(CurrentSongInfo SongInfo)
190190 string year = null ;
191191
192192 if ( yearStr . Length > 0 && config . showYear )
193- {
194- DateTime result ;
195-
196- if ( DateTime . TryParse ( yearStr , out result ) )
197- year = result . Year . ToString ( ) ;
198- else
199- if ( yearStr . Length == 4 )
200- if ( DateTime . TryParseExact ( yearStr , "yyyy" , null , System . Globalization . DateTimeStyles . None , out result ) )
193+ {
194+ DateTime result ;
195+
196+ if ( DateTime . TryParse ( yearStr , out result ) )
197+ year = result . Year . ToString ( ) ;
198+ else
199+ if ( yearStr . Length == 4 )
200+ if ( DateTime . TryParseExact ( yearStr , "yyyy" , null , System . Globalization . DateTimeStyles . None , out result ) )
201201 year = result . Year . ToString ( ) ;
202202 }
203203
@@ -299,7 +299,7 @@ private void ShowYearValueChanged(object sender, EventArgs args) {
299299 newConfig . showYear = ( sender as CheckBox ) . Checked ;
300300 }
301301
302- private void CustomArtworkUrlValueChanged ( object sender , EventArgs args )
302+ private void CustomArtworkUrlValueChanged ( object sender , EventArgs args )
303303 {
304304 newConfig . customArtworkUrl = ( sender as TextBox ) . Text ;
305305 }
@@ -392,25 +392,25 @@ public void ReceiveNotification(string sourceFileUrl, NotificationType type)
392392 try
393393 {
394394 string imageUrl = "" ;
395- if ( config . customArtworkUrl != "" )
396- imageUrl = config . customArtworkUrl + "?" + ( long ) DateTime . UtcNow . Subtract ( new DateTime ( 1970 , 1 , 1 ) ) . TotalSeconds ;
397- else
398- {
399- await FetchArt ( trackTitle , originalArtist , albumArtist , album ) ;
400-
395+ if ( config . customArtworkUrl != "" )
396+ imageUrl = config . customArtworkUrl + "?" + ( long ) DateTime . UtcNow . Subtract ( new DateTime ( 1970 , 1 , 1 ) ) . TotalSeconds ;
397+ else
398+ {
399+ await FetchArt ( trackTitle , originalArtist , albumArtist , album ) ;
400+
401401 imageUrl = albumArtCache [ $ "{ albumArtist } _{ album } "] ;
402402 }
403403
404- UpdatePresence ( new CurrentSongInfo
405- {
406- Artist = artist ,
407- Track = trackTitle ,
408- Album = album ,
409- Playing = isPlaying ,
410- Index = index + 1 ,
411- TotalTracks = tracks . Length ,
412- ImageUrl = imageUrl ,
413- YearStr = year
404+ UpdatePresence ( new CurrentSongInfo
405+ {
406+ Artist = artist ,
407+ Track = trackTitle ,
408+ Album = album ,
409+ Playing = isPlaying ,
410+ Index = index + 1 ,
411+ TotalTracks = tracks . Length ,
412+ ImageUrl = imageUrl ,
413+ YearStr = year
414414 } ) ;
415415 }
416416 catch ( Exception err )
0 commit comments