├── Localizations └── Strings.es.Designer.cs ├── tools ├── NuGet │ └── NuGet.exe └── xpkg │ ├── xamarin-component.exe │ └── xamarin-component ├── MusicPlayer.iOS ├── libbass.a ├── iTunesArtwork ├── libbass_fx.a ├── iTunesArtwork@2x ├── Resources │ ├── empty.mp3 │ ├── launchBg.png │ ├── accentColor.png │ ├── headphones.png │ ├── launchBg@2x.png │ ├── Fonts │ │ ├── icomoon.ttf │ │ ├── SF-UI-Text-Bold.otf │ │ ├── SF-UI-Display-Bold.otf │ │ ├── SF-UI-Display-Thin.otf │ │ ├── SF-UI-Text-Heavy.otf │ │ ├── SF-UI-Text-Italic.otf │ │ ├── SF-UI-Text-Light.otf │ │ ├── SF-UI-Text-Medium.otf │ │ ├── SF-UI-Text-Regular.otf │ │ ├── SF-UI-Display-Black.otf │ │ ├── SF-UI-Display-Heavy.otf │ │ ├── SF-UI-Display-Light.otf │ │ ├── SF-UI-Display-Medium.otf │ │ ├── SF-UI-Text-Semibold.otf │ │ ├── SF-UI-Display-Regular.otf │ │ ├── SF-UI-Display-Semibold.otf │ │ ├── SF-UI-Text-BoldItalic.otf │ │ ├── SF-UI-Text-HeavyItalic.otf │ │ ├── SF-UI-Text-LightItalic.otf │ │ ├── SF-UI-Text-MediumItalic.otf │ │ ├── SF-UI-Display-Ultralight.otf │ │ └── SF-UI-Text-SemiboldItalic.otf │ ├── accentColor@2x.png │ ├── headphones@2x.png │ ├── accentColorHorizontal.png │ ├── accentColorHorizontal@2x.png │ ├── Media.xcassets │ │ ├── AppIcons.appiconset │ │ │ ├── Icon.png │ │ │ ├── Icon-120.png │ │ │ ├── Icon-167.png │ │ │ ├── Icon-72.png │ │ │ ├── Icon-76.png │ │ │ ├── Icon@2x.png │ │ │ ├── Icon-60@3x.png │ │ │ ├── Icon-72@2x.png │ │ │ ├── Icon-76@2x.png │ │ │ ├── Icon-Small.png │ │ │ ├── Icon-Small-50.png │ │ │ ├── Icon-Small@2x.png │ │ │ ├── Icon-Small@3x.png │ │ │ ├── iTunesArtwork@2x.png │ │ │ ├── Icon-Spotlight-iOS7.png │ │ │ ├── Icon-Spotlight-iOS7@2x.png │ │ │ └── Icon-iPad-Spotlight-iOS7@2x.png │ │ └── LaunchImages.launchimage │ │ │ ├── Default@2x.png │ │ │ ├── Default-568h@2x.png │ │ │ ├── Default-Portrait~ipad.png │ │ │ ├── Default-Landscape~ipad.png │ │ │ ├── Default-Portrait~ipad@2x.png │ │ │ └── Default-Landscape~ipad@2x.png │ └── SVG │ │ ├── previous.svg │ │ ├── next.svg │ │ ├── close.svg │ │ ├── airplay.svg │ │ ├── pauseButton.svg │ │ ├── playbackSliderThumb.svg │ │ └── menu.svg ├── build.sh ├── SetupDev.sh ├── Entitlements.plist ├── App.iOS.cs ├── Cells │ ├── SettingsBooleanElement.cs │ ├── MenuHeaderElement.cs │ ├── BaseCell.cs │ ├── SettingsSwitch.cs │ └── SettingsElement.cs ├── Helpers │ ├── TableViewExtensions.cs │ ├── Fonts.cs │ └── UIViewExtensions.cs ├── SetupAppStore.sh ├── ApiConstants.iOS.cs ├── ViewModels │ └── BaseViewModel.cs ├── Native │ └── AutolockPowerWatcher.cs ├── UI │ ├── DarkBlurView.cs │ └── VideoView.cs └── ViewControllers │ ├── OnlinePlaylistViewController.cs │ ├── BaseModelViewController.cs │ ├── SongViewController.cs │ ├── ArtistSongsViewController.cs │ ├── Car │ ├── CarGenreViewController.cs │ ├── CarArtistViewController.cs │ ├── CarPlaylistViewController.cs │ └── CarSongsViewController.cs │ └── BaseEditTableViewController.cs ├── MusicPlayer.OSX ├── libbass.dylib ├── libbass_fx.dylib ├── Resources │ └── icon.icns ├── VideoPlaybackWindow.designer.cs ├── Views │ ├── Cells │ │ ├── BaseCollectionView.cs │ │ ├── ImageCellView.cs │ │ ├── SpinnerCell.cs │ │ ├── BaseCell.cs │ │ ├── MediaCollectionView.cs │ │ ├── GenreCell.cs │ │ ├── PlaylistCell.cs │ │ ├── SongSearchCell.cs │ │ ├── HeaderCell.cs │ │ └── SongCell.cs │ ├── ILifeCycleView.cs │ ├── AlbumDetailViewController.designer.cs │ ├── AlbumDetailsViewControllerController.designer.cs │ ├── SimpleButton.cs │ ├── RadioStationListView.cs │ ├── GenreListView.cs │ ├── ArtistListView.cs │ ├── PlaylistListView.cs │ ├── AlbumListView.cs │ ├── PlaylistSongsListView.cs │ └── AutoPlaylistSongsListView.cs ├── ApiConstants.Mac.cs ├── Controls │ ├── INavigationItem.cs │ ├── PanaramaView.cs │ └── NSColorView.cs ├── Menu │ ├── MenuElement.cs │ ├── MenuImageElement.cs │ ├── MenuSection.cs │ └── Element.cs ├── Main.cs ├── BottomView.cs ├── ViewModels │ └── ArtistAlbumsViewModel.cs ├── App.OSX.cs ├── Helpers │ ├── DetatchableNSPopoover.cs │ ├── Fonts.cs │ └── Device.cs ├── Entitlements.plist ├── SidebarTableCellView.cs ├── Native │ ├── PopupManager.cs │ └── BackgroundDownloadManager.cs ├── CollectionView.cs ├── CollectionView.designer.cs ├── ViewController.designer.cs ├── BottomView.designer.cs ├── MainWindow.designer.cs ├── MainWindowView.designer.cs ├── AkavacheSqliteLinkerOverride.cs ├── ViewController.cs ├── SidebarTableCellView.designer.cs ├── VideoPlaybackWindowController.designer.cs └── Plugins │ └── Connectivity │ └── ConnectionType.cs ├── MusicPlayer.Droid ├── Resources │ ├── drawable │ │ ├── bg.png │ │ ├── Icon.png │ │ ├── default_background.xml │ │ └── fullscreen_toolbar_bg_gradient.xml │ ├── drawable-hdpi │ │ ├── ic_menu.png │ │ ├── ic_star_on.png │ │ ├── ic_by_genre.png │ │ ├── ic_launcher.png │ │ ├── ic_star_off.png │ │ ├── ic_default_art.png │ │ ├── ic_notification.png │ │ ├── ic_launcher_white.png │ │ ├── ic_close_black_24dp.png │ │ ├── ic_pause_black_36dp.png │ │ ├── ic_allmusic_black_24dp.png │ │ ├── ic_skip_next_white_24dp.png │ │ ├── ic_skip_next_white_48dp.png │ │ ├── ic_equalizer1_white_36dp.png │ │ ├── ic_equalizer2_white_36dp.png │ │ ├── ic_equalizer3_white_36dp.png │ │ ├── ic_play_arrow_black_36dp.png │ │ ├── uamp_ic_pause_white_24dp.png │ │ ├── uamp_ic_pause_white_48dp.png │ │ ├── ic_info_outline_grey600_48dp.png │ │ ├── ic_playlist_music_black_24dp.png │ │ ├── ic_skip_previous_white_24dp.png │ │ ├── ic_skip_previous_white_48dp.png │ │ ├── uamp_ic_play_arrow_white_24dp.png │ │ └── uamp_ic_play_arrow_white_48dp.png │ ├── drawable-mdpi │ │ ├── ic_menu.png │ │ ├── ic_star_on.png │ │ ├── ic_by_genre.png │ │ ├── ic_launcher.png │ │ ├── ic_star_off.png │ │ ├── ic_default_art.png │ │ ├── ic_notification.png │ │ ├── ic_launcher_white.png │ │ ├── ic_close_black_24dp.png │ │ ├── ic_pause_black_36dp.png │ │ ├── ic_allmusic_black_24dp.png │ │ ├── ic_skip_next_white_24dp.png │ │ ├── ic_skip_next_white_48dp.png │ │ ├── ic_equalizer1_white_36dp.png │ │ ├── ic_equalizer2_white_36dp.png │ │ ├── ic_equalizer3_white_36dp.png │ │ ├── ic_play_arrow_black_36dp.png │ │ ├── uamp_ic_pause_white_24dp.png │ │ ├── uamp_ic_pause_white_48dp.png │ │ ├── ic_info_outline_grey600_48dp.png │ │ ├── ic_playlist_music_black_24dp.png │ │ ├── ic_skip_previous_white_24dp.png │ │ ├── ic_skip_previous_white_48dp.png │ │ ├── uamp_ic_play_arrow_white_24dp.png │ │ └── uamp_ic_play_arrow_white_48dp.png │ ├── drawable-xhdpi │ │ ├── ic_menu.png │ │ ├── banner_tv.png │ │ ├── ic_by_genre.png │ │ ├── ic_launcher.png │ │ ├── ic_star_off.png │ │ ├── ic_star_on.png │ │ ├── ic_default_art.png │ │ ├── ic_launcher_white.png │ │ ├── ic_notification.png │ │ ├── ic_close_black_24dp.png │ │ ├── ic_pause_black_36dp.png │ │ ├── ic_allmusic_black_24dp.png │ │ ├── ic_equalizer1_white_36dp.png │ │ ├── ic_equalizer2_white_36dp.png │ │ ├── ic_equalizer3_white_36dp.png │ │ ├── ic_play_arrow_black_36dp.png │ │ ├── ic_skip_next_white_24dp.png │ │ ├── ic_skip_next_white_48dp.png │ │ ├── uamp_ic_pause_white_24dp.png │ │ ├── uamp_ic_pause_white_48dp.png │ │ ├── ic_skip_previous_white_24dp.png │ │ ├── ic_skip_previous_white_48dp.png │ │ ├── ic_info_outline_grey600_48dp.png │ │ ├── ic_playlist_music_black_24dp.png │ │ ├── uamp_ic_play_arrow_white_24dp.png │ │ └── uamp_ic_play_arrow_white_48dp.png │ ├── drawable-xxhdpi │ │ ├── ic_menu.png │ │ ├── ic_by_genre.png │ │ ├── ic_launcher.png │ │ ├── ic_star_off.png │ │ ├── ic_star_on.png │ │ ├── ic_default_art.png │ │ ├── ic_notification.png │ │ ├── ic_launcher_white.png │ │ ├── ic_close_black_24dp.png │ │ ├── ic_pause_black_36dp.png │ │ ├── ic_allmusic_black_24dp.png │ │ ├── ic_skip_next_white_24dp.png │ │ ├── ic_skip_next_white_48dp.png │ │ ├── ic_equalizer1_white_36dp.png │ │ ├── ic_equalizer2_white_36dp.png │ │ ├── ic_equalizer3_white_36dp.png │ │ ├── ic_play_arrow_black_36dp.png │ │ ├── uamp_ic_pause_white_24dp.png │ │ ├── uamp_ic_pause_white_48dp.png │ │ ├── ic_info_outline_grey600_48dp.png │ │ ├── ic_playlist_music_black_24dp.png │ │ ├── ic_skip_previous_white_24dp.png │ │ ├── ic_skip_previous_white_48dp.png │ │ ├── uamp_ic_play_arrow_white_24dp.png │ │ └── uamp_ic_play_arrow_white_48dp.png │ ├── drawable-xxxhdpi │ │ ├── ic_menu.png │ │ ├── ic_star_on.png │ │ ├── ic_by_genre.png │ │ ├── ic_launcher.png │ │ ├── ic_star_off.png │ │ ├── ic_default_art.png │ │ ├── ic_notification.png │ │ ├── ic_launcher_white.png │ │ ├── ic_close_black_24dp.png │ │ ├── ic_pause_black_36dp.png │ │ ├── ic_allmusic_black_24dp.png │ │ ├── ic_equalizer1_white_36dp.png │ │ ├── ic_equalizer2_white_36dp.png │ │ ├── ic_equalizer3_white_36dp.png │ │ ├── ic_play_arrow_black_36dp.png │ │ ├── ic_skip_next_white_24dp.png │ │ ├── ic_skip_next_white_48dp.png │ │ ├── uamp_ic_pause_white_24dp.png │ │ ├── uamp_ic_pause_white_48dp.png │ │ ├── ic_skip_previous_white_24dp.png │ │ ├── ic_skip_previous_white_48dp.png │ │ ├── ic_info_outline_grey600_48dp.png │ │ ├── ic_playlist_music_black_24dp.png │ │ ├── uamp_ic_play_arrow_white_24dp.png │ │ └── uamp_ic_play_arrow_white_48dp.png │ ├── xml │ │ └── automotive_app_desc.xml │ ├── values │ │ └── ids.xml │ ├── values-h800dp │ │ └── dimens.xml │ ├── animator │ │ ├── slide_in_from_left.xml │ │ ├── slide_in_from_right.xml │ │ ├── slide_out_to_bottom.xml │ │ └── slide_in_from_bottom.xml │ └── anim │ │ ├── fade_in.xml │ │ └── fade_out.xml ├── UI │ ├── Fragments │ │ ├── INavFragment.cs │ │ ├── BaseFragment.cs │ │ ├── PlaylistFragment.cs │ │ ├── AlbumsFragment.cs │ │ └── GenresFragment.cs │ ├── PopupManager.cs │ ├── FullScreenPlayerActivity.cs │ └── NowPlayingActivity.cs ├── Cells │ ├── PlaylistSongCell.cs │ ├── RadioStationCell.cs │ └── SpinnerCell.cs ├── Models │ └── MenuItem.cs ├── Helpers │ ├── Device.cs │ ├── DateTimeUtils.cs │ ├── Utility.cs │ └── SimpleAlertDialog.cs ├── ApiConstants.Droid.cs ├── AkavacheSqliteLinkerOverride.cs ├── Data │ └── BackgroundDownloadManager.cs ├── Properties │ └── AndroidManifest.xml ├── Assets │ └── AboutAssets.txt ├── ViewModels │ └── NavigationViewModel.cs ├── App.Droid.cs └── Playback │ ├── IPlayer.cs │ └── MoviePlayerEqualizer.cs ├── nuget.config ├── MusicPlayer.Shared ├── Models │ ├── iDirty.cs │ ├── PlaylistType.cs │ ├── MediaType.cs │ ├── StreamQuality.cs │ ├── RepeatMode.cs │ ├── PlaybackState.cs │ ├── RadioStationArtwork.cs │ ├── Scrobbling │ │ ├── NowPlayingEvent.cs │ │ └── SongPlaybackEvent.cs │ ├── UserDetails.cs │ ├── DownloadUrlData.cs │ ├── ServiceType.cs │ ├── EqualizerPresetValue.cs │ ├── ArtistArtwork.cs │ ├── ApiModel.cs │ ├── AlbumArtwork.cs │ ├── AlbumIds.cs │ ├── ArtistIds.cs │ ├── RadioStationSeed.cs │ ├── Artwork.cs │ ├── OfflineClass.cs │ ├── SongPlaybackData.cs │ ├── TrackPosition.cs │ └── SearchResults.cs ├── WebServer │ ├── PathAttribute.cs │ ├── LocalWebServer.cs │ ├── RequestExtensions.cs │ └── Routes │ │ └── RouteT.cs ├── Helpers │ ├── JsonContent.cs │ ├── Spinner.cs │ ├── MathExtensions.cs │ ├── ArrayExtensions.cs │ ├── IEnumberableExtension.cs │ ├── StringExtensions.cs │ ├── BaseNotify.cs │ └── DateExtensions.cs ├── Managers │ ├── ManagerBase.cs │ ├── SearchManager.cs │ └── StateManager.cs ├── Playback │ └── IEqualizer.cs ├── ViewModels │ ├── ArtistSongsViewModel.cs │ ├── GenreAlbumsViewModel.cs │ ├── ArtistAlbumsViewModel.cs │ ├── ArtistViewModel.cs │ ├── DownloadViewModel.cs │ └── OnlineAlbumDetailsViewModel.cs └── Data │ └── ScrobbleDatabase.cs ├── Api ├── OneDrive │ ├── Models │ │ ├── OneDriveFile.cs │ │ ├── OneDriveVideo.cs │ │ ├── OneDriveFolder.cs │ │ ├── OneDriveIdentity.cs │ │ ├── OneDriveLink.cs │ │ ├── OneDriveImage.cs │ │ ├── OneDriveSpecialFolder.cs │ │ ├── OneDriveError.cs │ │ ├── OneDriveIdentitySet.cs │ │ ├── OneDriveResponse.cs │ │ └── OneDriveAudio.cs │ └── Responses │ │ ├── OneDriveShareResponse.cs │ │ └── OneDriveDeltaResponse.cs ├── AmazonApi │ ├── CloudDrive │ │ ├── Account │ │ │ ├── CloudDataTotals.cs │ │ │ ├── CloudDataUsage.cs │ │ │ ├── CloudAccountInfoResponse.cs │ │ │ ├── CloudEndpointResponse.cs │ │ │ ├── CloudUsageResponse.cs │ │ │ └── CloudQuotaResponse.cs │ │ └── Nodes │ │ │ ├── Models │ │ │ ├── ParentMap.cs │ │ │ ├── ContentNodeImageProperties.cs │ │ │ ├── ContentNodeProperties.cs │ │ │ ├── ContentNodeVideoProperties.cs │ │ │ └── CloudDriveStorage.cs │ │ │ ├── Filters │ │ │ ├── NodeOrderBy.cs │ │ │ ├── NodeTypeFilter.cs │ │ │ ├── ContentNameFilter.cs │ │ │ ├── NodeFilter.cs │ │ │ ├── DateTimeBetweenNodeFilter.cs │ │ │ └── DateTimeNodeFilter.cs │ │ │ ├── Requests │ │ │ ├── CloudNodeRequests.cs │ │ │ └── CloudChangesRequest.cs │ │ │ └── Enums.cs │ └── AmazonAuthenticator.cs ├── SoundCloud │ ├── Models │ │ ├── SUser.cs │ │ └── SApiResponse.cs │ ├── SoundCloudAccount.cs │ └── SoundCloud.shproj ├── iPodApi │ ├── iPodApi.projitems │ └── iPodApi.shproj ├── FileSytemApi │ ├── FileSytemApi.projitems │ └── FileSytemApi.shproj ├── YoutubeApi │ ├── YoutubeApi.projitems │ └── YoutubeApi.shproj └── gMusicApi │ └── gMusicApi.projitems ├── Test ├── TestCloud.iOS │ ├── Constants.cs │ ├── packages.config │ ├── PopupMenuTest.cs │ ├── BaseTestFixture.cs │ └── SearchTest.cs └── ScreenShotTaker │ └── packages.config ├── .gitattributes ├── mobile-center-post-clone.sh ├── MusicPlayer.Apple ├── Playback │ └── CustomVideoLayer.cs └── MusicPlayer.Apple.shproj └── ApiConstants.targets /Localizations/Strings.es.Designer.cs: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/NuGet/NuGet.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/tools/NuGet/NuGet.exe -------------------------------------------------------------------------------- /MusicPlayer.iOS/libbass.a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.iOS/libbass.a -------------------------------------------------------------------------------- /MusicPlayer.OSX/libbass.dylib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.OSX/libbass.dylib -------------------------------------------------------------------------------- /MusicPlayer.iOS/iTunesArtwork: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.iOS/iTunesArtwork -------------------------------------------------------------------------------- /MusicPlayer.iOS/libbass_fx.a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.iOS/libbass_fx.a -------------------------------------------------------------------------------- /MusicPlayer.OSX/libbass_fx.dylib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.OSX/libbass_fx.dylib -------------------------------------------------------------------------------- /MusicPlayer.iOS/iTunesArtwork@2x: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.iOS/iTunesArtwork@2x -------------------------------------------------------------------------------- /tools/xpkg/xamarin-component.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/tools/xpkg/xamarin-component.exe -------------------------------------------------------------------------------- /MusicPlayer.OSX/Resources/icon.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.OSX/Resources/icon.icns -------------------------------------------------------------------------------- /MusicPlayer.iOS/Resources/empty.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.iOS/Resources/empty.mp3 -------------------------------------------------------------------------------- /tools/xpkg/xamarin-component: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | export MONO_IOMAP=all 3 | exec mono $MONO_OPTIONS xamarin-component.exe "$@" 4 | -------------------------------------------------------------------------------- /MusicPlayer.iOS/Resources/launchBg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.iOS/Resources/launchBg.png -------------------------------------------------------------------------------- /MusicPlayer.iOS/Resources/accentColor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.iOS/Resources/accentColor.png -------------------------------------------------------------------------------- /MusicPlayer.iOS/Resources/headphones.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.iOS/Resources/headphones.png -------------------------------------------------------------------------------- /MusicPlayer.iOS/Resources/launchBg@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.iOS/Resources/launchBg@2x.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable/bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable/bg.png -------------------------------------------------------------------------------- /MusicPlayer.iOS/Resources/Fonts/icomoon.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.iOS/Resources/Fonts/icomoon.ttf -------------------------------------------------------------------------------- /MusicPlayer.iOS/Resources/accentColor@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.iOS/Resources/accentColor@2x.png -------------------------------------------------------------------------------- /MusicPlayer.iOS/Resources/headphones@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.iOS/Resources/headphones@2x.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable/Icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable/Icon.png -------------------------------------------------------------------------------- /MusicPlayer.iOS/Resources/Fonts/SF-UI-Text-Bold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.iOS/Resources/Fonts/SF-UI-Text-Bold.otf -------------------------------------------------------------------------------- /MusicPlayer.iOS/Resources/accentColorHorizontal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.iOS/Resources/accentColorHorizontal.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-hdpi/ic_menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-hdpi/ic_menu.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-mdpi/ic_menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-mdpi/ic_menu.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xhdpi/ic_menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xhdpi/ic_menu.png -------------------------------------------------------------------------------- /MusicPlayer.iOS/Resources/Fonts/SF-UI-Display-Bold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.iOS/Resources/Fonts/SF-UI-Display-Bold.otf -------------------------------------------------------------------------------- /MusicPlayer.iOS/Resources/Fonts/SF-UI-Display-Thin.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.iOS/Resources/Fonts/SF-UI-Display-Thin.otf -------------------------------------------------------------------------------- /MusicPlayer.iOS/Resources/Fonts/SF-UI-Text-Heavy.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.iOS/Resources/Fonts/SF-UI-Text-Heavy.otf -------------------------------------------------------------------------------- /MusicPlayer.iOS/Resources/Fonts/SF-UI-Text-Italic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.iOS/Resources/Fonts/SF-UI-Text-Italic.otf -------------------------------------------------------------------------------- /MusicPlayer.iOS/Resources/Fonts/SF-UI-Text-Light.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.iOS/Resources/Fonts/SF-UI-Text-Light.otf -------------------------------------------------------------------------------- /MusicPlayer.iOS/Resources/Fonts/SF-UI-Text-Medium.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.iOS/Resources/Fonts/SF-UI-Text-Medium.otf -------------------------------------------------------------------------------- /MusicPlayer.iOS/Resources/Fonts/SF-UI-Text-Regular.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.iOS/Resources/Fonts/SF-UI-Text-Regular.otf -------------------------------------------------------------------------------- /MusicPlayer.iOS/Resources/accentColorHorizontal@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.iOS/Resources/accentColorHorizontal@2x.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-hdpi/ic_star_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-hdpi/ic_star_on.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-mdpi/ic_star_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-mdpi/ic_star_on.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xhdpi/banner_tv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xhdpi/banner_tv.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xxhdpi/ic_menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xxhdpi/ic_menu.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xxxhdpi/ic_menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xxxhdpi/ic_menu.png -------------------------------------------------------------------------------- /MusicPlayer.iOS/Resources/Fonts/SF-UI-Display-Black.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.iOS/Resources/Fonts/SF-UI-Display-Black.otf -------------------------------------------------------------------------------- /MusicPlayer.iOS/Resources/Fonts/SF-UI-Display-Heavy.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.iOS/Resources/Fonts/SF-UI-Display-Heavy.otf -------------------------------------------------------------------------------- /MusicPlayer.iOS/Resources/Fonts/SF-UI-Display-Light.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.iOS/Resources/Fonts/SF-UI-Display-Light.otf -------------------------------------------------------------------------------- /MusicPlayer.iOS/Resources/Fonts/SF-UI-Display-Medium.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.iOS/Resources/Fonts/SF-UI-Display-Medium.otf -------------------------------------------------------------------------------- /MusicPlayer.iOS/Resources/Fonts/SF-UI-Text-Semibold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.iOS/Resources/Fonts/SF-UI-Text-Semibold.otf -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-hdpi/ic_by_genre.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-hdpi/ic_by_genre.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-hdpi/ic_star_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-hdpi/ic_star_off.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-mdpi/ic_by_genre.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-mdpi/ic_by_genre.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-mdpi/ic_star_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-mdpi/ic_star_off.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xhdpi/ic_by_genre.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xhdpi/ic_by_genre.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xhdpi/ic_star_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xhdpi/ic_star_off.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xhdpi/ic_star_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xhdpi/ic_star_on.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xxhdpi/ic_by_genre.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xxhdpi/ic_by_genre.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xxhdpi/ic_star_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xxhdpi/ic_star_off.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xxhdpi/ic_star_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xxhdpi/ic_star_on.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xxxhdpi/ic_star_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xxxhdpi/ic_star_on.png -------------------------------------------------------------------------------- /MusicPlayer.iOS/Resources/Fonts/SF-UI-Display-Regular.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.iOS/Resources/Fonts/SF-UI-Display-Regular.otf -------------------------------------------------------------------------------- /MusicPlayer.iOS/Resources/Fonts/SF-UI-Display-Semibold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.iOS/Resources/Fonts/SF-UI-Display-Semibold.otf -------------------------------------------------------------------------------- /MusicPlayer.iOS/Resources/Fonts/SF-UI-Text-BoldItalic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.iOS/Resources/Fonts/SF-UI-Text-BoldItalic.otf -------------------------------------------------------------------------------- /MusicPlayer.iOS/Resources/Fonts/SF-UI-Text-HeavyItalic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.iOS/Resources/Fonts/SF-UI-Text-HeavyItalic.otf -------------------------------------------------------------------------------- /MusicPlayer.iOS/Resources/Fonts/SF-UI-Text-LightItalic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.iOS/Resources/Fonts/SF-UI-Text-LightItalic.otf -------------------------------------------------------------------------------- /MusicPlayer.iOS/Resources/Fonts/SF-UI-Text-MediumItalic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.iOS/Resources/Fonts/SF-UI-Text-MediumItalic.otf -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-hdpi/ic_default_art.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-hdpi/ic_default_art.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-hdpi/ic_notification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-hdpi/ic_notification.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-mdpi/ic_default_art.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-mdpi/ic_default_art.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-mdpi/ic_notification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-mdpi/ic_notification.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xhdpi/ic_default_art.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xhdpi/ic_default_art.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xxxhdpi/ic_by_genre.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xxxhdpi/ic_by_genre.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xxxhdpi/ic_star_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xxxhdpi/ic_star_off.png -------------------------------------------------------------------------------- /MusicPlayer.iOS/Resources/Fonts/SF-UI-Display-Ultralight.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.iOS/Resources/Fonts/SF-UI-Display-Ultralight.otf -------------------------------------------------------------------------------- /MusicPlayer.iOS/Resources/Fonts/SF-UI-Text-SemiboldItalic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.iOS/Resources/Fonts/SF-UI-Text-SemiboldItalic.otf -------------------------------------------------------------------------------- /nuget.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-hdpi/ic_launcher_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-hdpi/ic_launcher_white.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-mdpi/ic_launcher_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-mdpi/ic_launcher_white.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xhdpi/ic_launcher_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xhdpi/ic_launcher_white.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xhdpi/ic_notification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xhdpi/ic_notification.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xxhdpi/ic_default_art.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xxhdpi/ic_default_art.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xxhdpi/ic_notification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xxhdpi/ic_notification.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xxxhdpi/ic_default_art.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xxxhdpi/ic_default_art.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xxxhdpi/ic_notification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xxxhdpi/ic_notification.png -------------------------------------------------------------------------------- /MusicPlayer.Shared/Models/iDirty.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace MusicPlayer.Models 4 | { 5 | public interface iDirty 6 | { 7 | bool IsDirty { get; set; } 8 | } 9 | } -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-hdpi/ic_close_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-hdpi/ic_close_black_24dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-hdpi/ic_pause_black_36dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-hdpi/ic_pause_black_36dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-mdpi/ic_close_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-mdpi/ic_close_black_24dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-mdpi/ic_pause_black_36dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-mdpi/ic_pause_black_36dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xhdpi/ic_close_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xhdpi/ic_close_black_24dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xhdpi/ic_pause_black_36dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xhdpi/ic_pause_black_36dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xxhdpi/ic_launcher_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xxhdpi/ic_launcher_white.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xxxhdpi/ic_launcher_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xxxhdpi/ic_launcher_white.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-hdpi/ic_allmusic_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-hdpi/ic_allmusic_black_24dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-hdpi/ic_skip_next_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-hdpi/ic_skip_next_white_24dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-hdpi/ic_skip_next_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-hdpi/ic_skip_next_white_48dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-mdpi/ic_allmusic_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-mdpi/ic_allmusic_black_24dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-mdpi/ic_skip_next_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-mdpi/ic_skip_next_white_24dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-mdpi/ic_skip_next_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-mdpi/ic_skip_next_white_48dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xhdpi/ic_allmusic_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xhdpi/ic_allmusic_black_24dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xxhdpi/ic_close_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xxhdpi/ic_close_black_24dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xxhdpi/ic_pause_black_36dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xxhdpi/ic_pause_black_36dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xxxhdpi/ic_close_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xxxhdpi/ic_close_black_24dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xxxhdpi/ic_pause_black_36dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xxxhdpi/ic_pause_black_36dp.png -------------------------------------------------------------------------------- /MusicPlayer.iOS/Resources/Media.xcassets/AppIcons.appiconset/Icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.iOS/Resources/Media.xcassets/AppIcons.appiconset/Icon.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-hdpi/ic_equalizer1_white_36dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-hdpi/ic_equalizer1_white_36dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-hdpi/ic_equalizer2_white_36dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-hdpi/ic_equalizer2_white_36dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-hdpi/ic_equalizer3_white_36dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-hdpi/ic_equalizer3_white_36dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-hdpi/ic_play_arrow_black_36dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-hdpi/ic_play_arrow_black_36dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-hdpi/uamp_ic_pause_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-hdpi/uamp_ic_pause_white_24dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-hdpi/uamp_ic_pause_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-hdpi/uamp_ic_pause_white_48dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-mdpi/ic_equalizer1_white_36dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-mdpi/ic_equalizer1_white_36dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-mdpi/ic_equalizer2_white_36dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-mdpi/ic_equalizer2_white_36dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-mdpi/ic_equalizer3_white_36dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-mdpi/ic_equalizer3_white_36dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-mdpi/ic_play_arrow_black_36dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-mdpi/ic_play_arrow_black_36dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-mdpi/uamp_ic_pause_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-mdpi/uamp_ic_pause_white_24dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-mdpi/uamp_ic_pause_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-mdpi/uamp_ic_pause_white_48dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xhdpi/ic_equalizer1_white_36dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xhdpi/ic_equalizer1_white_36dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xhdpi/ic_equalizer2_white_36dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xhdpi/ic_equalizer2_white_36dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xhdpi/ic_equalizer3_white_36dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xhdpi/ic_equalizer3_white_36dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xhdpi/ic_play_arrow_black_36dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xhdpi/ic_play_arrow_black_36dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xhdpi/ic_skip_next_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xhdpi/ic_skip_next_white_24dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xhdpi/ic_skip_next_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xhdpi/ic_skip_next_white_48dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xhdpi/uamp_ic_pause_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xhdpi/uamp_ic_pause_white_24dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xhdpi/uamp_ic_pause_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xhdpi/uamp_ic_pause_white_48dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xxhdpi/ic_allmusic_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xxhdpi/ic_allmusic_black_24dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xxhdpi/ic_skip_next_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xxhdpi/ic_skip_next_white_24dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xxhdpi/ic_skip_next_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xxhdpi/ic_skip_next_white_48dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xxxhdpi/ic_allmusic_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xxxhdpi/ic_allmusic_black_24dp.png -------------------------------------------------------------------------------- /Api/OneDrive/Models/OneDriveFile.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | namespace OneDrive 3 | { 4 | public class OneDriveFile 5 | { 6 | public OneDriveFile() 7 | { 8 | } 9 | } 10 | } 11 | 12 | -------------------------------------------------------------------------------- /Api/OneDrive/Models/OneDriveVideo.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | namespace OneDrive 3 | { 4 | public class OneDriveVideo 5 | { 6 | public OneDriveVideo() 7 | { 8 | } 9 | } 10 | } 11 | 12 | -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-hdpi/ic_info_outline_grey600_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-hdpi/ic_info_outline_grey600_48dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-hdpi/ic_playlist_music_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-hdpi/ic_playlist_music_black_24dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-hdpi/ic_skip_previous_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-hdpi/ic_skip_previous_white_24dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-hdpi/ic_skip_previous_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-hdpi/ic_skip_previous_white_48dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-mdpi/ic_info_outline_grey600_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-mdpi/ic_info_outline_grey600_48dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-mdpi/ic_playlist_music_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-mdpi/ic_playlist_music_black_24dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-mdpi/ic_skip_previous_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-mdpi/ic_skip_previous_white_24dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-mdpi/ic_skip_previous_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-mdpi/ic_skip_previous_white_48dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xhdpi/ic_skip_previous_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xhdpi/ic_skip_previous_white_24dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xhdpi/ic_skip_previous_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xhdpi/ic_skip_previous_white_48dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xxhdpi/ic_equalizer1_white_36dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xxhdpi/ic_equalizer1_white_36dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xxhdpi/ic_equalizer2_white_36dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xxhdpi/ic_equalizer2_white_36dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xxhdpi/ic_equalizer3_white_36dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xxhdpi/ic_equalizer3_white_36dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xxhdpi/ic_play_arrow_black_36dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xxhdpi/ic_play_arrow_black_36dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xxhdpi/uamp_ic_pause_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xxhdpi/uamp_ic_pause_white_24dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xxhdpi/uamp_ic_pause_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xxhdpi/uamp_ic_pause_white_48dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xxxhdpi/ic_equalizer1_white_36dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xxxhdpi/ic_equalizer1_white_36dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xxxhdpi/ic_equalizer2_white_36dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xxxhdpi/ic_equalizer2_white_36dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xxxhdpi/ic_equalizer3_white_36dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xxxhdpi/ic_equalizer3_white_36dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xxxhdpi/ic_play_arrow_black_36dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xxxhdpi/ic_play_arrow_black_36dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xxxhdpi/ic_skip_next_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xxxhdpi/ic_skip_next_white_24dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xxxhdpi/ic_skip_next_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xxxhdpi/ic_skip_next_white_48dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xxxhdpi/uamp_ic_pause_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xxxhdpi/uamp_ic_pause_white_24dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xxxhdpi/uamp_ic_pause_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xxxhdpi/uamp_ic_pause_white_48dp.png -------------------------------------------------------------------------------- /MusicPlayer.iOS/Resources/Media.xcassets/AppIcons.appiconset/Icon-120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.iOS/Resources/Media.xcassets/AppIcons.appiconset/Icon-120.png -------------------------------------------------------------------------------- /MusicPlayer.iOS/Resources/Media.xcassets/AppIcons.appiconset/Icon-167.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.iOS/Resources/Media.xcassets/AppIcons.appiconset/Icon-167.png -------------------------------------------------------------------------------- /MusicPlayer.iOS/Resources/Media.xcassets/AppIcons.appiconset/Icon-72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.iOS/Resources/Media.xcassets/AppIcons.appiconset/Icon-72.png -------------------------------------------------------------------------------- /MusicPlayer.iOS/Resources/Media.xcassets/AppIcons.appiconset/Icon-76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.iOS/Resources/Media.xcassets/AppIcons.appiconset/Icon-76.png -------------------------------------------------------------------------------- /MusicPlayer.iOS/Resources/Media.xcassets/AppIcons.appiconset/Icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.iOS/Resources/Media.xcassets/AppIcons.appiconset/Icon@2x.png -------------------------------------------------------------------------------- /Api/OneDrive/Models/OneDriveFolder.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | namespace OneDrive 3 | { 4 | public class OneDriveFolder 5 | { 6 | public OneDriveFolder() 7 | { 8 | } 9 | } 10 | } 11 | 12 | -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-hdpi/uamp_ic_play_arrow_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-hdpi/uamp_ic_play_arrow_white_24dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-hdpi/uamp_ic_play_arrow_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-hdpi/uamp_ic_play_arrow_white_48dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-mdpi/uamp_ic_play_arrow_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-mdpi/uamp_ic_play_arrow_white_24dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-mdpi/uamp_ic_play_arrow_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-mdpi/uamp_ic_play_arrow_white_48dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xhdpi/ic_info_outline_grey600_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xhdpi/ic_info_outline_grey600_48dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xhdpi/ic_playlist_music_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xhdpi/ic_playlist_music_black_24dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xhdpi/uamp_ic_play_arrow_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xhdpi/uamp_ic_play_arrow_white_24dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xhdpi/uamp_ic_play_arrow_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xhdpi/uamp_ic_play_arrow_white_48dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xxhdpi/ic_info_outline_grey600_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xxhdpi/ic_info_outline_grey600_48dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xxhdpi/ic_playlist_music_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xxhdpi/ic_playlist_music_black_24dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xxhdpi/ic_skip_previous_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xxhdpi/ic_skip_previous_white_24dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xxhdpi/ic_skip_previous_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xxhdpi/ic_skip_previous_white_48dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xxxhdpi/ic_skip_previous_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xxxhdpi/ic_skip_previous_white_24dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xxxhdpi/ic_skip_previous_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xxxhdpi/ic_skip_previous_white_48dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/UI/Fragments/INavFragment.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | namespace MusicPlayer.Droid 3 | { 4 | public interface INavFragment 5 | { 6 | string PageId { get; } 7 | } 8 | } 9 | 10 | -------------------------------------------------------------------------------- /MusicPlayer.iOS/Resources/Media.xcassets/AppIcons.appiconset/Icon-60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.iOS/Resources/Media.xcassets/AppIcons.appiconset/Icon-60@3x.png -------------------------------------------------------------------------------- /MusicPlayer.iOS/Resources/Media.xcassets/AppIcons.appiconset/Icon-72@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.iOS/Resources/Media.xcassets/AppIcons.appiconset/Icon-72@2x.png -------------------------------------------------------------------------------- /MusicPlayer.iOS/Resources/Media.xcassets/AppIcons.appiconset/Icon-76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.iOS/Resources/Media.xcassets/AppIcons.appiconset/Icon-76@2x.png -------------------------------------------------------------------------------- /MusicPlayer.iOS/Resources/Media.xcassets/AppIcons.appiconset/Icon-Small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.iOS/Resources/Media.xcassets/AppIcons.appiconset/Icon-Small.png -------------------------------------------------------------------------------- /Api/OneDrive/Models/OneDriveIdentity.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | namespace OneDrive 3 | { 4 | public class OneDriveIdentity 5 | { 6 | public OneDriveIdentity() 7 | { 8 | } 9 | } 10 | } 11 | 12 | -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xxhdpi/uamp_ic_play_arrow_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xxhdpi/uamp_ic_play_arrow_white_24dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xxhdpi/uamp_ic_play_arrow_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xxhdpi/uamp_ic_play_arrow_white_48dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xxxhdpi/ic_info_outline_grey600_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xxxhdpi/ic_info_outline_grey600_48dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xxxhdpi/ic_playlist_music_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xxxhdpi/ic_playlist_music_black_24dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xxxhdpi/uamp_ic_play_arrow_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xxxhdpi/uamp_ic_play_arrow_white_24dp.png -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable-xxxhdpi/uamp_ic_play_arrow_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.Droid/Resources/drawable-xxxhdpi/uamp_ic_play_arrow_white_48dp.png -------------------------------------------------------------------------------- /MusicPlayer.OSX/VideoPlaybackWindow.designer.cs: -------------------------------------------------------------------------------- 1 | namespace MusicPlayer 2 | { 3 | [global::Foundation.Register ("VideoPlaybackWindow")] 4 | public partial class VideoPlaybackWindow 5 | { 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /MusicPlayer.iOS/Resources/Media.xcassets/AppIcons.appiconset/Icon-Small-50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.iOS/Resources/Media.xcassets/AppIcons.appiconset/Icon-Small-50.png -------------------------------------------------------------------------------- /MusicPlayer.iOS/Resources/Media.xcassets/AppIcons.appiconset/Icon-Small@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.iOS/Resources/Media.xcassets/AppIcons.appiconset/Icon-Small@2x.png -------------------------------------------------------------------------------- /MusicPlayer.iOS/Resources/Media.xcassets/AppIcons.appiconset/Icon-Small@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.iOS/Resources/Media.xcassets/AppIcons.appiconset/Icon-Small@3x.png -------------------------------------------------------------------------------- /MusicPlayer.iOS/Resources/Media.xcassets/AppIcons.appiconset/iTunesArtwork@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.iOS/Resources/Media.xcassets/AppIcons.appiconset/iTunesArtwork@2x.png -------------------------------------------------------------------------------- /MusicPlayer.iOS/Resources/Media.xcassets/LaunchImages.launchimage/Default@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.iOS/Resources/Media.xcassets/LaunchImages.launchimage/Default@2x.png -------------------------------------------------------------------------------- /MusicPlayer.iOS/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | /usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier com.IIS.MusicPlayer.iOS" Info.plist 4 | /usr/libexec/PlistBuddy -c "Set :CFBundleDisplayName gMusic Beta" Info.plist -------------------------------------------------------------------------------- /MusicPlayer.iOS/Resources/Media.xcassets/AppIcons.appiconset/Icon-Spotlight-iOS7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.iOS/Resources/Media.xcassets/AppIcons.appiconset/Icon-Spotlight-iOS7.png -------------------------------------------------------------------------------- /MusicPlayer.iOS/SetupDev.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | /usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier com.IIS.MusicPlayer.iOS" Info.plist 4 | /usr/libexec/PlistBuddy -c "Set :CFBundleDisplayName gMusic Beta" Info.plist -------------------------------------------------------------------------------- /MusicPlayer.iOS/Resources/Media.xcassets/LaunchImages.launchimage/Default-568h@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.iOS/Resources/Media.xcassets/LaunchImages.launchimage/Default-568h@2x.png -------------------------------------------------------------------------------- /MusicPlayer.iOS/Resources/Media.xcassets/AppIcons.appiconset/Icon-Spotlight-iOS7@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.iOS/Resources/Media.xcassets/AppIcons.appiconset/Icon-Spotlight-iOS7@2x.png -------------------------------------------------------------------------------- /MusicPlayer.OSX/Views/Cells/BaseCollectionView.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace MusicPlayer 4 | { 5 | public class BaseCollectionView 6 | { 7 | public BaseCollectionView () 8 | { 9 | } 10 | } 11 | } 12 | 13 | -------------------------------------------------------------------------------- /MusicPlayer.OSX/Views/ILifeCycleView.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace MusicPlayer 4 | { 5 | public interface ILifeCycleView 6 | { 7 | void ViewWillAppear(); 8 | void ViewWillDissapear(); 9 | } 10 | } 11 | 12 | -------------------------------------------------------------------------------- /MusicPlayer.iOS/Resources/Media.xcassets/LaunchImages.launchimage/Default-Portrait~ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.iOS/Resources/Media.xcassets/LaunchImages.launchimage/Default-Portrait~ipad.png -------------------------------------------------------------------------------- /Api/OneDrive/Models/OneDriveLink.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | namespace OneDrive 3 | { 4 | public class OneDriveLink 5 | { 6 | public string Type { get; set; } 7 | 8 | public string WebUrl { get; set; } 9 | } 10 | } 11 | 12 | -------------------------------------------------------------------------------- /MusicPlayer.iOS/Resources/Media.xcassets/AppIcons.appiconset/Icon-iPad-Spotlight-iOS7@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.iOS/Resources/Media.xcassets/AppIcons.appiconset/Icon-iPad-Spotlight-iOS7@2x.png -------------------------------------------------------------------------------- /MusicPlayer.iOS/Resources/Media.xcassets/LaunchImages.launchimage/Default-Landscape~ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.iOS/Resources/Media.xcassets/LaunchImages.launchimage/Default-Landscape~ipad.png -------------------------------------------------------------------------------- /MusicPlayer.iOS/Resources/Media.xcassets/LaunchImages.launchimage/Default-Portrait~ipad@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.iOS/Resources/Media.xcassets/LaunchImages.launchimage/Default-Portrait~ipad@2x.png -------------------------------------------------------------------------------- /Test/TestCloud.iOS/Constants.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | namespace TestCloud.iOS 3 | { 4 | public static class Constants 5 | { 6 | public const string Username = ""; 7 | public const string Password = ""; 8 | } 9 | } 10 | 11 | -------------------------------------------------------------------------------- /MusicPlayer.iOS/Resources/Media.xcassets/LaunchImages.launchimage/Default-Landscape~ipad@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Clancey/gMusic/HEAD/MusicPlayer.iOS/Resources/Media.xcassets/LaunchImages.launchimage/Default-Landscape~ipad@2x.png -------------------------------------------------------------------------------- /Api/AmazonApi/CloudDrive/Account/CloudDataTotals.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Amazon.CloudDrive 4 | { 5 | public class CloudDataTotals 6 | { 7 | public long Bytes { get; set; } 8 | public long Count { get; set; } 9 | } 10 | } -------------------------------------------------------------------------------- /MusicPlayer.OSX/Views/Cells/ImageCellView.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using AppKit; 3 | 4 | namespace MusicPlayer 5 | { 6 | public class ImageCellView : NSImageView 7 | { 8 | public ImageCellView () 9 | { 10 | } 11 | } 12 | } 13 | 14 | -------------------------------------------------------------------------------- /MusicPlayer.iOS/Entitlements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /Api/AmazonApi/CloudDrive/Nodes/Models/ParentMap.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | 4 | namespace Amazon.CloudDrive 5 | { 6 | public class ParentMap 7 | { 8 | public List Folder { get; set; } 9 | } 10 | } -------------------------------------------------------------------------------- /MusicPlayer.OSX/Views/Cells/SpinnerCell.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using SimpleTables.Cells; 3 | 4 | namespace MusicPlayer.Cells 5 | { 6 | public class SpinnerCell : Cell 7 | { 8 | public SpinnerCell () 9 | { 10 | } 11 | } 12 | } 13 | 14 | -------------------------------------------------------------------------------- /MusicPlayer.Shared/Models/PlaylistType.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace MusicPlayer.Models 6 | { 7 | public enum PlaylistType 8 | { 9 | Normal, 10 | Endless 11 | } 12 | } -------------------------------------------------------------------------------- /Test/ScreenShotTaker/packages.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /MusicPlayer.OSX/ApiConstants.Mac.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | namespace MusicPlayer 3 | { 4 | internal static partial class ApiConstants 5 | { 6 | internal const string InsightsApiKey = "8a4528c67333db9635ab1577bcb3cc08e1e12037"; 7 | } 8 | } 9 | 10 | -------------------------------------------------------------------------------- /MusicPlayer.Shared/Models/MediaType.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace MusicPlayer.Models 6 | { 7 | public enum MediaType 8 | { 9 | Audio, 10 | Video, 11 | Photo 12 | } 13 | } -------------------------------------------------------------------------------- /MusicPlayer.Droid/Cells/PlaylistSongCell.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using MusicPlayer.Droid; 3 | namespace MusicPlayer.Cells 4 | { 5 | public class PlaylistSongCell : SongCell 6 | { 7 | public PlaylistSongCell() 8 | { 9 | } 10 | } 11 | } 12 | 13 | -------------------------------------------------------------------------------- /MusicPlayer.Droid/Cells/RadioStationCell.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using MusicPlayer.Droid; 3 | namespace MusicPlayer.Cells 4 | { 5 | public class RadioStationCell : SongCell 6 | { 7 | public RadioStationCell() 8 | { 9 | } 10 | } 11 | } 12 | 13 | -------------------------------------------------------------------------------- /MusicPlayer.OSX/Controls/INavigationItem.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace MusicPlayer 4 | { 5 | public interface INavigationItem 6 | { 7 | string Title {get;} 8 | NSNavigationController NavigationController {get;set;} 9 | } 10 | } 11 | 12 | -------------------------------------------------------------------------------- /MusicPlayer.Shared/Models/StreamQuality.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace MusicPlayer.Models 6 | { 7 | public enum StreamQuality 8 | { 9 | Low, 10 | Medium, 11 | High, 12 | } 13 | } -------------------------------------------------------------------------------- /Api/OneDrive/Models/OneDriveImage.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | namespace OneDrive 3 | { 4 | public class OneDriveImage 5 | { 6 | public int Width { get; set; } 7 | public int Height { get; set; } 8 | public string Url { get; set; } 9 | } 10 | } 11 | 12 | -------------------------------------------------------------------------------- /Api/OneDrive/Models/OneDriveSpecialFolder.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | namespace OneDrive 3 | { 4 | public class OneDriveSpecialFolder 5 | { 6 | public OneDriveSpecialFolder() 7 | { 8 | } 9 | 10 | public string Name { get; set; } 11 | } 12 | } 13 | 14 | -------------------------------------------------------------------------------- /Api/AmazonApi/CloudDrive/Account/CloudDataUsage.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Amazon.CloudDrive 4 | { 5 | public class CloudDataUsage 6 | { 7 | public CloudDataTotals Total { get; set; } 8 | public CloudDataTotals Billable { get; set; } 9 | } 10 | } -------------------------------------------------------------------------------- /Api/AmazonApi/CloudDrive/Nodes/Models/ContentNodeImageProperties.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Amazon.CloudDrive 4 | { 5 | public class ContentNodeImageProperties 6 | { 7 | public int Width { get; set; } 8 | 9 | public int Height { get; set; } 10 | } 11 | } -------------------------------------------------------------------------------- /MusicPlayer.OSX/Views/AlbumDetailViewController.designer.cs: -------------------------------------------------------------------------------- 1 | namespace MusicPlayer 2 | { 3 | 4 | // Should subclass AppKit.NSViewController 5 | [Foundation.Register ("AlbumDetailViewController")] 6 | public partial class AlbumDetailViewController 7 | { 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /MusicPlayer.Shared/Models/RepeatMode.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace MusicPlayer.Models 6 | { 7 | public enum RepeatMode 8 | { 9 | NoRepeat = 0, 10 | RepeatAll = 1, 11 | RepeatOne = 2, 12 | } 13 | } -------------------------------------------------------------------------------- /Api/OneDrive/Models/OneDriveError.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | namespace OneDrive 3 | { 4 | public class OneDriveError 5 | { 6 | public string Code { get; set; } 7 | public string Message { get; set; } 8 | public OneDriveError InnerError { get; set; } 9 | } 10 | } 11 | 12 | -------------------------------------------------------------------------------- /MusicPlayer.Droid/Models/MenuItem.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace MusicPlayer 4 | { 5 | public class MenuItem 6 | { 7 | public MenuItem () 8 | { 9 | } 10 | public string Title { get; set;} 11 | public Action Tapped {get;set;} 12 | } 13 | } 14 | 15 | -------------------------------------------------------------------------------- /MusicPlayer.OSX/Menu/MenuElement.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using AppKit; 3 | 4 | namespace MusicPlayer 5 | { 6 | public class MenuElement : Element 7 | { 8 | public NSView NavigateView { get; set; } 9 | 10 | public MenuElement () 11 | { 12 | } 13 | } 14 | } 15 | 16 | -------------------------------------------------------------------------------- /MusicPlayer.Shared/Models/PlaybackState.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace MusicPlayer.Models 6 | { 7 | public enum PlaybackState 8 | { 9 | Stopped, 10 | Buffering, 11 | Playing, 12 | Paused, 13 | } 14 | } -------------------------------------------------------------------------------- /Api/OneDrive/Responses/OneDriveShareResponse.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | namespace OneDrive 3 | { 4 | public class OneDriveShareResponse : OneDriveResponse 5 | { 6 | public OneDriveShareResponse() 7 | { 8 | } 9 | public OneDriveLink Link { get; set; } 10 | } 11 | } 12 | 13 | -------------------------------------------------------------------------------- /MusicPlayer.Shared/Models/RadioStationArtwork.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace MusicPlayer.Models 6 | { 7 | public class RadioStationArtwork : Artwork 8 | { 9 | public string StationId { get; set; } 10 | } 11 | } -------------------------------------------------------------------------------- /Api/SoundCloud/Models/SUser.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | namespace SoundCloud 3 | { 4 | public class SUser 5 | { 6 | public string Id { get; set; } 7 | public string Permalink { get; set; } 8 | public string Username { get; set; } 9 | public string Uri { get; set; } 10 | } 11 | } 12 | 13 | -------------------------------------------------------------------------------- /MusicPlayer.Shared/WebServer/PathAttribute.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | namespace MusicPlayer.Server 3 | { 4 | public class PathAttribute : Attribute 5 | { 6 | public PathAttribute (string path) 7 | { 8 | Path = path; 9 | } 10 | public string Path { get; set; } 11 | } 12 | } 13 | 14 | -------------------------------------------------------------------------------- /MusicPlayer.Droid/Helpers/Device.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | 6 | namespace MusicPlayer 7 | { 8 | internal static class Device 9 | { 10 | public static string Name {get;} = Android.OS.Build.User.Normalize(); 11 | 12 | } 13 | } -------------------------------------------------------------------------------- /MusicPlayer.OSX/Views/AlbumDetailsViewControllerController.designer.cs: -------------------------------------------------------------------------------- 1 | namespace MusicPlayer 2 | { 3 | 4 | // Should subclass AppKit.NSViewController 5 | [Foundation.Register ("AlbumDetailsViewControllerController")] 6 | public partial class AlbumDetailsViewControllerController 7 | { 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /MusicPlayer.Shared/Models/Scrobbling/NowPlayingEvent.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace MusicPlayer.Models.Scrobbling 6 | { 7 | internal class NowPlayingEvent : SongPlaybackEvent 8 | { 9 | public double Duration { get; set; } 10 | } 11 | } -------------------------------------------------------------------------------- /MusicPlayer.OSX/Main.cs: -------------------------------------------------------------------------------- 1 | using AppKit; 2 | 3 | namespace MusicPlayer.OSX 4 | { 5 | static class MainClass 6 | { 7 | static void Main (string[] args) 8 | { 9 | 10 | NSApplication.CheckForIllegalCrossThreadCalls = false; 11 | NSApplication.Init (); 12 | NSApplication.Main (args); 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Test/TestCloud.iOS/packages.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /Api/AmazonApi/CloudDrive/Account/CloudAccountInfoResponse.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using MusicPlayer.Api; 3 | using SimpleAuth; 4 | 5 | namespace Amazon.CloudDrive 6 | { 7 | public class CloudAccountInfoResponse : ApiResponse 8 | { 9 | public string TermsOfUse { get; set; } 10 | public string Status { get; set; } 11 | } 12 | } -------------------------------------------------------------------------------- /MusicPlayer.Shared/Helpers/JsonContent.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace System.Net.Http 6 | { 7 | internal class JsonContent : StringContent 8 | { 9 | public JsonContent(string json) : base(json, Encoding.UTF8, "application/json") 10 | { 11 | } 12 | } 13 | } -------------------------------------------------------------------------------- /MusicPlayer.Shared/Managers/ManagerBase.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | using MusicPlayer.Models; 5 | 6 | namespace MusicPlayer.Managers 7 | { 8 | public class ManagerBase : BaseModel where T : new() 9 | { 10 | public static T Shared { get; set; } = new T(); 11 | } 12 | } -------------------------------------------------------------------------------- /Api/OneDrive/Responses/OneDriveDeltaResponse.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | 4 | namespace OneDrive 5 | { 6 | public class OneDriveDeltaResponse : OneDriveResponse 7 | { 8 | public OneDriveDeltaResponse() 9 | { 10 | } 11 | 12 | public List Value { get; set; } 13 | } 14 | } 15 | 16 | -------------------------------------------------------------------------------- /MusicPlayer.Shared/Playback/IEqualizer.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Threading.Tasks; 3 | 4 | namespace MusicPlayer.Playback 5 | { 6 | public interface IEqualizer 7 | { 8 | Task ApplyEqualizer(Equalizer.Band[] bands); 9 | void UpdateBand(int band, float gain); 10 | bool Active { get; set; } 11 | void Clear(); 12 | } 13 | } -------------------------------------------------------------------------------- /Api/SoundCloud/SoundCloudAccount.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using SimpleAuth; 3 | namespace SoundCloud 4 | { 5 | public class SoundCloudAccount : OAuthAccount 6 | { 7 | public SoundCloudAccount() 8 | { 9 | } 10 | public override bool IsValid() 11 | { 12 | return !string.IsNullOrWhiteSpace(Token); 13 | } 14 | } 15 | } 16 | 17 | -------------------------------------------------------------------------------- /MusicPlayer.Droid/ApiConstants.Droid.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | namespace MusicPlayer 3 | { 4 | internal static partial class ApiConstants 5 | { 6 | internal const string InsightsApiKey = "698a0c95b8ea36a99ea742e946b84d0324545604"; 7 | internal const string MobileCenterApiKey = "14a0c85f-5332-447d-9fba-66622adc3e7d"; 8 | } 9 | } 10 | 11 | -------------------------------------------------------------------------------- /MusicPlayer.Shared/Models/UserDetails.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | 4 | namespace MusicPlayer 5 | { 6 | public class UserDetails 7 | { 8 | public UserDetails () 9 | { 10 | } 11 | public string Email {get;set;} 12 | 13 | public Dictionary UserData {get;set;} 14 | 15 | } 16 | } 17 | 18 | -------------------------------------------------------------------------------- /MusicPlayer.OSX/BottomView.cs: -------------------------------------------------------------------------------- 1 | // This file has been autogenerated from a class added in the UI designer. 2 | 3 | using System; 4 | 5 | using Foundation; 6 | using AppKit; 7 | 8 | namespace MusicPlayer 9 | { 10 | public partial class BottomView : NSView 11 | { 12 | public BottomView (IntPtr handle) : base (handle) 13 | { 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /MusicPlayer.Shared/Models/DownloadUrlData.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace MusicPlayer.Models 6 | { 7 | public class DownloadUrlData 8 | { 9 | public string Url { get; set; } 10 | public Dictionary Headers { get; set; } = new Dictionary(); 11 | } 12 | } -------------------------------------------------------------------------------- /MusicPlayer.Droid/Helpers/DateTimeUtils.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace MusicPlayer 4 | { 5 | public static class DateTimeUtils 6 | { 7 | public static DateTime ToDateTime(this Java.Util.Date date) 8 | { 9 | var epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); 10 | return epoch.AddMilliseconds(date.Time); 11 | } 12 | } 13 | } 14 | 15 | -------------------------------------------------------------------------------- /MusicPlayer.OSX/ViewModels/ArtistAlbumsViewModel.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace MusicPlayer 4 | { 5 | public partial class ArtistAlbumsViewModel 6 | { 7 | public override nfloat GetRowHeight (AppKit.NSTableView tableView, nint row) 8 | { 9 | var cell = GetICell (row) as AlbumDetailsCell; 10 | return cell.GetHeight (); 11 | } 12 | } 13 | } 14 | 15 | -------------------------------------------------------------------------------- /Api/AmazonApi/CloudDrive/Account/CloudEndpointResponse.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using MusicPlayer.Api; 3 | using SimpleAuth; 4 | 5 | namespace Amazon.CloudDrive 6 | { 7 | public class CloudEndpointResponse : ApiResponse 8 | { 9 | public bool CustomerExists { get; set; } 10 | public string ContentUrl { get; set; } 11 | public string MetadataUrl { get; set; } 12 | } 13 | } -------------------------------------------------------------------------------- /MusicPlayer.Shared/Models/ServiceType.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace MusicPlayer.Api 6 | { 7 | public enum ServiceType 8 | { 9 | Google = 1, 10 | iPod = 2, 11 | Amazon = 3, 12 | DropBox = 4, 13 | YouTube = 5, 14 | FileSystem = 6, 15 | SoundCloud = 7, 16 | OneDrive, 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Api/SoundCloud/Models/SApiResponse.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using Newtonsoft.Json; 4 | namespace SoundCloud 5 | { 6 | public class SApiResponse 7 | { 8 | [JsonPropertyAttribute("collection")] 9 | public List Items { get; set; } 10 | 11 | [JsonProperty("next_href")] 12 | public string NextUrl { get; set; } 13 | } 14 | } 15 | 16 | -------------------------------------------------------------------------------- /MusicPlayer.OSX/App.OSX.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Threading.Tasks; 3 | using MusicPlayer.Managers; 4 | 5 | namespace MusicPlayer 6 | { 7 | public static partial class App 8 | { 9 | 10 | public static async Task NativeStart() 11 | { 12 | 13 | PlaybackManager.Shared.Init(); 14 | await BackgroundDownloadManager.Shared.Init(); 15 | } 16 | } 17 | } 18 | 19 | -------------------------------------------------------------------------------- /MusicPlayer.Shared/Helpers/Spinner.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace MusicPlayer 6 | { 7 | internal class Spinner : IDisposable 8 | { 9 | public Spinner(string title) 10 | { 11 | App.ShowSpinner(title); 12 | } 13 | 14 | public void Dispose() 15 | { 16 | App.DismissSpinner(); 17 | } 18 | } 19 | } -------------------------------------------------------------------------------- /MusicPlayer.Shared/Models/EqualizerPresetValue.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using SQLite; 3 | 4 | namespace MusicPlayer.Models 5 | { 6 | public class EqualizerPresetValue 7 | { 8 | [PrimaryKey, AutoIncrement] 9 | public int Id { get; set; } 10 | 11 | public int EqualizerId { get; set; } 12 | public int Order { get; set; } 13 | public double Value { get; set; } 14 | } 15 | } -------------------------------------------------------------------------------- /MusicPlayer.iOS/App.iOS.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Threading.Tasks; 3 | using MusicPlayer.Managers; 4 | 5 | namespace MusicPlayer 6 | { 7 | public static partial class App 8 | { 9 | 10 | public static async Task NativeStart() 11 | { 12 | 13 | PlaybackManager.Shared.Init(); 14 | await BackgroundDownloadManager.Shared.Init(); 15 | } 16 | } 17 | } 18 | 19 | -------------------------------------------------------------------------------- /MusicPlayer.iOS/Cells/SettingsBooleanElement.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | using MonoTouch.Dialog; 5 | 6 | namespace MusicPlayer.iOS 7 | { 8 | class SettingsBooleanElement : BooleanElement 9 | { 10 | public SettingsBooleanElement(string title, bool value, Action valueChanged) : base(title, value) 11 | { 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable/default_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 9 | -------------------------------------------------------------------------------- /Api/AmazonApi/CloudDrive/Nodes/Filters/NodeOrderBy.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Amazon.CloudDrive 4 | { 5 | public class NodeOrderBy 6 | { 7 | public string Property { get; set; } 8 | 9 | public NodeOrderByDirection Direction { get; set; } 10 | 11 | public override string ToString() 12 | { 13 | return string.Format("\"{0} {1}\"", NodeFilter.EscapeValue(Property), Direction); 14 | } 15 | } 16 | } -------------------------------------------------------------------------------- /MusicPlayer.OSX/Controls/PanaramaView.cs: -------------------------------------------------------------------------------- 1 | //using System; 2 | //using AppKit; 3 | // 4 | //namespace MusicPlayer 5 | //{ 6 | // public class PanaramaView : NSView 7 | // { 8 | // NSScrollView scrollView; 9 | // public float ColumnWidth { get; set;} = 320; 10 | // public PanaramaView () 11 | // { 12 | // 13 | // } 14 | // NSView Views 15 | // void SetupContent() 16 | // { 17 | // 18 | // } 19 | // } 20 | //} 21 | // 22 | -------------------------------------------------------------------------------- /MusicPlayer.OSX/Helpers/DetatchableNSPopoover.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using AppKit; 3 | using Foundation; 4 | namespace MusicPlayer 5 | { 6 | public class DetatchableNSPopoover : NSPopover, INSPopoverDelegate 7 | { 8 | public DetatchableNSPopoover() 9 | { 10 | this.Delegate = this; 11 | } 12 | 13 | [ExportAttribute("popoverShouldDetach:")] 14 | public bool ShouldDetach(NSPopover popover) => true; 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /Api/OneDrive/Models/OneDriveIdentitySet.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | namespace OneDrive 4 | { 5 | public class OneDriveIdentitySet 6 | { 7 | public OneDriveIdentity Application { get; set; } 8 | 9 | public OneDriveIdentity Device { get; set; } 10 | 11 | public OneDriveIdentity User { get; set; } 12 | 13 | 14 | public Dictionary AdditionalData { get; set; } 15 | } 16 | } 17 | 18 | -------------------------------------------------------------------------------- /MusicPlayer.OSX/Entitlements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.assets.music.read-write 6 | 7 | com.apple.security.network.client 8 | 9 | com.apple.security.network.server 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /MusicPlayer.OSX/SidebarTableCellView.cs: -------------------------------------------------------------------------------- 1 | // This file has been autogenerated from a class added in the UI designer. 2 | 3 | using System; 4 | 5 | using Foundation; 6 | using AppKit; 7 | 8 | namespace MusicPlayer 9 | { 10 | public partial class SidebarTableCellView : NSTableCellView 11 | { 12 | public SidebarTableCellView() 13 | { 14 | 15 | } 16 | public SidebarTableCellView (IntPtr handle) : base (handle) 17 | { 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /MusicPlayer.iOS/Helpers/TableViewExtensions.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | using UIKit; 5 | 6 | namespace MusicPlayer 7 | { 8 | public static class TableViewExtensions 9 | { 10 | public static T DequeueReusableCell(this UITableView tv, string id) where T : UITableViewCell, new () 11 | { 12 | var cell = tv.DequeueReusableCell(id) as T ?? new T(); 13 | return cell; 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /MusicPlayer.iOS/SetupAppStore.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | echo 'Set Bundle ID to com.youriisolutions.gMusic2' 4 | /usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier com.youriisolutions.gMusic2" Info.plist 5 | /usr/libexec/PlistBuddy -c "Set :CFBundleDisplayName gMusic" Info.plist 6 | /usr/libexec/PlistBuddy -c "Delete :keychain-access-groups:0" Entitlements.plist 7 | /usr/libexec/PlistBuddy -c "Add :keychain-access-groups:0 string group.com.iis.music" Entitlements.plist -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | 4 | # Custom for Visual Studio 5 | *.cs diff=csharp 6 | 7 | # Standard to msysgit 8 | *.doc diff=astextplain 9 | *.DOC diff=astextplain 10 | *.docx diff=astextplain 11 | *.DOCX diff=astextplain 12 | *.dot diff=astextplain 13 | *.DOT diff=astextplain 14 | *.pdf diff=astextplain 15 | *.PDF diff=astextplain 16 | *.rtf diff=astextplain 17 | *.RTF diff=astextplain 18 | -------------------------------------------------------------------------------- /Api/OneDrive/Models/OneDriveResponse.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Newtonsoft.Json; 3 | 4 | namespace OneDrive 5 | { 6 | public class OneDriveResponse 7 | { 8 | public OneDriveResponse() 9 | { 10 | } 11 | public OneDriveError Error { get; set; } 12 | 13 | 14 | [JsonProperty("@odata.nextLink")] 15 | public string NextLink { get; set; } 16 | 17 | [JsonProperty("@delta.token")] 18 | public string DeltaToken { get; set; } 19 | } 20 | } 21 | 22 | -------------------------------------------------------------------------------- /MusicPlayer.Droid/UI/PopupManager.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Threading.Tasks; 3 | using MusicPlayer.Managers; 4 | namespace MusicPlayer 5 | { 6 | public class PopupManager : ManagerBase 7 | { 8 | public PopupManager () 9 | { 10 | } 11 | 12 | public Task> GetCredentials (string title, string details = "", string url = "") 13 | { 14 | throw new NotImplementedException (); 15 | } 16 | } 17 | } 18 | 19 | -------------------------------------------------------------------------------- /MusicPlayer.iOS/ApiConstants.iOS.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | namespace MusicPlayer 3 | { 4 | internal static partial class ApiConstants 5 | { 6 | internal const string InsightsApiKey = "d83993859d287c6a57666d86a482272932a78a65"; 7 | #if APPSTORE 8 | internal const string MobileCenterApiKey = "82394013-5db8-4cd7-920d-ccefe5ea6185"; 9 | #else 10 | internal const string MobileCenterApiKey = "e1552973-f10e-43a7-8529-fa1cf8082bd8"; 11 | #endif 12 | } 13 | } 14 | 15 | -------------------------------------------------------------------------------- /Api/AmazonApi/CloudDrive/Account/CloudUsageResponse.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using MusicPlayer.Api; 3 | using SimpleAuth; 4 | 5 | namespace Amazon.CloudDrive 6 | { 7 | public class CloudUsageResponse : ApiResponse 8 | { 9 | public DateTime LastCalculated { get; set; } 10 | public CloudDataUsage Other { get; set; } 11 | public CloudDataUsage Doc { get; set; } 12 | public CloudDataUsage Photo { get; set; } 13 | public CloudDataUsage Video { get; set; } 14 | } 15 | } -------------------------------------------------------------------------------- /MusicPlayer.Shared/Models/ArtistArtwork.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | using SQLite; 5 | 6 | namespace MusicPlayer.Models 7 | { 8 | internal class TempArtistArtwork : ArtistArtwork 9 | { 10 | } 11 | 12 | public class ArtistArtwork : Artwork 13 | { 14 | [Indexed] 15 | public string ArtistId { get; set; } 16 | 17 | public override void SetId() 18 | { 19 | Id = $"{ArtistId} - {Url}"; 20 | } 21 | } 22 | } -------------------------------------------------------------------------------- /MusicPlayer.OSX/Native/PopupManager.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using MusicPlayer.Managers; 3 | using System.Threading.Tasks; 4 | 5 | namespace MusicPlayer 6 | { 7 | public class PopupManager : ManagerBase 8 | { 9 | public PopupManager () 10 | { 11 | } 12 | 13 | public async Task> GetCredentials(string title, string details = "", string url = "") 14 | { 15 | throw new NotImplementedException (); 16 | } 17 | 18 | 19 | } 20 | } 21 | 22 | -------------------------------------------------------------------------------- /MusicPlayer.OSX/CollectionView.cs: -------------------------------------------------------------------------------- 1 | // This file has been autogenerated from a class added in the UI designer. 2 | 3 | using System; 4 | 5 | using Foundation; 6 | using AppKit; 7 | 8 | namespace MusicPlayer 9 | { 10 | public partial class CollectionView : NSScrollView 11 | { 12 | public CollectionView (IntPtr handle) : base (handle) 13 | { 14 | } 15 | [Export("initWithCoder:")] 16 | public CollectionView (NSCoder coder) : base (coder) 17 | { 18 | 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /MusicPlayer.OSX/Views/SimpleButton.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using AppKit; 3 | namespace AppKit 4 | { 5 | public class SimpleButton : NSButton 6 | { 7 | public Action Clicked { get; set; } 8 | public SimpleButton() 9 | { 10 | //button.Image = svg.LoadImageFromSvg(new NGraphics.Size(25, 25)); 11 | Bordered = false; 12 | Activated += (sender, e) => Clicked?.Invoke(this); 13 | //button.ImagePosition = NSCellImagePosition.ImageOnly; 14 | } 15 | 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /MusicPlayer.Shared/Models/ApiModel.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using SQLite; 3 | using MusicPlayer.Api; 4 | 5 | namespace MusicPlayer 6 | { 7 | public class ApiModel 8 | { 9 | public int Id { get; set; } 10 | 11 | public ServiceType Service { get; set; } 12 | 13 | public string Description { get; set; } 14 | 15 | public string UserName { get; set; } 16 | 17 | public string DeviceId { get; set; } 18 | 19 | [MaxLength(500)] 20 | public string ExtraData { get; set; } 21 | } 22 | } -------------------------------------------------------------------------------- /Api/AmazonApi/CloudDrive/Nodes/Filters/NodeTypeFilter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Amazon.CloudDrive 4 | { 5 | public class NodeTypeFilter : NodeFilter 6 | { 7 | #region implemented abstract members of NodeFilter 8 | 9 | public NodeType Type { get; set; } 10 | 11 | protected override string Name 12 | { 13 | get { return "kind"; } 14 | } 15 | 16 | protected override string Value 17 | { 18 | get { return Type.ToString(); } 19 | } 20 | 21 | #endregion 22 | } 23 | } -------------------------------------------------------------------------------- /Api/AmazonApi/CloudDrive/Nodes/Requests/CloudNodeRequests.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Collections; 5 | using MusicPlayer.Api; 6 | using Newtonsoft.Json; 7 | using SimpleAuth; 8 | 9 | namespace Amazon.CloudDrive 10 | { 11 | public class CloudNodeResponse : ApiResponse 12 | { 13 | public long Count { get; set; } 14 | 15 | public string NextToken { get; set; } 16 | 17 | public List Data { get; set; } 18 | } 19 | } -------------------------------------------------------------------------------- /Api/OneDrive/Models/OneDriveAudio.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | namespace OneDrive 3 | { 4 | public class OneDriveAudio 5 | { 6 | public string Album { get; set; } 7 | public string Artist { get; set; } 8 | public int Bitrate { get; set; } 9 | public int Duration { get; set; } 10 | public string Genre { get; set; } 11 | public bool HasDrm { get; set; } 12 | public string Title { get; set; } 13 | public int Track { get; set; } 14 | public int Year { get; set; } 15 | } 16 | } 17 | 18 | -------------------------------------------------------------------------------- /MusicPlayer.OSX/CollectionView.designer.cs: -------------------------------------------------------------------------------- 1 | // WARNING 2 | // 3 | // This file has been generated automatically by Xamarin Studio to store outlets and 4 | // actions made in the UI designer. If it is removed, they will be lost. 5 | // Manual changes to this file may not be handled correctly. 6 | // 7 | using Foundation; 8 | using System.CodeDom.Compiler; 9 | 10 | namespace MusicPlayer 11 | { 12 | [Register ("CollectionView")] 13 | partial class CollectionView 14 | { 15 | 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /MusicPlayer.Shared/Models/AlbumArtwork.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | using MusicPlayer.Models; 5 | using SQLite; 6 | 7 | namespace MusicPlayer.Models 8 | { 9 | internal class TempAlbumArtwork : AlbumArtwork 10 | { 11 | } 12 | 13 | public class AlbumArtwork : Artwork 14 | { 15 | [Indexed] 16 | public string AlbumId { get; set; } 17 | 18 | 19 | public override void SetId() 20 | { 21 | Id = $"{AlbumId} - {Url}"; 22 | } 23 | } 24 | } -------------------------------------------------------------------------------- /mobile-center-post-clone.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | if [[ -z "${ApiConstantsUrl}" ]]; then 3 | echo 'No ApiConstantsUrl' 4 | else 5 | echo 'Downloading ApiConstants.cs' 6 | curl -o ApiConstants.cs "${ApiConstantsUrl}" 7 | fi 8 | 9 | cd MusicPlayer.iOS 10 | if [[ ${MOBILECENTER_BRANCH} = "AppStoreRelease" ]] 11 | then 12 | echo 'App Store Build' 13 | sh ./SetupAppStore.sh 14 | else 15 | echo 'Normal Branch' 16 | sh ./SetupDev.sh 17 | fi 18 | cd .. 19 | 20 | sh ./Setup.sh 21 | -------------------------------------------------------------------------------- /Api/AmazonApi/CloudDrive/Nodes/Filters/ContentNameFilter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Amazon.CloudDrive 4 | { 5 | public class ContentNameFilter : NodeFilter 6 | { 7 | public string FileName { get; set; } 8 | 9 | #region implemented abstract members of NodeFilter 10 | 11 | protected override string Name 12 | { 13 | get { return "name"; } 14 | } 15 | 16 | protected override string Value 17 | { 18 | get { return EscapeValue(FileName); } 19 | } 20 | 21 | #endregion 22 | } 23 | } -------------------------------------------------------------------------------- /MusicPlayer.Shared/Models/AlbumIds.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | using MusicPlayer.Api; 5 | using SQLite; 6 | 7 | namespace MusicPlayer.Models 8 | { 9 | internal class TempAlbumIds : AlbumIds 10 | { 11 | } 12 | 13 | public class AlbumIds 14 | { 15 | [PrimaryKey] 16 | public string Id { get; set; } 17 | 18 | [Indexed] 19 | public string AlbumId { get; set; } 20 | 21 | [Indexed] 22 | public ServiceType ServiceType { get; set; } 23 | } 24 | } -------------------------------------------------------------------------------- /MusicPlayer.OSX/ViewController.designer.cs: -------------------------------------------------------------------------------- 1 | // WARNING 2 | // 3 | // This file has been generated automatically by Xamarin Studio to store outlets and 4 | // actions made in the UI designer. If it is removed, they will be lost. 5 | // Manual changes to this file may not be handled correctly. 6 | // 7 | using Foundation; 8 | 9 | namespace MusicPlayer.OSX 10 | { 11 | [Register ("ViewController")] 12 | partial class ViewController 13 | { 14 | void ReleaseDesignerOutlets () 15 | { 16 | } 17 | } 18 | } 19 | 20 | -------------------------------------------------------------------------------- /MusicPlayer.Shared/Models/ArtistIds.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | using MusicPlayer.Api; 5 | using SQLite; 6 | 7 | namespace MusicPlayer.Models 8 | { 9 | internal class TempArtistIds : ArtistIds 10 | { 11 | } 12 | 13 | public class ArtistIds : BaseModel 14 | { 15 | [PrimaryKey] 16 | public string Id { get; set; } 17 | 18 | [Indexed] 19 | public string ArtistId { get; set; } 20 | 21 | [Indexed] 22 | public ServiceType ServiceType { get; set; } 23 | } 24 | } -------------------------------------------------------------------------------- /MusicPlayer.iOS/Cells/MenuHeaderElement.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | using MonoTouch.Dialog; 5 | using UIKit; 6 | 7 | namespace MusicPlayer.iOS 8 | { 9 | class MenuHeaderElement : StringElement 10 | { 11 | public MenuHeaderElement(string caption) : base(caption) 12 | { 13 | } 14 | 15 | public override UITableViewCell GetCell(UITableView tv) 16 | { 17 | var cell = base.GetCell(tv); 18 | cell.StyleAsMenuHeaderElement(); 19 | return cell; 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /MusicPlayer.OSX/BottomView.designer.cs: -------------------------------------------------------------------------------- 1 | // WARNING 2 | // 3 | // This file has been generated automatically by Xamarin Studio to store outlets and 4 | // actions made in the UI designer. If it is removed, they will be lost. 5 | // Manual changes to this file may not be handled correctly. 6 | // 7 | using Foundation; 8 | using System.CodeDom.Compiler; 9 | 10 | namespace MusicPlayer 11 | { 12 | [Register ("BottomView")] 13 | partial class BottomView 14 | { 15 | 16 | void ReleaseDesignerOutlets () 17 | { 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /MusicPlayer.OSX/MainWindow.designer.cs: -------------------------------------------------------------------------------- 1 | // WARNING 2 | // 3 | // This file has been generated automatically by Xamarin Studio to store outlets and 4 | // actions made in the UI designer. If it is removed, they will be lost. 5 | // Manual changes to this file may not be handled correctly. 6 | // 7 | using Foundation; 8 | using System.CodeDom.Compiler; 9 | 10 | namespace MusicPlayer 11 | { 12 | [Register ("MainWindow")] 13 | partial class MainWindow 14 | { 15 | 16 | void ReleaseDesignerOutlets () 17 | { 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /MusicPlayer.iOS/Cells/BaseCell.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using SimpleTables; 3 | using UIKit; 4 | 5 | namespace MusicPlayer.Cells 6 | { 7 | public abstract class BaseCell : IBindingCell 8 | { 9 | WeakReference bindingContext; 10 | 11 | public object BindingContext 12 | { 13 | get { return bindingContext?.Target ?? null; } 14 | set { bindingContext = new WeakReference(value); } 15 | } 16 | 17 | #region ICell implementation 18 | 19 | public abstract UITableViewCell GetCell(UITableView tv); 20 | 21 | #endregion 22 | } 23 | } -------------------------------------------------------------------------------- /Api/AmazonApi/CloudDrive/Account/CloudQuotaResponse.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using MusicPlayer.Api; 4 | using SimpleAuth; 5 | 6 | namespace Amazon.CloudDrive 7 | { 8 | public class CloudQuotaResponse : ApiResponse 9 | { 10 | public List Plans { get; set; } 11 | public long Quota { get; set; } 12 | public string LastCalculated { get; set; } 13 | // public List grants { get; set; } 14 | // public List Benefits { get; set; } 15 | public long Available { get; set; } 16 | } 17 | } -------------------------------------------------------------------------------- /MusicPlayer.OSX/MainWindowView.designer.cs: -------------------------------------------------------------------------------- 1 | // WARNING 2 | // 3 | // This file has been generated automatically by Xamarin Studio to store outlets and 4 | // actions made in the UI designer. If it is removed, they will be lost. 5 | // Manual changes to this file may not be handled correctly. 6 | // 7 | using Foundation; 8 | using System.CodeDom.Compiler; 9 | 10 | namespace MusicPlayer 11 | { 12 | [Register ("MainWindowView")] 13 | partial class MainWindowView 14 | { 15 | 16 | void ReleaseDesignerOutlets () 17 | { 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /MusicPlayer.Shared/Managers/SearchManager.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using MusicPlayer.Managers; 3 | using System.Threading.Tasks; 4 | 5 | namespace MusicPlayer 6 | { 7 | public class SearchManager : ManagerBase 8 | { 9 | public SearchManager() 10 | { 11 | 12 | } 13 | 14 | public async Task GetLocalResults(string query) 15 | { 16 | return null; 17 | } 18 | 19 | public async Task GetSearchResults(string query, string providerId) 20 | { 21 | return null; 22 | } 23 | 24 | 25 | } 26 | } 27 | 28 | -------------------------------------------------------------------------------- /MusicPlayer.Shared/WebServer/LocalWebServer.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using MusicPlayer.Server; 3 | using System.Net.Sockets; 4 | using System.Net; 5 | 6 | namespace MusicPlayer 7 | { 8 | public class LocalWebServer : Server.WebServer 9 | { 10 | 11 | public static LocalWebServer Shared { get; set; } = new LocalWebServer (); 12 | 13 | public LocalWebServer (int webServerPort = 0) : base (webServerPort) 14 | { 15 | 16 | } 17 | public override void RegisterRoutes () 18 | { 19 | Router.AddRoute (); 20 | } 21 | 22 | } 23 | } 24 | 25 | -------------------------------------------------------------------------------- /Api/AmazonApi/CloudDrive/Nodes/Models/ContentNodeProperties.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Amazon.CloudDrive 4 | { 5 | public class ContentNodeProperties 6 | { 7 | public string ContentDate { get; set; } 8 | 9 | public string Md5 { get; set; } 10 | 11 | public string ContentType { get; set; } 12 | 13 | public ContentNodeVideoProperties Video { get; set; } 14 | 15 | public ContentNodeImageProperties image { get; set; } 16 | 17 | public int Version { get; set; } 18 | 19 | public int Size { get; set; } 20 | 21 | public string Extension { get; set; } 22 | } 23 | } -------------------------------------------------------------------------------- /MusicPlayer.OSX/AkavacheSqliteLinkerOverride.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Akavache.Sqlite3; 3 | 4 | // Note: This class file is *required* for iOS to work correctly, and is 5 | // also a good idea for Android if you enable "Link All Assemblies". 6 | namespace MusicPlayer 7 | { 8 | [Preserve] 9 | public static class LinkerPreserve 10 | { 11 | static LinkerPreserve() 12 | { 13 | throw new Exception(typeof(SQLitePersistentBlobCache).FullName); 14 | } 15 | } 16 | 17 | 18 | public class PreserveAttribute : Attribute 19 | { 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Api/AmazonApi/CloudDrive/Nodes/Filters/NodeFilter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Amazon.CloudDrive 4 | { 5 | public abstract class NodeFilter 6 | { 7 | protected abstract string Name { get; } 8 | 9 | protected virtual string Seperator 10 | { 11 | get { return ":"; } 12 | } 13 | 14 | protected abstract string Value { get; } 15 | 16 | public static string EscapeValue(string value) 17 | { 18 | return value.Replace(" ", "\\ "); 19 | } 20 | 21 | public override string ToString() 22 | { 23 | return string.Format("{0}{1}{2}", Name, Seperator, Value); 24 | } 25 | } 26 | } -------------------------------------------------------------------------------- /MusicPlayer.Droid/AkavacheSqliteLinkerOverride.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Akavache.Sqlite3; 3 | 4 | // Note: This class file is *required* for iOS to work correctly, and is 5 | // also a good idea for Android if you enable "Link All Assemblies". 6 | namespace MusicPlayer.Droid 7 | { 8 | [Preserve] 9 | public static class LinkerPreserve 10 | { 11 | static LinkerPreserve() 12 | { 13 | throw new Exception(typeof(SQLitePersistentBlobCache).FullName); 14 | } 15 | } 16 | 17 | 18 | public class PreserveAttribute : Attribute 19 | { 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /MusicPlayer.OSX/Helpers/Fonts.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | using AppKit; 5 | 6 | namespace MusicPlayer 7 | { 8 | internal static class Fonts 9 | { 10 | public static string NormalFontName => "SFUIText-Regular"; 11 | 12 | public static NSFont NormalFont(nfloat size) 13 | { 14 | return NSFont.FromFontName(NormalFontName, size); 15 | } 16 | 17 | public static string ThinFontName => "SFUIDisplay-Thin"; 18 | 19 | public static NSFont ThinFont(nfloat size) 20 | { 21 | return NSFont.FromFontName(ThinFontName, size); 22 | } 23 | } 24 | } -------------------------------------------------------------------------------- /MusicPlayer.iOS/ViewModels/BaseViewModel.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using UIKit; 3 | using MusicPlayer.iOS; 4 | 5 | namespace MusicPlayer.ViewModels 6 | { 7 | partial class BaseViewModel 8 | { 9 | //public BaseViewModel() 10 | //{ 11 | // UITableViewHeaderFooterView 12 | //} 13 | public override void WillDisplayHeaderView(UIKit.UITableView tableView, UIKit.UIView headerView, nint section) 14 | { 15 | //base.WillDisplayHeaderView(tableView, headerView, section); 16 | var view = headerView as UITableViewHeaderFooterView; 17 | view.StyleSectionHeader(); 18 | } 19 | 20 | } 21 | } 22 | 23 | -------------------------------------------------------------------------------- /MusicPlayer.Shared/Models/RadioStationSeed.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | using SQLite; 5 | 6 | namespace MusicPlayer.Models 7 | { 8 | public class RadioStationSeed 9 | { 10 | [PrimaryKey] 11 | public string Id {get; set; } 12 | 13 | [Indexed] 14 | public string StationId { get; set; } 15 | 16 | public string ItemId { get; set; } 17 | 18 | /// 19 | /// 3 = Artist 20 | /// 9 = Currated Station 21 | /// 22 | public int Kind { get; set; } 23 | 24 | public string Description {get; set; } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /MusicPlayer.OSX/Views/RadioStationListView.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using MusicPlayer.ViewModels; 3 | using MusicPlayer.Models; 4 | using AppKit; 5 | 6 | namespace MusicPlayer 7 | { 8 | public class RadioStationListView : BaseCollectionView 9 | { 10 | public RadioStationListView () 11 | { 12 | Frame = new CoreGraphics.CGRect (0, 0, 500, 500); 13 | Model = new RadioStationViewModel{ 14 | AutoPlaysOnSelect = false, 15 | }; 16 | } 17 | public bool IsIncluded 18 | { 19 | get{ return Model.IsIncluded; } 20 | set{ Model.IsIncluded = value; } 21 | } 22 | } 23 | } 24 | 25 | -------------------------------------------------------------------------------- /MusicPlayer.Shared/Managers/StateManager.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | using MusicPlayer.Data; 5 | using MusicPlayer.Models; 6 | 7 | namespace MusicPlayer.Managers 8 | { 9 | internal class StateManager : ManagerBase 10 | { 11 | public int GlobalEqualizerPreset { 12 | get { 13 | return Settings.EqualizerPreset; 14 | } 15 | set { 16 | Settings.EqualizerPreset = value; 17 | } 18 | } 19 | 20 | public bool EqualizerEnabled { 21 | get { return Settings.EqualizerEnabled; } 22 | set { Settings.EqualizerEnabled = value; } 23 | } 24 | } 25 | } -------------------------------------------------------------------------------- /MusicPlayer.iOS/Cells/SettingsSwitch.cs: -------------------------------------------------------------------------------- 1 | using MusicPlayer.Cells; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Text; 5 | 6 | namespace MusicPlayer.iOS 7 | { 8 | class SettingsSwitch : MenuSwitch 9 | { 10 | public SettingsSwitch(string text, bool value) : base(text, value) 11 | { 12 | 13 | } 14 | protected override void ApplyStyle(BooleanMenuElementCell cell) 15 | { 16 | base.ApplyStyle(cell); 17 | cell.ForceImage = false; 18 | cell.TextLabel.TextColor = Style.DefaultStyle.MainTextColor; 19 | cell.DetailTextLabel.TextColor = Style.DefaultStyle.MainTextColor; 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /MusicPlayer.Droid/Data/BackgroundDownloadManager.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Threading.Tasks; 3 | using MusicPlayer.Models; 4 | 5 | namespace MusicPlayer.Managers 6 | { 7 | public class BackgroundDownloadManager : ManagerBase 8 | { 9 | public void Init() 10 | { 11 | 12 | } 13 | public BackgroundDownloadManager() 14 | { 15 | 16 | } 17 | 18 | public int Count { get; set; } 19 | 20 | public Song PendingItemForRow(int row) 21 | { 22 | return null; 23 | } 24 | 25 | internal Task Download(Track track) 26 | { 27 | throw new NotImplementedException(); 28 | } 29 | } 30 | } 31 | 32 | -------------------------------------------------------------------------------- /MusicPlayer.Droid/UI/FullScreenPlayerActivity.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | 6 | using Android.App; 7 | using Android.Content; 8 | using Android.OS; 9 | using Android.Runtime; 10 | using Android.Views; 11 | using Android.Widget; 12 | 13 | namespace MusicPlayer.Droid.UI 14 | { 15 | [Activity(Label = "FullScreenPlayerActivity")] 16 | public class FullScreenPlayerActivity : Activity 17 | { 18 | protected override void OnCreate(Bundle savedInstanceState) 19 | { 20 | base.OnCreate(savedInstanceState); 21 | 22 | // Create your application here 23 | } 24 | } 25 | } -------------------------------------------------------------------------------- /MusicPlayer.Shared/Helpers/MathExtensions.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | namespace MusicPlayer 3 | { 4 | public static class MathExtensions 5 | { 6 | 7 | public static double SafeDivideByZero(this double inDouble, double divisor) => divisor.IsZero() ? 0 : inDouble / divisor; 8 | public static bool IsZero(this double inDouble) => Math.Abs(inDouble) < Double.Epsilon; 9 | public static bool IsZero(this float inFloat) => Math.Abs(inFloat) < float.Epsilon; 10 | public static bool IsNotZero(this float inFloat) => Math.Abs(inFloat) > float.Epsilon; 11 | public static bool IsNotZero(this double inDouble) => Math.Abs(inDouble) > Double.Epsilon; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /MusicPlayer.Shared/Models/Artwork.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | using MusicPlayer.Api; 5 | using SQLite; 6 | 7 | namespace MusicPlayer.Models 8 | { 9 | public class Artwork 10 | { 11 | [PrimaryKey, MaxLength(250)] 12 | public string Id { get; set; } 13 | 14 | public int Width { get; set; } 15 | public int Height { get; set; } 16 | public int Ratio { get; set; } 17 | 18 | [MaxLength(500)] 19 | public string Url { get; set; } 20 | 21 | public ServiceType ServiceType { get; set; } 22 | 23 | public virtual void SetId() 24 | { 25 | Id = $"{ServiceType} - {Url}"; 26 | } 27 | } 28 | } -------------------------------------------------------------------------------- /Api/AmazonApi/CloudDrive/Nodes/Enums.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Amazon.CloudDrive 4 | { 5 | public enum NodeAssetMapping 6 | { 7 | NONE, 8 | ALL, 9 | } 10 | 11 | public enum NodeFilterSeperator 12 | { 13 | OR, 14 | AND, 15 | } 16 | 17 | public enum NodeOrderByDirection 18 | { 19 | DESC, 20 | ASC, 21 | } 22 | 23 | public enum NodeType 24 | { 25 | FILE, 26 | FOLDER, 27 | ASSET, 28 | } 29 | 30 | public enum DateTimeFilterComparison 31 | { 32 | GreaterThan, 33 | GreaterThanOrEqualTo, 34 | LessThan, 35 | LessThanOrEqualTo, 36 | } 37 | 38 | public enum CloudNodeStatus 39 | { 40 | AVAILABLE, 41 | TRASH, 42 | } 43 | } -------------------------------------------------------------------------------- /Api/iPodApi/iPodApi.projitems: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | $(MSBuildAllProjects);$(MSBuildThisFileFullPath) 5 | true 6 | {DC4DD769-0B5D-4EFE-8CD0-5D26C05E7002} 7 | 8 | 9 | MusicPlayer.Api.iPodApi 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /MusicPlayer.OSX/Views/GenreListView.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using MusicPlayer.Models; 3 | using MusicPlayer.ViewModels; 4 | using AppKit; 5 | 6 | namespace MusicPlayer 7 | { 8 | public class GenreListView : BaseTableView 9 | { 10 | public GenreListView () 11 | { 12 | Frame = new CoreGraphics.CGRect (0, 0, 150, 1000); 13 | TableView.AddColumn (new NSTableColumn ("Artist"){ Title = "Artist" }); 14 | TableView.HeaderView = null; 15 | TableView.UsesAlternatingRowBackgroundColors = false; 16 | TableView.RowHeight = 55; 17 | TableView.SizeLastColumnToFit (); 18 | Model = new GenreViewModel (); 19 | } 20 | } 21 | } 22 | 23 | -------------------------------------------------------------------------------- /Api/FileSytemApi/FileSytemApi.projitems: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | $(MSBuildAllProjects);$(MSBuildThisFileFullPath) 5 | true 6 | {E9B08113-9737-485C-BD03-1B8EA850F242} 7 | 8 | 9 | MusicPlayer.Api 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /MusicPlayer.OSX/Views/ArtistListView.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using MusicPlayer.ViewModels; 3 | using MusicPlayer.Models; 4 | using AppKit; 5 | 6 | namespace MusicPlayer 7 | { 8 | public class ArtistListView : BaseTableView 9 | { 10 | public ArtistListView () 11 | { 12 | Frame = new CoreGraphics.CGRect (0, 0, 150, 1000); 13 | TableView.AddColumn (new NSTableColumn ("Artist"){ Title = "Artist"}); 14 | TableView.HeaderView = null; 15 | TableView.UsesAlternatingRowBackgroundColors = false; 16 | TableView.RowHeight = 55; 17 | TableView.SizeLastColumnToFit (); 18 | Model = new ArtistViewModel (); 19 | } 20 | } 21 | } 22 | 23 | -------------------------------------------------------------------------------- /MusicPlayer.iOS/Helpers/Fonts.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | using UIKit; 5 | 6 | namespace MusicPlayer.iOS 7 | { 8 | internal static class Fonts 9 | { 10 | public static string NormalFontName => "SFUIText-Regular"; 11 | 12 | public static UIFont NormalFont (nfloat size) 13 | { 14 | return UIFont.FromName (NormalFontName, size) ?? UIFont.SystemFontOfSize (size); 15 | } 16 | 17 | public static string ThinFontName => "SFUIDisplay-Thin"; 18 | 19 | public static UIFont ThinFont (nfloat size) 20 | { 21 | return UIFont.FromName (ThinFontName, size) ?? UIFont.SystemFontOfSize (size); 22 | } 23 | } 24 | } -------------------------------------------------------------------------------- /MusicPlayer.OSX/Views/Cells/BaseCell.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using SimpleTables; 3 | using Foundation; 4 | using AppKit; 5 | 6 | namespace MusicPlayer 7 | { 8 | public abstract class BaseCell : IBindingCell 9 | { 10 | WeakReference bindingContext; 11 | 12 | public object BindingContext 13 | { 14 | get { return bindingContext?.Target ?? null; } 15 | set { bindingContext = new WeakReference(value); } 16 | } 17 | 18 | #region ICell implementation 19 | public abstract NSView GetCell (NSTableView tableView, NSTableColumn tableColumn, NSObject owner); 20 | public abstract string GetCellText (NSTableColumn tableColumn); 21 | #endregion 22 | 23 | } 24 | } 25 | 26 | -------------------------------------------------------------------------------- /MusicPlayer.OSX/Views/Cells/MediaCollectionView.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using AppKit; 3 | using Foundation; 4 | using CoreGraphics; 5 | 6 | namespace MusicPlayer 7 | { 8 | [Register("MediaCollectionView")] 9 | public class MediaCollectionView : NSCollectionViewItem 10 | { 11 | public const string Key = "MediaCollectionView"; 12 | public MediaCollectionView () 13 | { 14 | } 15 | public MediaCollectionView(IntPtr handle) : base(handle) 16 | { 17 | this.TextField = new NSTextField (new CGRect(0,0,100,100)); 18 | this.View.AddSubview (new NSColorView (new CGRect (0, 0, 200, 200)) { 19 | BackgroundColor = NSColor.Black, 20 | }); 21 | } 22 | } 23 | } 24 | 25 | -------------------------------------------------------------------------------- /MusicPlayer.OSX/Views/PlaylistListView.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using MusicPlayer.ViewModels; 3 | using MusicPlayer.Models; 4 | using AppKit; 5 | 6 | namespace MusicPlayer 7 | { 8 | public class PlaylistListView : BaseTableView 9 | { 10 | public PlaylistListView () 11 | { 12 | Frame = new CoreGraphics.CGRect (0, 0, 150, 1000); 13 | TableView.AddColumn (new NSTableColumn ("Artist"){ Title = "Artist"}); 14 | TableView.HeaderView = null; 15 | TableView.UsesAlternatingRowBackgroundColors = false; 16 | TableView.RowHeight = 55; 17 | TableView.SizeLastColumnToFit (); 18 | Model = new PlaylistViewModel (); 19 | } 20 | } 21 | } 22 | 23 | -------------------------------------------------------------------------------- /Api/AmazonApi/CloudDrive/Nodes/Filters/DateTimeBetweenNodeFilter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Amazon.CloudDrive 4 | { 5 | public class DateTimeBetweenNodeFilter : NodeFilter 6 | { 7 | public string Field { get; set; } 8 | 9 | public DateTime StartDate { get; set; } 10 | 11 | public DateTime EndDate { get; set; } 12 | 13 | #region implemented abstract members of NodeFilter 14 | 15 | protected override string Name 16 | { 17 | get { return Field; } 18 | } 19 | 20 | 21 | protected override string Value 22 | { 23 | get { return string.Format("[{0} TO {1}]", StartDate.ToString("O"), EndDate.ToString("O")); } 24 | } 25 | 26 | #endregion 27 | } 28 | } -------------------------------------------------------------------------------- /Test/TestCloud.iOS/PopupMenuTest.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using NUnit.Framework; 3 | using Xamarin.UITest; 4 | 5 | namespace TestCloud.iOS 6 | { 7 | [TestFixture (Platform.iOS)] 8 | public class PopupMenuTest : BaseTestFixture 9 | { 10 | 11 | public PopupMenuTest(Platform platform) : base(platform) 12 | { 13 | 14 | } 15 | //[Test] 16 | //public void LongPressOnArtist () 17 | //{ 18 | // MenuTests.GotoArtist (App); 19 | // App.Tap (x => x.Class("MusicPlayer_iOS_SimpleButton").Marked("more").Index(0)); 20 | // App.Screenshot ("Artist Menu"); 21 | // App.Tap (x => x.Marked ("Shuffle")); 22 | // App.Screenshot("Shuffled Playback"); 23 | //} 24 | } 25 | } 26 | 27 | -------------------------------------------------------------------------------- /MusicPlayer.OSX/ViewController.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | using AppKit; 4 | using Foundation; 5 | 6 | namespace MusicPlayer.OSX 7 | { 8 | public partial class ViewController : NSViewController 9 | { 10 | public ViewController (IntPtr handle) : base (handle) 11 | { 12 | } 13 | 14 | public override void ViewDidLoad () 15 | { 16 | base.ViewDidLoad (); 17 | 18 | // Do any additional setup after loading the view. 19 | } 20 | 21 | public override NSObject RepresentedObject { 22 | get { 23 | return base.RepresentedObject; 24 | } 25 | set { 26 | base.RepresentedObject = value; 27 | // Update the view, if already loaded. 28 | } 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /MusicPlayer.iOS/Helpers/UIViewExtensions.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using UIKit; 3 | namespace MusicPlayer.iOS 4 | { 5 | public static class UIViewExtensions 6 | { 7 | public static bool IsLandscape (this UIView view) 8 | { 9 | var frame = view.Bounds; 10 | return frame.Width > frame.Height; 11 | } 12 | public static bool IsLandscape (this UIViewController vc) 13 | { 14 | return vc.View.IsLandscape (); 15 | } 16 | 17 | public static UIEdgeInsets GetSafeArea(this UIView view) 18 | { 19 | if (Device.IsIos11) 20 | return view.SafeAreaInsets; 21 | var margins = view.LayoutMargins; 22 | margins.Top = 64; 23 | return margins; 24 | } 25 | } 26 | } 27 | 28 | -------------------------------------------------------------------------------- /Test/TestCloud.iOS/BaseTestFixture.cs: -------------------------------------------------------------------------------- 1 | 2 | using NUnit.Framework; 3 | using System; 4 | using Xamarin.UITest; 5 | using System.Linq; 6 | 7 | namespace TestCloud.iOS 8 | { 9 | public partial class BaseTestFixture 10 | { 11 | protected IApp App; 12 | protected Platform platform; 13 | 14 | public BaseTestFixture (Platform platform) 15 | { 16 | this.platform = platform; 17 | } 18 | 19 | [SetUp] 20 | public void BeforeEachTest () 21 | { 22 | App = AppInitializer.StartApp (platform); 23 | if (RequiresLogin) 24 | LoginTest.CheckLogin (); 25 | } 26 | 27 | public virtual bool RequiresLogin 28 | { 29 | get{return true;} 30 | 31 | } 32 | } 33 | } 34 | 35 | -------------------------------------------------------------------------------- /MusicPlayer.OSX/Views/AlbumListView.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using MusicPlayer.ViewModels; 3 | using AppKit; 4 | using MusicPlayer.Models; 5 | 6 | namespace MusicPlayer 7 | { 8 | public class AlbumListView : BaseTableView 9 | { 10 | public AlbumListView () 11 | { 12 | Frame = new CoreGraphics.CGRect (0, 0, 150, 1000); 13 | TableView.AddColumn (new NSTableColumn ("Artist"){ Title = "Artist"}); 14 | TableView.HeaderView = null; 15 | TableView.UsesAlternatingRowBackgroundColors = false; 16 | TableView.RowHeight = 55; 17 | TableView.SizeLastColumnToFit (); 18 | Model = new AlbumViewModel{ 19 | ShowHeaders = true, 20 | }; 21 | } 22 | } 23 | } 24 | 25 | -------------------------------------------------------------------------------- /MusicPlayer.Droid/Properties/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /MusicPlayer.iOS/Native/AutolockPowerWatcher.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using MusicPlayer.Managers; 3 | using Plugin.Battery; 4 | using UIKit; 5 | using MusicPlayer.Data; 6 | namespace MusicPlayer.iOS 7 | { 8 | public class AutolockPowerWatcher : ManagerBase 9 | { 10 | public AutolockPowerWatcher() 11 | { 12 | CrossBattery.Current.BatteryChanged += (s,e) =>{ 13 | CheckStatus(); 14 | }; 15 | } 16 | public void CheckStatus() 17 | { 18 | UIApplication.SharedApplication.IdleTimerDisabled = ScreenManager.Shared.IsRunning || 19 | Settings.DisableAutoLock && CrossBattery.Current.PowerSource != Plugin.Battery.Abstractions.PowerSource.Battery; 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /MusicPlayer.Droid/Assets/AboutAssets.txt: -------------------------------------------------------------------------------- 1 | Any raw assets you want to be deployed with your application can be placed in 2 | this directory (and child directories) and given a Build Action of "AndroidAsset". 3 | 4 | These files will be deployed with you package and will be accessible using Android's 5 | AssetManager, like this: 6 | 7 | public class ReadAsset : Activity 8 | { 9 | protected override void OnCreate (Bundle bundle) 10 | { 11 | base.OnCreate (bundle); 12 | 13 | InputStream input = Assets.Open ("my_asset.txt"); 14 | } 15 | } 16 | 17 | Additionally, some Android functions will automatically load asset files: 18 | 19 | Typeface tf = Typeface.CreateFromAsset (Context.Assets, "fonts/samplefont.ttf"); -------------------------------------------------------------------------------- /MusicPlayer.OSX/SidebarTableCellView.designer.cs: -------------------------------------------------------------------------------- 1 | // WARNING 2 | // 3 | // This file has been generated automatically by Xamarin Studio to store outlets and 4 | // actions made in the UI designer. If it is removed, they will be lost. 5 | // Manual changes to this file may not be handled correctly. 6 | // 7 | using Foundation; 8 | using System.CodeDom.Compiler; 9 | 10 | namespace MusicPlayer 11 | { 12 | [Register ("SidebarTableCellView")] 13 | partial class SidebarTableCellView 14 | { 15 | [Outlet] 16 | AppKit.NSButton button { get; set; } 17 | 18 | void ReleaseDesignerOutlets () 19 | { 20 | if (button != null) { 21 | button.Dispose (); 22 | button = null; 23 | } 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /MusicPlayer.OSX/Native/BackgroundDownloadManager.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using MusicPlayer.Managers; 3 | using System.Threading.Tasks; 4 | using MusicPlayer.Models; 5 | 6 | namespace MusicPlayer 7 | { 8 | public class BackgroundDownloadManager: ManagerBase 9 | { 10 | public BackgroundDownloadManager () 11 | { 12 | } 13 | 14 | public async Task Download (Track track) 15 | { 16 | App.ShowNotImplmented(); 17 | } 18 | 19 | public int Count { 20 | get; 21 | set; 22 | } 23 | 24 | public Song PendingItemForRow (int row) 25 | { 26 | throw new NotImplementedException (); 27 | } 28 | 29 | public async Task Init () 30 | { 31 | 32 | } 33 | } 34 | } 35 | 36 | -------------------------------------------------------------------------------- /MusicPlayer.Shared/Helpers/ArrayExtensions.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections; 3 | using System.Linq; 4 | using System.Collections.Generic; 5 | 6 | namespace System 7 | { 8 | public static class ArrayExtensions 9 | { 10 | public static int IndexOf(this Array array, object item) 11 | { 12 | return Array.IndexOf(array, item); 13 | } 14 | 15 | public static void ForEach(this T[] array, Action action) 16 | { 17 | foreach (var a in array) 18 | { 19 | action(a); 20 | } 21 | } 22 | 23 | public static void ForEach(this IEnumerable enumeration, Action action) 24 | { 25 | foreach (T item in enumeration) 26 | { 27 | action(item); 28 | } 29 | } 30 | } 31 | } -------------------------------------------------------------------------------- /MusicPlayer.Shared/Helpers/IEnumberableExtension.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | 6 | namespace MusicPlayer 7 | { 8 | public static class IEnumberableExtension 9 | { 10 | public static async Task BatchForeach(this IEnumerable items, int batchSize,Func,Task> action) 11 | { 12 | int currentBatch = 0; 13 | bool hasMore = items.Any(); 14 | while (hasMore) { 15 | var itemsBatch = items.Skip(currentBatch * batchSize).Take(batchSize); 16 | hasMore = itemsBatch.Count() == batchSize; 17 | currentBatch++; 18 | var t = action(itemsBatch); 19 | await t; 20 | } 21 | } 22 | } 23 | } 24 | 25 | -------------------------------------------------------------------------------- /MusicPlayer.Shared/ViewModels/ArtistSongsViewModel.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | using MusicPlayer.Data; 5 | using MusicPlayer.Models; 6 | 7 | namespace MusicPlayer.ViewModels 8 | { 9 | class ArtistSongsViewModel : SongViewModel 10 | { 11 | 12 | Artist artist; 13 | 14 | public Artist Artist 15 | { 16 | set 17 | { 18 | var group = Database.Main.GetGroupInfo().Clone(); 19 | group.Filter = "ArtistId = @ArtistId"; 20 | group.Params["@ArtistId"] = value.Id; 21 | group.From = "Song"; 22 | Title = value.Name; 23 | GroupInfo = group; 24 | artist = value; 25 | } 26 | get { return artist; } 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /MusicPlayer.Shared/ViewModels/GenreAlbumsViewModel.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using MusicPlayer.ViewModels; 3 | using MusicPlayer.Models; 4 | 5 | namespace MusicPlayer 6 | { 7 | public class GenreAlbumsViewModel : AlbumViewModel 8 | { 9 | Genre genre; 10 | 11 | public Genre Genre 12 | { 13 | set 14 | { 15 | var group = new SimpleDatabase.GroupInfo 16 | { 17 | From = "Album", 18 | Params = { { "@GenreId", value.Id } }, 19 | Filter = "Id in (select distinct AlbumId from song where Genre = @GenreId )", 20 | OrderBy = "Year, NameNorm" 21 | }; 22 | Title = value.Name; 23 | GroupInfo = group; 24 | genre = value; 25 | } 26 | get { return genre; } 27 | } 28 | } 29 | } -------------------------------------------------------------------------------- /MusicPlayer.Shared/Models/OfflineClass.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | using SQLite; 5 | 6 | namespace MusicPlayer.Models 7 | { 8 | public abstract class OfflineClass 9 | { 10 | [PrimaryKey] 11 | public string Id { get; set; } 12 | 13 | [Indexed] 14 | public bool ShouldBeLocal { get; set; } 15 | } 16 | 17 | public class AlbumOfflineClass : OfflineClass 18 | { 19 | } 20 | 21 | public class ArtistOfflineClass : OfflineClass 22 | { 23 | } 24 | 25 | public class PlaylistOfflineClass : OfflineClass 26 | { 27 | } 28 | 29 | public class SongOfflineClass : OfflineClass 30 | { 31 | } 32 | 33 | public class GenreOfflineClass : OfflineClass 34 | { 35 | } 36 | } -------------------------------------------------------------------------------- /MusicPlayer.Shared/Models/SongPlaybackData.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | using MusicPlayer.Managers; 5 | 6 | namespace MusicPlayer.Models 7 | { 8 | public class SongPlaybackData 9 | { 10 | public SongPlaybackData() 11 | { 12 | } 13 | public bool IsVideo { get; set; } 14 | public Song Song { get; set; } 15 | public Track CurrentTrack { get; set; } 16 | public List Tracks { get; set; } 17 | public int CurrentTrackIndex { get; set; } 18 | 19 | public Uri Uri { get; set; } 20 | 21 | public bool IsLocal 22 | { 23 | get { 24 | if (Uri == null) 25 | return false; 26 | return Uri.IsFile || Uri.Scheme == "ipod-library" ; } 27 | } 28 | } 29 | } -------------------------------------------------------------------------------- /Api/AmazonApi/AmazonAuthenticator.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | using System.Threading.Tasks; 5 | using MusicPlayer.Api; 6 | using SimpleAuth; 7 | 8 | namespace MusicPlayer.Api 9 | { 10 | internal class AmazonAuthenticator : WebAuthenticator 11 | { 12 | public override string BaseUrl { get; set; } = "https://www.amazon.com/ap/oa?"; 13 | public override Uri RedirectUrl { get; set; } = new Uri("http://localhost"); 14 | 15 | public override async Task> GetTokenPostData(string clientSecret) 16 | { 17 | var data = await base.GetTokenPostData(clientSecret); 18 | data["redirect_uri"] = RedirectUrl.AbsoluteUri; 19 | return data; 20 | } 21 | } 22 | } -------------------------------------------------------------------------------- /MusicPlayer.OSX/VideoPlaybackWindowController.designer.cs: -------------------------------------------------------------------------------- 1 | // WARNING 2 | // 3 | // This file has been generated automatically by Xamarin Studio to store outlets and 4 | // actions made in the UI designer. If it is removed, they will be lost. 5 | // Manual changes to this file may not be handled correctly. 6 | // 7 | using Foundation; 8 | using System.CodeDom.Compiler; 9 | 10 | namespace MusicPlayer 11 | { 12 | [Register ("VideoPlaybackWindowController")] 13 | partial class VideoPlaybackWindowController 14 | { 15 | [Outlet] 16 | AppKit.NSView MainView { get; set; } 17 | 18 | void ReleaseDesignerOutlets () 19 | { 20 | if (MainView != null) { 21 | MainView.Dispose (); 22 | MainView = null; 23 | } 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /MusicPlayer.Droid/ViewModels/NavigationViewModel.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Android.Content; 3 | using Android.Widget; 4 | 5 | namespace MusicPlayer 6 | { 7 | public class NavigationViewModel : ListViewModel 8 | { 9 | public NavigationViewModel () 10 | { 11 | 12 | } 13 | public override void RowSelected (MenuItem item) 14 | { 15 | base.RowSelected (item); 16 | var tapped = item.Tapped; 17 | if (tapped != null) 18 | tapped (item); 19 | } 20 | public override SimpleTables.ICell GetICell (int section, int row) 21 | { 22 | var cell = base.GetICell (section, row); 23 | var item = ItemFor (section, row); 24 | (cell as SimpleTables.Cells.Cell).Caption = item.Title; 25 | return cell; 26 | } 27 | } 28 | } 29 | 30 | -------------------------------------------------------------------------------- /MusicPlayer.Shared/Data/ScrobbleDatabase.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.IO; 4 | using System.Text; 5 | using MusicPlayer.Managers; 6 | using MusicPlayer.Models; 7 | using MusicPlayer.Models.Scrobbling; 8 | using MusicPlayer.Playback; 9 | using SimpleDatabase; 10 | 11 | namespace MusicPlayer.Data 12 | { 13 | internal class ScrobbleDatabase : SimpleDatabaseConnection 14 | { 15 | public static ScrobbleDatabase Main { get; set; } = new ScrobbleDatabase(); 16 | static string dbPath => Path.Combine(Locations.LibDir, "scrobble.db"); 17 | 18 | public ScrobbleDatabase() : base(dbPath) 19 | { 20 | CreateTables( 21 | typeof (PlaybackEndedEvent), 22 | typeof (PlaybackContext) 23 | ); 24 | } 25 | } 26 | } -------------------------------------------------------------------------------- /MusicPlayer.Shared/Helpers/StringExtensions.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Linq; 3 | 4 | namespace iPadPos 5 | { 6 | public static class StringExtensions 7 | { 8 | public static string UppercaseAllWords(this string s) 9 | { 10 | // Check for empty string. 11 | if (string.IsNullOrEmpty(s)) 12 | { 13 | return string.Empty; 14 | } 15 | 16 | return string.Join(" ", s.Split(' ').Select(x => x.UppercaseFirst())); 17 | } 18 | 19 | public static string UppercaseFirst(this string s) 20 | { 21 | // Check for empty string. 22 | if (string.IsNullOrEmpty(s)) 23 | { 24 | return string.Empty; 25 | } 26 | // Return char and concat substring. 27 | return char.ToUpper(s[0]) + s.Substring(1).ToLower(); 28 | } 29 | } 30 | } -------------------------------------------------------------------------------- /MusicPlayer.Shared/ViewModels/ArtistAlbumsViewModel.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using MusicPlayer.Models; 3 | using MusicPlayer.ViewModels; 4 | 5 | namespace MusicPlayer 6 | { 7 | public partial class ArtistAlbumsViewModel : AlbumViewModel 8 | { 9 | Artist artist; 10 | 11 | public Artist Artist 12 | { 13 | set 14 | { 15 | var group = new SimpleDatabase.GroupInfo 16 | { 17 | From = "Album", 18 | Params = { 19 | { "@ArtistId", value.Id } 20 | }, 21 | Filter = "Id in (select distinct AlbumId from song where ArtistId = @ArtistId )", 22 | OrderBy = "Year, NameNorm" 23 | }; 24 | Title = value.Name; 25 | GroupInfo = group; 26 | artist = value; 27 | } 28 | get { return artist; } 29 | } 30 | } 31 | } -------------------------------------------------------------------------------- /Test/TestCloud.iOS/SearchTest.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using NUnit.Framework; 3 | using Xamarin.UITest; 4 | using System.Linq; 5 | 6 | namespace TestCloud.iOS 7 | { 8 | 9 | [TestFixture (Platform.iOS)] 10 | public class SearchTest : BaseTestFixture 11 | { 12 | public SearchTest(Platform platform) : base(platform) 13 | { 14 | 15 | } 16 | 17 | [Test] 18 | public void Search () 19 | { 20 | 21 | App.Repl (); 22 | App.Tap(x=> x.Marked("menu")); 23 | App.Tap(x=> x.Marked("Search")); 24 | App.Screenshot("Search"); 25 | App.EnterText(x=> x.Marked("searchBar"),"blink"); 26 | App.Screenshot("Searching"); 27 | App.WaitForNoElement (x => x.Marked ("In progress")); 28 | App.Screenshot("Search Results"); 29 | } 30 | } 31 | } 32 | 33 | -------------------------------------------------------------------------------- /MusicPlayer.Droid/App.Droid.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Android.Content; 3 | using Android.App; 4 | using Android.Views; 5 | using System.Threading.Tasks; 6 | using MusicPlayer.Droid.UI; 7 | 8 | namespace MusicPlayer 9 | { 10 | public static partial class App 11 | { 12 | public static void ShowMessage (string title, string message, string close = "Ok") 13 | { 14 | 15 | } 16 | 17 | internal static MusicPlayerActivity Context { get; set; } 18 | 19 | public static ISurfaceHolder SurfaceHolder; 20 | public static Action DoPushFragment; 21 | public static void PushFragment(Fragment fragment) 22 | { 23 | DoPushFragment (fragment); 24 | } 25 | 26 | public static async Task NativeStart() 27 | { 28 | 29 | } 30 | } 31 | } 32 | 33 | -------------------------------------------------------------------------------- /MusicPlayer.Droid/Cells/SpinnerCell.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Android.Content; 3 | using Android.Graphics; 4 | using Android.Views; 5 | using Android.Widget; 6 | using SimpleTables; 7 | 8 | namespace MusicPlayer.Cells 9 | { 10 | public class SpinnerCell: Java.Lang.Object, ICell 11 | { 12 | 13 | public int LayoutId { get; private set; } 14 | public virtual View GetCell(View convertView, ViewGroup parent, Context context, LayoutInflater inflater) 15 | { 16 | View view = null; // re-use an existing view, if one is available 17 | int type = Android.Resource.Layout.SimpleSpinnerItem; 18 | if (view == null || view.Id != type) // otherwise create a new one 19 | view = inflater.Inflate(type, null); 20 | 21 | return view; 22 | } 23 | } 24 | } -------------------------------------------------------------------------------- /MusicPlayer.Shared/Models/TrackPosition.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace MusicPlayer.Models 6 | { 7 | internal class TrackPosition 8 | { 9 | public double CurrentTime { get; set; } 10 | 11 | public double Duration { get; set; } 12 | public double RemaingTime => Duration - CurrentTime; 13 | public string CurrentTimeString => Format(TimeSpan.FromSeconds(CurrentTime)); 14 | public string RemainingTimeString => Format(TimeSpan.FromSeconds(RemaingTime)); 15 | public float Percent => (float) (Duration == 0 ? 0 : CurrentTime/Duration); 16 | 17 | string Format(TimeSpan timeSpan) 18 | { 19 | return timeSpan.Hours > 0 ? $"{timeSpan:h\\:mm\\:ss}" : $"{timeSpan:mm\\:ss}"; 20 | } 21 | } 22 | } -------------------------------------------------------------------------------- /MusicPlayer.Droid/Playback/IPlayer.cs: -------------------------------------------------------------------------------- 1 | using Android.Support.V4.Media.Session; 2 | 3 | namespace MusicPlayer.Droid.Playback 4 | { 5 | internal interface IPlayer 6 | { 7 | int State { get; set;} 8 | bool IsConnected { get; } 9 | bool IsPlaying { get; } 10 | int CurrentStreamPosition { get; set; } 11 | string CurrentMediaId { get; set; } 12 | void Start(); 13 | void Stop(bool notifyListeners); 14 | void UpdateLastKnownStreamPosition(); 15 | void Pause(); 16 | void Seek(int position); 17 | void SetCallback(IPlayerCallBack callBack); 18 | } 19 | 20 | internal interface IPlayerCallBack 21 | { 22 | void Completed(); 23 | void PlaybackStatusChanged(int state); 24 | void OnError(string error); 25 | void SetCurrentMediaId(string id); 26 | } 27 | } -------------------------------------------------------------------------------- /MusicPlayer.OSX/Menu/MenuImageElement.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using AppKit; 3 | using Foundation; 4 | 5 | namespace MusicPlayer 6 | { 7 | public class MenuImageElement : MenuElement 8 | { 9 | public string Svg { get; set; } 10 | 11 | public MenuImageElement () 12 | { 13 | } 14 | public override AppKit.NSView GetView (NSTableView tableView,NSObject sender) 15 | { 16 | var cell = tableView.MakeView ("MainCell", sender) as SidebarTableCellView ?? new SidebarTableCellView(); 17 | cell.TextField.StringValue = Text; 18 | if(!string.IsNullOrWhiteSpace(Svg)) 19 | cell.ImageView.LoadSvg (Svg, NSColor.ControlText); 20 | return cell; 21 | } 22 | public override NSObject Copy () 23 | { 24 | return base.Copy (); 25 | } 26 | } 27 | } 28 | 29 | -------------------------------------------------------------------------------- /MusicPlayer.OSX/Views/Cells/GenreCell.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using MusicPlayer.Models; 3 | 4 | namespace MusicPlayer 5 | { 6 | public class GenreCell : BaseCell 7 | { 8 | public GenreCell () 9 | { 10 | } 11 | 12 | 13 | public override AppKit.NSView GetCell (AppKit.NSTableView tableView, AppKit.NSTableColumn tableColumn, Foundation.NSObject owner) 14 | { 15 | var cell = tableView.MakeView (MutliImageMediaCellView.Key, owner) as MutliImageMediaCellView ?? new MutliImageMediaCellView (); 16 | cell.UpdateValues (BindingContext as Genre); 17 | return cell; 18 | } 19 | 20 | public override string GetCellText (AppKit.NSTableColumn tableColumn) 21 | { 22 | var genre = BindingContext as Genre; 23 | return genre.ToString (); 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /MusicPlayer.Shared/Models/SearchResults.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using MusicPlayer.Models; 4 | 5 | namespace MusicPlayer 6 | { 7 | public class SearchResults 8 | { 9 | public List Songs {get;set;} = new List(); 10 | public List Videos { get; set; } = new List(); 11 | 12 | public List Artist {get;set;} = new List(); 13 | 14 | public List Albums {get;set;} = new List(); 15 | 16 | public List Genres {get;set;} = new List(); 17 | 18 | public List Playlists {get;set;} = new List(); 19 | 20 | public List RadioStations { get; set; } = new List(); 21 | 22 | public string Query { get; set; } 23 | } 24 | } 25 | 26 | -------------------------------------------------------------------------------- /MusicPlayer.OSX/Helpers/Device.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Foundation; 3 | 4 | namespace MusicPlayer 5 | { 6 | public static class Device 7 | { 8 | public static Version SystemVersion { get;} = GetSystemVersion(); 9 | 10 | static Version GetSystemVersion() 11 | { 12 | var v = NSProcessInfo.ProcessInfo.OperatingSystemVersion; 13 | return new Version ((int)v.Major, (int)v.Minor, (int)v.PatchVersion); 14 | } 15 | 16 | public static bool IsSim { get;} = true; 17 | 18 | 19 | public static string Name {get;}// = NSHost.Current.Name; 20 | 21 | public static bool IsIos9 { get; } = SystemVersion > new Version(10, 11); 22 | public static bool IsIos11 { get; } = SystemVersion > new Version(10, 11); 23 | public static bool HasIntegratedTwitter => false; 24 | } 25 | } 26 | 27 | -------------------------------------------------------------------------------- /MusicPlayer.Droid/Playback/MoviePlayerEqualizer.cs: -------------------------------------------------------------------------------- 1 | //using System; 2 | 3 | //namespace MusicPlayer 4 | //{ 5 | // public class MoviePlayerEqualizer : IEqualizer 6 | // { 7 | // static MoviePlayerEqualizer shared; 8 | 9 | // public static MoviePlayerEqualizer Shared { 10 | // get { 11 | // return shared ?? (shared = new MoviePlayerEqualizer ()); 12 | // } 13 | // } 14 | 15 | // #region IEqualizer implementation 16 | 17 | // public async System.Threading.Tasks.Task ApplyEqualizer (Equalizer.Band[] bands) 18 | // { 19 | 20 | // } 21 | 22 | // public void UpdateBand (int band, float gain) 23 | // { 24 | 25 | // } 26 | 27 | // public void Clear () 28 | // {Clear 29 | 30 | // } 31 | 32 | // public bool Active { get; set; } 33 | 34 | // #endregion 35 | // } 36 | //} 37 | 38 | -------------------------------------------------------------------------------- /MusicPlayer.OSX/Menu/MenuSection.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Foundation; 3 | using System.Collections; 4 | using System.Collections.Generic; 5 | 6 | namespace MusicPlayer 7 | { 8 | public class MenuSection : Element, IEnumerable 9 | { 10 | public bool IsExpandable { get; set; } = true; 11 | 12 | public List Children {get; private set;} = new List(); 13 | 14 | public MenuSection () 15 | { 16 | 17 | } 18 | public MenuSection (string text) 19 | { 20 | Text = text; 21 | } 22 | public void Add(Element element) 23 | { 24 | Children.Add (element); 25 | } 26 | 27 | #region IEnumerable implementation 28 | 29 | public IEnumerator GetEnumerator () 30 | { 31 | return Children.GetEnumerator (); 32 | } 33 | 34 | #endregion 35 | } 36 | } 37 | 38 | -------------------------------------------------------------------------------- /MusicPlayer.OSX/Views/Cells/PlaylistCell.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using MusicPlayer.Models; 3 | 4 | namespace MusicPlayer 5 | { 6 | public class PlaylistCell : BaseCell 7 | { 8 | public PlaylistCell () 9 | { 10 | } 11 | 12 | 13 | public override AppKit.NSView GetCell (AppKit.NSTableView tableView, AppKit.NSTableColumn tableColumn, Foundation.NSObject owner) 14 | { 15 | var cell = tableView.MakeView (MutliImageMediaCellView.Key, owner) as MutliImageMediaCellView ?? new MutliImageMediaCellView (); 16 | 17 | cell.UpdateValues (BindingContext as Playlist); 18 | return cell; 19 | } 20 | 21 | public override string GetCellText (AppKit.NSTableColumn tableColumn) 22 | { 23 | var playlist = BindingContext as Playlist; 24 | return playlist.ToString (); 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /MusicPlayer.Shared/Models/Scrobbling/SongPlaybackEvent.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | using MusicPlayer.Data; 5 | using MusicPlayer.Playback; 6 | using SQLite; 7 | 8 | namespace MusicPlayer.Models.Scrobbling 9 | { 10 | public class SongPlaybackEvent 11 | { 12 | [PrimaryKey, AutoIncrement] 13 | public int Id { get; set; } 14 | 15 | public string SongId { get; set; } 16 | 17 | public string TrackId { get; set; } 18 | 19 | public string Title { get; set; } 20 | 21 | public string Artist { get; set; } 22 | 23 | public string Album { get; set; } 24 | 25 | public DateTime Time { get; set; } = DateTime.Now; 26 | 27 | [Ignore] 28 | public PlaybackContext Context { get; set; } 29 | 30 | public int ContextId { get; set; } 31 | } 32 | } -------------------------------------------------------------------------------- /MusicPlayer.iOS/Resources/SVG/previous.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ios-rewind 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /MusicPlayer.Apple/Playback/CustomVideoLayer.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using CoreAnimation; 3 | using AVFoundation; 4 | namespace MusicPlayer 5 | { 6 | public class CustomVideoLayer : CALayer 7 | { 8 | public event Action VideoLayerChanged; 9 | AVPlayerLayer videoLayer; 10 | 11 | public AVPlayerLayer VideoLayer { 12 | get { 13 | return videoLayer; 14 | } 15 | set { 16 | if (videoLayer == value) 17 | return; 18 | videoLayer?.RemoveFromSuperLayer (); 19 | AddSublayer (videoLayer = value); 20 | VideoLayerChanged?.InvokeOnMainThread (value); 21 | } 22 | } 23 | 24 | public override void LayoutSublayers () 25 | { 26 | base.LayoutSublayers (); 27 | if (videoLayer == null) 28 | return; 29 | videoLayer.Frame = Bounds; 30 | } 31 | 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /MusicPlayer.iOS/Resources/SVG/next.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ios-fastforward 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /MusicPlayer.Shared/Helpers/BaseNotify.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.ComponentModel; 3 | using System.Runtime.CompilerServices; 4 | using System.Collections.Generic; 5 | using MusicPlayer.Models; 6 | 7 | namespace System.ComponentModel 8 | { 9 | public static class BaseNotify 10 | { 11 | public static bool SetProperty(this PropertyChangedEventHandler handler, object sender, ref T currentValue, 12 | T newValue, [CallerMemberName] string propertyName = "") 13 | { 14 | if (EqualityComparer.Default.Equals(currentValue, newValue)) 15 | return false; 16 | currentValue = newValue; 17 | var dirty = sender as iDirty; 18 | if (dirty != null) 19 | dirty.IsDirty = true; 20 | 21 | handler?.Invoke(sender, new PropertyChangedEventArgs(propertyName)); 22 | return true; 23 | } 24 | } 25 | } -------------------------------------------------------------------------------- /Api/AmazonApi/CloudDrive/Nodes/Models/ContentNodeVideoProperties.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Amazon.CloudDrive 4 | { 5 | public class ContentNodeVideoProperties : ContentNodeImageProperties 6 | { 7 | public int Rotate { get; set; } 8 | 9 | public double Duration { get; set; } 10 | 11 | public string AudioCodec { get; set; } 12 | 13 | public int AudioChannels { get; set; } 14 | 15 | public double VideoFrameRate { get; set; } 16 | 17 | public double VideoBitrate { get; set; } 18 | 19 | public string Title { get; set; } 20 | 21 | public double Bitrate { get; set; } 22 | 23 | public double AudioSampleRate { get; set; } 24 | 25 | public string VideoCodec { get; set; } 26 | 27 | public string AudioChannelLayout { get; set; } 28 | 29 | public double AudioBitrate { get; set; } 30 | } 31 | } -------------------------------------------------------------------------------- /MusicPlayer.iOS/Cells/SettingsElement.cs: -------------------------------------------------------------------------------- 1 | using MusicPlayer.Cells; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Text; 5 | using MonoTouch.Dialog; 6 | 7 | namespace MusicPlayer.iOS 8 | { 9 | class SettingsElement : MenuElement 10 | { 11 | public SettingsElement(string title) : this (title,null) 12 | { 13 | Height = 35; 14 | } 15 | public SettingsElement (string title, Action tapped) : base(title,tapped) 16 | { 17 | Height = 35; 18 | } 19 | protected override void ApplyStyle(MenuElementCell cell) 20 | { 21 | base.ApplyStyle(cell); 22 | cell.TextLabel.TextColor = Style.DefaultStyle.MainTextColor; 23 | cell.ForceImage = false; 24 | if (cell.DetailTextLabel != null) 25 | cell.DetailTextLabel.TextColor = Style.DefaultStyle.SubTextColor; 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /MusicPlayer.iOS/UI/DarkBlurView.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | using UIKit; 5 | 6 | namespace MusicPlayer.iOS 7 | { 8 | class DarkBlurView : UIView 9 | { 10 | UIView blurView; 11 | public DarkBlurView() 12 | { 13 | if (Device.IsIos8) 14 | { 15 | var blur = UIBlurEffect.FromStyle(UIBlurEffectStyle.Dark); 16 | blurView = new UIVisualEffectView(blur); 17 | } 18 | else 19 | { 20 | blurView = new UIToolbar 21 | { 22 | Opaque = true, 23 | Translucent = true, 24 | BarStyle = UIBarStyle.BlackTranslucent, 25 | }; 26 | } 27 | Add(blurView); 28 | } 29 | public override void LayoutSubviews() 30 | { 31 | base.LayoutSubviews(); 32 | if (blurView != null) 33 | blurView.Frame = Bounds; 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /MusicPlayer.OSX/Views/Cells/SongSearchCell.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using MusicPlayer.Models; 3 | using AppKit; 4 | using MusicPlayer.Managers; 5 | using CoreGraphics; 6 | 7 | namespace MusicPlayer 8 | { 9 | public class SongSearchCell : BaseCell 10 | { 11 | public SongSearchCell () 12 | { 13 | } 14 | 15 | 16 | public override AppKit.NSView GetCell (AppKit.NSTableView tableView, AppKit.NSTableColumn tableColumn, Foundation.NSObject owner) 17 | { 18 | var cell = tableView.MakeView (MediaCellView.Key, owner) as MediaCellView ?? new MediaCellView (); 19 | cell.UpdateValues (BindingContext as Song); 20 | return cell; 21 | } 22 | 23 | public override string GetCellText (AppKit.NSTableColumn tableColumn) 24 | { 25 | var album = BindingContext as Song; 26 | return album.ToString (); 27 | } 28 | } 29 | } -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/xml/automotive_app_desc.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /MusicPlayer.Shared/WebServer/RequestExtensions.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Net; 3 | using System.Linq; 4 | namespace MusicPlayer.Server 5 | { 6 | public static class RequestExtensions 7 | { 8 | public static (long Start, long End) GetRange(this HttpListenerRequest request) 9 | { 10 | try 11 | { 12 | var rangeString = request.Headers["Range"]?.Replace("bytes=", ""); 13 | if (string.IsNullOrWhiteSpace(rangeString)) 14 | return (0, 0); 15 | var ranges = rangeString.Split('-'); 16 | return (long.Parse(ranges[0]), long.Parse(ranges[1])); 17 | } 18 | catch (Exception ex) 19 | { 20 | Console.WriteLine(ex); 21 | return (0, 0); 22 | } 23 | } 24 | 25 | public static bool HasRange(this HttpListenerRequest request) => request.Headers.AllKeys.Any(x => x == "Range"); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/values/ids.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /MusicPlayer.iOS/ViewControllers/OnlinePlaylistViewController.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | using MusicPlayer.Models; 5 | using MusicPlayer.ViewModels; 6 | 7 | namespace MusicPlayer.iOS.ViewControllers 8 | { 9 | class OnlinePlaylistViewController : BaseModelViewController 10 | { 11 | public OnlinePlaylistViewController() 12 | { 13 | Model = new OnlinePlaylistViewModel(); 14 | } 15 | 16 | public OnlinePlaylist Playlist 17 | { 18 | get { return Model.Playlist; } 19 | set 20 | { 21 | Model.Playlist = value; 22 | Title = Playlist.Name; 23 | } 24 | } 25 | 26 | public override void ViewWillAppear(bool animated) 27 | { 28 | base.ViewWillAppear(animated); 29 | Model.Refresh(); 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /MusicPlayer.Shared/Helpers/DateExtensions.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace MusicPlayer 6 | { 7 | public static class DateExtensions 8 | { 9 | public static DateTime FromUnixTime(this long unixTime) 10 | { 11 | var epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); 12 | return epoch.AddSeconds(unixTime); 13 | } 14 | 15 | public static long ToUnixTime(this DateTime date) 16 | { 17 | var epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); 18 | return Convert.ToInt64((date - epoch).TotalSeconds); 19 | } 20 | public static long ToUnixTimeMs(this DateTime date) 21 | { 22 | var epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); 23 | return Convert.ToInt64((date - epoch).TotalMilliseconds); 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /MusicPlayer.Shared/ViewModels/ArtistViewModel.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Localizations; 3 | using MusicPlayer.Models; 4 | using SimpleDatabase; 5 | 6 | namespace MusicPlayer.ViewModels 7 | { 8 | public class ArtistViewModel : BaseViewModel 9 | { 10 | public ArtistViewModel() 11 | { 12 | Title = Strings.Artists; 13 | } 14 | 15 | protected GroupInfo offlineGroupInfo; 16 | 17 | public override GroupInfo OfflineGroupInfo 18 | { 19 | get 20 | { 21 | if (offlineGroupInfo == null) 22 | { 23 | offlineGroupInfo = GroupInfo.Clone(); 24 | offlineGroupInfo.Filter = offlineGroupInfo.Filter + (string.IsNullOrEmpty(offlineGroupInfo.Filter) ? " " : " and ") + 25 | "OfflineCount > 0"; 26 | } 27 | return offlineGroupInfo; 28 | } 29 | set { offlineGroupInfo = value; } 30 | } 31 | } 32 | } -------------------------------------------------------------------------------- /ApiConstants.targets: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ApiConstants.cs 5 | $([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), $(ApiConstantsFile)))\$(ApiConstantsFile) 6 | 7 | 8 | 9 | $(ApiConstantsFile) 10 | 11 | 12 | $(ApiConstantsFile) 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /MusicPlayer.Shared/WebServer/Routes/RouteT.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Specialized; 3 | using System.Threading.Tasks; 4 | using Newtonsoft.Json; 5 | 6 | namespace MusicPlayer.Server 7 | { 8 | public abstract class Route : Route 9 | { 10 | public abstract Task GetResponse (string method, System.Net.HttpListenerRequest request, NameValueCollection queryString, string data); 11 | 12 | public override async Task GetResponseString (string method, System.Net.HttpListenerRequest request, NameValueCollection queryString, string data) 13 | { 14 | var item = await GetResponse (method, request, queryString, data); 15 | return await Task.Run (() => JsonConvert.SerializeObject (item, new JsonSerializerSettings { 16 | ReferenceLoopHandling = ReferenceLoopHandling.Ignore 17 | })); 18 | } 19 | 20 | } 21 | } 22 | 23 | -------------------------------------------------------------------------------- /MusicPlayer.iOS/ViewControllers/BaseModelViewController.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | using MusicPlayer.ViewModels; 5 | using SimpleTables; 6 | 7 | namespace MusicPlayer.iOS.ViewControllers 8 | { 9 | class BaseModelViewController : BaseTableViewController where TVM : TableViewModel where T: class 10 | { 11 | TVM _model; 12 | 13 | public TVM Model 14 | { 15 | get { return _model; } 16 | set 17 | { 18 | _model = value; 19 | } 20 | } 21 | 22 | public override void LoadView() 23 | { 24 | base.LoadView(); 25 | if(Model == null) 26 | throw new Exception("Model is required."); 27 | TableView.Source = Model; 28 | } 29 | 30 | public override void TeardownEvents() 31 | { 32 | base.TeardownEvents(); 33 | Model.ClearEvents(); 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /Api/AmazonApi/CloudDrive/Nodes/Models/CloudDriveStorage.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Amazon.CloudDrive 4 | { 5 | public class CloudDriveStorage 6 | { 7 | [Newtonsoft.Json.JsonProperty("s3_bucket")] 8 | public string Bucket { get; set; } 9 | 10 | [Newtonsoft.Json.JsonProperty("nonBillable")] 11 | public string NonBillable { get; set; } 12 | 13 | [Newtonsoft.Json.JsonProperty("s3_storageKey")] 14 | public string StorageKey { get; set; } 15 | 16 | [Newtonsoft.Json.JsonProperty("s3_resume_bucket")] 17 | public string ResumeBucket { get; set; } 18 | 19 | [Newtonsoft.Json.JsonProperty("s3_resume_uploadId")] 20 | public string ResumeUploadId { get; set; } 21 | 22 | [Newtonsoft.Json.JsonProperty("s3_resume_storageKey")] 23 | public string ResumeStorageKey { get; set; } 24 | 25 | public string Processing { get; set; } 26 | } 27 | } -------------------------------------------------------------------------------- /MusicPlayer.OSX/Views/Cells/HeaderCell.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using SimpleTables; 3 | using AppKit; 4 | 5 | namespace MusicPlayer 6 | { 7 | public class HeaderCell : ICell 8 | { 9 | public HeaderCell () 10 | { 11 | 12 | } 13 | 14 | public string Title { get; set; } 15 | 16 | #region ICell implementation 17 | 18 | public AppKit.NSView GetCell (AppKit.NSTableView tableView, AppKit.NSTableColumn tableColumn, Foundation.NSObject owner) 19 | { 20 | var textField = tableView.MakeView ("Header", owner) as NSTextField ?? new NSTextField ().StyleAsHeaderText (); 21 | textField.Identifier = "Header"; 22 | textField.StringValue = GetCellText (tableColumn); 23 | return textField; 24 | } 25 | 26 | public string GetCellText (AppKit.NSTableColumn tableColumn) 27 | { 28 | return Title; 29 | } 30 | 31 | #endregion 32 | } 33 | } 34 | 35 | -------------------------------------------------------------------------------- /MusicPlayer.iOS/Resources/SVG/close.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ios7-close-empty 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/values-h800dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 19 | 96dp 20 | 21 | -------------------------------------------------------------------------------- /MusicPlayer.Shared/ViewModels/DownloadViewModel.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | using MusicPlayer.Managers; 5 | using MusicPlayer.Models; 6 | using SimpleTables; 7 | 8 | namespace MusicPlayer.ViewModels 9 | { 10 | class DownloadViewModel : TableViewModel 11 | { 12 | 13 | public override int RowsInSection(int section) 14 | { 15 | return BackgroundDownloadManager.Shared.Count; 16 | } 17 | 18 | public override string HeaderForSection(int section) 19 | { 20 | return ""; 21 | } 22 | 23 | public override int NumberOfSections() 24 | { 25 | return 1; 26 | } 27 | 28 | public override Song ItemFor(int section, int row) 29 | { 30 | var item = BackgroundDownloadManager.Shared.PendingItemForRow(row); 31 | return item; 32 | } 33 | 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /Api/YoutubeApi/YoutubeApi.projitems: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | $(MSBuildAllProjects);$(MSBuildThisFileFullPath) 5 | true 6 | {87BF6B8A-9680-4589-8430-23FEAD83694F} 7 | 8 | 9 | YoutubeApi 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /MusicPlayer.Shared/ViewModels/OnlineAlbumDetailsViewModel.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | using MusicPlayer.Cells; 5 | using MusicPlayer.Models; 6 | using SimpleTables; 7 | 8 | namespace MusicPlayer.ViewModels 9 | { 10 | class OnlineAlbumDetailsViewModel : AlbumDetailsViewModel 11 | { 12 | public override int NumberOfSections() 13 | { 14 | return 1; 15 | } 16 | public override int RowsInSection(int section) 17 | { 18 | if (isLoading) 19 | return 1; 20 | return Songs.Count; 21 | } 22 | 23 | public override Song ItemFor(int section, int row) 24 | { 25 | return Songs.Count <= row ? null : Songs[row]; 26 | } 27 | 28 | public override ICell GetICell(int section, int row) 29 | { 30 | if (isLoading) 31 | return new SpinnerCell(); 32 | return base.GetICell(section, row); 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /Api/AmazonApi/CloudDrive/Nodes/Requests/CloudChangesRequest.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Newtonsoft.Json; 3 | 4 | namespace Amazon.CloudDrive 5 | { 6 | public class CloudChangesRequest 7 | { 8 | [JsonProperty("checkpoint", NullValueHandling = NullValueHandling.Ignore)] 9 | public string Checkpoint { get; set; } 10 | 11 | [JsonProperty("chunkSize", NullValueHandling = NullValueHandling.Ignore)] 12 | public int? ChunkSize { get; set; } 13 | 14 | [JsonProperty("maxNodes", NullValueHandling = NullValueHandling.Ignore)] 15 | public int? MaxNodes { get; set; } 16 | 17 | [JsonProperty("includePurged", NullValueHandling = NullValueHandling.Ignore)] 18 | public bool? IncludePurged { get; set; } 19 | 20 | public bool IsEmpty() 21 | { 22 | return string.IsNullOrEmpty(Checkpoint) && 23 | ChunkSize == null && 24 | MaxNodes == null && 25 | IncludePurged == null; 26 | } 27 | } 28 | } -------------------------------------------------------------------------------- /MusicPlayer.OSX/Menu/Element.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Foundation; 3 | using AppKit; 4 | 5 | namespace MusicPlayer 6 | { 7 | public class Element : NSCopying 8 | { 9 | public string Text { get; set; } 10 | 11 | public Action Tapped { get; set;} 12 | 13 | public bool ShouldOutline { get; set; } 14 | 15 | public bool ShouldDeselect { get; set; } 16 | 17 | public Element () 18 | { 19 | 20 | } 21 | 22 | public virtual NSView GetView(NSTableView tableView,NSObject sender) 23 | { 24 | var field = tableView.MakeView ("HeaderTextField", sender) as NSTextField;// ?? new NSTextField(); 25 | field.StyleAsMainText(); 26 | field.StringValue = Text; 27 | return field; 28 | } 29 | 30 | 31 | #region implemented abstract members of NSCopying 32 | public override NSObject Copy (NSZone zone) 33 | { 34 | return new NSString(Text); 35 | } 36 | #endregion 37 | } 38 | } 39 | 40 | -------------------------------------------------------------------------------- /MusicPlayer.iOS/Resources/SVG/airplay.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Shape 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /MusicPlayer.Droid/Helpers/Utility.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace MusicPlayer.Api 4 | { 5 | public static class Utility 6 | { 7 | 8 | static public void SetSecured(string key, string value, string service) 9 | { 10 | MusicPlayer.AkavacheAuthStorage.Shared.SetSecured(key, value, "MusicApps", service, ""); 11 | } 12 | static public string GetSecured(string id, string service) 13 | { 14 | return AkavacheAuthStorage.Shared.GetSecured(id, "MusicApps", service, ""); 15 | } 16 | 17 | public static string DeviceName => Android.OS.Build.Model; 18 | 19 | public static string DeviceId 20 | { 21 | get 22 | { 23 | 24 | var id = GetSecured("GoogleDeviceId", "GoogleMusic"); 25 | if (string.IsNullOrWhiteSpace(id)) 26 | { 27 | id = Guid.NewGuid().ToString(); 28 | SetSecured("GoogleDeviceId", id, "GoogleMusic"); 29 | } 30 | return id; 31 | } 32 | } 33 | } 34 | } 35 | 36 | -------------------------------------------------------------------------------- /MusicPlayer.iOS/ViewControllers/SongViewController.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using MusicPlayer.iOS.ViewControllers; 3 | using MusicPlayer.Models; 4 | using UIKit; 5 | using MusicPlayer.ViewModels; 6 | using Foundation; 7 | using MusicPlayer.Managers; 8 | using MusicPlayer.Data; 9 | 10 | namespace MusicPlayer.iOS.ViewControllers 11 | { 12 | [Register("SongViewController")] 13 | class SongViewController : BaseModelViewController 14 | { 15 | public SongViewController() 16 | { 17 | Model = new SongViewModel(); 18 | Title = Model.Title; 19 | NavigationItem.RightBarButtonItem = new UIBarButtonItem(Images.GetShuffleImage(24), UIBarButtonItemStyle.Plain, this, new ObjCRuntime.Selector("Shuffle")); 20 | } 21 | 22 | [Export("Shuffle")] 23 | public async void Shuffle() 24 | { 25 | Settings.ShuffleSongs = true; 26 | await PlaybackManager.Shared.Play(null, Model.GroupInfo); 27 | } 28 | } 29 | } -------------------------------------------------------------------------------- /MusicPlayer.OSX/Views/PlaylistSongsListView.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using MusicPlayer.ViewModels; 3 | using AppKit; 4 | using MusicPlayer.Models; 5 | 6 | namespace MusicPlayer 7 | { 8 | public class PlaylistSongsListView : BaseTableView 9 | { 10 | public PlaylistSongsListView (Playlist playlist) 11 | { 12 | //BackgroundColor = NSColor.Blue; 13 | TableView.AddColumn (new NSTableColumn ("Title"){ Title = "Title" }); 14 | TableView.AddColumn (new NSTableColumn ("Artist"){ Title = "Artist" }); 15 | TableView.AddColumn (new NSTableColumn ("Album"){ Title = "Album" }); 16 | TableView.DoubleClick += (object sender, EventArgs e) => { 17 | var item = Model.GetItem (TableView.SelectedRow); 18 | Model.PlayItem (item); 19 | }; 20 | 21 | Model = new PlaylistSongViewModel { 22 | AutoPlayOnSelect = false, 23 | Playlist = playlist, 24 | }; 25 | } 26 | } 27 | } 28 | 29 | -------------------------------------------------------------------------------- /MusicPlayer.iOS/ViewControllers/ArtistSongsViewController.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | using MusicPlayer.Models; 5 | using MusicPlayer.ViewModels; 6 | 7 | namespace MusicPlayer.iOS.ViewControllers 8 | { 9 | class ArtistSongsViewController : BaseTableViewController 10 | { 11 | 12 | ArtistSongsViewModel model; 13 | 14 | public ArtistSongsViewController() 15 | { 16 | model = new ArtistSongsViewModel(); 17 | Title = model.Title; 18 | } 19 | 20 | public Artist Artist 21 | { 22 | get { return model.Artist; } 23 | set 24 | { 25 | model.Artist = value; 26 | Title = model.Title; 27 | } 28 | } 29 | 30 | public override void LoadView() 31 | { 32 | base.LoadView(); 33 | TableView.Source = model; 34 | } 35 | 36 | public override void ViewWillDisappear(bool animated) 37 | { 38 | base.ViewWillDisappear(animated); 39 | } 40 | } 41 | } -------------------------------------------------------------------------------- /MusicPlayer.OSX/Views/AutoPlaylistSongsListView.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using MusicPlayer.ViewModels; 3 | using AppKit; 4 | using MusicPlayer.Models; 5 | namespace MusicPlayer 6 | { 7 | public class AutoPlaylistSongsListView : BaseTableView 8 | { 9 | public AutoPlaylistSongsListView(AutoPlaylist playlist) 10 | { 11 | //BackgroundColor = NSColor.Blue; 12 | TableView.AddColumn(new NSTableColumn("Title") { Title = "Title" }); 13 | TableView.AddColumn(new NSTableColumn("Artist") { Title = "Artist" }); 14 | TableView.AddColumn(new NSTableColumn("Album") { Title = "Album" }); 15 | TableView.DoubleClick += (object sender, EventArgs e) => { 16 | var item = Model.GetItem(TableView.SelectedRow); 17 | Model.PlayItem(item); 18 | }; 19 | 20 | Model = new AutoPlaylistSongViewModel 21 | { 22 | Playlist = playlist, 23 | AutoPlay = false, 24 | }; 25 | } 26 | } 27 | } 28 | 29 | -------------------------------------------------------------------------------- /MusicPlayer.iOS/Resources/SVG/pauseButton.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ios7-pause 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /MusicPlayer.OSX/Plugins/Connectivity/ConnectionType.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace Plugin.Connectivity.Abstractions 8 | { 9 | /// 10 | /// Type of connection 11 | /// 12 | public enum ConnectionType 13 | { 14 | /// 15 | /// Cellular connection, 3G, Edge, 4G, LTE 16 | /// 17 | Cellular, 18 | /// 19 | /// Wifi connection 20 | /// 21 | WiFi, 22 | /// 23 | /// Desktop or ethernet connection 24 | /// 25 | Desktop, 26 | /// 27 | /// Wimax (only android) 28 | /// 29 | Wimax, 30 | /// 31 | /// Other type of connection 32 | /// 33 | Other, 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /Api/iPodApi/iPodApi.shproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {DC4DD769-0B5D-4EFE-8CD0-5D26C05E7002} 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /MusicPlayer.Droid/UI/Fragments/BaseFragment.cs: -------------------------------------------------------------------------------- 1 | 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Linq; 5 | using System.Text; 6 | 7 | using Android.App; 8 | using Android.Content; 9 | using Android.OS; 10 | using Android.Runtime; 11 | using Android.Util; 12 | using Android.Views; 13 | using Android.Widget; 14 | 15 | namespace MusicPlayer.Droid 16 | { 17 | public class BaseFragment : ListFragment 18 | { 19 | public override void OnCreate(Bundle savedInstanceState) 20 | { 21 | base.OnCreate(savedInstanceState); 22 | 23 | // Create your fragment here 24 | } 25 | 26 | public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 27 | { 28 | // Use this to return your custom view for this Fragment 29 | // return inflater.Inflate(Resource.Layout.YourFragment, container, false); 30 | 31 | return base.OnCreateView(inflater, container, savedInstanceState); 32 | } 33 | } 34 | } 35 | 36 | -------------------------------------------------------------------------------- /Api/gMusicApi/gMusicApi.projitems: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | $(MSBuildAllProjects);$(MSBuildThisFileFullPath) 5 | true 6 | 9b1a78b7-5c53-40cf-ad4c-923590b00fbe 7 | 8 | 9 | MusicPlayer.Api 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /MusicPlayer.Droid/Helpers/SimpleAlertDialog.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using Android.Content; 4 | using Android.App; 5 | using System.Linq; 6 | 7 | 8 | namespace MusicPlayer 9 | { 10 | public class SimpleAlertDialog 11 | { 12 | public SimpleAlertDialog () 13 | { 14 | 15 | } 16 | public string Title {get;set;} 17 | readonly List> items = new List>(); 18 | public void Add(string title, Action action) 19 | { 20 | items.Add (new Tuple(title, action)); 21 | } 22 | public void Show(Context context) 23 | { 24 | var builder = new AlertDialog.Builder (context).SetTitle (Title). 25 | SetItems (items.Select (x => x.Item1).ToArray (),(s,e)=>{ 26 | var item = items[e.Which]; 27 | if(item.Item2 != null) 28 | { 29 | item.Item2(); 30 | } 31 | }); 32 | 33 | builder.SetCancelable (true); 34 | 35 | builder.Show (); 36 | } 37 | } 38 | } 39 | 40 | -------------------------------------------------------------------------------- /MusicPlayer.OSX/Controls/NSColorView.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using AppKit; 3 | using CoreGraphics; 4 | using Foundation; 5 | 6 | namespace AppKit 7 | { 8 | [Register("NSColorView")] 9 | public class NSColorView : NSView 10 | { 11 | public NSColorView () 12 | { 13 | } 14 | public NSColorView (IntPtr handle) : base(handle) 15 | { 16 | } 17 | 18 | public NSColorView (CGRect rect) : base (rect) 19 | { 20 | 21 | } 22 | 23 | NSColor backgroundColor = NSColor.Clear; 24 | public NSColor BackgroundColor { 25 | get { 26 | return backgroundColor; 27 | } 28 | set { 29 | backgroundColor = value; 30 | this.SetNeedsDisplayInRect (Bounds); 31 | } 32 | } 33 | public override void DrawRect (CGRect dirtyRect) 34 | { 35 | var context = NSGraphicsContext.CurrentContext.GraphicsPort; 36 | context.SetFillColor(backgroundColor.CGColor); //White 37 | context.FillRect (dirtyRect); 38 | base.DrawRect (dirtyRect); 39 | } 40 | } 41 | } 42 | 43 | -------------------------------------------------------------------------------- /Api/SoundCloud/SoundCloud.shproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {64C9F055-D338-4576-AC40-7A1F7623E99B} 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Api/YoutubeApi/YoutubeApi.shproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {87BF6B8A-9680-4589-8430-23FEAD83694F} 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /MusicPlayer.iOS/ViewControllers/Car/CarGenreViewController.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using MusicPlayer.iOS.ViewControllers; 3 | using UIKit; 4 | 5 | namespace MusicPlayer.iOS.Car 6 | { 7 | public class CarGenreViewController : GenreViewController 8 | { 9 | public CarGenreViewController() 10 | { 11 | } 12 | 13 | UIGestureRecognizer panGesture; 14 | public override void LoadView() 15 | { 16 | base.LoadView(); 17 | TableView.SectionIndexMinimumDisplayRowCount = 2000000; 18 | //panGesture = TableView.AddGestures(); 19 | } 20 | 21 | CoreGraphics.CGSize lastSize; 22 | public override void ViewDidLayoutSubviews() 23 | { 24 | base.ViewDidLayoutSubviews(); 25 | var size = View.Bounds.Size; 26 | if (lastSize == size) 27 | return; 28 | if (menuButton != null) { 29 | menuButton.Image = Images.GetMenuImage (size.Width * CarStyle.NavIconImagePercent); 30 | } 31 | lastSize = size; 32 | TableView.RowHeight = CarStyle.RowHeight; 33 | } 34 | } 35 | } -------------------------------------------------------------------------------- /Api/FileSytemApi/FileSytemApi.shproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {E9B08113-9737-485C-BD03-1B8EA850F242} 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /MusicPlayer.Droid/UI/Fragments/PlaylistFragment.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Android.App; 3 | using MusicPlayer.ViewModels; 4 | 5 | namespace MusicPlayer 6 | { 7 | public class PlaylistFragment : ListFragment 8 | { 9 | PlaylistViewModel Model; 10 | public PlaylistFragment () 11 | { 12 | 13 | } 14 | 15 | public override void OnCreate (Android.OS.Bundle savedInstanceState) 16 | { 17 | base.OnCreate (savedInstanceState); 18 | RetainInstance = true; 19 | } 20 | 21 | public override void OnViewCreated (Android.Views.View view, Android.OS.Bundle savedInstanceState) 22 | { 23 | base.OnViewCreated (view, savedInstanceState); 24 | if (ListAdapter == null) { 25 | ListAdapter = Model = new PlaylistViewModel 26 | { 27 | ListView = ListView, 28 | Context = App.Context, 29 | }; 30 | Model.CellFor += (item) => { 31 | return new PlaylistCell{Playlist = item}; 32 | }; 33 | } 34 | this.SetListShown (true); 35 | } 36 | } 37 | } 38 | 39 | -------------------------------------------------------------------------------- /MusicPlayer.iOS/Resources/SVG/playbackSliderThumb.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Rectangle 1 + Line 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /MusicPlayer.iOS/ViewControllers/Car/CarArtistViewController.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using MusicPlayer.iOS.ViewControllers; 3 | using UIKit; 4 | 5 | namespace MusicPlayer.iOS.Car 6 | { 7 | public class CarArtistViewController : ArtistViewController 8 | { 9 | public CarArtistViewController() 10 | { 11 | } 12 | UIGestureRecognizer panGesture; 13 | public override void LoadView() 14 | { 15 | base.LoadView(); 16 | TableView.SectionIndexMinimumDisplayRowCount = 2000000; 17 | //panGesture = TableView.AddGestures(); 18 | } 19 | 20 | CoreGraphics.CGSize lastSize; 21 | public override void ViewDidLayoutSubviews() 22 | { 23 | base.ViewDidLayoutSubviews(); 24 | var size = View.Bounds.Size; 25 | if (lastSize == size) 26 | return; 27 | if (menuButton != null) { 28 | menuButton.Image = Images.GetMenuImage (size.Width * CarStyle.NavIconImagePercent); 29 | } 30 | lastSize = size; 31 | TableView.RowHeight = CarStyle.RowHeight; 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /MusicPlayer.iOS/Resources/SVG/menu.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | navicon 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /MusicPlayer.iOS/ViewControllers/Car/CarPlaylistViewController.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using MusicPlayer.iOS.ViewControllers; 3 | using UIKit; 4 | 5 | namespace MusicPlayer.iOS.Car 6 | { 7 | public class CarPlaylistViewController : PlaylistViewController 8 | { 9 | public CarPlaylistViewController() 10 | { 11 | } 12 | 13 | UIGestureRecognizer panGesture; 14 | public override void LoadView() 15 | { 16 | base.LoadView(); 17 | TableView.SectionIndexMinimumDisplayRowCount = 2000000; 18 | //panGesture = TableView.AddGestures(); 19 | } 20 | 21 | CoreGraphics.CGSize lastSize; 22 | public override void ViewDidLayoutSubviews() 23 | { 24 | base.ViewDidLayoutSubviews(); 25 | var size = View.Bounds.Size; 26 | if (lastSize == size) 27 | return; 28 | if (menuButton != null) { 29 | menuButton.Image = Images.GetMenuImage (size.Width * CarStyle.NavIconImagePercent); 30 | } 31 | lastSize = size; 32 | TableView.RowHeight = CarStyle.RowHeight; 33 | } 34 | } 35 | } -------------------------------------------------------------------------------- /MusicPlayer.Apple/MusicPlayer.Apple.shproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {87EBC71D-6232-4F2D-90F6-57933D92D32C} 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/animator/slide_in_from_left.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 23 | -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/animator/slide_in_from_right.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 23 | -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/animator/slide_out_to_bottom.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 23 | -------------------------------------------------------------------------------- /MusicPlayer.Droid/UI/Fragments/AlbumsFragment.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Android.App; 3 | using MusicPlayer.Models; 4 | using MusicPlayer.ViewModels; 5 | 6 | namespace MusicPlayer 7 | { 8 | public class AlbumsFragment : ListFragment 9 | { 10 | AlbumViewModel Model; 11 | public AlbumsFragment () 12 | { 13 | 14 | } 15 | 16 | public override void OnCreate (Android.OS.Bundle savedInstanceState) 17 | { 18 | base.OnCreate (savedInstanceState); 19 | RetainInstance = true; 20 | } 21 | 22 | public override void OnViewCreated (Android.Views.View view, Android.OS.Bundle savedInstanceState) 23 | { 24 | base.OnViewCreated (view, savedInstanceState); 25 | if (ListAdapter == null) { 26 | ListAdapter = Model = new AlbumViewModel 27 | { 28 | ListView = ListView, 29 | Context = App.Context, 30 | }; 31 | Model.CellFor += (Album item) => { 32 | return new AlbumCell{Album = item}; 33 | }; 34 | } 35 | this.SetListShown (true); 36 | } 37 | } 38 | } 39 | 40 | -------------------------------------------------------------------------------- /MusicPlayer.Droid/UI/Fragments/GenresFragment.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Android.App; 3 | using MusicPlayer.Models; 4 | using MusicPlayer.ViewModels; 5 | 6 | namespace MusicPlayer 7 | { 8 | public class GenresFragment : ListFragment 9 | { 10 | GenreViewModel Model; 11 | public GenresFragment () 12 | { 13 | 14 | } 15 | 16 | public override void OnCreate (Android.OS.Bundle savedInstanceState) 17 | { 18 | base.OnCreate (savedInstanceState); 19 | RetainInstance = true; 20 | } 21 | 22 | public override void OnViewCreated (Android.Views.View view, Android.OS.Bundle savedInstanceState) 23 | { 24 | base.OnViewCreated (view, savedInstanceState); 25 | if (ListAdapter == null) { 26 | ListAdapter = Model = new GenreViewModel 27 | { 28 | ListView = ListView, 29 | Context = App.Context, 30 | }; 31 | Model.CellFor += (Genre item) => { 32 | return new GenreCell{Genre = item}; 33 | }; 34 | } 35 | this.SetListShown (true); 36 | } 37 | } 38 | } 39 | 40 | -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/animator/slide_in_from_bottom.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 23 | -------------------------------------------------------------------------------- /MusicPlayer.iOS/UI/VideoView.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | using MusicPlayer.Managers; 5 | using UIKit; 6 | 7 | namespace MusicPlayer.iOS.UI 8 | { 9 | class VideoView : UIView 10 | { 11 | public Action Tapped { get; set; } 12 | public VideoView() 13 | { 14 | BackgroundColor = UIColor.Black; 15 | this.AddGestureRecognizer(new UITapGestureRecognizer(() => 16 | { 17 | if(Tapped != null) 18 | Tapped(); 19 | else 20 | NotificationManager.Shared.ProcToggleFullScreenVideo(); 21 | })); 22 | } 23 | 24 | public override void LayoutSubviews() 25 | { 26 | base.LayoutSubviews(); 27 | PlaybackManager.Shared.NativePlayer.VideoLayer.Frame = Bounds; 28 | } 29 | 30 | public void Show() 31 | { 32 | if (Hidden) 33 | return; 34 | if (PlaybackManager.Shared.NativePlayer.VideoLayer.SuperLayer == Layer) 35 | return; 36 | Layer.AddSublayer(PlaybackManager.Shared.NativePlayer.VideoLayer); 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/drawable/fullscreen_toolbar_bg_gradient.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 23 | -------------------------------------------------------------------------------- /MusicPlayer.OSX/Views/Cells/SongCell.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using AppKit; 3 | using MusicPlayer.Models; 4 | 5 | namespace MusicPlayer 6 | { 7 | public class SongCell : BaseCell 8 | { 9 | public SongCell () 10 | { 11 | 12 | } 13 | 14 | public override AppKit.NSView GetCell (AppKit.NSTableView tableView, AppKit.NSTableColumn tableColumn, Foundation.NSObject owner) 15 | { 16 | var textField = tableView.MakeView ("Text", owner) as NSTextField ?? new NSTextField ().StyleAsLabel(); 17 | textField.StringValue = GetCellText (tableColumn); 18 | return textField; 19 | } 20 | 21 | public override string GetCellText (NSTableColumn tableColumn) 22 | { 23 | var song = BindingContext as Song; 24 | switch (tableColumn.Identifier.ToLower ()) { 25 | case "title": 26 | return song?.Name ?? ""; 27 | case "artist": 28 | return song?.Artist ?? ""; 29 | case "album": 30 | return song?.Album ?? ""; 31 | default: 32 | return song?.ToString () ?? ""; 33 | } 34 | } 35 | } 36 | } 37 | 38 | -------------------------------------------------------------------------------- /MusicPlayer.iOS/ViewControllers/Car/CarSongsViewController.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using MusicPlayer.iOS.ViewControllers; 3 | using UIKit; 4 | 5 | namespace MusicPlayer.iOS.Car 6 | { 7 | class CarSongsViewController : SongViewController 8 | { 9 | public CarSongsViewController() 10 | { 11 | 12 | } 13 | 14 | UIGestureRecognizer panGesture; 15 | public override void LoadView() 16 | { 17 | base.LoadView(); 18 | TableView.SectionIndexMinimumDisplayRowCount = 2000000; 19 | //panGesture = TableView.AddGestures(); 20 | } 21 | 22 | CoreGraphics.CGSize lastSize; 23 | public override void ViewDidLayoutSubviews() 24 | { 25 | base.ViewDidLayoutSubviews(); 26 | var size = View.Bounds.Size; 27 | if (lastSize == size) 28 | return; 29 | lastSize = size; 30 | if (menuButton != null) { 31 | menuButton.Image = Images.GetMenuImage (size.Width * CarStyle.NavIconImagePercent); 32 | } 33 | TableView.RowHeight = CarStyle.RowHeight; 34 | TableView.ReloadData(); 35 | } 36 | 37 | } 38 | } -------------------------------------------------------------------------------- /Api/AmazonApi/CloudDrive/Nodes/Filters/DateTimeNodeFilter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Amazon.CloudDrive 4 | { 5 | public class DateTimeNodeFilter : NodeFilter 6 | { 7 | public DateTimeFilterComparison Comparison { get; set; } 8 | 9 | public string Field { get; set; } 10 | 11 | public DateTime Date { get; set; } 12 | 13 | #region implemented abstract members of NodeFilter 14 | 15 | protected override string Name 16 | { 17 | get { return Field; } 18 | } 19 | 20 | protected override string Value 21 | { 22 | get 23 | { 24 | switch (Comparison) 25 | { 26 | case DateTimeFilterComparison.GreaterThan: 27 | case DateTimeFilterComparison.GreaterThanOrEqualTo: 28 | return string.Format("[* {0}]", Date.ToString("O")); 29 | case DateTimeFilterComparison.LessThan: 30 | case DateTimeFilterComparison.LessThanOrEqualTo: 31 | return string.Format("[{0}*]", Date.ToString("O")); 32 | } 33 | ; 34 | return ""; 35 | } 36 | } 37 | 38 | #endregion 39 | } 40 | } -------------------------------------------------------------------------------- /MusicPlayer.iOS/ViewControllers/BaseEditTableViewController.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | using UIKit; 5 | 6 | namespace MusicPlayer.iOS.ViewControllers 7 | { 8 | public abstract class BaseEditTableViewController : BaseTableViewController 9 | { 10 | protected UIBarButtonItem editButton; 11 | protected UIBarButtonItem doneButton; 12 | 13 | public override void LoadView() 14 | { 15 | base.LoadView(); 16 | if(CanEdit) 17 | NavigationItem.RightBarButtonItem = 18 | editButton = new UIBarButtonItem(UIBarButtonSystemItem.Edit, (sender, args) => toggleEditing()); 19 | doneButton = new UIBarButtonItem(UIBarButtonSystemItem.Done, (sender, args) => toggleEditing()); 20 | } 21 | public bool CanEdit { get; set; } = true; 22 | 23 | void toggleEditing() 24 | { 25 | var editing = !TableView.Editing; 26 | 27 | this.NavigationItem.SetRightBarButtonItem(editing ? doneButton : editButton, true); 28 | TableView.SetEditing(editing, true); 29 | } 30 | } 31 | } -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/anim/fade_in.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 23 | -------------------------------------------------------------------------------- /MusicPlayer.Droid/Resources/anim/fade_out.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 23 | -------------------------------------------------------------------------------- /MusicPlayer.Droid/UI/NowPlayingActivity.cs: -------------------------------------------------------------------------------- 1 | 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Linq; 5 | using System.Text; 6 | 7 | using Android.App; 8 | using Android.Content; 9 | using Android.OS; 10 | using Android.Runtime; 11 | using Android.Views; 12 | using Android.Widget; 13 | using Android.Content.Res; 14 | using MusicPlayer.Droid.UI; 15 | 16 | namespace MusicPlayer.Droid 17 | { 18 | public class NowPlayingActivity : Activity 19 | { 20 | protected override void OnCreate(Bundle savedInstanceState) 21 | { 22 | base.OnCreate(savedInstanceState); 23 | Intent newIntent = null; 24 | UiModeManager uiModeManager = (UiModeManager)GetSystemService(Context.UiModeService); 25 | if (uiModeManager.CurrentModeType == Configuration.UiModeTypeTelevision) 26 | { 27 | //newIntent = new Intent(this, TvPlaybackActivity.class); 28 | } 29 | else 30 | { 31 | newIntent = new Intent(this, typeof(MusicPlayerActivity)); 32 | } 33 | StartActivity(newIntent); 34 | Finish(); 35 | } 36 | } 37 | } 38 | 39 | --------------------------------------------------------------------------------