Skip to main content

Notice

Please note that most of the software linked on this forum is likely to be safe to use. If you are unsure, feel free to ask in the relevant topics, or send a private message to an administrator or moderator. To help curb the problems of false positives, or in the event that you do find actual malware, you can contribute through the article linked here.
Topic: Album Art Downloader XUI (Read 2054773 times) previous topic - next topic
0 Members and 1 Guest are viewing this topic.

Album Art Downloader XUI

Reply #1850
Next site: djshop.de

Here's a script for the DJshop downloads: djshop.boo. The way the site is organised, it would have to be a separate script for CD or Vinyl searches. As you pointed out, Vinyl has the watermark on the images, and the CD results I found were pretty poor - 300x300 at most. Unless they have covers for CDs that aren't available elsewhere, I don't think 300x300 CD images are worth having another script for.

Alex

Album Art Downloader XUI

Reply #1851
noob question:
I have a few thousand albums to grab covers for, and on the first try it wanted to grab a cover for every song :/
Not good.
All the albums are saved in their own directories and 98% have 'artist - album' directory name.
How do I go about it?
Also, what is the best way to automate it as much as possible?

Should I first find/run a ID3 tag cleaner (tags on the mp3's are iffy at best)?

Thanks

Album Art Downloader XUI

Reply #1852

If your tags are iffy, but the directory naming is 98% good, then use file path pattern matching in the File Browser (click the Options link in the File Browser window to see this option). The pattern you want would probably be "\%artist% - %album%\." (no " marks). It's also a lot faster than using tags.

To automate as much as possible, you'd want to use Automatic Image Downloading, but I'd recommend you try a few one at a time first, to get a good idea of the sorts of results you want, so you can choose the right source(s) and filter criteria to use before kicking off a big automated job.

Good luck!

Alex


Album Art Downloader XUI

Reply #1853
AlexVallat it's possible to make searche in ebreggae.com in the stock items. For example Trojan Roots Box Set AAD found good, but it can't find Trojan Reggae Duets Box Set because it out of stock. I can find it only in google with this string "Trojan Reggae Duets Box Set site:ebreggae.com"

Album Art Downloader XUI

Reply #1854

I've had a good look around the ebreggae site and can't find any way of getting it to include out-of-stock items in the search results, sorry.

I am not going to have google do the searching for this site, as it looks like google prevents access if you use it too quickly or too much, so having multiple simultaneous searches (which would be the case if I had several scripts all using it for their searches) would likely trigger their protection mechanism.

Alex

Album Art Downloader XUI

Reply #1855


To automate as much as possible, you'd want to use Automatic Image Downloading, but I'd recommend you try a few one at a time first, to get a good idea of the sorts of results you want, so you can choose the right source(s) and filter criteria to use before kicking off a big automated job.


Thank you! That set me off in the right direction.

Though my directories are messy, but not that bad (I have no idea why people cram that much stuff in a directory name anyway).
I guess a little perl regex will go a long way to clean it up.

I have a beef with the auto-downloader interface.
It's cumbersome to see at a glance what cover is for what album. I had to click on every album to see it's cover.

It would be much better to have the scanned album name close to the downloaded one. Ditto for correcting, I'd rather have to click/right click on the downloaded cover to have the search pop-up, then go through the list.


Album Art Downloader XUI

Reply #1856
I'd rather have to click/right click on the downloaded cover to have the search pop-up, then go through the list.

Unless I've misunderstood, this is already possible. If you right click on one of the results in the bottom area automatic image download window the bottom entry on the menu should be "Search in New Window", which is the same command as appears when you right click one of the results in the list area.

Alex

Album Art Downloader XUI

Reply #1857
I'll try it, but it still doesn't deal with showing what album is that cover for :|

Album Art Downloader XUI

Reply #1858
No this version also crashes when I select the browse option. Back to 0.37 unless anyone knows a fix?

Album Art Downloader has encountered a fatal error, and has had to close.
If you wish to report this error, please include this information, which
has been written to the file: C:\Program Files\AlbumArtDownloader\errorlog.txt

Can anyone offer any help re this?

Album Art Downloader XUI

Reply #1859
Alex, there's a problem too with removing the "170x170-75." from the URL with the above example album, the picture doesn't exist! Only the "600x600-75." is found. So you should first try to remove the part and then fall back to the "600x600-75.", and if that doesn't exist, the original 170px.


Hey Alex and Akkurat.
If removing the "170x170-75." part from the iTunes-URL does not work, try ".tif" instead of ".jpg". This should solve the problem.

some of the iTunes images are tifs others are jpgs. the rescaling function (i.e. 600x600-75 or 170x170-75) always returns jpgs.
yours thomian

Album Art Downloader XUI

Reply #1860
If removing the "170x170-75." part from the iTunes-URL does not work, try ".tif" instead of ".jpg". This should solve the problem.

Great find! I'll still leave the 600x600 rescaled image in as a last resort, but will try .tif first.

Here are the updated scripts:
itunes-google.boo
itunes-bing.boo

I only know of one result which used to return a rescaled jpeg and now returns a (sadly still only 600x600) tiff, so if anyone knows of more examples to test them with, please let me know how they get on.

Also, has anyone been trying out the iTunes/Bing script? I've found a couple of cases where Bing hasn't been able to find an album that Google has, for some reason, but also Bing has never stopped working because I've done too many searches on it too quickly. I'm not sure which one to choose.

Alex

Album Art Downloader XUI

Reply #1861
Hey Alex,
here is an example for a larger tif from the iTunes Store:
http://a4.mzstatic.com/us/r1000/048/Music/...zi.cyomhscs.tif

I had some cases where google didn't find an album from the iTunes store. You may help yourself going the "manual" way:
Use iTunes to search and browse in the iTunes store, instead of using the google search. If you've found the album you're looking for, right click on the image and select "copy link" and paste it into the adress field of your internetbrowser.

I have another suggestion:
Some Amazon images are zoomable and return really large Albumart compared to amazon's standard 500x500 pictures.
You may adress the Zooming pics using the "_SRCM_" extension as described here:
http://aaugh.com/imageabuse.html

Here are two examples from "amazon.de" (i.e country code is set to ".03."):
http://ec2.images-amazon.com/images/P/B004...A.03._SCRM_.jpg
http://ec2.images-amazon.com/images/P/B004...Y.03._SCRM_.jpg

Is it possible to adapt the Amazon scripts to adress also the zooming pictures?
yours thomian

Album Art Downloader XUI

Reply #1862
Use iTunes to search and browse in the iTunes store, instead of using the google search.
Hmm... I wonder if whatever web service iTunes uses for searching is exposed anywhere - it would certainly be nice to be able to search iTunes without getting a separate search engine exposed.

You may adress the Zooming pics using the "_SRCM_" extension as described here:
http://aaugh.com/imageabuse.html
That is a very interesting page. I have created an updated version of amazon-common.boo which tries to get an SRCM image, and if that fails, falls back to an SCL (large - usually 500x500ish) image. From a bit of quick testing, SRCM's aren't that common, but there are certainly a few around.

If you replace the existing amazon-common.boo with this one, then all amazon scripts will be using the new system. If you notice any problems with it, please let me know. Otherwise, I'll roll it out as an upgrade for the official amazon script in a few days.

Thanks,

Alex

Album Art Downloader XUI

Reply #1863
Hmm... I wonder if whatever web service iTunes uses for searching is exposed anywhere

Good news, it is! This means I can do a pure iTunes search without involving Google or Bing, and involving far less server round-tripping as it doesn't have to fetch the iTunes web page for each album to get the thumbnail. I'm not usually much of a fan of Apple's, but I've got to admit, this is the way an API ought to be done.

The downside is that it only searches the US store. You can choose to search a different one, but not to search across all stores, which is a shame.

Try it out here: itunes.boo

Alex

Album Art Downloader XUI

Reply #1864
Hi Alex,

Good news, it is! This means I can do a pure iTunes search without involving Google or Bing, and involving far less server round-tripping as it doesn't have to fetch the iTunes web page for each album to get the thumbnail. I'm not usually much of a fan of Apple's, but I've got to admit, this is the way an API ought to be done.

Great work! The new iTunes script is much faster than the Google/Bing search! Moreover it finds more than one album in contrast to the old Google/Bing method (that tends to find a lot of duplicates). The new Amazon script also works fantastic.
From now on this program is definitely the best album art downloader of the world!

The downside is that it only searches the US store. You can choose to search a different one, but not to search across all stores, which is a shame.

This could explain why I still cannot find some covers from the german iTunes Store. May you please offer different iTunes scripts for different countries?

Thanks so much,
Thomian

Album Art Downloader XUI

Reply #1865
May you please offer different iTunes scripts for different countries?
That could be done, in a similar way to the way Amazon is handled now. The only difficulty is in knowing which countries to do. The only list I can find is the main apple site country chooser: http://www.apple.com/choose-your-country/, but I doubt they have different iTunes catalogues for every one of those. If they do, that would be a lot of scripts to make available!

I'm glad the new amazon script is working out so far, thanks for letting me know.

Alex

Album Art Downloader XUI

Reply #1866
The only difficulty is in knowing which countries to do.

Hmmm. My iTunes gives me 123 different countries to choose. It would be nice to have a dropdown menu or a selection page, to choose the store(s). Or even better: The scripts beloging together may be grouped in the sources list (i.e. the Amazon/iTunes/Coverlandia/LastFM...)?
yours thomian

Album Art Downloader XUI

Reply #1867
I have listed all iTunes countries with their country ISO codes. Hope that helps:

Code: [Select]
Algeria - DZ
Angola - AO
Anguilla - AI
Antigua and Barbuda - AG
Argentina - AR
Armenia - AM
Australia - AU
Azerbaijan - AZ
Bahamas - BS
Bahrain - BH
Barbados - BB
Belarus - BY
België/Belgique - BE
Belize - BZ
Bermuda - BM
Bolivia - BO
Botswana - BW
Brazil - BR
British Virgin Islands - VG
Brunei Darussalam - BN
Canada - CA
Cayman Islands - KY
Česká republika (Czech republic) - CZ
Chile - CL
Colombia - CO
Costa Rica - CR
Cyprus - CY
Denmark - DK
Deutschland (Germany) - DE
Dominica - DM
Ecuador - EC
Eesti - EE
Egypt - EG
El Salvador - SV
España (Spain) - ES
France - FR
Ghana - GH
Greece - GR
Grenada - GD
Guatemala - GT
Guyana - GY
Honduras - HN
Hong Kong - HK
Hrvatska (Croatia) - HR
Iceland - IS
India - IN
Indonesia - ID
Ireland - IE
Israel - IL
Italia - IT
Jamaica - JM
Jordan - JO
Kazakhstan - KZ
Kenya - KE
Kuwait - KW
Latvija (Latvia) - LV
Lebanon - LB
Lietuva (Lithuania) - LT
Luxembourg - LU
Macau - MO
Macedonia - MK
Madagascar - MG
Magyarország (Hungary) - HU
Malaysia - MY
Mali - ML
Malta - MT
Mauritius - MU
México - MX
Moldova - MD
Montserrat - MS
Nederland (Netherlands) - NL
New Zealand - NZ
Nicaragua - NI
Niger - NE
Nigeria - NG
Norge (Norway) - NO
Oman - OM
Österreich (Austria) - AT
Pakistan - PK
Panamá - PA
Paraguay - PY
Perú - PE
Philippines - PH
Polska (Poland) - PL
Portugal - PT
Qatar - QA
República Dominica - DM
Romania - RO
Saudi Arabia - SA
Schweiz/Suisse (Switzerland) - CH
Sénégal - SN
Singapore - SG
Slovakia - SK
Slovenia - SI
South Africa - ZA
Sri Lanka - LK
St. Kitts & Nevis - KN
St. Lucia - LC
St. Vincent & The Grenadines - VC
Suomi (Finland) - FI
Suriname - SR
Sverige (Sweden) - SE
Tanzania - TZ
Thailand - TH
Trinidad and Tobago - TT
Tunisie - TN
Türkiye (Turkey) - TR
Turks & Caicos - TC
Uganda - UG
United Kingdom - GB
United Arab Emirates - AE
United States - US
Uruguay - UY
Uzbekistan - UZ
Venezuela - VE
Vietnam - VN
Yemen - YE
България (Bulgaria) - BG
Россия (Russia) - RU
China - CN
Taiwan - TW
Japan - JP
South Korea - KR

If I had to choose, I would take the following:
US, CA, GB, DE, FR, IT, SE, JP, RU, AR, BR

I've found some interesting links about the search API:
http://www.apple.com/itunesaffiliates/API/...esSearch2.1.pdf
http://www.apple.com/itunes/affiliates/res...search-api.html

yours Thomian

Album Art Downloader XUI

Reply #1868
Yes, that's the documentation I used for the API. It's a shame the API doesn't allow you to choose "any" as the country to search. The issue, as I see it, is not figuring out what the country codes are, but rather that I'm not going to ship 123 iTunes scripts with AAD. You just know people are going to install all of them and search the whole lot each time, swamping results from any other source.

Unfortunately the current script architecture doesn't support having custom UI for a script, so I can't put in a dropdown picker to let you choose the country you want to search. Even if it did, that system wouldn't allow you to search multiple countries - I imagine people might well want to search two or three countries, so I'd prefer a system that allows you to have a multiple choice of countries to search.

Alex

Album Art Downloader XUI

Reply #1869
I agree... It's the same for the Amazon scripts. I have no Idea...
For first I've adapted your script for the german store by myself.
thanks
thomian

Album Art Downloader XUI

Reply #1870
playing around I've just realized that not all country codes work. e.g. searching the argentinian (AR) store returns nothing! Same with the russian store. Later on I will figure out, which countries work.
yours
thomian

Album Art Downloader XUI

Reply #1871
playing around I've just realized that not all country codes work.
Where did you get that list from, originally? I've just knocked up a bit of code to run through an produce iTunes country-specific script overrides (like the Amazon ones), and found that too. So I put in a check to do a quick search (for "_") and see if anything came back at all. The ones which I found to work are:

Code: [Select]
Australia (AU)
België/Belgique (BE)
Canada (CA)
Denmark (DK)
Deutschland (Germany) (DE)
España (Spain) (ES)
France (FR)
Greece (GR)
Ireland (IE)
Italia (IT)
Luxembourg (LU)
México (MX)
Nederland (Netherlands) (NL)
New Zealand (NZ)
Norge (Norway) (NO)
Österreich (Austria) (AT)
Portugal (PT)
Schweiz/Suisse (Switzerland) (CH)
Suomi (Finland) (FI)
Sverige (Sweden) (SE)
UK (GB)
Japan (JP)
What I could do is not include them with AAD or through the normal online updates, but have a wiki page where you can download any of them you want. You would need the original itunes.boo (which searches the USA store), then as many of the country-specific overrides as you wanted. I don't want there to be any way for you to accidentally end up with all of them, though. If you really want every single one, you'll have to explicitly download them all.

 

Album Art Downloader XUI

Reply #1872
Script updates
I've just published through Online Updates the updated Amazon scripts (using thomian's info), DJShop, and iTunes (using iTunes search API).

Country-specific overrides to search stores other than the main USA one are available here: iTunes Country-Specific Searches, but will not show up in the online updates "new scripts" notification, or be bundled with the installer. They depend on having the main itunes.boo script installed, and only that main script will need to be updated if future changes are required.

The iTunes/Google and iTunes/Bing scripts are now deprecated. They are still available for download (including the latest changes to support full-sized tiff images), and will continue to work until either iTunes, Google or Bing change their site layout, but will not be included in online updates, or future installers.

Alex

Album Art Downloader XUI

Reply #1873
Hey Alex
it seems that discogs script has some problems as I don't get any results from it lately

thanks for the work, as usually

Album Art Downloader XUI

Reply #1874
Have tried uninstalling version 0.37 and reinstalling latest version but it still crashes when I use the browse option...

Album Art Downloader has encountered a fatal error, and has had to close.
If you wish to report this error, please include this information, which
has been written to the file: C:\Program Files\AlbumArtDownloader\errorlog.txt

Code: [Select]
App version: 0.41.0.0, running on Microsoft Windows NT 5.1.2600 Service Pack 3 (32 bit)

System.Windows.Markup.XamlParseException: Cannot create instance of 'BrowserResults' defined in assembly 'AlbumArt, Version=0.41.0.0, Culture=neutral, PublicKeyToken=null'. Exception has been thrown by the target of an invocation.  Error at object 'System.Windows.Controls.Grid' in markup file 'AlbumArt;component/filebrowser.xaml'. ---> System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.TypeInitializationException: The type initializer for 'AlbumArtDownloader.BrowserResults' threw an exception. ---> System.NotSupportedException: No imaging component suitable to complete this operation was found. ---> System.Runtime.InteropServices.COMException (0x88982F50): Exception from HRESULT: 0x88982F50
   --- End of inner exception stack trace ---
   at System.Windows.Media.Imaging.BitmapEncoder.EnsureUnmanagedEncoder()
   at System.Windows.Media.Imaging.BitmapEncoder.get_CodecInfo()
   at AlbumArtDownloader.BrowserResults.<GetSupportedCodecs>d__8.MoveNext()
   at System.Linq.Enumerable.<SelectManyIterator>d__31`3.MoveNext()
   at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
   at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
   at AlbumArtDownloader.BrowserResults..cctor()
   --- End of inner exception stack trace ---
   --- End of inner exception stack trace ---
   at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandle& ctor, Boolean& bNeedSecurityCheck)
   at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean fillCache)
   at System.RuntimeType.CreateInstanceImpl(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean fillCache)
   at System.Activator.CreateInstance(Type type, Boolean nonPublic)
   at System.Windows.Markup.BamlRecordReader.CreateInstanceFromType(Type type, Int16 typeId, Boolean throwOnFail)
   --- End of inner exception stack trace ---
   at System.Windows.Markup.XamlParseException.ThrowException(String message, Exception innerException, Int32 lineNumber, Int32 linePosition, Uri baseUri, XamlObjectIds currentXamlObjectIds, XamlObjectIds contextXamlObjectIds, Type objectType)
   at System.Windows.Markup.XamlParseException.ThrowException(ParserContext parserContext, Int32 lineNumber, Int32 linePosition, String message, Exception innerException)
   at System.Windows.Markup.BamlRecordReader.ThrowExceptionWithLine(String message, Exception innerException)
   at System.Windows.Markup.BamlRecordReader.CreateInstanceFromType(Type type, Int16 typeId, Boolean throwOnFail)
   at System.Windows.Markup.BamlRecordReader.GetElementAndFlags(BamlElementStartRecord bamlElementStartRecord, Object& element, ReaderFlags& flags, Type& delayCreatedType, Int16& delayCreatedTypeId)
   at System.Windows.Markup.BamlRecordReader.BaseReadElementStartRecord(BamlElementStartRecord bamlElementRecord)
   at System.Windows.Markup.BamlRecordReader.ReadElementStartRecord(BamlElementStartRecord bamlElementRecord)
   at System.Windows.Markup.BamlRecordReader.ReadRecord(BamlRecord bamlRecord)
   at System.Windows.Markup.BamlRecordReader.Read(Boolean singleRecord)
   at System.Windows.Markup.TreeBuilderBamlTranslator.ParseFragment()
   at System.Windows.Markup.TreeBuilder.Parse()
   at System.Windows.Markup.XamlReader.LoadBaml(Stream stream, ParserContext parserContext, Object parent, Boolean closeStream)
   at System.Windows.Application.LoadComponent(Object component, Uri resourceLocator)
   at AlbumArtDownloader.FileBrowser.InitializeComponent()
   at AlbumArtDownloader.FileBrowser..ctor()
   at AlbumArtDownloader.Common.NewFileBrowser(IAppWindow existingWindow)
   at AlbumArtDownloader.Menu.NewFileBrowserExec(Object sender, ExecutedRoutedEventArgs e)
   at System.Windows.Input.CommandBinding.OnExecuted(Object sender, ExecutedRoutedEventArgs e)
   at System.Windows.Input.CommandManager.ExecuteCommandBinding(Object sender, ExecutedRoutedEventArgs e, CommandBinding commandBinding)
   at System.Windows.Input.CommandManager.FindCommandBinding(CommandBindingCollection commandBindings, Object sender, RoutedEventArgs e, ICommand command, Boolean execute)
   at System.Windows.Input.CommandManager.FindCommandBinding(Object sender, RoutedEventArgs e, ICommand command, Boolean execute)
   at System.Windows.Input.CommandManager.OnExecuted(Object sender, ExecutedRoutedEventArgs e)
   at System.Windows.UIElement.OnExecutedThunk(Object sender, ExecutedRoutedEventArgs e)
   at System.Windows.Input.ExecutedRoutedEventArgs.InvokeEventHandler(Delegate genericHandler, Object target)
   at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
   at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
   at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
   at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
   at System.Windows.UIElement.RaiseEvent(RoutedEventArgs args, Boolean trusted)
   at System.Windows.Input.RoutedCommand.ExecuteImpl(Object parameter, IInputElement target, Boolean userInitiated)
   at System.Windows.Input.RoutedCommand.ExecuteCore(Object parameter, IInputElement target, Boolean userInitiated)
   at System.Windows.Input.CommandManager.TransferEvent(IInputElement newSource, ExecutedRoutedEventArgs e)
   at System.Windows.Input.CommandManager.OnExecuted(Object sender, ExecutedRoutedEventArgs e)
   at System.Windows.UIElement.OnExecutedThunk(Object sender, ExecutedRoutedEventArgs e)
   at System.Windows.Input.ExecutedRoutedEventArgs.InvokeEventHandler(Delegate genericHandler, Object target)
   at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
   at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
   at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
   at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
   at System.Windows.UIElement.RaiseEvent(RoutedEventArgs args, Boolean trusted)
   at System.Windows.Input.RoutedCommand.ExecuteImpl(Object parameter, IInputElement target, Boolean userInitiated)
   at System.Windows.Input.RoutedCommand.ExecuteCore(Object parameter, IInputElement target, Boolean userInitiated)
   at MS.Internal.Commands.CommandHelpers.CriticalExecuteCommandSource(ICommandSource commandSource, Boolean userInitiated)
   at System.Windows.Controls.MenuItem.InvokeClickAfterRender(Object arg)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Boolean isSingleParameter)
   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Boolean isSingleParameter, Delegate catchHandler)
   at System.Windows.Threading.Dispatcher.WrappedInvoke(Delegate callback, Object args, Boolean isSingleParameter, Delegate catchHandler)
   at System.Windows.Threading.DispatcherOperation.InvokeImpl()
   at System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(Object state)
   at System.Threading.ExecutionContext.runTryCode(Object userData)
   at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Windows.Threading.DispatcherOperation.Invoke()
   at System.Windows.Threading.Dispatcher.ProcessQueue()
   at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Boolean isSingleParameter)
   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Boolean isSingleParameter, Delegate catchHandler)
   at System.Windows.Threading.Dispatcher.WrappedInvoke(Delegate callback, Object args, Boolean isSingleParameter, Delegate catchHandler)
   at System.Windows.Threading.Dispatcher.InvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Boolean isSingleParameter)
   at System.Windows.Threading.Dispatcher.Invoke(DispatcherPriority priority, Delegate method, Object arg)
   at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
   at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
   at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
   at System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame frame)
   at System.Windows.Threading.Dispatcher.Run()
   at System.Windows.Application.RunDispatcher(Object ignore)
   at System.Windows.Application.RunInternal(Window window)
   at System.Windows.Application.Run(Window window)
   at System.Windows.Application.Run()
   at AlbumArtDownloader.App.AlbumArtDownloader.IPriorInstance.Run()
   at AlbumArtDownloader.InstanceMutex.RunAppAsServiceHost(IPriorInstance instance, String channelUri)
   at AlbumArtDownloader.App.Main(String[] args)