From dd953fd86cf7bd596ff667462712130655651457 Mon Sep 17 00:00:00 2001 From: narunlifescience Date: Tue, 13 Oct 2015 20:01:08 -0500 Subject: [PATCH] check custom icon location, then system theme & then fallback theme icons added & replaced --- 3rdparty/qocoa/qsearchfield_nonmac.cpp | 2 +- data/data.qrc | 160 ++++++++++++------ data/icons/22x22/audio-volume-muted.png | Bin 0 -> 1043 bytes data/icons/22x22/group.png | Bin 0 -> 534 bytes data/icons/22x22/link.png | Bin 0 -> 884 bytes data/icons/22x22/qtlogo.png | Bin 0 -> 917 bytes data/icons/22x22/spotify.png | Bin 1302 -> 0 bytes data/icons/32x32/audio-volume-muted.png | Bin 0 -> 1970 bytes data/{vk => icons/32x32}/group.png | Bin data/icons/32x32/link.png | Bin 0 -> 1388 bytes data/icons/32x32/qtlogo.png | Bin 0 -> 1331 bytes data/icons/32x32/spotify.png | Bin 2182 -> 0 bytes data/icons/48x48/audio-volume-muted.png | Bin 0 -> 3227 bytes data/icons/48x48/group.png | Bin 0 -> 1314 bytes data/icons/48x48/link.png | Bin 0 -> 2202 bytes data/icons/48x48/qtlogo.png | Bin 0 -> 2022 bytes data/icons/48x48/spotify.png | Bin 3456 -> 0 bytes data/last.fm/love.png | Bin 1894 -> 1710 bytes data/last.fm/loved_radio.png | Bin 936 -> 733 bytes data/providers/22x22/amazon.png | Bin 0 -> 1242 bytes data/providers/22x22/amazonclouddrive.png | Bin 0 -> 1489 bytes data/providers/22x22/aol.png | Bin 0 -> 1397 bytes data/providers/22x22/bbc.png | Bin 0 -> 1137 bytes data/providers/22x22/box.png | Bin 0 -> 1655 bytes data/providers/22x22/cdbaby.png | Bin 0 -> 1601 bytes data/providers/22x22/digitallyimported.png | Bin 0 -> 747 bytes data/providers/22x22/dropbox.png | Bin 0 -> 1468 bytes data/providers/22x22/echonest.png | Bin 0 -> 1081 bytes data/providers/22x22/googledrive.png | Bin 0 -> 1338 bytes data/providers/22x22/itunes.png | Bin 0 -> 1799 bytes data/providers/22x22/jamendo.png | Bin 0 -> 1408 bytes data/providers/22x22/jazzradio.png | Bin 0 -> 1288 bytes data/providers/22x22/lastfm.png | Bin 0 -> 1833 bytes data/providers/22x22/magnatune.png | Bin 0 -> 1540 bytes data/providers/22x22/mog.png | Bin 0 -> 894 bytes data/providers/22x22/mtvmusic.png | Bin 0 -> 681 bytes data/providers/22x22/musicbrainz.png | Bin 0 -> 1325 bytes data/providers/22x22/mygpo.png | Bin 0 -> 1537 bytes data/providers/22x22/myspace.png | Bin 0 -> 1422 bytes data/providers/22x22/podcast.png | Bin 0 -> 1492 bytes data/providers/22x22/radiotunes.png | Bin 0 -> 1153 bytes data/providers/22x22/rockradio.png | Bin 0 -> 1294 bytes data/providers/22x22/seafile.png | Bin 0 -> 1146 bytes data/providers/22x22/skydrive.png | Bin 0 -> 1001 bytes data/providers/22x22/somafm.png | Bin 0 -> 1431 bytes data/providers/22x22/songkick.png | Bin 0 -> 1144 bytes data/providers/22x22/soundcloud.png | Bin 0 -> 841 bytes data/providers/22x22/spotify.png | Bin 0 -> 1409 bytes data/providers/22x22/subsonic.png | Bin 0 -> 1232 bytes data/providers/22x22/vk.png | Bin 0 -> 1308 bytes data/providers/22x22/wikipedia.png | Bin 0 -> 1733 bytes data/providers/32x32/amazon.png | Bin 0 -> 1802 bytes data/providers/32x32/amazonclouddrive.png | Bin 0 -> 2474 bytes data/providers/32x32/aol.png | Bin 0 -> 1017 bytes data/providers/32x32/bbc.png | Bin 0 -> 1552 bytes data/providers/32x32/box.png | Bin 0 -> 2681 bytes data/providers/32x32/cdbaby.png | Bin 0 -> 1778 bytes data/providers/32x32/digitallyimported.png | Bin 0 -> 1958 bytes data/providers/32x32/dropbox.png | Bin 0 -> 2186 bytes data/providers/32x32/echonest.png | Bin 0 -> 2157 bytes data/providers/32x32/googledrive.png | Bin 0 -> 1717 bytes data/providers/32x32/itunes.png | Bin 0 -> 2964 bytes data/providers/32x32/jamendo.png | Bin 0 -> 1679 bytes data/providers/32x32/jazzradio.png | Bin 0 -> 2606 bytes data/providers/32x32/lastfm.png | Bin 0 -> 1621 bytes data/providers/32x32/magnatune.png | Bin 0 -> 2612 bytes data/providers/32x32/mog.png | Bin 0 -> 2391 bytes data/providers/32x32/mtvmusic.png | Bin 0 -> 1801 bytes data/providers/32x32/musicbrainz.png | Bin 0 -> 2116 bytes data/providers/32x32/mygpo.png | Bin 0 -> 1569 bytes data/providers/32x32/myspace.png | Bin 0 -> 2193 bytes data/providers/32x32/podcast.png | Bin 0 -> 2427 bytes data/providers/32x32/radiotunes.png | Bin 0 -> 1715 bytes data/providers/32x32/rockradio.png | Bin 0 -> 2537 bytes data/providers/32x32/seafile.png | Bin 0 -> 1461 bytes data/providers/32x32/skydrive.png | Bin 0 -> 1563 bytes data/providers/32x32/somafm.png | Bin 0 -> 2004 bytes data/providers/32x32/songkick.png | Bin 0 -> 2855 bytes data/providers/32x32/soundcloud.png | Bin 0 -> 2181 bytes data/providers/32x32/spotify.png | Bin 0 -> 2418 bytes data/providers/32x32/subsonic.png | Bin 0 -> 2481 bytes data/providers/32x32/vk.png | Bin 0 -> 1502 bytes data/providers/32x32/wikipedia.png | Bin 0 -> 1271 bytes data/providers/48x48/amazon.png | Bin 0 -> 2460 bytes data/providers/48x48/amazonclouddrive.png | Bin 0 -> 4013 bytes data/providers/48x48/aol.png | Bin 0 -> 1920 bytes data/providers/48x48/bbc.png | Bin 0 -> 1992 bytes data/providers/{ => 48x48}/box.png | Bin data/providers/48x48/cdbaby.png | Bin 0 -> 1829 bytes data/providers/48x48/digitallyimported.png | Bin 0 -> 2588 bytes data/providers/48x48/dropbox.png | Bin 0 -> 3157 bytes data/providers/48x48/echonest.png | Bin 0 -> 2563 bytes data/providers/48x48/googledrive.png | Bin 0 -> 1773 bytes data/providers/48x48/itunes.png | Bin 0 -> 5029 bytes data/providers/48x48/jamendo.png | Bin 0 -> 2305 bytes data/providers/48x48/jazzradio.png | Bin 0 -> 4250 bytes data/providers/48x48/lastfm.png | Bin 0 -> 2206 bytes data/providers/48x48/magnatune.png | Bin 0 -> 3878 bytes data/providers/48x48/mog.png | Bin 0 -> 3555 bytes data/providers/48x48/mtvmusic.png | Bin 0 -> 2362 bytes data/providers/48x48/musicbrainz.png | Bin 0 -> 3319 bytes data/providers/48x48/mygpo.png | Bin 0 -> 2538 bytes data/providers/48x48/myspace.png | Bin 0 -> 2926 bytes data/providers/48x48/podcast.png | Bin 0 -> 3347 bytes data/providers/48x48/radiotunes.png | Bin 0 -> 2275 bytes data/providers/48x48/rockradio.png | Bin 0 -> 4760 bytes data/providers/48x48/seafile.png | Bin 0 -> 2206 bytes data/providers/48x48/skydrive.png | Bin 0 -> 4377 bytes data/providers/48x48/somafm.png | Bin 0 -> 3345 bytes data/providers/48x48/songkick.png | Bin 0 -> 4852 bytes data/providers/48x48/soundcloud.png | Bin 0 -> 2933 bytes data/providers/48x48/spotify.png | Bin 0 -> 3080 bytes data/providers/48x48/subsonic.png | Bin 0 -> 4047 bytes data/providers/48x48/vk.png | Bin 0 -> 1984 bytes data/providers/48x48/wikipedia.png | Bin 0 -> 3498 bytes data/providers/amazon.png | Bin 1264 -> 0 bytes data/providers/amazonclouddrive.png | Bin 3102 -> 0 bytes data/providers/aol.png | Bin 971 -> 0 bytes data/providers/bbc.png | Bin 565 -> 0 bytes data/providers/cdbaby.png | Bin 484 -> 0 bytes data/providers/digitallyimported-32.png | Bin 1204 -> 0 bytes data/providers/digitallyimported.png | Bin 182 -> 0 bytes data/providers/dropbox.png | Bin 3475 -> 0 bytes data/providers/echonest.png | Bin 309 -> 0 bytes data/providers/googledrive.png | Bin 2148 -> 0 bytes data/providers/itunes.png | Bin 5201 -> 0 bytes data/providers/jamendo.png | Bin 1496 -> 0 bytes data/providers/jazzradio.png | Bin 411 -> 0 bytes data/providers/magnatune.png | Bin 4968 -> 0 bytes data/providers/mog.png | Bin 272 -> 0 bytes data/providers/mtvmusic.png | Bin 611 -> 0 bytes data/providers/musicbrainz.png | Bin 1611 -> 0 bytes data/providers/mygpo32.png | Bin 2834 -> 0 bytes data/providers/myspace.png | Bin 1060 -> 0 bytes data/providers/podcast16.png | Bin 727 -> 0 bytes data/providers/podcast32.png | Bin 1213 -> 0 bytes data/providers/radiotunes.png | Bin 595 -> 0 bytes data/providers/rockradio.png | Bin 318 -> 0 bytes data/providers/seafile.png | Bin 2311 -> 0 bytes data/providers/skydrive.png | Bin 3469 -> 0 bytes data/providers/somafm.png | Bin 527 -> 0 bytes data/providers/songkick.png | Bin 764 -> 0 bytes data/providers/soundcloud.png | Bin 25751 -> 0 bytes data/providers/subsonic-32.png | Bin 1622 -> 0 bytes data/providers/subsonic.png | Bin 665 -> 0 bytes data/providers/vk.png | Bin 2287 -> 0 bytes data/providers/wikipedia.png | Bin 3203 -> 0 bytes data/vk/add.png | Bin 185 -> 0 bytes data/vk/bookmarks.png | Bin 655 -> 0 bytes data/vk/deactivated.gif | Bin 1107 -> 0 bytes data/vk/delete.png | Bin 351 -> 0 bytes data/vk/discography.png | Bin 486 -> 0 bytes data/vk/download.png | Bin 323 -> 0 bytes data/vk/edit.png | Bin 412 -> 0 bytes data/vk/find.png | Bin 570 -> 0 bytes data/vk/link.png | Bin 563 -> 0 bytes data/vk/my_music.png | Bin 652 -> 0 bytes data/vk/play_alt.png | Bin 480 -> 0 bytes data/vk/playlist.png | Bin 197 -> 0 bytes data/vk/recommends.png | Bin 422 -> 0 bytes data/vk/remove.png | Bin 142 -> 0 bytes data/vk/upload.png | Bin 316 -> 0 bytes data/vk/user.png | Bin 430 -> 0 bytes src/core/utilities.cpp | 3 + src/core/utilities.h | 1 + src/devices/devicemanager.cpp | 8 +- src/devices/deviceproperties.cpp | 3 +- src/devices/deviceview.cpp | 22 ++- src/devices/deviceviewcontainer.cpp | 6 +- src/globalsearch/globalsearchmodel.cpp | 5 +- src/globalsearch/globalsearchsettingspage.cpp | 3 +- src/globalsearch/globalsearchview.cpp | 18 +- src/globalsearch/icecastsearchprovider.cpp | 3 +- src/globalsearch/savedradiosearchprovider.cpp | 3 +- src/globalsearch/soundcloudsearchprovider.cpp | 6 +- src/globalsearch/spotifysearchprovider.cpp | 3 +- src/globalsearch/urlsearchprovider.cpp | 2 +- src/globalsearch/vksearchprovider.cpp | 6 +- src/internet/amazon/amazonclouddrive.cpp | 3 +- src/internet/amazon/amazonsettingspage.cpp | 3 + src/internet/box/boxservice.cpp | 4 +- src/internet/box/boxsettingspage.cpp | 3 + src/internet/core/cloudfileservice.cpp | 10 +- src/internet/core/internetservice.cpp | 9 +- .../core/internetshowsettingspage.cpp | 2 + src/internet/core/searchboxwidget.cpp | 4 +- .../digitallyimportedservicebase.cpp | 24 ++- .../digitallyimportedsettingspage.cpp | 3 +- .../digitally/digitallyimportedurlhandler.cpp | 9 +- src/internet/dropbox/dropboxservice.cpp | 3 +- src/internet/dropbox/dropboxsettingspage.cpp | 3 + .../googledrive/googledriveservice.cpp | 23 +-- .../googledrive/googledrivesettingspage.cpp | 3 + src/internet/icecast/icecastfilterwidget.cpp | 2 +- src/internet/icecast/icecastmodel.cpp | 6 +- src/internet/icecast/icecastservice.cpp | 7 +- src/internet/internetradio/savedradio.cpp | 21 ++- src/internet/jamendo/jamendoservice.cpp | 15 +- src/internet/lastfm/lastfmsettingspage.cpp | 2 +- src/internet/magnatune/magnatuneservice.cpp | 17 +- .../magnatune/magnatunesettingspage.cpp | 3 +- src/internet/podcasts/addpodcastbyurl.cpp | 2 + src/internet/podcasts/addpodcastdialog.cpp | 15 +- src/internet/podcasts/gpoddersearchpage.cpp | 2 + src/internet/podcasts/gpoddertoptagspage.cpp | 3 +- src/internet/podcasts/itunessearchpage.cpp | 2 + .../podcasts/podcastdiscoverymodel.cpp | 4 +- src/internet/podcasts/podcastservice.cpp | 44 ++--- src/internet/podcasts/podcastsettingspage.cpp | 3 + src/internet/seafile/seafileservice.cpp | 3 +- src/internet/seafile/seafilesettingspage.cpp | 2 +- src/internet/skydrive/skydriveservice.cpp | 3 +- .../skydrive/skydrivesettingspage.cpp | 3 + src/internet/somafm/somafmservice.cpp | 14 +- src/internet/soundcloud/soundcloudservice.cpp | 8 +- .../soundcloud/soundcloudsettingspage.cpp | 3 + src/internet/spotify/spotifyservice.cpp | 22 ++- src/internet/spotify/spotifysettingspage.cpp | 2 +- src/internet/subsonic/subsonicservice.cpp | 11 +- .../subsonic/subsonicsettingspage.cpp | 3 +- src/internet/vk/vksearchdialog.cpp | 5 +- src/internet/vk/vkservice.cpp | 69 +++++--- src/internet/vk/vksettingspage.cpp | 3 + src/library/librarydirectorymodel.cpp | 2 +- src/library/libraryfilterwidget.cpp | 2 +- src/library/librarymodel.cpp | 8 +- src/library/librarysettingspage.cpp | 4 +- src/library/libraryview.cpp | 43 ++--- src/playlist/playlistcontainer.cpp | 4 +- src/playlist/playlistdelegates.cpp | 10 +- src/playlist/playlistlistcontainer.cpp | 10 +- src/playlist/playlistsequence.cpp | 4 +- src/playlist/playlisttabbar.cpp | 6 +- src/playlist/queuemanager.cpp | 8 +- src/ripper/ripcddialog.cpp | 2 +- src/smartplaylists/searchtermwidget.cpp | 4 +- src/songinfo/echonestbiographies.cpp | 17 +- src/songinfo/echonestsimilarartists.cpp | 4 +- src/songinfo/echonesttags.cpp | 3 +- src/songinfo/lastfmtrackinfoprovider.cpp | 14 +- src/songinfo/songinfosettingspage.cpp | 2 +- src/songinfo/songkickconcerts.cpp | 3 +- src/transcoder/transcodedialog.cpp | 2 +- src/transcoder/transcodersettingspage.cpp | 2 +- src/ui/albumcoverchoicecontroller.cpp | 16 +- src/ui/albumcovermanager.cpp | 16 +- src/ui/appearancesettingspage.cpp | 2 +- src/ui/backgroundstreamssettingspage.cpp | 2 +- src/ui/edittagdialog.cpp | 7 +- src/ui/equalizer.cpp | 4 +- src/ui/globalshortcutssettingspage.cpp | 2 +- src/ui/iconloader.cpp | 64 ++++++- src/ui/iconloader.h | 10 +- src/ui/mainwindow.cpp | 144 ++++++++-------- src/ui/networkproxysettingspage.cpp | 2 +- src/ui/networkremotesettingspage.cpp | 2 +- src/ui/notificationssettingspage.cpp | 6 +- src/ui/organisedialog.cpp | 2 +- src/ui/playbacksettingspage.cpp | 4 +- src/ui/qtsystemtrayicon.cpp | 10 +- src/ui/trackselectiondialog.cpp | 6 +- src/visualisations/visualisationcontainer.cpp | 6 +- src/visualisations/visualisationoverlay.cpp | 2 +- src/widgets/fileview.cpp | 8 +- src/widgets/fileviewlist.cpp | 30 ++-- src/widgets/lineedit.cpp | 2 +- src/widgets/loginstatewidget.cpp | 2 +- src/widgets/prettyimage.cpp | 6 +- src/wiimotedev/wiimotesettingspage.cpp | 3 +- 269 files changed, 712 insertions(+), 459 deletions(-) create mode 100644 data/icons/22x22/audio-volume-muted.png create mode 100644 data/icons/22x22/group.png create mode 100644 data/icons/22x22/link.png create mode 100644 data/icons/22x22/qtlogo.png delete mode 100644 data/icons/22x22/spotify.png create mode 100644 data/icons/32x32/audio-volume-muted.png rename data/{vk => icons/32x32}/group.png (100%) create mode 100644 data/icons/32x32/link.png create mode 100644 data/icons/32x32/qtlogo.png delete mode 100644 data/icons/32x32/spotify.png create mode 100644 data/icons/48x48/audio-volume-muted.png create mode 100644 data/icons/48x48/group.png create mode 100644 data/icons/48x48/link.png create mode 100644 data/icons/48x48/qtlogo.png delete mode 100644 data/icons/48x48/spotify.png create mode 100644 data/providers/22x22/amazon.png create mode 100644 data/providers/22x22/amazonclouddrive.png create mode 100644 data/providers/22x22/aol.png create mode 100644 data/providers/22x22/bbc.png create mode 100644 data/providers/22x22/box.png create mode 100644 data/providers/22x22/cdbaby.png create mode 100644 data/providers/22x22/digitallyimported.png create mode 100644 data/providers/22x22/dropbox.png create mode 100644 data/providers/22x22/echonest.png create mode 100644 data/providers/22x22/googledrive.png create mode 100644 data/providers/22x22/itunes.png create mode 100644 data/providers/22x22/jamendo.png create mode 100644 data/providers/22x22/jazzradio.png create mode 100644 data/providers/22x22/lastfm.png create mode 100644 data/providers/22x22/magnatune.png create mode 100644 data/providers/22x22/mog.png create mode 100644 data/providers/22x22/mtvmusic.png create mode 100644 data/providers/22x22/musicbrainz.png create mode 100644 data/providers/22x22/mygpo.png create mode 100644 data/providers/22x22/myspace.png create mode 100644 data/providers/22x22/podcast.png create mode 100644 data/providers/22x22/radiotunes.png create mode 100644 data/providers/22x22/rockradio.png create mode 100644 data/providers/22x22/seafile.png create mode 100644 data/providers/22x22/skydrive.png create mode 100644 data/providers/22x22/somafm.png create mode 100644 data/providers/22x22/songkick.png create mode 100644 data/providers/22x22/soundcloud.png create mode 100644 data/providers/22x22/spotify.png create mode 100644 data/providers/22x22/subsonic.png create mode 100644 data/providers/22x22/vk.png create mode 100644 data/providers/22x22/wikipedia.png create mode 100644 data/providers/32x32/amazon.png create mode 100644 data/providers/32x32/amazonclouddrive.png create mode 100644 data/providers/32x32/aol.png create mode 100644 data/providers/32x32/bbc.png create mode 100644 data/providers/32x32/box.png create mode 100644 data/providers/32x32/cdbaby.png create mode 100644 data/providers/32x32/digitallyimported.png create mode 100644 data/providers/32x32/dropbox.png create mode 100644 data/providers/32x32/echonest.png create mode 100644 data/providers/32x32/googledrive.png create mode 100644 data/providers/32x32/itunes.png create mode 100644 data/providers/32x32/jamendo.png create mode 100644 data/providers/32x32/jazzradio.png create mode 100644 data/providers/32x32/lastfm.png create mode 100644 data/providers/32x32/magnatune.png create mode 100644 data/providers/32x32/mog.png create mode 100644 data/providers/32x32/mtvmusic.png create mode 100644 data/providers/32x32/musicbrainz.png create mode 100644 data/providers/32x32/mygpo.png create mode 100644 data/providers/32x32/myspace.png create mode 100644 data/providers/32x32/podcast.png create mode 100644 data/providers/32x32/radiotunes.png create mode 100644 data/providers/32x32/rockradio.png create mode 100644 data/providers/32x32/seafile.png create mode 100644 data/providers/32x32/skydrive.png create mode 100644 data/providers/32x32/somafm.png create mode 100644 data/providers/32x32/songkick.png create mode 100644 data/providers/32x32/soundcloud.png create mode 100644 data/providers/32x32/spotify.png create mode 100644 data/providers/32x32/subsonic.png create mode 100644 data/providers/32x32/vk.png create mode 100644 data/providers/32x32/wikipedia.png create mode 100644 data/providers/48x48/amazon.png create mode 100644 data/providers/48x48/amazonclouddrive.png create mode 100644 data/providers/48x48/aol.png create mode 100644 data/providers/48x48/bbc.png rename data/providers/{ => 48x48}/box.png (100%) create mode 100644 data/providers/48x48/cdbaby.png create mode 100644 data/providers/48x48/digitallyimported.png create mode 100644 data/providers/48x48/dropbox.png create mode 100644 data/providers/48x48/echonest.png create mode 100644 data/providers/48x48/googledrive.png create mode 100644 data/providers/48x48/itunes.png create mode 100644 data/providers/48x48/jamendo.png create mode 100644 data/providers/48x48/jazzradio.png create mode 100644 data/providers/48x48/lastfm.png create mode 100644 data/providers/48x48/magnatune.png create mode 100644 data/providers/48x48/mog.png create mode 100644 data/providers/48x48/mtvmusic.png create mode 100644 data/providers/48x48/musicbrainz.png create mode 100644 data/providers/48x48/mygpo.png create mode 100644 data/providers/48x48/myspace.png create mode 100644 data/providers/48x48/podcast.png create mode 100644 data/providers/48x48/radiotunes.png create mode 100644 data/providers/48x48/rockradio.png create mode 100644 data/providers/48x48/seafile.png create mode 100644 data/providers/48x48/skydrive.png create mode 100644 data/providers/48x48/somafm.png create mode 100644 data/providers/48x48/songkick.png create mode 100644 data/providers/48x48/soundcloud.png create mode 100644 data/providers/48x48/spotify.png create mode 100644 data/providers/48x48/subsonic.png create mode 100644 data/providers/48x48/vk.png create mode 100644 data/providers/48x48/wikipedia.png delete mode 100644 data/providers/amazon.png delete mode 100644 data/providers/amazonclouddrive.png delete mode 100644 data/providers/aol.png delete mode 100644 data/providers/bbc.png delete mode 100644 data/providers/cdbaby.png delete mode 100644 data/providers/digitallyimported-32.png delete mode 100644 data/providers/digitallyimported.png delete mode 100644 data/providers/dropbox.png delete mode 100644 data/providers/echonest.png delete mode 100644 data/providers/googledrive.png delete mode 100644 data/providers/itunes.png delete mode 100644 data/providers/jamendo.png delete mode 100644 data/providers/jazzradio.png delete mode 100644 data/providers/magnatune.png delete mode 100644 data/providers/mog.png delete mode 100644 data/providers/mtvmusic.png delete mode 100644 data/providers/musicbrainz.png delete mode 100644 data/providers/mygpo32.png delete mode 100644 data/providers/myspace.png delete mode 100644 data/providers/podcast16.png delete mode 100644 data/providers/podcast32.png delete mode 100644 data/providers/radiotunes.png delete mode 100644 data/providers/rockradio.png delete mode 100644 data/providers/seafile.png delete mode 100644 data/providers/skydrive.png delete mode 100644 data/providers/somafm.png delete mode 100644 data/providers/songkick.png delete mode 100644 data/providers/soundcloud.png delete mode 100644 data/providers/subsonic-32.png delete mode 100644 data/providers/subsonic.png delete mode 100644 data/providers/vk.png delete mode 100644 data/providers/wikipedia.png delete mode 100644 data/vk/add.png delete mode 100644 data/vk/bookmarks.png delete mode 100644 data/vk/deactivated.gif delete mode 100644 data/vk/delete.png delete mode 100644 data/vk/discography.png delete mode 100644 data/vk/download.png delete mode 100644 data/vk/edit.png delete mode 100644 data/vk/find.png delete mode 100644 data/vk/link.png delete mode 100644 data/vk/my_music.png delete mode 100644 data/vk/play_alt.png delete mode 100644 data/vk/playlist.png delete mode 100644 data/vk/recommends.png delete mode 100644 data/vk/remove.png delete mode 100644 data/vk/upload.png delete mode 100644 data/vk/user.png diff --git a/3rdparty/qocoa/qsearchfield_nonmac.cpp b/3rdparty/qocoa/qsearchfield_nonmac.cpp index f5d16157c..cf9dc4ee2 100644 --- a/3rdparty/qocoa/qsearchfield_nonmac.cpp +++ b/3rdparty/qocoa/qsearchfield_nonmac.cpp @@ -63,7 +63,7 @@ QSearchField::QSearchField(QWidget *parent) : QWidget(parent) connect(lineEdit, SIGNAL(textChanged(QString)), this, SLOT(setText(QString))); - QIcon clearIcon(IconLoader::Load("edit-clear-locationbar-ltr")); + QIcon clearIcon(IconLoader::Load("edit-clear-locationbar-ltr", IconLoader::Base)); QToolButton *clearButton = new QToolButton(this); clearButton->setIcon(clearIcon); diff --git a/data/data.qrc b/data/data.qrc index d2907b238..85a094fc2 100644 --- a/data/data.qrc +++ b/data/data.qrc @@ -47,12 +47,14 @@ icons/22x22/go-next.png icons/22x22/go-previous.png icons/22x22/go-up.png + icons/22x22/group.png icons/22x22/help-about.png icons/22x22/help-hint.png icons/22x22/hypnotoad.png icons/22x22/input-keyboard.png icons/22x22/ipodtouchicon.png icons/22x22/kittens.png + icons/22x22/link.png icons/22x22/list-add.png icons/22x22/list-remove.png icons/22x22/mail-message.png @@ -83,7 +85,7 @@ icons/22x22/phone-nokia-n900.png icons/22x22/phone-palm-pre.png icons/22x22/phone.png - icons/22x22/spotify.png + icons/22x22/qtlogo.png icons/22x22/user-away.png icons/22x22/view-choose.png icons/22x22/view-fullscreen.png @@ -126,12 +128,15 @@ icons/32x32/go-next.png icons/32x32/go-previous.png icons/32x32/go-up.png + icons/32x32/group.png icons/32x32/help-about.png icons/32x32/help-hint.png icons/32x32/hypnotoad.png icons/32x32/input-keyboard.png + icons/32x32/internet-services.png icons/32x32/ipodtouchicon.png icons/32x32/kittens.png + icons/32x32/link.png icons/32x32/list-add.png icons/32x32/list-remove.png icons/32x32/mail-message.png @@ -162,8 +167,8 @@ icons/32x32/phone-nokia-n900.png icons/32x32/phone-palm-pre.png icons/32x32/phone.png + icons/32x32/qtlogo.png icons/32x32/search.png - icons/32x32/spotify.png icons/32x32/tools-wizard.png icons/32x32/view-choose.png icons/32x32/view-fullscreen.png @@ -205,12 +210,14 @@ icons/48x48/go-next.png icons/48x48/go-previous.png icons/48x48/go-up.png + icons/48x48/group.png icons/48x48/help-about.png icons/48x48/help-hint.png icons/48x48/hypnotoad.png icons/48x48/input-keyboard.png icons/48x48/ipodtouchicon.png icons/48x48/kittens.png + icons/48x48/link.png icons/48x48/list-add.png icons/48x48/list-remove.png icons/48x48/mail-message.png @@ -242,7 +249,7 @@ icons/48x48/phone-nokia-n900.png icons/48x48/phone-palm-pre.png icons/48x48/phone.png - icons/48x48/spotify.png + icons/48x48/qtlogo.png icons/48x48/view-choose.png icons/48x48/view-fullscreen.png icons/48x48/view-media-equalizer.png @@ -309,36 +316,102 @@ playstore/tr_generic_rgb_wo_45.png playstore/uk_generic_rgb_wo_45.png playstore/vi_generic_rgb_wo_45.png - providers/amazon.png - providers/amazonclouddrive.png - providers/aol.png - providers/bbc.png - providers/box.png - providers/cdbaby.png - providers/digitallyimported-32.png - providers/digitallyimported.png - providers/dropbox.png - providers/echonest.png - providers/googledrive.png - providers/itunes.png - providers/jamendo.png - providers/jazzradio.png - providers/magnatune.png - providers/mog.png - providers/mtvmusic.png - providers/musicbrainz.png - providers/mygpo32.png - providers/myspace.png - providers/podcast16.png - providers/podcast32.png - providers/rockradio.png - providers/skydrive.png - providers/somafm.png - providers/songkick.png - providers/soundcloud.png - providers/subsonic-32.png - providers/subsonic.png - providers/wikipedia.png + providers/22x22/amazon.png + providers/22x22/amazonclouddrive.png + providers/22x22/aol.png + providers/22x22/bbc.png + providers/22x22/box.png + providers/22x22/cdbaby.png + providers/22x22/digitallyimported.png + providers/22x22/dropbox.png + providers/22x22/echonest.png + providers/22x22/googledrive.png + providers/22x22/itunes.png + providers/22x22/jamendo.png + providers/22x22/jazzradio.png + providers/22x22/lastfm.png + providers/22x22/magnatune.png + providers/22x22/mog.png + providers/22x22/mtvmusic.png + providers/22x22/musicbrainz.png + providers/22x22/mygpo.png + providers/22x22/myspace.png + providers/22x22/podcast.png + providers/22x22/radiotunes.png + providers/22x22/rockradio.png + providers/22x22/seafile.png + providers/22x22/skydrive.png + providers/22x22/somafm.png + providers/22x22/songkick.png + providers/22x22/soundcloud.png + providers/22x22/spotify.png + providers/22x22/subsonic.png + providers/22x22/vk.png + providers/22x22/wikipedia.png + providers/32x32/amazon.png + providers/32x32/amazonclouddrive.png + providers/32x32/aol.png + providers/32x32/bbc.png + providers/32x32/box.png + providers/32x32/cdbaby.png + providers/32x32/digitallyimported.png + providers/32x32/dropbox.png + providers/32x32/echonest.png + providers/32x32/googledrive.png + providers/32x32/itunes.png + providers/32x32/jamendo.png + providers/32x32/jazzradio.png + providers/32x32/lastfm.png + providers/32x32/magnatune.png + providers/32x32/mog.png + providers/32x32/mtvmusic.png + providers/32x32/musicbrainz.png + providers/32x32/mygpo.png + providers/32x32/myspace.png + providers/32x32/podcast.png + providers/32x32/radiotunes.png + providers/32x32/rockradio.png + providers/32x32/seafile.png + providers/32x32/skydrive.png + providers/32x32/somafm.png + providers/32x32/songkick.png + providers/32x32/soundcloud.png + providers/32x32/spotify.png + providers/32x32/subsonic.png + providers/32x32/vk.png + providers/32x32/wikipedia.png + providers/48x48/amazon.png + providers/48x48/amazonclouddrive.png + providers/48x48/aol.png + providers/48x48/bbc.png + providers/48x48/box.png + providers/48x48/cdbaby.png + providers/48x48/digitallyimported.png + providers/48x48/dropbox.png + providers/48x48/echonest.png + providers/48x48/googledrive.png + providers/48x48/itunes.png + providers/48x48/jamendo.png + providers/48x48/jazzradio.png + providers/48x48/lastfm.png + providers/48x48/magnatune.png + providers/48x48/mog.png + providers/48x48/mtvmusic.png + providers/48x48/musicbrainz.png + providers/48x48/mygpo.png + providers/48x48/myspace.png + providers/48x48/podcast.png + providers/48x48/radiotunes.png + providers/48x48/rockradio.png + providers/48x48/seafile.png + providers/48x48/skydrive.png + providers/48x48/somafm.png + providers/48x48/songkick.png + providers/48x48/soundcloud.png + providers/48x48/spotify.png + providers/48x48/subsonic.png + providers/48x48/vk.png + providers/48x48/wikipedia.png rainbowdash.png sample.mood schema/device-schema.sql @@ -407,26 +480,5 @@ volumeslider-gradient.png volumeslider-handle_glow.png volumeslider-handle.png - vk/add.png - vk/bookmarks.png - vk/delete.png - vk/discography.png - vk/download.png - vk/edit.png - vk/find.png - vk/group.png - vk/my_music.png - vk/play_alt.png - vk/playlist.png - vk/recommends.png - vk/remove.png - vk/upload.png - vk/user.png - vk/deactivated.gif - providers/vk.png - vk/link.png - providers/seafile.png - icons/32x32/internet-services.png - providers/radiotunes.png diff --git a/data/icons/22x22/audio-volume-muted.png b/data/icons/22x22/audio-volume-muted.png new file mode 100644 index 0000000000000000000000000000000000000000..9b9c0c02534fa5726654881999ce4edf83f16f94 GIT binary patch literal 1043 zcmV+u1nm2XP)b zmECI`RT##fGc!Ben$6xg8@j=^>l#$bLP%U|O08BwG*+R?x@}0H*ZvE+Dc@ys*t%VDKb z3IB(jy*5-T74}3fIL#Py_XB2oInE6Y{_Hr;vxcaiI{5gp#l=P43wTe*hG_WgTjhgf zC=aZ9JsN&AIG<1VYa%C?%Ry_xYOmBsf%ExvzjgbskRfbtZh(leAM!)Nxm++{+`b!y z!tnE?4H5|-THAg21-hB#h6d-1q1Rl;y$YZ(_QH#YP8>h!Ei7Dz@B1)B-9yL6Mn5pd zPVYXyOB!G^-4|gPy*+vE0zUofqt{FCzGn-^hMi0>03rk5_n{3jpj~l9X1Z8>&O316 zF#r}?YbdRtlmc&Y@Ak^=X%7Gr3FiXm0-4MJ1edHhGR9J=6t=duprk?^#~@8kCKG%e zhT*sn!t?zkW@l#s0FzS__~hfy002`{lMq699spQ|4`VKn&1Rt#A(`~Ca%UO0mTo~P zi7*VI$>45%{WN3jNg*VRG2L(9fdYWF7DCAO&m*D?k0q9tmJmfTR(@SUy+5L691e3JghUiY&_syB z_H2l*K7HiKZ$d~Yt?|X@Up@f7eEA9t(S663=zY#58jS|xSlI8YKN!XsV$MOD+EHk2 zQqLsc0nm1=R2Mk@<{RBL5kX4PE*EQ^InD*v*4Dtep!xav-$zGA4h?1pJx#QevBfHY z01#5@D2lv^iSylD%jGf*5n8PnLQ35&Hzn!XxAWhPxsLlIk9fIyZK0YwdiW@5lMJJ% z-FY1u(leJX&HZZ~yRJLa?YyDf;g|09_x1hq)55Fibox)e9Tu0D@7z#YBML)keIFc0 z>Y|n=p`~FD83_@qi(Rm_mWn~ZOQn(lfNVCqy`j|jPR6?(_aYAfDwT={zz2}%JaYjs z05*8#WfO*>qqV_b8yj8_1U-RS2a@azf7k2*&?iov`o?kHr>wPWOE+(hHk-|;R4VOh z-|1|M0fYdy0sIYM6Tlw;Hm_H!C&PQKvyED<&}=rhdw~KyTuuK~{{RJu{$09(j1d3; N002ovPDHLkV1oRn*JuC$ literal 0 HcmV?d00001 diff --git a/data/icons/22x22/group.png b/data/icons/22x22/group.png new file mode 100644 index 0000000000000000000000000000000000000000..332d0590c5616325eac6c967fe4b0f2036920ade GIT binary patch literal 534 zcmV+x0_pvUP)2nb^32e5Qjcp!pSn#Dqcg)p735=9C4rx6j0 zA^OBBbs8}UHa3E&g`_hdz@XyVybWQQ*^SPgYIyg};mkef-YLugA*Kb~#U8AoU(A5? z9G1t9*LodE;Y35}R43xPDq*9cwAt&RREVjExrQr?MaNb=!eu=;ncN!-{Fk~auV<$xVeho`v<=AjDerAeOHLc{%WP;H_Jx>^=j7~+ zI6J+LV-4iLve}36A;fgC&A_5+oScLQ zd}LSER+}Fn=1Bn5eTSI+z}{@!Ao452gBKbCUJj!xh^YYJ+!<>AOU$k9CtqwM@?Zv^ zk{!yhi1A*|CMQIG!2EllfVw*HW9fm)ATHALh94qzIxls^m2sBA|ltIKXSEmKc%rN8MH^YbAZCg zmnl?1wN0%&3%0kdE!$#hbfs@8XP2?PnQfYOH^w>r{AHXyh_jP8cZg_u3V?c`gJ8Kq zOjl7ii+G!eq?&GZ#wm<^jk6Pcvwo3_OE)(Xb8984t>pn|gUEjl<^2o_wtI-eXbUkp zME2bZnu7C1ACZ}U_9MT-LIdi-qqu)QOly+?!3=Fi z9z*2gbf|4kWnCW3zUny~N5S^~+x;7ZQ@g!|@m|Q_Kczo!Z*m}}hj)4w7{UZ<jaUPQPZWfj$!da${h)9YXMJ3K2f9IT;olUk$)|gZzRg*}xsfLEORt>B%#>AjfQL252V!eR0l(zVw zQV^FuiHa{#U&L18gCL@yqAlp6MntT6@J6vEm4JF_EGUdS^S53z9$mEd-@EGU-{s0<*0U!*-05=#2xv9aMN(^G|+0SQX*R8Ia zNF?UIZMH6OA9w^j1)6{(LkWygNnFefuSDzQw;IO=B|)PRVt6JJC`;S`6M)|n36ZbW zp+}yby)km4E7>;h6gvawsV)8vK_an}!z5o(sy|5$2DH}rvlP6j;-{(~2-~mNdSVw9 z1#9@`lV6G0VRCgP-Vta#g!?|Ee9CN0=_T;ddXzNN13Mb* zNNl)qwj0M(5=~@K@^v#gaPb6T`y~y{Yl%CN^uVA&nThK4;H62sQe}rkeNalU^l6{wU<2o@ce)%rHtI-KqC{;ko`gz-CoGX#3uiNfMTb87e8 rTs$M#v?%Lc&b*PRDM0HM-dFq&x%(1F;@~~w00000NkvXXu0mjf^7*8u literal 0 HcmV?d00001 diff --git a/data/icons/22x22/spotify.png b/data/icons/22x22/spotify.png deleted file mode 100644 index b9100b5953606cc1d735d0108f4163b2fb406344..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1302 zcmV+x1?l>UP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01ejw01ejxLMWSf00007bV*G`2ipq; z4>2qY`l|x~00fpvL_t(I%Y~IqY*bYg$A9PCJ0EX4EmI1m)T%{L5Grbj!5A0DkF_5l zMqQb>abw~_3?1X&MGG+x^5nVZR9Wzrec>xCgv*ua*`qZ7X#w z#(9sb{_P(#V`g@WiODh{B%gVbEsx*B*uMflb3mWWW^#L$bS;;x&!H-)Q&bdHMb-Un zgCsN<9T_67%?+7lZripgKKT#eUGKVwz53UdboQXm<3yXlstZ#@ajJ+aBF)e=4U|Vt zQjIHvc}Z@3>~78gcz|68=)rigt+0qgho=}Cia9$Q2%%ZJDDNl~9EHf!+Y@owWo=xw zvV(liqw47C?&s9-;Oc6y-4GsK$oQ#u^yOSGdL+uVvG1)3Dsw5NlBZbo|MZRV#|zaD5j8>q^A68Ae8j>OsTWopx zugF4;D;49n;h3RQRetzkma}IPI*J)?yS1DCE2fF-@$Ma)lc#0-+uY%t|2Ut?BdRzN zX69ga))0|aJ&?bW5?(C;_ws`6Ad2Ux}3=~<*#>a4mWsFR+~X1 zB&aF11oj`SklMwGpUuMJMN0oA5!bEjWMH7c`t?Q91YAY{Spy*3_Uj%Ib~sUlX7_*l zGmwUqOeQ7kAvGbc8PzI`Pr&%7F*OAQ=vkKGzD+%JEXv|U8J!rW-l(?w)Y3UI!3c<^ zkU&qj(MX`4fEhT9r~u2C30JNJL71L~pMN$^oorAZA4h$Wtj{12)t*p$zFfth<%0VszQ4ZP*u(T5{ z?-j0DC0uc-&|Yl%hM8e4>=5LG1?7?Qj0p$lk3BL5-yK(m%gWr0U?%vi(bbvKyWF_; zYNM;vRF|DsD}!T$n!XF*0Qqt~gEw_@3()`Vap9v+GfbZLgxKNC;c!S$=4O@hsBq+j zFk3VF`#@yDbo1!?Hgp}5)gwtnI zRdetuRMxF)uy&w9-=%?g#uHc1dGqNh z=R`0C4uqu)Cc2}B)@ z7H9FHi@Prff)EtNuyrLp(EUm_a3)TzcFCEH|U)&Kwi M07*qoM6N<$f;2yJssI20 diff --git a/data/icons/32x32/audio-volume-muted.png b/data/icons/32x32/audio-volume-muted.png new file mode 100644 index 0000000000000000000000000000000000000000..b41dcb3e086a0592de2220156835f3fc092e82a1 GIT binary patch literal 1970 zcmV;j2Tk~iP);8yqLxN%w|foE9zoOUI7AyYRO&Ffy`#hr#g^ z&B3;To!fT0xAtv!`@Ho7dbvD7@BUT*gNFv4s;Q4|>)Y;(gd_Y)GzwpRbqajGMn2$g zb}G6yN;*3;RyQ1!9D zoPnX?q3vzKwxOPzdM)SApM&}NdFbuyfnYEIon4)9VssQ58=9;Zt7U+6|55;l462cl^VaFXZ6;4?lp;En5JMF|paK;H&q-=;#S>N>0&K)dSZZg5lv|!SA=aD|cS` z=+UFHYL?!XONBc%RfWl^N$|Mc;BYx8`w|D>KlAuwV?NZ7Qq5erxUWdEbtuX-Sfbn zO^1Q6dT!G-`Mr+z&fqOK?-C`OU0hj-N|I#1TM{L)t)-Q1zOu3c9*+m9w^l%)VZkDR zAP8W0*kNH|0YhSw3{AVgrVxDh!?_dt59|-Nx32(p@%WBFkSMB#;S(Sd>4s^2Cd5xoT@KR=p5q~zOv37FoE!nWWQSBL z1%*N$7g!;e&q7Oc5PExipsOp4@m{QW&WsDp2#KcYpeQP%T+?;<@T1S*^6VUA;_}sb z`1sQ=5u}b{Fu^sPp8ycj)p!hwr6Q=f0ij5xlen3JMg$B+4$-R!Faa)?3*x9t&l!lS zaT21K^r&nd$k4z8_rOm-Prx^4zeh$U*}Vf3R@XEJkVmAK^SF6pEx{Hd7AVOjSi__% z7K@Axm2GB+bUFjESR5A7`{rOX8t19(&@cxa35&PM9H2FYLJ=b24%oW27gnNiHg|P~ zaNiQB1ONrs@~2YiOgWCpMcz}q^Z7hx^fKFsC{|RNC0!ghp;9AoJy<0aHV(b!Xyz&a zD3Qq#0zed>{QNXbOiVN5G}Aq?t*HtF!EcK{|bpfCm$CX>^%F!R?7%TU(&7ub1@$R?jS%P}sErWz?y| zR(%OQ?Fh9oil2CV7?YTX@r&aS4tK)P;C+x-T?JB}Ut9uVa&nSK4=*${_ztOx;%W*6 zu$)B5X0oufyaaXF`S2Zhu`eW3>x^!SGs|LQBbzHgC`|c6-ne#cF^ip2@_OqblgThf zMNxu$E)U7IB-4$>6R?&{E>b7tW@cuzNN?onl3aXeZeh+_?UE*D>N)iEHtfmbLxY2i za;kHRvuPUaAlj&J`guKGYF6@kBL3eWiiHq+7jCB;v8x2!KgXKKbaA zZ{2Qpe;^R>Vkrr^T+U1+62^l=1Fs^01BjZV^2=aHBmf)jwM_rCuRm^@vuR z@zceN|4zi#Ydek+gpQL|6}2i#RZ59y?3J-^#}qmr=rp7-Q2aMopwZseM&J}fRo>mK zaT-(w>;mU9ih)UKR>ML<|2p*9*=w=Ru8wVWE?0Lr+{IJVBF{G}f%^XP(y}(cuy`V! z${)Qh02^Zi2#Sti7yuG)UHzwP$+eNK{r#R`FvwakHKEp)76xW)?Ci3x829LvEZy|r zYWX&_I;=Y+tL^OGy?g8}t*t!O{=(dxdHT%PCDqVx*NWPBEyimGK*MG;J3z3#j@f?~ z+W`1eP*z`7RsOoZjB5Tgs~FOU{&+&Ea{Zr}H~i!DH;ZN2#X6&>!2kdN07*qoM6N<$ Eg3MU5^8f$< literal 0 HcmV?d00001 diff --git a/data/vk/group.png b/data/icons/32x32/group.png similarity index 100% rename from data/vk/group.png rename to data/icons/32x32/group.png diff --git a/data/icons/32x32/link.png b/data/icons/32x32/link.png new file mode 100644 index 0000000000000000000000000000000000000000..7594c26cbbb0763aae050d8545044dd6af122417 GIT binary patch literal 1388 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 IM6N<$f=WXKD*ylh diff --git a/data/icons/48x48/audio-volume-muted.png b/data/icons/48x48/audio-volume-muted.png new file mode 100644 index 0000000000000000000000000000000000000000..1b05b438892bba0e4a30830f15926f524b9a0093 GIT binary patch literal 3227 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ℜiR1iys0SBBAj;h@dfmG*oF#ja_@h|eOx2x< zjX*-GQdRoIIIMdzs7AvCu~7&O;QQ#58kKYS9j7Ne3uQ!ON|3j;Sl!^7L--k6@maZ; zKR8m?HW3CSm2@p$3Mx@=6q6d0!s7jLh)`Kit4^PI~~MOm_J{yPK`h)-H~;K z0V6duJ+bLO#pmT>{(PZSnS+P$LKr?HbuPL)8l3%+u4mxNsxI%+u}Zm^9~x^@KMJ5h!i}ilM?4cuc}mv77J3^h=Z!WW88BQNP5w&UjjQ6T zgOO_Q%AhUD(c%{D_|Gr-GK_$HG)XH{M%0pB*xK~_fiPw}ig*>hbxvJ^wN1Td&4|Xb z=uhU?G5vyO-%@7mqk1nl5=!23cVv@BTU=Z1ma;D%^+KrW5vZc;r=nV)tz&8r_O}{@ zPDhdYwvMs;u(8!{>ieU@b_Qjr^=FT+R=TAWCw0ArQe{VQp;@W3DM3w+MlaD-F6NK_ Y1Kg3nGR8eR;s5{u07*qoM6N<$f-tai%m4rY literal 0 HcmV?d00001 diff --git a/data/icons/48x48/link.png b/data/icons/48x48/link.png new file mode 100644 index 0000000000000000000000000000000000000000..bcc4d6e36fa71c800217214b20f0863ed5d2c97b GIT binary patch literal 2202 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 Ef=S%m2LJ#7 literal 0 HcmV?d00001 diff --git a/data/icons/48x48/spotify.png b/data/icons/48x48/spotify.png deleted file mode 100644 index 4c05624882fb9ecbbb7a085d1513ce2c4400e6f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3456 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 oe5m}_004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00009a7bBm000XU000XU0RWnu z7ytkU&q+i-n%7Ca9(YA^kh=N$!gt_(Q^UrZ07-58s?~ z&vMWC&$-)g2EgpUgxPzMfaP$3nWaFWrCRj3FwxHCs=f7*GNIM8aw{uYnT_y9iIdIx zW3!wGk>1==V1L24=dfq4YoFq=Hmk_?m+K>~)Pxr1S3J%(Xs>8$pRRGbBw)dm=6gg_ z2b6wgeen7St3T^9Hlz8%QK(A`p(xmgr!j#j7YZASCOgbzN%Df57kW5amDvjKN+T9R zc`_4i*NX^eIlqdq1t8u1Qyz}?%yuNjVlYgA6zL+@Pk*l33vX1#1*82=2{iZ1@bcCL zwBI@p&D~OH9+W|rwGEWq9~URug^^EBmPp|Yr*V{6Q+09#=cBoQ1?@M_Lgw6%;97|5@{r?ldm6i4?!bz(o1`MU{eP#j6)s2<#yFFUpuO$C`o zcHQE5I+SEj3-S%c9Llf2FzVx5#nHV`UvR0R6Lax_kn}#xXClvH? zWq)?ouPA{p_!an)%JQ=DPzoApf`)w($O#SIK(CYU-)dwh*U3%!C=aJXo+&}eSX()@ zz#xHPbnrZ_-w^{vb_yDH#~UI|PvbgdGUDr!HlQXx6fdHdqbhU}p01b&>0)nG_|3)> zktZJecyM6+6F)E1Yz~Dq#1E(49ZL;bK!1b5$Gn_RR)zaRmA4zR)L0JnDX|^AjPcuJ zP)h-yhX+tFKUDb6f^?o2hYH_LTA`D1V?9V-9kUX5T%E8(JS~pmW- z;%SMjO?2v1Al3t2#VxyQ5O=3+K>R$t_d*7^C`!#F_y_Cv{0jh z*xvtb?Oe|wiZO)H)A%;j-flx8#Gb3^V)Mrx^^kB!h#J|dt> zh(;^Fw@8&@w(65DFY(aWXaS@-JWZzJ=dLh~lq@ihZbO%)N zdOn8ZJIB#z-WJE%R|bkf*MD{Gj43X@?AWEbKj20;v-Wt!LMG|K~)e;?_EaB{=%S061q2AZSZ3&x)&|4ov|0FYP0Z-V`3W1<6 zjcp>uo*S=>wtia^9*Ebu2hojLm5KL@YUccDEs8JZmgqObD~ zp*1rN(j`79^l*Ae!55I9CC$-?zv%e=H@ygXCDIx7APithtoHGYxa4fxQWd-aZ;$2S z?U5Y3KCqwT z-ji>1&4>O#z`xbQhKj3fAeypsdpOq?h z%PAgjr>3>>F7N9J9oYRIrY@yZtZdVql_l=1{ubF@!Ll>_jy7BYry3 zQA7vmp6O=YCeQ_@TQJ;o0=#igT}uX&Y$#!nzT`$h`TO3){O`}d;r}{;zX90TY=GED RBZL3|002ovPDHLkV1oT&i%tLl diff --git a/data/last.fm/loved_radio.png b/data/last.fm/loved_radio.png index f231dbd324ac9f6c4b4019558aa8edad722f2661..904385c32de17520ddd2c8cd032ecb25bff160ad 100644 GIT binary patch delta 709 zcmV;$0y_Pu2i*mbB!32COGiWi{{a60|De66lK=n!32;bRa{vGf6951U69E94oEQKA z00(qQO+^Ra3Jnzi9qx_EWB>pHYDq*vR5;7El1oTbaTJHY|Nq{3+-A^j`It%VNiT-b z2rH;Ih8jY(XcM&ztc|p46mEs7>GMEDpbOKKMbFR;^h`6L6m2xoetp^V~Gyx~tkFk(MPpcI^H+Iyx5b=s0yS zleq|R%P@`>*3{Hn;c&_Ko}MQYgM+oeM*wvPa9~+sW#!1?ty^{S?OU|ZhsWz>c_ z2q=X|gsGJ!*wr=oi;GZNG4pMNWP2OI&tpt0g^1wK9)HvTL6OH6Ftf zMh^p&Eo@jXoQ{LM0O{OQB|TlQguE~5cpF$=jnrv4Dc{wK$$&00000NkvXXu0mjfca%(` delta 914 zcmV;D18w}>1*iv*B!2{FK}|sb0I`n?{9y$E0004VQb$4nuFf3k0000WV@Og>004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00009a7bBm000XU000XU0RWnu z7ytkR5lKWrR5;6}Qfo+)Q5gO#Z9z%>>Z*OFZE4f86j3*vQh(E|wv|*A8j)0BK_r>v zjdW3#q2#h=&E_q-c&Qd8rgKXuOS?F=72c*(m-i4Ws3e}w`O;dyJMet(;eF2YocI0S z!+5Z6j62KD(gg`cdQU->!JXejqW)o!Fx-6wJBvaW>>XU^wYrXQgM_Qs1+IzUIF@A? zy16IzkrDE1SAT8_2CHtOTb%);8-MD7$os%esb8qkgFo4sn~b5FyBzm)rQiqQVu*G& zy?tJ-P+;y-rD8~50owyDhV_-`Ey#q?UGUwoia*hwb%NtQa$E(v^Upxj*Jkg^SU$Ujg&+7(DUyw2{kQX$4D5 z!u`uykL-fwViMY7qtL9_1d~Dv{pJvqh6F$zydL?%8@Q<56@em&A1;Z#tEiS%urPM( z#_go1Nq=+P9<-l4gqFQ>R7Qs3{;@dpzIcw$!$ZF@IzljvPD9<#w8Vs4b9p=wHJC$w z20vRazS0yaLa#Cbh6B6NaQ!Oi>S=g}`rK?7b1vYiS_OS(2F$Nsj!>?)wzh;CIFM2n z5CoP={fuvSO3{=Ok9t)Onu@h(EG)oyj|HCw`hPIi-G#yK&TnO9WshoVYVPQCIyJ*R zBr;Ee#p{K_@N&sIlWFf3yiq3MVQL~LZoFNJ`n+sBzIbk;xTvstY;4S$o}PY+VHi$4 z11DnUDhUiwR7%#qYmJeknUq_ZoPgnu53rfrrUv@^hek(7`xFYrVIGesCk76G45ptn zkALjlLIVSK+zngTY>Jj4Pb!8wdgr+MvZ`96(P))QWty|I^A0MeI{OMJ9A-?sJUk*x zBK!^IlC>tc<;$`#y@*ggBmQf^vi6aZbTTd^iU>l;xDMGF$o`z?3|KpZf8j*(bUF(i o9Uc9qZb%7 diff --git a/data/providers/22x22/amazon.png b/data/providers/22x22/amazon.png new file mode 100644 index 0000000000000000000000000000000000000000..fc6838d6963c57ebe1cf62a7d9c1c7d10f142b06 GIT binary patch literal 1242 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H3?x5i&EW)6Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$Ysfr0T&fKP}kP{Fs^Y+q-w z{a?&BA)5K?Y}U^+*?!Mw{R$FfeLIyc*o3LVhxyq=)^D>}Url8#^J3ar%5tn0WZCco z-{-I+dy1Wv;okx_VE8}~FienT)g>8!&PB)q)%;(Fq5!VA!kZb{98iGI28Jg{?{}cC zg>3Jqv7T;Vz17M3e-+#RMIiBCbJ>2(Vf#J@$^2PJY?zZEhQLTrtijkI2Am6Y$^ZZV zjTAT*0$Gbng8YKvZbLBG^&_&9>;!aIy#D*;pp(kkU$-}E{-7* zmy;6|*g3j8x;ni*7Ik`go<5-$rJ}yRL21>BEg2V;QWe4iUB$wpw|K-l2YXjvRFYK* zjJ2(0c4lK!e(c)qGa+>LteLZ;BBCPoqf(lacC@aYySI6<(X0)VHy>Q&s<$q0#i4g{ z-C~th6_vjiaLxXy7xm=%c>#eAEgiuv8G#1O&K@roxhC@P^z`_gNqAT=-L-p(FSAm^ zzs@a5iM>fl$qCONq;#-Jy%H0aX5Ug2SmTrwWTedO&ZR6~zDgz_VWM-?uSGp)*1TCF zv!Ea^E^lA8qf267A*X+4WTk6rXeqBUb9QcQYOQl}aItrGbhUeWc)5SRzrHfFx_WZ_ z|CY|lYQFPKQeSO(X`E(sZr0foCk`AqedL5i`nx?pxy5wmn3tQ$%WEqu?`Jqs+vLFM z#;3rPq^4L?$iX1RA3Htvke(1QY*kBKBT7;dOH!?pi&B9UgOP!usjh*gu8~=Yp@Eg5 sp_P%5u7RnQfx-KPIZP-Ta`RI%(<*Umm}jf952%5`)78&qol`;+0QEh0SO5S3 literal 0 HcmV?d00001 diff --git a/data/providers/22x22/amazonclouddrive.png b/data/providers/22x22/amazonclouddrive.png new file mode 100644 index 0000000000000000000000000000000000000000..88733d8d253108b11635c6ff3dd5509831fb3b2f GIT binary patch literal 1489 zcmbtSX;9Nw5dRy9;ZRUR#YBNfMJfV@a3+8X1PO9TLc&#nKm=6eOk`9JxdH;^3Zoba zL6VRFfg}VJNNWT^L{33Lh!tk+I9jaOinhh6(uej-KlD@I{PwqRciztIZ}*i11^R5( zL+e2hwAq(LqyWEt-E_17ubk%T0;iqe5#Rwq9hLfj#lS&~VUQ>R5OiTL1mzY&&3dPyMK!9cp4!Zk5|1+ytxqH`D04Y zVtVgFde4)z-o?ZlPif7wbh(Da7Du(s9+%F<${#c2k0V+ho$S=GdNg#|T%>d+RQw>Z zbB-aOG0eFW*)|(4nTTzF6eF7r7LJ8UCTUF*q}to(zMl&bjRrT~k7yb>R47SQjE4$` zsf|OFhCwoa@L2r-nLl7x(ComL;tHCv`4U`V3(~>UHdkbu+XRDegd1$L&K6i_3r%Us z8(^?gT~E*4T=O*Bpujs*)w0VsmeP~m-=;C>)~=vc$OP|*lYFdW1m4C3DkoJ z5ZYW6{(~H$byCdwmu4P0eA@J942`{YnlubKL~4{4sIL`5l@9Q zO_Cc&$bwO?q84*6s<91zw+Dq-+)5UV1=J7uUF}0VdK#Em?D30+>u)x3^YiE3^{*T7 z<@S@f{l45gU>DA;8tjRSdPZm?D@UKpKLqdwj$Ba_FW>Uw^qL=y+=SkZCLBd$94W5D7m2|PZSo`z`2xrMM!P(bO1iv!zU?Re3D;&9dJ|up?5gKQ4h~vi1RTn=EIE1ElpmG!+GOD%PRXIi;Lk@N zy116xHz8YIUglq?!@U&>3h87@bo5%Gx+J^i!-u`a?EPAB8g<6pT;k8goz=WU*(Z$i zaTZn)kzO?(ey)3+k|%h0=8N%YMe5WuJo6cH+gTRs9fwnE9eMN2YUyQZNPARg#;Wr9 zD+=X3YI^!{3Y1q~=ae$9N^-r_`}IKXZu>+_onJJ!65gmkA`DDnX-ejf^c91GzG~sU ziUybSOYgXyFAU5k4$!}`CKzfP+eWFfo-f^a<(#~rO8u0Trdts6a}uV9`NzUXgrS*x z&Re75efynbv9jj23mdg38*ZIjU3$M0BUOoKtNQ0eGIirt?Q7Tis7ya;$-V+^FB^|m zV7s+1ESC18QFC*eYIGiS$yZFMjkRB2hy}|#jCCT06-QvC#{mc7uy&3%SiB9+iE4)> s*x3F5tWGQG)`=*E^6X^Q7nh4UMC5H2?qr literal 0 HcmV?d00001 diff --git a/data/providers/22x22/aol.png b/data/providers/22x22/aol.png new file mode 100644 index 0000000000000000000000000000000000000000..e3182918d85ee78510cfef87d82ecb0f635d001a GIT binary patch literal 1397 zcmZ`(dpOez82)Xsx#kvftGP~T?2_AzbEeHK+0o9#iqjY)9U$~%Um0IauzW~ zC#O`{T-H;&usUP0$`*&W zn{$$WfSC(LjD^hY%d3AFhFhCqtG;kC8HUK zl6XiUWIYov{odl9{3zXn<2^oF5)l!&&O?gw5tr&jZkn8uxYCyj$1OEs6AC(_%0JWb zM_U~}#SYM=D*vc%M5;|;WYEI=F_p5AM^hrAn$Io_Y0{GHNrQgo*W}lL^mcFVo^>&u z+4tt;Bx`~-eOc;g0Mnx=EQAb%a3XyH9-q<(a!d%Ls#nhsY_k?jV zJNzy@4cM`#U{S4pEl=5{sVa0i+d!hR>7KVtw^-!F2jc@dLpLr`&En{}EAK8=eA6{# zUc2Y#*bqlK2lCjT<63>;KAI+`{2+$UjXo3zlQWJy*#Z`%{NZL}rlJOq+O~^lGTWm? zA8$zSS3A^~?VKLTv!jew1$RkSu!hW?0;(2+7;hGVkY*R#_|@O7vzqc9VG(J3Yo0Mv z_wj%vkGO0qKfLSCwDi1IP5>hAK{VgF38bE1jIO`ayUsdfyY#VWdLMX7@y(8#2~nqN zqXstu-ZfhzAB`1tI6|1x_sOUv62c}d6^F57v1a-QG^y5fmC)j+2ZiCicbZ$Gf{weT z)tRpRqUJVV@>^E~AqKvn2EUaX7gR}Tl~h;RlTzaevgV+XGWWlQwbdtxQUh$?xQv1l zJ3`onJz5|2I<*$E7)e0hVz$O7*O9s%LArPe%y!=ZG{ZB8jY z_sgawWz6s~ra|@$nIzGU(%068PhL(6?yh|RGUqO4O$|4hm1n5mR^JlcrlVS~!>u#C z1na3=_cnG?hSH4v{p332*riwf@QFSg|QKZIzzGjS++K(qq_u3lCxxK zqZrh_ZY9LLbnT#U1Gh%pc-v|2u@~lKJDfY=$ZTF?TMhm`Jo4gf6Y!S5Dj}N`K|SUO z!6q`{Qo-4s!qvh3I<}+Pp!CyWPpU+~{MEcgB8kx>fnW#HI3$y03@#@s@bj=sA8u~? zU9VBWAp-+zc)PRjW-)A1boH;bwpA#-G~NAcow1qx1z9E#{S!ih5<;=exKKF(Xe7!W zfpkWo9cU;d7KOs1(FmkH7Kxl^@WKBvL`H`kV!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8ZKG?e421s-{+L#78aCZiVtL9U{3IKaSX9I{dUUke35jK zqxI!wY4eSCOD9{`xk&6!k>L&x6FTkX%-E$gMTkqKDv$w`TkYDXfn*UP_7-Me}7=Fexp*J>8b(V7^vq~plScULFo6~41%w|lU^Eh78> zv@O?^l>X0RE?}$^NR_6^B z#W>jQFMC@QvcCS=j&<9PB}_R~7<>2H{r|!FD@}42tvLPBX7yC2WR;12@1OkoHLqlE z<>%hOQ>B|D8A>G7Cbb??Dmc!nvLNGWA=1(Ds7XuKX(7dhL@Aox6j(W`@Y!u zIg)SY%u>2@GqE_2FLeEWKQS)Hh?OUWp-FSeFh z`7`cu^HkBGqe|B#X8r#CBCPw>>Tne!Nv+eTMUEZIkd{!;nBLjkaO#tho93s(heM`K z`|y~|+1aO!(tFI(W&QxAVxove|QZ4+W|)VM$0f+J&!7t2$io8&^* zcVCS1>X-9ewtM!()!~x+idy^C)H<@Z?vHtxwz;mPAmDz*2L-Y7kKdl*>2T?L&YGw9 zJ+HiQV_L6a;99qzFN2StetK``%M#-|cWonfmTKQLHEq2*DrA>{)Z&%0L*8Dia`sBgW)6)W96@0j)s;u-zM`y$LH!~-?D6P}cHT|Tl+_{fi zJSSxBr?RrJkiGW=j(2{aZ@*sr`0=^-il1*dw!zZ;IZJf3u0za$sI}XT=FUCazkGRa zW!=1uudhe$sJtANyvl9mb=k?2SH}4B&+Oy#OW(Za-oCq+0z+&KEp}MdJ#Nc6caCYo z%NG+?gso<}X6u!3GitXuJL9U04yIBO$!je9dQL37dMj{W|J7MLE;_jM1bUVG`u_Z_ zA9q5({JoOm4(BIu87nyBOiUV|)AK${jb~6#8r2zrHeQ zqRfZ%>_5TZYYzNpsb}D0J{geZIHdrX{Zva_BT7;dOH!?pi&B9UgOP!usjh*gu8~=Y zp`n$brIoR004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 zVoOIv0RI600RN!9r;`8x010qNS#tmY4#NNd4#NS*Z>VGd000McNliru-w7HEBpCDA zN5KF91!hS^K~y-)g_UV+TvrvxfA_vO^JevU#&+asiQ~03j_uaj95oA4C{c<~MO*4F zLX`*-Q2_}dRH%^hsX{8Lf&@aS2q+RlqG~0Ipn(*T;3RFGmZnijTu-p$j)$aU;$@aM z%bPdz?&ZVSNs|b1rSswHZ2xo4|DFrCoLnx4ZQB%!Matz8OSvMyoXlL;|6(%3Qm&~h z+BUXrja1ejm6HWc_A7x-w`5` zu9R|k2x^W)dwcusf%Ex1v5?7<-Jm1k@0z_@J#=cmGBLH_^vtceM!``4!~&B3Hote@ zrocygdqb}b+!_4&(rP`^5i!VD>cr#m8-Z6>S7{CTn9f!i*bv-%JY^q!=^y!R?_F^y z)D!{`qKQFkjRwL#$)og4%M)ia6-?1Yqm{x_3Z)cnLCILs&sfq=TTr6(T7os?rqGP(t}ct#034esaV%9LW(f}O zYh_|2d{avVnz?1iShVZ+oLm5NV#~dpxp*d7a6ANhEq}8WT6@ecH+c4q75FC45S&rjbOG$<--T8|>cHWJ1GJG(1InNV2QTPp;Y^lXsD< zBh~b^`BaNpzc?fvjK?M(!ElQ;*N8m$R=V8kX^jw&cRZ3&gU|K_=#3j7;I4L)uWgI4 zbECzdX3D&ts;o^#6Ep>19*h0E$G7tQ(rSLia9x+5eD9n2uRi^Bce*IX=a(I%08hcp zHJ5lmvU`)o{yvL+y%rlH27kF!;b-sIlxj`7c}laVH_Dd=jo%!+f6MPO#kv++Yi9qI zVm@_oXf?L^)#pyG4rOvR3@K0=f~H`!)5lo^U)20+slw>Z2n@nNDc z{b=9d$cO!R-F;(iYOVR(Uyna@nXaGy_|4Tj(zzO@Y!XnZn>YA6y&6i>9k=+_?nJha z%s1}ef8e$CEhqrCZrw^KU~%THx8>`9{KLbANZ)fWU#JdFrAw4u4L1bPib*l)12 zJHitq!Bnht`S2GW{NnHT?B1m+Rfluu&S3y#vst$9*g-TB)-N3W(ah(z_D}5}{gg4X zv9&W1wj!1(MaVCShfI1B7JGW5`pJ8u*#|b(Ub%K*^7~Idb@1f)j_o>m$DN!wapLx` zslUIUxw$#C*2F9ke*Vajk&S&r_vt`vv#X5`0KZU6!pToxxjggsv)_H@LcXTULI?&1 z2AG|l<^P`H;bGibZ9RD~8I`TcsB8s-fT+7QhKGm$r~iKe89(1EHb+(u0000bbVXQn zWMOn=I%9HWVRU5xGB7bUEigGPGB#8(F*-9hIy5vbFf}?bFv2^qyZ`_IC3HntbYx+4 zWjbwdWNBu305UK!H7zhXEiyJ#F)=zbHaapiEig4YFff|SYPkRa002ovPDHLkV1i-0 B4%q+z literal 0 HcmV?d00001 diff --git a/data/providers/22x22/cdbaby.png b/data/providers/22x22/cdbaby.png new file mode 100644 index 0000000000000000000000000000000000000000..bb06ca3244ca3412a9b2db69149f5fd8b9702624 GIT binary patch literal 1601 zcmb_aX;4#F7`;SU0tt~&K+$S(Twq!x1VSLfj3AK&MFDXt6{mpUQn4AgNUcWz$j>(3z&7$SM}pp|#dlS~dw=lGFRZ>GGrhdgs2oedjypp6@o>XF)^?y|;Epks{FHI34q+K;p$WQ-zLhpI`}Q|E8Tex#2uAzB>Dpcq8vC~~xu z+de3UaP$qb-{1y~Qnmr4YcNt1gi<$L5TVCUK@}&kk9tyxX^C*c8AYzRD5mO1hmoN{ z<_OA}s5?#ykt<*TN>>!SP2HAaX!&@|;m9#5obI zaM~c!hjCob1ZYSHjuu>6Qd+&YDmhLJp0Zt)oCQ-HI?{Kcu<^ga<|vimj0Df-ma-y{J9hx%fU;8R9c=cL3|BsF5>166ze{0_oBiWBM zAKy+E8XCM%x;mUnl^9Q3vDv|JY5%KYDSP@XbF+-LD_iE-eHmiG$?RxpRBfC!-QZF4 zgCZG+HLX>hv+%Ne)y~Ct6CI4Q9^cCqv5lj$S8#cj@u%vSP@@KsEB$==2Wny%)9hWc z&{#suESb-M6e?%ZL*qDkfYkUo+t$>~+W3yUlIFz8eZ50wwr&dVAL5xrMMZ9okQ#Af zyld@>BYJx0DDCUQEOLUHoy&F)bbHpw>XO(Bx!OUs?blgaReVtl;GW3bZ&G|m( zw$`cT31fyS(#RkAd?s*z;l=2mt@4irx5(-e)a%+s6?=!d8N%y(1_OKYN?soCa7)o- z+MM3_)GN)Olk}}ZF8@qtxyaPP<#Ks^P0~PQ%L|8PJ%?4TB~1k$+bh2+l&s(Xusgxl zpHnzw^FdhoesxQ9!-re9T??y7eDK3w$*n}roY&%*HgRWpLPN)nE^d5pcSYBCoxZZv zFDy+~J<#+%t-{^fZAhdmF0lgw4Z7%) zER2(`kBf?ki-Z!j7F$+cqcs VcS4cZg4;BK$fc`&ulj^1{|O3GMt=YR literal 0 HcmV?d00001 diff --git a/data/providers/22x22/digitallyimported.png b/data/providers/22x22/digitallyimported.png new file mode 100644 index 0000000000000000000000000000000000000000..7df2f2c1e33c20fb450a5c5d976807b986a5b224 GIT binary patch literal 747 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4fEa{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8ZKG?e4FmjB3=ajfQ?U^X8H^`ghj2248+tT))e ze8WNW!AlQCp3@>q&#dJ3oi_+zu9^1B>$)qqGkZSc-i8UvVj6MQf17<{pNe)aY+X4& z<*hfji?sn~4Qt+(30w(*KEhLtWc5=$qz@#1O8)zC`%nM$b+h$P|1HbX-{hxMUKq=C zEPLimd+mTOBjW+sTe2<(n`n|(6HZ`))2GZ*JIZcpd!T|XtczM&?>w`9Y@ zzxH>$`vqj*c=LxSGD>*oPx868cmK(!m%WSGuU1<>e|1MF^L=~c+7F*I7_1m3M%os+ zwO!wJN?WM*_3Gt7_c`1+Q2t;~#PW;{a&_hxBz=T+&b^6TW>6^0FR-p9r>@EDfDd*DvqcJ*@`kpHc5UZ-(0=CY)RY$wm;VcUBEVVg zHO1y->FP(4yFSHFh;AwBaJeerdj}ZtswJ)wB`Jv|saDBFsX&Us$iUE4*T7QO$SlOr z(8|QX%FtZbz|_jXpy0}?{U{o8^HVa@DiIotLyQcpOiZne3?UjW2A;YG)WG2B>gTe~ HDWM4fFijh2 literal 0 HcmV?d00001 diff --git a/data/providers/22x22/dropbox.png b/data/providers/22x22/dropbox.png new file mode 100644 index 0000000000000000000000000000000000000000..e93cb601986fdb022045db2587e8c897dab38f33 GIT binary patch literal 1468 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 literal 0 HcmV?d00001 diff --git a/data/providers/22x22/jamendo.png b/data/providers/22x22/jamendo.png new file mode 100644 index 0000000000000000000000000000000000000000..ccefdd595693e885dd8507a2d159037672777652 GIT binary patch literal 1408 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 literal 0 HcmV?d00001 diff --git a/data/providers/22x22/lastfm.png b/data/providers/22x22/lastfm.png new file mode 100644 index 0000000000000000000000000000000000000000..ed93ec4478260f11536f1b8aca80054b882f3458 GIT binary patch literal 1833 zcmV+^2iEwBP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 zVoOIv0R8~}0RHP3)Pev2010qNS#tmY07w7;07w8v$!k6U000McNliru-w78KEfu-C zyrlpD1{g_1K~y-)U6pNYm1iBsfA@Vq&w0*!Urx_CJuQU+g>JmHD=ijQoV(2uDDvpKouSt3E|pAl$!NGqNT~wb zDFnsxb#H$0!^+jsllfa8eAMvBZg1(@yCj;o@aWXP01%%Azw^*mqV;t|hOS0qU)lat ztasD*tyRnWj8uJ8TA_Q^`)=*~`1z9O-kG{yzC7|;>FnUq`JM_d)YOLP`jkNYlixRNTttk#|aGFTJq- z{2RjqqK(wDb5_#|L5t)dVeI7@n}%0pluiY0JQ!hegLkAuGt7F zm6=U-2*X%==Y>}WVm)2+w=celaxa|crxTaOkv&iSU`Od06q(Ky?fXW zLCrzCE;ud-A%qoLt!-y4$TVJ6XBMW!;jaGY+B()e9iXMQ9b{dC@Va&)8#@RsYXK$k z7xL(84efhq&&SB6iEQk^$fWQKMS?;RA!SH=u9<)T+3Q841?JH>5 zznAcul@MrT#3HeM3w8T;Ai`n%LJ4zOj^v(xR3b*GHA}3&mmtvSnnPe&o0oE_O~&5L z@|A{ED}zcEV^tf8$G=4R$_S-@4ic0r2q`gIvNSxoi^R@87G8UsaQh1E@kthspFl<< zsK$DNLJ1KBD9HMW=td)JhI6V?YYcpkSnnpBJJaO<{w{bPNQu^9e|&?5noZMp4-#6@ zikB}EYRe(wF}#^Mys244$OOYcx}K7bw^I797k6&nHtfkMR5C$nU_~` za)a`PkC4eY(h4E15aRylEuA<;=7--RsMfgi;;*sVR}kOUP2+*RESLtful@#SHp&pjQ96~Qj|^)faelaD)@yW-rNH2Vjg>9lIZ4*XwPHu^|z>vj8S;+ zEP?CM@b%pk&s-oVmi%eFzbb^3+nRDa;!-ZxVT;BCPvFeX4285zjBFE)-#&0B_R_E@tFq$(o zJ@Ylpwj4&biD+*pP0v0}tm_e~Bcs?i$BA}tAkp88h=hsuc9J@{kIL|Ms^Pi!Xis={R4ky7HKGI} z&5_vFLuA!*%2$TTzkL$lt`#pX&c5>7W7p1zu4E%ag$3)?uKu6wTDAJHX&RA0YeXWB zQC9~-pdAMx1wu-6pwW&);Ccw92yC06RK^g3v6-3Ij|`rBJ{^lMswun5#lC(1OJhUh ztCRJamQ2%nvmvQuID|AL(lSwrC@K~~L@cCbA}tePnFuse3XG7+yGjTVpC|DnrZ`3Z*NBxoIEfwbr%1bdG_!DYD99 z+P5FX{TKE6@gf2okv#wa03~!qSaf7zbY(hYa%Ew3WdJfTF*PkPIW00aR536*GdVgn zGA%GQIxsM<9&9cE001R)MObuXVRU6WZEs|0W_bWIFflbPFgYzUGgLA#Iy5ypGBGVM XH99ab(NW6Q00000NkvXXu0mjf*%fCL literal 0 HcmV?d00001 diff --git a/data/providers/22x22/magnatune.png b/data/providers/22x22/magnatune.png new file mode 100644 index 0000000000000000000000000000000000000000..34685e0ba250734a21547acf09033ee3459cff0a GIT binary patch literal 1540 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H3?x5i&EW)6Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$Ysfq^MBz$e5Ns6eZ9mvZJR zm8{iD=_{18R;lJ~RL)o~95q)ZbCq(&3i(tZxk@>6wNmCP)vVPjnX47kS1M<%R?S|m zp1oEjYn6Q38nM*1mfbs4bJnZntkr2gqM8LV4Li!fErm-9PVrSh$6&Pu~*sEZ6X20Z9N8g{WW_KGd`ThEyc}M%t zHCb1YQ`PGyvFb>$9EuBkxthb*g?qzupYK21Bz>F}Ek68|QZj$=FVfj-d#BXNV!oDJ zwc?(Ra*v}-ZtI&iv8-Al!M0EJVn6d?T}~D*R!)_3*RO{AJ#;#~O+EF?$7gTnu-MIf zG>?6W>E&#oFBp@&-Cd6TVyZd|vL>4nJ%sd6cjE^TSQ349Gmw5WRvft;F;^G!# z-)}JosOOlci(`ny<_NH_Sw^8^eyvJw@?oKaA z;TQyUO13wSIrIb_w5>BN}VZUQ{vrrdoLCxWby>zBLMkALQ*) zl4Q3XZk!>L7%f#I<^F%!*-1QdlOKQi@n7Ha;RDZ&+trmUTpxdtOn>lZ=jSztTN~al z;<;G)^3&8$tFPa=o_}Z0)w11B&c)u_tzTfDaP4rPyOfo+iA~)nlj-LlJ=?IN@|?K7 z^~dPm^)@ws-K4b+i|omltP}rOR=Rah{;vav@$Z%H88a@FnFIZhY3YPZhlH;S|x4`^K4c20W~mqy85}Sb4q9e01n=B ABLDyZ literal 0 HcmV?d00001 diff --git a/data/providers/22x22/mog.png b/data/providers/22x22/mog.png new file mode 100644 index 0000000000000000000000000000000000000000..092a0d96eced3dc4e664d24a64efe411878c4fff GIT binary patch literal 894 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4fEa{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8ZKG?e4&kwgQ;JJlXlmFEbp{5eCQlc~5R21SuXtyKhKsO0cpvvzSt>gIsz%ll-hEzM zl{%W%FVj%E;+4rQ+reM6K-6kN%K~QgAkl*}m9(0+ag{Aw^x(ku6}_Cj3zym{b@fj; z;*-?WpRtGUomIi!-m9MMu?07tzuEkK|NpP+>-GQTPkfd2>BNzsV0)b^{f1?I;%YHJ zU*A38Yixi1@0-5D89hQJ&dgZ>?dc~EDL&7>&o_tNO1Ar>VBSMMtB;&&3q-36xMtRT z2oYak`$73sfxzf=I+?{1IQx>T57{yLJ3ec-oF#A9WOC}Gq#4WYt20^;GT!Mi zzR@}TMw|B!$+^wlTuc38rnN28(KvIAXHEY{jcE%ddKs;Fv3K58$$*?r}P49a{LG!>y#v9T-_5Ej+3k|o} z3VfRK*uUp^d82Bt-HonzLzcycx-lC}xwc!cs^_wHdaYX_;p1&+(zRD|@8!V1OBp|K zB?pSc?d@%iXxaBe!DvRm^a@w|p3c2@AJ<1pDF@70T>R;u#j!^=`^&q}#4Xg#_g8xT z!DOA=Mxo!PZmZ-Mi=TV;r@eZIKx8l1Y13yi_ZnWAtP1RW{epw@T_V>rw};aniofB% zndRK)xuZL~LQrDr3QdkO_QJSr@>g1}YAq7TwUG1|D&ELxTgVX_Ah=nxD(IeSf1E z6s24(cq(Og6x-KLb?dlduWq&f>3%BK>{r*Mq}N_u_qUl%w*L8bYgKsE?fd)|=22XL6vs4wBKvhdzBT7;dOH!?pi&B9UgOP!usjh*g zu8~=Yp@Ef&sg!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8ZKG?e4&kwgQ;JK6dBgHNAqEDJ|XHhQ{FWk)0q`=|#=+%PKvI|SQ9XB>{lnUs2xh_mt^T0iK(lg6F?JB-b zO%~tQe7{@#-uC&u<5ot84qfRW)eNmN;4EpP=#C=D4Dbbce-axgGtxBMw-;Igq#Kpsmai z?i%SS6_y32LB~TLq`iA(+ULdUzJW7d>D%>He>$Ck}{d9333Pet9GrM zuyxOzvst<8<}82l;s>YRs~zm}%Ke)g_7^Z$e_FQ1ZXWNMt*ZQ=a?8%F{B6EN>+J`t zTOZh`m6e5wmc9VSID=}5YeY#(Vo9o1a#1RfVlXl=G}Se*)HN~-F*L9;F|{(a&^0i% qGBB{rJeG^1AvZrIGp!O`gNc=aF+{^#LH|Oa1_n=8KbLh*2~7YEbP1UN literal 0 HcmV?d00001 diff --git a/data/providers/22x22/musicbrainz.png b/data/providers/22x22/musicbrainz.png new file mode 100644 index 0000000000000000000000000000000000000000..ab7f17dc4f4862ff9865994d6c8409dbb4fa4463 GIT binary patch literal 1325 zcmZ{kc~BB~6vuy>0Ujh{y5fpB~ftFWji)lzog;%iCfs5j8CPYT75#g$Nt%*bp z>zYTn8jzBvSb3AH8JcODnVV^)uGeT@dl@H=;o*AbdH?`8 z!Ph%L*Zz_tZ|!vkPl6LCHPZ~+a# z6cqq>ApoWcA_WPnSwMdB!+V3xuT}I|oUciA6MQKQ0Q9$il@_=yLTW-NlR)%=j_R80 zLg4O>m@v&zOM*8p$hB*R-<@e0Y}~H896VQ2QMtZr#K~ilVCzKdu<<})thvHAoD1P4 zk;V19$&G)bhNiDt!AS;?c&GGjq_KdMZ8y|^wWYsi+jD$*B(XLJHb0}~g%S}B}EWUU7la4;51jyY}H zmh_r|;pK_0o98DwO%k4;pB}LHwcB0B^dK@GKT7&CVyb#nMK|aSU7c^vSc_xDHpfh) z>PkocPFd?-FS=MHiXXKm7x9C52=O9zlLD(Ef}-9?ayPwiiDfmlD^vDfZG9-(+9Pqf zRV+Bx7?k*Z$n8D;?=L5>5dnj-C(IRa~of?KQ`TyoB8*A$J7E^DqX%$*7UY(o%q3E3OXBH^83AnHn2o>s7tcW#l9oO!h*gbSwWCQE0qhYq+@F$N+;QS)6g8{qf-;d3yn7cFOHeZ_k2#p3@l+XU>HW5prUG1J-)nix{9Q5q%Qh23X zah&))3`xBS$=K~@nU)=P(D`XlYPu~3lGpMab+y%g|Ma%yf~^mnlR_^j9j=e1q0L7> zG2Pj5ad18cBB^D@9T!jCH7{!eyOXeqh5(6!OHhOhoQ0pHZ6;`|T;#|?iVeT+}Ov@j$m zVdq^hW*IxQL~^dlO+=n`8MCv%Po0c?bBlW0SSZo^Jd`b&E-)J27@tNoK|m9P3e$=m zhCDR0?WSE3|SUensrz#~Zfyrrq6;unI`gO6HIoy++;%02iSJVZFO>8(J0b`!S& z8JA7Xk$DtD&Fk3B^dU3DLYd+2w8U_Y0Y^0EfIZsH-qAS-gLcPY+#Mb5(Ffeo=sBuL e`#(V3xv(hurT+&CJ#3z606_3L<}LN2a{mRj+(_;K literal 0 HcmV?d00001 diff --git a/data/providers/22x22/mygpo.png b/data/providers/22x22/mygpo.png new file mode 100644 index 0000000000000000000000000000000000000000..bcf045925e2eb69ac859ab1ec31309ba674d7b74 GIT binary patch literal 1537 zcmV+c2LAbpP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 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 Ef*iM7KL7v# literal 0 HcmV?d00001 diff --git a/data/providers/22x22/seafile.png b/data/providers/22x22/seafile.png new file mode 100644 index 0000000000000000000000000000000000000000..eaa38b9b52361547f029c43c982e59f8529aa0c3 GIT binary patch literal 1146 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4fEa{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8ZKG?e49#H zJRaqIKqBPIjt`C(Tw59>LQ)nbw^f#Yj}JZWTK-JXd~@ORyP<`arLX3#=lZw!(ot!< z&jvSrT^!2}aR{VpISR)9eb?4<_^7m{p0nA;tVIG`P8!bD^CY54I&Y%49KcU|w% z%DuAn3pE@jpUbq*xbXF#Ka2a6&p&k+--)l7)U4eZiz?FgM4@>aYu`|2F# zOpcA7LH**lMEsV#e;;Mv_3R`k565*y9}Tl|jTdR_`$Ymoc&>LH6S2I@%hOoDi0AUc zu$pj4A3hs*X zRjZc!{GQRZFZB3MOZIcOWxCu|dlL=jxK(w|`R81dkrz#z*o^r{z<(RF?_Qvm7)cQK*A8bqdYuDXe zs5JiuXJg{*k9onaYvddr&I}DUQ%XG5w@7UFIqA7SFSFS$yJ6=P+UWa|ufX^KkLJUr zt&CHj`Yl;^&#OxHkqy^n4HOG$3!*7{ecJX)h3b8$hHr|(4H2<|=#n*|C z*%xSDVcc8&vT{kY;tSJf>61_Y6TJR9{DBQ`4_6(V(znl9XX`>3e!LZo>9~+5YH?Tl zd97FF)D=%@7bboYTok3vu(*;SIvTU_0G`?_Dgl^(m!T*zAUU#v) zvtXZ%cXdKXR8~Ca9j;e`o5EZEa(Au|;r3n~vgfLQ=(nJ4(-XE%{#?x4#-@FWxw~Q) z|E7Wy+56l}Z|OgH%w6&?{_ZdKC-LipJ}k_T0_H>264!{5l*E!$tK_0oAjM#0U}&mq zV5w_l7Gh{%WoT$+WTb0gYGq*XK4A_MiiX_$l+3hB+#2TDs_X-5VDNPHb6Mw<&;$TG CI^vE1 literal 0 HcmV?d00001 diff --git a/data/providers/22x22/skydrive.png b/data/providers/22x22/skydrive.png new file mode 100644 index 0000000000000000000000000000000000000000..27da7f4d0b6240e590bd1f08e79143a23fd770cc GIT binary patch literal 1001 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H3?x5i&EW)6Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CDO3=9p;3=BX21L>Cx45bDP46hOx7_4S6Fo@?*ia+Ycz`z(2;1l8s)WhkyfzxXf z0}~6obsw{Y6{qKV4#znh&I>ucHgg3Z=k(gh>AhK?HeRK`9ncfc;IW`%laV1O7iV`zm*SC| z4!dR^QB_&GL^U-f@zEO}pQ2A(U0$bL9TqHFb?gYE*t3+N>ldzEx_0qu@Ky5wGn1sG zM@*c?lCvAG%$zkdIwERi)NKR9!p{t@GjrZHEc(XR=MZ%ITUh)U`9aSc-}y4=^4|nLWLqfwlEP z!NaG?PV6biB()eAI1c$Q_qet9C@=_AOI#yLQW8s2t&)pUffR$0fuX6cfu*jIS%{&5 um7$@Pk&&)}sg;4j`-C}6C>nC}Q!>*kach`otFjNMfx*+&&t;ucLK6V6BwbPf literal 0 HcmV?d00001 diff --git a/data/providers/22x22/somafm.png b/data/providers/22x22/somafm.png new file mode 100644 index 0000000000000000000000000000000000000000..a438f23b2c45fa40de4f8647e4b2036be8916b34 GIT binary patch literal 1431 zcmV;I1!($-P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 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 WANT(W#TPML5dqj(+Tqz2WX3-?8V$h! literal 0 HcmV?d00001 diff --git a/data/providers/32x32/amazon.png b/data/providers/32x32/amazon.png new file mode 100644 index 0000000000000000000000000000000000000000..fc8612a8c2c2eef0d306e408f75ccd19ea1ae200 GIT binary patch literal 1802 zcmV+l2le=gP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 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 literal 0 HcmV?d00001 diff --git a/data/providers/32x32/aol.png b/data/providers/32x32/aol.png new file mode 100644 index 0000000000000000000000000000000000000000..af2cf71cbb0b9a5f7ddc69420c25017340659d8b GIT binary patch literal 1017 zcmVkdg00004XF*Lt006O% z3;baP0000WV@Og>004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt010qNS#tmY3labT3lag+-G2N4000McNliru-w7HBA0`Y;3kv`M z0_;gdK~zY`oz%~Zm1PtM@Xzz!_s-mzJ45Oyj)|l}37JAgD%K)U5Thu9u&vg@{sCzf zxCw$*{Xkj>kx2+aQ9%eTT2w1TqJ$uP|N{wqI-=EGI)A z4j_l>dgt`Q@$pNSmFrwAw?4o2XuBDP%ny0}!qKbUA70s5h3z_P*L<;h+cKhSn?3)> zW38*@m}WULl?_>a--3~;$+A=~(XxDio|Q=wR|F6xsRxk66#%3`fV6B1^DTfZin8#x z@9>|2w_3=973AB{!@mx8*3_0P)C>eg6h)QT_pbGx_3*&UE$`Usq*txetzXJ4OX5J5 z$^l1w?}Fbn21v_T#5x^WCCT#bEd;AzLbr>aS=WKmY+x`HT5 z7TsmHUw!0^&31{lJ8afVURF8ezM8FAtB@5@>U$LIvBfX4%PM=VvdJ1B`_Q{Su)&VL zoJ+ctOM$)TDZ3SRIjLpLz3!1^HxSHWv<8ThmQqkgNzn(`Y=0*m*_V`Z6US}1a za^3m5h3tT5v{cGmladkav)Vh3>4^4u(|(^i;|Xslt#R5{cJ>C?llFtgm^|T#i7aVa z?OUI?tf6qljGvwNnco#II^~2}T=liH<`wfZZ~r(SrljfeTw}UdSS4v_2-H$FWm#Lc zpwJLiCD~N(oXbkeDxWaoIg>+Q)?m)5bfQ^R!njdgxmm0l zxE}v+RhkP`(@lYKxj)Ryp)d(<_zU1GiK+-_Q7`}i03~!qSaf7zbY(hYa%Ew3WdJfT zF*PkPIW00aR4_R@F*Z6fIV~_XIxsL5AvhlZ001R)MObuXVRU6WZEs|0W_bWIFflbP nFgYzUHdHV;Ix{gkGdL|UH99abX@~H%00000NkvXXu0mjfd(_LM literal 0 HcmV?d00001 diff --git a/data/providers/32x32/bbc.png b/data/providers/32x32/bbc.png new file mode 100644 index 0000000000000000000000000000000000000000..4670a6faf4489697712ff26276a3eac6605d37cb GIT binary patch literal 1552 zcmV+r2JiWaP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 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 literal 0 HcmV?d00001 diff --git a/data/providers/32x32/cdbaby.png b/data/providers/32x32/cdbaby.png new file mode 100644 index 0000000000000000000000000000000000000000..15b3363df5e8ad7140da6e8b4141488fc63e1b00 GIT binary patch literal 1778 zcmV004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 zVoOIv0RI600RN!9r;`8x010qNS#tmY3ljhU3ljkVnw%H_000McNliru-w7HB9XYdd zWPAVs1>s3VK~z}7wU^ItTvrvxKj+-%No?0vo20Q*5-Wj<-~ytN3P@d0A(S9x!v-}~ z5u#Ps$)5m16;y&BGe%%`QgN+jT6^)I@pfKiD%~Bdk%{? zV|(H>Eu}uv9ckV>KfdS3_uhBK-D%3u&=7|YAEs8Tu^wV(?Ay1GLx&C#LI5BGxO3-@ zc6N4d>FeuLRmI&Ak|%`5DWyFkGM!bcRd9!fqozZ5 zN5%2BjgaSfN+8k#>OlZj>om)M?=yENGxMe;g5!XRfJ3RLmoNYDIp!{&XL5Lm6cb4u z#fetvH+2hJLBz?EBMxS%@GX#HYOzyyT!hSHMBGWDxEtVzD2CA4w~MaFzQ{w{cJj~{ zc5&mce_`Q+_lbEOQ(Xois{t%OTcI}s?t-q;X}-^56QvtX6Y+$*<8HV)VMB?{PkxK8 z{(ffvah98>PqJ`x0&_rOQ;0QTf*K~q|vfv0P~BBxI<8(O%)9pp)tjl8hK@2 z^f`iQqW#fFY46?2=C6H&|6Keg6T>H%9s3t46;m!NX|Ea3JkN1++#Ce5YUNH#sX~^K zwPk1s zIPyEv-6fV5XYr(L-drM?fGJP)C|}50OYZ?0FC$2 zoux_z32l_eE_3CLBYbe?6tzl)zAq^sO*-{@1Z`k8z!PZ1JaFc{8m|o9X865DLeP5? zUjcCMhOv4Fn;bpGiC_MdxoekLn7Dzqm1yq}e)8iS4bC5rC|9m#)N4?$In~@5D?7hE zJ*2(H4qLN^Hfio8e|4f^>9sfk-bYodbH+SGGxaC&q||P@HfGT@MRCf7y8Y zY3HM|^44+X$|abc5;n}YbNzPChx0k&MRi02E`pjZ`!&^RQ{996bTNc$XJbV)kQ^i# z3Z&ezBt*~X>{gz8Hljh8nacR}uNIk^jMSr$1+WC9xYlP{VM699wa`#LW;=DD=`Z;P zl4-$OfjkOZdlE1I0{%9ly!xBOzsHN?n@{+_(d5p`vInl{MsjbdRw6^RIC|SRCcgLm zzz?1+k(HzX+~R-j%G}bLOdllf;3h5q1<;_(&cWbd;!j77YRx`{x5iiTXAu!6%fOOx zV-jBfL*nX~F*=%aPfnjR00G1)g~as60l*khdoe%&001R)MObuXVRU6WV{&C-bY%cCFflbPFgYzUHdHV*8l(j literal 0 HcmV?d00001 diff --git a/data/providers/32x32/digitallyimported.png b/data/providers/32x32/digitallyimported.png new file mode 100644 index 0000000000000000000000000000000000000000..0be6b7f7331090ac82037435e78a20666653adbd GIT binary patch literal 1958 zcmV;X2U+-uP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 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 literal 0 HcmV?d00001 diff --git a/data/providers/32x32/googledrive.png b/data/providers/32x32/googledrive.png new file mode 100644 index 0000000000000000000000000000000000000000..17c7687006208820fa749325dfc8a841c04c3171 GIT binary patch literal 1717 zcmV;m21@yfP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 zVoOIv0RI600RN!9r;`8x010qNS#tmY3ljhU3ljkVnw%H_000McNliru-w7HBBP5Zr z6W9O%1*AztK~z}7t(RSFRL2#^e`oI9^?u@A*In!dTQ0#u#H9%(1yV;X1eZig<2F$w zl)Rv*P4beLz7#cmC8_$5yf#w%QmLsFM5v+)DFVlB)P@k!LRCW4m;@Vx`S2HOyu03y zyL0-m-c8oK_AZFC8r`eeGxI;^Kj%MpM);b=Uw;OhDdHw0h%w+gfPzTbL1@ji^3?Jm zuY{`N-MEbj`MLFrqg7X@@)CP>nD{S;@Fr$4--w{|*?_pF9aslMfk?|uD^0^#4QQ^Y zrYq_hpF{ggkAUAHH#+uJPO;a9(M*B1U44|M)14A#F>LSX zV|e2Zp6c0&k*|~?2uCMRbNKu*3bxctGl?>$Vh{llDNAj2E2-tX9eo^r@BmZUd1msr zNd(%f?VEvhJli+O-t_~N)HYcLOc}GHZxPngxuV4UVP5PXVn@d&evsJ8vB@)JynKyc z%pd0G{rgA;<5<--BUnxxgDA+_vVN4uIY1vC%95yNwR zkFdM5zovg{Yy-Jcfp;#St{bzZy_@GZ?;+^;n@Y23;cbiea-i?~I8y6+J)7dcsY%|N z_>j+UU#n#oVR++1?CRW%ZNkE;0VvRBd_3DX$fjt$LXS_Ki$mNglRseMe zV?2M~ULwB0np@QB0jOn9*Zn-xy9-&NkPE3R{NdvJ6iP*`Du2544?b>CkU#3)#?w8! zSW97UqfV0 zxOsue%v{aJwPpZ{@~vosE$fnX|9vv|C3E>je%kxJntn$d-n=-1Bc@8Y2xN=-^3J#l z2@L}W5S71+vegCmB&-TaKvo1fm<5(vV4 zA#{WOU=IuP95U0wuMpE!Q-P zS6%|Igf0~`;t!q!9&DVHP_SOBr=9AUHEQLYW(ye!`Y>uOrYDv|^#rP!Rwixbw>mwV zLG^^$7|W@(81GsdozJ2)%j zvqTR*%&p(NN9vV#Vda#uSD!?!;&!*!U(fG?fST*MwRqQ3h+|0o`ma^D{{ycZWJG%= z4uk*z03~!qSaf7zbY(hYa%Ew3WdJfTF*PkPIW00aR4_R@F*Z6fIV~_XIxsL5AvhlZ z001R)MObuXVRU6WZEs|0W_bWIFflbPFgYzUHdHV;Ix{soGd3+SH99abFjFg&00000 LNkvXXu0mjf4&fo4 literal 0 HcmV?d00001 diff --git a/data/providers/32x32/itunes.png b/data/providers/32x32/itunes.png new file mode 100644 index 0000000000000000000000000000000000000000..d398328b63f9d3ae8924a6828fad4b05ebba55fc GIT binary patch literal 2964 zcmV;F3v2X=P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 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 KMNUMnLSTZ>yLPt# literal 0 HcmV?d00001 diff --git a/data/providers/32x32/jamendo.png b/data/providers/32x32/jamendo.png new file mode 100644 index 0000000000000000000000000000000000000000..84e1d20366b5a9b386d1186c980335780c8a5a8a GIT binary patch literal 1679 zcmV;A25|X_P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 zVoOIv0RI600RN!9r;`8x010qNS#tmY3ljhU3ljkVnw%H_000McNliru-w7HBEFoq? z`fdZLdGF!R9N-QEFow8iSCK5zwL%k^n+V zlT@nIKDBD4Dryy}Z>`ja_O(xaNgs+-XlY3sDHTerMA#Jx5K==L2bnn7#cY-}W*2|q z-Mx2CAFh2XHw$q<=De)#%$alk=YMAYGb^ujzXAXf{HQ9cX@Vdk;kOImEqLO_+-~5g zh^z%x3xxC28s5Zjl9za-8*R8c!&o0|U|G(C_X8HV=n7cx>Sl<$h$4GBZlWtFw zYE4mHQ;i_Z-I-%@e3HyahTK?=(n1Nxal(`JPynp8#A;)7?&+jwe-9hFHV}PaMHGhWf|q zdHUefbnfnC=&d16|L!z}Y~j8j?g>CuS<|qFBd;Ez`^QQ6NKJ&-fAc!iQ_~n@z5)OZ6l>?voov~=C1m5%3!l>eT0i3- zjZ>U0Vyy)O#u#c7wQSn9iM`+3%Z9EEh!M8#-%24{;LYE@iSPRrH)lmyzVFkrsfFI> zdNEGmGBz~Esb8OBcyJhip8Y*M@%1M#63ov{&oT7Y5GQ|ilJSqmgVq?KYhM?SKlwP; zw-sxx%nQ)5yMt6~3V``L^St|qcgc)o5D{A2TRHU8L%j6Mm)Q2LZ6UpGwafM4>kJ$p zpg30qpsuBkjXfLhc{INOKvjvvBD8(24aao=$c^W?HgpZ+nqWQ}AyN~ed1Et&es+ky zm-}#C7i%p}mBaABFt;Xd1)w4>>pIu18~_TjH8J81@o?z&joZxMnO`1cQGAlkNe=wz z0MGpR8RE%c&BE*g+0U|}YoalMQ{_|?yNWGvTqmp^pfq2?diD#+m#n&`nw>{?^3<-U zf;kD=7AA2_z+MFe6#;lfk8-gbe%ChC;#M!IwxFuZ-VJwW?sEQ(^IScDbcd2K~P#MD~|GYwGB*XeG>#3@)V%N8KkNQM)? zI6>iNfw}29j4@c>VjRQP1KZgC-1cw}-Mn@))P>3bDwuH$`D~uSK?13qpySQ&u=HulnD05>|M^DJj>*NCPP765da8O z>~jBQn$|b5=ev7?BrSF9`~E(9pY0`|%?Dy55Uq_;pROm-ln5&?&KEgz>{t!F7Ml*okzAn9a}Pl{{4So<0BS02Xa2pzr$> zZWg$mxsBC89gUdqg(OCTm zIx;yeFf}?bFcl#<9{>OVC3HntbYx+4WjbwdWNBu305UK!H7zhXEiyJ#FgQ9iG&(ag ZEig4YFfgQ&dWir4002ovPDHLkV1lqu5~2VA literal 0 HcmV?d00001 diff --git a/data/providers/32x32/jazzradio.png b/data/providers/32x32/jazzradio.png new file mode 100644 index 0000000000000000000000000000000000000000..3edc7d21e108a76b7fd0cc5226592e2cbdf4a17f GIT binary patch literal 2606 zcmV+}3eok6P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 zVoOIv0RI600RN!9r;`8x010qNS#tmY3ljhU3ljkVnw%H_000McNliru-w7HBFBbLF z4O9RC2^~p9K~z}7t(RMDT-SAmzqR+78)t^(a41p~#fv10v@6Mq$=H_NCbd%=ij$Yz zfCTMB(iVPcABsK|edu%07VT>TBtQ$aMguqr;9k%)kW(OttmQ)FUcSxtjb(Z}b+qRI z<--j@QkK+kKg08 z$b3le0Hkvnmn{|UXUfI@=m=NGreA5i_O(C6SN;Lf&TG_fZ!mCtXlCX5@}J!K*5%KI zSC>k<+Z53cd-{W+BAB59*=J_==DzUUcTPPu^B2|Cou#3(Qv~~~6$Z{v6_>wz^G|>L zH{bnA-}l}&6AH%2&xTPz0E6IBypp6xe(450irZ^(f91i@<(>NP2`}4IpPc`r*79c4 ze*Pn;Fsjer`rGgSS^D*BeIv$zH5_;pj4=e(AVEMo70?PSDu%QeR1Qw}znK$ZUxc1H z_~$z-Te5HD#MtD>)s-7dE5U>7OBBn+mpWJPmZpuxh(T2mG1$P+w!)(GEQ)7fB2RXx zkG=rLS6du?5Fy^dBdL-kHZiaQl!1&0eZa87-T%Bh_|#{1Uwrr4(!U3Br9r#WI41Qr zt}nyhXp!DXAA9WoVmKdfp*G7wD>z5+MMljiCiNAOa9!TooTirWiYdhx@i79IN*T zu59A2Y*37ql2bg2D!4=sjDhK@WAWWOjgO78`QmYcH`W*kAy&l#WmN(Z1egYDs%#~G ziU}?NEbuctH?a~&4()nyo*s$=yl@Cg4@m5puR`?B2JZ1OHfM{d4KT)FMF@41#Kcai98qit zE*gfM>7)s*rI<=FoykxzhMX}B8-pZ3BtfwkVVE?J z?eDX(S>cJf5%$hxS*kWTTd`d0hP2LRDaLum_dLV*tK_#^i1mkw3{pl&SxZZmaqlU{ zG5vAOWE3H-7HSN}7{prQL{51a2@x#9dE@!Fr3&HfI3pANtPR#^ywk!?r8qsE<$JeU zT+3v5>`a!T-)Eqz7zNQo7I;!Xq{{6$W>kdoL-4r+l~eiPqT_%*Yni;;VQF%MGf#}- z$9Gs3NTT2x7pbMX<(DLJ+UGBqex%_?AcJ zA7ttr*-Svjx2aSeBd1IFQkIrYk;`-`j1BRQR~}WBAT1CWK~Ng%8A~K2jAK&9;DN|{ z^48Mvo{k71IP{M(=5 z=;vRiGkqN1yU+Hm+Z4|~jt-ZpT))L$wNCl@XKADYB#JnBw~4xvb*ts`+xln z27a={=;@{h0MFI^^Og#K!WsrN!gGhMcJ8Wf6oE`5KU^?UbmdDs}p9d?o?DM*R9 zD_s%XXD`zAo}MubEu2HM88U@D12faqzqm{O(=YJ$-@V3Q*rEK#zfaW&TmN*4(}BhJ zVj^NDH(Km&W!cT==^r`C$zv62%?9h+JM70@PKr52VitBc$Krs6BEd9sJmvYa}y|TNqRT}BVWVd$SZ}*eVrc`f0tQ|n*1yuUV4NaH=j?U?dpIx;dXFf}?bFeP}( Qpa1{>07*qoM6N<$g0$=4v;Y7A literal 0 HcmV?d00001 diff --git a/data/providers/32x32/lastfm.png b/data/providers/32x32/lastfm.png new file mode 100644 index 0000000000000000000000000000000000000000..881899dc394e8380250cd56486fe6d4db183b946 GIT binary patch literal 1621 zcmV-b2CDgqP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 zVoOIv0RI600RN!9r;`8x010qNS#tmY4c7nw4c7reD4Tcy000McNliru-w7BNIT~C{ zvRMEC1w=_iK~z}7#g}VrR8{KQsTCIY&_u4WyLw;hv1v*h&OIrIb2*YW*40rZhLIiDbcnp5E;CqH{K&ln8c(3@TD+ZCOSs zEIA!CP(yTxsbt=u5ECI9PzJDv{v)T$^C-gjKH~d`SH^f{#P=Zx2z-N>V|MIQFcW(z z0>&Ugfbq(hQV~;f5Z^hY$n1KNbUwuLE`gN2$cE#aMRnu_)gJhRJ zgx!2568Mz9|Bk<(S%trE?}#8q1fUWL>TbD>`g`ufxMc=Ed=Ix{7rG`x?fk2#yX96= zGiK7g{BfLZTgfbJrLk=pVecV&*RLZv{e0~D$q+^-kpg3=o->!pcie@yZ!ZVeJWc7_ zZ!lgNl%nsA*Qvj23C$~4bJlZfIq>jO(k+*uQz?30c%J zG0lck)I@~2KE!cI&76hz>n{|(Xh&%^+zYLd&?C3$Ey{a3nY8#OyskZXU7a+qdYW_I z+C1lAjb2s8yito$q~_uF_gA` zk13U?ZM~ZE?jPxX;!%FT;TpQ1Y{TFG2TjXXl3B12Int0$m;wN$2y;2yoja(y;6kb| zog3HsFw1d&NY8G;+xt7^pLbJp#XOSJ&c(PcLHC~=erF>+Yu6w_K<)fiR3b4p07@yO z>~MJVCQyo|6;Dxp+2u%N5I;ox0A<^pvG``1pL!PYJ@W5uAvt9V^>^MI_lhVUJ`zNg z!8+bXq&0=FzohTA^)xP9$&}aLr0~hdcwKwIPEb8(4w>r~;r`fxxMc=E{fJ46Zlr$6 z0|<)3Cm*1y(lp$^6kSt;vu!I91V^iAbO1^ru1nvB^+bg{4fic2`|x8&^C*r(;hQh% zUH3A^DPc-Q{#m<*GuNyo``{xq+`R-Wjj|K;Z+@FX`)8;TX2QrtsuZSJB=^Sa6x!QK zT{H_jo5hq}g8hHu{`3PTpO1%)Qj~w%O?TU)WUg62YIX|}1h~6)Qv9l&D4!pHD?S1O z!0YP7>-;%3Rw*ZCA2;bNi?HV){hQxL*@?KSqA>RS1QT&g<5<}iV2!>}>q@8v6r*-Q zn4r_|c;tTvaNLL9heB5py);mcUe?3CJ)e%Ab@(KmjN`n z$iG@aXGnkiw7UQR03~!qSaf7zbY(hYa%Ew3WdJfTF*PkPIW00aR4_R@F*Z6fIV~_X zIxsL5AvhlZ001R)MObuXVRU6WZEs|0W_bWIFflbPFgYzUG*mJ&IyE;sGBzzRH99ab TOenUS00000NkvXXu0mjfTVUTL literal 0 HcmV?d00001 diff --git a/data/providers/32x32/magnatune.png b/data/providers/32x32/magnatune.png new file mode 100644 index 0000000000000000000000000000000000000000..e575f2d3febfea5a4bdedf9440926a092176000a GIT binary patch literal 2612 zcmV-43d{A0P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 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 F{U4kcVHE%X literal 0 HcmV?d00001 diff --git a/data/providers/32x32/mtvmusic.png b/data/providers/32x32/mtvmusic.png new file mode 100644 index 0000000000000000000000000000000000000000..455168986a2b18a327d794245c6ab0f4fc8a7d7c GIT binary patch literal 1801 zcmV+k2ln`hP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 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 T*R8PO00000NkvXXu0mjfUrqSJ literal 0 HcmV?d00001 diff --git a/data/providers/32x32/podcast.png b/data/providers/32x32/podcast.png new file mode 100644 index 0000000000000000000000000000000000000000..d7fa7e67b58509753bd7be67109e01f2f78305d3 GIT binary patch literal 2427 zcmV->3552EP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 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 JPDHLkV1gC1^z8ru literal 0 HcmV?d00001 diff --git a/data/providers/32x32/rockradio.png b/data/providers/32x32/rockradio.png new file mode 100644 index 0000000000000000000000000000000000000000..4352ff98af4fb5f4df004a9e9bea2d58f1df2970 GIT binary patch literal 2537 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 N002ovPDHLkV1gSbyW#)< literal 0 HcmV?d00001 diff --git a/data/providers/32x32/somafm.png b/data/providers/32x32/somafm.png new file mode 100644 index 0000000000000000000000000000000000000000..0a048732afb2c9502e5264041442eb3d765dde23 GIT binary patch literal 2004 zcmV;_2P^oAP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 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 FV1m|nL}CB{ literal 0 HcmV?d00001 diff --git a/data/providers/32x32/soundcloud.png b/data/providers/32x32/soundcloud.png new file mode 100644 index 0000000000000000000000000000000000000000..c8940f165b2ff786164b6daa5464a255673276a5 GIT binary patch literal 2181 zcmV;02zvL4P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 zVoOIv0RI600RN!9r;`8x010qNS#tmY3ljhU3ljkVnw%H_000McNliru-w7BBFbx}F z*24e*2Xsk9K~z}7rI%}rokbbPf6vUk=e+0ap51MiUTtY%X@NpRfl{GZC`i17Xf%p3 z5i||a#7}-Sh=~b_8o&5WV`2i47^CqMDnt#^R1pjoQ(z0$Qfq;33w!C_&YsKr&OCmY z+1=AErHwwD$-L*B+4=wH|J>dYk{N-Z@X3)HU%WQw!Rz}l*Y`mI1fWc_PxA#s&;MQ1 znCSA_sRf=MYw^^(UH&%NS;7Kv0DCv*yzq7#{reu+U7=r|&uZOf|K<}}CMuwkK+>$T z3=ja-L_mAU1Vj~IDz8sPJeWr=P<|<|76!-#*vu<>1Ffz>-y}Yx91;j^!ML4 z(AR%wX3aVRvb=d3nm|+|85T(iAb^Rp8UWw!_*2sp(}&KyJN@jvFU=iI)G-oQqur12 znVpB-Pw!v-V0CESBbBvVx0z~9lmJBsLIJ*n;6Z(wLnI&x&}LvVFfKmZD%dLGs-TuI z-7FVIj~*UBe)7@l4o)5%{q%_5_?r{B{abU$zRY*-I<~jEdfm6Hn{OO3Mxi}}bmyUL zL)nE;CeQ?|fh7|G>p&bBn+R0ERe=W5w+6F)#PzLRf4lPBW6#XCzk0(i|He&+GTdYP z8+`8SujM~{VB}Mk;f*7vn1$K1(3wlXep&9QbrP`03`zP#Mg+t}GFcU^Pa@u9*KDVL z%WZqE8K2rOkDWO7-Rt{;+xPVkk%vxWu$JE=zJU2N(43Bv_h5dYY0o0n#Ki*zbUV;( zqvDYIYTVj&S#ABg-H+5yJh^Xe-Zbo4%eqF@Rqz{VO~b-06y=5K^g*LH9anxX6*^s* zA4lijL$xH!+=gxIsqWi8hy#xXBb24kZbtC1@^qIveUHietnmu%1(+WP834TT7GYBj z2O*|USwgp`pj?J&%6}DuScm!&QI8mtvZKd}5}M~wGX=h@Vnq>+g$NAz0No-UX(fTh zy?Rco-s5Yl(bZSMw!4tQ_2|S~aCQ`V>t&p8#z0(BAwatcb_xw$a1IPOe2SMcMfdxF zfyN{d8&9nsKez?C^8hlqf!b~NFXPNkQoQney1)BAm2#$sghJ7UZY$OjYrukAs`Vj( zuk@iRq0*qthtVr<#ZSJ2>0gD4rFzw^Xlwqw<#u2gyYEZ1iw^$j?_onXx+5eN%2ZE` zfB{1%Dd1N|wxU5PC8ylHhp_!#+>X03TW+Ru&%@}@CS<7+UTALT$I$gR5V{3grdr}d ztSh3Czy%8UWx2hpfiDPGT!UP>3kd=)hpZlDtv2F(ku0&p8!2~wg3wqC^Ha!~qnJe^ zDeNMFUIj!6wFV_s!j5~W?sF^mjt#1346iUXG+VgZAQ5dSXU%)l@* zv;jqy0uU=WNR3ir^m5n0pll;;IXQ3YzR9$3Ga-OO`Jx@-av{r z5Y=Z*q+6}(u= zYL3qvF$lxCVz!)l{DEK3ytrkRQ}^>zO`bfp(E7&qf!{Wq{cI?8tEwkhgGVp{jB0cV zAm|0}42qzsi76?mtU;|KWEIrrXsKwJB-CdPpKf*z>5&_Q>>5R^fLCP4KvsQf@0tS* zC*QQn7DZ55y5q$1Ei2n^iqJ)+5;#UsXHn-+VlI7If9dumNY67!>`fRDBQf2Ls0e=Ehcl;I#f$%# z?Edjv2WMUaTBK|5;&CKZXA9UhRa5`M=6YkWVyZ2#woo;NVm(M$cE6}7i5x~mjX{l| z))FdKLe=3bPW+h#-+tni=4=A)ydosTw!#1a z03~!qSaf7zbY(hYa%Ew3WdJfTF*PkPIW00aR4_R@F*Z6fIV~_XIxsL5AvhlZ001R) zMObuXVRU6WZEs|0W_bWIFflbPFgYzUG*mG#Iy5*sF*7YNH99abyeEnR00000NkvXX Hu0mjfwy57r literal 0 HcmV?d00001 diff --git a/data/providers/32x32/spotify.png b/data/providers/32x32/spotify.png new file mode 100644 index 0000000000000000000000000000000000000000..6b1fb13223db811d0e52601b4ab9bcae0ac74d17 GIT binary patch literal 2418 zcmV-&361uNP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 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 literal 0 HcmV?d00001 diff --git a/data/providers/32x32/vk.png b/data/providers/32x32/vk.png new file mode 100644 index 0000000000000000000000000000000000000000..9ce371761ceb3f806a270db6d326ff063d3ebcfd GIT binary patch literal 1502 zcmV<41tI#0P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 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 T`^Uxy00000NkvXXu0mjfc_X8D literal 0 HcmV?d00001 diff --git a/data/providers/48x48/aol.png b/data/providers/48x48/aol.png new file mode 100644 index 0000000000000000000000000000000000000000..9e0413778d64616308b44f933428e39af098ec26 GIT binary patch literal 1920 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Ý|0)hZbt6g57&Mm$4w9|s>nb#AXIj>Bo6%J$_ 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 literal 0 HcmV?d00001 diff --git a/data/providers/48x48/echonest.png b/data/providers/48x48/echonest.png new file mode 100644 index 0000000000000000000000000000000000000000..e8f94e947a3ca3920f596b6ad7d6b7133d9e06ca GIT binary patch literal 2563 zcmV+e3jFnnP)e=d!K&T4Pp20 z0@ln(XFM|uJ9p1>pa1`y^PD~BIq;2qy&~d$QCeP>08|0ZKrN6lnLdD&62mY^PfsT+ zGZUw#0WjwC(cj1fCIqqfg^1#t^R2fC@n9`1s(&|O$FFtx08{P zN&dWiR@Bu|Utf%~96$o~ENIoHvF*Xu=9)p*_zz!Bg_Z7r=` zao<>4UM7GSfji=X9~m8Gad9!#*H_cj)HDU)=|%AKe|(;UZ@tCIlP5_`Oq`6wUx1&q zwX}|J7(sc?)pLq~=VF1EQex;jwY9Z8@~elbt*wm%Tukv7BVpF`H3t4^ZtvH>U z1^l5yZ*%|l?HGmuK|i*X48)QZhy|74Oq_7;!eLgi3Nbc{^6_!RyKka%(;mnzKKKke*>~?!hoJu?bs;W|5y`1Z=E3$w;apE}5n>S;c z210;RREu)wf5PWkDTpOEqTKlyO7RT{1kyCP_rCi$a`Z^l;g&2a zTtxNt*N4N5=@Za(os!~W8aLc!$u#}_7uk5vJ!qN+_5?)L8pJI>1Jw?uId$qcO;Bx! zo9{y`TMKq4nx@gz+)Q7e+mfN~Zfs=9;>GB?K79gCr<0PB5;SdAL>QQ+$?7$0LhiIX z5#PTJ@x9eBJZMd+LJ3=534M-Eog;&Yij^qU>%rl~;c&2K?b=XCj_XS7j)X84ZF&Su z(`0r|4nJOJErTBT#ez-9;kC=B(%U{C08s4w(PwMXiX z4MWilh~giBq2u*>xqsXJmVFx<8pz4X!HnTyTddeGC@3H^Gb_USZg(%IPMtzZ6D2zz zQN0d)!9LVeD0Q5|?7P63 z_I6yZZsyFnI=sImH6@jAUvmxJ-QCeC)#?Ge-A+|im4)e(J9jcLIEe6j5i6P?Frm6t zR0#Nx?;pT?^*6|q|3VJALH8qdKXRxKd1`;?yY~-(-y2$UNdkUET{9x!Wnf@{r=EV= zvj4JW%WyaxQ-_eMs@z;(Z~3L|?d`<~_!0ApA$>MT^YZt40Qte&$fLVMUP#bF07W?d z6%`yB7(wK*-N+B#3h7<)o-`rtD#SHQFoFTxZnve@ylKTvD2g&Qfy~TIOWuFyoqywY zyAg(ts8|)5ZB!fde2P5&8W_Py%UX6*!O)Q>_JZrEWL)Y>8e3oU|Sy_`4KnRjkQsVTFCL*UGazmjYgMQ@2uIX8Sd{-s3M)zMn z2jS;p_WaOZG0OCm7}zXnG$F=GAFmV>G#DEJ#Wo%eV)P579srWQL}w;KX>@oHl7}vz zDN{!}W+8w;Ai&s|4`0|52?+@xr6rBpV)eVRt!BgQY=;-N674mTGQMP6DIqZ(^Yy18 z3J|J_-KlZl;6chODl8c?x-PO1@Q!+8Hl&wA2AdM6W&N@uLm4b?lqn&rPZf>Ptz-W{ zf6U5sriz6?x65Tw`p&|Iq^71?;%~+g0O;xIvHS|IyyX`1a&!Mb2>AVePMkO%5v$3` zDL9?ZnAPBnBcSU#`}Xa#DBj-CKw4VbjPrtpKrk5O%-OS+jIn%q4e9CWGv5P32)equ zcy-UKmM-dRv!qW1k zmh(_we=}n~A7?*2i>~WPDW@~2xFXWyay=4{z(W(CDT>0U=gyIrn@hp`f+!M#%F0R# z3kz}e^x*M$@Or(NrWxyc{7Oo&$L0EUJOX!wXJO+6hCLp-ySrJqU;#NfIhMEO=H^jf zUr$h@4#0 z=fybmDusoMs99b^MP&sA^9xwGU;#^)mhZqVj@LFMQq=;joGumWzoArA+#IV+Sbx~e)52g zBw+(8fX4~VjN`ZHLZGTDvowvQq$COp3n?rtBs(jMhj#4vDg=%I+kxY4Ev-7=$TxE3 Z<-b3OwgqJ1vt9rI002ovPDHLkV1fq~;<*3- literal 0 HcmV?d00001 diff --git a/data/providers/48x48/googledrive.png b/data/providers/48x48/googledrive.png new file mode 100644 index 0000000000000000000000000000000000000000..267eefbe6155c1353afd8b7d72f6743fd4783120 GIT binary patch literal 1773 zcmVMWo>C`?&i9Ftn7{mZElvCu!5X zcka38ch5QZoO5r1CltVB+?EdGN33{FAcU;hY+?Y z)x-@pYy?Y|5T4aMn25Me+)LytmjG0h9gvmX(kV{_;bMmcjEnqay z2W@q5Y=l0KX!#X^xT#P<+Ajaw{66W+OAT53T>uOMn2i|&pkb>B$7%u+fFwI0%F)V_ zeRU181OQ+k(;!wq00qfw5X5O!`DdQmjC1wZ z!T1V-wCmW3oLs0a!}?Awk^u9Br5J07!iLhr9{IOT$OIuhbSD=bnJy50lq$#~(xab8 zO5`}K8Z`s^tIptJ!wuCjQNiKZkT4H+>AoK+yE_0rx{gsBj4#Hu69BIdbZ~_2 zY4zvM0=|(+t4G#|S3z7Xw`KfdY%eduJ+W1Fe0t0zj0_p*n-#i*L=VZKNLW8+4#G4+ zUEalqMk2uwjc>|NdX!_HkO@gq9xVVtk?>Og(O3{O*?p72uvim68(YhZP|;MUDl0y0 z5I&5Xi55wCbO7|64qqj{t;!P@8i}~jNUS)!%cH!NBc~%iY*3F}$!7o*6pM!^BRV)- zm9N-Rfxqw8pscADhpLNJdHZSgcqeumSi(Gf049wdS+TFEW>Ha*VJL91 z-l{Xuv3!?zEMf4wr5q=2m#E5!(1qfoxD>Ag+N#@FyjdRTkaj*NO7ddqIb?#j~ufNHx1MRlcEH)f9C$`{mJz@N4%^+vy~srLZDgX<|! zu%rAWn#5Lo{KsA_jF|$XCfG0K@5>^#UMs?VS@g3bQy_V>&DFKqFzeK2R5aD$y^+)X zUj6-5XHaY@_wJa*MMu|zt=pg&;xTXtgR-VtPzsn1F7@}s6B?F-j^#ZU542rJm4mHP zz%zgjOArF+c^!I#ye^{Kbad}RR1gdOzA}24L;xy?$K3)jCbJ+K?idw4bRLh9s3<## zmdiJ~wLn@LWNV8BGTj}p7Le&~xxU$gZRy<~#f5E3HE~hKlK;yUlT!>Ba_6EkC*SJ0 zT9-scxi*lLcU-MYYRt*E8gl14_ZdzJrKk*syfoZhTVU5bJ7f>jR}%stfv^ngWHSQv zYOuSLNjk2Sl%3K|+q}D<9=90s(qLPCSf#M&WC>gL5g2mkaBRQeaO!-~9SH_3Kza`Z zZU0grw_kLZQb8;vTJD%!-)ymEAMN&{Ta}FF`H%On2BZ7KXr7NJ6v*@+5$JjbDc*}M P00000NkvXXu0mjfn!PFo literal 0 HcmV?d00001 diff --git a/data/providers/48x48/itunes.png b/data/providers/48x48/itunes.png new file mode 100644 index 0000000000000000000000000000000000000000..c1ff850a242da2afd252a70e419a407a814b30b6 GIT binary patch literal 5029 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 vof-QMj7%wI8B**2xBp}bfD;jS@Q?oo2WCyhyM z(#Eu@wKb)o!L&X~G#WG}paz@j5-}jPJS1IEKv7wj!G&FRhJDV=y>st9{bQD0uEV+u zuDCRwf97%S{hiZaB0 zMFy<8VpU9`wjj7dDK$pDEf7L{3@lpRwE7r;9N3iN5g5D511J=p@-72b4}|8_7f*Tj zDbxj#_X_osA_J6Cu?q#bN~!Rv@464pYV=Bj@Ye?viti%8`e-Wb=3Vl39@lnp^KQW@ z0`NdHHH?6PZt6%)GFn*EMp4M+kwPwdp+3NqciU z$&Zs{x-vv6A{asA`!yhM<!>>F{Fcd7>cWj4_WCzIuNxu5@E835=lk3X?P*Pq(d}^GDGbS>jZUPnKE0CJs zckzqjto+AH)~;Afwl|BWYolv`lXF<|*b?Fw#f$dRt!dtS;XU^JYY$y*T{w9MP1go; zT6qfBb}_>y<7&oHe``JSZ<$Y|EaH<>GoywTe_p}bd)6W~i4bCRQpnEQ)Lvf8yr0f1 z+G}fWWBsq!)A(E?nXU|aKqnfD5-BT`(Lg9bARHiE5k@z4QmrXo{mrYq{MgH!NS-K? zH+9Zb<}I5?KARss3^`O+4Ijmyz$f<^rm}#GL3-2oF#KGg2ssOAcwnQtv-vod3B7h8}I8L zT*qa{#vL@h-9$-cNg+~wHq)-0#^U=IvuNcaZh!oCW?eUn?i1a5^$|LM~YY+S1 z-;d{dgGUNMVp@Xg$<@C9&p85)?J)D&nS`PtzxPu;?AWjaGhz-Jm3JwxE+5Fi>A89L3l(X!Y%V@Z-0jt}>b=?8t7>ES;eAnlsj;DMwf+ay}FR#VQSi=JO znnV8U#~tA9LI@Id2`UpYI=)KzXt3w`PwPC^$*$LT^3L;( zWP7v3#>WcJ^xrWTFT9wtsxsd@R>q=bZ!>1Zz!%Ij;O(@gzF!H|pBDYUHACmq9ft~_ zJ8hN3N|<}|)!4bg`YtqqWm$Nxhf<2<{v_)jUdM(%Zp3jM0+GO=fgU)v%c7qzA`l7q zz2Di#Cm(!TC?3k+hYT43F+}4Mhy*yW?EoiQP7sYn2VXRF7A{}N!R-h6Z1-oFK@&4< zl01-P*PFW#Qt-~--=RC*O*j_rcS_+P=h)%QDodk2@)UxL+FxO7rSQ@r)px7hgPMtVDYi@cc6<;nHtn03P} zmOQwG(yG!T-u2<84{;o4bl9j;if~z&kG6b7)8?k4{rJ>4cmDoP8df$CE-iRE*O$X_ z9X!v&&e+&lo4l3Bu^lRYRKZOT-o*0XEhjN8Q6%s1-oxyCbLWWrUp7&5 zX${r2)xN#hgcytOU(D==*(CQTY5lyFo^%gZuLYt&4N5CZNlZ^L>C#EWr^L^wVC!eC zyz;A83YAS0Bf4isY=D%KlgCc-%*tnY=;enfjrl`w22CbiHi-!{CSd36LL1pn52Pm1 zbPY3P4w={OE$zJc=!>L}rHjEkT0ODUC8^dFPb_(Y!~Z>e#%DBLBUBQiq@sjqWt3=T zlt_7mU`cRD<&PdZ%9^{@(AL~GNFTndsf0jaWh|b)_i5^HtLNI=uBCc%^*K!^+M3&V zfBpMxTfeQ)f{ODnRykF3Ja*Yt;$XHiim%8gH=V!$ckm8sS;sz;Xqd+)gFl`(u b7+L=V+M$7t5L&^v00000NkvXXu0mjfUI=5y literal 0 HcmV?d00001 diff --git a/data/providers/48x48/jazzradio.png b/data/providers/48x48/jazzradio.png new file mode 100644 index 0000000000000000000000000000000000000000..a65d37de948a580f3408fc092c66e6bd6fd6fbb3 GIT binary patch literal 4250 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 literal 0 HcmV?d00001 diff --git a/data/providers/48x48/lastfm.png b/data/providers/48x48/lastfm.png new file mode 100644 index 0000000000000000000000000000000000000000..24044e5a6a24482d79b4bbed08541143d701e332 GIT binary patch literal 2206 zcmV;P2x0e$P)Qw5I?72rEfM zK~!ko?U`$k6x9{SfA@CxJa%`0eZej)EFx%-s6=8=v7$jyi_)_4#i%G6BT?~LNPJX+ zsnQrNlc-4qBM^-x5fZEN&=|_9_^K!pKqHBz2(Ay7UD)^RJbI_6yYI<|USU^Ov%8?~ zhdos@Q&Zh{=KSwD=YRg^HjLV+9g?X}e6M$u8k2yr1`-0+2yrshP$)pRFOmU1`uLjN z_r|zV<%^QZv!__r83IZ`j}QPxfqWQ-&#&+4dCn6V7(kg)RbO|UTWU&6D#nzRfXE2R z6GbNPQk{3_JX0vV?)CAj9{?kgaxCrC*H%$cJ`Q8di11%)O=nk{jt}-YMkLkuT7Li# zLn$oFA_zldgharIU@3LL$4>)5l=ok**#96kVJkRU)z2*v;k zWoeWXLySS(JYg<}aq}40MSMSUT5A+UYyA+yC_9v+QI7Kk01&~rE_P)F$=P#=O{vGO zo`4h!_|47a{`oTbO|Kw+v0pU$?zG8z#E&|HviWBcpEjMKqn+G~&(rhf8xaVtKOX=R zhUi3ss*5irwcs4A$|`g`j&dAC4B{23xa@nlTQ}3Z;x@dU@1pGfe_?VSgwyT zDl5^6WKcauE!xB>KvMwQs;k`l%&Jdd)|=d=5Y zOX+_0>HQ!~-edgo<<$J}4s_XphN>I~olH`7?TzF%y+UT=-v%vX1|2Iam7?yx2lhK3 zc6ZaU=3yEZp26F*rm=JGY?^Mqfu8@o3C5sHN}0OhPmDeH{3zeUfW$FJQ-0ARbXf{1 z6xe;mrEE{x>^${E+%22g`=eXQKDTj58q6MS!B$_tjM%j40OVeNfju`}OX2MusF+4+ z3tt3x`*zw_ucG>fWsF~T3wC7{QyzVS_vX*T-S#GlnX_s*@p7sUD2;iLcBgwcu<3@~^#0<26@O*s%j$5=Yrl(J9M9C*vr~qUEPQW8aF~ zF|LbFmN4n(ze3rd;<5cqzSh4Kq8iP9#WrtR1F zYG@9rS%>H?tp`eit^wS?Usrr;sNRK5cO zP+Eft@td14U7aMqHV1&>M<3Ar^k2{=vH$ z*z>>5)OAlWdDTOdf9E2cnp%wOAz^sv08Bnlv7v#Wxe2Sf8l6ahF%;hVFQ&%~F3egJ zW-@dh%s2HF`y!e9d@TtLl`oZZIga-9RRWVsg#~_D#fN|8qQrn^AB#sePbJFjWw-T+~U-`Ya@ zsr3LakaUV0taHeuGox{MEIbdp zyaE7s%Vv~q9Udv69Ea||{+WG~r%-dpUBstNr}oZ!sJiMp+}F3_H#LINB#%9w#H_Dk zPpCoJHr-D?0lo4d|LQArto;oWZeKykoD(^6ksSMyW+M3PKcrP z7x&^!o=n9hmlHp7Iuq}{4?+_Sy_UUyX4t)Caa3c2=r=<;I+S9Oj@7Gpckc0YJpNmP z)>e$?A-<3JK4H3x%*JPFIClY!S6z;A^ZjyMf`G;)-=+Dso1PX}b&=*u9PV0mB)Beax zQfHh+tiB#oEaJWM4(^uM5MzckS`KR_R+fb-wE!V(ZzE`H?HwC!RB8}mPsTxn%-^5c z-x!spP>wU?A^#9hB@|c|YFJAZDjpx++Tqr~NVHJ^qX0$$^y3sI0;)Iy9W6#@+Db)_ zFb1YkQFtCI*D6j~UKvKn6EYN#7mWv5QFwhF>j%I!CjAf3TQ$YDPw+)zW`v}e2ID9x z?hb-CTw~Io1lQM&2g(ylRRN^}&IpNs59A9X?LZf>{nI*e8VCy_1t7@?dC*OC2;T$b gfGndnYKPDM2f28OR)_Z_F#rGn07*qoM6N<$g3`St=>Px# literal 0 HcmV?d00001 diff --git a/data/providers/48x48/magnatune.png b/data/providers/48x48/magnatune.png new file mode 100644 index 0000000000000000000000000000000000000000..a529e9ce3293143373fcb4966195705bc5d5d22f GIT binary patch literal 3878 zcmV+>583dEP)II$fYh>=_D01=Xl;e&x7 z$SJ4foScH3atV+G@JT);2pk|V5gL?soO=HG=XJeauZc)3A_@rq+cJ6YgZDn~ z^?LoQSFgIw&CL_vX->NF;)^eu%a<>|c>etPFSgt5m*Y5|GscKg>d~(cAA#>9o(~~l zt@U}HZ*FaEy|J*c@J}~y-hA`TH{Y}$8^F@iQvK7P{`A+Le){P@X*Qefq9{;Gajftm z?3qL<1xiL&H8OD6Ul%-hzrX$jKp_NbwHl{Ro%+Jk($XK!&CUJk+S=M*-M@do_mLEu zpPx@&dF7QqxOnm6pEsLLdcEGG^aV-~9U&%0k}A5=K$03NN>ED5HQwQi3^(lIhCO^f z#M_MEY-zDaSfyUC)9rS-ef#zwz542_f4RQCo=x7@ht}&afBDOwzjW!+U$T8kvJ%S1B^=-M$r@58e?%KS#0g3#1QC?-<=P;q>I^z*U`&N<<1VhqP$S@B0#KT!wA<~MZr!?dUPP{W z@52EA&1O@IqBx_qP6mU)QO(<&q`geEaE?%EkdK8ELntze?iNLF8$U=(etWmCQKb-V zkf?&LHZjdvOrr%#z*+(dHMM}z3B~<)vFQ%VL`P)MS|`@pGqqandYY#G0Dz(>#5orY zheO3A$wpeOoIZ=3ev(30peQ4nC{4b3m%+vdxU5gG1tEBpg5U$e7N7+s`aqNt^8uzd zMP=bhOruqT1xThbi>0kxBr8Ddkv+{ zk-VTQH5yNT5~(!MfJ>UBciuW0wF3-qevfKri~8B;_Pz|sH0JaTy(SnZkR5FB49B`-coR z?ty6FXm$_YA`WurN{xqrcY(a{xGXy{Y31)-$D2Bp<)=zN(gr>E3;6X9Cd$jAbM9o=3kwc}0nt6=j_FE$Wa)*xa#R1J9j@Q9ibe0oaw--Xabqt3?+;DiT1;)P-d>?o9+swZ7TX^SDBKYQM3SFT{ zchJT>nnKPw@;t};KvbE=#dVx@h|%o6`vZn)=fJ~z>8Ua-SElhvlYDCf?LE%9<0<65$6AXm3Y^k}$}~kVWoGSf(OG?;d^qG# zNEl^|P$nbM1XmE{1-bQm)uJsNS)Nm5*(gUi)Ts18q)ccN<@WZSYqaN{82LhiiyP$D z5mB;a(htm}1Fx^I(`Ym}_1HP2IafMjfZ@Yc2D=XrIAI8o%$%lr<`RC;rT^hO*g+RU zATLS)V_jS4$g+H70Z7`*R2R80Y;0^C z2=xbiU}tBCTkpKXTIzV=g@|V133$@YReIfBye;-(wXQU1z3`jp+H^@9Nl1VEUEDB5 z4|6JoE43ZK<(B@SkL~wJW|v7Wyo_ltqeRHPV*AD$r8UMSL)fCS{eWtLSv3RfC_?MyhL{OJK*xYXoPiaKir^`oMx-rqr0}l zgY7QrFoll;pcJ4D4q>;O(np;pIXmecF^$N2)wpgVGwM?8yK`1g$j+3ob{SsEito8FUntJuE;_Xrs}Q23xj`#%LmK zumUEEh+;!o^#(8zCenn$U`&KD8f7$yCK!!28s+z!LmkD$^_da?ijemaUv`2b#iK1C zq6s!f4R_H~^DqjRCQk7AC~0}nqR>(bp+pd^5hG{;ErKWw0xAF^hzO#}tCo@WML=sr z1T|8>0!+0|G&NhUQ<`khLHT_2_dy!TQ2+wP5Zl>A>j)7=W%dkFwTT{CNVFg_zLvsk z+5bGgr$r-Lqeh>#mhzdA(39u>Z)>7@i%M$&ML-06ZwqXGpf@-ffYx9$?9LjZ0-_X^ zxyPuqm&&$KO5w*^))T^L(IYLZeL%7gM6}+s!k!W)?~fGFSUyiYbqYOJ=I#UVZV%)m z0cfqk7ucOu$a{zaoz!SudI=G=|8lL%zm-CdzaLv;d~bA?VAMze*?Ue#G~9buDNLNu zdiFD@;LxH8gI!#A1BEY@`;itH{ZO%eAG^Db)&}KrnioDnWBCFq_zBHPS;{DmQb`0+ zl!7WIKlcUmz3%#6*Ow%i!)ceAYu7vq#rS5PAZDu2d>d)oQgbg%FG=aOp#8 zi|0wEPlL^gYSYA1Z3cI*6N(`|-6E=1Dc0U)_xkI&bPH`F{4j+qC9XBdH{N6S%D1rn zU9{HtY;>FU0A z#IuW>{?*?lYAu3yWd~RENpJouuDeMTCwtZMB!$L})Ug&QwKet|Xg6>D?Q9J?qChyaN%Yp7}MVpZzSlGF1vB0w{Vv{XT>D-onJmflU`v{KnTv=FXO#SMXG4&rtpRR~g>F#qQOAVYsutulfDa&q##P zeu3817tb;C{1-4YOM3%fr0merTi;{*hyRGKG>!~=N72onIF%5QG>&8EoI5a`Lu-N; zHedT&=05c$s>@HKliFTO**N*b3ATi^c& zrk=b<^Wv`%O`k^TxD-YyYD*VsJpK&9=J;ZOw>b)hL1Do*glfc(Kd zIyb*V@59@~wW+?Cm|7`*jXiC z{Rt{qqG|(EZI)VA9_7ncQgnolDrggz^-u_?;L0p)3=$l6dxhRRZ?Jp)b&A~w=s4l{ z_m;HobUI(}cDvuq%kg12yv3w|xZQ4FURYT8M!jBt>bSAV65w{kpEnOsTFJc%g0em31VzkYaVmljT4?kqEa*Lw3jgsiZam!eSUaxm+ZEfv$wzjrz0>=Uv zTcozQxcKXHb8~-ItJN+WQ^w#Efw%%tm|7E4o59qk%005UQdWN6{QQfpR_m+vdi|9o zNifFn$Sv03OP$EL6_trS%24i7dOyky^2h<#%F?Yz5O@q>+5d**S5#QZm&3|0AjCZT$zoWwc op(Bh6w(x)O?+rgce&*x90Dj_yemz-SNB{r;07*qoM6N<$g2jSr$p8QV literal 0 HcmV?d00001 diff --git a/data/providers/48x48/mog.png b/data/providers/48x48/mog.png new file mode 100644 index 0000000000000000000000000000000000000000..cf985814c8b0f71979d5241d19d859ba2ec4d137 GIT binary patch literal 3555 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 literal 0 HcmV?d00001 diff --git a/data/providers/48x48/mtvmusic.png b/data/providers/48x48/mtvmusic.png new file mode 100644 index 0000000000000000000000000000000000000000..4ac2be524378716a6d8b5b0a10ee83ade53ae636 GIT binary patch literal 2362 zcmV-A3B~q_P)OyBr*cIxi?ZP zA6PSc=FZvYp0(Eguk~MR?+usal3b9e!6u6zdpUqG8>N;5*8$^G{pWuqO~6(Wc~dF* zc>nKKb`8manUB7p47`gJ@-k5LH7{~4@C!$qWtGpZ(C1E?=RTPI=%1C+awo{^pvGPV zQIZ4PtdO?+1-DkV?%60`oOGS{x{fUZ)*u8yE|yTw0-lFh3-F($AvANwXkVKPLz`x1+FPf`c8NJ%;zDF_K$ zqvd?{F4Mp?z*HvEKQBPcvIjKY=Q1%=`phh_Bxw>W(Gyb9yzMyT2LrtF&@v{D$~kZT zcyoxCHti(S=b^Txle(4;9$C7O<%^34{N7#9tmDeb<5>T}0c=O3QaGcKytBgoZ1=Q6 z90ng6M>~Y0@c|V~9-YTeO6KDCdRS02jt6d9!1Be#3;-6fgpJ2#GOuVn!C^ie$0iN^ zDk%aYsUuQEKm;{N^v<3%hMs7g`qmEaE}4q}Nf%ZG5kYHx=J!yQlG-}zm99v8Nw3HL^M>-}=H)|g7A9Z6oGV%5=qAu5#2Aal&KalPp*5HtPC&niwdwTJ8k`gYCe$TNcv_MzirZE6KYo zKzVfow(Vfq7E5MLVbg~PczNRo9Q(ADD<+P{)_wFW;=mAD$aO9YrMACcQ4*=FZKABa zircQ8!^HeN-YDHoT}y~N7GH^NJB%G3WYLVvdF#D>6pYLv=+8tu`V2XU=BsspGgKx? zEA^7uQ`!8{C)78$Q;?rWrq_*#AmY#yjq&hpCH#F`Io}vJ635YK`9h)&u`x0RrpV+& zq>t_b8NLBO=r#=I6cv!+b#t__nGX+E6ZB``^|&w{#jis8E!XkKlL#AIoZtl*{|9C z%CC5H%Wm2_PV@6y7W3-6+j;o*8@ToH=XiDX3W8a~DBW|2_O5Q0E-Ys0>fiI)>J^L~ z5#)o4Bi#4YpYVF!>Gh*YX|%uBNi`Cd#e(UV6UfZKbeY_C?Ho+QAlskGq%kAeRaHab zm=V~v!|?0?!K`8Iude40Zh3N7&470Vcvo5h+9rTlg4ZUjk7_qil>J_6~q2A0LF z%g13Dik?W6RX@0a*3c<(0vTN9&t!jf1Jet~5=&Ub6BY-KHBwwOk?&nSllnFDD#{;Wky;`jaCdsf&o#8joo*XX-@uR@KlOO|bJ&H35Gnq0?cGHa2rd z$pYp~EoAMc_qgw-MdasY6OARv%JeaZsfYCdgc z+s9QLZ)&BnrJc_19&)pWvA60tZbO}C+@Pg?AQmcG_E1_ZqyVi2ltM%>ltPOj2*E5r z`ME*j@dN>XCf$)Jh|n8NV44Q4?VTv4Fbsv|IJgWG86x{vZ+KB9K|sWjs=r5Q6khbd!65e)bdgxsuQ)U|{VEmWU4N%LnKx7nxGZJL0fMBxmz1SjoAB|Rdu z9UIdy89O|O-gttJQ(d?W#i3&jR2;2EYdM3IX(~YBGEGd=z_#s_d*3hLN~G~!+i@ry zJ(9v0oLSZN1>n2p;$V&Uv*lpn6) zib)fwJYLV-Z%!r>i__f`AsmVF{U!6+QE>#vaX8TyVpLv`vONb@AdSt6)|$+K zhj1jy$@UPH#~LV}TF9Z}4LtM6J)AiC871>(P&~Decs#+_QF+Y2VhW*CT{w=WIn+t} zscs&;<3_gZuHZZKX0pC?JGN!xGR@QxtOi9Obpn`%qAk=(cW;DHSD1OzC)3v1MafmO zcwzlU>Q1(Dq@f9ahL6_JDV|;RQ=VA!7ZSFG+vURN@zB-N%eyihjR}lLNA%A!d&F!5S zhC)6kIn{@@Qhm={L)u0PwePG|$sB0xzlBNjY*Z1qEKI||?J@^EY7|MUKOBm5)V{Me zFBuDM1@0ZfIVJA?)pHytZP+hR-XCN`BkM2vTRq|R_>)j;rTUilNi{U-MMx-IKqdO4Z7kC||b~Tp0 g*~uljBwvmE7iEmT9`s67-~a#s07*qoM6N<$f|FTqBme*a literal 0 HcmV?d00001 diff --git a/data/providers/48x48/musicbrainz.png b/data/providers/48x48/musicbrainz.png new file mode 100644 index 0000000000000000000000000000000000000000..2dce71246021f97efb3c3606d2466b70fbdce694 GIT binary patch literal 3319 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 A5dZ)H literal 0 HcmV?d00001 diff --git a/data/providers/48x48/myspace.png b/data/providers/48x48/myspace.png new file mode 100644 index 0000000000000000000000000000000000000000..2315b3506b44a4b8ff27507fb14898a0738eda3c GIT binary patch literal 2926 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 literal 0 HcmV?d00001 diff --git a/data/providers/48x48/radiotunes.png b/data/providers/48x48/radiotunes.png new file mode 100644 index 0000000000000000000000000000000000000000..75b9ebb4238e8d67b863819055929070838dea0d GIT binary patch literal 2275 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 bKIHg60qt;yzA;f800000NkvXXu0mjf0i0a4 literal 0 HcmV?d00001 diff --git a/data/providers/48x48/songkick.png b/data/providers/48x48/songkick.png new file mode 100644 index 0000000000000000000000000000000000000000..aba0c8bebd0da8c85d3174b2df62ac9605228230 GIT binary patch literal 4852 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 literal 0 HcmV?d00001 diff --git a/data/providers/48x48/spotify.png b/data/providers/48x48/spotify.png new file mode 100644 index 0000000000000000000000000000000000000000..f8535b3249acc864d2ad55250d4b6568fa997cdc GIT binary patch literal 3080 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 WB@?YnEE&5100000hFP)*=2y_X;M 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 BiWmR@ literal 0 HcmV?d00001 diff --git a/data/providers/48x48/vk.png b/data/providers/48x48/vk.png new file mode 100644 index 0000000000000000000000000000000000000000..3df4238a46c72de0ed39e5b9ea4145bfc5d4fe13 GIT binary patch literal 1984 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 literal 0 HcmV?d00001 diff --git a/data/providers/amazon.png b/data/providers/amazon.png deleted file mode 100644 index 5f92ffe1025dfc63ed1342a8e023bacd8b6f1b84..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1264 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 diff --git a/data/providers/aol.png b/data/providers/aol.png deleted file mode 100644 index 985b97a0f0b5ae7ac742f5a8e2730951d48a662a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 971 zcmV;+12p`JP)Ht^sf5ruS@q7;qUeN`59$FFkh3je^O)T25ORSbRgpRKK}e~fEza&i*7ySu-n__w0OZUQhjH&=_=1N)9t zt!Exv5dieRzrQ!dRO6o-PMyf*3Q|hK*@gJEQ3 zB=q<9H?32`!2$r}NGwATrge?SzFx@@5+@B4bq%$*x3}Tp;UQdKUzez6jTjIBIf@Mn zL7Jfh0|Vje>MAHVo}Qje!S3#^c`KG?W@h3$0LmlA0HUN>x3jZj@6OK7LT_(xsX-Y7 zX{L^kkB66+mspy3gaV8y8CiRCb7O0mUtC-?h4Pm5tE;QA=6SxjxCniHebG(?pb$tf zD8-|rqhVrVBD}r5nG#s=f97g58l`d*Feu04&CN}Fh5-RUA^_+jiBQb_`T5z5p=f@7 zJ}fLOg!}t@GxqrSSOTE-Ew9p;1HdO?%0MhbZ9+;u?OeHio&GR9JRIlO*VjX5XJ@RQ zySqD^Cx3Vb5Nid9Iap&J=VL3zIDbmFXOhbA>x2O%M@L6C|N8nG4h{}1=9-f}^#K8Z z0oM8QE^=NPGM5)aLqkTta)V@K4y7I(WAf$j@Gw&C0Z@iYN;z3N5fOK?l@jxnp=>6R zE-x>`($bR6Ln%oMIFv&F^73*F2_;J_M(6(izO5(rFpXfZ=}1;}*r+=jd}nRt`xJn- zA6vT zgNEimLULCn0134DgsQ4__J1GS++NZW0J;_NtEvjcRy60n4}T26f6Ga{#~8(1$~FDy tOvf!VkTRh&p<=7EVrtCKd81VT{s2MTW^LPO4aEQe002ovPDHLkV1i~q$&~;A diff --git a/data/providers/bbc.png b/data/providers/bbc.png deleted file mode 100644 index 579f85f8b54b41a09d2d333f554888f3703aa626..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 565 zcmV-50?Pe~P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyY( z4;wJ|?1+{C00Fg0L_t(o!|jzhsscd}hDF6Ka0534#oa^`PhhA=5j=vP!5avQf@oqQ zf*X1Ry@#NQAgJ~D3uYMKbffPj8gxN3-Btf|e^b@PSS-rE!05w60Vn_k@Ff7jV36|p zJmqpZ;YcQvtSc6aQca;yAe+rb(P&hv!5Ohw%nZ(ADFu)Sz~OMv`Fv)5B9RaRIGs+~Y&LpqyWPGA0NQ4=Ngj_!ngPV1 zK|P1Vp$P!{)a&)XmjEv!wX@lbs?{nr8Vwx$73p$O41UXPA6W&e>@&dCBXdvh-QPq;5EQ{z2>h&8N6OEO(qi|08)=Q>Woz1 zZZ{LaZnxt#_QJ(3m&Vpgk_A!Hhia5${~1qwg`D1avbWgoR4k)IZ$&0#PT00000NkvXXu0mjf Dk?`x` diff --git a/data/providers/cdbaby.png b/data/providers/cdbaby.png deleted file mode 100644 index 547a89183db654e00cfb8cb6e20ad4c9f6ac957a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 484 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oMi=$=`aa~m}6@X137F--tI08 z|3PrU-sO`)$_hLpi-EKU7`vU!wqsym%=dJ046!&p_p-M)Q=kOfgU#=lrp=gmF+eG@ zr*h_*Nms6zv^H^^67k)|&8DTbHB;O%;q*V}D_R+$+c>nu9bI&zw!F{ZQ+TW|W1eEp zgTx1a_kF)D>r}VTL7^dR!msnMKR>j8vg!6)M$xWg8>zt_D*XPtQ!bpd-KF6f3t(kg57%WhITkq60fcCjQr1z5RvJL$iFhq-$3u2=6_} zG4Jzfy_C;Z8fPVyc%%+|{&!Jr_wM&cp7rs0RlArQu*j7y_&4FKp2=Im-1!Xieic34 zDSMQex4eJF*1r!DpZ?h=)fC6R)b^+CiYt46Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01iz601li1-u9eV00007bV*G`2ipf1 z4I(Wec6@vQ000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}000CJNklZYah5d z{_n#8o_XizCo2Z;Uf5ho;LWr(Z)d+Skm_H+G;K|N!~LOVQsRzVMyHpD`S6j)RzAo8 zm&QBZd;8=LFcXWn{Wph*rM0K-x$-_>8Q|y-tB?ao_8)9-Bsh9%8&KoTrBMgz1TWFy zDS8jguj?WQ!?e!ep30R=^wyocbO_04Pn8 zD-w8g4s>bPgh_6YEMd8xYs}0!5K#yjkpja(!Z0i+TmpB}Sd48U|N9P1^KY2N3l9a^ z4RsWrF(B42IbWQGug*G`M^-!T!6SQu2X;F~;p0=ri66ZyFm;ylR4!W{7;H1=r2`I> zo^vxip?-gHBwqQXaOBt$n^z6<;L&}FL-z&X{JLSBI5Qi2XJO%Rk7o0BNi$3^Pot0YpCgf{<;R;YwSS?G_v`X7)E@Wgw0nYN1O!{+994*C1Ihk;XPxVu6hiF$@E%NG>vgN$k3H z#M5_sqmqT+E(ReX^XvCCo6>>n#2$q=4mxkjPzafDU}fM?0uWcL%=hO5ser7O|<&czLI6CvZ%Gb6SSh9p&dbH0gUL46p&;JMH!G`&c{ za8R(eQ%<_2rYw{qstUq|xnm(Bi6xwz0t`weMkROgwc)(#mfOf^I$3SpFcVkC2~!Qb z`b@Q`i6`o|no^y21!myIC{|I5ks?t64T#M4wLEF-s1cF+EGRXHBP-3?9%xFFTQ9Xl zhf}A=z|4>`xCo2p9BI7(J9`;mbpY#|^}(WbaiVDQ8GiIs%<998==8q@$_#368l7rh z)INx%VQ{srlZV&-LKP^iuA&fBR$m1u-d&ZW=3P{V3X895_SaAt6jO}hz@Ci`fua5J z#KC)c`NHMFnwgV4;Wn+kHlYqw5)m=!6E~zK?Qu-l?c1x<#Kz&9|B7x7fPVlAmHuz) SY45)P0000QL70(Y)*K0-AbW|YuPgg)Mm|wZl^r diff --git a/data/providers/dropbox.png b/data/providers/dropbox.png deleted file mode 100644 index d9a18826b7a56f26466fae4604e402c703d916c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3475 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 Bv26eV diff --git a/data/providers/echonest.png b/data/providers/echonest.png deleted file mode 100644 index 74863e7a577ff5abfd56f4e1cd3899a9e389d55f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 309 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 LNkvXXu0mjfAA$GC diff --git a/data/providers/jamendo.png b/data/providers/jamendo.png deleted file mode 100644 index ef23018f712a33f4e535bb02f8764f64ee6f43c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1496 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 m%5l=VEE5GxoWCt?WAcBQri1GOZZH)90000f zObKCl^f|(0QSt;S)|^@Qg%?V;-Cr!xlvmu+bL#(1u3i88wWXU4J9veh%Q-jAe<)PB z>DB-JE294WU!T_6bcyG%g6WB>03L>) z(6qfGe3Y|O%X8+VGcKNGYz#?;O;3CT;>>`~WbkzLb6Mw<&;$VC C16y{D4^000SaNLh0L002k;002k;M#*bF0005* zNkl-y{LKB@|llB z6SdbRld^V28#jTAqD{0A&pgl3d%2x&znOEddc@sz;ClvUzVrD#W=;fIj!4!3Q8ol| zVFZ#StcF7dasD|(`A{&Y6$0?H18`gB12vPH<{&BplYyCaefu@kty$=_y!KC<04Mw4 zHqJpekRHaNAH*RpPe4*sb6DM+0Y5W{jy;9EJ`Hts3hK%vR1HP190or<05A3# zej;hjs_rEcAAZ;XsinWbKOb(}M*?FhT&9n|(L{Ez&2IAJy$~hO zz>7(FG4P@uh*SMg*QTtI9qCvJEr5K9 zg(djH+XBdG0?X~B2x;w&h77WH($3C-DA?f+`=~;Im0b-mWiT>0`&;4cejGB0QhEd5 xe}nC5h4C7N0H%pswb`)UzHXl1!JjExz<=wAZiSO&D1hJ)}(FH)NY#AuIJo5h_#AfZEy1B-TUUfcfa}0Ip4W6X8b>6 zA)%J=@_+GhU4qV2zN;d55Y*3-&~t?`FNir48lNRG8$z6fry;h0&`y{`Fn^ZB z_@4$4dI)+C{l@FrgjocG2ksk4_hvuhoymqVp`38^Ne^;PwMhTeOuA=CNHQ{dzT3qq ze9T{-0%yli*jRa7(b3Uq(ACvxi1k@;B`3-TjhQaUi&;EoW+LmRcM_#{CmW80c!F}e z>O~kD8oz2f#}d^m`VbvnLMTNPT|nR@hJ++7h2v>cF6dlW{+JXPPxmK5by%SJdF@W%pJR;N! zwPF=K-Q!S@-2rX#Cd5V-38gOYh{TNp3Y4psV7Mt5cSy0FWnTF4j1~=AC%D*{jL|p! zo}`44WCw$iHTS^ zS0m>2l|!N`nQV%>0Ye*tacO%5xGH}+mo7+fb>8Y%i+MueLUCnqm?iV&QAKDaXvQ~x zQA#$`ho#ilmo*0mq$4GvkwP~DH|I#?WwxPq<#DizMY&xfr1@Fxh*(yDwROW{!;W%q zkz>D82wAmT{R#N#O)cKv7muQNJ8}PPOBkAS-7rh0*DP(PkUa0nZHub#P)J~=NNiTe zdFe8ExW+&cQw3FgJ(zUe%0cm)t5f&{v4U7z{Bbc8_ufjwW(wm_V-R}R1YpH-dt{T6 z{LIDH2y89#K(LG1LE6fiP$Zda;NzT^85i=x+e10RB-kEU9rh_EQCW6WrVxalUt$%GGs*@asX)AYv(_|v0v8xj@c(E)fYmk%L z-6aY%7X+Ayzi*1D&fJV0$kMhz?xlh<=aj~h7}<{ zyB$?!$KYV^2ZgUCZuYA1!F~n0Dt&N$Z#=Gb$BIN}Vz*BuLFs3S8wZs*N%!OqrfpL> zMRXDzq}ITrSs7O&$Y>Iq;OQ2J6-E20DtkmFvX61{bFQ&%jE9m#wDaG=_0Rg z_Nws(smZ2$VOxZFjzh_NOr>G}?O3CyXV6?hit`V(j$P7vXL@2fj<^qK^n%>xqSrgQ-xDE0mx6`D{95`nt{2KJV!3$=27A zH5BJ{liRx?&|fPYp51;t@wrznw)PbBabgTQVTfKizUB_FCd~<(a$ONcUEq^rD%=}Q zgOP0Jx~DmdDU;Rf5FJs9x(Vfu3$?gk#z$9*kZO}QihL`}?-UjH9_1C=0h{cR27k0s zpX?*MxGO2eHnO+Y7iYGFLh`R^4->0}u4DC8L&C4vNafyYVX&NE+{n2zaH~q!Y@SdI zZBe52oZ1wEJER(`b$3*YdX1xKP2bZ=<34qT2oG~^<|dEY_%C8G8Nk3rQ;z@u002ov JPDHLkV1gv?`bq!* diff --git a/data/providers/mygpo32.png b/data/providers/mygpo32.png deleted file mode 100644 index fcb16142f886af37ce1f384a1b35825d933c3b50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2834 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 ejZph8jYbq)qaUoUN zxDYm)D2{LKbnBMcbK80sn#~Ben6Y%p zf=HVMLc0~q9acoUY>0X6h+nf~#cN06h6Azd4iJX0jDBL5ort*0u-t4yyv>Y6hXqNG z6~DYTh&^_s`y5!mQx2(r50pVC)cZ~-{t8aQ=w$-Oy$6wgH-OCh0f^ zkjSr_4Dd?3)>f+pjH;rSGsCA#GT_ojU0ilEQg_2NZ-E9+>j5%21LXyTWA?m`>Dt1oQQ~Fn3lXpz$QII$m$s&qt=YY&meV=;T{~ z%a*=Q@_X{77on3o5jtZ6quD0e+2LyLnT|U1f~URqw3gqq!gnq^^`^f_Fm@L|j_<(F z291CgLmv|5Sv90rbtP3L2WybHcY=FfYCQm<`xxe%st|N-N2pP=Knp>O@$Zo6Rq26| zXOc}X6L_()xRFd>XIczugvOJGi-v@Hrm84y3XD9HYhv-l#kT+e002ov JPDHLkV1nrEO9TJ_ diff --git a/data/providers/podcast32.png b/data/providers/podcast32.png deleted file mode 100644 index 66cb4d3bfddb6234e6b89598ffc3e11e54c752be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1213 zcmV;u1Va0XP)cHX1G{R?3DaQ2*T{7w9AWa#K6{qrMfTk(Svbt}PjL=VogOldEI@q?M* zI+O|jmuG?dhb(wiu^2ptCEz`_1bkJ}=c}{9eWbge}DhF~~xuQou!5^%vkex(vp?&j3eh#vH=+5H;yRFiYFA6!=pGFkZDh zA%cV*RgIVH-#c79CGA#8gt=fk5^Hss7Yw@+?*4HVcr9DO*SZzFwX5e8j(_vb`4Bd( zMo;wW&>Wa^<(r58Y6g0VFCGAYzYT)Ftb1p8q+Sxx@Oi?RIt&GExKNK)fO1Xxoxs~_ zAlzK=cJR79Nql}H4O0TtIS==y7BIcyd=P{i#`NJex#0gPM;1UEE@EqebXNS;07Toq zP76M9JX;o!%I%@{?ZEZ?4C0V2wTfsE#O|_L!@UxN2$*fDVa}u1Dj*(kCe;zUZkQF^ zb5tSVZR%XSWlX#^Q$(L(M!36tu`Gaw^EXYz?Xgii2!ES_YcJ8bU1BNY3;URG$G%0f0NQX7>l)xY zc7S-#43p3LQkP!G24Xm_twb9wpOXn6+nXT^nCWcCLnijmd3GeElH|-^62r0l{=)bNat3=yt71v&VNS?$2!W# z4J*~~9SQ-=uv-fucDoj0b_>Mr)Pi`nh!{@j+^GQw{Wjuuud!J3eBxrY3jTci0$Bj- z&FKRs?im2#*CJv#3_HDib;ZPRqVtLBS>$n#3jS={r?LPVF4`)Yh7)=!$?=MZ47~y! zM~K^lf2yx^(c@6TpKehIpmUC4X9~D$RvoV~SHJ2xXYV9#_gMF6zORH2ZJsX+V7i^L z`0fhT+0I>WN$PfY{T9vlhj;4^K~_X?~g|C zb~b?bQUeT^7AD{W>*vGBp4>N0DYoS}v82<GAwELh+Nt)<5~`00000NkvXXu0mjf+v7-7 diff --git a/data/providers/radiotunes.png b/data/providers/radiotunes.png deleted file mode 100644 index e7e0bb83aa227090a3164d5640553f7c76104f17..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 595 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 diff --git a/data/providers/skydrive.png b/data/providers/skydrive.png deleted file mode 100644 index 5e8f45a27f61cc08fedf8b7ddf5abf90d7a44d02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3469 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 diff --git a/data/providers/somafm.png b/data/providers/somafm.png deleted file mode 100644 index e793f5bc0e5c1c6a64d01fdeff751a956910ca49..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 527 zcmV+q0`UEbP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2igG= z0v`;2X|Yg1tq#?N{G-Q*_s?ad#X+9t%JDXmICild7T)j@C& z>L;jEF^gZIU%|n_4^VLy!O2afi#RB_T8!wZ4pNn$LqhPjDMaXj-}at|=Y5_da+1Tv z#sVrEh+IF!4UAmlR=;-qayMSZ+mDDa9R+Xq$;%r@mwWXp!F@mkR1a|W6V49*VIQME z5do`1R-0#v0wUefvOs_FGAqp{?YKy1Ogo;YQ@w(-?{VfO%SkK>#Bd60z99n6zN3+D z^K{D|aeB5^<6L8IdIniCK=s$;&%wPVmhO`!_1PN8MQP_Z33d-r#(99zA*p-Fh1U9P zLYw_SC%;Xw&oKI9;z;#?`O5a}H&H8jVptZy{D4^000SaNLh0L002k;002k;M#*bF0007q zNklq= z)uz;i_E^*+7e>(7qA+L|xd=kdh31fuQ8V}ck9#`j-hZ0GA3pwj&pqcm=R5aY5YPf5 zWQPP;3?SHq0TD^O5zzb&5wq&cY%kgF%3WRcj&&8Bw(C*%#%S0%(+{vBaFKu-u_XPQ zkUur^gVsk-L|ggnt5}uV>BPH1#2T33C{VUbL7*!_mPe>0P-=QX320;jK6CZ?y5kwH zo-=RP!Qq6|PH>QL2t`$*T){L~&=^#}=XFxAtLm5NiJLK!6(bjWZ{b=|j&`1i~ z_dryoCQ7CHxlFU6DB7$U&%fq5XT>gvRzzcLQ zKR~&u{XYRN{YLy#L^Z!ex=DK^fkD$B^9*r>gRG<1_g*U8M7CT$^K!=G&q)2 zWdg8B0ynXa%HOZEy4hhJ;GF2wWa{$_`cEf}{;vDvcR=Z@1ZxmT%NX4!`cHDy;ZYsr zkA2k6a`y#F>!bQMk78{a(en`t0{xM4 z<{A-5twz?KCR@ufB1pw)=4n&!$o1_gYfhn9ozzlTC-3FvPSdnd6aAYN1^d*{6pt0AG)>c@Mt`JA@&yO4vr2tO&vtDA}G-qKyTpfl2~? uk>OxnOE|BeG!06CJA|`@4S`R|7ybb>eR(-vXi%&G0000i diff --git a/data/providers/soundcloud.png b/data/providers/soundcloud.png deleted file mode 100644 index 034972f2f7101dab08342cf9d9830b72cbdb9054..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25751 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 z 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 UTfBBT5dZ)H07*qoM6N<$g6|ybwg3PC diff --git a/data/providers/subsonic.png b/data/providers/subsonic.png deleted file mode 100644 index efbfe3a29f5013dc218f03c03ec84fd2cfb3518b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 665 zcmV;K0%rY*P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L06t9s06t9t%H1f-00007bV*G`2ipt> z4L29}1|?Jg00J3FL_t(I%gs~GOH^?bJ?G7vdGp4Z!CsCIYLiNZAXuTbXb}-nK`1Q> z`V)ed5vURQCltg$ghaKhNZvCcA_^>w7DXaNivq1&Ff{H4u7+qO5e8ht)iZ0Y9BA42LMEN!Flp{ zLwwwE9Gw6Vj^IkE0?Rs;8B&%30wTU5>mlHYP$$EM+RVhXap3IjMX_x=2Ot2@qXE#} zRP377pB@qkg#{N}@quLz$eKV`lG2ru$g!5*fs2XnwNW$>I662uxBy^4bBAy;kx4X2 z$`ZBONd|$aR43^MfTw_ZDDXl`(G!}H)@n39;zk<_wr#fo*sEQBhPHYni(nH}tASuGAd9|W$t5ZQiWSvY_UV$eNQ&0igsE6Cr=sa^$i6;AeP;>j=>dun zrw~MxBBn;Rn8FnwH(q$-O_6ejffoIRQigv;$ZI5I2CX-4=QiCimzO?f@k8T=_9y z#G8_jcL2)kYaAw-|KDK|fW998z;T>y^nkwrCkO8B>iPDl00000NkvXXu0mjfgIFHz diff --git a/data/providers/vk.png b/data/providers/vk.png deleted file mode 100644 index f4ab8ff89222306eb4232f979ebea3a6af6a842a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2287 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 JPDHLkV1nKpN{9de diff --git a/data/providers/wikipedia.png b/data/providers/wikipedia.png deleted file mode 100644 index 4a84436fa43d5a911d8600e97b28e8c4b9d17d0a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3203 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 diff --git a/data/vk/add.png b/data/vk/add.png deleted file mode 100644 index 5d47db460f540c238a5e45d7fb5864756f8ae882..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 185 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzwj^(N7l!{JxM1({$v_d#0*}aI z1_o|n5N2eUHAey{$X?><>&kwYNm@{h^EuC>*+3yTPZ!6Kh{MS#3W6#n>;Coo*Ev>d zC~H15G~_XmC_S)(*-h5qRYM@Vfsod1_r(cU7#H(N{Cj#JV|D?U30AR(nPF=+*Tq=D Sori!XGI+ZBxvX9X2ok diff --git a/data/vk/bookmarks.png b/data/vk/bookmarks.png deleted file mode 100644 index e2c67ffd1ac74aa41758adafca01081f5055e1e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 655 zcmV;A0&x9_P)Md97+)+fFHmQ$S|?w`*RLF0xNM;0WaQJ-~DJNG`s-bf!hJq3-I8bttWFJ z82@YTz`&I6?OnxHEr|-*w3EVj#lbA@2nJU&@`rBpTiT2Vj{9 zZ|0r7h&OISjdY!;OhRrCKt2MfXYcG&_g*Znq2sOo%VX;fp*WNJ}-q5y*g> zYddJ(lXETdV}Q8n=t`Yc4+@f;bRNj}=MSae3dv%jD^8OZVdT-HcXpegH@XeA6s(oU zo<|sOiDoA&UQ)7m*3T01zais3l1@^Xuo>uzZK84QZk^&lDXAgMg%$-5Jc!5Y zu;q9$OEyEZK;wZoLBs7tEILk2}J|QP~?`#n}Gzx@&5_i88 z`8Gv|+Hj{BFO{}S;rndJ_!k5e=$laarP!3(wS1|NO#Ay)rFv>2(0^OK{*}xH^mT~3 p;)ld^p#QO`B?7xpFctqnJ^}N#+?d(GY7+ne002ovPDHLkV1jF3B5eQw diff --git a/data/vk/deactivated.gif b/data/vk/deactivated.gif deleted file mode 100644 index 4414b80195d36d2d553c3ac066ff53ca0a4e905c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1107 zcmb8s`&ZI;9LMpmG8IG+3B076Wa`vxCod;Cd0NbQ-O^*tmbpcCIjpsFYR=rnwFOFQ z?wDw3H+AB*rS9NdXU?-$Vw+CosEa$ zq46SUVoLO!FMc7IpPZ5MW~7rsDbGd5o0Uzu$oaGKsW~~{Wnp@5fiGH^c7X+8#jrpO z&xm0mSP7sIN?@TxF$<1)#jI30D^<-&m2+TaDv?YnlBvWpwOFna%heKK0np3?Frbyf z8Yx(XR;JX+0hMk+wFs*Ly#mkx1|^_1sB}g(uxQc%dcdsJn{|Kzuq+xadgGGbv}6Fx zR-@Twv{+3Rn`y~rUb365c8hh{Vq0EvS+N3kz+qc<*jJp(fCE@vajZI=YmU`5=j!_E z+Q!=Y#`?zQ2CxZiZ30`Mmpi@MY5UdoPOtx8u@K1h3&?Am9urp1yirkEb+eio6B<;@ zs;j@vZfInMhTVD4)LdKM!f9i*ws$pkc0XeO((~)j_t`|Ow>QR**p0`akSGkHx4(WM z_0x~jV$rxin+H&lY5CNGOcG|Y<5?Xxy$FWSC!!<`1L%W=3dNN;Onn~ZEp6~XG~zW?>GN6-kJQAQmm1d=&eY!ef%Ad?0$`0~g=^-(1!+}r=1Pq>tR ze0L3j5W8#0;Ktb7iHu7zzNCdQ{$`%aWbeDnDRYlaj!WOe3fENE9E?787Z+(bl1Lsd zbZ`ps(;0q=to}=nG1#xD$;M}-ir$>q?Kin7=_tKYdi_dUE9C%Ja558rT-H~aMqy@O z4?V#h(Mcct2ICuZT6({5FZ2q=LG$=}4XE@-_~f}E!g1?00jR2{q;Riq-LUBW zG&;0Pp@$mYKJ%_>#20?ZKqno4)Tiie(>_OavtHUGvd)n@+QbB#0+CZ_fDA!FWfhm!vTeGZ0V diff --git a/data/vk/delete.png b/data/vk/delete.png deleted file mode 100644 index 7f40e250aabbf9f9fd45eabd4c3791d64bef223a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 351 zcmeAS@N?(olHy`uVBq!ia0vp^G9b*s1|*Ak?@s|zY)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmP)leD0i=AEQN!9bxmo-U3d9>>pK+b!5^z|-(BexAbO z6xOx{?Sd<2G_E}21~s*7l~aUwyLPX=`cVHuABbPPY9y4b zn7lU9@}ljAlBErwfAxpInq{&s^642iap00i_>zopr01rQkW&i*H diff --git a/data/vk/discography.png b/data/vk/discography.png deleted file mode 100644 index 5af8f0f0dcd2f6e53ef5b4880486c56e72482b9c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 486 zcmV@P)xe>_z|p0dq-2 zK~z}7&6mA#gFq04KW-?%CAb8s0-*|o1M;H+lo2~5GZk<-fpG;w6^IgC0wp+EX%NN; z&iv@jkN|W0_V(SoU5A0tNxlJmUIpfGVz4O!P25Lg2duwfi3AT@DdtO)2N ze+9ChY=@!*LK6qyg9+#)_a*oX)1Vd-#X|zJnQd^NCdT{fjo@&Y)GB;hHG>`m8AC-2g+i`fwPdT{Z~PGC~l5IFSJbO{1S@s6&J zX|$m^I>}F#HvG}h!vWA1$FOvzhqEDYl;=MR< zwqmsEluaD$+s7~zpPw7G#JcwZ>CwUk2;9vGs&%0hGn4o=8$91&@)V=lgv053SJtBl c%srm}02SPZ6e6KIY5)KL07*qoM6N<$g741C0ssI2 diff --git a/data/vk/download.png b/data/vk/download.png deleted file mode 100644 index 730a99065c521a01071657ff909973bb2a9623c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 323 zcmeAS@N?(olHy`uVBq!ia0vp^55U`qib29bI4Z@AvfUF_`g_}v@zi?3c-dHWyWln|dV;jH+K2CG?07f&&~ z6~Fl+Cua}aqN}=sm%73xg``Lq#3|~{KeE^Lo5)`#6UL8a!Ly?n9~Vk4_!% z*2OHZdCd;1v>q5T*UCO-HTi3xR^pv{{rRniqN7XN9DbVK&C8$KVbo*1`(r53Zw#KU KelF{r5}E*hHF?$m diff --git a/data/vk/edit.png b/data/vk/edit.png deleted file mode 100644 index e17f1d0f3b8550df71909e975d3c7642bd8a5cfe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 412 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzwj^(N7l!{JxM1({$v_d#0*}aI z1_o|n5N2eUHAey{$X?><>&kwYNm@``W%r5x^$ZM*nw~C>ArXgJkD)6&&l%V#p?H6B0mzBy8W@4_tBhYT}RA4c+cJb0xnaEOs_HS0t5trBjB=AM%C zXjGT>XjPZI(BLk8p~+qHLQ6Mq#$i{sq63U7>=*SfWFAU(+whH_do|mdKI;Vst E0ET&>R{#J2 diff --git a/data/vk/find.png b/data/vk/find.png deleted file mode 100644 index 213a4f1a3b49e15d19290f5a85559cc7bc8b22d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 570 zcmV-A0>%A_P)B~XH>08s&UpxCDlP^1u2MREt6VeA|-QE3gKZ>hoRAfgW}H>?JqHkAHPO`VZUN2NC7w>EHo!|$Wora2=!9;=-olQ1^=fr-Jd z%8p5+4onO#fu+eEI|IQZmD$SB?@DP%ac@E&2n+#l^ZT~p-W$ZZ!D|BR2KPES`27s{ zz^OrYCjkmOYiyaG#LZal7m3veu@ zXk2jM5DfrNfvuLuuBa^n0g6(JG#UW^biA-n6r~htuN2$^9xR{(egV!vqt-F72d1{) zmQt*G6`=>-0%hHL<%famFveI`~LUht56MI zgnW%dN}*`?-i40!mk3dA(PCl;s=H*;0gYSEVBRr002ovPDHLkV1i>J B=j8wZ diff --git a/data/vk/my_music.png b/data/vk/my_music.png deleted file mode 100644 index 0198b5a2379703987cca0d9222cd0457d8e218c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 652 zcmV;70(1R|P)UjPko2do400eExPI22TEU&*=qz%&4Fz|L7S`i4w# zumuXHF#x5r=0nb{fW4A%h!J@53&_0S9Z->u5!lH0V?xqCoU^9>n}Af_u^b=rx%$G{ z+F9c=x$}3Wf&qB(f;=qfkON-5~{ANurJklcF)7{AN|#HzGdjnD7m#+Wub18{#RO5TOgHhAV@w zBSPhzHMOsVdqu-X;N~K^UkJVeek;Kb&YCjhfHo!tuotmf8oY>T#^4h;_eeEHX8h8^ zr8q{^Z{u&oJYaS-3E@d<^<7GEbqptjrmEV0n-F{(*%_)(<%vRbK{KThVrwEJtqN5> zBQ(#7sgt=5gWpD0`ty{YWQq4VsS$ItKIK14B-IhP)%Ll3SKkxPnwvS_c_OjPh(;VE zl@H!?jjKB_qiS5Eo~a!`9L63aAvcnxJ6|GgLb`h9p}A;zElNO=I7E`D#m0Y4z|)AG m_tWmX-VRGQUbkdNX!rw@+wF~tpy>+$00003ib8`lqz#lQZfPRDdG)cCNLu~0wd5ob8LrT z86?APZR=jWpX>J&p2*j`Ij{s4K=#jT6|e_NXU)OqT;)NW11n(8I2?eDv&P*eAYboh z!1l&%eNh30v*ze6AYbp6LjFb=oJ2%9C_qBKB@T*yO4OB`{}30S?MSFz&g+0-zm<-( zsR`YBu$_P$;kcw&xAHzz?FDcQBq9^eO9WO!UpQ-=v*taZkQIOuhpRmVs4Ly_1%Q&?y<2#bgX9g6{2}El2`}(wrTP#;-H-N4;ObI{CPRADmN%|FB5ye#rL&F8f)YCXz)Mw`7SiGKUJa4eu9{H o*#W*2d^Z@a6|583>+Uy7bGNExGU%Um1Dej@>FVdQ&MBb@0K&mK82|tP diff --git a/data/vk/recommends.png b/data/vk/recommends.png deleted file mode 100644 index 2a0d3b3c483a7647f2ddbc2e2b0013ed5a0cb99e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 422 zcmV;X0a^ZuP)Kl3~QBalf#CU6?{VuMhrbSSBu4Ny;$OaN@)5j+ALBn2w`c&A91 z7dr)4fpmX9-TkB;3ryGTD{ugEAe(JpfFAg=Mt#QS+(j17fkr6mvkOpIqxz6z5>fmF zbPI~(d^;C=dk1vgHh^ZGS!-0W7{JlL30oszfx&$Pq`|!jUM{sJNM6A?%*vr z2s1Bl5MOzv5npZ*AQw(QE|&fjV*|NGfO-3e6<2Tw|gW!U_%O?XxI14-? ziy0WWg+Z8+Vb&Z8pdfpRr>`sfT_$Nk1-;W!$6A3x(w;7kAr_~TeO})AF+Y)kQTQ-J hb0B+>>GCCLB) diff --git a/data/vk/upload.png b/data/vk/upload.png deleted file mode 100644 index 0596e0a49fbd30fbb36bb3cf687e4725142d3534..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 316 zcmeAS@N?(olHy`uVBq!ia0vp^55|ClL0 zhU8OD)Xc)mg5t=W%hbm?K*e%ZYXE5kAYB94L@IE2OEs(kbP<4V4dA-a#UOLz0Fvu6 z0C_Z;Uv%H60J5jg9_WF0XLT0^Fm+o1%{N7-yv(w&j0`b07*qoM6N<$f*|3nQ2+n{ diff --git a/src/core/utilities.cpp b/src/core/utilities.cpp index f1d3cbefa..739cadb93 100644 --- a/src/core/utilities.cpp +++ b/src/core/utilities.cpp @@ -344,6 +344,9 @@ QString GetConfigPath(ConfigPath config) { #endif } break; + case Path_Icons: + return GetConfigPath(Path_Root) + "/customiconset"; + case Path_AlbumCovers: return GetConfigPath(Path_Root) + "/albumcovers"; diff --git a/src/core/utilities.h b/src/core/utilities.h index ccc3b450e..5fd8fc102 100644 --- a/src/core/utilities.h +++ b/src/core/utilities.h @@ -124,6 +124,7 @@ QString FiddleFileExtension(const QString& filename, enum ConfigPath { Path_Root, + Path_Icons, Path_AlbumCovers, Path_NetworkCache, Path_GstreamerRegistry, diff --git a/src/devices/devicemanager.cpp b/src/devices/devicemanager.cpp index 52a532ac9..6396b56cb 100644 --- a/src/devices/devicemanager.cpp +++ b/src/devices/devicemanager.cpp @@ -115,7 +115,7 @@ void DeviceManager::DeviceInfo::LoadIcon(const QVariantList& icons, const QString& name_hint) { if (icons.isEmpty()) { icon_name_ = "drive-removable-media-usb-pendrive"; - icon_ = IconLoader::Load(icon_name_); + icon_ = IconLoader::Load(icon_name_, IconLoader::Base); return; } @@ -125,7 +125,7 @@ void DeviceManager::DeviceInfo::LoadIcon(const QVariantList& icons, icon_ = QIcon(icon.value()); return; } else { - icon_ = IconLoader::Load(icon.toString()); + icon_ = IconLoader::Load(icon.toString(), IconLoader::Base); if (!icon_.isNull()) { icon_name_ = icon.toString(); return; @@ -143,7 +143,7 @@ void DeviceManager::DeviceInfo::LoadIcon(const QVariantList& icons, icon_name_ = "multimedia-player-ipod-standard-monochrome"; else icon_name_ = "drive-removable-media-usb-pendrive"; - icon_ = IconLoader::Load(icon_name_); + icon_ = IconLoader::Load(icon_name_, IconLoader::Base); } const DeviceManager::DeviceInfo::Backend* @@ -166,7 +166,7 @@ DeviceManager::DeviceInfo::BestBackend() const { DeviceManager::DeviceManager(Application* app, QObject* parent) : QAbstractListModel(parent), app_(app), - not_connected_overlay_(IconLoader::Load("edit-delete")) { + not_connected_overlay_(IconLoader::Load("edit-delete", IconLoader::Base)) { thread_pool_.setMaxThreadCount(1); connect(app_->task_manager(), SIGNAL(TasksChanged()), SLOT(TasksChanged())); diff --git a/src/devices/deviceproperties.cpp b/src/devices/deviceproperties.cpp index c097d409d..19acc1b85 100644 --- a/src/devices/deviceproperties.cpp +++ b/src/devices/deviceproperties.cpp @@ -86,7 +86,8 @@ void DeviceProperties::ShowDevice(int row) { << "phone-palm-pre"; for (const QString& icon_name : icon_names) { - QListWidgetItem* item = new QListWidgetItem(IconLoader::Load(icon_name), + QListWidgetItem* item = new QListWidgetItem(IconLoader::Load(icon_name, + IconLoader::Base), QString(), ui_->icon); item->setData(Qt::UserRole, icon_name); } diff --git a/src/devices/deviceview.cpp b/src/devices/deviceview.cpp index 36592a7df..7d62571aa 100644 --- a/src/devices/deviceview.cpp +++ b/src/devices/deviceview.cpp @@ -199,32 +199,36 @@ void DeviceView::contextMenuEvent(QContextMenuEvent* e) { library_menu_ = new QMenu(this); // Device menu - eject_action_ = device_menu_->addAction(IconLoader::Load("media-eject"), + eject_action_ = device_menu_->addAction(IconLoader::Load("media-eject", + IconLoader::Base), tr("Safely remove device"), this, SLOT(Unmount())); forget_action_ = - device_menu_->addAction(IconLoader::Load("list-remove"), + device_menu_->addAction(IconLoader::Load("list-remove", IconLoader::Base), tr("Forget device"), this, SLOT(Forget())); device_menu_->addSeparator(); - properties_action_ = device_menu_->addAction(IconLoader::Load("configure"), + properties_action_ = device_menu_->addAction(IconLoader::Load("configure", + IconLoader::Base), tr("Device properties..."), this, SLOT(Properties())); // Library menu add_to_playlist_action_ = library_menu_->addAction( - IconLoader::Load("media-playback-start"), + IconLoader::Load("media-playback-start", IconLoader::Base), tr("Append to current playlist"), this, SLOT(AddToPlaylist())); load_action_ = library_menu_->addAction( - IconLoader::Load("media-playback-start"), + IconLoader::Load("media-playback-start", IconLoader::Base), tr("Replace current playlist"), this, SLOT(Load())); open_in_new_playlist_ = library_menu_->addAction( - IconLoader::Load("document-new"), tr("Open in new playlist"), this, - SLOT(OpenInNewPlaylist())); + IconLoader::Load("document-new", IconLoader::Base), + tr("Open in new playlist"), this, SLOT(OpenInNewPlaylist())); library_menu_->addSeparator(); - organise_action_ = library_menu_->addAction(IconLoader::Load("edit-copy"), + organise_action_ = library_menu_->addAction(IconLoader::Load("edit-copy", + IconLoader::Base), tr("Copy to library..."), this, SLOT(Organise())); - delete_action_ = library_menu_->addAction(IconLoader::Load("edit-delete"), + delete_action_ = library_menu_->addAction(IconLoader::Load("edit-delete", + IconLoader::Base), tr("Delete from device..."), this, SLOT(Delete())); } diff --git a/src/devices/deviceviewcontainer.cpp b/src/devices/deviceviewcontainer.cpp index 4acd77367..08229c804 100644 --- a/src/devices/deviceviewcontainer.cpp +++ b/src/devices/deviceviewcontainer.cpp @@ -40,8 +40,10 @@ void DeviceViewContainer::showEvent(QShowEvent* e) { if (!loaded_icons_) { loaded_icons_ = true; - ui_->close_frame_button->setIcon(IconLoader::Load("edit-delete")); - ui_->warning_icon->setPixmap(IconLoader::Load("dialog-warning").pixmap(22)); + ui_->close_frame_button->setIcon(IconLoader::Load("edit-delete", + IconLoader::Base)); + ui_->warning_icon->setPixmap(IconLoader::Load("dialog-warning", + IconLoader::Base).pixmap(22)); } QWidget::showEvent(e); diff --git a/src/globalsearch/globalsearchmodel.cpp b/src/globalsearch/globalsearchmodel.cpp index bd0f8becc..9584ab75b 100644 --- a/src/globalsearch/globalsearchmodel.cpp +++ b/src/globalsearch/globalsearchmodel.cpp @@ -18,6 +18,7 @@ #include "globalsearch.h" #include "globalsearchmodel.h" #include "core/mimedata.h" +#include "ui/iconloader.h" #include @@ -26,8 +27,8 @@ GlobalSearchModel::GlobalSearchModel(GlobalSearch* engine, QObject* parent) engine_(engine), proxy_(nullptr), use_pretty_covers_(true), - artist_icon_(":/icons/22x22/x-clementine-artist.png"), - album_icon_(":/icons/22x22/x-clementine-album.png") { + artist_icon_(IconLoader::Load("x-clementine-artist", IconLoader::Base)), + album_icon_(IconLoader::Load("x-clementine-album", IconLoader::Base)) { group_by_[0] = LibraryModel::GroupBy_Artist; group_by_[1] = LibraryModel::GroupBy_Album; group_by_[2] = LibraryModel::GroupBy_None; diff --git a/src/globalsearch/globalsearchsettingspage.cpp b/src/globalsearch/globalsearchsettingspage.cpp index 460d63a81..a5ea53e27 100644 --- a/src/globalsearch/globalsearchsettingspage.cpp +++ b/src/globalsearch/globalsearchsettingspage.cpp @@ -27,11 +27,12 @@ GlobalSearchSettingsPage::GlobalSearchSettingsPage(SettingsDialog* dialog) : SettingsPage(dialog), ui_(new Ui::GlobalSearchSettingsPage) { ui_->setupUi(this); + setWindowIcon(IconLoader::Load("search", IconLoader::Base)); ui_->sources->header()->setResizeMode(0, QHeaderView::Stretch); ui_->sources->header()->setResizeMode(1, QHeaderView::ResizeToContents); - warning_icon_ = IconLoader::Load("dialog-warning"); + warning_icon_ = IconLoader::Load("dialog-warning", IconLoader::Base); connect(ui_->up, SIGNAL(clicked()), SLOT(MoveUp())); connect(ui_->down, SIGNAL(clicked()), SLOT(MoveDown())); diff --git a/src/globalsearch/globalsearchview.cpp b/src/globalsearch/globalsearchview.cpp index 8b9af9c3c..7ab8258d8 100644 --- a/src/globalsearch/globalsearchview.cpp +++ b/src/globalsearch/globalsearchview.cpp @@ -62,8 +62,8 @@ GlobalSearchView::GlobalSearchView(Application* app, QWidget* parent) current_proxy_(front_proxy_), swap_models_timer_(new QTimer(this)), update_suggestions_timer_(new QTimer(this)), - search_icon_(IconLoader::Load("search")), - warning_icon_(IconLoader::Load("dialog-warning")), + search_icon_(IconLoader::Load("search", IconLoader::Base)), + warning_icon_(IconLoader::Load("dialog-warning", IconLoader::Base)), show_providers_(true), show_suggestions_(true) { ui_->setupUi(this); @@ -74,7 +74,7 @@ GlobalSearchView::GlobalSearchView(Application* app, QWidget* parent) ui_->search->installEventFilter(this); ui_->results_stack->installEventFilter(this); - ui_->settings->setIcon(IconLoader::Load("configure")); + ui_->settings->setIcon(IconLoader::Load("configure", IconLoader::Base)); // Must be a queued connection to ensure the GlobalSearch handles it first. connect(app_, SIGNAL(SettingsChanged()), SLOT(ReloadSettings()), @@ -145,7 +145,7 @@ GlobalSearchView::GlobalSearchView(Application* app, QWidget* parent) QMenu* settings_menu = new QMenu(this); settings_menu->addActions(group_by_actions_->actions()); settings_menu->addSeparator(); - settings_menu->addAction(IconLoader::Load("configure"), + settings_menu->addAction(IconLoader::Load("configure", IconLoader::Base), tr("Configure global search..."), this, SLOT(OpenSettingsDialog())); ui_->settings->setMenu(settings_menu); @@ -449,27 +449,27 @@ bool GlobalSearchView::ResultsContextMenuEvent(QContextMenuEvent* event) { if (!context_menu_) { context_menu_ = new QMenu(this); context_actions_ << context_menu_->addAction( - IconLoader::Load("media-playback-start"), + IconLoader::Load("media-playback-start", IconLoader::Base), tr("Append to current playlist"), this, SLOT(AddSelectedToPlaylist())); context_actions_ << context_menu_->addAction( - IconLoader::Load("media-playback-start"), + IconLoader::Load("media-playback-start", IconLoader::Base), tr("Replace current playlist"), this, SLOT(LoadSelected())); context_actions_ << context_menu_->addAction( - IconLoader::Load("document-new"), + IconLoader::Load("document-new", IconLoader::Base), tr("Open in new playlist"), this, SLOT(OpenSelectedInNewPlaylist())); context_menu_->addSeparator(); context_actions_ << context_menu_->addAction( - IconLoader::Load("go-next"), tr("Queue track"), + IconLoader::Load("go-next", IconLoader::Base), tr("Queue track"), this, SLOT(AddSelectedToPlaylistEnqueue())); context_menu_->addSeparator(); context_menu_->addMenu(tr("Group by")) ->addActions(group_by_actions_->actions()); - context_menu_->addAction(IconLoader::Load("configure"), + context_menu_->addAction(IconLoader::Load("configure", IconLoader::Base), tr("Configure global search..."), this, SLOT(OpenSettingsDialog())); } diff --git a/src/globalsearch/icecastsearchprovider.cpp b/src/globalsearch/icecastsearchprovider.cpp index 763533f3b..c890d1ac6 100644 --- a/src/globalsearch/icecastsearchprovider.cpp +++ b/src/globalsearch/icecastsearchprovider.cpp @@ -17,11 +17,12 @@ #include "icecastsearchprovider.h" #include "internet/icecast/icecastbackend.h" +#include "ui/iconloader.h" IcecastSearchProvider::IcecastSearchProvider(IcecastBackend* backend, Application* app, QObject* parent) : BlockingSearchProvider(app, parent), backend_(backend) { - Init("Icecast", "icecast", QIcon(":last.fm/icon_radio.png"), + Init("Icecast", "icecast", IconLoader::Load("icon_radio", IconLoader::Lastfm), DisabledByDefault); } diff --git a/src/globalsearch/savedradiosearchprovider.cpp b/src/globalsearch/savedradiosearchprovider.cpp index 0c3f5d56d..c571eb72e 100644 --- a/src/globalsearch/savedradiosearchprovider.cpp +++ b/src/globalsearch/savedradiosearchprovider.cpp @@ -24,7 +24,8 @@ SavedRadioSearchProvider::SavedRadioSearchProvider(SavedRadio* service, QObject* parent) : SimpleSearchProvider(app, parent), service_(service) { Init(tr("Your radio streams"), "savedradio", - IconLoader::Load("document-open-remote"), MimeDataContainsUrlsOnly); + IconLoader::Load("document-open-remote", IconLoader::Base), + MimeDataContainsUrlsOnly); set_max_suggestion_count(3); diff --git a/src/globalsearch/soundcloudsearchprovider.cpp b/src/globalsearch/soundcloudsearchprovider.cpp index 4284f4ef6..cd03ecb43 100644 --- a/src/globalsearch/soundcloudsearchprovider.cpp +++ b/src/globalsearch/soundcloudsearchprovider.cpp @@ -23,6 +23,7 @@ #include "core/logging.h" #include "covers/albumcoverloader.h" #include "internet/soundcloud/soundcloudservice.h" +#include "ui/iconloader.h" SoundCloudSearchProvider::SoundCloudSearchProvider(Application* app, QObject* parent) @@ -31,8 +32,9 @@ SoundCloudSearchProvider::SoundCloudSearchProvider(Application* app, void SoundCloudSearchProvider::Init(SoundCloudService* service) { service_ = service; SearchProvider::Init( - "SoundCloud", "soundcloud", QIcon(":providers/soundcloud.png"), - WantsDelayedQueries | ArtIsProbablyRemote | CanShowConfig); + "SoundCloud", "soundcloud", IconLoader::Load("soundcloud", + IconLoader::Provider), WantsDelayedQueries | ArtIsProbablyRemote | + CanShowConfig); connect(service_, SIGNAL(SimpleSearchResults(int, SongList)), SLOT(SearchDone(int, SongList))); diff --git a/src/globalsearch/spotifysearchprovider.cpp b/src/globalsearch/spotifysearchprovider.cpp index 601164223..5e71ffc50 100644 --- a/src/globalsearch/spotifysearchprovider.cpp +++ b/src/globalsearch/spotifysearchprovider.cpp @@ -24,6 +24,7 @@ #include "internet/core/internetmodel.h" #include "internet/spotify/spotifyserver.h" #include "playlist/songmimedata.h" +#include "ui/iconloader.h" namespace { const int kSearchSongLimit = 5; @@ -32,7 +33,7 @@ const int kSearchAlbumLimit = 20; SpotifySearchProvider::SpotifySearchProvider(Application* app, QObject* parent) : SearchProvider(app, parent), server_(nullptr), service_(nullptr) { - Init("Spotify", "spotify", QIcon(":icons/32x32/spotify.png"), + Init("Spotify", "spotify", IconLoader::Load("spotify", IconLoader::Provider), WantsDelayedQueries | WantsSerialisedArtQueries | ArtIsProbablyRemote | CanShowConfig | CanGiveSuggestions); } diff --git a/src/globalsearch/urlsearchprovider.cpp b/src/globalsearch/urlsearchprovider.cpp index 82f8f20a3..806583159 100644 --- a/src/globalsearch/urlsearchprovider.cpp +++ b/src/globalsearch/urlsearchprovider.cpp @@ -26,7 +26,7 @@ const char* UrlSearchProvider::kUrlRegex = "^[a-zA-Z][a-zA-Z0-9+-.]*://"; UrlSearchProvider::UrlSearchProvider(Application* app, QObject* parent) : SearchProvider(app, parent), url_regex_(kUrlRegex) { - QIcon icon = IconLoader::Load("applications-internet"); + QIcon icon = IconLoader::Load("applications-internet", IconLoader::Base); image_ = ScaleAndPad(icon.pixmap(kArtHeight, kArtHeight).toImage()); Init("URL", "url", icon, MimeDataContainsUrlsOnly); diff --git a/src/globalsearch/vksearchprovider.cpp b/src/globalsearch/vksearchprovider.cpp index b12a65551..25d4cc495 100644 --- a/src/globalsearch/vksearchprovider.cpp +++ b/src/globalsearch/vksearchprovider.cpp @@ -21,14 +21,16 @@ #include "core/logging.h" #include "core/song.h" +#include "ui/iconloader.h" VkSearchProvider::VkSearchProvider(Application* app, QObject* parent) : SearchProvider(app, parent), service_(NULL) {} void VkSearchProvider::Init(VkService* service) { service_ = service; - SearchProvider::Init("Vk.com", "vk.com", QIcon(":providers/vk.png"), - WantsDelayedQueries | CanShowConfig); + SearchProvider::Init("Vk.com", "vk.com", IconLoader::Load("vk", + IconLoader::Provider), WantsDelayedQueries + | CanShowConfig); connect(service_, SIGNAL(SongSearchResult(SearchID, SongList)), this, SLOT(SongSearchResult(SearchID, SongList))); diff --git a/src/internet/amazon/amazonclouddrive.cpp b/src/internet/amazon/amazonclouddrive.cpp index 257d6a539..c4b4b8722 100644 --- a/src/internet/amazon/amazonclouddrive.cpp +++ b/src/internet/amazon/amazonclouddrive.cpp @@ -37,6 +37,7 @@ #include "internet/amazon/amazonurlhandler.h" #include "library/librarybackend.h" #include "ui/settingsdialog.h" +#include "ui/iconloader.h" using std::chrono::seconds; using std::placeholders::_1; @@ -62,7 +63,7 @@ static const char* kDownloadEndpoint = "%1/nodes/%2/content"; AmazonCloudDrive::AmazonCloudDrive(Application* app, InternetModel* parent) : CloudFileService(app, parent, kServiceName, kServiceId, - QIcon(":/providers/amazonclouddrive.png"), + IconLoader::Load("amazonclouddrive", IconLoader::Provider), SettingsDialog::Page_AmazonCloudDrive), network_(new NetworkAccessManager(this)) { app->player()->RegisterUrlHandler(new AmazonUrlHandler(this, this)); diff --git a/src/internet/amazon/amazonsettingspage.cpp b/src/internet/amazon/amazonsettingspage.cpp index 0fd41fcce..48ec4fd77 100644 --- a/src/internet/amazon/amazonsettingspage.cpp +++ b/src/internet/amazon/amazonsettingspage.cpp @@ -22,12 +22,15 @@ #include "internet/amazon/amazonclouddrive.h" #include "internet/core/internetmodel.h" #include "ui/settingsdialog.h" +#include "ui/iconloader.h" AmazonSettingsPage::AmazonSettingsPage(SettingsDialog* parent) : SettingsPage(parent), ui_(new Ui::AmazonSettingsPage), service_(dialog()->app()->internet_model()->Service()) { ui_->setupUi(this); + setWindowIcon(IconLoader::Load("amazon", IconLoader::Provider)); + ui_->login_state->AddCredentialGroup(ui_->login_container); connect(ui_->login_button, SIGNAL(clicked()), SLOT(LoginClicked())); diff --git a/src/internet/box/boxservice.cpp b/src/internet/box/boxservice.cpp index 3a39caaad..e461f543a 100644 --- a/src/internet/box/boxservice.cpp +++ b/src/internet/box/boxservice.cpp @@ -26,6 +26,7 @@ #include "internet/box/boxurlhandler.h" #include "internet/core/oauthenticator.h" #include "library/librarybackend.h" +#include "ui/iconloader.h" const char* BoxService::kServiceName = "Box"; const char* BoxService::kSettingsGroup = "Box"; @@ -49,7 +50,8 @@ static const char* kEvents = "https://api.box.com/2.0/events"; BoxService::BoxService(Application* app, InternetModel* parent) : CloudFileService(app, parent, kServiceName, kSettingsGroup, - QIcon(":/providers/box.png"), SettingsDialog::Page_Box) { + IconLoader::Load("box", IconLoader::Provider), + SettingsDialog::Page_Box) { app->player()->RegisterUrlHandler(new BoxUrlHandler(this, this)); } diff --git a/src/internet/box/boxsettingspage.cpp b/src/internet/box/boxsettingspage.cpp index c1c860bea..361394b5a 100644 --- a/src/internet/box/boxsettingspage.cpp +++ b/src/internet/box/boxsettingspage.cpp @@ -25,12 +25,15 @@ #include "internet/box/boxservice.h" #include "internet/core/internetmodel.h" #include "ui/settingsdialog.h" +#include "ui/iconloader.h" BoxSettingsPage::BoxSettingsPage(SettingsDialog* parent) : SettingsPage(parent), ui_(new Ui::BoxSettingsPage), service_(dialog()->app()->internet_model()->Service()) { ui_->setupUi(this); + setWindowIcon(IconLoader::Load("box", IconLoader::Provider)); + ui_->login_state->AddCredentialGroup(ui_->login_container); connect(ui_->login_button, SIGNAL(clicked()), SLOT(LoginClicked())); diff --git a/src/internet/core/cloudfileservice.cpp b/src/internet/core/cloudfileservice.cpp index c14c9d2bc..a4034c213 100644 --- a/src/internet/core/cloudfileservice.cpp +++ b/src/internet/core/cloudfileservice.cpp @@ -99,11 +99,13 @@ void CloudFileService::ShowContextMenu(const QPoint& global_pos) { if (!context_menu_) { context_menu_.reset(new QMenu); context_menu_->addActions(GetPlaylistActions()); - context_menu_->addAction(IconLoader::Load("download"), tr("Cover Manager"), - this, SLOT(ShowCoverManager())); + context_menu_->addAction(IconLoader::Load("download", IconLoader::Base), + tr("Cover Manager"), this, + SLOT(ShowCoverManager())); context_menu_->addSeparator(); - context_menu_->addAction(IconLoader::Load("configure"), tr("Configure..."), - this, SLOT(ShowSettingsDialog())); + context_menu_->addAction(IconLoader::Load("configure", IconLoader::Base), + tr("Configure..."), this, + SLOT(ShowSettingsDialog())); } context_menu_->popup(global_pos); } diff --git a/src/internet/core/internetservice.cpp b/src/internet/core/internetservice.cpp index 57d0a4c06..39bfb1aa5 100644 --- a/src/internet/core/internetservice.cpp +++ b/src/internet/core/internetservice.cpp @@ -76,7 +76,8 @@ QList InternetService::GetPlaylistActions() { QAction* InternetService::GetAppendToPlaylistAction() { if (!append_to_playlist_) { - append_to_playlist_ = new QAction(IconLoader::Load("media-playback-start"), + append_to_playlist_ = new QAction(IconLoader::Load("media-playback-start", + IconLoader::Base), tr("Append to current playlist"), this); connect(append_to_playlist_, SIGNAL(triggered()), this, SLOT(AppendToPlaylist())); @@ -87,7 +88,8 @@ QAction* InternetService::GetAppendToPlaylistAction() { QAction* InternetService::GetReplacePlaylistAction() { if (!replace_playlist_) { - replace_playlist_ = new QAction(IconLoader::Load("media-playback-start"), + replace_playlist_ = new QAction(IconLoader::Load("media-playback-start", + IconLoader::Base), tr("Replace current playlist"), this); connect(replace_playlist_, SIGNAL(triggered()), this, SLOT(ReplacePlaylist())); @@ -98,7 +100,8 @@ QAction* InternetService::GetReplacePlaylistAction() { QAction* InternetService::GetOpenInNewPlaylistAction() { if (!open_in_new_playlist_) { - open_in_new_playlist_ = new QAction(IconLoader::Load("document-new"), + open_in_new_playlist_ = new QAction(IconLoader::Load("document-new", + IconLoader::Base), tr("Open in new playlist"), this); connect(open_in_new_playlist_, SIGNAL(triggered()), this, SLOT(OpenInNewPlaylist())); diff --git a/src/internet/core/internetshowsettingspage.cpp b/src/internet/core/internetshowsettingspage.cpp index 6df377921..4c271b170 100644 --- a/src/internet/core/internetshowsettingspage.cpp +++ b/src/internet/core/internetshowsettingspage.cpp @@ -19,6 +19,7 @@ #include "internetshowsettingspage.h" #include "core/application.h" +#include "ui/iconloader.h" #include "ui/settingsdialog.h" #include "internet/core/internetservice.h" #include "internet/core/internetmodel.h" @@ -28,6 +29,7 @@ InternetShowSettingsPage::InternetShowSettingsPage(SettingsDialog* parent) : SettingsPage(parent), ui_(new Ui::InternetShowSettingsPage) { ui_->setupUi(this); + setWindowIcon(IconLoader::Load("internet-services", IconLoader::Base)); ui_->sources->header()->setResizeMode(0, QHeaderView::Stretch); ui_->sources->header()->setResizeMode(1, QHeaderView::ResizeToContents); diff --git a/src/internet/core/searchboxwidget.cpp b/src/internet/core/searchboxwidget.cpp index 3c99796d4..62a95599a 100644 --- a/src/internet/core/searchboxwidget.cpp +++ b/src/internet/core/searchboxwidget.cpp @@ -35,13 +35,13 @@ SearchBoxWidget::SearchBoxWidget(InternetService* service) ui_->setupUi(this); // Icons - ui_->options->setIcon(IconLoader::Load("configure")); + ui_->options->setIcon(IconLoader::Load("configure", IconLoader::Base)); // Options menu menu_->setIcon(ui_->options->icon()); ui_->options->setMenu(menu_); - menu_->addAction(IconLoader::Load("configure"), + menu_->addAction(IconLoader::Load("configure", IconLoader::Base), tr("Configure %1...").arg(service_->name()), service_, SLOT(ShowConfig())); diff --git a/src/internet/digitally/digitallyimportedservicebase.cpp b/src/internet/digitally/digitallyimportedservicebase.cpp index 0c712bb0c..9965008b5 100644 --- a/src/internet/digitally/digitallyimportedservicebase.cpp +++ b/src/internet/digitally/digitallyimportedservicebase.cpp @@ -136,7 +136,8 @@ void DigitallyImportedServiceBase::PopulateStreams() { SongFromChannel(channel, &song); QStandardItem* item = - new QStandardItem(QIcon(":/last.fm/icon_radio.png"), song.title()); + new QStandardItem(IconLoader::Load("icon_radio", + IconLoader::Lastfm), song.title()); item->setData(channel.description_, Qt::ToolTipRole); item->setData(InternetModel::PlayBehaviour_SingleItem, InternetModel::Role_PlayBehaviour); @@ -172,15 +173,16 @@ void DigitallyImportedServiceBase::ShowContextMenu(const QPoint& global_pos) { if (!context_menu_) { context_menu_.reset(new QMenu); context_menu_->addActions(GetPlaylistActions()); - context_menu_->addAction(IconLoader::Load("download"), + context_menu_->addAction(IconLoader::Load("download", IconLoader::Base), tr("Open %1 in browser").arg(homepage_url_.host()), this, SLOT(Homepage())); - context_menu_->addAction(IconLoader::Load("view-refresh"), + context_menu_->addAction(IconLoader::Load("view-refresh", IconLoader::Base), tr("Refresh streams"), this, SLOT(ForceRefreshStreams())); context_menu_->addSeparator(); - context_menu_->addAction(IconLoader::Load("configure"), tr("Configure..."), - this, SLOT(ShowSettingsDialog())); + context_menu_->addAction(IconLoader::Load("configure", IconLoader::Base), + tr("Configure..."), this, + SLOT(ShowSettingsDialog())); } context_menu_->popup(global_pos); @@ -241,26 +243,30 @@ DigitallyImportedService::DigitallyImportedService(Application* app, QObject* parent) : DigitallyImportedServiceBase("DigitallyImported", "Digitally Imported", QUrl("http://www.di.fm"), - QIcon(":/providers/digitallyimported.png"), + IconLoader::Load("digitallyimported", + IconLoader::Provider), "di", app, model, true, parent) {} RadioTunesService::RadioTunesService(Application* app, InternetModel* model, QObject* parent) : DigitallyImportedServiceBase("RadioTunes", "RadioTunes.com", QUrl("http://www.radiotunes.com/"), - QIcon(":/providers/radiotunes.png"), + IconLoader::Load("radiotunes", + IconLoader::Provider), "radiotunes", app, model, true, parent) {} JazzRadioService::JazzRadioService(Application* app, InternetModel* model, QObject* parent) : DigitallyImportedServiceBase("JazzRadio", "JAZZRADIO.com", QUrl("http://www.jazzradio.com"), - QIcon(":/providers/jazzradio.png"), + IconLoader::Load("jazzradio", + IconLoader::Provider), "jazzradio", app, model, true, parent) {} RockRadioService::RockRadioService(Application* app, InternetModel* model, QObject* parent) : DigitallyImportedServiceBase("RockRadio", "ROCKRADIO.com", QUrl("http://www.rockradio.com"), - QIcon(":/providers/rockradio.png"), + IconLoader::Load("rockradio", + IconLoader::Provider), "rockradio", app, model, false, parent) {} diff --git a/src/internet/digitally/digitallyimportedsettingspage.cpp b/src/internet/digitally/digitallyimportedsettingspage.cpp index 476773d27..2121e6905 100644 --- a/src/internet/digitally/digitallyimportedsettingspage.cpp +++ b/src/internet/digitally/digitallyimportedsettingspage.cpp @@ -27,6 +27,7 @@ #include "digitallyimportedclient.h" #include "digitallyimportedservicebase.h" #include "core/closure.h" +#include "ui/iconloader.h" DigitallyImportedSettingsPage::DigitallyImportedSettingsPage( SettingsDialog* dialog) @@ -34,7 +35,7 @@ DigitallyImportedSettingsPage::DigitallyImportedSettingsPage( ui_(new Ui_DigitallyImportedSettingsPage), client_(new DigitallyImportedClient("di", this)) { ui_->setupUi(this); - setWindowIcon(QIcon(":/providers/digitallyimported-32.png")); + setWindowIcon(IconLoader::Load("digitallyimported", IconLoader::Provider)); connect(ui_->login_state, SIGNAL(LogoutClicked()), SLOT(Logout())); connect(ui_->login_state, SIGNAL(LoginClicked()), SLOT(Login())); diff --git a/src/internet/digitally/digitallyimportedurlhandler.cpp b/src/internet/digitally/digitallyimportedurlhandler.cpp index c2fea88b7..9f5707346 100644 --- a/src/internet/digitally/digitallyimportedurlhandler.cpp +++ b/src/internet/digitally/digitallyimportedurlhandler.cpp @@ -26,6 +26,7 @@ #include "core/logging.h" #include "core/taskmanager.h" #include "playlistparsers/playlistparser.h" +#include "ui/iconloader.h" DigitallyImportedUrlHandler::DigitallyImportedUrlHandler( Application* app, DigitallyImportedServiceBase* service) @@ -37,13 +38,13 @@ QString DigitallyImportedUrlHandler::scheme() const { QIcon DigitallyImportedUrlHandler::icon() const { if (scheme() == "di") { - return QIcon(":providers/digitallyimported.png"); + return IconLoader::Load("digitallyimported", IconLoader::Provider); } else if (scheme() == "radiotunes") { - return QIcon(":providers/radiotunes.png"); + return IconLoader::Load("radiotunes", IconLoader::Provider); } else if (scheme() == "jazzradio") { - return QIcon(":providers/jazzradio.png"); + return IconLoader::Load("jazzradio", IconLoader::Provider); } else if (scheme() == "rockradio") { - return QIcon(":providers/rockradio.png"); + return IconLoader::Load("rockradio", IconLoader::Provider); } return QIcon(); } diff --git a/src/internet/dropbox/dropboxservice.cpp b/src/internet/dropbox/dropboxservice.cpp index 9448c0ee3..2341dd884 100644 --- a/src/internet/dropbox/dropboxservice.cpp +++ b/src/internet/dropbox/dropboxservice.cpp @@ -33,6 +33,7 @@ #include "internet/core/oauthenticator.h" #include "internet/dropbox/dropboxurlhandler.h" #include "library/librarybackend.h" +#include "ui/iconloader.h" using Utilities::ParseRFC822DateTime; @@ -52,7 +53,7 @@ static const char* kLongPollEndpoint = DropboxService::DropboxService(Application* app, InternetModel* parent) : CloudFileService(app, parent, kServiceName, kServiceId, - QIcon(":/providers/dropbox.png"), + IconLoader::Load("dropbox", IconLoader::Provider), SettingsDialog::Page_Dropbox), network_(new NetworkAccessManager(this)) { QSettings settings; diff --git a/src/internet/dropbox/dropboxsettingspage.cpp b/src/internet/dropbox/dropboxsettingspage.cpp index df982c2ad..603c7108f 100644 --- a/src/internet/dropbox/dropboxsettingspage.cpp +++ b/src/internet/dropbox/dropboxsettingspage.cpp @@ -24,6 +24,7 @@ #include "internet/dropbox/dropboxservice.h" #include "internet/core/internetmodel.h" #include "ui/settingsdialog.h" +#include "ui/iconloader.h" namespace { static const char* kOAuthEndpoint = @@ -40,6 +41,8 @@ DropboxSettingsPage::DropboxSettingsPage(SettingsDialog* parent) ui_(new Ui::DropboxSettingsPage), service_(dialog()->app()->internet_model()->Service()) { ui_->setupUi(this); + setWindowIcon(IconLoader::Load("dropbox", IconLoader::Provider)); + ui_->login_state->AddCredentialGroup(ui_->login_container); connect(ui_->login_button, SIGNAL(clicked()), SLOT(LoginClicked())); diff --git a/src/internet/googledrive/googledriveservice.cpp b/src/internet/googledrive/googledriveservice.cpp index d7b106677..1465f3891 100644 --- a/src/internet/googledrive/googledriveservice.cpp +++ b/src/internet/googledrive/googledriveservice.cpp @@ -55,7 +55,7 @@ static const char* kServiceId = "google_drive"; GoogleDriveService::GoogleDriveService(Application* app, InternetModel* parent) : CloudFileService(app, parent, kServiceName, kServiceId, - QIcon(":/providers/googledrive.png"), + IconLoader::Load("googledrive", IconLoader::Provider), SettingsDialog::Page_GoogleDrive), client_(new google_drive::Client(this)), open_in_drive_action_(nullptr), @@ -213,20 +213,23 @@ void GoogleDriveService::ShowContextMenu(const QPoint& global_pos) { context_menu_.reset(new QMenu); context_menu_->addActions(GetPlaylistActions()); open_in_drive_action_ = context_menu_->addAction( - QIcon(":/providers/googledrive.png"), tr("Open in Google Drive"), this, - SLOT(OpenWithDrive())); + IconLoader::Load("googledrive", IconLoader::Provider), + tr("Open in Google Drive"), this, SLOT(OpenWithDrive())); context_menu_->addSeparator(); - update_action_ = context_menu_->addAction(IconLoader::Load("view-refresh"), + update_action_ = context_menu_->addAction(IconLoader::Load("view-refresh", + IconLoader::Base), tr("Check for updates"), this, SLOT(CheckForUpdates())); full_rescan_action_ = context_menu_->addAction( - IconLoader::Load("view-refresh"), tr("Do a full rescan..."), this, - SLOT(ConfirmFullRescan())); + IconLoader::Load("view-refresh", IconLoader::Base), + tr("Do a full rescan..."), this, SLOT(ConfirmFullRescan())); context_menu_->addSeparator(); - context_menu_->addAction(IconLoader::Load("download"), tr("Cover Manager"), - this, SLOT(ShowCoverManager())); - context_menu_->addAction(IconLoader::Load("configure"), tr("Configure..."), - this, SLOT(ShowSettingsDialog())); + context_menu_->addAction(IconLoader::Load("download", IconLoader::Base), + tr("Cover Manager"), this, + SLOT(ShowCoverManager())); + context_menu_->addAction(IconLoader::Load("configure", IconLoader::Base), + tr("Configure..."), this, + SLOT(ShowSettingsDialog())); } // Only show some actions if there are real songs selected diff --git a/src/internet/googledrive/googledrivesettingspage.cpp b/src/internet/googledrive/googledrivesettingspage.cpp index 7a0c2b828..36bac70ba 100644 --- a/src/internet/googledrive/googledrivesettingspage.cpp +++ b/src/internet/googledrive/googledrivesettingspage.cpp @@ -27,6 +27,7 @@ #include "core/application.h" #include "internet/core/internetmodel.h" #include "ui/settingsdialog.h" +#include "ui/iconloader.h" GoogleDriveSettingsPage::GoogleDriveSettingsPage(SettingsDialog* parent) : SettingsPage(parent), @@ -34,6 +35,8 @@ GoogleDriveSettingsPage::GoogleDriveSettingsPage(SettingsDialog* parent) service_( dialog()->app()->internet_model()->Service()) { ui_->setupUi(this); + setWindowIcon(IconLoader::Load("googledrive", IconLoader::Provider)); + ui_->login_state->AddCredentialGroup(ui_->login_container); connect(ui_->login_button, SIGNAL(clicked()), SLOT(LoginClicked())); diff --git a/src/internet/icecast/icecastfilterwidget.cpp b/src/internet/icecast/icecastfilterwidget.cpp index 7b6297215..993341544 100644 --- a/src/internet/icecast/icecastfilterwidget.cpp +++ b/src/internet/icecast/icecastfilterwidget.cpp @@ -38,7 +38,7 @@ IcecastFilterWidget::IcecastFilterWidget(QWidget* parent) ui_->setupUi(this); // Icons - ui_->options->setIcon(IconLoader::Load("configure")); + ui_->options->setIcon(IconLoader::Load("configure", IconLoader::Base)); // Options actions QActionGroup* group = new QActionGroup(this); diff --git a/src/internet/icecast/icecastmodel.cpp b/src/internet/icecast/icecastmodel.cpp index 98ef34493..26e0e898d 100644 --- a/src/internet/icecast/icecastmodel.cpp +++ b/src/internet/icecast/icecastmodel.cpp @@ -21,12 +21,14 @@ #include "icecastbackend.h" #include "icecastmodel.h" #include "playlist/songmimedata.h" +#include "ui/iconloader.h" + IcecastModel::IcecastModel(IcecastBackend* backend, QObject* parent) : SimpleTreeModel(new IcecastItem(this), parent), backend_(backend), sort_mode_(SortMode_GenreByPopularity), - genre_icon_(":last.fm/icon_tag.png"), - station_icon_(":last.fm/icon_radio.png") { + genre_icon_(IconLoader::Load("icon_tag", IconLoader::Lastfm)), + station_icon_(IconLoader::Load("icon_radio", IconLoader::Lastfm)) { root_->lazy_loaded = true; } diff --git a/src/internet/icecast/icecastservice.cpp b/src/internet/icecast/icecastservice.cpp index 978a1d9ee..416205340 100644 --- a/src/internet/icecast/icecastservice.cpp +++ b/src/internet/icecast/icecastservice.cpp @@ -75,7 +75,8 @@ IcecastService::IcecastService(Application* app, InternetModel* parent) IcecastService::~IcecastService() {} QStandardItem* IcecastService::CreateRootItem() { - root_ = new QStandardItem(QIcon(":last.fm/icon_radio.png"), kServiceName); + root_ = new QStandardItem(IconLoader::Load("icon_radio", + IconLoader::Lastfm), kServiceName); root_->setData(true, InternetModel::Role_CanLazyLoad); return root_; } @@ -298,10 +299,10 @@ void IcecastService::EnsureMenuCreated() { context_menu_ = new QMenu; context_menu_->addActions(GetPlaylistActions()); - context_menu_->addAction(IconLoader::Load("download"), + context_menu_->addAction(IconLoader::Load("download", IconLoader::Base), tr("Open %1 in browser").arg("dir.xiph.org"), this, SLOT(Homepage())); - context_menu_->addAction(IconLoader::Load("view-refresh"), + context_menu_->addAction(IconLoader::Load("view-refresh", IconLoader::Base), tr("Refresh station list"), this, SLOT(LoadDirectory())); diff --git a/src/internet/internetradio/savedradio.cpp b/src/internet/internetradio/savedradio.cpp index 0343d5cfa..122d8ce96 100644 --- a/src/internet/internetradio/savedradio.cpp +++ b/src/internet/internetradio/savedradio.cpp @@ -49,8 +49,8 @@ SavedRadio::SavedRadio(Application* app, InternetModel* parent) SavedRadio::~SavedRadio() { delete context_menu_; } QStandardItem* SavedRadio::CreateRootItem() { - root_ = new QStandardItem(IconLoader::Load("document-open-remote"), - tr("Your radio streams")); + root_ = new QStandardItem(IconLoader::Load("document-open-remote", + IconLoader::Base), tr("Your radio streams")); root_->setData(true, InternetModel::Role_CanLazyLoad); return root_; } @@ -104,13 +104,15 @@ void SavedRadio::ShowContextMenu(const QPoint& global_pos) { context_menu_ = new QMenu; context_menu_->addActions(GetPlaylistActions()); remove_action_ = context_menu_->addAction( - IconLoader::Load("list-remove"), tr("Remove"), this, SLOT(Remove())); - edit_action_ = context_menu_->addAction(IconLoader::Load("edit-rename"), - tr("Edit..."), this, SLOT(Edit())); + IconLoader::Load("list-remove", IconLoader::Base), tr("Remove"), + this, SLOT(Remove())); + edit_action_ = context_menu_->addAction(IconLoader::Load("edit-rename", + IconLoader::Base), tr("Edit..."), + this, SLOT(Edit())); context_menu_->addSeparator(); - context_menu_->addAction(IconLoader::Load("document-open-remote"), - tr("Add another stream..."), this, - SIGNAL(ShowAddStreamDialog())); + context_menu_->addAction(IconLoader::Load("document-open-remote", + IconLoader::Base), tr("Add another stream..."), + this, SIGNAL(ShowAddStreamDialog())); } const bool is_root = @@ -163,7 +165,8 @@ void SavedRadio::Edit() { void SavedRadio::AddStreamToList(const Stream& stream, QStandardItem* parent) { QStandardItem* s = - new QStandardItem(QIcon(":last.fm/icon_radio.png"), stream.name_); + new QStandardItem(IconLoader::Load("icon_radio", IconLoader::Lastfm), + stream.name_); s->setData(stream.url_, InternetModel::Role_Url); s->setData(InternetModel::PlayBehaviour_UseSongLoader, InternetModel::Role_PlayBehaviour); diff --git a/src/internet/jamendo/jamendoservice.cpp b/src/internet/jamendo/jamendoservice.cpp index d68662e1d..aff708ac7 100644 --- a/src/internet/jamendo/jamendoservice.cpp +++ b/src/internet/jamendo/jamendoservice.cpp @@ -136,7 +136,7 @@ JamendoService::JamendoService(Application* app, InternetModel* parent) search_provider_ = new LibrarySearchProvider( library_backend_, tr("Jamendo"), "jamendo", - QIcon(":/providers/jamendo.png"), false, app_, this); + IconLoader::Load("jamendo", IconLoader::Provider), false, app_, this); app_->global_search()->AddProvider(search_provider_); connect(app_->global_search(), SIGNAL(ProviderToggled(const SearchProvider*, bool)), @@ -147,7 +147,8 @@ JamendoService::~JamendoService() {} QStandardItem* JamendoService::CreateRootItem() { QStandardItem* item = - new QStandardItem(QIcon(":providers/jamendo.png"), kServiceName); + new QStandardItem(IconLoader::Load("jamendo", IconLoader::Provider), + kServiceName); item->setData(true, InternetModel::Role_CanLazyLoad); return item; } @@ -423,17 +424,19 @@ void JamendoService::EnsureMenuCreated() { context_menu_ = new QMenu; context_menu_->addActions(GetPlaylistActions()); - album_info_ = context_menu_->addAction(IconLoader::Load("view-media-lyrics"), + album_info_ = context_menu_->addAction(IconLoader::Load("view-media-lyrics", + IconLoader::Base), tr("Album info on jamendo.com..."), this, SLOT(AlbumInfo())); - download_album_ = context_menu_->addAction(IconLoader::Load("download"), + download_album_ = context_menu_->addAction(IconLoader::Load("download", + IconLoader::Base), tr("Download this album..."), this, SLOT(DownloadAlbum())); context_menu_->addSeparator(); - context_menu_->addAction(IconLoader::Load("download"), + context_menu_->addAction(IconLoader::Load("download", IconLoader::Base), tr("Open %1 in browser").arg("jamendo.com"), this, SLOT(Homepage())); - context_menu_->addAction(IconLoader::Load("view-refresh"), + context_menu_->addAction(IconLoader::Load("view-refresh", IconLoader::Base), tr("Refresh catalogue"), this, SLOT(DownloadDirectory())); diff --git a/src/internet/lastfm/lastfmsettingspage.cpp b/src/internet/lastfm/lastfmsettingspage.cpp index 22313aece..016a78a91 100644 --- a/src/internet/lastfm/lastfmsettingspage.cpp +++ b/src/internet/lastfm/lastfmsettingspage.cpp @@ -40,7 +40,7 @@ LastFMSettingsPage::LastFMSettingsPage(SettingsDialog* dialog) ui_->setupUi(this); // Icons - setWindowIcon(QIcon(":/last.fm/as.png")); + setWindowIcon(IconLoader::Load("lastfm", IconLoader::Provider)); connect(service_, SIGNAL(AuthenticationComplete(bool, QString)), SLOT(AuthenticationComplete(bool, QString))); diff --git a/src/internet/magnatune/magnatuneservice.cpp b/src/internet/magnatune/magnatuneservice.cpp index 7206e8808..104e23a7b 100644 --- a/src/internet/magnatune/magnatuneservice.cpp +++ b/src/internet/magnatune/magnatuneservice.cpp @@ -107,7 +107,8 @@ MagnatuneService::MagnatuneService(Application* app, InternetModel* parent) app_->player()->RegisterUrlHandler(url_handler_); app_->global_search()->AddProvider(new LibrarySearchProvider( library_backend_, tr("Magnatune"), "magnatune", - QIcon(":/providers/magnatune.png"), true, app_, this)); + IconLoader::Load("magnatune", IconLoader::Provider), + true, app_, this)); } MagnatuneService::~MagnatuneService() { delete context_menu_; } @@ -123,7 +124,8 @@ void MagnatuneService::ReloadSettings() { } QStandardItem* MagnatuneService::CreateRootItem() { - root_ = new QStandardItem(QIcon(":/providers/magnatune.png"), kServiceName); + root_ = new QStandardItem(IconLoader::Load("magnatune", IconLoader::Provider), + kServiceName); root_->setData(true, InternetModel::Role_CanLazyLoad); return root_; } @@ -276,19 +278,20 @@ void MagnatuneService::EnsureMenuCreated() { context_menu_ = new QMenu; context_menu_->addActions(GetPlaylistActions()); - download_ = context_menu_->addAction(IconLoader::Load("download"), + download_ = context_menu_->addAction(IconLoader::Load("download", + IconLoader::Base), tr("Download this album"), this, SLOT(Download())); context_menu_->addSeparator(); - context_menu_->addAction(IconLoader::Load("download"), + context_menu_->addAction(IconLoader::Load("download", IconLoader::Base), tr("Open %1 in browser").arg("magnatune.com"), this, SLOT(Homepage())); - context_menu_->addAction(IconLoader::Load("view-refresh"), + context_menu_->addAction(IconLoader::Load("view-refresh", IconLoader::Base), tr("Refresh catalogue"), this, SLOT(ReloadDatabase())); QAction* config_action = context_menu_->addAction( - IconLoader::Load("configure"), tr("Configure Magnatune..."), this, - SLOT(ShowConfig())); + IconLoader::Load("configure", IconLoader::Base), tr("Configure Magnatune..."), + this, SLOT(ShowConfig())); library_filter_ = new LibraryFilterWidget(0); library_filter_->SetSettingsGroup(kSettingsGroup); diff --git a/src/internet/magnatune/magnatunesettingspage.cpp b/src/internet/magnatune/magnatunesettingspage.cpp index 4574e87dd..470404080 100644 --- a/src/internet/magnatune/magnatunesettingspage.cpp +++ b/src/internet/magnatune/magnatunesettingspage.cpp @@ -31,6 +31,7 @@ #include "magnatuneservice.h" #include "internet/core/internetmodel.h" #include "ui_magnatunesettingspage.h" +#include "ui/iconloader.h" MagnatuneSettingsPage::MagnatuneSettingsPage(SettingsDialog* dialog) : SettingsPage(dialog), @@ -38,7 +39,7 @@ MagnatuneSettingsPage::MagnatuneSettingsPage(SettingsDialog* dialog) ui_(new Ui_MagnatuneSettingsPage), logged_in_(false) { ui_->setupUi(this); - setWindowIcon(QIcon(":/providers/magnatune.png")); + setWindowIcon(IconLoader::Load("magnatune", IconLoader::Provider)); connect(ui_->membership, SIGNAL(currentIndexChanged(int)), SLOT(MembershipChanged(int))); diff --git a/src/internet/podcasts/addpodcastbyurl.cpp b/src/internet/podcasts/addpodcastbyurl.cpp index 00aa13095..131ed65d6 100644 --- a/src/internet/podcasts/addpodcastbyurl.cpp +++ b/src/internet/podcasts/addpodcastbyurl.cpp @@ -27,6 +27,7 @@ #include "podcasturlloader.h" #include "ui_addpodcastbyurl.h" #include "core/closure.h" +#include "ui/iconloader.h" AddPodcastByUrl::AddPodcastByUrl(Application* app, QWidget* parent) : AddPodcastPage(app, parent), @@ -34,6 +35,7 @@ AddPodcastByUrl::AddPodcastByUrl(Application* app, QWidget* parent) loader_(new PodcastUrlLoader(this)) { ui_->setupUi(this); connect(ui_->go, SIGNAL(clicked()), SLOT(GoClicked())); + setWindowIcon(IconLoader::Load("podcast", IconLoader::Provider)); } AddPodcastByUrl::~AddPodcastByUrl() { delete ui_; } diff --git a/src/internet/podcasts/addpodcastdialog.cpp b/src/internet/podcasts/addpodcastdialog.cpp index 1e8c69496..5f368d06d 100644 --- a/src/internet/podcasts/addpodcastdialog.cpp +++ b/src/internet/podcasts/addpodcastdialog.cpp @@ -59,25 +59,29 @@ AddPodcastDialog::AddPodcastDialog(Application* app, QWidget* parent) // Create Add and Remove Podcast buttons add_button_ = - new QPushButton(IconLoader::Load("list-add"), tr("Add Podcast"), this); + new QPushButton(IconLoader::Load("list-add", IconLoader::Base), + tr("Add Podcast"), this); add_button_->setEnabled(false); connect(add_button_, SIGNAL(clicked()), SLOT(AddPodcast())); ui_->button_box->addButton(add_button_, QDialogButtonBox::ActionRole); remove_button_ = - new QPushButton(IconLoader::Load("list-remove"), tr("Unsubscribe"), this); + new QPushButton(IconLoader::Load("list-remove", IconLoader::Base), + tr("Unsubscribe"), this); remove_button_->setEnabled(false); connect(remove_button_, SIGNAL(clicked()), SLOT(RemovePodcast())); ui_->button_box->addButton(remove_button_, QDialogButtonBox::ActionRole); QPushButton* settings_button = new QPushButton( - IconLoader::Load("configure"), tr("Configure podcasts..."), this); + IconLoader::Load("configure", IconLoader::Base), + tr("Configure podcasts..."), this); connect(settings_button, SIGNAL(clicked()), SLOT(OpenSettingsPage())); ui_->button_box->addButton(settings_button, QDialogButtonBox::ResetRole); // Create an Open OPML file button QPushButton* open_opml_button = new QPushButton( - IconLoader::Load("document-open"), tr("Open OPML file..."), this); + IconLoader::Load("document-open", IconLoader::Base), + tr("Open OPML file..."), this); connect(open_opml_button, SIGNAL(clicked()), this, SLOT(OpenOPMLFile())); ui_->button_box->addButton(open_opml_button, QDialogButtonBox::ResetRole); @@ -85,7 +89,8 @@ AddPodcastDialog::AddPodcastDialog(Application* app, QWidget* parent) by_url_page_ = new AddPodcastByUrl(app, this); AddPage(by_url_page_); AddPage(new FixedOpmlPage(QUrl(kBbcOpmlUrl), tr("BBC Podcasts"), - QIcon(":providers/bbc.png"), app, this)); + IconLoader::Load("bbc", IconLoader::Provider), + app, this)); AddPage(new GPodderTopTagsPage(app, this)); AddPage(new GPodderSearchPage(app, this)); AddPage(new ITunesSearchPage(app, this)); diff --git a/src/internet/podcasts/gpoddersearchpage.cpp b/src/internet/podcasts/gpoddersearchpage.cpp index 835ebb337..5f453c056 100644 --- a/src/internet/podcasts/gpoddersearchpage.cpp +++ b/src/internet/podcasts/gpoddersearchpage.cpp @@ -26,6 +26,7 @@ #include "ui_gpoddersearchpage.h" #include "core/closure.h" #include "core/network.h" +#include "ui/iconloader.h" GPodderSearchPage::GPodderSearchPage(Application* app, QWidget* parent) : AddPodcastPage(app, parent), @@ -34,6 +35,7 @@ GPodderSearchPage::GPodderSearchPage(Application* app, QWidget* parent) api_(new mygpo::ApiRequest(network_)) { ui_->setupUi(this); connect(ui_->search, SIGNAL(clicked()), SLOT(SearchClicked())); + setWindowIcon(IconLoader::Load("mygpo", IconLoader::Provider)); } GPodderSearchPage::~GPodderSearchPage() { diff --git a/src/internet/podcasts/gpoddertoptagspage.cpp b/src/internet/podcasts/gpoddertoptagspage.cpp index 269cdb9ce..506a46d37 100644 --- a/src/internet/podcasts/gpoddertoptagspage.cpp +++ b/src/internet/podcasts/gpoddertoptagspage.cpp @@ -24,6 +24,7 @@ #include "gpoddertoptagsmodel.h" #include "core/closure.h" #include "core/network.h" +#include "ui/iconloader.h" const int GPodderTopTagsPage::kMaxTagCount = 100; @@ -33,7 +34,7 @@ GPodderTopTagsPage::GPodderTopTagsPage(Application* app, QWidget* parent) api_(new mygpo::ApiRequest(network_)), done_initial_load_(false) { setWindowTitle(tr("gpodder.net directory")); - setWindowIcon(QIcon(":providers/mygpo32.png")); + setWindowIcon(IconLoader::Load("mygpo", IconLoader::Provider)); SetModel(new GPodderTopTagsModel(api_, app, this)); } diff --git a/src/internet/podcasts/itunessearchpage.cpp b/src/internet/podcasts/itunessearchpage.cpp index a17005f95..20f9b2a6b 100644 --- a/src/internet/podcasts/itunessearchpage.cpp +++ b/src/internet/podcasts/itunessearchpage.cpp @@ -28,6 +28,7 @@ #include "podcast.h" #include "podcastdiscoverymodel.h" #include "ui_itunessearchpage.h" +#include "ui/iconloader.h" const char* ITunesSearchPage::kUrlBase = "http://ax.phobos.apple.com.edgesuite.net/WebObjects/MZStoreServices.woa/" @@ -39,6 +40,7 @@ ITunesSearchPage::ITunesSearchPage(Application* app, QWidget* parent) network_(new NetworkAccessManager(this)) { ui_->setupUi(this); connect(ui_->search, SIGNAL(clicked()), SLOT(SearchClicked())); + setWindowIcon(IconLoader::Load("itunes", IconLoader::Provider)); } ITunesSearchPage::~ITunesSearchPage() { delete ui_; } diff --git a/src/internet/podcasts/podcastdiscoverymodel.cpp b/src/internet/podcasts/podcastdiscoverymodel.cpp index 744dbb9d7..076562d90 100644 --- a/src/internet/podcasts/podcastdiscoverymodel.cpp +++ b/src/internet/podcasts/podcastdiscoverymodel.cpp @@ -32,7 +32,7 @@ PodcastDiscoveryModel::PodcastDiscoveryModel(Application* app, QObject* parent) : QStandardItemModel(parent), app_(app), icon_loader_(new StandardItemIconLoader(app->album_cover_loader(), this)), - default_icon_(":providers/podcast16.png") { + default_icon_(IconLoader::Load("podcast", IconLoader::Provider)) { icon_loader_->SetModel(this); } @@ -63,7 +63,7 @@ QStandardItem* PodcastDiscoveryModel::CreatePodcastItem( QStandardItem* PodcastDiscoveryModel::CreateFolder(const QString& name) { if (folder_icon_.isNull()) { - folder_icon_ = IconLoader::Load("folder"); + folder_icon_ = IconLoader::Load("folder", IconLoader::Base); } QStandardItem* item = new QStandardItem; diff --git a/src/internet/podcasts/podcastservice.cpp b/src/internet/podcasts/podcastservice.cpp index a482d31d6..b6a824df2 100644 --- a/src/internet/podcasts/podcastservice.cpp +++ b/src/internet/podcasts/podcastservice.cpp @@ -128,7 +128,8 @@ bool PodcastSortProxyModel::lessThan(const QModelIndex& left, } QStandardItem* PodcastService::CreateRootItem() { - root_ = new QStandardItem(QIcon(":providers/podcast16.png"), tr("Podcasts")); + root_ = new QStandardItem(IconLoader::Load("podcast", IconLoader::Provider), + tr("Podcasts")); root_->setData(true, InternetModel::Role_CanLazyLoad); return root_; } @@ -227,7 +228,7 @@ void PodcastService::PopulatePodcastList(QStandardItem* parent) { SLOT(DownloadProgressChanged(PodcastEpisode, PodcastDownload::State, int))); if (default_icon_.isNull()) { - default_icon_ = QIcon(":providers/podcast16.png"); + default_icon_ = IconLoader::Load("podcast", IconLoader::Provider); } for (const Podcast& podcast : backend_->GetAllSubscriptions()) { @@ -277,7 +278,7 @@ void PodcastService::UpdateEpisodeText(QStandardItem* item, // Downloaded episodes get an icon if (episode.downloaded()) { if (downloaded_icon_.isNull()) { - downloaded_icon_ = IconLoader::Load("document-save"); + downloaded_icon_ = IconLoader::Load("document-save", IconLoader::Base); } icon = downloaded_icon_; } @@ -286,7 +287,7 @@ void PodcastService::UpdateEpisodeText(QStandardItem* item, switch (state) { case PodcastDownload::Queued: if (queued_icon_.isNull()) { - queued_icon_ = QIcon(":icons/22x22/user-away.png"); + queued_icon_ = IconLoader::Load("user-away", IconLoader::Base); } icon = queued_icon_; tooltip = tr("Download queued"); @@ -294,7 +295,7 @@ void PodcastService::UpdateEpisodeText(QStandardItem* item, case PodcastDownload::Downloading: if (downloading_icon_.isNull()) { - downloading_icon_ = IconLoader::Load("go-down"); + downloading_icon_ = IconLoader::Load("go-down", IconLoader::Base); } icon = downloading_icon_; tooltip = tr("Downloading (%1%)...").arg(percent); @@ -324,7 +325,7 @@ void PodcastService::UpdatePodcastText(QStandardItem* item, switch (state) { case PodcastDownload::Queued: if (queued_icon_.isNull()) { - queued_icon_ = QIcon(":icons/22x22/user-away.png"); + queued_icon_ = IconLoader::Load("user-away", IconLoader::Base); } icon = queued_icon_; item->setIcon(icon); @@ -333,7 +334,7 @@ void PodcastService::UpdatePodcastText(QStandardItem* item, case PodcastDownload::Downloading: if (downloading_icon_.isNull()) { - downloading_icon_ = IconLoader::Load("go-down"); + downloading_icon_ = IconLoader::Load("go-down", IconLoader::Base); } icon = downloading_icon_; item->setIcon(icon); @@ -413,9 +414,9 @@ QStandardItem* PodcastService::CreatePodcastEpisodeItem( void PodcastService::ShowContextMenu(const QPoint& global_pos) { if (!context_menu_) { context_menu_ = new QMenu; - context_menu_->addAction(IconLoader::Load("list-add"), tr("Add podcast..."), - this, SLOT(AddPodcast())); - context_menu_->addAction(IconLoader::Load("view-refresh"), + context_menu_->addAction(IconLoader::Load("list-add", IconLoader::Base), + tr("Add podcast..."), this, SLOT(AddPodcast())); + context_menu_->addAction(IconLoader::Load("view-refresh", IconLoader::Base), tr("Update all podcasts"), app_->podcast_updater(), SLOT(UpdateAllPodcastsNow())); @@ -424,23 +425,24 @@ void PodcastService::ShowContextMenu(const QPoint& global_pos) { context_menu_->addSeparator(); update_selected_action_ = context_menu_->addAction( - IconLoader::Load("view-refresh"), tr("Update this podcast"), this, - SLOT(UpdateSelectedPodcast())); + IconLoader::Load("view-refresh", IconLoader::Base), + tr("Update this podcast"), this, SLOT(UpdateSelectedPodcast())); download_selected_action_ = - context_menu_->addAction(IconLoader::Load("download"), "", this, - SLOT(DownloadSelectedEpisode())); + context_menu_->addAction(IconLoader::Load("download", IconLoader::Base), + "", this, SLOT(DownloadSelectedEpisode())); delete_downloaded_action_ = context_menu_->addAction( - IconLoader::Load("edit-delete"), tr("Delete downloaded data"), this, - SLOT(DeleteDownloadedData())); + IconLoader::Load("edit-delete", IconLoader::Base), + tr("Delete downloaded data"), this, SLOT(DeleteDownloadedData())); copy_to_device_ = context_menu_->addAction( - IconLoader::Load("multimedia-player-ipod-mini-blue"), + IconLoader::Load("multimedia-player-ipod-mini-blue", IconLoader::Base), tr("Copy to device..."), this, SLOT(CopyToDevice())); - cancel_download_ = context_menu_->addAction(IconLoader::Load("cancel"), + cancel_download_ = context_menu_->addAction(IconLoader::Load("cancel", + IconLoader::Base), tr("Cancel download"), this, SLOT(CancelDownload())); remove_selected_action_ = context_menu_->addAction( - IconLoader::Load("list-remove"), tr("Unsubscribe"), this, - SLOT(RemoveSelectedPodcast())); + IconLoader::Load("list-remove", IconLoader::Base), tr("Unsubscribe"), + this, SLOT(RemoveSelectedPodcast())); context_menu_->addSeparator(); set_new_action_ = @@ -449,7 +451,7 @@ void PodcastService::ShowContextMenu(const QPoint& global_pos) { this, SLOT(SetListened())); context_menu_->addSeparator(); - context_menu_->addAction(IconLoader::Load("configure"), + context_menu_->addAction(IconLoader::Load("configure", IconLoader::Base), tr("Configure podcasts..."), this, SLOT(ShowConfig())); diff --git a/src/internet/podcasts/podcastsettingspage.cpp b/src/internet/podcasts/podcastsettingspage.cpp index 3915a7836..23404dd5a 100644 --- a/src/internet/podcasts/podcastsettingspage.cpp +++ b/src/internet/podcasts/podcastsettingspage.cpp @@ -32,12 +32,15 @@ #include "library/librarymodel.h" #include "podcastdownloader.h" #include "ui/settingsdialog.h" +#include "ui/iconloader.h" const char* PodcastSettingsPage::kSettingsGroup = "Podcasts"; PodcastSettingsPage::PodcastSettingsPage(SettingsDialog* dialog) : SettingsPage(dialog), ui_(new Ui_PodcastSettingsPage) { ui_->setupUi(this); + setWindowIcon(IconLoader::Load("podcast", IconLoader::Provider)); + connect(ui_->login, SIGNAL(clicked()), SLOT(LoginClicked())); connect(ui_->login_state, SIGNAL(LoginClicked()), SLOT(LoginClicked())); connect(ui_->login_state, SIGNAL(LogoutClicked()), SLOT(LogoutClicked())); diff --git a/src/internet/seafile/seafileservice.cpp b/src/internet/seafile/seafileservice.cpp index 9bb4451a5..69909513e 100644 --- a/src/internet/seafile/seafileservice.cpp +++ b/src/internet/seafile/seafileservice.cpp @@ -32,6 +32,7 @@ #include "internet/seafile/seafileurlhandler.h" #include "library/librarybackend.h" #include "internet/core/oauthenticator.h" +#include "ui/iconloader.h" const char* SeafileService::kServiceName = "Seafile"; const char* SeafileService::kSettingsGroup = "Seafile"; @@ -51,7 +52,7 @@ static const int kMaxTries = 10; SeafileService::SeafileService(Application* app, InternetModel* parent) : CloudFileService(app, parent, kServiceName, kSettingsGroup, - QIcon(":/providers/seafile.png"), + IconLoader::Load("seafile", IconLoader::Provider), SettingsDialog::Page_Seafile), indexing_task_id_(-1), indexing_task_max_(0), diff --git a/src/internet/seafile/seafilesettingspage.cpp b/src/internet/seafile/seafilesettingspage.cpp index d87026606..e2867ed43 100644 --- a/src/internet/seafile/seafilesettingspage.cpp +++ b/src/internet/seafile/seafilesettingspage.cpp @@ -38,7 +38,7 @@ SeafileSettingsPage::SeafileSettingsPage(SettingsDialog* dialog) service_(InternetModel::Service()) { ui_->setupUi(this); - setWindowIcon(QIcon(":/providers/seafile.png")); + setWindowIcon(IconLoader::Load("seafile", IconLoader::Provider)); connect(ui_->login_button, SIGNAL(clicked()), SLOT(Login())); connect(ui_->login_state, SIGNAL(LogoutClicked()), SLOT(Logout())); diff --git a/src/internet/skydrive/skydriveservice.cpp b/src/internet/skydrive/skydriveservice.cpp index 91bfce90c..e32d22e25 100644 --- a/src/internet/skydrive/skydriveservice.cpp +++ b/src/internet/skydrive/skydriveservice.cpp @@ -28,6 +28,7 @@ #include "core/waitforsignal.h" #include "internet/core/oauthenticator.h" #include "internet/skydrive/skydriveurlhandler.h" +#include "ui/iconloader.h" namespace { @@ -52,7 +53,7 @@ const char* SkydriveService::kSettingsGroup = "Skydrive"; SkydriveService::SkydriveService(Application* app, InternetModel* parent) : CloudFileService(app, parent, kServiceName, kServiceId, - QIcon(":providers/skydrive.png"), + IconLoader::Load("skydrive", IconLoader::Provider), SettingsDialog::Page_Skydrive) { app->player()->RegisterUrlHandler(new SkydriveUrlHandler(this, this)); } diff --git a/src/internet/skydrive/skydrivesettingspage.cpp b/src/internet/skydrive/skydrivesettingspage.cpp index 7dfe83ad2..487d8451b 100644 --- a/src/internet/skydrive/skydrivesettingspage.cpp +++ b/src/internet/skydrive/skydrivesettingspage.cpp @@ -25,12 +25,15 @@ #include "internet/skydrive/skydriveservice.h" #include "internet/core/internetmodel.h" #include "ui/settingsdialog.h" +#include "ui/iconloader.h" SkydriveSettingsPage::SkydriveSettingsPage(SettingsDialog* parent) : SettingsPage(parent), ui_(new Ui::SkydriveSettingsPage), service_(dialog()->app()->internet_model()->Service()) { ui_->setupUi(this); + setWindowIcon(IconLoader::Load("skydrive", IconLoader::Provider)); + ui_->login_state->AddCredentialGroup(ui_->login_container); connect(ui_->login_button, SIGNAL(clicked()), SLOT(LoginClicked())); diff --git a/src/internet/somafm/somafmservice.cpp b/src/internet/somafm/somafmservice.cpp index 616d591d1..efb3251bd 100644 --- a/src/internet/somafm/somafmservice.cpp +++ b/src/internet/somafm/somafmservice.cpp @@ -98,16 +98,16 @@ void SomaFMServiceBase::ShowContextMenu(const QPoint& global_pos) { if (!context_menu_) { context_menu_ = new QMenu; context_menu_->addActions(GetPlaylistActions()); - context_menu_->addAction(IconLoader::Load("download"), + context_menu_->addAction(IconLoader::Load("download", IconLoader::Base), tr("Open %1 in browser").arg(homepage_url_.host()), this, SLOT(Homepage())); if (!donate_page_url_.isEmpty()) { - context_menu_->addAction(IconLoader::Load("download"), tr("Donate"), this, - SLOT(Donate())); + context_menu_->addAction(IconLoader::Load("download", IconLoader::Base), + tr("Donate"), this, SLOT(Donate())); } - context_menu_->addAction(IconLoader::Load("view-refresh"), + context_menu_->addAction(IconLoader::Load("view-refresh", IconLoader::Base), tr("Refresh channels"), this, SLOT(ForceRefreshStreams())); } @@ -233,7 +233,8 @@ void SomaFMServiceBase::PopulateStreams() { for (const Stream& stream : streams_) { QStandardItem* item = - new QStandardItem(QIcon(":last.fm/icon_radio.png"), QString()); + new QStandardItem(IconLoader::Load("icon_radio", IconLoader::Lastfm), + QString()); item->setText(stream.title_); item->setData(QVariant::fromValue(stream.ToSong(name_)), InternetModel::Role_SongMetadata); @@ -263,4 +264,5 @@ void SomaFMServiceBase::ReloadSettings() { SomaFMService::SomaFMService(Application* app, InternetModel* parent) : SomaFMServiceBase( app, parent, "SomaFM", QUrl("https://somafm.com/channels.xml"), - QUrl("https://somafm.com"), QUrl(), QIcon(":providers/somafm.png")) {} + QUrl("https://somafm.com"), QUrl(), IconLoader::Load("somafm", + IconLoader::Provider)) {} diff --git a/src/internet/soundcloud/soundcloudservice.cpp b/src/internet/soundcloud/soundcloudservice.cpp index 4883afa96..0bfc63953 100644 --- a/src/internet/soundcloud/soundcloudservice.cpp +++ b/src/internet/soundcloud/soundcloudservice.cpp @@ -92,7 +92,8 @@ SoundCloudService::SoundCloudService(Application* app, InternetModel* parent) SoundCloudService::~SoundCloudService() {} QStandardItem* SoundCloudService::CreateRootItem() { - root_ = new QStandardItem(QIcon(":providers/soundcloud.png"), kServiceName); + root_ = new QStandardItem(IconLoader::Load("soundcloud", + IconLoader::Provider), kServiceName); root_->setData(true, InternetModel::Role_CanLazyLoad); root_->setData(InternetModel::PlayBehaviour_DoubleClickAction, InternetModel::Role_PlayBehaviour); @@ -113,7 +114,8 @@ void SoundCloudService::LazyPopulate(QStandardItem* item) { void SoundCloudService::EnsureItemsCreated() { if (!search_) { search_ = - new QStandardItem(IconLoader::Load("edit-find"), tr("Search results")); + new QStandardItem(IconLoader::Load("edit-find", IconLoader::Base), + tr("Search results")); search_->setToolTip( tr("Start typing something on the search box above to " "fill this search results list")); @@ -347,7 +349,7 @@ void SoundCloudService::EnsureMenuCreated() { context_menu_ = new QMenu; context_menu_->addActions(GetPlaylistActions()); context_menu_->addSeparator(); - context_menu_->addAction(IconLoader::Load("download"), + context_menu_->addAction(IconLoader::Load("download", IconLoader::Base), tr("Open %1 in browser").arg("soundcloud.com"), this, SLOT(Homepage())); } diff --git a/src/internet/soundcloud/soundcloudsettingspage.cpp b/src/internet/soundcloud/soundcloudsettingspage.cpp index 4382a4f5e..ac51242f9 100644 --- a/src/internet/soundcloud/soundcloudsettingspage.cpp +++ b/src/internet/soundcloud/soundcloudsettingspage.cpp @@ -21,6 +21,7 @@ #include "ui_soundcloudsettingspage.h" #include "core/application.h" #include "internet/core/internetmodel.h" +#include "ui/iconloader.h" SoundCloudSettingsPage::SoundCloudSettingsPage(SettingsDialog* parent) : SettingsPage(parent), @@ -28,6 +29,8 @@ SoundCloudSettingsPage::SoundCloudSettingsPage(SettingsDialog* parent) service_( dialog()->app()->internet_model()->Service()) { ui_->setupUi(this); + setWindowIcon(IconLoader::Load("soundcloud", IconLoader::Provider)); + ui_->login_state->AddCredentialGroup(ui_->login_container); connect(ui_->login_button, SIGNAL(clicked()), SLOT(LoginClicked())); diff --git a/src/internet/spotify/spotifyservice.cpp b/src/internet/spotify/spotifyservice.cpp index 278d3aad9..551ec8f7e 100644 --- a/src/internet/spotify/spotifyservice.cpp +++ b/src/internet/spotify/spotifyservice.cpp @@ -125,7 +125,8 @@ SpotifyService::~SpotifyService() { } QStandardItem* SpotifyService::CreateRootItem() { - root_ = new QStandardItem(QIcon(":icons/22x22/spotify.png"), kServiceName); + root_ = new QStandardItem(IconLoader::Load("spotify", IconLoader::Provider), + kServiceName); root_->setData(true, InternetModel::Role_CanLazyLoad); return root_; } @@ -403,7 +404,8 @@ void SpotifyService::PlaylistsUpdated(const pb::spotify::Playlists& response) { // Create starred and inbox playlists if they're not here already if (!search_) { search_ = - new QStandardItem(IconLoader::Load("edit-find"), tr("Search results")); + new QStandardItem(IconLoader::Load("edit-find", IconLoader::Base), + tr("Search results")); search_->setToolTip( tr("Start typing something on the search box above to " "fill this search results list")); @@ -418,7 +420,8 @@ void SpotifyService::PlaylistsUpdated(const pb::spotify::Playlists& response) { InternetModel::Role_PlayBehaviour); starred_->setData(true, InternetModel::Role_CanBeModified); - inbox_ = new QStandardItem(IconLoader::Load("mail-message"), tr("Inbox")); + inbox_ = new QStandardItem(IconLoader::Load("mail-message", + IconLoader::Base), tr("Inbox")); inbox_->setData(Type_InboxPlaylist, InternetModel::Role_Type); inbox_->setData(true, InternetModel::Role_CanLazyLoad); inbox_->setData(InternetModel::PlayBehaviour_MultipleItems, @@ -613,7 +616,8 @@ QList SpotifyService::playlistitem_actions(const Song& song) { playlistitem_actions_.append(add_to_starred); // Create a menu with 'add to playlist' actions for each Spotify playlist - QAction* add_to_playlists = new QAction(IconLoader::Load("list-add"), + QAction* add_to_playlists = new QAction(IconLoader::Load("list-add", + IconLoader::Base), tr("Add to Spotify playlists"), this); QMenu* playlists_menu = new QMenu(); for (const QStandardItem* playlist_item : playlists_) { @@ -659,8 +663,8 @@ void SpotifyService::EnsureMenuCreated() { playlist_context_menu_->addActions(GetPlaylistActions()); playlist_context_menu_->addSeparator(); playlist_sync_action_ = playlist_context_menu_->addAction( - IconLoader::Load("view-refresh"), tr("Make playlist available offline"), - this, SLOT(SyncPlaylist())); + IconLoader::Load("view-refresh", IconLoader::Base), + tr("Make playlist available offline"), this, SLOT(SyncPlaylist())); get_url_to_share_playlist_ = playlist_context_menu_->addAction( tr("Get a URL to share this playlist"), this, SLOT(GetCurrentPlaylistUrlToShare())); @@ -671,7 +675,8 @@ void SpotifyService::EnsureMenuCreated() { song_context_menu_->addActions(GetPlaylistActions()); song_context_menu_->addSeparator(); remove_from_playlist_ = song_context_menu_->addAction( - IconLoader::Load("list-remove"), tr("Remove from playlist"), this, + IconLoader::Load("list-remove", IconLoader::Base), + tr("Remove from playlist"), this, SLOT(RemoveCurrentFromPlaylist())); song_context_menu_->addAction(tr("Get a URL to share this Spotify song"), this, SLOT(GetCurrentSongUrlToShare())); @@ -909,7 +914,8 @@ void SpotifyService::SyncPlaylistProgress( } QAction* SpotifyService::GetNewShowConfigAction() { - QAction* action = new QAction(IconLoader::Load("configure"), + QAction* action = new QAction(IconLoader::Load("configure", + IconLoader::Base), tr("Configure Spotify..."), this); connect(action, SIGNAL(triggered()), this, SLOT(ShowConfig())); return action; diff --git a/src/internet/spotify/spotifysettingspage.cpp b/src/internet/spotify/spotifysettingspage.cpp index 4a35de177..51ec5a92c 100644 --- a/src/internet/spotify/spotifysettingspage.cpp +++ b/src/internet/spotify/spotifysettingspage.cpp @@ -41,7 +41,7 @@ SpotifySettingsPage::SpotifySettingsPage(SettingsDialog* dialog) validated_(false) { ui_->setupUi(this); - setWindowIcon(QIcon(":/icons/48x48/spotify.png")); + setWindowIcon(IconLoader::Load("spotify", IconLoader::Provider)); QFont bold_font(font()); bold_font.setBold(true); diff --git a/src/internet/subsonic/subsonicservice.cpp b/src/internet/subsonic/subsonicservice.cpp index 29a18f375..4d1b73fe1 100644 --- a/src/internet/subsonic/subsonicservice.cpp +++ b/src/internet/subsonic/subsonicservice.cpp @@ -105,12 +105,12 @@ SubsonicService::SubsonicService(Application* app, InternetModel* parent) context_menu_ = new QMenu; context_menu_->addActions(GetPlaylistActions()); context_menu_->addSeparator(); - context_menu_->addAction(IconLoader::Load("view-refresh"), + context_menu_->addAction(IconLoader::Load("view-refresh", IconLoader::Base), tr("Refresh catalogue"), this, SLOT(ReloadDatabase())); QAction* config_action = context_menu_->addAction( - IconLoader::Load("configure"), tr("Configure Subsonic..."), this, - SLOT(ShowConfig())); + IconLoader::Load("configure", IconLoader::Base), tr("Configure Subsonic..."), + this, SLOT(ShowConfig())); context_menu_->addSeparator(); context_menu_->addMenu(library_filter_->menu()); @@ -118,13 +118,14 @@ SubsonicService::SubsonicService(Application* app, InternetModel* parent) app_->global_search()->AddProvider(new LibrarySearchProvider( library_backend_, tr("Subsonic"), "subsonic", - QIcon(":/providers/subsonic.png"), true, app_, this)); + IconLoader::Load("subsonic", IconLoader::Provider), true, app_, this)); } SubsonicService::~SubsonicService() {} QStandardItem* SubsonicService::CreateRootItem() { - root_ = new QStandardItem(QIcon(":providers/subsonic.png"), kServiceName); + root_ = new QStandardItem(IconLoader::Load("subsonic", IconLoader::Provider), + kServiceName); root_->setData(true, InternetModel::Role_CanLazyLoad); return root_; } diff --git a/src/internet/subsonic/subsonicsettingspage.cpp b/src/internet/subsonic/subsonicsettingspage.cpp index 47c53bfce..a48509f3b 100644 --- a/src/internet/subsonic/subsonicsettingspage.cpp +++ b/src/internet/subsonic/subsonicsettingspage.cpp @@ -25,13 +25,14 @@ #include "core/logging.h" #include "internet/core/internetmodel.h" +#include "ui/iconloader.h" SubsonicSettingsPage::SubsonicSettingsPage(SettingsDialog* dialog) : SettingsPage(dialog), ui_(new Ui_SubsonicSettingsPage), service_(InternetModel::Service()) { ui_->setupUi(this); - setWindowIcon(QIcon(":/providers/subsonic-32.png")); + setWindowIcon(IconLoader::Load("subsonic", IconLoader::Provider)); connect(ui_->server, SIGNAL(editingFinished()), SLOT(ServerEditingFinished())); diff --git a/src/internet/vk/vksearchdialog.cpp b/src/internet/vk/vksearchdialog.cpp index c1314e568..e6eb65737 100644 --- a/src/internet/vk/vksearchdialog.cpp +++ b/src/internet/vk/vksearchdialog.cpp @@ -23,6 +23,7 @@ #include #include "vkservice.h" +#include "ui/iconloader.h" VkSearchDialog::VkSearchDialog(VkService* service, QWidget* parent) : QDialog(parent), @@ -185,9 +186,9 @@ QTreeWidgetItem* VkSearchDialog::createItem(const MusicOwner& own) { QTreeWidgetItem* item = new QTreeWidgetItem(popup); item->setText(0, own.name()); if (own.id() > 0) { - item->setIcon(0, QIcon(":vk/user.png")); + item->setIcon(0, IconLoader::Load("x-clementine-artist", IconLoader::Base)); } else { - item->setIcon(0, QIcon(":vk/group.png")); + item->setIcon(0, IconLoader::Load("group", IconLoader::Base)); } item->setData(0, Qt::UserRole, QVariant::fromValue(own)); item->setText(1, QString::number(own.song_count())); diff --git a/src/internet/vk/vkservice.cpp b/src/internet/vk/vkservice.cpp index 0efa893dd..a86b826ac 100644 --- a/src/internet/vk/vkservice.cpp +++ b/src/internet/vk/vkservice.cpp @@ -266,7 +266,8 @@ VkService::~VkService() {} */ QStandardItem* VkService::CreateRootItem() { - root_item_ = new QStandardItem(QIcon(":providers/vk.png"), kServiceName); + root_item_ = new QStandardItem(IconLoader::Load("vk", IconLoader::Provider), + kServiceName); root_item_->setData(true, InternetModel::Role_CanLazyLoad); return root_item_; } @@ -304,45 +305,49 @@ void VkService::EnsureMenuCreated() { context_menu_->addSeparator(); add_to_bookmarks_ = - context_menu_->addAction(QIcon(":vk/add.png"), tr("Add to bookmarks"), - this, SLOT(AddSelectedToBookmarks())); + context_menu_->addAction(IconLoader::Load("list-add", IconLoader::Base), + tr("Add to bookmarks"), this, + SLOT(AddSelectedToBookmarks())); remove_from_bookmarks_ = context_menu_->addAction( - QIcon(":vk/remove.png"), tr("Remove from bookmarks"), this, - SLOT(RemoveFromBookmark())); + IconLoader::Load("list-remove", IconLoader::Base), tr("Remove from bookmarks"), + this, SLOT(RemoveFromBookmark())); context_menu_->addSeparator(); find_this_artist_ = - context_menu_->addAction(QIcon(":vk/find.png"), tr("Find this artist"), - this, SLOT(FindThisArtist())); + context_menu_->addAction(IconLoader::Load("edit-find", IconLoader::Base), + tr("Find this artist"), this, + SLOT(FindThisArtist())); add_to_my_music_ = - context_menu_->addAction(QIcon(":vk/add.png"), tr("Add to My Music"), - this, SLOT(AddToMyMusic())); + context_menu_->addAction(IconLoader::Load("list-add", IconLoader::Base), + tr("Add to My Music"), this, SLOT(AddToMyMusic())); remove_from_my_music_ = context_menu_->addAction( - QIcon(":vk/remove.png"), tr("Remove from My Music"), this, - SLOT(RemoveFromMyMusic())); + IconLoader::Load("list-remove", IconLoader::Base), tr("Remove from My Music"), + this, SLOT(RemoveFromMyMusic())); - add_song_to_cache_ = context_menu_->addAction(QIcon(":vk/download.png"), + add_song_to_cache_ = context_menu_->addAction(IconLoader::Load("download", + IconLoader::Base), tr("Add song to cache"), this, SLOT(AddSelectedToCache())); copy_share_url_ = context_menu_->addAction( - QIcon(":vk/link.png"), tr("Copy share url to clipboard"), this, - SLOT(CopyShareUrl())); + IconLoader::Load("link", IconLoader::Base), tr("Copy share url to clipboard"), + this, SLOT(CopyShareUrl())); - find_owner_ = context_menu_->addAction(QIcon(":vk/find.png"), + find_owner_ = context_menu_->addAction(IconLoader::Load("edit-find", + IconLoader::Base), tr("Add user/group to bookmarks"), this, SLOT(ShowSearchDialog())); update_item_ = - context_menu_->addAction(IconLoader::Load("view-refresh"), tr("Update"), - this, SLOT(UpdateItem())); + context_menu_->addAction(IconLoader::Load("view-refresh", IconLoader::Base), + tr("Update"), this, SLOT(UpdateItem())); context_menu_->addSeparator(); - context_menu_->addAction(IconLoader::Load("configure"), + context_menu_->addAction(IconLoader::Load("configure", IconLoader::Base), tr("Configure Vk.com..."), this, SLOT(ShowConfig())); } @@ -515,7 +520,8 @@ QStandardItem* VkService::CreateAndAppendRow(QStandardItem* parent, break; case Type_Recommendations: - item = new QStandardItem(QIcon(":vk/recommends.png"), + item = new QStandardItem(IconLoader::Load("audio-headset", + IconLoader::Base), tr("My Recommendations")); item->setData(true, InternetModel::Role_CanLazyLoad); item->setData(InternetModel::PlayBehaviour_MultipleItems, @@ -524,7 +530,8 @@ QStandardItem* VkService::CreateAndAppendRow(QStandardItem* parent, break; case Type_Search: - item = new QStandardItem(QIcon(":vk/find.png"), tr("Search")); + item = new QStandardItem(IconLoader::Load("edit-find", + IconLoader::Base), tr("Search")); item->setData(InternetModel::PlayBehaviour_MultipleItems, InternetModel::Role_PlayBehaviour); search_result_item_ = item; @@ -760,9 +767,9 @@ void VkService::LoadBookmarks() { QStandardItem* VkService::AppendBookmark(const MusicOwner& owner) { QIcon icon; if (owner.id() > 0) { - icon = QIcon(":vk/user.png"); + icon = IconLoader::Load("x-clementine-artist", IconLoader::Base); } else { - icon = QIcon(":vk/group.png"); + icon = IconLoader::Load("group", IconLoader::Base); } QStandardItem* item = new QStandardItem(icon, owner.name()); @@ -809,7 +816,8 @@ void VkService::LoadAlbums(QStandardItem* parent, const MusicOwner& owner) { QStandardItem* VkService::AppendAlbum(QStandardItem* parent, const Vreen::AudioAlbumItem& album) { QStandardItem* item = - new QStandardItem(QIcon(":vk/playlist.png"), album.title()); + new QStandardItem(IconLoader::Load("view-media-playlist", IconLoader::Base), + album.title()); item->setData(QVariant::fromValue(album), Role_AlbumMetadata); item->setData(Type_Album, InternetModel::Role_Type); @@ -826,14 +834,16 @@ QStandardItem* VkService::AppendAlbumList(QStandardItem* parent, bool myself) { QStandardItem* item; if (myself) { - item = new QStandardItem(QIcon(":vk/discography.png"), tr("My Albums")); + item = new QStandardItem(IconLoader::Load("x-clementine-album", + IconLoader::Base), tr("My Albums")); // TODO(Ivan Leontiev): Do this better. We have incomplete MusicOwner // instance for logged in user. owner.setId(UserID()); my_albums_item_ = item; } else { owner = parent->data(Role_MusicOwnerMetadata).value(); - item = new QStandardItem(QIcon(":vk/discography.png"), tr("Albums")); + item = new QStandardItem(IconLoader::Load("x-clementine-album", + IconLoader::Base), tr("Albums")); } item->setData(QVariant::fromValue(owner), Role_MusicOwnerMetadata); @@ -866,7 +876,8 @@ void VkService::UpdateAlbumSongs(QStandardItem* item) { QStandardItem* VkService::AppendWall(QStandardItem* parent) { QStandardItem* item = - new QStandardItem(QIcon(":vk/playlist.png"), tr("Wall")); + new QStandardItem(IconLoader::Load("view-media-playlist", + IconLoader::Base), tr("Wall")); MusicOwner owner = parent->data(Role_MusicOwnerMetadata).value(); item->setData(QVariant::fromValue(owner), Role_MusicOwnerMetadata); @@ -884,13 +895,15 @@ QStandardItem* VkService::AppendMusic(QStandardItem* parent, bool myself) { QStandardItem* item; if (myself) { - item = new QStandardItem(QIcon(":vk/my_music.png"), tr("My Music")); + item = new QStandardItem(IconLoader::Load("love", IconLoader::Lastfm), + tr("My Music")); // TODO(Ivan Leontiev): Do this better. We have incomplete MusicOwner // instance for logged in user. owner.setId(UserID()); my_music_item_ = item; } else { - item = new QStandardItem(QIcon(":vk/playlist.png"), tr("Music")); + item = new QStandardItem(IconLoader::Load("view-media-playlist", + IconLoader::Base), tr("Music")); owner = parent->data(Role_MusicOwnerMetadata).value(); } diff --git a/src/internet/vk/vksettingspage.cpp b/src/internet/vk/vksettingspage.cpp index 70f38315d..fd4584176 100644 --- a/src/internet/vk/vksettingspage.cpp +++ b/src/internet/vk/vksettingspage.cpp @@ -25,12 +25,15 @@ #include "core/application.h" #include "core/logging.h" #include "internet/vk/vkservice.h" +#include "ui/iconloader.h" VkSettingsPage::VkSettingsPage(SettingsDialog* parent) : SettingsPage(parent), ui_(new Ui::VkSettingsPage), service_(dialog()->app()->internet_model()->Service()) { ui_->setupUi(this); + setWindowIcon(IconLoader::Load("vk", IconLoader::Provider)); + connect(service_, SIGNAL(LoginSuccess(bool)), SLOT(LoginSuccess(bool))); connect(ui_->choose_path, SIGNAL(clicked()), SLOT(CacheDirBrowse())); connect(ui_->reset, SIGNAL(clicked()), SLOT(ResetCasheFilenames())); diff --git a/src/library/librarydirectorymodel.cpp b/src/library/librarydirectorymodel.cpp index afe18c783..921581cee 100644 --- a/src/library/librarydirectorymodel.cpp +++ b/src/library/librarydirectorymodel.cpp @@ -26,7 +26,7 @@ LibraryDirectoryModel::LibraryDirectoryModel(LibraryBackend* backend, QObject* parent) : QStandardItemModel(parent), - dir_icon_(IconLoader::Load("document-open-folder")), + dir_icon_(IconLoader::Load("document-open-folder", IconLoader::Base)), backend_(backend) { connect(backend_, SIGNAL(DirectoryDiscovered(Directory, SubdirectoryList)), SLOT(DirectoryDiscovered(Directory))); diff --git a/src/library/libraryfilterwidget.cpp b/src/library/libraryfilterwidget.cpp index 9060c58f6..b552f3cb6 100644 --- a/src/library/libraryfilterwidget.cpp +++ b/src/library/libraryfilterwidget.cpp @@ -55,7 +55,7 @@ LibraryFilterWidget::LibraryFilterWidget(QWidget* parent) filter_delay_->setSingleShot(true); // Icons - ui_->options->setIcon(IconLoader::Load("configure")); + ui_->options->setIcon(IconLoader::Load("configure", IconLoader::Base)); // Filter by age QActionGroup* filter_age_group = new QActionGroup(this); diff --git a/src/library/librarymodel.cpp b/src/library/librarymodel.cpp index d26081dde..c4666fdfa 100644 --- a/src/library/librarymodel.cpp +++ b/src/library/librarymodel.cpp @@ -84,10 +84,10 @@ LibraryModel::LibraryModel(LibraryBackend* backend, Application* app, show_smart_playlists_(false), show_various_artists_(true), total_song_count_(0), - artist_icon_(":/icons/22x22/x-clementine-artist.png"), - album_icon_(":/icons/22x22/x-clementine-album.png"), - playlists_dir_icon_(IconLoader::Load("folder-sound")), - playlist_icon_(":/icons/22x22/x-clementine-albums.png"), + artist_icon_(IconLoader::Load("x-clementine-artist", IconLoader::Base)), + album_icon_(IconLoader::Load("x-clementine-album", IconLoader::Base)), + playlists_dir_icon_(IconLoader::Load("folder-sound", IconLoader::Base)), + playlist_icon_(IconLoader::Load("x-clementine-albums", IconLoader::Base)), icon_cache_(new QNetworkDiskCache(this)), init_task_id_(-1), use_pretty_covers_(false), diff --git a/src/library/librarysettingspage.cpp b/src/library/librarysettingspage.cpp index bafc00c78..afb73df41 100644 --- a/src/library/librarysettingspage.cpp +++ b/src/library/librarysettingspage.cpp @@ -45,8 +45,8 @@ LibrarySettingsPage::LibrarySettingsPage(SettingsDialog* dialog) ui_->list->setItemDelegate(new NativeSeparatorsDelegate(this)); // Icons - setWindowIcon(IconLoader::Load("folder-sound")); - ui_->add->setIcon(IconLoader::Load("document-open-folder")); + setWindowIcon(IconLoader::Load("folder-sound", IconLoader::Base)); + ui_->add->setIcon(IconLoader::Load("document-open-folder", IconLoader::Base)); connect(ui_->add, SIGNAL(clicked()), SLOT(Add())); connect(ui_->remove, SIGNAL(clicked()), SLOT(Remove())); diff --git a/src/library/libraryview.cpp b/src/library/libraryview.cpp index ce7c200fa..78c1c4341 100644 --- a/src/library/libraryview.cpp +++ b/src/library/libraryview.cpp @@ -368,52 +368,53 @@ void LibraryView::contextMenuEvent(QContextMenuEvent* e) { if (!context_menu_) { context_menu_ = new QMenu(this); add_to_playlist_ = context_menu_->addAction( - IconLoader::Load("media-playback-start"), + IconLoader::Load("media-playback-start", IconLoader::Base), tr("Append to current playlist"), this, SLOT(AddToPlaylist())); - load_ = context_menu_->addAction(IconLoader::Load("media-playback-start"), - tr("Replace current playlist"), this, - SLOT(Load())); + load_ = context_menu_->addAction( + IconLoader::Load("media-playback-start", IconLoader::Base), + tr("Replace current playlist"), this, SLOT(Load())); open_in_new_playlist_ = context_menu_->addAction( - IconLoader::Load("document-new"), tr("Open in new playlist"), this, - SLOT(OpenInNewPlaylist())); + IconLoader::Load("document-new", IconLoader::Base), + tr("Open in new playlist"), this, SLOT(OpenInNewPlaylist())); context_menu_->addSeparator(); add_to_playlist_enqueue_ = - context_menu_->addAction(IconLoader::Load("go-next"), tr("Queue track"), - this, SLOT(AddToPlaylistEnqueue())); + context_menu_->addAction(IconLoader::Load("go-next", IconLoader::Base), + tr("Queue track"), this, + SLOT(AddToPlaylistEnqueue())); context_menu_->addSeparator(); new_smart_playlist_ = context_menu_->addAction( - IconLoader::Load("document-new"), tr("New smart playlist..."), this, - SLOT(NewSmartPlaylist())); + IconLoader::Load("document-new", IconLoader::Base), + tr("New smart playlist..."), this, SLOT(NewSmartPlaylist())); edit_smart_playlist_ = context_menu_->addAction( - IconLoader::Load("edit-rename"), tr("Edit smart playlist..."), this, - SLOT(EditSmartPlaylist())); + IconLoader::Load("edit-rename", IconLoader::Base), + tr("Edit smart playlist..."), this, SLOT(EditSmartPlaylist())); delete_smart_playlist_ = context_menu_->addAction( - IconLoader::Load("edit-delete"), tr("Delete smart playlist"), this, - SLOT(DeleteSmartPlaylist())); + IconLoader::Load("edit-delete", IconLoader::Base), + tr("Delete smart playlist"), this, SLOT(DeleteSmartPlaylist())); context_menu_->addSeparator(); - organise_ = context_menu_->addAction(IconLoader::Load("edit-copy"), + organise_ = context_menu_->addAction(IconLoader::Load("edit-copy", IconLoader::Base), tr("Organise files..."), this, SLOT(Organise())); copy_to_device_ = context_menu_->addAction( - IconLoader::Load("multimedia-player-ipod-mini-blue"), + IconLoader::Load("multimedia-player-ipod-mini-blue", IconLoader::Base), tr("Copy to device..."), this, SLOT(CopyToDevice())); - delete_ = context_menu_->addAction(IconLoader::Load("edit-delete"), + delete_ = context_menu_->addAction(IconLoader::Load("edit-delete", IconLoader::Base), tr("Delete from disk..."), this, SLOT(Delete())); context_menu_->addSeparator(); - edit_track_ = context_menu_->addAction(IconLoader::Load("edit-rename"), + edit_track_ = context_menu_->addAction(IconLoader::Load("edit-rename", IconLoader::Base), tr("Edit track information..."), this, SLOT(EditTracks())); - edit_tracks_ = context_menu_->addAction(IconLoader::Load("edit-rename"), + edit_tracks_ = context_menu_->addAction(IconLoader::Load("edit-rename", IconLoader::Base), tr("Edit tracks information..."), this, SLOT(EditTracks())); show_in_browser_ = context_menu_->addAction( - IconLoader::Load("document-open-folder"), tr("Show in file browser..."), - this, SLOT(ShowInBrowser())); + IconLoader::Load("document-open-folder", IconLoader::Base), + tr("Show in file browser..."), this, SLOT(ShowInBrowser())); context_menu_->addSeparator(); show_in_various_ = context_menu_->addAction(tr("Show in various artists"), diff --git a/src/playlist/playlistcontainer.cpp b/src/playlist/playlistcontainer.cpp index 2c02be255..d0145f20d 100644 --- a/src/playlist/playlistcontainer.cpp +++ b/src/playlist/playlistcontainer.cpp @@ -212,9 +212,9 @@ void PlaylistContainer::SetViewModel(Playlist* playlist) { delete redo_; undo_ = playlist->undo_stack()->createUndoAction(this); redo_ = playlist->undo_stack()->createRedoAction(this); - undo_->setIcon(IconLoader::Load("edit-undo")); + undo_->setIcon(IconLoader::Load("edit-undo", IconLoader::Base)); undo_->setShortcut(QKeySequence::Undo); - redo_->setIcon(IconLoader::Load("edit-redo")); + redo_->setIcon(IconLoader::Load("edit-redo", IconLoader::Base)); redo_->setShortcut(QKeySequence::Redo); ui_->undo->setDefaultAction(undo_); diff --git a/src/playlist/playlistdelegates.cpp b/src/playlist/playlistdelegates.cpp index 76b15544c..17114efdd 100644 --- a/src/playlist/playlistdelegates.cpp +++ b/src/playlist/playlistdelegates.cpp @@ -468,15 +468,15 @@ QPixmap SongSourceDelegate::LookupPixmap(const QUrl& url, icon = handler->icon(); } else { if (url.scheme() == "spotify") { - icon = QIcon(":icons/22x22/spotify.png"); + icon = IconLoader::Load("spotify", IconLoader::Provider); } else if (url.scheme() == "file") { - icon = IconLoader::Load("folder-sound"); + icon = IconLoader::Load("folder-sound", IconLoader::Base); } else if (url.host() == "api.jamendo.com") { - icon = QIcon(":/providers/jamendo.png"); + icon = IconLoader::Load("jamendo", IconLoader::Provider); } else if (url.host() == "api.soundcloud.com") { - icon = QIcon(":/providers/soundcloud.png"); + icon = IconLoader::Load("soundcloud", IconLoader::Provider); } else if (url.scheme() == "cdda") { - icon = IconLoader::Load("media-optical"); + icon = IconLoader::Load("media-optical", IconLoader::Base); } } pixmap = icon.pixmap(size.height()); diff --git a/src/playlist/playlistlistcontainer.cpp b/src/playlist/playlistlistcontainer.cpp index 659ad9887..fe5ff5010 100644 --- a/src/playlist/playlistlistcontainer.cpp +++ b/src/playlist/playlistlistcontainer.cpp @@ -103,12 +103,12 @@ void PlaylistListContainer::showEvent(QShowEvent* e) { } loaded_icons_ = true; - action_new_folder_->setIcon(IconLoader::Load("folder-new")); - action_remove_->setIcon(IconLoader::Load("edit-delete")); - action_save_playlist_->setIcon(IconLoader::Load("document-save")); + action_new_folder_->setIcon(IconLoader::Load("folder-new", IconLoader::Base)); + action_remove_->setIcon(IconLoader::Load("edit-delete", IconLoader::Base)); + action_save_playlist_->setIcon(IconLoader::Load("document-save", IconLoader::Base)); - model_->SetIcons(IconLoader::Load("view-media-playlist"), - IconLoader::Load("folder")); + model_->SetIcons(IconLoader::Load("view-media-playlist", IconLoader::Base), + IconLoader::Load("folder", IconLoader::Base)); // Apply these icons to items that have already been created. RecursivelySetIcons(model_->invisibleRootItem()); diff --git a/src/playlist/playlistsequence.cpp b/src/playlist/playlistsequence.cpp index abedde1f5..ef21eefe0 100644 --- a/src/playlist/playlistsequence.cpp +++ b/src/playlist/playlistsequence.cpp @@ -41,9 +41,9 @@ PlaylistSequence::PlaylistSequence(QWidget* parent, SettingsProvider* settings) // Icons ui_->repeat->setIcon( - AddDesaturatedIcon(IconLoader::Load("media-playlist-repeat"))); + AddDesaturatedIcon(IconLoader::Load("media-playlist-repeat", IconLoader::Base))); ui_->shuffle->setIcon( - AddDesaturatedIcon(IconLoader::Load("media-playlist-shuffle"))); + AddDesaturatedIcon(IconLoader::Load("media-playlist-shuffle", IconLoader::Base))); settings_->set_group(kSettingsGroup); diff --git a/src/playlist/playlisttabbar.cpp b/src/playlist/playlisttabbar.cpp index 9bc70a593..ba7a674eb 100644 --- a/src/playlist/playlisttabbar.cpp +++ b/src/playlist/playlisttabbar.cpp @@ -51,11 +51,11 @@ PlaylistTabBar::PlaylistTabBar(QWidget* parent) setUsesScrollButtons(true); setTabsClosable(true); - close_ = menu_->addAction(IconLoader::Load("list-remove"), + close_ = menu_->addAction(IconLoader::Load("list-remove", IconLoader::Base), tr("Close playlist"), this, SLOT(Close())); - rename_ = menu_->addAction(IconLoader::Load("edit-rename"), + rename_ = menu_->addAction(IconLoader::Load("edit-rename", IconLoader::Base), tr("Rename playlist..."), this, SLOT(Rename())); - save_ = menu_->addAction(IconLoader::Load("document-save"), + save_ = menu_->addAction(IconLoader::Load("document-save", IconLoader::Base), tr("Save playlist..."), this, SLOT(Save())); menu_->addSeparator(); diff --git a/src/playlist/queuemanager.cpp b/src/playlist/queuemanager.cpp index 7462a2ec6..55520d64f 100644 --- a/src/playlist/queuemanager.cpp +++ b/src/playlist/queuemanager.cpp @@ -35,10 +35,10 @@ QueueManager::QueueManager(QWidget* parent) ui_->list->setItemDelegate(new QueuedItemDelegate(this, 0)); // Set icons on buttons - ui_->move_down->setIcon(IconLoader::Load("go-down")); - ui_->move_up->setIcon(IconLoader::Load("go-up")); - ui_->remove->setIcon(IconLoader::Load("edit-delete")); - ui_->clear->setIcon(IconLoader::Load("edit-clear-list")); + ui_->move_down->setIcon(IconLoader::Load("go-down", IconLoader::Base)); + ui_->move_up->setIcon(IconLoader::Load("go-up", IconLoader::Base)); + ui_->remove->setIcon(IconLoader::Load("edit-delete", IconLoader::Base)); + ui_->clear->setIcon(IconLoader::Load("edit-clear-list", IconLoader::Base)); // Set a standard shortcut ui_->remove->setShortcut(QKeySequence::Delete); diff --git a/src/ripper/ripcddialog.cpp b/src/ripper/ripcddialog.cpp index 66e339a4a..1446d2637 100644 --- a/src/ripper/ripcddialog.cpp +++ b/src/ripper/ripcddialog.cpp @@ -195,7 +195,7 @@ void RipCDDialog::AddDestination() { // Adds a directory to the 'destination' combo box. void RipCDDialog::AddDestinationDirectory(QString dir) { - QIcon icon = IconLoader::Load("folder"); + QIcon icon = IconLoader::Load("folder", IconLoader::Base); QVariant data = QVariant::fromValue(dir); // Do not insert duplicates. int duplicate_index = ui_->destination->findData(data); diff --git a/src/smartplaylists/searchtermwidget.cpp b/src/smartplaylists/searchtermwidget.cpp index 1835b3882..80bc4aa2f 100644 --- a/src/smartplaylists/searchtermwidget.cpp +++ b/src/smartplaylists/searchtermwidget.cpp @@ -115,7 +115,7 @@ SearchTermWidget::SearchTermWidget(LibraryBackend* library, QWidget* parent) } // Icons on the buttons - ui_->remove->setIcon(IconLoader::Load("list-remove")); + ui_->remove->setIcon(IconLoader::Load("list-remove", IconLoader::Base)); // Set stylesheet QFile stylesheet_file(":/smartplaylistsearchterm.css"); @@ -354,7 +354,7 @@ SearchTermWidget::Overlay::Overlay(SearchTermWidget* parent) parent_(parent), opacity_(0.0), text_(tr("Add search term")), - icon_(IconLoader::Load("list-add").pixmap(kIconSize)) { + icon_(IconLoader::Load("list-add", IconLoader::Base).pixmap(kIconSize)) { raise(); setFocusPolicy(Qt::TabFocus); } diff --git a/src/songinfo/echonestbiographies.cpp b/src/songinfo/echonestbiographies.cpp index 1f060529a..cd345e48e 100644 --- a/src/songinfo/echonestbiographies.cpp +++ b/src/songinfo/echonestbiographies.cpp @@ -23,6 +23,7 @@ #include "songinfotextview.h" #include "core/logging.h" +#include "ui/iconloader.h" struct EchoNestBiographies::Request { Request(int id) : id_(id), artist_(new Echonest::Artist) {} @@ -36,14 +37,14 @@ EchoNestBiographies::EchoNestBiographies() { site_relevance_["lastfm"] = 60; site_relevance_["amazon"] = 30; - site_icons_["amazon"] = QIcon(":/providers/amazon.png"); - site_icons_["aol"] = QIcon(":/providers/aol.png"); - site_icons_["cdbaby"] = QIcon(":/providers/cdbaby.png"); - site_icons_["lastfm"] = QIcon(":/last.fm/as.png"); - site_icons_["mog"] = QIcon(":/providers/mog.png"); - site_icons_["mtvmusic"] = QIcon(":/providers/mtvmusic.png"); - site_icons_["myspace"] = QIcon(":/providers/myspace.png"); - site_icons_["wikipedia"] = QIcon(":/providers/wikipedia.png"); + site_icons_["amazon"] = IconLoader::Load("amazon", IconLoader::Provider); + site_icons_["aol"] = IconLoader::Load("aol", IconLoader::Provider); + site_icons_["cdbaby"] = IconLoader::Load("cdbaby", IconLoader::Provider); + site_icons_["lastfm"] = IconLoader::Load("as", IconLoader::Lastfm); + site_icons_["mog"] = IconLoader::Load("mog", IconLoader::Provider); + site_icons_["mtvmusic"] = IconLoader::Load("mtvmusic", IconLoader::Provider); + site_icons_["myspace"] = IconLoader::Load("myspace", IconLoader::Provider); + site_icons_["wikipedia"] = IconLoader::Load("wikipedia", IconLoader::Provider); } void EchoNestBiographies::FetchInfo(int id, const Song& metadata) { diff --git a/src/songinfo/echonestsimilarartists.cpp b/src/songinfo/echonestsimilarartists.cpp index b481d4c32..af62ff2c1 100644 --- a/src/songinfo/echonestsimilarartists.cpp +++ b/src/songinfo/echonestsimilarartists.cpp @@ -57,12 +57,12 @@ void EchoNestSimilarArtists::RequestFinished() { data.id_ = "echonest/similarartists"; data.title_ = tr("Similar artists"); data.type_ = CollapsibleInfoPane::Data::Type_Similar; - data.icon_ = QIcon(":/providers/echonest.png"); + data.icon_ = IconLoader::Load("echonest", IconLoader::Provider); TagWidget* widget = new TagWidget(TagWidget::Type_Artists); data.contents_ = widget; - widget->SetIcon(QIcon(":/icons/22x22/x-clementine-artist.png")); + widget->SetIcon(IconLoader::Load("x-clementine-artist", IconLoader::Base)); for (const Echonest::Artist& artist : artists) { widget->AddTag(artist.name()); diff --git a/src/songinfo/echonesttags.cpp b/src/songinfo/echonesttags.cpp index 7911cecf4..232ec5191 100644 --- a/src/songinfo/echonesttags.cpp +++ b/src/songinfo/echonesttags.cpp @@ -23,6 +23,7 @@ #include "tagwidget.h" #include "core/logging.h" +#include "ui/iconloader.h" struct EchoNestTags::Request { Request(int id) : id_(id), artist_(new Echonest::Artist) {} @@ -60,7 +61,7 @@ void EchoNestTags::RequestFinished() { data.id_ = "echonest/artisttags"; data.title_ = tr("Artist tags"); data.type_ = CollapsibleInfoPane::Data::Type_Tags; - data.icon_ = QIcon(":/last.fm/icon_tag.png"); + data.icon_ = IconLoader::Load("icon_tag", IconLoader::Lastfm); TagWidget* widget = new TagWidget(TagWidget::Type_Tags); data.contents_ = widget; diff --git a/src/songinfo/lastfmtrackinfoprovider.cpp b/src/songinfo/lastfmtrackinfoprovider.cpp index b00e98910..d3460c6e4 100644 --- a/src/songinfo/lastfmtrackinfoprovider.cpp +++ b/src/songinfo/lastfmtrackinfoprovider.cpp @@ -75,23 +75,23 @@ void LastfmTrackInfoProvider::GetPlayCounts(int id, const lastfm::XmlQuery& q) { data.id_ = "lastfm/playcounts"; data.title_ = tr("Last.fm play counts"); data.type_ = CollapsibleInfoPane::Data::Type_PlayCounts; - data.icon_ = QIcon(":/last.fm/as.png"); + data.icon_ = IconLoader::Load("as", IconLoader::Lastfm); SongPlayStats* widget = new SongPlayStats; data.contents_ = widget; if (myplaycount != -1) { if (love) - widget->AddItem(QIcon(":/last.fm/love.png"), tr("You love this track")); - widget->AddItem(QIcon(":/last.fm/icon_user.png"), + widget->AddItem(IconLoader::Load("love", IconLoader::Lastfm), tr("You love this track")); + widget->AddItem(IconLoader::Load("icon_user", IconLoader::Lastfm), tr("Your scrobbles: %1").arg(myplaycount)); } if (playcount) - widget->AddItem(IconLoader::Load("media-playback-start"), + widget->AddItem(IconLoader::Load("media-playback-start", IconLoader::Base), tr("%L1 total plays").arg(playcount)); if (listeners) - widget->AddItem(QIcon(":/last.fm/my_neighbours.png"), + widget->AddItem(IconLoader::Load("my_neighbours", IconLoader::Lastfm), tr("%L1 other listeners").arg(listeners)); emit InfoReady(id, data); @@ -109,7 +109,7 @@ void LastfmTrackInfoProvider::GetWiki(int id, const lastfm::XmlQuery& q) { data.id_ = "lastfm/songwiki"; data.title_ = tr("Last.fm wiki"); data.type_ = CollapsibleInfoPane::Data::Type_Biography; - data.icon_ = QIcon(":/last.fm/as.png"); + data.icon_ = IconLoader::Load("as", IconLoader::Lastfm); SongInfoTextView* widget = new SongInfoTextView; data.contents_ = widget; @@ -129,7 +129,7 @@ void LastfmTrackInfoProvider::GetTags(int id, const lastfm::XmlQuery& q) { data.id_ = "lastfm/songtags"; data.title_ = tr("Last.fm tags"); data.type_ = CollapsibleInfoPane::Data::Type_Biography; - data.icon_ = QIcon(":/last.fm/icon_tag.png"); + data.icon_ = IconLoader::Load("icon_tag", IconLoader::Lastfm); TagWidget* widget = new TagWidget(TagWidget::Type_Tags); data.contents_ = widget; diff --git a/src/songinfo/songinfosettingspage.cpp b/src/songinfo/songinfosettingspage.cpp index deabaaa69..24edc2b08 100644 --- a/src/songinfo/songinfosettingspage.cpp +++ b/src/songinfo/songinfosettingspage.cpp @@ -30,7 +30,7 @@ SongInfoSettingsPage::SongInfoSettingsPage(SettingsDialog* dialog) : SettingsPage(dialog), ui_(new Ui_SongInfoSettingsPage) { ui_->setupUi(this); - setWindowIcon(IconLoader::Load("view-media-lyrics")); + setWindowIcon(IconLoader::Load("view-media-lyrics", IconLoader::Base)); connect(ui_->up, SIGNAL(clicked()), SLOT(MoveUp())); connect(ui_->down, SIGNAL(clicked()), SLOT(MoveDown())); diff --git a/src/songinfo/songkickconcerts.cpp b/src/songinfo/songkickconcerts.cpp index 1b36e420e..c3ee4eff6 100644 --- a/src/songinfo/songkickconcerts.cpp +++ b/src/songinfo/songkickconcerts.cpp @@ -28,6 +28,7 @@ #include "core/closure.h" #include "core/logging.h" #include "songkickconcertwidget.h" +#include "ui/iconloader.h" const char* SongkickConcerts::kSongkickArtistBucket = "id:songkick"; const char* SongkickConcerts::kSongkickArtistCalendarUrl = @@ -170,7 +171,7 @@ void SongkickConcerts::CalendarRequestFinished(QNetworkReply* reply, int id) { data.type_ = CollapsibleInfoPane::Data::Type_Biography; data.id_ = QString("songkick/%1").arg(id); data.title_ = tr("Upcoming Concerts"); - data.icon_ = QIcon(":providers/songkick.png"); + data.icon_ = IconLoader::Load("songkick", IconLoader::Provider); data.contents_ = container; emit InfoReady(id, data); diff --git a/src/transcoder/transcodedialog.cpp b/src/transcoder/transcodedialog.cpp index b5b46987a..9663e5192 100644 --- a/src/transcoder/transcodedialog.cpp +++ b/src/transcoder/transcodedialog.cpp @@ -311,7 +311,7 @@ void TranscodeDialog::AddDestination() { ui_->destination->removeItem(1); // Remove the oldest folder item. } - QIcon icon = IconLoader::Load("folder"); + QIcon icon = IconLoader::Load("folder", IconLoader::Base); QVariant data = QVariant::fromValue(dir); // Do not insert duplicates. int duplicate_index = ui_->destination->findData(data); diff --git a/src/transcoder/transcodersettingspage.cpp b/src/transcoder/transcodersettingspage.cpp index 5460e60f8..0183fe18c 100644 --- a/src/transcoder/transcodersettingspage.cpp +++ b/src/transcoder/transcodersettingspage.cpp @@ -22,7 +22,7 @@ TranscoderSettingsPage::TranscoderSettingsPage(SettingsDialog* dialog) : SettingsPage(dialog), ui_(new Ui_TranscoderSettingsPage) { ui_->setupUi(this); - setWindowIcon(IconLoader::Load("tools-wizard")); + setWindowIcon(IconLoader::Load("tools-wizard", IconLoader::Base)); } TranscoderSettingsPage::~TranscoderSettingsPage() { delete ui_; } diff --git a/src/ui/albumcoverchoicecontroller.cpp b/src/ui/albumcoverchoicecontroller.cpp index c1a229311..e74863627 100644 --- a/src/ui/albumcoverchoicecontroller.cpp +++ b/src/ui/albumcoverchoicecontroller.cpp @@ -56,21 +56,23 @@ AlbumCoverChoiceController::AlbumCoverChoiceController(QWidget* parent) cover_fetcher_(nullptr), save_file_dialog_(nullptr), cover_from_url_dialog_(nullptr) { - cover_from_file_ = new QAction(IconLoader::Load("document-open"), + cover_from_file_ = new QAction(IconLoader::Load("document-open", IconLoader::Base), tr("Load cover from disk..."), this); - cover_to_file_ = new QAction(IconLoader::Load("document-save"), + cover_to_file_ = new QAction(IconLoader::Load("document-save", IconLoader::Base), tr("Save cover to disk..."), this); - cover_from_url_ = new QAction(IconLoader::Load("download"), + cover_from_url_ = new QAction(IconLoader::Load("download", IconLoader::Base), tr("Load cover from URL..."), this); - search_for_cover_ = new QAction(IconLoader::Load("find"), + search_for_cover_ = new QAction(IconLoader::Load("find", IconLoader::Base), tr("Search for album covers..."), this); unset_cover_ = - new QAction(IconLoader::Load("list-remove"), tr("Unset cover"), this); + new QAction(IconLoader::Load("list-remove", IconLoader::Base), + tr("Unset cover"), this); show_cover_ = - new QAction(IconLoader::Load("zoom-in"), tr("Show fullsize..."), this); + new QAction(IconLoader::Load("zoom-in", IconLoader::Base), + tr("Show fullsize..."), this); search_cover_auto_ = - new QAction(IconLoader::Load("find"), tr("Search automatically"), this); + new QAction(IconLoader::Load("find", IconLoader::Base), tr("Search automatically"), this); search_cover_auto_->setCheckable(true); search_cover_auto_->setChecked(false); diff --git a/src/ui/albumcovermanager.cpp b/src/ui/albumcovermanager.cpp index 575c53fd8..9f6e0df34 100644 --- a/src/ui/albumcovermanager.cpp +++ b/src/ui/albumcovermanager.cpp @@ -66,8 +66,8 @@ AlbumCoverManager::AlbumCoverManager(Application* app, cover_searcher_(nullptr), cover_export_(nullptr), cover_exporter_(new AlbumCoverExporter(this)), - artist_icon_(IconLoader::Load("x-clementine-artist")), - all_artists_icon_(IconLoader::Load("x-clementine-album")), + artist_icon_(IconLoader::Load("x-clementine-artist", IconLoader::Base)), + all_artists_icon_(IconLoader::Load("x-clementine-album", IconLoader::Base)), context_menu_(new QMenu(this)), progress_bar_(new QProgressBar(this)), abort_progress_(new QPushButton(this)), @@ -77,13 +77,13 @@ AlbumCoverManager::AlbumCoverManager(Application* app, ui_->albums->set_cover_manager(this); // Icons - ui_->action_fetch->setIcon(IconLoader::Load("download")); - ui_->export_covers->setIcon(IconLoader::Load("document-save")); - ui_->view->setIcon(IconLoader::Load("view-choose")); - ui_->fetch->setIcon(IconLoader::Load("download")); + ui_->action_fetch->setIcon(IconLoader::Load("download", IconLoader::Base)); + ui_->export_covers->setIcon(IconLoader::Load("document-save", IconLoader::Base)); + ui_->view->setIcon(IconLoader::Load("view-choose", IconLoader::Base)); + ui_->fetch->setIcon(IconLoader::Load("download", IconLoader::Base)); ui_->action_add_to_playlist->setIcon( - IconLoader::Load("media-playback-start")); - ui_->action_load->setIcon(IconLoader::Load("media-playback-start")); + IconLoader::Load("media-playback-start", IconLoader::Base)); + ui_->action_load->setIcon(IconLoader::Load("media-playback-start", IconLoader::Base)); album_cover_choice_controller_->SetApplication(app_); diff --git a/src/ui/appearancesettingspage.cpp b/src/ui/appearancesettingspage.cpp index 77c79a380..111513c46 100644 --- a/src/ui/appearancesettingspage.cpp +++ b/src/ui/appearancesettingspage.cpp @@ -48,7 +48,7 @@ AppearanceSettingsPage::AppearanceSettingsPage(SettingsDialog* dialog) playlist_view_background_image_type_(PlaylistView::Default), initialised_moodbar_previews_(false) { ui_->setupUi(this); - setWindowIcon(IconLoader::Load("view-media-visualization")); + setWindowIcon(IconLoader::Load("view-media-visualization", IconLoader::Base)); connect(ui_->blur_slider, SIGNAL(valueChanged(int)), SLOT(BlurLevelChanged(int))); diff --git a/src/ui/backgroundstreamssettingspage.cpp b/src/ui/backgroundstreamssettingspage.cpp index 5d7d83cb9..1bb5b6b0f 100644 --- a/src/ui/backgroundstreamssettingspage.cpp +++ b/src/ui/backgroundstreamssettingspage.cpp @@ -28,7 +28,7 @@ BackgroundStreamsSettingsPage::BackgroundStreamsSettingsPage( SettingsDialog* dialog) : SettingsPage(dialog), ui_(new Ui_BackgroundStreamsSettingsPage) { ui_->setupUi(this); - setWindowIcon(QIcon(":/icons/32x32/weather-showers-scattered.png")); + setWindowIcon(IconLoader::Load("weather-showers-scattered", IconLoader::Base)); for (const QString& name : dialog->background_streams()->streams()) { AddStream(name); diff --git a/src/ui/edittagdialog.cpp b/src/ui/edittagdialog.cpp index 2f5a88aa5..20ac4ab9d 100644 --- a/src/ui/edittagdialog.cpp +++ b/src/ui/edittagdialog.cpp @@ -159,8 +159,11 @@ EditTagDialog::EditTagDialog(Application* app, QWidget* parent) // Add the next/previous buttons previous_button_ = - new QPushButton(IconLoader::Load("go-previous"), tr("Previous"), this); - next_button_ = new QPushButton(IconLoader::Load("go-next"), tr("Next"), this); + new QPushButton(IconLoader::Load("go-previous", IconLoader::Base), + tr("Previous"), this); + next_button_ = + new QPushButton(IconLoader::Load("go-next", IconLoader::Base), + tr("Next"), this); ui_->button_box->addButton(previous_button_, QDialogButtonBox::ResetRole); ui_->button_box->addButton(next_button_, QDialogButtonBox::ResetRole); diff --git a/src/ui/equalizer.cpp b/src/ui/equalizer.cpp index 73f1099b3..b406c56f6 100644 --- a/src/ui/equalizer.cpp +++ b/src/ui/equalizer.cpp @@ -38,8 +38,8 @@ Equalizer::Equalizer(QWidget* parent) ui_->setupUi(this); // Icons - ui_->preset_del->setIcon(IconLoader::Load("list-remove")); - ui_->preset_save->setIcon(IconLoader::Load("document-save")); + ui_->preset_del->setIcon(IconLoader::Load("list-remove", IconLoader::Base)); + ui_->preset_save->setIcon(IconLoader::Load("document-save", IconLoader::Base)); preamp_ = AddSlider(tr("Pre-amp")); diff --git a/src/ui/globalshortcutssettingspage.cpp b/src/ui/globalshortcutssettingspage.cpp index 37e23f94a..d4e4c1d26 100644 --- a/src/ui/globalshortcutssettingspage.cpp +++ b/src/ui/globalshortcutssettingspage.cpp @@ -40,7 +40,7 @@ GlobalShortcutsSettingsPage::GlobalShortcutsSettingsPage(SettingsDialog* dialog) ui_->setupUi(this); ui_->shortcut_options->setEnabled(false); ui_->list->header()->setResizeMode(QHeaderView::ResizeToContents); - setWindowIcon(IconLoader::Load("input-keyboard")); + setWindowIcon(IconLoader::Load("input-keyboard", IconLoader::Base)); settings_.beginGroup(GlobalShortcuts::kSettingsGroup); diff --git a/src/ui/iconloader.cpp b/src/ui/iconloader.cpp index 7f0422a88..f5c6781a1 100644 --- a/src/ui/iconloader.cpp +++ b/src/ui/iconloader.cpp @@ -17,30 +17,81 @@ #include "iconloader.h" #include "core/logging.h" +#include "core/utilities.h" -#include #include +#include QList IconLoader::sizes_; +QString IconLoader::custom_icon_path_; +QList IconLoader::icon_sub_path_; void IconLoader::Init() { sizes_.clear(); sizes_ << 22 << 32 << 48; + custom_icon_path_ = Utilities::GetConfigPath(Utilities::Path_Icons); + icon_sub_path_ = {"/icons", "/providers", "/last.fm"}; } -QIcon IconLoader::Load(const QString& name) { - QIcon ret; +QIcon IconLoader::Load(const QString& name, const IconType& icontype) { - if (name.isEmpty()) return ret; + QIcon ret; + // If the icon name is empty + if (name.isEmpty()) { + qLog(Warning) << "Icon name is null"; + return ret; + } + + // Set the icon load location based on IConType + switch (icontype) { + case Base: case Provider: + break; + + case Lastfm: { + // lastfm icons location + const QString custom_lastfm_icon_location = custom_icon_path_ + "/last.fm"; + if (QDir(custom_lastfm_icon_location).exists()) { + // Try to load icons from the custom icon location initially + const QString locate_file(custom_lastfm_icon_location + "/" + name + ".png"); + + if (QFile::exists(locate_file)) ret.addFile(locate_file); + if (!ret.isNull()) return ret; + } + + // Otherwise use our fallback theme + const QString lastfm_path_file(":/last.fm/" + name + ".png"); + + if (QFile::exists(lastfm_path_file)) ret.addFile(lastfm_path_file); + if (ret.isNull()) qLog(Warning) << "Couldn't load icon" << name; + return ret; + } + + default: + // Should never be reached + qLog(Warning) << "Couldn't recognize IconType" << name; + return ret; + } + + const QString custom_icon_location = custom_icon_path_ + icon_sub_path_.at(icontype); + if (QDir(custom_icon_location).exists()) { + // Try to load icons from the custom icon location initially + const QString locate(custom_icon_location + "/%1x%2/%3.png"); + for (int size : sizes_) { + QString filename_custom(locate.arg(size).arg(size).arg(name)); + + if (QFile::exists(filename_custom)) ret.addFile(filename_custom, QSize(size, size)); + } + if (!ret.isNull()) return ret; + } #if QT_VERSION >= 0x040600 - // Try to load it from the theme initially + // Then try to load it from the system theme ret = QIcon::fromTheme(name); if (!ret.isNull()) return ret; #endif // Otherwise use our fallback theme - const QString path(":/icons/%1x%2/%3.png"); + const QString path(":" + icon_sub_path_.at(icontype) + "/%1x%2/%3.png"); for (int size : sizes_) { QString filename(path.arg(size).arg(size).arg(name)); @@ -50,3 +101,4 @@ QIcon IconLoader::Load(const QString& name) { if (ret.isNull()) qLog(Warning) << "Couldn't load icon" << name; return ret; } + diff --git a/src/ui/iconloader.h b/src/ui/iconloader.h index 01b499a59..a854f0524 100644 --- a/src/ui/iconloader.h +++ b/src/ui/iconloader.h @@ -22,13 +22,21 @@ class IconLoader { public: + enum IconType { + Base = 0, + Provider = 1, + Lastfm = 2 + }; + static void Init(); - static QIcon Load(const QString& name); + static QIcon Load(const QString& name, const IconType& icontype); private: IconLoader() {} static QList sizes_; + static QString custom_icon_path_; + static QList icon_sub_path_; }; #endif // ICONLOADER_H diff --git a/src/ui/mainwindow.cpp b/src/ui/mainwindow.cpp index d4c58ae56..d49184027 100644 --- a/src/ui/mainwindow.cpp +++ b/src/ui/mainwindow.cpp @@ -223,7 +223,7 @@ MainWindow::MainWindow(Application* app, SystemTrayIcon* tray_icon, OSD* osd, // Add global search providers app_->global_search()->AddProvider(new LibrarySearchProvider( app_->library_backend(), tr("Library"), "library", - IconLoader::Load("folder-sound"), true, app_, this)); + IconLoader::Load("folder-sound", IconLoader::Base), true, app_, this)); app_->global_search()->ReloadSettings(); global_search_view_->ReloadSettings(); @@ -232,22 +232,23 @@ MainWindow::MainWindow(Application* app, SystemTrayIcon* tray_icon, OSD* osd, SLOT(AddToPlaylist(QMimeData*))); // Add tabs to the fancy tab widget - ui_->tabs->AddTab(global_search_view_, IconLoader::Load("search"), + ui_->tabs->AddTab(global_search_view_, IconLoader::Load("search", IconLoader::Base), tr("Search", "Global search settings dialog title.")); - ui_->tabs->AddTab(library_view_, IconLoader::Load("folder-sound"), + ui_->tabs->AddTab(library_view_, IconLoader::Load("folder-sound", IconLoader::Base), tr("Library")); - ui_->tabs->AddTab(file_view_, IconLoader::Load("document-open"), tr("Files")); - ui_->tabs->AddTab(playlist_list_, IconLoader::Load("view-media-playlist"), + ui_->tabs->AddTab(file_view_, IconLoader::Load("document-open", IconLoader::Base), + tr("Files")); + ui_->tabs->AddTab(playlist_list_, IconLoader::Load("view-media-playlist", IconLoader::Base), tr("Playlists")); - ui_->tabs->AddTab(internet_view_, IconLoader::Load("applications-internet"), + ui_->tabs->AddTab(internet_view_, IconLoader::Load("applications-internet", IconLoader::Base), tr("Internet")); ui_->tabs->AddTab(device_view_container_, - IconLoader::Load("multimedia-player-ipod-mini-blue"), + IconLoader::Load("multimedia-player-ipod-mini-blue", IconLoader::Base), tr("Devices")); ui_->tabs->AddSpacer(); - ui_->tabs->AddTab(song_info_view_, IconLoader::Load("view-media-lyrics"), + ui_->tabs->AddTab(song_info_view_, IconLoader::Load("view-media-lyrics", IconLoader::Base), tr("Song info")); - ui_->tabs->AddTab(artist_info_view_, IconLoader::Load("x-clementine-artist"), + ui_->tabs->AddTab(artist_info_view_, IconLoader::Load("x-clementine-artist", IconLoader::Base), tr("Artist info")); // Add the now playing widget to the fancy tab widget @@ -292,40 +293,41 @@ MainWindow::MainWindow(Application* app, SystemTrayIcon* tray_icon, OSD* osd, // Icons qLog(Debug) << "Creating UI"; - ui_->action_about->setIcon(IconLoader::Load("help-about")); - ui_->action_about_qt->setIcon( - QIcon(":/trolltech/qmessagebox/images/qtlogo-64.png")); - ui_->action_add_file->setIcon(IconLoader::Load("document-open")); - ui_->action_add_folder->setIcon(IconLoader::Load("document-open-folder")); - ui_->action_add_stream->setIcon(IconLoader::Load("document-open-remote")); - ui_->action_clear_playlist->setIcon(IconLoader::Load("edit-clear-list")); - ui_->action_configure->setIcon(IconLoader::Load("configure")); - ui_->action_cover_manager->setIcon(IconLoader::Load("download")); - ui_->action_edit_track->setIcon(IconLoader::Load("edit-rename")); - ui_->action_equalizer->setIcon(IconLoader::Load("view-media-equalizer")); - ui_->action_jump->setIcon(IconLoader::Load("go-jump")); - ui_->action_next_track->setIcon(IconLoader::Load("media-skip-forward")); - ui_->action_open_media->setIcon(IconLoader::Load("document-open")); - ui_->action_open_cd->setIcon(IconLoader::Load("media-optical")); - ui_->action_play_pause->setIcon(IconLoader::Load("media-playback-start")); - ui_->action_previous_track->setIcon(IconLoader::Load("media-skip-backward")); - ui_->action_quit->setIcon(IconLoader::Load("application-exit")); - ui_->action_remove_from_playlist->setIcon(IconLoader::Load("list-remove")); - ui_->action_repeat_mode->setIcon(IconLoader::Load("media-playlist-repeat")); - ui_->action_rip_audio_cd->setIcon(IconLoader::Load("media-optical")); - ui_->action_shuffle->setIcon(IconLoader::Load("x-clementine-shuffle")); - ui_->action_shuffle_mode->setIcon(IconLoader::Load("media-playlist-shuffle")); - ui_->action_stop->setIcon(IconLoader::Load("media-playback-stop")); + ui_->action_about->setIcon(IconLoader::Load("help-about", IconLoader::Base)); + ui_->action_about_qt->setIcon(IconLoader::Load("qtlogo", IconLoader::Base)); + ui_->action_add_file->setIcon(IconLoader::Load("document-open", IconLoader::Base)); + ui_->action_add_folder->setIcon(IconLoader::Load("document-open-folder", IconLoader::Base)); + ui_->action_add_stream->setIcon(IconLoader::Load("document-open-remote", IconLoader::Base)); + ui_->action_add_podcast->setIcon(IconLoader::Load("podcast", IconLoader::Provider)); + ui_->action_clear_playlist->setIcon(IconLoader::Load("edit-clear-list", IconLoader::Base)); + ui_->action_configure->setIcon(IconLoader::Load("configure", IconLoader::Base)); + ui_->action_cover_manager->setIcon(IconLoader::Load("download", IconLoader::Base)); + ui_->action_edit_track->setIcon(IconLoader::Load("edit-rename", IconLoader::Base)); + ui_->action_equalizer->setIcon(IconLoader::Load("view-media-equalizer", IconLoader::Base)); + ui_->action_jump->setIcon(IconLoader::Load("go-jump", IconLoader::Base)); + ui_->action_next_track->setIcon(IconLoader::Load("media-skip-forward", IconLoader::Base)); + ui_->action_open_media->setIcon(IconLoader::Load("document-open", IconLoader::Base)); + ui_->action_open_cd->setIcon(IconLoader::Load("media-optical", IconLoader::Base)); + ui_->action_play_pause->setIcon(IconLoader::Load("media-playback-start", IconLoader::Base)); + ui_->action_previous_track->setIcon(IconLoader::Load("media-skip-backward", IconLoader::Base)); + ui_->action_mute->setIcon(IconLoader::Load("audio-volume-muted", IconLoader::Base)); + ui_->action_quit->setIcon(IconLoader::Load("application-exit", IconLoader::Base)); + ui_->action_remove_from_playlist->setIcon(IconLoader::Load("list-remove", IconLoader::Base)); + ui_->action_repeat_mode->setIcon(IconLoader::Load("media-playlist-repeat", IconLoader::Base)); + ui_->action_rip_audio_cd->setIcon(IconLoader::Load("media-optical", IconLoader::Base)); + ui_->action_shuffle->setIcon(IconLoader::Load("x-clementine-shuffle", IconLoader::Base)); + ui_->action_shuffle_mode->setIcon(IconLoader::Load("media-playlist-shuffle", IconLoader::Base)); + ui_->action_stop->setIcon(IconLoader::Load("media-playback-stop", IconLoader::Base)); ui_->action_stop_after_this_track->setIcon( - IconLoader::Load("media-playback-stop")); - ui_->action_new_playlist->setIcon(IconLoader::Load("document-new")); - ui_->action_load_playlist->setIcon(IconLoader::Load("document-open")); - ui_->action_save_playlist->setIcon(IconLoader::Load("document-save")); - ui_->action_full_library_scan->setIcon(IconLoader::Load("view-refresh")); - ui_->action_rain->setIcon(IconLoader::Load("weather-showers-scattered")); - ui_->action_hypnotoad->setIcon(IconLoader::Load("hypnotoad")); - ui_->action_kittens->setIcon(IconLoader::Load("kittens")); - ui_->action_enterprise->setIcon(IconLoader::Load("enterprise")); + IconLoader::Load("media-playback-stop", IconLoader::Base)); + ui_->action_new_playlist->setIcon(IconLoader::Load("document-new", IconLoader::Base)); + ui_->action_load_playlist->setIcon(IconLoader::Load("document-open", IconLoader::Base)); + ui_->action_save_playlist->setIcon(IconLoader::Load("document-save", IconLoader::Base)); + ui_->action_full_library_scan->setIcon(IconLoader::Load("view-refresh", IconLoader::Base)); + ui_->action_rain->setIcon(IconLoader::Load("weather-showers-scattered", IconLoader::Base)); + ui_->action_hypnotoad->setIcon(IconLoader::Load("hypnotoad", IconLoader::Base)); + ui_->action_kittens->setIcon(IconLoader::Load("kittens", IconLoader::Base)); + ui_->action_enterprise->setIcon(IconLoader::Load("enterprise", IconLoader::Base)); // File view connections connect(file_view_, SIGNAL(AddToPlaylist(QMimeData*)), @@ -589,7 +591,8 @@ MainWindow::MainWindow(Application* app, SystemTrayIcon* tray_icon, OSD* osd, SLOT(ChangeLibraryQueryMode(QAction*))); QAction* library_config_action = new QAction( - IconLoader::Load("configure"), tr("Configure library..."), this); + IconLoader::Load("configure", IconLoader::Base), + tr("Configure library..."), this); connect(library_config_action, SIGNAL(triggered()), SLOT(ShowLibraryConfig())); library_view_->filter()->SetSettingsGroup(kSettingsGroup); @@ -609,8 +612,8 @@ MainWindow::MainWindow(Application* app, SystemTrayIcon* tray_icon, OSD* osd, playlist_menu_->addAction(tr("Play"), this, SLOT(PlaylistPlay())); playlist_menu_->addAction(ui_->action_stop); playlist_stop_after_ = playlist_menu_->addAction( - IconLoader::Load("media-playback-stop"), tr("Stop after this track"), - this, SLOT(PlaylistStopAfter())); + IconLoader::Load("media-playback-stop", IconLoader::Base), + tr("Stop after this track"), this, SLOT(PlaylistStopAfter())); playlist_queue_ = playlist_menu_->addAction("", this, SLOT(PlaylistQueue())); playlist_queue_->setShortcut(QKeySequence("Ctrl+D")); ui_->playlist->addAction(playlist_queue_); @@ -628,26 +631,29 @@ MainWindow::MainWindow(Application* app, SystemTrayIcon* tray_icon, OSD* osd, playlist_menu_->addAction(ui_->action_add_files_to_transcoder); playlist_menu_->addSeparator(); playlist_copy_to_library_ = playlist_menu_->addAction( - IconLoader::Load("edit-copy"), tr("Copy to library..."), this, - SLOT(PlaylistCopyToLibrary())); + IconLoader::Load("edit-copy", IconLoader::Base), + tr("Copy to library..."), this, SLOT(PlaylistCopyToLibrary())); playlist_move_to_library_ = playlist_menu_->addAction( - IconLoader::Load("go-jump"), tr("Move to library..."), this, - SLOT(PlaylistMoveToLibrary())); - playlist_organise_ = playlist_menu_->addAction(IconLoader::Load("edit-copy"), + IconLoader::Load("go-jump", IconLoader::Base), + tr("Move to library..."), this, SLOT(PlaylistMoveToLibrary())); + playlist_organise_ = playlist_menu_->addAction(IconLoader::Load("edit-copy", + IconLoader::Base), tr("Organise files..."), this, SLOT(PlaylistMoveToLibrary())); playlist_copy_to_device_ = playlist_menu_->addAction( - IconLoader::Load("multimedia-player-ipod-mini-blue"), + IconLoader::Load("multimedia-player-ipod-mini-blue", IconLoader::Base), tr("Copy to device..."), this, SLOT(PlaylistCopyToDevice())); - playlist_delete_ = playlist_menu_->addAction(IconLoader::Load("edit-delete"), + playlist_delete_ = playlist_menu_->addAction(IconLoader::Load("edit-delete", + IconLoader::Base), tr("Delete from disk..."), this, SLOT(PlaylistDelete())); playlist_open_in_browser_ = playlist_menu_->addAction( - IconLoader::Load("document-open-folder"), tr("Show in file browser..."), + IconLoader::Load("document-open-folder", IconLoader::Base), + tr("Show in file browser..."), this, SLOT(PlaylistOpenInBrowser())); playlist_show_in_library_ = playlist_menu_->addAction( - IconLoader::Load("edit-find"), tr("Show in library..."), this, - SLOT(ShowInLibrary())); + IconLoader::Load("edit-find", IconLoader::Base), + tr("Show in library..."), this, SLOT(ShowInLibrary())); playlist_menu_->addSeparator(); playlistitem_actions_separator_ = playlist_menu_->addSeparator(); playlist_menu_->addAction(ui_->action_clear_playlist); @@ -1022,7 +1028,7 @@ void MainWindow::MediaStopped() { ui_->action_stop->setEnabled(false); ui_->action_stop_after_this_track->setEnabled(false); - ui_->action_play_pause->setIcon(IconLoader::Load("media-playback-start")); + ui_->action_play_pause->setIcon(IconLoader::Load("media-playback-start", IconLoader::Base)); ui_->action_play_pause->setText(tr("Play")); ui_->action_play_pause->setEnabled(true); @@ -1040,7 +1046,7 @@ void MainWindow::MediaStopped() { void MainWindow::MediaPaused() { ui_->action_stop->setEnabled(true); ui_->action_stop_after_this_track->setEnabled(true); - ui_->action_play_pause->setIcon(IconLoader::Load("media-playback-start")); + ui_->action_play_pause->setIcon(IconLoader::Load("media-playback-start", IconLoader::Base)); ui_->action_play_pause->setText(tr("Play")); ui_->action_play_pause->setEnabled(true); @@ -1054,7 +1060,7 @@ void MainWindow::MediaPaused() { void MainWindow::MediaPlaying() { ui_->action_stop->setEnabled(true); ui_->action_stop_after_this_track->setEnabled(true); - ui_->action_play_pause->setIcon(IconLoader::Load("media-playback-pause")); + ui_->action_play_pause->setIcon(IconLoader::Load("media-playback-pause", IconLoader::Base)); ui_->action_play_pause->setText(tr("Pause")); bool enable_play_pause = !(app_->player()->GetCurrentItem()->options() & @@ -1154,7 +1160,7 @@ void MainWindow::ScrobbleButtonVisibilityChanged(bool value) { // check if the song was scrobbled if (app_->playlist_manager()->active()->get_lastfm_status() == Playlist::LastFM_Scrobbled) { - ui_->action_toggle_scrobbling->setIcon(QIcon(":/last.fm/as.png")); + ui_->action_toggle_scrobbling->setIcon(IconLoader::Load("as", IconLoader::Lastfm)); } else { #ifdef HAVE_LIBLASTFM SetToggleScrobblingIcon(app_->scrobbler()->IsScrobblingEnabled()); @@ -1547,10 +1553,10 @@ void MainWindow::PlaylistRightClick(const QPoint& global_pos, source_index.row() && app_->player()->GetState() == Engine::Playing) { playlist_play_pause_->setText(tr("Pause")); - playlist_play_pause_->setIcon(IconLoader::Load("media-playback-pause")); + playlist_play_pause_->setIcon(IconLoader::Load("media-playback-pause", IconLoader::Base)); } else { playlist_play_pause_->setText(tr("Play")); - playlist_play_pause_->setIcon(IconLoader::Load("media-playback-start")); + playlist_play_pause_->setIcon(IconLoader::Load("media-playback-start", IconLoader::Base)); } // Are we allowed to pause? @@ -1655,9 +1661,9 @@ void MainWindow::PlaylistRightClick(const QPoint& global_pos, playlist_skip_->setText(tr("Skip selected tracks")); if (not_in_queue == 0) - playlist_queue_->setIcon(IconLoader::Load("go-previous")); + playlist_queue_->setIcon(IconLoader::Load("go-previous", IconLoader::Base)); else - playlist_queue_->setIcon(IconLoader::Load("go-next")); + playlist_queue_->setIcon(IconLoader::Load("go-next", IconLoader::Base)); if (!index.isValid()) { ui_->action_selection_set_value->setVisible(false); @@ -1717,7 +1723,7 @@ void MainWindow::PlaylistRightClick(const QPoint& global_pos, // create the playlist submenu QMenu* add_to_another_menu = new QMenu(tr("Add to another playlist"), this); - add_to_another_menu->setIcon(IconLoader::Load("list-add")); + add_to_another_menu->setIcon(IconLoader::Load("list-add", IconLoader::Base)); for (const PlaylistBackend::Playlist& playlist : app_->playlist_backend()->GetAllOpenPlaylists()) { @@ -2638,8 +2644,8 @@ void MainWindow::AutoCompleteTagsAccepted() { } QPixmap MainWindow::CreateOverlayedIcon(int position, int scrobble_point) { - QPixmap normal_icon = QIcon(":/last.fm/as_light.png").pixmap(16); - QPixmap light_icon = QIcon(":/last.fm/as.png").pixmap(16); + QPixmap normal_icon = IconLoader::Load("as_light", IconLoader::Lastfm).pixmap(16); + QPixmap light_icon = IconLoader::Load("as", IconLoader::Lastfm).pixmap(16); QRect rect(normal_icon.rect()); // calculates the progress @@ -2666,9 +2672,9 @@ QPixmap MainWindow::CreateOverlayedIcon(int position, int scrobble_point) { void MainWindow::SetToggleScrobblingIcon(bool value) { if (!value) { - ui_->action_toggle_scrobbling->setIcon(QIcon(":/last.fm/as_disabled.png")); + ui_->action_toggle_scrobbling->setIcon(IconLoader::Load("as_disabled", IconLoader::Lastfm)); } else { - ui_->action_toggle_scrobbling->setIcon(QIcon(":/last.fm/as_light.png")); + ui_->action_toggle_scrobbling->setIcon(IconLoader::Load("as_light", IconLoader::Lastfm)); } } @@ -2683,7 +2689,7 @@ void MainWindow::ScrobbleSubmitted() { // update the button icon if (last_fm_enabled) - ui_->action_toggle_scrobbling->setIcon(QIcon(":/last.fm/as.png")); + ui_->action_toggle_scrobbling->setIcon(IconLoader::Load("as", IconLoader::Lastfm)); } void MainWindow::ScrobbleError(int value) { diff --git a/src/ui/networkproxysettingspage.cpp b/src/ui/networkproxysettingspage.cpp index 19efb05ae..57cb21b42 100644 --- a/src/ui/networkproxysettingspage.cpp +++ b/src/ui/networkproxysettingspage.cpp @@ -25,7 +25,7 @@ NetworkProxySettingsPage::NetworkProxySettingsPage(SettingsDialog* dialog) : SettingsPage(dialog), ui_(new Ui_NetworkProxySettingsPage) { ui_->setupUi(this); - setWindowIcon(IconLoader::Load("applications-internet")); + setWindowIcon(IconLoader::Load("applications-internet", IconLoader::Base)); } NetworkProxySettingsPage::~NetworkProxySettingsPage() { delete ui_; } diff --git a/src/ui/networkremotesettingspage.cpp b/src/ui/networkremotesettingspage.cpp index 01277869c..e80811bf5 100644 --- a/src/ui/networkremotesettingspage.cpp +++ b/src/ui/networkremotesettingspage.cpp @@ -39,7 +39,7 @@ static bool ComparePresetsByName(const TranscoderPreset& left, NetworkRemoteSettingsPage::NetworkRemoteSettingsPage(SettingsDialog* dialog) : SettingsPage(dialog), ui_(new Ui_NetworkRemoteSettingsPage) { ui_->setupUi(this); - setWindowIcon(IconLoader::Load("ipodtouchicon")); + setWindowIcon(IconLoader::Load("ipodtouchicon", IconLoader::Base)); connect(ui_->options, SIGNAL(clicked()), SLOT(Options())); diff --git a/src/ui/notificationssettingspage.cpp b/src/ui/notificationssettingspage.cpp index 413f23f80..a4826505e 100644 --- a/src/ui/notificationssettingspage.cpp +++ b/src/ui/notificationssettingspage.cpp @@ -31,7 +31,7 @@ NotificationsSettingsPage::NotificationsSettingsPage(SettingsDialog* dialog) ui_(new Ui_NotificationsSettingsPage), pretty_popup_(new OSDPretty(OSDPretty::Mode_Draggable)) { ui_->setupUi(this); - setWindowIcon(IconLoader::Load("help-hint")); + setWindowIcon(IconLoader::Load("help-hint", IconLoader::Base)); pretty_popup_->SetMessage(tr("OSD Preview"), tr("Drag to reposition"), QImage(":nocover.png")); @@ -105,8 +105,8 @@ NotificationsSettingsPage::NotificationsSettingsPage(SettingsDialog* dialog) SLOT(PrepareNotificationPreview())); // Icons - ui_->notifications_exp_chooser1->setIcon(IconLoader::Load("list-add")); - ui_->notifications_exp_chooser2->setIcon(IconLoader::Load("list-add")); + ui_->notifications_exp_chooser1->setIcon(IconLoader::Load("list-add", IconLoader::Base)); + ui_->notifications_exp_chooser2->setIcon(IconLoader::Load("list-add", IconLoader::Base)); } NotificationsSettingsPage::~NotificationsSettingsPage() { diff --git a/src/ui/organisedialog.cpp b/src/ui/organisedialog.cpp index 29fcd5b02..6c826a8d1 100644 --- a/src/ui/organisedialog.cpp +++ b/src/ui/organisedialog.cpp @@ -53,7 +53,7 @@ OrganiseDialog::OrganiseDialog(TaskManager* task_manager, QWidget* parent) connect(ui_->button_box->button(QDialogButtonBox::Reset), SIGNAL(clicked()), SLOT(Reset())); - ui_->aftercopying->setItemIcon(1, IconLoader::Load("edit-delete")); + ui_->aftercopying->setItemIcon(1, IconLoader::Load("edit-delete", IconLoader::Base)); // Valid tags QMap tags; diff --git a/src/ui/playbacksettingspage.cpp b/src/ui/playbacksettingspage.cpp index f5c87f55b..957317377 100644 --- a/src/ui/playbacksettingspage.cpp +++ b/src/ui/playbacksettingspage.cpp @@ -25,7 +25,7 @@ PlaybackSettingsPage::PlaybackSettingsPage(SettingsDialog* dialog) : SettingsPage(dialog), ui_(new Ui_PlaybackSettingsPage) { ui_->setupUi(this); - setWindowIcon(IconLoader::Load("media-playback-start")); + setWindowIcon(IconLoader::Load("media-playback-start", IconLoader::Base)); connect(ui_->fading_cross, SIGNAL(toggled(bool)), SLOT(FadingOptionsChanged())); @@ -62,7 +62,7 @@ void PlaybackSettingsPage::Load() { QStringList components = output.icon_name.split("-"); QIcon icon; while (icon.isNull() && !components.isEmpty()) { - icon = IconLoader::Load(components.join("-")); + icon = IconLoader::Load(components.join("-"), IconLoader::Base); components.removeLast(); } diff --git a/src/ui/qtsystemtrayicon.cpp b/src/ui/qtsystemtrayicon.cpp index 39677bc21..828eacf8a 100644 --- a/src/ui/qtsystemtrayicon.cpp +++ b/src/ui/qtsystemtrayicon.cpp @@ -37,8 +37,8 @@ QtSystemTrayIcon::QtSystemTrayIcon(QObject* parent) action_stop_after_this_track_(nullptr), action_mute_(nullptr), action_love_(nullptr) { - QIcon theme_icon = IconLoader::Load("clementine-panel"); - QIcon theme_icon_grey = IconLoader::Load("clementine-panel-grey"); + QIcon theme_icon = IconLoader::Load("clementine-panel", IconLoader::Base); + QIcon theme_icon_grey = IconLoader::Load("clementine-panel-grey", IconLoader::Base); if (theme_icon.isNull() || theme_icon_grey.isNull()) { // Load the default icon @@ -160,7 +160,7 @@ void QtSystemTrayIcon::SetPaused() { action_stop_->setEnabled(true); action_stop_after_this_track_->setEnabled(true); - action_play_pause_->setIcon(IconLoader::Load("media-playback-start")); + action_play_pause_->setIcon(IconLoader::Load("media-playback-start", IconLoader::Base)); action_play_pause_->setText(tr("Play")); action_play_pause_->setEnabled(true); @@ -171,7 +171,7 @@ void QtSystemTrayIcon::SetPlaying(bool enable_play_pause, bool enable_love) { action_stop_->setEnabled(true); action_stop_after_this_track_->setEnabled(true); - action_play_pause_->setIcon(IconLoader::Load("media-playback-pause")); + action_play_pause_->setIcon(IconLoader::Load("media-playback-pause", IconLoader::Base)); action_play_pause_->setText(tr("Pause")); action_play_pause_->setEnabled(enable_play_pause); #ifdef HAVE_LIBLASTFM @@ -184,7 +184,7 @@ void QtSystemTrayIcon::SetStopped() { action_stop_->setEnabled(false); action_stop_after_this_track_->setEnabled(false); - action_play_pause_->setIcon(IconLoader::Load("media-playback-start")); + action_play_pause_->setIcon(IconLoader::Load("media-playback-start", IconLoader::Base)); action_play_pause_->setText(tr("Play")); action_play_pause_->setEnabled(true); diff --git a/src/ui/trackselectiondialog.cpp b/src/ui/trackselectiondialog.cpp index 162489b58..0abda0beb 100644 --- a/src/ui/trackselectiondialog.cpp +++ b/src/ui/trackselectiondialog.cpp @@ -44,8 +44,10 @@ TrackSelectionDialog::TrackSelectionDialog(QWidget* parent) // Add the next/previous buttons previous_button_ = - new QPushButton(IconLoader::Load("go-previous"), tr("Previous"), this); - next_button_ = new QPushButton(IconLoader::Load("go-next"), tr("Next"), this); + new QPushButton(IconLoader::Load("go-previous", IconLoader::Base), + tr("Previous"), this); + next_button_ = new QPushButton(IconLoader::Load("go-next", IconLoader::Base), + tr("Next"), this); ui_->button_box->addButton(previous_button_, QDialogButtonBox::ResetRole); ui_->button_box->addButton(next_button_, QDialogButtonBox::ResetRole); diff --git a/src/visualisations/visualisationcontainer.cpp b/src/visualisations/visualisationcontainer.cpp index fbfbf8dfb..361ee2007 100644 --- a/src/visualisations/visualisationcontainer.cpp +++ b/src/visualisations/visualisationcontainer.cpp @@ -98,8 +98,8 @@ void VisualisationContainer::Init() { selector_->SetVisualisation(vis_); // Settings menu - menu_->addAction(IconLoader::Load("view-fullscreen"), tr("Toggle fullscreen"), - this, SLOT(ToggleFullscreen())); + menu_->addAction(IconLoader::Load("view-fullscreen", IconLoader::Base), + tr("Toggle fullscreen"), this, SLOT(ToggleFullscreen())); QMenu* fps_menu = menu_->addMenu(tr("Framerate")); QSignalMapper* fps_mapper = new QSignalMapper(this); @@ -131,7 +131,7 @@ void VisualisationContainer::Init() { menu_->addAction(tr("Select visualizations..."), selector_, SLOT(show())); menu_->addSeparator(); - menu_->addAction(IconLoader::Load("application-exit"), + menu_->addAction(IconLoader::Load("application-exit", IconLoader::Base), tr("Close visualization"), this, SLOT(hide())); } diff --git a/src/visualisations/visualisationoverlay.cpp b/src/visualisations/visualisationoverlay.cpp index 6df8d31c8..a04106601 100644 --- a/src/visualisations/visualisationoverlay.cpp +++ b/src/visualisations/visualisationoverlay.cpp @@ -38,7 +38,7 @@ VisualisationOverlay::VisualisationOverlay(QWidget* parent) setAttribute(Qt::WA_TranslucentBackground); setMouseTracking(true); - ui_->settings->setIcon(IconLoader::Load("configure")); + ui_->settings->setIcon(IconLoader::Load("configure", IconLoader::Base)); connect(ui_->settings, SIGNAL(clicked()), SLOT(ShowSettingsMenu())); connect(fade_timeline_, SIGNAL(valueChanged(qreal)), diff --git a/src/widgets/fileview.cpp b/src/widgets/fileview.cpp index 0edfcf80a..0bd6688ea 100644 --- a/src/widgets/fileview.cpp +++ b/src/widgets/fileview.cpp @@ -45,10 +45,10 @@ FileView::FileView(QWidget* parent) ui_->setupUi(this); // Icons - ui_->back->setIcon(IconLoader::Load("go-previous")); - ui_->forward->setIcon(IconLoader::Load("go-next")); - ui_->home->setIcon(IconLoader::Load("go-home")); - ui_->up->setIcon(IconLoader::Load("go-up")); + ui_->back->setIcon(IconLoader::Load("go-previous", IconLoader::Base)); + ui_->forward->setIcon(IconLoader::Load("go-next", IconLoader::Base)); + ui_->home->setIcon(IconLoader::Load("go-home", IconLoader::Base)); + ui_->up->setIcon(IconLoader::Load("go-up", IconLoader::Base)); connect(ui_->back, SIGNAL(clicked()), undo_stack_, SLOT(undo())); connect(ui_->forward, SIGNAL(clicked()), undo_stack_, SLOT(redo())); diff --git a/src/widgets/fileviewlist.cpp b/src/widgets/fileviewlist.cpp index 27ff164a2..b4d0198b1 100644 --- a/src/widgets/fileviewlist.cpp +++ b/src/widgets/fileviewlist.cpp @@ -27,27 +27,29 @@ FileViewList::FileViewList(QWidget* parent) : QListView(parent), menu_(new QMenu(this)) { - menu_->addAction(IconLoader::Load("media-playback-start"), + menu_->addAction(IconLoader::Load("media-playback-start", IconLoader::Base), tr("Append to current playlist"), this, SLOT(AddToPlaylistSlot())); - menu_->addAction(IconLoader::Load("media-playback-start"), + menu_->addAction(IconLoader::Load("media-playback-start", IconLoader::Base), tr("Replace current playlist"), this, SLOT(LoadSlot())); - menu_->addAction(IconLoader::Load("document-new"), tr("Open in new playlist"), - this, SLOT(OpenInNewPlaylistSlot())); + menu_->addAction(IconLoader::Load("document-new", IconLoader::Base), + tr("Open in new playlist"), this, + SLOT(OpenInNewPlaylistSlot())); menu_->addSeparator(); - menu_->addAction(IconLoader::Load("edit-copy"), tr("Copy to library..."), - this, SLOT(CopyToLibrarySlot())); - menu_->addAction(IconLoader::Load("go-jump"), tr("Move to library..."), this, - SLOT(MoveToLibrarySlot())); - menu_->addAction(IconLoader::Load("multimedia-player-ipod-mini-blue"), - tr("Copy to device..."), this, SLOT(CopyToDeviceSlot())); - menu_->addAction(IconLoader::Load("edit-delete"), tr("Delete from disk..."), - this, SLOT(DeleteSlot())); + menu_->addAction(IconLoader::Load("edit-copy", IconLoader::Base), + tr("Copy to library..."), this, SLOT(CopyToLibrarySlot())); + menu_->addAction(IconLoader::Load("go-jump", IconLoader::Base), + tr("Move to library..."), this, SLOT(MoveToLibrarySlot())); + menu_->addAction(IconLoader::Load("multimedia-player-ipod-mini-blue", + IconLoader::Base), tr("Copy to device..."), this, + SLOT(CopyToDeviceSlot())); + menu_->addAction(IconLoader::Load("edit-delete", IconLoader::Base), + tr("Delete from disk..."), this, SLOT(DeleteSlot())); menu_->addSeparator(); - menu_->addAction(IconLoader::Load("edit-rename"), + menu_->addAction(IconLoader::Load("edit-rename", IconLoader::Base), tr("Edit track information..."), this, SLOT(EditTagsSlot())); - menu_->addAction(IconLoader::Load("document-open-folder"), + menu_->addAction(IconLoader::Load("document-open-folder", IconLoader::Base), tr("Show in file browser..."), this, SLOT(ShowInBrowser())); setAttribute(Qt::WA_MacShowFocusRect, false); diff --git a/src/widgets/lineedit.cpp b/src/widgets/lineedit.cpp index dfbeef65c..d5f09d344 100644 --- a/src/widgets/lineedit.cpp +++ b/src/widgets/lineedit.cpp @@ -34,7 +34,7 @@ ExtendedEditor::ExtendedEditor(QWidget* widget, int extra_right_padding, draw_hint_(draw_hint), font_point_size_(widget->font().pointSizeF() - 1), is_rtl_(false) { - clear_button_->setIcon(IconLoader::Load("edit-clear-locationbar-ltr")); + clear_button_->setIcon(IconLoader::Load("edit-clear-locationbar-ltr", IconLoader::Base)); clear_button_->setIconSize(QSize(16, 16)); clear_button_->setCursor(Qt::ArrowCursor); clear_button_->setStyleSheet("QToolButton { border: none; padding: 0px; }"); diff --git a/src/widgets/loginstatewidget.cpp b/src/widgets/loginstatewidget.cpp index 5019fda76..923c7f10a 100644 --- a/src/widgets/loginstatewidget.cpp +++ b/src/widgets/loginstatewidget.cpp @@ -32,7 +32,7 @@ LoginStateWidget::LoginStateWidget(QWidget* parent) ui_->account_type->hide(); ui_->busy->hide(); - ui_->sign_out->setIcon(IconLoader::Load("list-remove")); + ui_->sign_out->setIcon(IconLoader::Load("list-remove", IconLoader::Base)); QFont bold_font(font()); bold_font.setBold(true); diff --git a/src/widgets/prettyimage.cpp b/src/widgets/prettyimage.cpp index 50db99ff5..3a758af56 100644 --- a/src/widgets/prettyimage.cpp +++ b/src/widgets/prettyimage.cpp @@ -179,9 +179,9 @@ void PrettyImage::contextMenuEvent(QContextMenuEvent* e) { if (!menu_) { menu_ = new QMenu(this); - menu_->addAction(IconLoader::Load("zoom-in"), tr("Show fullsize..."), this, - SLOT(ShowFullsize())); - menu_->addAction(IconLoader::Load("document-save"), + menu_->addAction(IconLoader::Load("zoom-in", IconLoader::Base), + tr("Show fullsize..."), this, SLOT(ShowFullsize())); + menu_->addAction(IconLoader::Load("document-save", IconLoader::Base), tr("Save image") + "...", this, SLOT(SaveAs())); } diff --git a/src/wiimotedev/wiimotesettingspage.cpp b/src/wiimotedev/wiimotesettingspage.cpp index 3c9adfcf3..2b705ad9c 100644 --- a/src/wiimotedev/wiimotesettingspage.cpp +++ b/src/wiimotedev/wiimotesettingspage.cpp @@ -15,6 +15,7 @@ along with Clementine. If not, see . */ +#include "ui/iconloader.h" #include "consts.h" #include "shortcuts.h" #include "wiimotesettingspage.h" @@ -27,7 +28,7 @@ WiimoteSettingsPage::WiimoteSettingsPage(SettingsDialog* dialog) : SettingsPage(dialog), ui_(new Ui_WiimoteSettingsPage) { ui_->setupUi(this); ui_->list->header()->setResizeMode(QHeaderView::ResizeToContents); - setWindowIcon(QIcon(":/icons/32x32/wiimotedev.png")); + setWindowIcon(IconLoader::Load("wiimotedev", IconLoader::Base)); text_buttons_.insert(WIIMOTE_BTN_1, "Wiiremote 1"); text_buttons_.insert(WIIMOTE_BTN_2, "Wiiremote 2");