Showing preview only (1,826K chars total). Download the full file or copy to clipboard to get everything.
Repository: Stealth2012/meridian
Branch: master
Commit: 0b46d1f46add
Files: 340
Total size: 1.7 MB
Directory structure:
gitextract_zxoun8e2/
├── .gitattributes
├── .gitignore
├── .gitmodules
├── .nuget/
│ ├── NuGet.Config
│ └── NuGet.targets
├── LICENSE.txt
├── LastFmLibPortable/
│ └── Trunk/
│ ├── Core/
│ │ ├── Album/
│ │ │ ├── LastFmAlbum.cs
│ │ │ └── LastFmAlbumRequest.cs
│ │ ├── Artist/
│ │ │ ├── LastFmArtist.cs
│ │ │ └── LastFmArtistRequest.cs
│ │ ├── Auth/
│ │ │ ├── LastFmAuthRequest.cs
│ │ │ └── LastFmAuthResult.cs
│ │ ├── Chart/
│ │ │ └── LastFmChartRequest.cs
│ │ ├── CoreRequest.cs
│ │ ├── Image/
│ │ │ └── LastFmImage.cs
│ │ ├── LastFmErrorProcessor.cs
│ │ ├── Tag/
│ │ │ └── LastFmTagRequest.cs
│ │ ├── Track/
│ │ │ ├── LastFmTrack.cs
│ │ │ └── LastFmTrackRequest.cs
│ │ └── User/
│ │ └── LastFmUserRequest.cs
│ ├── Error/
│ │ └── LastFmLoginException.cs
│ ├── Extensions/
│ │ ├── CommonExtensions.cs
│ │ └── StreamExtensions.cs
│ ├── LastFM.cs
│ ├── LastFmConst.cs
│ ├── LastFmLibPortable.csproj
│ ├── LastFmUtils.cs
│ ├── app.config
│ └── project.json
├── Meridian/
│ ├── App.config
│ ├── App.xaml
│ ├── App.xaml.cs
│ ├── Behaviours/
│ │ ├── AutoScrollToCurrentItemBehaviour.cs
│ │ ├── FocusBehaviour.cs
│ │ ├── TransitionBehaviour.cs
│ │ └── VisibilityTransitionBehaviour.cs
│ ├── Controls/
│ │ ├── BindablePasswordBox.cs
│ │ ├── BusyIndicator.cs
│ │ ├── ContentTransitionControl.xaml
│ │ ├── ContentTransitionControl.xaml.cs
│ │ ├── ExtendedListBox.cs
│ │ ├── FlyoutContent.cs
│ │ ├── FlyoutControl.xaml
│ │ ├── FlyoutControl.xaml.cs
│ │ ├── ImageTransitionControl.xaml
│ │ ├── ImageTransitionControl.xaml.cs
│ │ ├── LocalSearchControl.xaml
│ │ ├── LocalSearchControl.xaml.cs
│ │ ├── NotificationControl.xaml
│ │ ├── NotificationControl.xaml.cs
│ │ ├── PageBase.cs
│ │ ├── PlayerControl.xaml
│ │ ├── PlayerControl.xaml.cs
│ │ ├── ShareBarControl.xaml
│ │ ├── ShareBarControl.xaml.cs
│ │ ├── TextBoxWithHint.cs
│ │ ├── VirtualizingWrapPanel.cs
│ │ ├── VolumeControl.xaml
│ │ └── VolumeControl.xaml.cs
│ ├── Converters/
│ │ ├── AlbumContextMenuVisibilityConverter.cs
│ │ ├── AlbumListItemContainerSelector.cs
│ │ ├── AudioTemplateSelector.cs
│ │ ├── AudioTimeSpanConverter.cs
│ │ ├── BooleanToValueConverter.cs
│ │ ├── MainMenuGroupStyleSelector.cs
│ │ └── SearchResultTemplateSelector.cs
│ ├── Domain/
│ │ └── Settings.cs
│ ├── Extensions/
│ │ ├── AudioExtensions.cs
│ │ ├── CommonExtensions.cs
│ │ ├── ListExtensions.cs
│ │ └── SocketExtensions.cs
│ ├── Helpers/
│ │ ├── AlbumCoversHelper.cs
│ │ ├── ArtistImageHelper.cs
│ │ ├── DateTimeConverter.cs
│ │ ├── FilesHelper.cs
│ │ ├── HotKeyManager.cs
│ │ ├── ImageAsyncHelper.cs
│ │ ├── LongRunningOperation.cs
│ │ ├── Md5Helper.cs
│ │ ├── NativeMethods.cs
│ │ ├── NetworkHelper.cs
│ │ └── StringHelper.cs
│ ├── Layout/
│ │ ├── Controls/
│ │ │ ├── HeaderControl.xaml
│ │ │ ├── HeaderControl.xaml.cs
│ │ │ └── PageTabControl.cs
│ │ ├── LayoutBase.cs
│ │ ├── PageBase.cs
│ │ ├── Templates/
│ │ │ ├── PageBaseTemplate.xaml
│ │ │ └── TwoColumnPageLayoutTemplate.xaml
│ │ └── TwoColumnPageLayout.cs
│ ├── MainWindow.xaml
│ ├── MainWindow.xaml.cs
│ ├── Meridian.csproj
│ ├── Model/
│ │ ├── Account.cs
│ │ ├── Audio.cs
│ │ ├── AudioAlbum.cs
│ │ ├── AudioArtist.cs
│ │ ├── AudioPost.cs
│ │ ├── ColorScheme.cs
│ │ ├── ItemsResponse.cs
│ │ ├── MainMenuItem.cs
│ │ ├── NewsItemsResponse.cs
│ │ ├── Recommendation.cs
│ │ ├── SearchMenuItem.cs
│ │ ├── Settings/
│ │ │ ├── SettingsEngine.cs
│ │ │ ├── SettingsHotKey.cs
│ │ │ └── SettingsLanguage.cs
│ │ └── UIMode.cs
│ ├── Properties/
│ │ ├── Resources.Designer.cs
│ │ ├── Resources.resx
│ │ ├── Settings.Designer.cs
│ │ └── Settings.settings
│ ├── RemotePlay/
│ │ ├── RemotePlayService.cs
│ │ ├── SimpleHttpRequest.cs
│ │ ├── SimpleHttpResponse.cs
│ │ ├── SimpleWebServer.cs
│ │ └── web/
│ │ ├── index.html
│ │ ├── js/
│ │ │ ├── index.js
│ │ │ └── utils.js
│ │ ├── lib/
│ │ │ └── svg4everybody.js
│ │ └── styles/
│ │ ├── index.css
│ │ └── player.css
│ ├── Resources/
│ │ ├── Localization/
│ │ │ ├── ErrorResources.Designer.cs
│ │ │ ├── ErrorResources.resx
│ │ │ ├── ErrorResources.ru.resx
│ │ │ ├── MainResources.Designer.cs
│ │ │ ├── MainResources.resx
│ │ │ └── MainResources.ru.resx
│ │ ├── Styles/
│ │ │ ├── Animations.xaml
│ │ │ ├── AudioControlStyles.xaml
│ │ │ ├── ButtonStyles.xaml
│ │ │ ├── CheckBoxStyles.xaml
│ │ │ ├── ComboBoxStyles.xaml
│ │ │ ├── ContextMenuStyles.xaml
│ │ │ ├── DataTemplates.xaml
│ │ │ ├── ExpanderStyles.xaml
│ │ │ ├── Icons.xaml
│ │ │ ├── ListBoxStyles.xaml
│ │ │ ├── ProgressBarStyles.xaml
│ │ │ ├── ScrollbarStyles.xaml
│ │ │ ├── SliderStyles.xaml
│ │ │ ├── Styles.xaml
│ │ │ ├── TabControlStyles.xaml
│ │ │ ├── TextBoxStyles.xaml
│ │ │ └── WindowButtons.xaml
│ │ └── Themes/
│ │ ├── Accent.xaml
│ │ ├── Accents/
│ │ │ ├── Blue.xaml
│ │ │ ├── Emerald.xaml
│ │ │ ├── Magenta.xaml
│ │ │ ├── Mango.xaml
│ │ │ ├── Pink.xaml
│ │ │ ├── Purple.xaml
│ │ │ ├── Red.xaml
│ │ │ ├── Sea.xaml
│ │ │ └── Sky.xaml
│ │ ├── Dark.xaml
│ │ ├── Graphite.xaml
│ │ └── Light.xaml
│ ├── SQLite.cs
│ ├── SQLiteAsync.cs
│ ├── Services/
│ │ ├── AccountManager.cs
│ │ ├── CacheService.cs
│ │ ├── DataBaseService.cs
│ │ ├── DataService.cs
│ │ ├── HostService.cs
│ │ ├── LoggingService.cs
│ │ ├── Media/
│ │ │ ├── AudioService.cs
│ │ │ └── Core/
│ │ │ ├── MediaPlayerBase.cs
│ │ │ ├── NaudioMediaPlayer.cs
│ │ │ ├── UwpMediaPlayer.cs
│ │ │ └── WmpMediaPlayer.cs
│ │ ├── Music/
│ │ │ ├── LocalMusicService.cs
│ │ │ └── Repositories/
│ │ │ ├── LocalAlbumsRepository.cs
│ │ │ ├── LocalArtistsRepository.cs
│ │ │ └── LocalTracksRepository.cs
│ │ ├── NotificationService.cs
│ │ ├── ServiceLocator.cs
│ │ └── UpdateService.cs
│ ├── View/
│ │ ├── Compact/
│ │ │ ├── CompactLandscapeView.xaml
│ │ │ ├── CompactLandscapeView.xaml.cs
│ │ │ ├── CompactView.xaml
│ │ │ └── CompactView.xaml.cs
│ │ ├── Flyouts/
│ │ │ ├── AddSocietyFlyout.xaml
│ │ │ ├── AddSocietyFlyout.xaml.cs
│ │ │ ├── AddToAlbumView.xaml
│ │ │ ├── AddToAlbumView.xaml.cs
│ │ │ ├── CaptchaRequestView.xaml
│ │ │ ├── CaptchaRequestView.xaml.cs
│ │ │ ├── CommonErrorView.xaml
│ │ │ ├── CommonErrorView.xaml.cs
│ │ │ ├── CommonMessageView.xaml
│ │ │ ├── CommonMessageView.xaml.cs
│ │ │ ├── EditAlbumView.xaml
│ │ │ ├── EditAlbumView.xaml.cs
│ │ │ ├── EditAudioView.xaml
│ │ │ ├── EditAudioView.xaml.cs
│ │ │ ├── Local/
│ │ │ │ ├── MusicScanView.xaml
│ │ │ │ └── MusicScanView.xaml.cs
│ │ │ ├── LoginLastFmMessageView.xaml
│ │ │ ├── LoginLastFmMessageView.xaml.cs
│ │ │ ├── LoginLastFmView.xaml
│ │ │ ├── LoginLastFmView.xaml.cs
│ │ │ ├── LyricsView.xaml
│ │ │ ├── LyricsView.xaml.cs
│ │ │ ├── ShareView.xaml
│ │ │ ├── ShareView.xaml.cs
│ │ │ ├── TellFriendsRequestView.xaml
│ │ │ ├── TellFriendsRequestView.xaml.cs
│ │ │ ├── TellResultView.xaml
│ │ │ ├── TellResultView.xaml.cs
│ │ │ ├── WebValidationView.xaml
│ │ │ └── WebValidationView.xaml.cs
│ │ ├── Local/
│ │ │ ├── LocalAlbumView.xaml
│ │ │ ├── LocalAlbumView.xaml.cs
│ │ │ ├── LocalCollectionView.xaml
│ │ │ └── LocalCollectionView.xaml.cs
│ │ ├── Main/
│ │ │ ├── FeedView.xaml
│ │ │ ├── FeedView.xaml.cs
│ │ │ ├── LoginView.xaml
│ │ │ ├── LoginView.xaml.cs
│ │ │ ├── MusicView.xaml
│ │ │ ├── MusicView.xaml.cs
│ │ │ ├── NowPlayingView.xaml
│ │ │ ├── NowPlayingView.xaml.cs
│ │ │ ├── PopularAudioView.xaml
│ │ │ ├── PopularAudioView.xaml.cs
│ │ │ ├── RecommendationsView.xaml
│ │ │ └── RecommendationsView.xaml.cs
│ │ ├── People/
│ │ │ ├── FriendsAudioView.xaml
│ │ │ ├── FriendsAudioView.xaml.cs
│ │ │ ├── FriendsView.xaml
│ │ │ ├── FriendsView.xaml.cs
│ │ │ ├── SocietiesView.xaml
│ │ │ ├── SocietiesView.xaml.cs
│ │ │ ├── SocietyAudioView.xaml
│ │ │ ├── SocietyAudioView.xaml.cs
│ │ │ ├── SubscriptionsView.xaml
│ │ │ └── SubscriptionsView.xaml.cs
│ │ ├── Search/
│ │ │ ├── AlbumView.xaml
│ │ │ ├── AlbumView.xaml.cs
│ │ │ ├── ArtistAlbumsView.xaml
│ │ │ ├── ArtistAlbumsView.xaml.cs
│ │ │ ├── ArtistAudioView.xaml
│ │ │ ├── ArtistAudioView.xaml.cs
│ │ │ ├── ArtistView.xaml
│ │ │ ├── ArtistView.xaml.cs
│ │ │ ├── SearchResultsView.xaml
│ │ │ └── SearchResultsView.xaml.cs
│ │ ├── Settings/
│ │ │ ├── SettingsAboutView.xaml
│ │ │ ├── SettingsAboutView.xaml.cs
│ │ │ ├── SettingsAccountsView.xaml
│ │ │ ├── SettingsAccountsView.xaml.cs
│ │ │ ├── SettingsHotkeysView.xaml
│ │ │ ├── SettingsHotkeysView.xaml.cs
│ │ │ ├── SettingsRemotePlayView.xaml
│ │ │ ├── SettingsRemotePlayView.xaml.cs
│ │ │ ├── SettingsUIView.xaml
│ │ │ ├── SettingsUIView.xaml.cs
│ │ │ ├── SettingsUpdatesView.xaml
│ │ │ ├── SettingsUpdatesView.xaml.cs
│ │ │ ├── SettingsView.xaml
│ │ │ └── SettingsView.xaml.cs
│ │ ├── TrackNotifcationView.xaml
│ │ └── TrackNotifcationView.xaml.cs
│ └── ViewModel/
│ ├── Flyouts/
│ │ ├── EditAudioViewModel.cs
│ │ ├── LoginLastFmViewModel.cs
│ │ ├── LyricsViewModel.cs
│ │ └── ShareViewModel.cs
│ ├── Local/
│ │ ├── LocalAlbumViewModel.cs
│ │ └── LocalMusicViewModel.cs
│ ├── Main/
│ │ ├── FeedViewModel.cs
│ │ ├── LoginViewModel.cs
│ │ ├── MusicViewModel.cs
│ │ ├── NowPlayingViewModel.cs
│ │ ├── PopularAudioViewModel.cs
│ │ └── RecommendationsViewModel.cs
│ ├── MainViewModel.cs
│ ├── Messages/
│ │ ├── CurrentAudioChangedMessage.cs
│ │ ├── LocalRepositoryUpdatedMessage.cs
│ │ ├── LoginMessage.cs
│ │ ├── PlayStateChangedMessage.cs
│ │ ├── PlayerPositionChangedMessage.cs
│ │ └── UserTracksChangedMessage.cs
│ ├── People/
│ │ ├── FriendAudioViewModel.cs
│ │ ├── FriendsViewModel.cs
│ │ ├── SocietiesViewModel.cs
│ │ ├── SocietyAudioViewModel.cs
│ │ └── SubscriptionsViewModel.cs
│ ├── Search/
│ │ ├── AlbumViewModel.cs
│ │ ├── ArtistViewModel.cs
│ │ └── SearchViewModel.cs
│ ├── SettingsViewModel.cs
│ ├── ViewModelBase.cs
│ └── ViewModelLocator.cs
├── Meridian.Core/
│ └── Services/
│ └── AccountsService.cs
├── MeridianDesktop.sln
├── Neptune/
│ └── Trunk/
│ ├── Neptune.Base/
│ │ ├── Collections/
│ │ │ └── IAsyncCollection.cs
│ │ ├── Extensions/
│ │ │ ├── CommonExtensions.cs
│ │ │ └── StreamExtensions.cs
│ │ ├── Helpers/
│ │ │ └── TaskQueue.cs
│ │ ├── Messages/
│ │ │ ├── GoHomeMessage.cs
│ │ │ └── NavigateToPageMessage.cs
│ │ ├── Neptune.Base.csproj
│ │ ├── Properties/
│ │ │ └── AssemblyInfo.cs
│ │ ├── Storage/
│ │ │ └── IFileStorage.cs
│ │ ├── View/
│ │ │ └── IVisualViewModel.cs
│ │ ├── app.config
│ │ └── project.json
│ ├── Neptune.Desktop/
│ │ ├── Behaviours/
│ │ │ ├── IgnoreMouseWheelBehavior.cs
│ │ │ ├── TriggerTransitionBehaviour.cs
│ │ │ ├── UpdateTextBindingOnPropertyChanged.cs
│ │ │ └── VisiblityTransitionBehaviour.cs
│ │ ├── Converters/
│ │ │ ├── BooleanToObjectConverter.cs
│ │ │ ├── BooleanToVisibilityConverter.cs
│ │ │ ├── InvertBooleanConverter.cs
│ │ │ ├── NullToBooleanConverter.cs
│ │ │ ├── NullToVisibilityConverter.cs
│ │ │ ├── StringToUpperConverter.cs
│ │ │ └── TimeSpanConverter.cs
│ │ ├── Domain/
│ │ │ └── AppSettings.cs
│ │ ├── Extensions/
│ │ │ └── VisualTreeHelperExtensions.cs
│ │ ├── Neptune.Desktop.csproj
│ │ └── Storage/
│ │ └── FileStorage.cs
│ └── Neptune.UI.Desktop/
│ ├── Behaviours/
│ │ ├── IgnoreMouseWheelBehavior.cs
│ │ ├── TriggerTransitionBehaviour.cs
│ │ ├── UpdateTextBindingOnPropertyChanged.cs
│ │ └── VisiblityTransitionBehaviour.cs
│ ├── Converters/
│ │ ├── BooleanToObjectConverter.cs
│ │ ├── BooleanToVisibilityConverter.cs
│ │ ├── InvertBooleanConverter.cs
│ │ ├── NullToBooleanConverter.cs
│ │ ├── NullToVisibilityConverter.cs
│ │ ├── StringToUpperConverter.cs
│ │ └── TimeSpanConverter.cs
│ ├── Extensions/
│ │ └── VisualTreeHelperExtensions.cs
│ ├── Neptune.UI.Desktop.csproj
│ ├── Properties/
│ │ └── AssemblyInfo.cs
│ └── packages.config
├── README.md
└── refs/
└── GongSolutions.Wpf.DragDrop.XML
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitattributes
================================================
###############################################################################
# Set default behavior to automatically normalize line endings.
###############################################################################
* text=auto
###############################################################################
# Set default behavior for command prompt diff.
#
# This is need for earlier builds of msysgit that does not have it on by
# default for csharp files.
# Note: This is only used by command line
###############################################################################
#*.cs diff=csharp
###############################################################################
# Set the merge driver for project and solution files
#
# Merging from the command prompt will add diff markers to the files if there
# are conflicts (Merging from VS is not affected by the settings below, in VS
# the diff markers are never inserted). Diff markers may cause the following
# file extensions to fail to load in VS. An alternative would be to treat
# these files as binary and thus will always conflict and require user
# intervention with every merge. To do so, just uncomment the entries below
###############################################################################
#*.sln merge=binary
#*.csproj merge=binary
#*.vbproj merge=binary
#*.vcxproj merge=binary
#*.vcproj merge=binary
#*.dbproj merge=binary
#*.fsproj merge=binary
#*.lsproj merge=binary
#*.wixproj merge=binary
#*.modelproj merge=binary
#*.sqlproj merge=binary
#*.wwaproj merge=binary
###############################################################################
# behavior for image files
#
# image files are treated as binary by default.
###############################################################################
#*.jpg binary
#*.png binary
#*.gif binary
###############################################################################
# diff behavior for common document formats
#
# Convert binary document formats to text before diffing them. This feature
# is only available from the command line. Turn it on by uncommenting the
# entries below.
###############################################################################
#*.doc diff=astextplain
#*.DOC diff=astextplain
#*.docx diff=astextplain
#*.DOCX diff=astextplain
#*.dot diff=astextplain
#*.DOT diff=astextplain
#*.pdf diff=astextplain
#*.PDF diff=astextplain
#*.rtf diff=astextplain
#*.RTF diff=astextplain
================================================
FILE: .gitignore
================================================
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
# User-specific files
*.suo
*.user
*.userosscache
*.sln.docstates
.idea/
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
build/
bld/
[Bb]in/
[Oo]bj/
# Visual Studio 2015 cache/options directory
.vs/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
# NUNIT
*.VisualState.xml
TestResult.xml
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
# DNX
project.lock.json
artifacts/
*_i.c
*_p.c
*_i.h
*.ilk
*.meta
*.obj
*.pch
*.pdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Chutzpah Test files
_Chutzpah*
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opensdf
*.sdf
*.cachefile
# Visual Studio profiler
*.psess
*.vsp
*.vspx
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# JustCode is a .NET coding add-in
.JustCode
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# NCrunch
_NCrunch_*
.*crunch*.local.xml
# MightyMoose
*.mm.*
AutoTest.Net/
# Web workbench (sass)
.sass-cache/
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
## TODO: Comment the next line if you want to checkin your
## web deploy settings but do note that will include unencrypted
## passwords
#*.pubxml
*.publishproj
# NuGet Packages
*.nupkg
# The packages folder can be ignored because of Package Restore
**/packages/*
# except build/, which is used as an MSBuild target.
!**/packages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/packages/repositories.config
# Windows Azure Build Output
csx/
*.build.csdef
# Windows Store app package directory
AppPackages/
# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!*.[Cc]ache/
# Others
ClientBin/
[Ss]tyle[Cc]op.*
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.publishsettings
node_modules/
orleans.codegen.cs
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
# SQL Server files
*.mdf
*.ldf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
# Microsoft Fakes
FakesAssemblies/
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
# Visual Studio 6 build log
*.plg
# Visual Studio 6 workspace options file
*.opt
# LightSwitch generated files
GeneratedArtifacts/
_Pvt_Extensions/
ModelManifest.xml
================================================
FILE: .gitmodules
================================================
[submodule "VkLib"]
path = VkLib
url = https://github.com/artemshuba/VkLib.git
================================================
FILE: .nuget/NuGet.Config
================================================
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<solution>
<add key="disableSourceControlIntegration" value="true" />
</solution>
</configuration>
================================================
FILE: .nuget/NuGet.targets
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">$(MSBuildProjectDirectory)\..\</SolutionDir>
<!-- Enable the restore command to run before builds -->
<RestorePackages Condition=" '$(RestorePackages)' == '' ">false</RestorePackages>
<!-- Property that enables building a package from a project -->
<BuildPackage Condition=" '$(BuildPackage)' == '' ">false</BuildPackage>
<!-- Determines if package restore consent is required to restore packages -->
<RequireRestoreConsent Condition=" '$(RequireRestoreConsent)' != 'false' ">true</RequireRestoreConsent>
<!-- Download NuGet.exe if it does not already exist -->
<DownloadNuGetExe Condition=" '$(DownloadNuGetExe)' == '' ">false</DownloadNuGetExe>
</PropertyGroup>
<ItemGroup Condition=" '$(PackageSources)' == '' ">
<!-- Package sources used to restore packages. By default, registered sources under %APPDATA%\NuGet\NuGet.Config will be used -->
<!-- The official NuGet package source (https://www.nuget.org/api/v2/) will be excluded if package sources are specified and it does not appear in the list -->
<!--
<PackageSource Include="https://www.nuget.org/api/v2/" />
<PackageSource Include="https://my-nuget-source/nuget/" />
-->
</ItemGroup>
<PropertyGroup Condition=" '$(OS)' == 'Windows_NT'">
<!-- Windows specific commands -->
<NuGetToolsPath>$([System.IO.Path]::Combine($(SolutionDir), ".nuget"))</NuGetToolsPath>
</PropertyGroup>
<PropertyGroup Condition=" '$(OS)' != 'Windows_NT'">
<!-- We need to launch nuget.exe with the mono command if we're not on windows -->
<NuGetToolsPath>$(SolutionDir).nuget</NuGetToolsPath>
</PropertyGroup>
<PropertyGroup>
<PackagesProjectConfig Condition=" '$(OS)' == 'Windows_NT'">$(MSBuildProjectDirectory)\packages.$(MSBuildProjectName.Replace(' ', '_')).config</PackagesProjectConfig>
<PackagesProjectConfig Condition=" '$(OS)' != 'Windows_NT'">$(MSBuildProjectDirectory)\packages.$(MSBuildProjectName).config</PackagesProjectConfig>
</PropertyGroup>
<PropertyGroup>
<PackagesConfig Condition="Exists('$(MSBuildProjectDirectory)\packages.config')">$(MSBuildProjectDirectory)\packages.config</PackagesConfig>
<PackagesConfig Condition="Exists('$(PackagesProjectConfig)')">$(PackagesProjectConfig)</PackagesConfig>
</PropertyGroup>
<PropertyGroup>
<!-- NuGet command -->
<NuGetExePath Condition=" '$(NuGetExePath)' == '' ">$(NuGetToolsPath)\NuGet.exe</NuGetExePath>
<PackageSources Condition=" $(PackageSources) == '' ">@(PackageSource)</PackageSources>
<NuGetCommand Condition=" '$(OS)' == 'Windows_NT'">"$(NuGetExePath)"</NuGetCommand>
<NuGetCommand Condition=" '$(OS)' != 'Windows_NT' ">mono --runtime=v4.0.30319 "$(NuGetExePath)"</NuGetCommand>
<PackageOutputDir Condition="$(PackageOutputDir) == ''">$(TargetDir.Trim('\\'))</PackageOutputDir>
<RequireConsentSwitch Condition=" $(RequireRestoreConsent) == 'true' ">-RequireConsent</RequireConsentSwitch>
<NonInteractiveSwitch Condition=" '$(VisualStudioVersion)' != '' AND '$(OS)' == 'Windows_NT' ">-NonInteractive</NonInteractiveSwitch>
<PaddedSolutionDir Condition=" '$(OS)' == 'Windows_NT'">"$(SolutionDir) "</PaddedSolutionDir>
<PaddedSolutionDir Condition=" '$(OS)' != 'Windows_NT' ">"$(SolutionDir)"</PaddedSolutionDir>
<!-- Commands -->
<RestoreCommand>$(NuGetCommand) install "$(PackagesConfig)" -source "$(PackageSources)" $(NonInteractiveSwitch) $(RequireConsentSwitch) -solutionDir $(PaddedSolutionDir)</RestoreCommand>
<BuildCommand>$(NuGetCommand) pack "$(ProjectPath)" -Properties "Configuration=$(Configuration);Platform=$(Platform)" $(NonInteractiveSwitch) -OutputDirectory "$(PackageOutputDir)" -symbols</BuildCommand>
<!-- We need to ensure packages are restored prior to assembly resolve -->
<BuildDependsOn Condition="$(RestorePackages) == 'true'">
RestorePackages;
$(BuildDependsOn);
</BuildDependsOn>
<!-- Make the build depend on restore packages -->
<BuildDependsOn Condition="$(BuildPackage) == 'true'">
$(BuildDependsOn);
BuildPackage;
</BuildDependsOn>
</PropertyGroup>
<Target Name="CheckPrerequisites">
<!-- Raise an error if we're unable to locate nuget.exe -->
<Error Condition="'$(DownloadNuGetExe)' != 'true' AND !Exists('$(NuGetExePath)')" Text="Unable to locate '$(NuGetExePath)'" />
<!--
Take advantage of MsBuild's build dependency tracking to make sure that we only ever download nuget.exe once.
This effectively acts as a lock that makes sure that the download operation will only happen once and all
parallel builds will have to wait for it to complete.
-->
<MsBuild Targets="_DownloadNuGet" Projects="$(MSBuildThisFileFullPath)" Properties="Configuration=NOT_IMPORTANT;DownloadNuGetExe=$(DownloadNuGetExe)" />
</Target>
<Target Name="_DownloadNuGet">
<DownloadNuGet OutputFilename="$(NuGetExePath)" Condition=" '$(DownloadNuGetExe)' == 'true' AND !Exists('$(NuGetExePath)')" />
</Target>
<Target Name="RestorePackages" DependsOnTargets="CheckPrerequisites">
<Exec Command="$(RestoreCommand)"
Condition="'$(OS)' != 'Windows_NT' And Exists('$(PackagesConfig)')" />
<Exec Command="$(RestoreCommand)"
LogStandardErrorAsError="true"
Condition="'$(OS)' == 'Windows_NT' And Exists('$(PackagesConfig)')" />
</Target>
<Target Name="BuildPackage" DependsOnTargets="CheckPrerequisites">
<Exec Command="$(BuildCommand)"
Condition=" '$(OS)' != 'Windows_NT' " />
<Exec Command="$(BuildCommand)"
LogStandardErrorAsError="true"
Condition=" '$(OS)' == 'Windows_NT' " />
</Target>
<UsingTask TaskName="DownloadNuGet" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
<ParameterGroup>
<OutputFilename ParameterType="System.String" Required="true" />
</ParameterGroup>
<Task>
<Reference Include="System.Core" />
<Using Namespace="System" />
<Using Namespace="System.IO" />
<Using Namespace="System.Net" />
<Using Namespace="Microsoft.Build.Framework" />
<Using Namespace="Microsoft.Build.Utilities" />
<Code Type="Fragment" Language="cs">
<![CDATA[
try {
OutputFilename = Path.GetFullPath(OutputFilename);
Log.LogMessage("Downloading latest version of NuGet.exe...");
WebClient webClient = new WebClient();
webClient.DownloadFile("https://www.nuget.org/nuget.exe", OutputFilename);
return true;
}
catch (Exception ex) {
Log.LogErrorFromException(ex);
return false;
}
]]>
</Code>
</Task>
</UsingTask>
</Project>
================================================
FILE: LICENSE.txt
================================================
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
Copyright 2014 Artem Shuba
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
================================================
FILE: LastFmLibPortable/Trunk/Core/Album/LastFmAlbum.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using LastFmLib.Core.Track;
using Newtonsoft.Json.Linq;
namespace LastFmLib.Core.Album
{
public class LastFmAlbum
{
public string Mbid { get; set; }
public string Name { get; set; }
public string Artist { get; set; }
public string ImageSmall { get; set; }
public string ImageMedium { get; set; }
public string ImageLarge { get; set; }
public string ImageExtraLarge { get; set; }
public string ImageMega { get; set; }
public List<LastFmTrack> Tracks { get; set; }
public List<string> TopTags { get; set; }
public static LastFmAlbum FromJson(JToken json)
{
if (json == null)
throw new ArgumentException("Json can not be null.");
var result = new LastFmAlbum();
if (json["mbid"] != null)
result.Mbid = json["mbid"].Value<string>();
result.Name = json["name"].Value<string>();
if (json["artist"] != null)
{
if (!json["artist"].HasValues)
result.Artist = json["artist"].Value<string>();
else
{
result.Artist = json["artist"]["name"].Value<string>();
}
}
var imageToken = json["image"];
if (imageToken != null)
{
foreach (var image in imageToken.Children())
{
switch (image["size"].Value<string>())
{
case "small":
result.ImageSmall = image["#text"].Value<string>();
break;
case "medium":
result.ImageMedium = image["#text"].Value<string>();
break;
case "large":
result.ImageLarge = image["#text"].Value<string>();
break;
case "extralarge":
result.ImageExtraLarge = image["#text"].Value<string>();
break;
}
}
}
if (json.SelectToken("tracks.track") != null)
{
result.Tracks = new List<LastFmTrack>();
var trackJson = json.SelectToken("tracks.track");
if (trackJson is JArray)
result.Tracks.AddRange((from a in trackJson select LastFmTrack.FromJson(a)).ToList());
else
result.Tracks.Add(LastFmTrack.FromJson(trackJson));
}
if (json.SelectToken("toptags.tag") != null)
{
result.TopTags = new List<string>();
foreach (var tagToken in json.SelectToken("toptags.tag"))
{
if (tagToken is JProperty)
result.TopTags.Add(((JProperty)tagToken).Value.Value<string>());
else
result.TopTags.Add(tagToken["name"].Value<string>());
}
}
return result;
}
}
}
================================================
FILE: LastFmLibPortable/Trunk/Core/Album/LastFmAlbumRequest.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq;
namespace LastFmLib.Core.Album
{
public class LastFmAlbumRequest
{
private readonly LastFm _lastFm;
public LastFmAlbumRequest(LastFm lastFm)
{
_lastFm = lastFm;
}
public async Task<List<LastFmAlbum>> Search(string album)
{
var parameters = new Dictionary<string, string>();
parameters.Add("album", album);
parameters.Add("api_key", _lastFm.ApiKey);
var response = await (new CoreRequest(new Uri(LastFmConst.MethodBase + "album.search"), parameters).Execute());
LastFmErrorProcessor.ProcessError(response);
if (response.SelectToken("results.albummatches.album") != null)
{
var albumJson = response.SelectToken("results.albummatches.album");
if (albumJson is JArray)
return
(from a in response.SelectToken("results.albummatches.album") select LastFmAlbum.FromJson(a)).ToList();
else
return new List<LastFmAlbum>() { LastFmAlbum.FromJson(albumJson) };
}
return null;
}
public async Task<LastFmAlbum> GetInfo(string mbid, string album, string artist, bool autoCorrect = true)
{
var parameters = new Dictionary<string, string>();
if (!string.IsNullOrEmpty(mbid))
parameters.Add("mbid", mbid);
else
{
parameters.Add("album", album);
parameters.Add("artist", artist);
}
if (autoCorrect)
parameters.Add("autocorrect", "1");
parameters.Add("api_key", _lastFm.ApiKey);
var response = await (new CoreRequest(new Uri(LastFmConst.MethodBase + "album.getInfo"), parameters).Execute());
LastFmErrorProcessor.ProcessError(response);
if (response["album"] != null)
{
return LastFmAlbum.FromJson(response["album"]);
}
return null;
}
}
}
================================================
FILE: LastFmLibPortable/Trunk/Core/Artist/LastFmArtist.cs
================================================
using System;
using System.Collections.Generic;
using Newtonsoft.Json.Linq;
namespace LastFmLib.Core.Artist
{
public class LastFmArtist
{
public string Name { get; set; }
public string Mbid { get; set; }
public string ImageSmall { get; set; }
public string ImageMedium { get; set; }
public string ImageLarge { get; set; }
public string ImageExtraLarge { get; set; }
public string ImageMega { get; set; }
public List<string> TopTags { get; set; }
public List<LastFmArtist> SimilarArtists { get; set; }
public string Bio { get; set; }
public static LastFmArtist FromJson(JToken json)
{
if (json == null)
throw new ArgumentException("Json can not be null.");
var result = new LastFmArtist();
result.Name = json["name"].Value<string>();
if (json["mbid"] != null)
result.Mbid = json["mbid"].Value<string>();
var imageToken = json["image"];
if (imageToken != null)
{
foreach (var image in imageToken.Children())
{
if (image["#text"] == null)
continue;
switch (image["size"].Value<string>())
{
case "small":
result.ImageSmall = image["#text"].Value<string>();
break;
case "medium":
result.ImageMedium = image["#text"].Value<string>();
break;
case "large":
result.ImageLarge = image["#text"].Value<string>();
break;
case "extralarge":
result.ImageExtraLarge = image["#text"].Value<string>();
break;
case "mega":
result.ImageMega = image["#text"].Value<string>();
break;
}
}
}
if (json.SelectToken("tags.tag") != null)
{
result.TopTags = new List<string>();
var tagToken = json.SelectToken("tags.tag");
if (tagToken is JArray)
{
foreach (var t in tagToken)
{
result.TopTags.Add(t["name"].Value<string>());
}
}
else
{
result.TopTags.Add(tagToken["name"].Value<string>());
}
}
if (json.SelectToken("similar.artist") != null)
{
result.SimilarArtists = new List<LastFmArtist>();
var similarToken = json.SelectToken("similar.artist");
if (similarToken is JArray)
{
foreach (var artistToken in similarToken)
{
result.SimilarArtists.Add(FromJson(artistToken));
}
}
else
{
result.SimilarArtists.Add(FromJson(similarToken));
}
}
if (json.SelectToken("bio.summary") != null)
{
result.Bio = json.SelectToken("bio.summary").Value<string>().Trim();
}
return result;
}
}
}
================================================
FILE: LastFmLibPortable/Trunk/Core/Artist/LastFmArtistRequest.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using LastFmLib.Core.Album;
using LastFmLib.Core.Image;
using LastFmLib.Core.Track;
using Newtonsoft.Json.Linq;
namespace LastFmLib.Core.Artist
{
public class LastFmArtistRequest
{
private readonly LastFm _lastFm;
public LastFmArtistRequest(LastFm lastFm)
{
_lastFm = lastFm;
}
[Obsolete("Last.FM no longer provides method artist.getImages.", true)]
public async Task<List<LastFmImage>> GetImages(string artist, string mbid, int limit, bool autoCorrect = true, int minWidth = 500, int minHeight = 200)
{
var parameters = new Dictionary<string, string>();
if (!string.IsNullOrEmpty(mbid))
parameters.Add("mbid", mbid);
else
parameters.Add("artist", artist);
if (autoCorrect)
parameters.Add("autocorrect", "1");
if (limit > 0)
parameters.Add("limit", limit.ToString());
parameters.Add("api_key", _lastFm.ApiKey);
var response = await (new CoreRequest(new Uri(LastFmConst.MethodBase + "artist.getImages"), parameters).Execute());
LastFmErrorProcessor.ProcessError(response);
if (response["images"] != null && response["images"]["image"] != null)
{
var ie = new List<LastFmImage>();
foreach (var image in response["images"]["image"])
{
ie.Add(LastFmImage.FromJson(image));
}
return ie;
}
return null;
}
public async Task<List<LastFmArtist>> Search(string artist)
{
var parameters = new Dictionary<string, string>();
parameters.Add("artist", artist);
parameters.Add("api_key", _lastFm.ApiKey);
var response = await (new CoreRequest(new Uri(LastFmConst.MethodBase + "artist.search"), parameters).Execute());
LastFmErrorProcessor.ProcessError(response);
if (response.SelectToken("results.artistmatches.artist") != null)
{
var artistJson = response.SelectToken("results.artistmatches.artist");
if (artistJson is JArray)
return (from a in response.SelectToken("results.artistmatches.artist")
select LastFmArtist.FromJson(a)).ToList();
else
return new List<LastFmArtist>() { LastFmArtist.FromJson(artistJson) };
}
return null;
}
public async Task<List<LastFmArtist>> GetSimilar(string artist, int count = 0)
{
var parameters = new Dictionary<string, string>();
parameters.Add("artist", artist);
if (count > 0)
parameters.Add("limit", count.ToString());
parameters.Add("api_key", _lastFm.ApiKey);
var response = await (new CoreRequest(new Uri(LastFmConst.MethodBase + "artist.getSimilar"), parameters).Execute());
LastFmErrorProcessor.ProcessError(response);
if (response.SelectToken("similarartists.artist") != null)
{
return (from a in response.SelectToken("similarartists.artist") select LastFmArtist.FromJson(a)).ToList();
}
return null;
}
public async Task<List<LastFmAlbum>> GetTopAlbums(string mbid, string artist, int count = 0)
{
var parameters = new Dictionary<string, string>();
if (!string.IsNullOrEmpty(mbid))
parameters.Add("mbid", mbid);
else
parameters.Add("artist", artist);
if (count > 0)
parameters.Add("limit", count.ToString());
parameters.Add("api_key", _lastFm.ApiKey);
var response = await (new CoreRequest(new Uri(LastFmConst.MethodBase + "artist.getTopAlbums"), parameters).Execute());
LastFmErrorProcessor.ProcessError(response);
if (response.SelectToken("topalbums.album") != null)
{
var albumToken = response.SelectToken("topalbums.album");
if (albumToken.GetType() == typeof(JArray))
return (from a in albumToken select LastFmAlbum.FromJson(a)).ToList();
else if (albumToken.GetType() == typeof(JObject))
{
var result = new List<LastFmAlbum>();
result.Add(LastFmAlbum.FromJson(albumToken));
return result;
}
}
return null;
}
public async Task<List<LastFmTrack>> GetTopTracks(string mbid, string artist, int count = 0)
{
var parameters = new Dictionary<string, string>();
if (!string.IsNullOrEmpty(mbid))
parameters.Add("mbid", mbid);
else
parameters.Add("artist", artist);
if (count > 0)
parameters.Add("limit", count.ToString());
parameters.Add("api_key", _lastFm.ApiKey);
var response = await (new CoreRequest(new Uri(LastFmConst.MethodBase + "artist.getTopTracks"), parameters).Execute());
LastFmErrorProcessor.ProcessError(response);
if (response.SelectToken("toptracks.track") != null)
{
var tracksJson = response.SelectToken("toptracks.track");
if (tracksJson is JArray)
return (from a in tracksJson select LastFmTrack.FromJson(a)).ToList();
else
return new List<LastFmTrack>() { LastFmTrack.FromJson(tracksJson) };
}
return null;
}
public async Task<LastFmArtist> GetInfo(string mbid, string artist)
{
var parameters = new Dictionary<string, string>();
if (!string.IsNullOrEmpty(mbid))
parameters.Add("mbid", mbid);
else
parameters.Add("artist", artist);
if (!string.IsNullOrEmpty(_lastFm.Lang))
parameters.Add("lang", _lastFm.Lang);
parameters.Add("api_key", _lastFm.ApiKey);
var response = await (new CoreRequest(new Uri(LastFmConst.MethodBase + "artist.getInfo"), parameters).Execute());
LastFmErrorProcessor.ProcessError(response);
if (response["artist"] != null)
{
return LastFmArtist.FromJson(response["artist"]);
}
return null;
}
}
}
================================================
FILE: LastFmLibPortable/Trunk/Core/Auth/LastFmAuthRequest.cs
================================================
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace LastFmLib.Core.Auth
{
public class LastFmAuthRequest
{
private readonly LastFm _lastFm;
public LastFmAuthRequest(LastFm lastFm)
{
_lastFm = lastFm;
}
public async Task<LastFmAuthResult> GetMobileSession(string username, string password)
{
var parameters = new Dictionary<string, string>();
parameters.Add("username", username);
parameters.Add("password", password);
parameters.Add("api_key", _lastFm.ApiKey);
parameters.Add("api_sig", LastFmUtils.BuildSig(_lastFm.ApiSecret, "auth.getMobileSession", parameters));
var response = await new CoreRequest(new Uri(LastFmConst.MethodBaseSecure), null, "POST", parameters).Execute();
if (!LastFmErrorProcessor.ProcessError(response))
return null;
if (response["session"] != null)
{
return LastFmAuthResult.FromJson(response["session"]);
}
return null;
}
}
}
================================================
FILE: LastFmLibPortable/Trunk/Core/Auth/LastFmAuthResult.cs
================================================
using System;
using Newtonsoft.Json.Linq;
namespace LastFmLib.Core.Auth
{
public class LastFmAuthResult
{
public string Username { get; set; }
public string Key { get; set; }
public static LastFmAuthResult FromJson(JToken json)
{
if (json == null)
throw new ArgumentException("Json can not be null.");
var result = new LastFmAuthResult();
result.Username = json["name"].Value<string>();
result.Key = json["key"].Value<string>();
return result;
}
}
}
================================================
FILE: LastFmLibPortable/Trunk/Core/Chart/LastFmChartRequest.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using LastFmLib.Core.Track;
namespace LastFmLib.Core.Chart
{
public class LastFmChartRequest
{
private readonly LastFm _lastFm;
public LastFmChartRequest(LastFm lastFm)
{
_lastFm = lastFm;
}
public async Task<IEnumerable<LastFmTrack>> GetTopTracks(int count = 0)
{
var parameters = new Dictionary<string, string>();
if (count > 0)
parameters.Add("limit", count.ToString());
parameters.Add("api_key", _lastFm.ApiKey);
var response = await (new CoreRequest(new Uri(LastFmConst.MethodBase + "chart.getTopTracks"), parameters).Execute());
LastFmErrorProcessor.ProcessError(response);
if (response.SelectToken("tracks.track") != null)
{
return from a in response.SelectToken("tracks.track") select LastFmTrack.FromJson(a);
}
return null;
}
public async Task<IEnumerable<LastFmTrack>> GetHypedTracks(int count = 0)
{
var parameters = new Dictionary<string, string>();
if (count > 0)
parameters.Add("limit", count.ToString());
parameters.Add("api_key", _lastFm.ApiKey);
var response = await (new CoreRequest(new Uri(LastFmConst.MethodBase + "chart.getHypedTracks"), parameters).Execute());
LastFmErrorProcessor.ProcessError(response);
if (response.SelectToken("tracks.track") != null)
{
return from a in response.SelectToken("tracks.track") select LastFmTrack.FromJson(a);
}
return null;
}
}
}
================================================
FILE: LastFmLibPortable/Trunk/Core/CoreRequest.cs
================================================
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;
using LastFmLib.Extensions;
using Newtonsoft.Json.Linq;
using System.Net.NetworkInformation;
namespace LastFmLib.Core
{
/// <summary>
/// An object that performs request to server
/// </summary>
internal class CoreRequest
{
private readonly Uri _uri;
private readonly string _method;
private readonly Dictionary<string, string> _parameters;
private readonly Dictionary<string, string> _postParameters;
public CoreRequest(Uri uri)
{
_uri = uri;
_method = "GET";
}
public CoreRequest(Uri uri, Dictionary<string, string> parameters, string method = "GET", Dictionary<string, string> postParameters = null)
{
_uri = uri;
_method = method;
_parameters = parameters;
_postParameters = postParameters;
}
public async Task<JObject> Execute()
{
if (!NetworkInterface.GetIsNetworkAvailable())
throw new Exception("Network is not available.");
var uri = GetFullUri(_parameters);
var request = WebRequest.CreateHttp(uri);
request.Method = _method;
Debug.WriteLine("Invoking " + uri);
JObject response = null;
var httpClient = new HttpClient();
if (_method == "GET")
{
HttpResponseMessage responseMessage = await httpClient.GetAsync(uri);
string content = await responseMessage.Content.ReadAsStringAsync();
if (!string.IsNullOrEmpty(content))
response = JObject.Parse(content);
}
else if (_method == "POST")
{
var postContent = new StringContent(_postParameters.ConstructQueryString());
postContent.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded");
HttpResponseMessage responseMessage = await httpClient.PostAsync(uri, postContent);
string content = await responseMessage.Content.ReadAsStringAsync();
if (!string.IsNullOrEmpty(content))
response = JObject.Parse(content);
}
return response;
}
private Uri GetFullUri(Dictionary<string, string> parameters)
{
if (parameters != null && parameters.Count > 0)
{
var paramStr = string.Join("&",
parameters.Select(
kp => string.Format("{0}={1}", Uri.EscapeDataString(kp.Key), Uri.EscapeDataString(kp.Value))));
return new Uri(string.Concat(_uri, "&", paramStr));
}
return _uri;
}
}
}
================================================
FILE: LastFmLibPortable/Trunk/Core/Image/LastFmImage.cs
================================================
using System;
using System.Diagnostics;
using Newtonsoft.Json.Linq;
namespace LastFmLib.Core.Image
{
public class LastFmImage
{
public double Width { get; set; }
public double Height { get; set; }
public double OriginalWidth { get; set; }
public double OriginalHeight { get; set; }
public string Original { get; set; }
public string Large { get; set; }
public string LargeSquare { get; set; }
public string Medium { get; set; }
public string Small { get; set; }
public string ExtraLarge { get; set; }
internal static LastFmImage FromJson(JToken json)
{
if (json == null)
throw new ArgumentException("Json can not be null.");
var result = new LastFmImage();
var sizeToken = json.SelectToken("sizes.size");
if (sizeToken != null)
{
foreach (var size in sizeToken.Children())
{
switch (size["name"].Value<string>())
{
case "small":
result.Small = size["#text"].Value<string>();
result.Width = Convert.ToDouble(size["width"].Value<string>());
result.Height = Convert.ToDouble(size["height"].Value<string>());
break;
case "medium":
result.Medium = size["#text"].Value<string>();
result.Width = Convert.ToDouble(size["width"].Value<string>());
result.Height = Convert.ToDouble(size["height"].Value<string>());
break;
case "large":
result.Large = size["#text"].Value<string>();
result.Width = Convert.ToDouble(size["width"].Value<string>());
result.Height = Convert.ToDouble(size["height"].Value<string>());
break;
case "extralarge":
result.ExtraLarge = size["#text"].Value<string>();
result.Width = Convert.ToDouble(size["width"].Value<string>());
result.Height = Convert.ToDouble(size["height"].Value<string>());
break;
case "original":
result.Original = size["#text"].Value<string>();
result.Width = Convert.ToDouble(size["width"].Value<string>());
result.Height = Convert.ToDouble(size["height"].Value<string>());
result.OriginalWidth = Convert.ToDouble(size["width"].Value<string>());
result.OriginalHeight = Convert.ToDouble(size["height"].Value<string>());
break;
}
}
}
return result;
}
}
}
================================================
FILE: LastFmLibPortable/Trunk/Core/LastFmErrorProcessor.cs
================================================
using System.Diagnostics;
using LastFmLib.Error;
using Newtonsoft.Json.Linq;
namespace LastFmLib.Core
{
internal static class LastFmErrorProcessor
{
public static bool ProcessError(JToken response)
{
if (response["error"] != null)
{
Debug.WriteLine("Last FM: " + response["message"].Value<string>());
switch (response["error"].Value<string>())
{
case "9":
case "4": //login error
throw new LastFmLoginException();
case "6": //artist not found
return false;
}
return false;
}
return true;
}
}
}
================================================
FILE: LastFmLibPortable/Trunk/Core/Tag/LastFmTagRequest.cs
================================================
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using LastFmLib.Core.Track;
using System.Linq;
namespace LastFmLib.Core.Tag
{
public class LastFmTagRequest
{
private readonly LastFm _lastFm;
public LastFmTagRequest(LastFm lastFm)
{
_lastFm = lastFm;
}
public async Task<IEnumerable<LastFmTrack>> GetTopTracks(string tag, int limit = 20, int page = 0)
{
var parameters = new Dictionary<string, string>();
parameters.Add("tag", tag);
if (limit > 0)
parameters.Add("limit", limit.ToString());
if (page > 0)
parameters.Add("page", page.ToString());
parameters.Add("api_key", _lastFm.ApiKey);
var response = await new CoreRequest(new Uri(LastFmConst.MethodBase + "tag.getTopTracks"), parameters).Execute();
LastFmErrorProcessor.ProcessError(response);
if (response.SelectToken("tracks.track") != null)
{
return from t in response.SelectToken("tracks.track") select LastFmTrack.FromJson(t);
}
return null;
}
}
}
================================================
FILE: LastFmLibPortable/Trunk/Core/Track/LastFmTrack.cs
================================================
using System;
using Newtonsoft.Json.Linq;
namespace LastFmLib.Core.Track
{
public class LastFmTrack
{
public string Id { get; set; }
public string Title { get; set; }
public int Duration { get; set; }
public string Artist { get; set; }
public string Album { get; set; }
public string ImageSmall { get; set; }
public string ImageMedium { get; set; }
public string ImageLarge { get; set; }
public string ImageExtraLarge { get; set; }
public string ImageMega { get; set; }
internal static LastFmTrack FromJson(JToken json)
{
if (json == null)
throw new ArgumentException("Json can not be null.");
var result = new LastFmTrack();
if (json["name"] != null)
result.Title = json["name"].Value<string>();
if (json["artist"] != null)
{
if (json.SelectToken("artist.name") != null)
result.Artist = json["artist"]["name"].Value<string>();
else
result.Artist = json["artist"].Value<string>();
}
if (json["duration"] != null && !string.IsNullOrEmpty(json["duration"].Value<string>()))
{
result.Duration = json["duration"].Value<int>();
}
if (json["album"] != null)
{
result.Album = json["album"]["title"].Value<string>();
var imageToken = json["album"]["image"];
if (imageToken != null)
{
foreach (var image in imageToken.Children())
{
switch (image["size"].Value<string>())
{
case "small":
result.ImageSmall = image["#text"].Value<string>();
break;
case "medium":
result.ImageMedium = image["#text"].Value<string>();
break;
case "large":
result.ImageLarge = image["#text"].Value<string>();
break;
case "extralarge":
result.ImageExtraLarge = image["#text"].Value<string>();
break;
}
}
}
}
var imgToken = json["image"];
if (imgToken != null)
{
foreach (var image in imgToken.Children())
{
switch (image["size"].Value<string>())
{
case "small":
result.ImageSmall = image["#text"].Value<string>();
break;
case "medium":
result.ImageMedium = image["#text"].Value<string>();
break;
case "large":
result.ImageLarge = image["#text"].Value<string>();
break;
case "extralarge":
result.ImageExtraLarge = image["#text"].Value<string>();
break;
}
}
}
return result;
}
}
}
================================================
FILE: LastFmLibPortable/Trunk/Core/Track/LastFmTrackRequest.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq;
namespace LastFmLib.Core.Track
{
public class LastFmTrackRequest
{
private readonly LastFm _lastFm;
public LastFmTrackRequest(LastFm lastFm)
{
_lastFm = lastFm;
}
public async Task<LastFmTrack> GetInfo(string title, string artist, bool autoCorrect = true, string mbid = null)
{
var parameters = new Dictionary<string, string>();
if (!string.IsNullOrEmpty(mbid))
parameters.Add("mbid", mbid);
else
{
parameters.Add("artist", artist);
parameters.Add("track", title);
}
if (autoCorrect)
parameters.Add("autocorrect", "1");
parameters.Add("api_key", _lastFm.ApiKey);
var response = await new CoreRequest(new Uri(LastFmConst.MethodBase + "track.getInfo"), parameters).Execute();
LastFmErrorProcessor.ProcessError(response);
if (response["track"] != null)
{
return LastFmTrack.FromJson(response["track"]);
}
return null;
}
public async Task UpdateNowPlaying(string artist, string track, string mbid = null, int duration = 0,
string album = null, int trackNumber = -1, string albumArtist = null)
{
const string method = "track.updateNowPlaying";
var parameters = new Dictionary<string, string>();
parameters.Add("artist", artist);
parameters.Add("track", track);
if (album != null)
parameters.Add("album", album);
if (trackNumber > -1)
parameters.Add("trackNumber", trackNumber.ToString());
if (mbid != null)
parameters.Add("mbid", mbid);
if (duration > 0)
parameters.Add("duration", duration.ToString());
if (albumArtist != null)
parameters.Add("albumArtist", albumArtist);
parameters.Add("api_key", _lastFm.ApiKey);
parameters.Add("sk", _lastFm.SessionKey);
parameters.Add("api_sig", LastFmUtils.BuildSig(_lastFm.ApiSecret, method, parameters));
parameters["track"] = Uri.EscapeDataString(track); //fix ampersand scrobbling
parameters["artist"] = Uri.EscapeDataString(artist); //fix ampersand scrobbling
var response = await new CoreRequest(new Uri(LastFmConst.UrlBaseSecure), null, "POST", parameters).Execute();
LastFmErrorProcessor.ProcessError(response);
}
public async Task Scrobble(string artist, string track, string timeStamp, string mbid = null, int duration = 0,
string album = null, int trackNumber = -1, string albumArtist = null)
{
const string method = "track.scrobble";
var parameters = new Dictionary<string, string>();
parameters.Add("artist", artist);
parameters.Add("track", track);
parameters.Add("timestamp", timeStamp);
if (album != null)
parameters.Add("album", album);
if (trackNumber > -1)
parameters.Add("trackNumber", trackNumber.ToString());
if (mbid != null)
parameters.Add("mbid", mbid);
if (albumArtist != null)
parameters.Add("albumArtist", albumArtist);
if (duration > 0)
parameters.Add("duration", duration.ToString());
parameters.Add("api_key", _lastFm.ApiKey);
parameters.Add("sk", _lastFm.SessionKey);
parameters.Add("api_sig", LastFmUtils.BuildSig(_lastFm.ApiSecret, method, parameters));
parameters["track"] = Uri.EscapeDataString(track); //fix ampersand scrobbling
parameters["artist"] = Uri.EscapeDataString(artist); //fix ampersand scrobbling
var response = await new CoreRequest(new Uri(LastFmConst.UrlBaseSecure), null, "POST", parameters).Execute();
LastFmErrorProcessor.ProcessError(response);
}
public async Task<List<LastFmTrack>> Search(string track, string artist)
{
var parameters = new Dictionary<string, string>();
parameters.Add("track", track);
if (!string.IsNullOrEmpty(artist))
parameters.Add("artist", artist);
parameters.Add("api_key", _lastFm.ApiKey);
var response = await new CoreRequest(new Uri(LastFmConst.MethodBase + "track.search"), parameters).Execute();
LastFmErrorProcessor.ProcessError(response);
if (response.SelectToken("results.trackmatches.track") != null)
{
var trackJson = response.SelectToken("results.trackmatches.track");
if (trackJson is JArray)
return (from t in response.SelectToken("results.trackmatches.track")
select LastFmTrack.FromJson(t)).ToList();
else
return new List<LastFmTrack>() { LastFmTrack.FromJson(trackJson) };
}
return null;
}
}
}
================================================
FILE: LastFmLibPortable/Trunk/Core/User/LastFmUserRequest.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using LastFmLib.Core.Artist;
namespace LastFmLib.Core.User
{
public class LastFmUserRequest
{
private readonly LastFm _lastFm;
public LastFmUserRequest(LastFm lastFm)
{
_lastFm = lastFm;
}
public async Task<IEnumerable<LastFmArtist>> GetRecommendedArtists(int count = 0)
{
var parameters = new Dictionary<string, string>();
if (count > 0)
parameters.Add("limit", count.ToString());
parameters.Add("api_key", _lastFm.ApiKey);
parameters.Add("sk", _lastFm.SessionKey);
parameters.Add("api_sig", LastFmUtils.BuildSig(_lastFm.ApiSecret, "user.getRecommendedArtists", parameters));
var response = await new CoreRequest(new Uri(LastFmConst.UrlBase), parameters, "POST").Execute();
LastFmErrorProcessor.ProcessError(response);
if (response.SelectToken("recommendations.artist") != null)
{
return from a in response.SelectToken("recommendations.artist") select LastFmArtist.FromJson(a);
}
return null;
}
}
}
================================================
FILE: LastFmLibPortable/Trunk/Error/LastFmLoginException.cs
================================================
using System;
namespace LastFmLib.Error
{
public class LastFmLoginException : Exception
{
}
}
================================================
FILE: LastFmLibPortable/Trunk/Extensions/CommonExtensions.cs
================================================
using System.Collections.Generic;
using System.Linq;
using System.Net;
namespace LastFmLib.Extensions
{
public static class CommonExtensions
{
/// <summary>
/// Constructs a QueryString (string).
/// Consider this method to be the opposite of "System.Web.HttpUtility.ParseQueryString"
/// </summary>
/// <param name="parameters">NameValueCollection</param>
/// <returns>string</returns>
public static string ConstructQueryString(this Dictionary<string, string> parameters)
{
return string.Join("&", parameters.Select(pair => pair.Key).Distinct().Select(name => string.Concat(name, "=", WebUtility.HtmlEncode(parameters[name]))).ToArray());
}
}
}
================================================
FILE: LastFmLibPortable/Trunk/Extensions/StreamExtensions.cs
================================================
using System.Diagnostics;
using System.IO;
namespace LastFmLib.Extensions
{
internal static class StreamExtensions
{
public static int CopyStream(this Stream source, Stream dest)
{
Debug.Assert(source != null);
Debug.Assert(dest != null);
var positionSource = source.Position;
var positionDest = dest.Position;
var buffer = new byte[4096];
var read = 0;
var total = 0;
while ((read = source.Read(buffer, 0, buffer.Length)) > 0)
{
total += read;
dest.Write(buffer, 0, read);
}
if (source.CanSeek)
source.Seek(positionSource, SeekOrigin.Begin);
if (dest.CanSeek)
dest.Seek(positionDest, SeekOrigin.Begin);
return total;
}
}
}
================================================
FILE: LastFmLibPortable/Trunk/LastFM.cs
================================================
using LastFmLib.Core.Album;
using LastFmLib.Core.Artist;
using LastFmLib.Core.Auth;
using LastFmLib.Core.Chart;
using LastFmLib.Core.Tag;
using LastFmLib.Core.Track;
using LastFmLib.Core.User;
namespace LastFmLib
{
public class LastFm
{
private readonly string _apiKey;
private readonly string _apiSecret;
private LastFmArtistRequest _artist;
private LastFmAlbumRequest _album;
private LastFmTrackRequest _track;
private LastFmChartRequest _chart;
private LastFmAuthRequest _auth;
private LastFmUserRequest _user;
private LastFmTagRequest _tag;
internal string ApiKey
{
get { return _apiKey; }
}
internal string ApiSecret
{
get { return _apiSecret; }
}
public LastFmArtistRequest Artist
{
get
{
if (_artist == null)
_artist = new LastFmArtistRequest(this);
return _artist;
}
}
public LastFmAlbumRequest Album
{
get
{
if (_album == null)
_album = new LastFmAlbumRequest(this);
return _album;
}
}
public LastFmTrackRequest Track
{
get
{
if (_track == null)
_track = new LastFmTrackRequest(this);
return _track;
}
}
public LastFmChartRequest Chart
{
get
{
if (_chart == null)
_chart = new LastFmChartRequest(this);
return _chart;
}
}
public LastFmUserRequest User
{
get
{
if (_user == null)
_user = new LastFmUserRequest(this);
return _user;
}
}
public LastFmTagRequest Tag
{
get
{
if (_tag == null)
_tag = new LastFmTagRequest(this);
return _tag;
}
}
public LastFmAuthRequest Auth
{
get
{
if (_auth == null)
_auth = new LastFmAuthRequest(this);
return _auth;
}
}
public string Lang { get; set; }
public string SessionKey { get; set; }
public LastFm(string apiKey, string apiSecret, string lang = null)
{
_apiKey = apiKey;
_apiSecret = apiSecret;
Lang = lang;
}
}
}
================================================
FILE: LastFmLibPortable/Trunk/LastFmConst.cs
================================================
namespace LastFmLib
{
internal static class LastFmConst
{
internal const string AuthorizationUrlBase = "http://www.last.fm/api/auth/?";
internal const string MethodBase = "http://ws.audioscrobbler.com/2.0/?format=json&method=";
internal const string UrlBase = "http://ws.audioscrobbler.com/2.0/?format=json";
internal const string UrlBaseSecure = "https://ws.audioscrobbler.com/2.0/?format=json";
internal const string MethodBaseSecure = "https://ws.audioscrobbler.com/2.0/?format=json";
}
}
================================================
FILE: LastFmLibPortable/Trunk/LastFmLibPortable.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<Version>1.0.2</Version>
<Authors>Artem Shuba</Authors>
<PackageId>LastFmLib</PackageId>
<Product>LastFmLib</Product>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
</ItemGroup>
<ItemGroup>
<Folder Include="Properties\" />
</ItemGroup>
</Project>
================================================
FILE: LastFmLibPortable/Trunk/LastFmUtils.cs
================================================
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
namespace LastFmLib
{
internal class LastFmUtils
{
public static string BuildSig(string secretKey, string method, IDictionary<string, string> parameters)
{
parameters.Add("method", method);
var temp = parameters.OrderBy(x => x.Key);
var s = new StringBuilder();
foreach (var p in temp)
{
s.Append(p.Key);
s.Append(p.Value);
}
s.Append(secretKey);
return Md5(s.ToString());
}
public static string Md5(string input)
{
using(var md5 = MD5.Create())
{
return GetMd5Hash(md5, input);
}
}
private static string GetMd5Hash(MD5 md5Hash, string input)
{
// Convert the input string to a byte array and compute the hash.
byte[] data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(input));
// Create a new Stringbuilder to collect the bytes
// and create a string.
StringBuilder sBuilder = new StringBuilder();
// Loop through each byte of the hashed data
// and format each one as a hexadecimal string.
for (int i = 0; i < data.Length; i++)
{
sBuilder.Append(data[i].ToString("x2"));
}
// Return the hexadecimal string.
return sBuilder.ToString();
}
}
}
================================================
FILE: LastFmLibPortable/Trunk/app.config
================================================
<?xml version="1.0" encoding="utf-8"?>
<configuration>
</configuration>
================================================
FILE: LastFmLibPortable/Trunk/project.json
================================================
{
"supports": {
"net46.app": {},
"dnxcore50.app": {}
},
"dependencies": {
"Microsoft.NETCore": "5.0.0",
"Microsoft.NETCore.Portable.Compatibility": "1.0.0"
},
"frameworks": {
"dotnet": {
"imports": "portable-net452"
}
}
}
================================================
FILE: Meridian/App.config
================================================
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog" />
</configSections>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<variable name="logDir" value="${specialfolder:folder=MyDocuments}/Meridian/Logs/" />
<variable name="detailedLayout" value="${date:format=dd.MM.yyyy HH\:mm\:ss} (${level:uppercase=true}): ${logger} ${message}. ${exception:format=ToString}" />
<targets>
<target name="fullLog" xsi:type="File" fileName="${logDir}/${date:format=yyyy-MM-dd}.log" layout="${detailedLayout}" />
</targets>
<rules>
<logger name="*" minlevel="Trace" writeTo="fullLog" />
</rules>
</nlog>
<runtime>
<loadFromRemoteSources enabled="true" />
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="libs" />
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Net.Http.Primitives" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.2.29.0" newVersion="4.2.29.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="PortableRest" publicKeyToken="109c5b6afe0e5188" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.5.0.0" newVersion="2.5.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="ICSharpCode.SharpZipLib" publicKeyToken="1b03e6acf1164f73" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.2.0.246" newVersion="1.2.0.246" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Windows.Interactivity" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.5.0.0" newVersion="4.5.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
</startup>
</configuration>
================================================
FILE: Meridian/App.xaml
================================================
<Application x:Class="Meridian.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:converters="clr-namespace:Neptune.UI.Converters;assembly=Neptune.Desktop"
xmlns:viewModel="clr-namespace:Meridian.ViewModel"
xmlns:converters1="clr-namespace:Meridian.Converters"
StartupUri="MainWindow.xaml" ShutdownMode="OnMainWindowClose"
Startup="App_OnStartup" Exit="App_OnExit" DispatcherUnhandledException="App_OnDispatcherUnhandledException">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/Resources/Themes/Accents/Blue.xaml" />
<ResourceDictionary Source="/Resources/Themes/Light.xaml" />
<ResourceDictionary Source="/Resources/Styles/Icons.xaml" />
<ResourceDictionary Source="/Resources/Styles/Animations.xaml" />
<ResourceDictionary Source="/Resources/Styles/WindowButtons.xaml" />
<ResourceDictionary Source="/Resources/Styles/ExpanderStyles.xaml" />
<ResourceDictionary Source="/Resources/Styles/ListBoxStyles.xaml" />
<ResourceDictionary Source="/Resources/Styles/AudioControlStyles.xaml" />
<ResourceDictionary Source="/Resources/Styles/SliderStyles.xaml" />
<ResourceDictionary Source="/Resources/Styles/ScrollbarStyles.xaml" />
<ResourceDictionary Source="/Resources/Styles/TextBoxStyles.xaml" />
<ResourceDictionary Source="/Resources/Styles/ComboBoxStyles.xaml" />
<ResourceDictionary Source="/Resources/Styles/ButtonStyles.xaml" />
<ResourceDictionary Source="/Resources/Styles/CheckBoxStyles.xaml" />
<ResourceDictionary Source="/Resources/Styles/ProgressBarStyles.xaml" />
<ResourceDictionary Source="/Resources/Styles/ContextMenuStyles.xaml" />
<ResourceDictionary Source="/Resources/Styles/TabControlStyles.xaml" />
<ResourceDictionary Source="/Resources/Styles/Styles.xaml" />
<ResourceDictionary>
<viewModel:ViewModelLocator x:Key="Locator"/>
<converters:BooleanToVisibilityConverter x:Key="BoolToVisibilityConverter"/>
<converters:NullToVisibilityConverter x:Key="NullToVisibilityConverter"/>
<converters:NullToBooleanConverter x:Key="NullToBoolConverter"/>
<converters:StringToUpperConverter x:Key="StringToUpperConverter"/>
<converters:TimeSpanConverter x:Key="TimeSpanConverter"/>
<converters:InvertBooleanConverter x:Key="InvertBoolConverter" />
<converters1:AudioTimeSpanConverter x:Key="AudioTimeSpanConverter"/>
<converters1:AlbumContextMenuVisibilityConverter x:Key="AlbumContextMenuVisibilityConverter"/>
<converters:BooleanToObjectConverter x:Key="PlayIconConverter" TrueObject="/Meridian;component/Resources/Images/pause_thumb.png" FalseObject="/Meridian;component/Resources/Images/play_thumb.png"/>
</ResourceDictionary>
<ResourceDictionary Source="/Resources/Styles/DataTemplates.xaml" />
<ResourceDictionary Source="/Layout/Templates/PageBaseTemplate.xaml" />
<ResourceDictionary Source="/Layout/Templates/TwoColumnPageLayoutTemplate.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
================================================
FILE: Meridian/App.xaml.cs
================================================
using System;
using System.Diagnostics;
using System.Drawing;
using System.Globalization;
using System.IO;
using System.Reflection;
using System.Windows;
using System.Windows.Forms;
using System.Windows.Threading;
using Meridian.Controls;
using Meridian.Domain;
using Meridian.Model;
using Meridian.Resources.Localization;
using Meridian.Services;
using Meridian.View.Flyouts;
using Meridian.ViewModel;
using Yandex.Metrica;
using Application = System.Windows.Application;
namespace Meridian
{
/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App : Application
{
private NotifyIcon _trayIcon;
public static readonly string Root = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
private async void App_OnStartup(object sender, StartupEventArgs e)
{
LoggingService.Log("Meridian v" + Assembly.GetExecutingAssembly().GetName().Version + " started. OS: " + Environment.OSVersion);
//DispatcherHelper.Initialize();
Settings.Load();
if (Settings.Instance.SendStats)
{
YandexMetricaFolder.SetCurrent(Directory.GetCurrentDirectory());
YandexMetrica.Activate("60fb8ba9-ab3c-4ee8-81ac-559c8aeb305e"); //Yandex Metrica
}
System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo(Settings.Instance.Language);
System.Threading.Thread.CurrentThread.CurrentUICulture = System.Threading.Thread.CurrentThread.CurrentCulture;
if (Settings.Instance.Accounts.Count == 0)
{
Settings.Instance.Accounts.Add(new Account() { Id = "vk", Title = MainResources.SettingsAccountsVk });
Settings.Instance.Accounts.Add(new Account() { Id = "lasfm", Title = MainResources.SettingsAccountsLastFm });
}
ServiceLocator.DataBaseService.Initialize();
if (Settings.Instance.NeedClean)
{
ViewModelLocator.UpdateService.Clean();
Settings.Instance.NeedClean = false;
}
switch (Settings.Instance.AccentColor)
{
case "Red":
case "Emerald":
case "Magenta":
case "Mango":
case "Sea":
case "Sky":
case "Purple":
case "Pink":
Resources.MergedDictionaries[0].Source = new Uri(string.Format("/Resources/Themes/Accents/{0}.xaml", Settings.Instance.AccentColor), UriKind.Relative);
break;
default:
Resources.MergedDictionaries[0].Source = new Uri("/Resources/Themes/Accents/Blue.xaml", UriKind.Relative);
break;
}
switch (Settings.Instance.Theme)
{
case "Light":
case "Dark":
case "Graphite":
case "Accent":
Resources.MergedDictionaries[1].Source = new Uri(string.Format("/Resources/Themes/{0}.xaml", Settings.Instance.Theme), UriKind.Relative);
break;
default:
Resources.MergedDictionaries[1].Source = new Uri("/Resources/Themes/Light.xaml", UriKind.Relative);
break;
}
if (Settings.Instance.EnableTrayIcon)
AddTrayIcon();
ViewModelLocator.Vkontakte.UseHttps = Settings.Instance.UseHttps;
AudioService.Load();
}
private void App_OnExit(object sender, ExitEventArgs e)
{
RemoveTrayIcon();
AudioService.Save();
AudioService.Dispose();
}
private void App_OnDispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
{
LoggingService.Log(e.Exception);
Dispatcher.Invoke(async () =>
{
e.Handled = true;
var flyout = new FlyoutControl();
flyout.FlyoutContent = new CommonErrorView();
var restart = (bool)await flyout.ShowAsync();
if (restart)
{
Process.Start(Application.ResourceAssembly.Location);
}
Shutdown();
});
}
public void AddTrayIcon()
{
if (_trayIcon != null)
{
return;
}
_trayIcon = new NotifyIcon
{
Icon = Icon.ExtractAssociatedIcon(Assembly.GetExecutingAssembly().Location),
Text = "Meridian " + Assembly.GetExecutingAssembly().GetName().Version.ToString(2)
};
_trayIcon.MouseClick += TrayIconOnMouseClick;
_trayIcon.Visible = true;
_trayIcon.ContextMenuStrip = new ContextMenuStrip();
var closeItem = new System.Windows.Forms.ToolStripMenuItem();
closeItem.Text = MainResources.Close;
closeItem.Click += (s, e) =>
{
foreach (Window window in Windows)
{
window.Close();
}
};
_trayIcon.ContextMenuStrip.Items.Add(closeItem);
}
private void TrayIconOnMouseClick(object sender, MouseEventArgs mouseEventArgs)
{
foreach (Window window in Windows)
{
if (window.Visibility == Visibility.Collapsed)
{
window.Visibility = Visibility.Visible;
window.Show();
}
window.Activate();
if (window.WindowState == WindowState.Minimized)
window.WindowState = WindowState.Normal;
}
}
public void RemoveTrayIcon()
{
if (_trayIcon != null)
{
_trayIcon.MouseClick -= TrayIconOnMouseClick;
_trayIcon.Visible = false;
_trayIcon.Dispose();
_trayIcon = null;
}
}
}
}
================================================
FILE: Meridian/Behaviours/AutoScrollToCurrentItemBehaviour.cs
================================================
using System;
using System.Windows.Controls;
using GalaSoft.MvvmLight.Messaging;
using Meridian.Services;
using Meridian.ViewModel.Messages;
using Microsoft.Xaml.Behaviors;
namespace Meridian.Behaviours
{
public class AutoScrollToCurrentItemBehaviour : Behavior<ListBox>
{
protected override void OnAttached()
{
Messenger.Default.Register<CurrentAudioChangedMessage>(this, OnCurrentAudioChanged);
if (AudioService.CurrentAudio != null)
AssociatedObject.ScrollIntoView(AudioService.CurrentAudio);
}
protected override void OnDetaching()
{
Messenger.Default.Unregister<CurrentAudioChangedMessage>(this, OnCurrentAudioChanged);
}
private void OnCurrentAudioChanged(CurrentAudioChangedMessage message)
{
Dispatcher.BeginInvoke(new Action(() =>
{
if (AssociatedObject != null && message.NewAudio != null)
{
AssociatedObject.ScrollIntoView(message.NewAudio);
}
}));
}
}
}
================================================
FILE: Meridian/Behaviours/FocusBehaviour.cs
================================================
using Microsoft.Xaml.Behaviors;
using System.Windows;
using System.Windows.Controls;
namespace Meridian.Behaviours
{
public class FocusBehavior : Behavior<Control>
{
/// <summary>
/// IsFocused dependency property
/// </summary>
public static readonly DependencyProperty IsFocusedProperty =
DependencyProperty.Register(
"IsFocused",
typeof(bool),
typeof(FocusBehavior),
new PropertyMetadata(false, (d, e) =>
{
if ((bool)e.NewValue && ((FocusBehavior)d).AssociatedObject != null)
((FocusBehavior)d).AssociatedObject.Focus();
}));
/// <summary>
/// HasInitialFocus dependency property
/// </summary>
public static readonly DependencyProperty HasInitialFocusProperty =
DependencyProperty.Register(
"HasInitialFocus",
typeof(bool),
typeof(FocusBehavior),
new PropertyMetadata(false, null));
/// <summary>
/// Имеет ли контрол фокус
/// </summary>
public bool IsFocused
{
get { return (bool)GetValue(IsFocusedProperty); }
set { SetValue(IsFocusedProperty, value); }
}
/// <summary>
/// Имеет ли контрол фокус при инициализации
/// </summary>
public bool HasInitialFocus
{
get { return (bool)GetValue(HasInitialFocusProperty); }
set { SetValue(HasInitialFocusProperty, value); }
}
protected override void OnAttached()
{
AssociatedObject.GotFocus += (sender, args) => IsFocused = true;
AssociatedObject.LostFocus += (sender, a) => IsFocused = false;
AssociatedObject.Loaded += (o, a) =>
{
if (HasInitialFocus || IsFocused)
AssociatedObject.Focus();
};
base.OnAttached();
}
}
}
================================================
FILE: Meridian/Behaviours/TransitionBehaviour.cs
================================================
using Microsoft.Xaml.Behaviors;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Media.Animation;
namespace Meridian.Behaviours
{
public class TransitionBehaviour : Behavior<FrameworkElement>
{
public static readonly DependencyProperty TransitionProperty =
DependencyProperty.Register("Transition", typeof(Storyboard), typeof(TransitionBehaviour), new PropertyMetadata(default(Storyboard)));
public Storyboard Transition
{
get { return (Storyboard)GetValue(TransitionProperty); }
set { SetValue(TransitionProperty, value); }
}
public static readonly DependencyProperty TransitionDelayProperty =
DependencyProperty.Register("TransitionDelay", typeof(int), typeof(TransitionBehaviour), new PropertyMetadata(300));
public int TransitionDelay
{
get { return (int)GetValue(TransitionDelayProperty); }
set { SetValue(TransitionDelayProperty, value); }
}
public static readonly DependencyProperty TransitionIndexProperty =
DependencyProperty.RegisterAttached("TransitionIndex", typeof(int), typeof(TransitionBehaviour), new PropertyMetadata(default(int)));
public static void SetTransitionIndex(UIElement element, int value)
{
element.SetValue(TransitionIndexProperty, value);
}
public static int GetTransitionIndex(UIElement element)
{
return (int)element.GetValue(TransitionIndexProperty);
}
public static readonly DependencyProperty IgnoreTransitionProperty =
DependencyProperty.RegisterAttached("IgnoreTransition", typeof(bool), typeof(TransitionBehaviour), new PropertyMetadata(default(bool)));
public static void SetIgnoreTransition(UIElement element, bool value)
{
element.SetValue(IgnoreTransitionProperty, value);
}
public static bool GetIgnoreTransition(UIElement element)
{
return (bool)element.GetValue(IgnoreTransitionProperty);
}
protected override void OnAttached()
{
AssociatedObject.Loaded += AssociatedObject_Loaded;
if (AssociatedObject is ListBox)
{
var listBox = (ListBox)AssociatedObject;
listBox.ItemContainerGenerator.StatusChanged += ItemContainerGenerator_StatusChanged;
}
base.OnAttached();
}
protected override void OnDetaching()
{
AssociatedObject.Loaded -= AssociatedObject_Loaded;
if (AssociatedObject is ListBox)
{
var listBox = (ListBox)AssociatedObject;
listBox.ItemContainerGenerator.StatusChanged -= ItemContainerGenerator_StatusChanged;
}
base.OnDetaching();
}
private List<FrameworkElement> _lastTargets;
void ItemContainerGenerator_StatusChanged(object sender, EventArgs e)
{
if (((ItemContainerGenerator)sender).Status == GeneratorStatus.ContainersGenerated)
{
var targets = GetTargets();
if (targets == null)
return;
var newItems = targets.Where(t => !_lastTargets.Contains(t)).ToList();
if (newItems.Count == 0)
{
_lastTargets.Clear();
}
for (var index = 0; index < newItems.Count; index++)
{
if ((bool)targets[index].GetValue(IgnoreTransitionProperty))
continue;
var transitionIndex = Convert.ToInt32(targets[index].GetValue(TransitionIndexProperty));
for (var i = 1; i < Transition.Children.Count; i++)
{
Transition.Children[i].BeginTime = TimeSpan.FromMilliseconds(TransitionDelay * (transitionIndex != 0 ? transitionIndex : index));
}
Transition.Begin(newItems[index]);
}
}
else if (((ItemContainerGenerator)sender).Status == GeneratorStatus.GeneratingContainers)
{
_lastTargets = GetTargets();
}
}
void AssociatedObject_Loaded(object sender, RoutedEventArgs e)
{
var targets = GetTargets();
if (targets == null)
return;
for (var index = 0; index < targets.Count; index++)
{
if ((bool)targets[index].GetValue(IgnoreTransitionProperty))
continue;
var transitionIndex = Convert.ToInt32(targets[index].GetValue(TransitionIndexProperty));
for (var i = 1; i < Transition.Children.Count; i++)
{
Transition.Children[i].BeginTime = TimeSpan.FromMilliseconds(TransitionDelay * (transitionIndex != 0 ? transitionIndex : index));
}
Transition.Begin(targets[index]);
}
}
List<FrameworkElement> GetTargets()
{
var result = new List<FrameworkElement>();
if (AssociatedObject is ListBox)
{
var itemsControl = ((ListBox)AssociatedObject);
var count = itemsControl.Items.Count;
for (int i = 0; i < count; i++)
{
var container = (FrameworkElement)itemsControl.ItemContainerGenerator.ContainerFromIndex(i);
if (container != null)
result.Add(container);
}
}
else if (AssociatedObject is ItemsControl)
{
var itemsControl = ((ItemsControl)AssociatedObject);
var count = itemsControl.Items.Count;
for (int i = 0; i < count; i++)
{
var container = (FrameworkElement)itemsControl.ItemContainerGenerator.ContainerFromIndex(i);
if (container != null)
result.Add(container);
}
}
else if (AssociatedObject is Panel)
{
var panel = (Panel)AssociatedObject;
var count = panel.Children.Count;
for (int i = 0; i < count; i++)
{
result.Add((FrameworkElement)panel.Children[i]);
}
}
return result;
}
}
}
================================================
FILE: Meridian/Behaviours/VisibilityTransitionBehaviour.cs
================================================
using Microsoft.Xaml.Behaviors;
using System.Windows;
using System.Windows.Media.Animation;
namespace Meridian.Behaviours
{
public class VisibilityTransitionBehaviour : Behavior<FrameworkElement>
{
public static readonly DependencyProperty ValueProperty =
DependencyProperty.Register("Value", typeof(Visibility), typeof(VisibilityTransitionBehaviour), new PropertyMetadata(default(Visibility), PropertyChangedCallback));
public Visibility Value
{
get { return (Visibility)GetValue(ValueProperty); }
set { SetValue(ValueProperty, value); }
}
private static void PropertyChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var b = (VisibilityTransitionBehaviour)d;
b.TransitionOut((Visibility)e.OldValue);
}
public static readonly DependencyProperty AnimationOutProperty =
DependencyProperty.Register("AnimationOut", typeof(Storyboard), typeof(VisibilityTransitionBehaviour), new PropertyMetadata(default(Storyboard)));
public Storyboard AnimationOut
{
get { return (Storyboard)GetValue(AnimationOutProperty); }
set { SetValue(AnimationOutProperty, value); }
}
public static readonly DependencyProperty AnimationInProperty =
DependencyProperty.Register("AnimationIn", typeof(Storyboard), typeof(VisibilityTransitionBehaviour), new PropertyMetadata(default(Storyboard)));
public Storyboard AnimationIn
{
get { return (Storyboard)GetValue(AnimationInProperty); }
set { SetValue(AnimationInProperty, value); }
}
protected override void OnAttached()
{
AssociatedObject.Visibility = Value;
base.OnAttached();
}
private void TransitionOut(Visibility oldValue)
{
if (AssociatedObject == null)
return;
if (AnimationOut == null || oldValue == Visibility.Collapsed)
{
TransitionIn();
}
else
{
AnimationOut.Completed += AnimationOutCompleted;
AnimationOut.Begin(AssociatedObject);
}
}
private void TransitionIn()
{
if (AssociatedObject == null)
return;
AssociatedObject.Visibility = Value;
if (AnimationIn != null)
{
AnimationIn.Begin(AssociatedObject);
}
}
void AnimationOutCompleted(object sender, object e)
{
AnimationOut.Completed -= AnimationOutCompleted;
TransitionIn();
}
}
}
================================================
FILE: Meridian/Controls/BindablePasswordBox.cs
================================================
using System.Windows;
using System.Windows.Controls;
namespace Meridian.Controls
{
public sealed class BindablePasswordBox : Decorator
{
/// <summary>
/// The password dependency property.
/// </summary>
public static readonly DependencyProperty PasswordProperty;
private bool _isPreventCallback;
private readonly RoutedEventHandler _savedCallback;
/// <summary>
/// Static constructor to initialize the dependency properties.
/// </summary>
static BindablePasswordBox()
{
PasswordProperty = DependencyProperty.Register(
"Password",
typeof(string),
typeof(BindablePasswordBox),
new FrameworkPropertyMetadata("", FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, new PropertyChangedCallback(OnPasswordPropertyChanged))
);
}
/// <summary>
/// Saves the password changed callback and sets the child element to the password box.
/// </summary>
public BindablePasswordBox()
{
_savedCallback = HandlePasswordChanged;
var passwordBox = new PasswordBox();
passwordBox.Style = Application.Current.Resources["CommonPasswordBoxStyle"] as Style;
passwordBox.PasswordChanged += _savedCallback;
Child = passwordBox;
}
/// <summary>
/// The password dependency property.
/// </summary>
public string Password
{
get { return GetValue(PasswordProperty) as string; }
set { SetValue(PasswordProperty, value); }
}
/// <summary>
/// Handles changes to the password dependency property.
/// </summary>
/// <param name="d">the dependency object</param>
/// <param name="eventArgs">the event args</param>
private static void OnPasswordPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs eventArgs)
{
var bindablePasswordBox = (BindablePasswordBox)d;
var passwordBox = (PasswordBox)bindablePasswordBox.Child;
if (bindablePasswordBox._isPreventCallback)
{
return;
}
passwordBox.PasswordChanged -= bindablePasswordBox._savedCallback;
passwordBox.Password = (eventArgs.NewValue != null) ? eventArgs.NewValue.ToString() : "";
passwordBox.PasswordChanged += bindablePasswordBox._savedCallback;
}
/// <summary>
/// Handles the password changed event.
/// </summary>
/// <param name="sender">the sender</param>
/// <param name="eventArgs">the event args</param>
private void HandlePasswordChanged(object sender, RoutedEventArgs eventArgs)
{
var passwordBox = (PasswordBox)sender;
_isPreventCallback = true;
Password = passwordBox.Password;
_isPreventCallback = false;
}
}
}
================================================
FILE: Meridian/Controls/BusyIndicator.cs
================================================
using System;
using System.Diagnostics;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Threading;
namespace Meridian.Controls
{
/// <summary>
/// A control to provide a visual indicator when an application is busy.
/// </summary>
[TemplateVisualState(Name = "Idle", GroupName = "BusyStates")]
[TemplateVisualState(Name = "Busy", GroupName = "BusyStates")]
[TemplateVisualState(Name = "Error", GroupName = "BusyStates")]
[TemplateVisualState(Name = "Visible", GroupName = "VisibilityStates")]
[TemplateVisualState(Name = "Hidden", GroupName = "VisibilityStates")]
[StyleTypedProperty(Property = "BusyContentStyle", StyleTargetType = typeof(ContentPresenter))]
public class BusyIndicator : ContentControl
{
/// <summary>
/// Identifies the IsBusy dependency property.
/// </summary>
public static readonly DependencyProperty IsBusyProperty = DependencyProperty.Register(
"IsBusy",
typeof(bool),
typeof(BusyIndicator),
new PropertyMetadata(false, new PropertyChangedCallback(OnIsBusyChanged)));
/// <summary>
/// Gets or sets a value indicating whether the busy indicator should show.
/// </summary>
public bool IsBusy
{
get
{
return (bool)GetValue(IsBusyProperty);
}
set
{
SetValue(IsBusyProperty, value);
}
}
/// <summary>
/// Identifies the FocusAferBusy dependency property.
/// </summary>
public static readonly DependencyProperty FocusAferBusyProperty = DependencyProperty.Register(
"FocusAferBusy",
typeof(Control),
typeof(BusyIndicator),
new PropertyMetadata(null));
/// <summary>
/// Gets or sets a Control that should get focus when the busy indicator disapears.
/// </summary>
public Control FocusAferBusy
{
get
{
return (Control)GetValue(FocusAferBusyProperty);
}
set
{
SetValue(FocusAferBusyProperty, value);
}
}
/// <summary>
/// Identifies the BusyContent dependency property.
/// </summary>
public static readonly DependencyProperty BusyContentProperty = DependencyProperty.Register(
"BusyContent",
typeof(object),
typeof(BusyIndicator),
new PropertyMetadata(null));
/// <summary>
/// Gets or sets a value indicating the busy content to display to the user.
/// </summary>
public object BusyContent
{
get
{
return (object)GetValue(BusyContentProperty);
}
set
{
SetValue(BusyContentProperty, value);
}
}
/// <summary>
/// Identifies the BusyTemplate dependency property.
/// </summary>
public static readonly DependencyProperty BusyContentTemplateProperty = DependencyProperty.Register(
"BusyContentTemplate",
typeof(DataTemplate),
typeof(BusyIndicator),
new PropertyMetadata(null));
/// <summary>
/// Gets or sets a value indicating the template to use for displaying the busy content to the user.
/// </summary>
public DataTemplate BusyContentTemplate
{
get
{
return (DataTemplate)GetValue(BusyContentTemplateProperty);
}
set
{
SetValue(BusyContentTemplateProperty, value);
}
}
public static readonly DependencyProperty ErrorProperty = DependencyProperty.Register(
"Error", typeof(string), typeof(BusyIndicator), new PropertyMetadata(default(string), OnErrorPropertyChanged));
private static void OnErrorPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
((BusyIndicator)d).ChangeVisualState(true);
}
public string Error
{
get { return (string)GetValue(ErrorProperty); }
set { SetValue(ErrorProperty, value); }
}
/// <summary>
/// Identifies the ProgressBarStyle dependency property.
/// </summary>
public static readonly DependencyProperty BusyContentStyleProperty = DependencyProperty.Register(
"BusyContentStyle",
typeof(Style),
typeof(BusyIndicator),
new PropertyMetadata(null));
/// <summary>
/// Gets or sets a value indicating the style to use for the progress bar.
/// </summary>
public Style BusyContentStyle
{
get
{
return (Style)GetValue(BusyContentStyleProperty);
}
set
{
SetValue(BusyContentStyleProperty, value);
}
}
/// <summary>
/// Gets or sets a value indicating whether the BusyContent is visible.
/// </summary>
protected bool IsContentVisible
{
get;
set;
}
static BusyIndicator()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(BusyIndicator), new FrameworkPropertyMetadata(typeof(BusyIndicator)));
}
/// <summary>
/// Overrides the OnApplyTemplate method.
/// </summary>
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
ChangeVisualState(false);
}
/// <summary>
/// Changes the control's visual state(s).
/// </summary>
/// <param name="useTransitions">True if state transitions should be used.</param>
protected virtual void ChangeVisualState(bool useTransitions)
{
if (string.IsNullOrEmpty(Error))
VisualStateManager.GoToState(this, IsBusy ? "Busy" : "Idle", useTransitions);
else
VisualStateManager.GoToState(this, "Error", useTransitions);
VisualStateManager.GoToState(this, IsContentVisible ? "Visible" : "Hidden", useTransitions);
}
/// <summary>
/// IsBusyProperty property changed handler.
/// </summary>
/// <param name="d">BusyIndicator that changed its IsBusy.</param>
/// <param name="e">Event arguments.</param>
private static void OnIsBusyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
((BusyIndicator)d).OnIsBusyChanged(e);
}
/// <summary>
/// IsBusyProperty property changed handler.
/// </summary>
/// <param name="e">Event arguments.</param>
protected virtual void OnIsBusyChanged(DependencyPropertyChangedEventArgs e)
{
if (IsBusy)
{
// Go visible now
IsContentVisible = true;
}
else
{
// No longer visible
if (string.IsNullOrEmpty(Error))
{
IsContentVisible = false;
if (this.FocusAferBusy != null)
{
this.FocusAferBusy.Dispatcher.BeginInvoke(DispatcherPriority.Input, new Action(() =>
{
this.FocusAferBusy.Focus();
this.FocusAferBusy = null;
}
));
}
}
else
{
IsContentVisible = true;
}
}
ChangeVisualState(true);
}
}
}
================================================
FILE: Meridian/Controls/ContentTransitionControl.xaml
================================================
<UserControl x:Class="Meridian.Controls.ContentTransitionControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<UserControl.Resources>
<Storyboard x:Key="TransitionOut">
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="Opacity">
<EasingDoubleKeyFrame KeyTime="0:0:0.6" Value="0">
<EasingDoubleKeyFrame.EasingFunction>
<ExponentialEase Exponent="6"/>
</EasingDoubleKeyFrame.EasingFunction>
</EasingDoubleKeyFrame>
</DoubleAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility">
<DiscreteObjectKeyFrame KeyTime="0:0:0.6" Value="{x:Static Visibility.Collapsed}"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
<Storyboard x:Key="TransitionIn">
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility">
<DiscreteObjectKeyFrame KeyTime="0:0:0" Value="{x:Static Visibility.Visible}"/>
</ObjectAnimationUsingKeyFrames>
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="Opacity">
<DiscreteDoubleKeyFrame KeyTime="0" Value="0" />
<EasingDoubleKeyFrame KeyTime="0:0:0.6" Value="1">
<EasingDoubleKeyFrame.EasingFunction>
<ExponentialEase Exponent="6"/>
</EasingDoubleKeyFrame.EasingFunction>
</EasingDoubleKeyFrame>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</UserControl.Resources>
<Grid x:Name="LayoutRoot">
<ContentControl x:Name="Control1" HorizontalContentAlignment="Stretch"/>
<ContentControl x:Name="Control2" HorizontalContentAlignment="Stretch"/>
</Grid>
</UserControl>
================================================
FILE: Meridian/Controls/ContentTransitionControl.xaml.cs
================================================
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media.Animation;
namespace Meridian.Controls
{
/// <summary>
/// Interaction logic for ContentTransitionControl.xaml
/// </summary>
public partial class ContentTransitionControl : UserControl
{
private ContentControl _currentControl;
private ContentControl _newControl;
public new static readonly DependencyProperty ContentTemplateProperty =
DependencyProperty.Register("ContentTemplate", typeof(DataTemplate), typeof(ContentTransitionControl), new PropertyMetadata(default(DataTemplate), ContentTemplatePropertyChanged));
public static readonly DependencyProperty SourceProperty =
DependencyProperty.Register("Source", typeof(object), typeof(ContentTransitionControl), new PropertyMetadata(default(object), SourcePropertyChanged));
private static void SourcePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var control = (ContentTransitionControl)d;
control._currentControl.Content = e.NewValue;
control.Swap();
if (e.OldValue != null)
control.AnimateOut();
if (e.NewValue != null)
control.AnimateIn();
}
public object Source
{
get { return GetValue(SourceProperty); }
set { SetValue(SourceProperty, value); }
}
private static void ContentTemplatePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var control = (ContentTransitionControl)d;
control._currentControl.ContentTemplate = (DataTemplate)e.NewValue;
control._newControl.ContentTemplate = (DataTemplate)e.NewValue;
}
public new DataTemplate ContentTemplate
{
get { return (DataTemplate)GetValue(ContentTemplateProperty); }
set { SetValue(ContentTemplateProperty, value); }
}
public ContentTransitionControl()
{
InitializeComponent();
_currentControl = Control1;
_newControl = Control2;
}
private void Swap()
{
var x = _currentControl;
_currentControl = _newControl;
_newControl = x;
}
private void AnimateOut()
{
var s = (Storyboard)Resources["TransitionOut"];
s.Begin(_currentControl);
}
private void AnimateIn()
{
var s = (Storyboard)Resources["TransitionIn"];
s.Begin(_newControl);
}
}
}
================================================
FILE: Meridian/Controls/ExtendedListBox.cs
================================================
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
namespace Meridian.Controls
{
public class ExtendedListBox : ListBox
{
private ScrollViewer _scrollViewer;
public static readonly DependencyProperty LoadMoreCommandProperty =
DependencyProperty.Register("LoadMoreCommand", typeof(ICommand), typeof(ExtendedListBox), new PropertyMetadata(default(ICommand)));
public ICommand LoadMoreCommand
{
get { return (ICommand)GetValue(LoadMoreCommandProperty); }
set { SetValue(LoadMoreCommandProperty, value); }
}
public ExtendedListBox()
{
Unloaded += ExtendedListBox_Unloaded;
}
void ExtendedListBox_Unloaded(object sender, RoutedEventArgs e)
{
if (_scrollViewer != null)
_scrollViewer.ScrollChanged -= _scrollViewer_ScrollChanged;
}
public override void OnApplyTemplate()
{
_scrollViewer = (ScrollViewer)FindElementRecursive(this, typeof(ScrollViewer));
_scrollViewer.ScrollChanged += _scrollViewer_ScrollChanged;
base.OnApplyTemplate();
}
void _scrollViewer_ScrollChanged(object sender, ScrollChangedEventArgs e)
{
if (_scrollViewer == null || LoadMoreCommand == null)
return;
if (e.VerticalOffset == _scrollViewer.ScrollableHeight && e.VerticalChange != 0)
LoadMoreCommand.Execute(null);
}
private UIElement FindElementRecursive(FrameworkElement parent, Type targetType)
{
int childCount = VisualTreeHelper.GetChildrenCount(parent);
UIElement returnElement = null;
if (childCount > 0)
{
for (int i = 0; i < childCount; i++)
{
var element = VisualTreeHelper.GetChild(parent, i);
if (element.GetType() == targetType)
{
return element as UIElement;
}
else
{
returnElement = FindElementRecursive(VisualTreeHelper.GetChild(parent, i) as FrameworkElement, targetType);
}
}
}
return returnElement;
}
}
}
================================================
FILE: Meridian/Controls/FlyoutContent.cs
================================================
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using GalaSoft.MvvmLight.Command;
using Neptune.UI.Extensions;
namespace Meridian.Controls
{
public class FlyoutContent : UserControl
{
#region Commands
public RelayCommand CloseCommand { get; private set; }
#endregion
public FlyoutContent()
{
InitializeCommand();
}
private void InitializeCommand()
{
CloseCommand = new RelayCommand(Close);
}
protected void Close()
{
var flyout = Application.Current.MainWindow.GetVisualDescendents().FirstOrDefault(c => c is FlyoutControl) as FlyoutControl;
if (flyout != null)
flyout.Close();
}
}
}
================================================
FILE: Meridian/Controls/FlyoutControl.xaml
================================================
<UserControl x:Class="Meridian.Controls.FlyoutControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300"
Grid.RowSpan="100" Grid.ColumnSpan="100"
x:Name="rootElement">
<UserControl.Resources>
<Storyboard x:Key="CloseAnim" Completed="CloseAnim_OnCompleted">
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="Opacity">
<EasingDoubleKeyFrame KeyTime="0:0:0.2" Value="0">
<EasingDoubleKeyFrame.EasingFunction>
<ExponentialEase EasingMode="EaseOut" Exponent="6"/>
</EasingDoubleKeyFrame.EasingFunction>
</EasingDoubleKeyFrame>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</UserControl.Resources>
<UserControl.Triggers>
<EventTrigger RoutedEvent="FrameworkElement.Loaded">
<BeginStoryboard>
<Storyboard>
<DoubleAnimationUsingKeyFrames Storyboard.TargetName="content" Storyboard.TargetProperty="(UIElement.RenderTransform).(ScaleTransform.ScaleX)">
<DiscreteDoubleKeyFrame KeyTime="0" Value="1.07"/>
<EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="1">
<EasingDoubleKeyFrame.EasingFunction>
<ExponentialEase EasingMode="EaseOut" Exponent="4"/>
</EasingDoubleKeyFrame.EasingFunction>
</EasingDoubleKeyFrame>
</DoubleAnimationUsingKeyFrames>
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="Opacity">
<DiscreteDoubleKeyFrame KeyTime="0" Value="0"/>
<EasingDoubleKeyFrame KeyTime="0:0:0.35" Value="1">
<EasingDoubleKeyFrame.EasingFunction>
<ExponentialEase EasingMode="EaseOut" Exponent="6"/>
</EasingDoubleKeyFrame.EasingFunction>
</EasingDoubleKeyFrame>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</UserControl.Triggers>
<Grid>
<Rectangle Fill="Black" Opacity="0.4"/>
<ContentControl x:Name="content" Content="{Binding FlyoutContent, ElementName=rootElement}" ContentTemplate="{Binding FlyoutContentTemplate, ElementName=rootElement}"
RenderTransformOrigin="0.5,0.5">
<ContentControl.RenderTransform>
<ScaleTransform ScaleY="{Binding RelativeSource={RelativeSource Self}, Path=ScaleX}"/>
</ContentControl.RenderTransform>
</ContentControl>
</Grid>
</UserControl>
================================================
FILE: Meridian/Controls/FlyoutControl.xaml.cs
================================================
using System;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Forms;
using System.Windows.Input;
using System.Windows.Media.Animation;
using GongSolutions.Wpf.DragDrop.Utilities;
using Application = System.Windows.Application;
using MessageBox = System.Windows.MessageBox;
using Panel = System.Windows.Controls.Panel;
using UserControl = System.Windows.Controls.UserControl;
namespace Meridian.Controls
{
/// <summary>
/// Interaction logic for FlyoutControl.xaml
/// </summary>
public partial class FlyoutControl : UserControl
{
private object _result = null;
public static readonly DependencyProperty FlyoutContentProperty =
DependencyProperty.Register("FlyoutContent", typeof(object), typeof(FlyoutControl), new PropertyMetadata(default(object)));
public object FlyoutContent
{
get { return (object)GetValue(FlyoutContentProperty); }
set { SetValue(FlyoutContentProperty, value); }
}
public static readonly DependencyProperty FlyoutContentTemplateProperty =
DependencyProperty.Register("FlyoutContentTemplate", typeof(DataTemplate), typeof(FlyoutControl), new PropertyMetadata(default(DataTemplate)));
public DataTemplate FlyoutContentTemplate
{
get { return (DataTemplate)GetValue(FlyoutContentTemplateProperty); }
set { SetValue(FlyoutContentTemplateProperty, value); }
}
public delegate void ClosedEventHandler(object result);
public event ClosedEventHandler Closed;
public FlyoutControl()
{
InitializeComponent();
}
public void Show()
{
var mainWindow = Application.Current.MainWindow;
if (mainWindow.Content == null)
return;
var panel = mainWindow.GetVisualDescendent<Panel>(); //mainWindow.Content as Panel;
if (panel == null)
{
return;
}
panel.Children.Add(this);
}
public Task<object> ShowAsync()
{
var tcs = new TaskCompletionSource<object>();
Show();
Closed += (result) => tcs.TrySetResult(result);
return tcs.Task;
}
public void Close(object result = null)
{
_result = result;
((Storyboard)Resources["CloseAnim"]).Begin(this);
}
public void CloseNow(object result = null)
{
_result = result;
CloseInternal();
}
private void CloseAnim_OnCompleted(object sender, EventArgs e)
{
CloseInternal();
}
private void CloseInternal()
{
var mainWindow = Application.Current.MainWindow;
if (mainWindow.Content == null)
return;
var panel = mainWindow.GetVisualDescendent<Panel>();//mainWindow.Content as Panel;
if (panel == null)
{
return;
}
panel.Children.Remove(this);
if (Closed != null)
Closed(_result);
}
}
}
================================================
FILE: Meridian/Controls/ImageTransitionControl.xaml
================================================
<UserControl x:Class="Meridian.Controls.ImageTransitionControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300" x:Name="rootElement">
<UserControl.Resources>
<Storyboard x:Key="BgTransitionOut">
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="Opacity" Storyboard.TargetName="BackgroundRectangle">
<EasingDoubleKeyFrame KeyTime="0:0:0.9" Value="0">
<EasingDoubleKeyFrame.EasingFunction>
<ExponentialEase Exponent="8"/>
</EasingDoubleKeyFrame.EasingFunction>
</EasingDoubleKeyFrame>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
<Storyboard x:Key="BgTransitionIn">
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="Opacity" Storyboard.TargetName="BackgroundRectangle">
<DiscreteDoubleKeyFrame KeyTime="0" Value="0" />
<EasingDoubleKeyFrame KeyTime="0:0:0.7" Value="1">
<EasingDoubleKeyFrame.EasingFunction>
<ExponentialEase Exponent="8"/>
</EasingDoubleKeyFrame.EasingFunction>
</EasingDoubleKeyFrame>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
<Storyboard x:Key="TransitionOut">
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="Opacity">
<EasingDoubleKeyFrame KeyTime="0:0:0.9" Value="0">
<EasingDoubleKeyFrame.EasingFunction>
<ExponentialEase Exponent="8"/>
</EasingDoubleKeyFrame.EasingFunction>
</EasingDoubleKeyFrame>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
<Storyboard x:Key="TransitionIn">
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="Opacity">
<DiscreteDoubleKeyFrame KeyTime="0" Value="0" />
<EasingDoubleKeyFrame KeyTime="0:0:0.9" Value="1">
<EasingDoubleKeyFrame.EasingFunction>
<ExponentialEase Exponent="8"/>
</EasingDoubleKeyFrame.EasingFunction>
</EasingDoubleKeyFrame>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</UserControl.Resources>
<Grid>
<Rectangle x:Name="BackgroundRectangle" Fill="{Binding ElementName=rootElement, Path=ImageBackground}" Opacity="0"/>
<Grid x:Name="LayoutRoot">
<Image x:Name="Image1" Stretch="UniformToFill" Opacity="0" HorizontalAlignment="{Binding ElementName=rootElement, Path=HorizontalContentAlignment}" RenderOptions.BitmapScalingMode="HighQuality"/>
<Image x:Name="Image2" Stretch="UniformToFill" HorizontalAlignment="{Binding ElementName=rootElement, Path=HorizontalContentAlignment}" RenderOptions.BitmapScalingMode="HighQuality"/>
</Grid>
</Grid>
</UserControl>
================================================
FILE: Meridian/Controls/ImageTransitionControl.xaml.cs
================================================
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Media.Animation;
namespace Meridian.Controls
{
/// <summary>
/// Interaction logic for ImageTransitionControl.xaml
/// </summary>
public partial class ImageTransitionControl : UserControl
{
private Image _currentImage;
private Image _newImage;
public static readonly DependencyProperty SourceProperty =
DependencyProperty.Register("Source", typeof(ImageSource), typeof(ImageTransitionControl), new PropertyMetadata(default(ImageSource), ImageSourcePropertyChanged));
private static void ImageSourcePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var control = (ImageTransitionControl)d;
control.Swap();
control._newImage.Source = (ImageSource)e.NewValue;
if (e.OldValue != null)
control.AnimateOut();
if (e.NewValue != null)
{
control.AnimateIn();
}
}
public ImageSource Source
{
get { return (ImageSource)GetValue(SourceProperty); }
set { SetValue(SourceProperty, value); }
}
public static readonly DependencyProperty ImageOpacityProperty =
DependencyProperty.Register("ImageOpacity", typeof(double), typeof(ImageTransitionControl), new PropertyMetadata(default(double), ImageOpacityPropertyChanged));
private static void ImageOpacityPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var control = (ImageTransitionControl)d;
if (e.NewValue != null)
{
var storyboard = (Storyboard)control.Resources["TransitionIn"];
var anim = (DoubleAnimationUsingKeyFrames)storyboard.Children[0];
var keyFrame = anim.KeyFrames[1];
keyFrame.Value = (double)e.NewValue;
}
}
public double ImageOpacity
{
get { return (double)GetValue(ImageOpacityProperty); }
set { SetValue(ImageOpacityProperty, value); }
}
public static readonly DependencyProperty ImageBackgroundProperty =
DependencyProperty.Register("ImageBackground", typeof(Brush), typeof(ImageTransitionControl), new PropertyMetadata(default(Brush)));
public Brush ImageBackground
{
get { return (Brush)GetValue(ImageBackgroundProperty); }
set { SetValue(ImageBackgroundProperty, value); }
}
public ImageTransitionControl()
{
InitializeComponent();
_currentImage = Image1;
_newImage = Image2;
}
private void Swap()
{
var x = _currentImage;
_currentImage = _newImage;
_newImage = x;
}
private void AnimateOut()
{
var s = (Storyboard)Resources["TransitionOut"];
s.Begin(_currentImage);
s = (Storyboard)Resources["BgTransitionOut"];
s.Begin();
}
private void AnimateIn()
{
var s = (Storyboard)Resources["TransitionIn"];
s.Begin(_newImage);
s = (Storyboard)Resources["BgTransitionIn"];
s.Begin();
}
}
}
================================================
FILE: Meridian/Controls/LocalSearchControl.xaml
================================================
<UserControl x:Class="Meridian.Controls.LocalSearchControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:controls="clr-namespace:Meridian.Controls"
xmlns:i="http://schemas.microsoft.com/xaml/behaviors"
xmlns:behaviours="clr-namespace:Meridian.Behaviours"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300"
x:Name="rootElement"
Loaded="LocalSearchControl_OnLoaded" KeyDown="LocalSearchControl_OnKeyDown"
GotFocus="LocalSearchControl_OnGotFocus" IsVisibleChanged="LocalSearchControl_OnIsVisibleChanged">
<i:Interaction.Behaviors>
<behaviours:VisibilityTransitionBehaviour Value="{Binding IsActive, ElementName=rootElement, Converter={StaticResource BoolToVisibilityConverter}}" AnimationIn="{StaticResource LocalSearchBoxTransitionIn}" AnimationOut="{StaticResource LocalSearchBoxTransitionOut}"/>
</i:Interaction.Behaviors>
<UserControl.RenderTransform>
<TranslateTransform />
</UserControl.RenderTransform>
<Border x:Name="LocalSearchBoxRootBorder" Background="{DynamicResource MainBackgroundBrush}" VerticalAlignment="Top" Width="200" Margin="0,-1,20,0" BorderThickness="1,0,1,1" HorizontalAlignment="Right"
SnapsToDevicePixels="False">
<Border.BorderBrush>
<SolidColorBrush Color="{DynamicResource ForegroundColor}" Opacity="0.15"/>
</Border.BorderBrush>
<Grid>
<controls:TextBoxWithHint x:Name="LocalSearchBox" Style="{StaticResource LocalSearchBoxStyle}" Padding="0,0,20,0" Margin="10,10,5,10" Hint="Start typing" Height="24"
HintStyle="{StaticResource TextBoxHintStyle}"
TextChanged="LocalSearchBox_OnTextChanged">
</controls:TextBoxWithHint>
<Button x:Name="CloseLocalSearchBoxButton" Width="12" Background="Transparent" HorizontalAlignment="Right" Margin="0,1,10,0"
Template="{StaticResource CancelSearchBoxButton}" Click="CloseLocalSearchBoxButton_OnClick"/>
</Grid>
</Border>
</UserControl>
================================================
FILE: Meridian/Controls/LocalSearchControl.xaml.cs
================================================
using System;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Input;
using System.Windows.Threading;
using Neptune.UI.Extensions;
namespace Meridian.Controls
{
/// <summary>
/// Interaction logic for LocalSearchControl.xaml
/// </summary>
public partial class LocalSearchControl : UserControl
{
#region IsActive property
public static readonly DependencyProperty IsActiveProperty = DependencyProperty.Register(
"IsActive", typeof(bool), typeof(LocalSearchControl), new PropertyMetadata(default(bool), IsActiveChanged));
private static void IsActiveChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var c = (LocalSearchControl)d;
if ((bool)e.NewValue)
{
//c.Visibility = Visibility.Visible;
}
else
{
//c.Visibility = Visibility.Collapsed;
c.LocalSearchBox.Text = string.Empty;
}
}
public bool IsActive
{
get { return (bool)GetValue(IsActiveProperty); }
set { SetValue(IsActiveProperty, value); }
}
#endregion
#region Source property
public static readonly DependencyProperty SourceProperty = DependencyProperty.Register(
"Source", typeof(CollectionViewSource), typeof(LocalSearchControl), new PropertyMetadata(default(CollectionViewSource)));
public CollectionViewSource Source
{
get { return (CollectionViewSource)GetValue(SourceProperty); }
set { SetValue(SourceProperty, value); }
}
#endregion
#region Filter property
public static readonly DependencyProperty FilterProperty = DependencyProperty.Register(
"Filter", typeof(Predicate<object>), typeof(LocalSearchControl), new PropertyMetadata(default(Predicate<object>)));
public Predicate<object> Filter
{
get { return (Predicate<object>)GetValue(FilterProperty); }
set { SetValue(FilterProperty, value); }
}
#endregion
#region Query property
public static readonly DependencyProperty QueryProperty = DependencyProperty.Register(
"Query", typeof(string), typeof(LocalSearchControl), new PropertyMetadata(default(string)));
public string Query
{
get { return (string)GetValue(QueryProperty); }
set { SetValue(QueryProperty, value); }
}
#endregion
public bool IsFiltering { get; set; }
public LocalSearchControl()
{
InitializeComponent();
}
public static LocalSearchControl GetForCurrentView()
{
return (Application.Current.MainWindow.GetVisualDescendents().FirstOrDefault(c => c is LocalSearchControl) as LocalSearchControl);
}
private void LocalSearchControl_OnLoaded(object sender, RoutedEventArgs e)
{
}
private void LocalSearchBox_OnTextChanged(object sender, TextChangedEventArgs e)
{
Query = LocalSearchBox.Text;
if (Source != null && Source.View != null)
{
Source.IsLiveFilteringRequested = !string.IsNullOrEmpty(Query);
IsFiltering = !string.IsNullOrEmpty(Query);
if (Source.View.Filter == null)
Source.View.Filter = Filter;
else
Source.View.Refresh();
}
}
private void CloseLocalSearchBoxButton_OnClick(object sender, RoutedEventArgs e)
{
IsActive = false;
}
private void LocalSearchControl_OnKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Escape)
IsActive = false;
}
private void LocalSearchControl_OnGotFocus(object sender, RoutedEventArgs e)
{
LocalSearchBox.Focus();
}
private void LocalSearchControl_OnIsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
{
if ((bool)e.NewValue)
{
//майкрософт, убей себя пожалуйста об стену
Dispatcher.BeginInvoke(DispatcherPriority.ContextIdle, new Action(() => LocalSearchBox.Focus()));
}
}
}
}
================================================
FILE: Meridian/Controls/NotificationControl.xaml
================================================
<UserControl x:Class="Meridian.Controls.NotificationControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300"
x:Name="rootElement">
<UserControl.Resources>
<Storyboard x:Key="SwitchInAnim" Completed="SwitchInAnim_OnCompleted">
<DoubleAnimationUsingKeyFrames Storyboard.TargetName="StatusTextBlockRenderTransform" Storyboard.TargetProperty="Y">
<DiscreteDoubleKeyFrame KeyTime="0:0:0.0" Value="-20"/>
<EasingDoubleKeyFrame KeyTime="0:0:0.6" Value="0">
<EasingDoubleKeyFrame.EasingFunction>
<ExponentialEase EasingMode="EaseOut" Exponent="6"/>
</EasingDoubleKeyFrame.EasingFunction>
</EasingDoubleKeyFrame>
</DoubleAnimationUsingKeyFrames>
<DoubleAnimationUsingKeyFrames Storyboard.TargetName="StatusTextBlock" Storyboard.TargetProperty="Opacity">
<DiscreteDoubleKeyFrame KeyTime="0:0:0.0" Value="0"/>
<EasingDoubleKeyFrame KeyTime="0:0:0.6" Value="0.6">
<EasingDoubleKeyFrame.EasingFunction>
<ExponentialEase EasingMode="EaseOut" Exponent="6"/>
</EasingDoubleKeyFrame.EasingFunction>
</EasingDoubleKeyFrame>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
<Storyboard x:Key="SwitchOutAnim" Completed="SwitchOutAnim_OnCompleted">
<DoubleAnimationUsingKeyFrames Storyboard.TargetName="StatusTextBlock" Storyboard.TargetProperty="Opacity">
<EasingDoubleKeyFrame KeyTime="0:0:0.4" Value="0">
<EasingDoubleKeyFrame.EasingFunction>
<ExponentialEase EasingMode="EaseOut" Exponent="6"/>
</EasingDoubleKeyFrame.EasingFunction>
</EasingDoubleKeyFrame>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</UserControl.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition />
</Grid.ColumnDefinitions>
<ProgressBar x:Name="ProgressBar" Style="{StaticResource CommonProgressBarStyle}" VerticalAlignment="Center" Margin="3,2,10,0" Visibility="Collapsed" Padding="0" Width="150" Height="5" Value="{Binding Progress, ElementName=rootElement}"/>
<TextBlock Grid.Column="1" Name="StatusTextBlock" FontSize="11" Margin="0,0,0,0" Text="{Binding Status, ElementName=rootElement}"
TextTrimming="CharacterEllipsis" Foreground="{DynamicResource ForegroundBrush}" Opacity="0.6">
<TextBlock.RenderTransform>
<TranslateTransform x:Name="StatusTextBlockRenderTransform"/>
</TextBlock.RenderTransform>
</TextBlock>
</Grid>
</UserControl>
================================================
FILE: Meridian/Controls/NotificationControl.xaml.cs
================================================
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media.Animation;
using System.Windows.Threading;
namespace Meridian.Controls
{
/// <summary>
/// Interaction logic for NotificationControl.xaml
/// </summary>
public partial class NotificationControl : UserControl
{
private DispatcherTimer _timer;
private bool _isStatusVisible;
public static readonly DependencyProperty StatusProperty = DependencyProperty.Register(
"Status", typeof(string), typeof(NotificationControl), new PropertyMetadata(null, OnNotificationChanged));
public static readonly DependencyProperty ProgressProperty = DependencyProperty.Register(
"Progress", typeof (int), typeof (NotificationControl), new PropertyMetadata(default(int), ProgressChanged));
private static void ProgressChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var control = (NotificationControl) d;
if ((int)e.NewValue >= 100)
control.ProgressBar.Visibility = Visibility.Collapsed;
else
control.ProgressBar.Visibility = Visibility.Visible;
}
public int Progress
{
get { return (int) GetValue(ProgressProperty); }
set { SetValue(ProgressProperty, value); }
}
public string Status
{
get { return (string)GetValue(StatusProperty); }
set
{
SetValue(StatusProperty, value);
}
}
public NotificationControl()
{
InitializeComponent();
_timer = new DispatcherTimer();
_timer.Interval = TimeSpan.FromSeconds(3);
_timer.Tick += TimerTick;
}
private void TimerTick(object sender, EventArgs e)
{
//UpdateStatus(string.Empty);
Status = string.Empty;
_timer.Stop();
var outAnim = (Storyboard)Resources["SwitchOutAnim"];
outAnim.Begin(this);
}
private void UpdateStatus(string newValue)
{
//var outAnim = (Storyboard)Resources["SwitchOutAnim"];
//outAnim.Begin(this);
var inAnim = (Storyboard)Resources["SwitchInAnim"];
inAnim.Begin();
}
private static void OnNotificationChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)
{
var control = (NotificationControl)o;
if (e.NewValue != null)
control.UpdateStatus(e.NewValue.ToString());
//else if (e.NewValue == null)
// control.UpdateStatus(string.Empty);
}
private void SwitchOutAnim_OnCompleted(object sender, EventArgs e)
{
//this.StatusTextBlock.Text = Status;
//var inAnim = (Storyboard)Resources["SwitchInAnim"];
//inAnim.Begin(this);
//if (!string.IsNullOrEmpty(_newValue))
//{
// _timer.Stop();
// _timer.Start();
//}
}
private void SwitchInAnim_OnCompleted(object sender, EventArgs e)
{
if (!string.IsNullOrEmpty(Status))
{
_timer.Stop();
_timer.Start();
}
}
}
}
================================================
FILE: Meridian/Controls/PageBase.cs
================================================
using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;
namespace Meridian.Controls
{
public sealed class NavigationContext
{
private readonly Dictionary<string, object> _parameters;
public Dictionary<string, object> Parameters
{
get { return _parameters; }
set
{
if (value == null)
return;
foreach (var kp in value)
{
_parameters.Add(kp.Key, kp.Value);
}
}
}
public NavigationContext()
{
_parameters = new Dictionary<string, object>();
}
}
public class PageBase : Page
{
public NavigationContext NavigationContext { get; set; }
public PageBase()
{
NavigationContext = new NavigationContext();
this.Loaded += PageBase_Loaded;
this.Unloaded += PageBase_Unloaded;
}
public virtual void OnNavigatedTo()
{
}
public virtual void OnNavigatedFrom()
{
}
private void PageBase_Unloaded(object sender, RoutedEventArgs e)
{
this.Loaded -= PageBase_Loaded;
this.Unloaded -= PageBase_Unloaded;
OnNavigatedFrom();
}
private void PageBase_Loaded(object sender, RoutedEventArgs e)
{
OnNavigatedTo();
}
}
}
================================================
FILE: Meridian/Controls/PlayerControl.xaml
================================================
<UserControl x:Class="Meridian.Controls.PlayerControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:localization="clr-namespace:Meridian.Resources.Localization"
xmlns:controls="clr-namespace:Meridian.Controls"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="185"
DataContext="{Binding Main, Source={StaticResource Locator}}">
<StackPanel>
<Grid Height="150">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="150"/>
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Grid>
<Rectangle Fill="{DynamicResource AccentBrush}" Opacity="0.6"/>
<Image Source="/Resources/Images/cover_default.png" Margin="50" RenderOptions.BitmapScalingMode="HighQuality"/>
<controls:ImageTransitionControl Source="{Binding TrackImage}" HorizontalContentAlignment="Center"/>
</Grid>
<StackPanel Grid.Column="1" Orientation="Vertical" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="0,0,0,0">
<ToggleButton Margin="0,0,0,0" Width="32" Height="32" IsChecked="{Binding Main.EnableStatusBroadcasting, Mode=TwoWay, Source={StaticResource Locator}}" Style="{StaticResource VkStatusButtonStyle}"
IsEnabled="{Binding Main.CanBroadcast, Source={StaticResource Locator}}"
ToolTip="{x:Static localization:MainResources.VkStatusBroadcasting}" Command="{Binding VkBroadcastCommand}">
<ToggleButton.RenderTransform>
<TranslateTransform />
</ToggleButton.RenderTransform>
</ToggleButton>
<ToggleButton Width="32" Height="32" Margin="0,7,0,3" IsEnabled="True" IsChecked="{Binding Main.EnableScrobbling, Mode=TwoWay, Source={StaticResource Locator}}" Style="{StaticResource LastFmScrobbleButtonStyle}"
ToolTip="{x:Static localization:MainResources.LastFmScrobbling}">
<ToggleButton.RenderTransform>
<TranslateTransform />
</ToggleButton.RenderTransform>
</ToggleButton>
<ToggleButton Width="32" Height="32" Margin="0,10,0,0" IsChecked="{Binding Main.Shuffle, Mode=TwoWay, Source={StaticResource Locator}}" Style="{StaticResource ShuffleButtonStyle}"
ToolTip="{x:Static localization:MainResources.Shuffle}">
<ToggleButton.RenderTransform>
<TranslateTransform />
</ToggleButton.RenderTransform>
</ToggleButton>
<ToggleButton Width="32" Height="32" Margin="0,10,0,0" IsChecked="{Binding Main.Repeat, Mode=TwoWay, Source={StaticResource Locator}}" Style="{StaticResource RepeatButtonStyle}"
ToolTip="{x:Static localization:MainResources.Repeat}">
<ToggleButton.RenderTransform>
<TranslateTransform />
</ToggleButton.RenderTransform>
</ToggleButton>
</StackPanel>
</Grid>
<Popup x:Name="CurrentAudioMenuPopup" PlacementTarget="{Binding ElementName=CurrentAudioMenuButton}" StaysOpen="False" HorizontalOffset="20" VerticalOffset="10"
PopupAnimation="Fade" AllowsTransparency="True" IsOpen="{Binding ElementName=CurrentAudioMenuButton, Path=IsChecked, Mode=TwoWay}">
<Border Background="White" BorderThickness="1" BorderBrush="#a0a0a0" DataContext="{Binding CurrentAudio}">
<ItemsControl>
<MenuItem Header="{x:Static localization:MainResources.ContextMenuAdd}" Visibility="{Binding IsAddedByCurrentUser, Converter={StaticResource BoolToVisibilityConverter}, ConverterParameter=True}" Command="{Binding Main.AddRemoveAudioCommand, Source={StaticResource Locator}}" CommandParameter="{Binding}"
Click="MenuItem_OnClick"/>
<MenuItem Header="{x:Static localization:MainResources.ContextMenuEdit}" Visibility="{Binding IsAddedByCurrentUser, Converter={StaticResource BoolToVisibilityConverter}}" Command="{Binding Main.EditAudioCommand, Source={StaticResource Locator}}" CommandParameter="{Binding}"
Click="MenuItem_OnClick"/>
<MenuItem Header="{x:Static localization:MainResources.ContextMenuRemove}" Visibility="{Binding IsAddedByCurrentUser, Converter={StaticResource BoolToVisibilityConverter}}" Command="{Binding Main.AddRemoveAudioCommand, Source={StaticResource Locator}}" CommandParameter="{Binding}"
Click="MenuItem_OnClick"/>
<MenuItem Header="{x:Static localization:MainResources.ContextMenuShare}" Command="{Binding Main.ShareAudioCommand, Source={StaticResource Locator}}" CommandParameter="{Binding}"
Click="MenuItem_OnClick"/>
<MenuItem Header="{x:Static localization:MainResources.ContextMenuLyrics}" IsEnabled="{Binding HasLyrics}" Command="{Binding Main.ShowLyricsCommand, Source={StaticResource Locator}}" CommandParameter="{Binding}"
Click="MenuItem_OnClick"/>
<Separator Style="{StaticResource CommonSeparatorStyle}"/>
<MenuItem Header="{x:Static localization:MainResources.ContextMenuStartRadio}" Command="{Binding Main.StartTrackRadioCommand, Source={StaticResource Locator}}" CommandParameter="{Binding}"
Click="MenuItem_OnClick"/>
<MenuItem Header="{x:Static localization:MainResources.ContextMenuShowArtistInfo}" Command="{Binding Main.ShowArtistInfoCommand, Source={StaticResource Locator}}" CommandParameter="{Binding Artist}"
Click="MenuItem_OnClick"/>
<MenuItem Header="{x:Static localization:MainResources.ContextMenuSearchArtist}" Command="{Binding Main.SearchCommand, Source={StaticResource Locator}}" CommandParameter="{Binding Artist}"
Click="MenuItem_OnClick"/>
<Separator Style="{StaticResource CommonSeparatorStyle}"/>
<MenuItem Header="{x:Static localization:MainResources.ContextMenuAddToNowPlaying}" Command="{Binding Main.AddToNowPlayingCommand, Source={StaticResource Locator}}" CommandParameter="{Binding}"
Click="MenuItem_OnClick"/>
<MenuItem Header="{x:Static localization:MainResources.ContextMenuPlayNext}" Command="{Binding Main.PlayAudioNextCommand, Source={StaticResource Locator}}" CommandParameter="{Binding}"
Click="MenuItem_OnClick"/>
<MenuItem Header="{x:Static localization:MainResources.ContextMenuCopyInfo}" Command="{Binding Main.CopyInfoCommand, Source={StaticResource Locator}}" CommandParameter="{Binding}"
Click="MenuItem_OnClick"/>
</ItemsControl>
</Border>
</Popup>
<ToggleButton x:Name="CurrentAudioMenuButton" Style="{StaticResource CurrentAudioMenuButtonStyle}">
<StackPanel DataContext="{Binding CurrentAudio}" HorizontalAlignment="Left" Width="150">
<TextBlock Text="{Binding Title, Converter={StaticResource StringToUpperConverter}}" FontWeight="Bold" FontSize="15" TextTrimming="CharacterEllipsis" MaxHeight="36"
Foreground="{DynamicResource SidebarForegroundBrush}" ToolTip="{Binding Title}">
</TextBlock>
<TextBlock Text="{Binding Artist}" FontWeight="Normal" FontSize="14" Opacity="0.6" Margin="0,0,0,0" TextTrimming="CharacterEllipsis"
Foreground="{DynamicResource SidebarForegroundBrush}" ToolTip="{Binding Artist}">
</TextBlock>
</StackPanel>
</ToggleButton>
<Grid HorizontalAlignment="Left" Margin="0,10,0,0" Width="150">
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Slider IsMoveToPointEnabled="True"
Value="{Binding Main.CurrentAudioPositionSeconds, Source={StaticResource Locator}, Mode=TwoWay}" Maximum="{Binding Main.CurrentAudioDuration.TotalSeconds, Source={StaticResource Locator}, Mode=OneWay}"
Style="{StaticResource CommonSliderStyle}" Background="{DynamicResource SidebarSliderBackgroundBrush}" />
<TextBlock Text="{Binding Main.CurrentAudioPosition, Source={StaticResource Locator}, Converter={StaticResource AudioTimeSpanConverter}}" FontSize="10" Opacity="0.5" Margin="0,17,0,0" Foreground="{DynamicResource SidebarForegroundBrush}"/>
<TextBlock Text="{Binding Main.CurrentAudioDuration, Source={StaticResource Locator}, Converter={StaticResource AudioTimeSpanConverter}}" FontSize="10" Opacity="0.5" Margin="0,17,0,0" HorizontalAlignment="Right" Foreground="{DynamicResource SidebarForegroundBrush}"/>
</Grid>
<Border Width="150" HorizontalAlignment="Left">
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Margin="0,0,10,0">
<Button Margin="0,0,7,0" Command="{Binding Main.PrevAudioCommand, Source={StaticResource Locator}}" Width="26" Height="26" Style="{StaticResource PrevButtonStyle}" Foreground="{DynamicResource SidebarForegroundBrush}"
ToolTip="{x:Static localization:MainResources.PrevTrack}">
<Button.RenderTransform>
<TranslateTransform />
</Button.RenderTransform>
</Button>
<ToggleButton Width="36" Height="36" IsChecked="{Binding IsPlaying, Mode=TwoWay}" Command="{Binding Main.PlayPauseCommand, Source={StaticResource Locator}}" Style="{StaticResource PlayPauseButtonStyle}" Foreground="{DynamicResource SidebarForegroundBrush}"
ToolTip="{x:Static localization:MainResources.PlayPause}">
<ToggleButton.RenderTransform>
<TranslateTransform />
</ToggleButton.RenderTransform>
</ToggleButton>
<Button Margin="7,0,0,0" Command="{Binding Main.NextAudioCommand, Source={StaticResource Locator}}" Width="26" Height="26" Style="{StaticResource NextButtonStyle}" Foreground="{DynamicResource SidebarForegroundBrush}"
ToolTip="{x:Static localization:MainResources.NextTrack}">
<Button.RenderTransform>
<TranslateTransform />
</Button.RenderTransform>
</Button>
</StackPanel>
</Border>
<Border Width="150" HorizontalAlignment="Left" Margin="0,5,0,0">
<controls:VolumeControl Margin="5,0,5,0" Volume="{Binding Volume, Mode=TwoWay}"/>
</Border>
</StackPanel>
</UserControl>
================================================
FILE: Meridian/Controls/PlayerControl.xaml.cs
================================================
using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
namespace Meridian.Controls
{
/// <summary>
/// Interaction logic for PlayerControl.xaml
/// </summary>
public partial class PlayerControl : UserControl
{
public PlayerControl()
{
InitializeComponent();
}
private void MenuItem_OnClick(object sender, RoutedEventArgs e)
{
CurrentAudioMenuPopup.SetValue(Popup.IsOpenProperty, false);
}
}
}
================================================
FILE: Meridian/Controls/ShareBarControl.xaml
================================================
<UserControl x:Class="Meridian.Controls.ShareBarControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:dragDrop="clr-namespace:GongSolutions.Wpf.DragDrop;assembly=GongSolutions.Wpf.DragDrop"
xmlns:localization="clr-namespace:Meridian.Resources.Localization"
mc:Ignorable="d"
d:DesignHeight="150" d:DesignWidth="500"
Background="{DynamicResource MainBackgroundBrush}"
x:Name="rootElement">
<Grid x:Name="rootGrid" Margin="24,10,24,10"
dragDrop:DragDrop.IsDropTarget="True" dragDrop:DragDrop.DragHandler="{Binding}" dragDrop:DragDrop.DropHandler="{Binding}">
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition />
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Rectangle Fill="Transparent" Grid.ColumnSpan="2" Grid.RowSpan="2"/>
<TextBlock Text="{x:Static localization:MainResources.ShareBarTitle}" Foreground="{DynamicResource ForegroundBrush}" HorizontalAlignment="Center" FontSize="16" Opacity="0.2" VerticalAlignment="Top" Margin="0,-5,0,0"/>
<ItemsControl Grid.Row="1" ItemsSource="{Binding Tracks}" Margin="0,5,0,5">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Vertical"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button Style="{StaticResource SimpleButtonStyle}" Width="180" Margin="0,0,10,0">
<Grid >
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock x:Name="Title" Text="{Binding Title}" Foreground="{DynamicResource ForegroundBrush}" FontSize="14" TextTrimming="CharacterEllipsis"
ToolTip="{Binding Title}"/>
<Button Grid.Column="1" Style="{StaticResource CloseButtonStyle}" SnapsToDevicePixels="True" Command="{Binding DataContext.RemoveTrackCommand, ElementName=rootGrid}" CommandParameter="{Binding}"
VerticalAlignment="Center" Margin="3,0,0,0"/>
</Grid>
</Button>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<StackPanel Orientation="Horizontal" Grid.Row="2" HorizontalAlignment="Right">
<Button Style="{StaticResource HighlightedButtonStyle}" Content="{x:Static localization:MainResources.NextButton}" Margin="0,0,15,0" IsEnabled="{Binding CanGoNext}" Command="{Binding GoNextCommand}"/>
<Button Style="{StaticResource CommonButtonStyle}" Content="{x:Static localization:MainResources.CancelButton}" Command="{Binding CancelCommand}"/>
</StackPanel>
<Rectangle Fill="{StaticResource SplitterBrush}" Height="1" Margin="-24,-34,-24,0" Opacity="0.3"/>
</Grid>
</UserControl>
================================================
FILE: Meridian/Controls/ShareBarControl.xaml.cs
================================================
using System.Windows.Controls;
using Meridian.ViewModel;
using Meridian.ViewModel.Flyouts;
namespace Meridian.Controls
{
/// <summary>
/// Interaction logic for ShareBarControl.xaml
/// </summary>
public partial class ShareBarControl : UserControl
{
private ShareViewModel _viewModel;
public ShareBarControl()
{
InitializeComponent();
_viewModel = new ShareViewModel();
rootGrid.DataContext = _viewModel;
}
}
}
================================================
FILE: Meridian/Controls/TextBoxWithHint.cs
================================================
using System.Windows;
using System.Windows.Controls;
namespace Meridian.Controls
{
public class TextBoxWithHint : TextBox
{
private ContentControl _hintContent;
public static readonly DependencyProperty HintProperty =
DependencyProperty.Register("Hint", typeof(object), typeof(TextBoxWithHint), new PropertyMetadata(default(object)));
public static readonly DependencyProperty HintStyleProperty =
DependencyProperty.Register("HintStyle", typeof(Style), typeof(TextBoxWithHint), new PropertyMetadata(default(Style)));
public Style HintStyle
{
get { return (Style)GetValue(HintStyleProperty); }
set { SetValue(HintStyleProperty, value); }
}
public object Hint
{
get { return GetValue(HintProperty); }
set { SetValue(HintProperty, value); }
}
public TextBoxWithHint()
{
DefaultStyleKey = typeof(TextBoxWithHint);
}
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
_hintContent = GetTemplateChild("HintContent") as ContentControl;
DetermineHintVisibility();
}
protected override void OnGotFocus(RoutedEventArgs e)
{
DetermineHintVisibility();
base.OnGotFocus(e);
}
protected override void OnLostFocus(RoutedEventArgs e)
{
DetermineHintVisibility();
base.OnLostFocus(e);
}
protected override void OnTextChanged(TextChangedEventArgs e)
{
DetermineHintVisibility();
base.OnTextChanged(e);
}
private void DetermineHintVisibility()
{
if(_hintContent != null)
{
if (string.IsNullOrEmpty(this.Text) && !IsFocused)
{
_hintContent.Visibility = Visibility.Visible;
}
else
{
_hintContent.Visibility = Visibility.Collapsed;
}
}
}
}
}
================================================
FILE: Meridian/Controls/VirtualizingWrapPanel.cs
================================================
using System;
using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Media;
namespace Meridian.Controls
{
public class VirtualizingWrapPanel : VirtualizingPanel, IScrollInfo
{
private const double ScrollLineAmount = 16.0;
private Size _extentSize;
private Size _viewportSize;
private Point _offset;
private ItemsControl _itemsControl;
private readonly Dictionary<UIElement, Rect> _childLayouts = new Dictionary<UIElement, Rect>();
public static readonly DependencyProperty ItemWidthProperty =
DependencyProperty.Register("ItemWidth", typeof(double), typeof(VirtualizingWrapPanel), new PropertyMetadata(1.0, HandleItemDimensionChanged));
public static readonly DependencyProperty ItemHeightProperty =
DependencyProperty.Register("ItemHeight", typeof(double), typeof(VirtualizingWrapPanel), new PropertyMetadata(1.0, HandleItemDimensionChanged));
private static readonly DependencyProperty VirtualItemIndexProperty =
DependencyProperty.RegisterAttached("VirtualItemIndex", typeof(int), typeof(VirtualizingWrapPanel), new PropertyMetadata(-1));
private IRecyclingItemContainerGenerator _itemsGenerator;
private bool _isInMeasure;
private static int GetVirtualItemIndex(DependencyObject obj)
{
return (int)obj.GetValue(VirtualItemIndexProperty);
}
private static void SetVirtualItemIndex(DependencyObject obj, int value)
{
obj.SetValue(VirtualItemIndexProperty, value);
}
public double ItemHeight
{
get { return (double)GetValue(ItemHeightProperty); }
set { SetValue(ItemHeightProperty, value); }
}
public double ItemWidth
{
get { return (double)GetValue(ItemWidthProperty); }
set { SetValue(ItemWidthProperty, value); }
}
public VirtualizingWrapPanel()
{
//if (!DesignerProperties.IsInDesignTool)
//{
Dispatcher.BeginInvoke(new Action(Initialize));
//}
}
private void Initialize()
{
_itemsControl = ItemsControl.GetItemsOwner(this);
_itemsGenerator = (IRecyclingItemContainerGenerator)ItemContainerGenerator;
InvalidateMeasure();
}
protected override void OnItemsChanged(object sender, ItemsChangedEventArgs args)
{
base.OnItemsChanged(sender, args);
InvalidateMeasure();
}
protected override Size MeasureOverride(Size availableSize)
{
if (_itemsControl == null)
{
_itemsControl = ItemsControl.GetItemsOwner(this);
}
if (_itemsControl == null)
{
return availableSize;
}
_isInMeasure = true;
_childLayouts.Clear();
var extentInfo = GetExtentInfo(availableSize, ItemHeight);
EnsureScrollOffsetIsWithinConstrains(extentInfo);
var layoutInfo = GetLayoutInfo(availableSize, ItemHeight, extentInfo);
RecycleItems(layoutInfo);
if (_itemsGenerator == null)
Initialize();
// Determine where the first item is in relation to previously realized items
var generatorStartPosition = _itemsGenerator.GeneratorPositionFromIndex(layoutInfo.FirstRealizedItemIndex);
var visualIndex = 0;
var currentX = layoutInfo.FirstRealizedItemLeft;
var currentY = layoutInfo.FirstRealizedLineTop;
using (_itemsGenerator.StartAt(generatorStartPosition, GeneratorDirection.Forward, true))
{
for (var itemIndex = layoutInfo.FirstRealizedItemIndex; itemIndex <= layoutInfo.LastRealizedItemIndex; itemIndex++, visualIndex++)
{
bool newlyRealized;
var child = (UIElement)_itemsGenerator.GenerateNext(out newlyRealized);
if (child == null)
continue;
SetVirtualItemIndex(child, itemIndex);
if (newlyRealized)
{
InsertInternalChild(visualIndex, child);
}
else
{
// check if item needs to be moved into a new position in the Children collection
if (visualIndex < Children.Count)
{
if (Children[visualIndex] != child)
{
var childCurrentIndex = Children.IndexOf(child);
if (childCurrentIndex >= 0)
{
RemoveInternalChildRange(childCurrentIndex, 1);
}
InsertInternalChild(visualIndex, child);
}
}
else
{
// we know that the child can't already be in the children collection
// because we've been inserting children in correct visualIndex order,
// and this child has a visualIndex greater than the Children.Count
AddInternalChild(child);
}
}
// only prepare the item once it has been added to the visual tree
_itemsGenerator.PrepareItemContainer(child);
child.Measure(new Size(ItemWidth, ItemHeight));
_childLayouts.Add(child, new Rect(currentX, currentY, ItemWidth, ItemHeight));
if (currentX + ItemWidth * 2 >= availableSize.Width)
{
// wrap to a new line
currentY += ItemHeight;
currentX = 0;
}
else
{
currentX += ItemWidth;
}
}
}
RemoveRedundantChildren();
UpdateScrollInfo(availableSize, extentInfo);
var desiredSize = new Size(double.IsInfinity(availableSize.Width) ? 100 : availableSize.Width,
double.IsInfinity(availableSize.Height) ? 100 : availableSize.Height);
_isInMeasure = false;
return desiredSize;
}
private void EnsureScrollOffsetIsWithinConstrains(ExtentInfo extentInfo)
{
_offset.Y = Clamp(_offset.Y, 0, extentInfo.MaxVerticalOffset);
}
private void RecycleItems(ItemLayoutInfo layoutInfo)
{
foreach (UIElement child in Children)
{
var virtualItemIndex = GetVirtualItemIndex(child);
if (virtualItemIndex < layoutInfo.FirstRealizedItemIndex || virtualItemIndex > layoutInfo.LastRealizedItemIndex)
{
var generatorPosition = _itemsGenerator.GeneratorPositionFromIndex(virtualItemIndex);
if (generatorPosition.Index >= 0)
{
_itemsGenerator.Recycle(generatorPosition, 1);
}
}
SetVirtualItemIndex(child, -1);
}
}
protected override Size ArrangeOverride(Size finalSize)
{
foreach (UIElement child in Children)
{
child.Arrange(_childLayouts[child]);
}
return finalSize;
}
private void UpdateScrollInfo(Size availableSize, ExtentInfo extentInfo)
{
_viewportSize = availableSize;
_extentSize = new Size(availableSize.Width, extentInfo.ExtentHeight);
InvalidateScrollInfo();
}
private void RemoveRedundantChildren()
{
// iterate backwards through the child collection because we're going to be
// removing items from it
for (var i = Children.Count - 1; i >= 0; i--)
{
var child = Children[i];
// if the virtual item index is -1, this indicates
// it is a recycled item that hasn't been reused this time round
if (GetVirtualItemIndex(child) == -1)
{
RemoveInternalChildRange(i, 1);
}
}
}
private ItemLayoutInfo GetLayoutInfo(Size availableSize, double itemHeight, ExtentInfo extentInfo)
{
if (_itemsControl == null)
{
return new ItemLayoutInfo();
}
// we need to ensure that there is one realized item prior to the first visible item, and one after the last visible item,
// so that keyboard navigation works properly. For example, when focus is on the first visible item, and the user
// navigates up, the ListBox selects the previous item, and the scrolls that into view - and this triggers the loading of the rest of the items
// in that row
var firstVisibleLine = (int)Math.Floor(VerticalOffset / itemHeight);
var firstRealizedIndex = Math.Max(extentInfo.ItemsPerLine * firstVisibleLine - 1, 0);
var firstRealizedItemLeft = firstRealizedIndex % extentInfo.ItemsPerLine * ItemWidth - HorizontalOffset;
var firstRealizedItemTop = (firstRealizedIndex / extentInfo.ItemsPerLine) * itemHeight - VerticalOffset;
var firstCompleteLineTop = (firstVisibleLine == 0 ? firstRealizedItemTop : firstRealizedItemTop + ItemHeight);
var completeRealizedLines = (int)Math.Ceiling((availableSize.Height - firstCompleteLineTop) / itemHeight);
var lastRealizedIndex = Math.Min(firstRealizedIndex + completeRealizedLines * extentInfo.ItemsPerLine + 2, _itemsControl.Items.Count - 1);
return new ItemLayoutInfo
{
FirstRealizedItemIndex = firstRealizedIndex,
FirstRealizedItemLeft = firstRealizedItemLeft,
FirstRealizedLineTop = firstRealizedItemTop,
LastRealizedItemIndex = lastRealizedIndex,
};
}
private ExtentInfo GetExtentInfo(Size viewPortSize, double itemHeight)
{
if (_itemsControl == null)
{
return new ExtentInfo();
}
var itemsPerLine = Math.Max((int)Math.Floor(viewPortSize.Width / ItemWidth), 1);
var totalLines = (int)Math.Ceiling((double)_itemsControl.Items.Count / itemsPerLine);
var extentHeight = Math.Max(totalLines * ItemHeight, viewPortSize.Height);
return new ExtentInfo()
{
ItemsPerLine = itemsPerLine,
TotalLines = totalLines,
ExtentHeight = extentHeight,
MaxVerticalOffset = extentHeight - viewPortSize.Height,
};
}
public void LineUp()
{
SetVerticalOffset(VerticalOffset - ScrollLineAmount);
}
public void LineDown()
{
SetVerticalOffset(VerticalOffset + ScrollLineAmount);
}
public void LineLeft()
{
SetHorizontalOffset(HorizontalOffset + ScrollLineAmount);
}
public void LineRight()
{
SetHorizontalOffset(HorizontalOffset - ScrollLineAmount);
}
public void PageUp()
{
SetVerticalOffset(VerticalOffset - ViewportHeight);
}
public void PageDown()
{
SetVerticalOffset(VerticalOffset + ViewportHeight);
}
public void PageLeft()
{
SetHorizontalOffset(HorizontalOffset + ItemWidth);
}
public void PageRight()
{
SetHorizontalOffset(HorizontalOffset - ItemWidth);
}
public void MouseWheelUp()
{
SetVerticalOffset(VerticalOffset - ScrollLineAmount * SystemParameters.WheelScrollLines);
}
public void MouseWheelDown()
{
SetVerticalOffset(VerticalOffset + ScrollLineAmount * SystemParameters.WheelScrollLines);
}
public void MouseWheelLeft()
{
SetHorizontalOffset(HorizontalOffset - ScrollLineAmount * SystemParameters.WheelScrollLines);
}
public void MouseWheelRight()
{
SetHorizontalOffset(HorizontalOffset + ScrollLineAmount * SystemParameters.WheelScrollLines);
}
public void SetHorizontalOffset(double offset)
{
if (_isInMeasure)
{
return;
}
offset = Clamp(offset, 0, ExtentWidth - ViewportWidth);
_offset = new Point(offset, _offset.Y);
InvalidateScrollInfo();
InvalidateMeasure();
}
public void SetVerticalOffset(double offset)
{
if (_isInMeasure)
{
return;
}
offset = Clamp(offset, 0, ExtentHeight - ViewportHeight);
_offset = new Point(_offset.X, offset);
InvalidateScrollInfo();
InvalidateMeasure();
}
public Rect MakeVisible(Visual visual, Rect rectangle)
{
return new Rect();
}
public ItemLayoutInfo GetVisibleItemsRange()
{
return GetLayoutInfo(_viewportSize, ItemHeight, GetExtentInfo(_viewportSize, ItemHeight));
}
public bool CanVerticallyScroll
{
get;
set;
}
public bool CanHorizontallyScroll
{
get;
set;
}
public double ExtentWidth
{
get { return _extentSize.Width; }
}
public double ExtentHeight
{
get { return _extentSize.Height; }
}
public double ViewportWidth
{
get { return _viewportSize.Width; }
}
public double ViewportHeight
{
get { return _viewportSize.Height; }
}
public double HorizontalOffset
{
get { return _offset.X; }
}
public double VerticalOffset
{
get { return _offset.Y; }
}
public ScrollViewer ScrollOwner
{
get;
set;
}
private void InvalidateScrollInfo()
{
if (ScrollOwner != null)
{
ScrollOwner.InvalidateScrollInfo();
}
}
private static void HandleItemDimensionChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var wrapPanel = (d as VirtualizingWrapPanel);
wrapPanel.InvalidateMeasure();
}
private double Clamp(double value, double min, double max)
{
return Math.Min(Math.Max(value, min), max);
}
internal class ExtentInfo
{
public int ItemsPerLine;
public int TotalLines;
public double ExtentHeight;
public double MaxVerticalOffset;
}
}
public class ItemLayoutInfo
{
public int FirstRealizedItemIndex;
public double FirstRealizedLineTop;
public double FirstRealizedItemLeft;
public int LastRealizedItemIndex;
}
}
================================================
FILE: Meridian/Controls/VolumeControl.xaml
================================================
<UserControl x:Class="Meridian.Controls.VolumeControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="20" d:DesignWidth="300"
Background="Transparent"
x:Name="rootElement" MouseWheel="VolumeControl_OnMouseWheel">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition />
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Button Grid.Column="0" x:Name="MinVolumeButton" Template="{StaticResource MuteButton}" Width="14" Margin="0,-4,10,0" Click="MuteButton_OnClick" HorizontalAlignment="Center" Opacity="0.5"/>
<Slider IsMoveToPointEnabled="True" Grid.Column="1" VerticalAlignment="Center" Background="{DynamicResource SidebarSliderBackgroundBrush}"
Maximum="100"
Style="{StaticResource VolumeSliderStyle}" Value="{Binding Volume, Mode=TwoWay, ElementName=rootElement}"/>
<Button Grid.Column="2" x:Name="MaxVolumeButton" Template="{StaticResource VolumeButton}" Width="14" Margin="10,-3,0,0" Click="VolumeButton_OnClick" HorizontalAlignment="Center" Opacity="0.5"/>
</Grid>
</UserControl>
================================================
FILE: Meridian/Controls/VolumeControl.xaml.cs
================================================
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
namespace Meridian.Controls
{
/// <summary>
/// Interaction logic for VolumeControl.xaml
/// </summary>
public partial class VolumeControl : UserControl
{
public static readonly DependencyProperty VolumeProperty =
DependencyProperty.Register("Volume", typeof(double), typeof(VolumeControl), new PropertyMetadata(default(double)));
public double Volume
{
get { return (double)GetValue(VolumeProperty); }
set { SetValue(VolumeProperty, value); }
}
public static readonly DependencyProperty IsMuteProperty =
DependencyProperty.Register("IsMute", typeof(bool), typeof(VolumeControl), new PropertyMetadata(default(bool)));
public bool IsMute
{
get { return (bool)GetValue(IsMuteProperty); }
set { SetValue(IsMuteProperty, value); }
}
public VolumeControl()
{
InitializeComponent();
}
private void VolumeButton_OnClick(object sender, RoutedEventArgs e)
{
Volume = 100;
}
private void VolumeControl_OnMouseWheel(object sender, MouseWheelEventArgs e)
{
//if (!VolumePopup.IsOpen)
// VolumePopup.IsOpen = true;
if (e.Delta < 0)
{
Volume -= 5;
if (Volume < 0)
Volume = 0;
}
else
{
Volume += 5;
if (Volume > 100)
Volume = 100;
}
}
private void MuteButton_OnClick(object sender, RoutedEventArgs e)
{
Volume = 0;
}
}
}
================================================
FILE: Meridian/Converters/AlbumContextMenuVisibilityConverter.cs
================================================
using System;
using System.Globalization;
using System.Windows;
using System.Windows.Data;
using VkLib.Core.Audio;
namespace Meridian.Converters
{
public class AlbumContextMenuVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var album = value as VkAudioAlbum;
if (album == null)
return Visibility.Visible;
if (album.OwnerId != 0)
return Visibility.Visible;
return Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}
================================================
FILE: Meridian/Converters/AlbumListItemContainerSelector.cs
================================================
using System.Windows;
using System.Windows.Controls;
using VkLib.Core.Audio;
namespace Meridian.Converters
{
public class AlbumListItemContainerStyleSelector : StyleSelector
{
/// <summary>
/// Стиль для стандартных альбомов ("все аудиозаписи, "со стены" и т.п.)
/// </summary>
public Style DefaultItemStyle { get; set; }
/// <summary>
/// Стиль для пользовательских альбомов
/// </summary>
public Style ItemStyle { get; set; }
/// <summary>
/// Стиль для разделителя
/// </summary>
public Style SeparatorStyle { get; set; }
/// <summary>
/// Стиль для кнопки создания альбома
/// </summary>
public Style AddAlbumStyle { get; set; }
public override Style SelectStyle(object item, DependencyObject container)
{
var album = item as VkPlaylist;
if (album != null)
{
switch ((int)album.Id)
{
case -1:
case -100:
case -101:
return DefaultItemStyle;
case int.MinValue:
return SeparatorStyle;
default:
return ItemStyle;
}
}
return base.SelectStyle(item, container);
}
}
}
================================================
FILE: Meridian/Converters/AudioTemplateSelector.cs
================================================
using System.Windows;
using System.Windows.Controls;
using Meridian.Model;
namespace Meridian.Converters
{
public class AudioTemplateSelector : DataTemplateSelector
{
public DataTemplate AudioTemplate { get; set; }
public DataTemplate LocalAudioTemplate { get; set; }
public DataTemplate PostTemplate { get; set; }
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
if (item is AudioPost)
return PostTemplate;
if (item is LocalAudio)
return LocalAudioTemplate;
if (item is Audio)
return AudioTemplate;
return AudioTemplate;
}
}
}
================================================
FILE: Meridian/Converters/AudioTimeSpanConverter.cs
================================================
using System;
using System.Globalization;
using System.Windows.Data;
namespace Meridian.Converters
{
public class AudioTimeSpanConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var timeSpan = (TimeSpan) value;
if (timeSpan.Hours > 0)
return timeSpan.ToString("h\\:mm\\:ss");
return timeSpan.ToString("m\\:ss");
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}
================================================
FILE: Meridian/Converters/BooleanToValueConverter.cs
================================================
using System;
using System.Globalization;
using System.Windows.Data;
namespace Meridian.Converters
{
public class BooleanToValueConverter : IValueConverter
{
public object TrueValue { get; set; }
public object FalseValue { get; set; }
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var v = (bool) value;
if (v)
return TrueValue;
return FalseValue;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}
================================================
FILE: Meridian/Converters/MainMenuGroupStyleSelector.cs
================================================
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
namespace Meridian.Converters
{
public class MainMenuGroupStyleSelector : StyleSelector
{
public Style EmptyHeaderGroupStyle { get; set; }
public Style NormalGroupStyle { get; set; }
public override Style SelectStyle(object item, DependencyObject container)
{
var group = item as CollectionViewGroup;
if (group == null)
return null;
if (string.IsNullOrEmpty((string) group.Name))
return EmptyHeaderGroupStyle;
return NormalGroupStyle;
}
}
}
================================================
FILE: Meridian/Converters/SearchResultTemplateSelector.cs
================================================
using System;
using System.Globalization;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using LastFmLib.Core.Album;
using LastFmLib.Core.Artist;
using Meridian.Model;
using VkLib.Core.Groups;
namespace Meridian.Converters
{
public class SearchResultTemplateSelector : DataTemplateSelector
{
public DataTemplate TrackTemplate { get; set; }
public DataTemplate LocalTrackTemplate { get; set; }
public DataTemplate AlbumTemplate { get; set; }
public DataTemplate LocalAlbumTemplate { get; set; }
public DataTemplate ArtistTemplate { get; set; }
public DataTemplate LocalArtistTemplate { get; set; }
public DataTemplate SocietyTemplate { get; set; }
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
if (item is LocalAudio)
return LocalTrackTemplate;
else if (item is Audio)
return TrackTemplate;
else if (item is LastFmAlbum)
return AlbumTemplate;
else if (item is LastFmArtist)
return ArtistTemplate;
else if (item is VkGroup)
return SocietyTemplate;
else if (item is AudioAlbum)
return LocalAlbumTemplate;
else if (item is AudioArtist)
return LocalArtistTemplate;
return null;
}
}
public class SearchResultStyleSelector : StyleSelector
{
public Style TrackStyle { get; set; }
public Style AlbumStyle { get; set; }
public Style ArtistStyle { get; set; }
public Style LocalArtistStyle { get; set; }
public Style SocietyStyle { get; set; }
public override Style SelectStyle(object item, DependencyObject container)
{
if (item is Audio)
return TrackStyle;
else if (item is LastFmAlbum || item is AudioAlbum)
return AlbumStyle;
else if (item is LastFmArtist)
return ArtistStyle;
else if (item is AudioArtist)
return LocalArtistStyle;
else if (item is VkGroup)
return SocietyStyle;
return null;
}
}
public class SearchListBoxStyleSelector : IValueConverter
{
public Style TracksStyle { get; set; }
public Style AlbumsStyle { get; set; }
public Style ArtistsStyle { get; set; }
public Style LocalArtistsStyle { get; set; }
public Style SocietiesStyle { get; set; }
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var index = (int)value;
switch (index)
{
case 0:
return TracksStyle;
case 1:
return AlbumsStyle;
case 2:
return ArtistsStyle;
case 3:
return TracksStyle;
case 4:
return AlbumsStyle;
case 5:
return LocalArtistsStyle;
}
return null;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}
================================================
FILE: Meridian/Domain/Settings.cs
================================================
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Windows;
using System.Windows.Input;
using Meridian.Model;
using Meridian.Resources.Localization;
using Meridian.Services;
using Meridian.Services.Media.Core;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json.Serialization;
using VkLib.Core.Auth;
using VkLib.Core.Groups;
using Meridian.Controls;
using Meridian.View.Flyouts;
using System.Diagnostics;
namespace Meridian.Domain
{
public class Settings
{
private const string SETTINGS_FILE = "Meridian.settings";
private static Settings _instance = new Settings();
public static Settings Instance
{
get { return _instance; }
}
public List<Account> Accounts { get; set; }
public VkAccessToken AccessToken { get; set; }
public bool Shuffle { get; set; }
public bool Repeat { get; set; }
public float Volume { get; set; }
public bool IsMuted { get; set; }
public bool EnableStatusBroadcasting { get; set; }
public bool EnableScrobbling { get; set; }
public string LastFmUsername { get; set; }
public string LastFmSession { get; set; }
public bool CheckForUpdates { get; set; }
public bool InstallDevUpdates { get; set; }
public bool NeedClean { get; set; }
public string AccentColor { get; set; }
public string Theme { get; set; }
public string Language { get; set; }
public bool SendStats { get; set; }
public bool ShowTrackNotifications { get; set; }
public bool EnableTrayIcon { get; set; }
public bool ShowBackgroundArt { get; set; }
public bool ShowBackgroundArtCompactMode { get; set; }
public bool BlurBackground { get; set; }
public bool DownloadArtistArt { get; set; }
public bool DownloadAlbumArt { get; set; }
public bool TellRequestShown { get; set; }
public DateTime FirstStart { get; set; }
public MediaEngine MediaEngine { get; set; }
public List<VkGroup> FeedSocieties { get; set; }
public bool EnableRemotePlay { get; set; }
public int RemotePlayPort { get; set; }
public string RemotePlayAddress { get; set; }
public bool UseHttps { get; set; }
#region Window settings
public double Width { get; set; }
public double Height { get; set; }
public double Top { get; set; }
public double Left { get; set; }
public bool IsWindowMaximized { get; set; }
public double CompactTop { get; set; }
public double CompactLeft { get; set; }
public UIMode LastCompactMode { get; set; }
#endregion
#region Hotkeys
public Key NextHotKey { get; set; }
public ModifierKeys NextHotKeyModifier { get; set; }
public Key PrevHotKey { get; set; }
public ModifierKeys PrevHotKeyModifier { get; set; }
public Key PlayPauseHotKey { get; set; }
public ModifierKeys PlayPauseHotKeyModifier { get; set; }
public Key ShowHideHotKey { get; set; }
public ModifierKeys ShowHideHotKeyModifier { get; set; }
public Key LikeDislikeHotKey { get; set; }
public ModifierKeys LikeDislikeHotKeyModifier { get; set; }
public Key ShuffleHotKey { get; set; }
public ModifierKeys ShuffleHotKeyModifier { get; set; }
public Key RepeatHotKey { get; set; }
public ModifierKeys RepeatHotKeyModifier { get; set; }
public Key IncreaseVolumeHotKey { get; set; }
public ModifierKeys IncreaseVolumeHotKeyModifier { get; set; }
public Key DecreaseVolumeHotKey { get; set; }
public ModifierKeys DecreaseVolumeHotKeyModifier { get; set
gitextract_zxoun8e2/
├── .gitattributes
├── .gitignore
├── .gitmodules
├── .nuget/
│ ├── NuGet.Config
│ └── NuGet.targets
├── LICENSE.txt
├── LastFmLibPortable/
│ └── Trunk/
│ ├── Core/
│ │ ├── Album/
│ │ │ ├── LastFmAlbum.cs
│ │ │ └── LastFmAlbumRequest.cs
│ │ ├── Artist/
│ │ │ ├── LastFmArtist.cs
│ │ │ └── LastFmArtistRequest.cs
│ │ ├── Auth/
│ │ │ ├── LastFmAuthRequest.cs
│ │ │ └── LastFmAuthResult.cs
│ │ ├── Chart/
│ │ │ └── LastFmChartRequest.cs
│ │ ├── CoreRequest.cs
│ │ ├── Image/
│ │ │ └── LastFmImage.cs
│ │ ├── LastFmErrorProcessor.cs
│ │ ├── Tag/
│ │ │ └── LastFmTagRequest.cs
│ │ ├── Track/
│ │ │ ├── LastFmTrack.cs
│ │ │ └── LastFmTrackRequest.cs
│ │ └── User/
│ │ └── LastFmUserRequest.cs
│ ├── Error/
│ │ └── LastFmLoginException.cs
│ ├── Extensions/
│ │ ├── CommonExtensions.cs
│ │ └── StreamExtensions.cs
│ ├── LastFM.cs
│ ├── LastFmConst.cs
│ ├── LastFmLibPortable.csproj
│ ├── LastFmUtils.cs
│ ├── app.config
│ └── project.json
├── Meridian/
│ ├── App.config
│ ├── App.xaml
│ ├── App.xaml.cs
│ ├── Behaviours/
│ │ ├── AutoScrollToCurrentItemBehaviour.cs
│ │ ├── FocusBehaviour.cs
│ │ ├── TransitionBehaviour.cs
│ │ └── VisibilityTransitionBehaviour.cs
│ ├── Controls/
│ │ ├── BindablePasswordBox.cs
│ │ ├── BusyIndicator.cs
│ │ ├── ContentTransitionControl.xaml
│ │ ├── ContentTransitionControl.xaml.cs
│ │ ├── ExtendedListBox.cs
│ │ ├── FlyoutContent.cs
│ │ ├── FlyoutControl.xaml
│ │ ├── FlyoutControl.xaml.cs
│ │ ├── ImageTransitionControl.xaml
│ │ ├── ImageTransitionControl.xaml.cs
│ │ ├── LocalSearchControl.xaml
│ │ ├── LocalSearchControl.xaml.cs
│ │ ├── NotificationControl.xaml
│ │ ├── NotificationControl.xaml.cs
│ │ ├── PageBase.cs
│ │ ├── PlayerControl.xaml
│ │ ├── PlayerControl.xaml.cs
│ │ ├── ShareBarControl.xaml
│ │ ├── ShareBarControl.xaml.cs
│ │ ├── TextBoxWithHint.cs
│ │ ├── VirtualizingWrapPanel.cs
│ │ ├── VolumeControl.xaml
│ │ └── VolumeControl.xaml.cs
│ ├── Converters/
│ │ ├── AlbumContextMenuVisibilityConverter.cs
│ │ ├── AlbumListItemContainerSelector.cs
│ │ ├── AudioTemplateSelector.cs
│ │ ├── AudioTimeSpanConverter.cs
│ │ ├── BooleanToValueConverter.cs
│ │ ├── MainMenuGroupStyleSelector.cs
│ │ └── SearchResultTemplateSelector.cs
│ ├── Domain/
│ │ └── Settings.cs
│ ├── Extensions/
│ │ ├── AudioExtensions.cs
│ │ ├── CommonExtensions.cs
│ │ ├── ListExtensions.cs
│ │ └── SocketExtensions.cs
│ ├── Helpers/
│ │ ├── AlbumCoversHelper.cs
│ │ ├── ArtistImageHelper.cs
│ │ ├── DateTimeConverter.cs
│ │ ├── FilesHelper.cs
│ │ ├── HotKeyManager.cs
│ │ ├── ImageAsyncHelper.cs
│ │ ├── LongRunningOperation.cs
│ │ ├── Md5Helper.cs
│ │ ├── NativeMethods.cs
│ │ ├── NetworkHelper.cs
│ │ └── StringHelper.cs
│ ├── Layout/
│ │ ├── Controls/
│ │ │ ├── HeaderControl.xaml
│ │ │ ├── HeaderControl.xaml.cs
│ │ │ └── PageTabControl.cs
│ │ ├── LayoutBase.cs
│ │ ├── PageBase.cs
│ │ ├── Templates/
│ │ │ ├── PageBaseTemplate.xaml
│ │ │ └── TwoColumnPageLayoutTemplate.xaml
│ │ └── TwoColumnPageLayout.cs
│ ├── MainWindow.xaml
│ ├── MainWindow.xaml.cs
│ ├── Meridian.csproj
│ ├── Model/
│ │ ├── Account.cs
│ │ ├── Audio.cs
│ │ ├── AudioAlbum.cs
│ │ ├── AudioArtist.cs
│ │ ├── AudioPost.cs
│ │ ├── ColorScheme.cs
│ │ ├── ItemsResponse.cs
│ │ ├── MainMenuItem.cs
│ │ ├── NewsItemsResponse.cs
│ │ ├── Recommendation.cs
│ │ ├── SearchMenuItem.cs
│ │ ├── Settings/
│ │ │ ├── SettingsEngine.cs
│ │ │ ├── SettingsHotKey.cs
│ │ │ └── SettingsLanguage.cs
│ │ └── UIMode.cs
│ ├── Properties/
│ │ ├── Resources.Designer.cs
│ │ ├── Resources.resx
│ │ ├── Settings.Designer.cs
│ │ └── Settings.settings
│ ├── RemotePlay/
│ │ ├── RemotePlayService.cs
│ │ ├── SimpleHttpRequest.cs
│ │ ├── SimpleHttpResponse.cs
│ │ ├── SimpleWebServer.cs
│ │ └── web/
│ │ ├── index.html
│ │ ├── js/
│ │ │ ├── index.js
│ │ │ └── utils.js
│ │ ├── lib/
│ │ │ └── svg4everybody.js
│ │ └── styles/
│ │ ├── index.css
│ │ └── player.css
│ ├── Resources/
│ │ ├── Localization/
│ │ │ ├── ErrorResources.Designer.cs
│ │ │ ├── ErrorResources.resx
│ │ │ ├── ErrorResources.ru.resx
│ │ │ ├── MainResources.Designer.cs
│ │ │ ├── MainResources.resx
│ │ │ └── MainResources.ru.resx
│ │ ├── Styles/
│ │ │ ├── Animations.xaml
│ │ │ ├── AudioControlStyles.xaml
│ │ │ ├── ButtonStyles.xaml
│ │ │ ├── CheckBoxStyles.xaml
│ │ │ ├── ComboBoxStyles.xaml
│ │ │ ├── ContextMenuStyles.xaml
│ │ │ ├── DataTemplates.xaml
│ │ │ ├── ExpanderStyles.xaml
│ │ │ ├── Icons.xaml
│ │ │ ├── ListBoxStyles.xaml
│ │ │ ├── ProgressBarStyles.xaml
│ │ │ ├── ScrollbarStyles.xaml
│ │ │ ├── SliderStyles.xaml
│ │ │ ├── Styles.xaml
│ │ │ ├── TabControlStyles.xaml
│ │ │ ├── TextBoxStyles.xaml
│ │ │ └── WindowButtons.xaml
│ │ └── Themes/
│ │ ├── Accent.xaml
│ │ ├── Accents/
│ │ │ ├── Blue.xaml
│ │ │ ├── Emerald.xaml
│ │ │ ├── Magenta.xaml
│ │ │ ├── Mango.xaml
│ │ │ ├── Pink.xaml
│ │ │ ├── Purple.xaml
│ │ │ ├── Red.xaml
│ │ │ ├── Sea.xaml
│ │ │ └── Sky.xaml
│ │ ├── Dark.xaml
│ │ ├── Graphite.xaml
│ │ └── Light.xaml
│ ├── SQLite.cs
│ ├── SQLiteAsync.cs
│ ├── Services/
│ │ ├── AccountManager.cs
│ │ ├── CacheService.cs
│ │ ├── DataBaseService.cs
│ │ ├── DataService.cs
│ │ ├── HostService.cs
│ │ ├── LoggingService.cs
│ │ ├── Media/
│ │ │ ├── AudioService.cs
│ │ │ └── Core/
│ │ │ ├── MediaPlayerBase.cs
│ │ │ ├── NaudioMediaPlayer.cs
│ │ │ ├── UwpMediaPlayer.cs
│ │ │ └── WmpMediaPlayer.cs
│ │ ├── Music/
│ │ │ ├── LocalMusicService.cs
│ │ │ └── Repositories/
│ │ │ ├── LocalAlbumsRepository.cs
│ │ │ ├── LocalArtistsRepository.cs
│ │ │ └── LocalTracksRepository.cs
│ │ ├── NotificationService.cs
│ │ ├── ServiceLocator.cs
│ │ └── UpdateService.cs
│ ├── View/
│ │ ├── Compact/
│ │ │ ├── CompactLandscapeView.xaml
│ │ │ ├── CompactLandscapeView.xaml.cs
│ │ │ ├── CompactView.xaml
│ │ │ └── CompactView.xaml.cs
│ │ ├── Flyouts/
│ │ │ ├── AddSocietyFlyout.xaml
│ │ │ ├── AddSocietyFlyout.xaml.cs
│ │ │ ├── AddToAlbumView.xaml
│ │ │ ├── AddToAlbumView.xaml.cs
│ │ │ ├── CaptchaRequestView.xaml
│ │ │ ├── CaptchaRequestView.xaml.cs
│ │ │ ├── CommonErrorView.xaml
│ │ │ ├── CommonErrorView.xaml.cs
│ │ │ ├── CommonMessageView.xaml
│ │ │ ├── CommonMessageView.xaml.cs
│ │ │ ├── EditAlbumView.xaml
│ │ │ ├── EditAlbumView.xaml.cs
│ │ │ ├── EditAudioView.xaml
│ │ │ ├── EditAudioView.xaml.cs
│ │ │ ├── Local/
│ │ │ │ ├── MusicScanView.xaml
│ │ │ │ └── MusicScanView.xaml.cs
│ │ │ ├── LoginLastFmMessageView.xaml
│ │ │ ├── LoginLastFmMessageView.xaml.cs
│ │ │ ├── LoginLastFmView.xaml
│ │ │ ├── LoginLastFmView.xaml.cs
│ │ │ ├── LyricsView.xaml
│ │ │ ├── LyricsView.xaml.cs
│ │ │ ├── ShareView.xaml
│ │ │ ├── ShareView.xaml.cs
│ │ │ ├── TellFriendsRequestView.xaml
│ │ │ ├── TellFriendsRequestView.xaml.cs
│ │ │ ├── TellResultView.xaml
│ │ │ ├── TellResultView.xaml.cs
│ │ │ ├── WebValidationView.xaml
│ │ │ └── WebValidationView.xaml.cs
│ │ ├── Local/
│ │ │ ├── LocalAlbumView.xaml
│ │ │ ├── LocalAlbumView.xaml.cs
│ │ │ ├── LocalCollectionView.xaml
│ │ │ └── LocalCollectionView.xaml.cs
│ │ ├── Main/
│ │ │ ├── FeedView.xaml
│ │ │ ├── FeedView.xaml.cs
│ │ │ ├── LoginView.xaml
│ │ │ ├── LoginView.xaml.cs
│ │ │ ├── MusicView.xaml
│ │ │ ├── MusicView.xaml.cs
│ │ │ ├── NowPlayingView.xaml
│ │ │ ├── NowPlayingView.xaml.cs
│ │ │ ├── PopularAudioView.xaml
│ │ │ ├── PopularAudioView.xaml.cs
│ │ │ ├── RecommendationsView.xaml
│ │ │ └── RecommendationsView.xaml.cs
│ │ ├── People/
│ │ │ ├── FriendsAudioView.xaml
│ │ │ ├── FriendsAudioView.xaml.cs
│ │ │ ├── FriendsView.xaml
│ │ │ ├── FriendsView.xaml.cs
│ │ │ ├── SocietiesView.xaml
│ │ │ ├── SocietiesView.xaml.cs
│ │ │ ├── SocietyAudioView.xaml
│ │ │ ├── SocietyAudioView.xaml.cs
│ │ │ ├── SubscriptionsView.xaml
│ │ │ └── SubscriptionsView.xaml.cs
│ │ ├── Search/
│ │ │ ├── AlbumView.xaml
│ │ │ ├── AlbumView.xaml.cs
│ │ │ ├── ArtistAlbumsView.xaml
│ │ │ ├── ArtistAlbumsView.xaml.cs
│ │ │ ├── ArtistAudioView.xaml
│ │ │ ├── ArtistAudioView.xaml.cs
│ │ │ ├── ArtistView.xaml
│ │ │ ├── ArtistView.xaml.cs
│ │ │ ├── SearchResultsView.xaml
│ │ │ └── SearchResultsView.xaml.cs
│ │ ├── Settings/
│ │ │ ├── SettingsAboutView.xaml
│ │ │ ├── SettingsAboutView.xaml.cs
│ │ │ ├── SettingsAccountsView.xaml
│ │ │ ├── SettingsAccountsView.xaml.cs
│ │ │ ├── SettingsHotkeysView.xaml
│ │ │ ├── SettingsHotkeysView.xaml.cs
│ │ │ ├── SettingsRemotePlayView.xaml
│ │ │ ├── SettingsRemotePlayView.xaml.cs
│ │ │ ├── SettingsUIView.xaml
│ │ │ ├── SettingsUIView.xaml.cs
│ │ │ ├── SettingsUpdatesView.xaml
│ │ │ ├── SettingsUpdatesView.xaml.cs
│ │ │ ├── SettingsView.xaml
│ │ │ └── SettingsView.xaml.cs
│ │ ├── TrackNotifcationView.xaml
│ │ └── TrackNotifcationView.xaml.cs
│ └── ViewModel/
│ ├── Flyouts/
│ │ ├── EditAudioViewModel.cs
│ │ ├── LoginLastFmViewModel.cs
│ │ ├── LyricsViewModel.cs
│ │ └── ShareViewModel.cs
│ ├── Local/
│ │ ├── LocalAlbumViewModel.cs
│ │ └── LocalMusicViewModel.cs
│ ├── Main/
│ │ ├── FeedViewModel.cs
│ │ ├── LoginViewModel.cs
│ │ ├── MusicViewModel.cs
│ │ ├── NowPlayingViewModel.cs
│ │ ├── PopularAudioViewModel.cs
│ │ └── RecommendationsViewModel.cs
│ ├── MainViewModel.cs
│ ├── Messages/
│ │ ├── CurrentAudioChangedMessage.cs
│ │ ├── LocalRepositoryUpdatedMessage.cs
│ │ ├── LoginMessage.cs
│ │ ├── PlayStateChangedMessage.cs
│ │ ├── PlayerPositionChangedMessage.cs
│ │ └── UserTracksChangedMessage.cs
│ ├── People/
│ │ ├── FriendAudioViewModel.cs
│ │ ├── FriendsViewModel.cs
│ │ ├── SocietiesViewModel.cs
│ │ ├── SocietyAudioViewModel.cs
│ │ └── SubscriptionsViewModel.cs
│ ├── Search/
│ │ ├── AlbumViewModel.cs
│ │ ├── ArtistViewModel.cs
│ │ └── SearchViewModel.cs
│ ├── SettingsViewModel.cs
│ ├── ViewModelBase.cs
│ └── ViewModelLocator.cs
├── Meridian.Core/
│ └── Services/
│ └── AccountsService.cs
├── MeridianDesktop.sln
├── Neptune/
│ └── Trunk/
│ ├── Neptune.Base/
│ │ ├── Collections/
│ │ │ └── IAsyncCollection.cs
│ │ ├── Extensions/
│ │ │ ├── CommonExtensions.cs
│ │ │ └── StreamExtensions.cs
│ │ ├── Helpers/
│ │ │ └── TaskQueue.cs
│ │ ├── Messages/
│ │ │ ├── GoHomeMessage.cs
│ │ │ └── NavigateToPageMessage.cs
│ │ ├── Neptune.Base.csproj
│ │ ├── Properties/
│ │ │ └── AssemblyInfo.cs
│ │ ├── Storage/
│ │ │ └── IFileStorage.cs
│ │ ├── View/
│ │ │ └── IVisualViewModel.cs
│ │ ├── app.config
│ │ └── project.json
│ ├── Neptune.Desktop/
│ │ ├── Behaviours/
│ │ │ ├── IgnoreMouseWheelBehavior.cs
│ │ │ ├── TriggerTransitionBehaviour.cs
│ │ │ ├── UpdateTextBindingOnPropertyChanged.cs
│ │ │ └── VisiblityTransitionBehaviour.cs
│ │ ├── Converters/
│ │ │ ├── BooleanToObjectConverter.cs
│ │ │ ├── BooleanToVisibilityConverter.cs
│ │ │ ├── InvertBooleanConverter.cs
│ │ │ ├── NullToBooleanConverter.cs
│ │ │ ├── NullToVisibilityConverter.cs
│ │ │ ├── StringToUpperConverter.cs
│ │ │ └── TimeSpanConverter.cs
│ │ ├── Domain/
│ │ │ └── AppSettings.cs
│ │ ├── Extensions/
│ │ │ └── VisualTreeHelperExtensions.cs
│ │ ├── Neptune.Desktop.csproj
│ │ └── Storage/
│ │ └── FileStorage.cs
│ └── Neptune.UI.Desktop/
│ ├── Behaviours/
│ │ ├── IgnoreMouseWheelBehavior.cs
│ │ ├── TriggerTransitionBehaviour.cs
│ │ ├── UpdateTextBindingOnPropertyChanged.cs
│ │ └── VisiblityTransitionBehaviour.cs
│ ├── Converters/
│ │ ├── BooleanToObjectConverter.cs
│ │ ├── BooleanToVisibilityConverter.cs
│ │ ├── InvertBooleanConverter.cs
│ │ ├── NullToBooleanConverter.cs
│ │ ├── NullToVisibilityConverter.cs
│ │ ├── StringToUpperConverter.cs
│ │ └── TimeSpanConverter.cs
│ ├── Extensions/
│ │ └── VisualTreeHelperExtensions.cs
│ ├── Neptune.UI.Desktop.csproj
│ ├── Properties/
│ │ └── AssemblyInfo.cs
│ └── packages.config
├── README.md
└── refs/
└── GongSolutions.Wpf.DragDrop.XML
SYMBOL INDEX (1493 symbols across 222 files)
FILE: LastFmLibPortable/Trunk/Core/Album/LastFmAlbum.cs
class LastFmAlbum (line 9) | public class LastFmAlbum
method FromJson (line 23) | public static LastFmAlbum FromJson(JToken json)
FILE: LastFmLibPortable/Trunk/Core/Album/LastFmAlbumRequest.cs
class LastFmAlbumRequest (line 9) | public class LastFmAlbumRequest
method LastFmAlbumRequest (line 13) | public LastFmAlbumRequest(LastFm lastFm)
method Search (line 18) | public async Task<List<LastFmAlbum>> Search(string album)
method GetInfo (line 42) | public async Task<LastFmAlbum> GetInfo(string mbid, string album, stri...
FILE: LastFmLibPortable/Trunk/Core/Artist/LastFmArtist.cs
class LastFmArtist (line 7) | public class LastFmArtist
method FromJson (line 23) | public static LastFmArtist FromJson(JToken json)
FILE: LastFmLibPortable/Trunk/Core/Artist/LastFmArtistRequest.cs
class LastFmArtistRequest (line 12) | public class LastFmArtistRequest
method LastFmArtistRequest (line 16) | public LastFmArtistRequest(LastFm lastFm)
method GetImages (line 21) | [Obsolete("Last.FM no longer provides method artist.getImages.", true)]
method Search (line 57) | public async Task<List<LastFmArtist>> Search(string artist)
method GetSimilar (line 82) | public async Task<List<LastFmArtist>> GetSimilar(string artist, int co...
method GetTopAlbums (line 103) | public async Task<List<LastFmAlbum>> GetTopAlbums(string mbid, string ...
method GetTopTracks (line 135) | public async Task<List<LastFmTrack>> GetTopTracks(string mbid, string ...
method GetInfo (line 163) | public async Task<LastFmArtist> GetInfo(string mbid, string artist)
FILE: LastFmLibPortable/Trunk/Core/Auth/LastFmAuthRequest.cs
class LastFmAuthRequest (line 7) | public class LastFmAuthRequest
method LastFmAuthRequest (line 11) | public LastFmAuthRequest(LastFm lastFm)
method GetMobileSession (line 17) | public async Task<LastFmAuthResult> GetMobileSession(string username, ...
FILE: LastFmLibPortable/Trunk/Core/Auth/LastFmAuthResult.cs
class LastFmAuthResult (line 6) | public class LastFmAuthResult
method FromJson (line 12) | public static LastFmAuthResult FromJson(JToken json)
FILE: LastFmLibPortable/Trunk/Core/Chart/LastFmChartRequest.cs
class LastFmChartRequest (line 9) | public class LastFmChartRequest
method LastFmChartRequest (line 13) | public LastFmChartRequest(LastFm lastFm)
method GetTopTracks (line 19) | public async Task<IEnumerable<LastFmTrack>> GetTopTracks(int count = 0)
method GetHypedTracks (line 39) | public async Task<IEnumerable<LastFmTrack>> GetHypedTracks(int count = 0)
FILE: LastFmLibPortable/Trunk/Core/CoreRequest.cs
class CoreRequest (line 19) | internal class CoreRequest
method CoreRequest (line 26) | public CoreRequest(Uri uri)
method CoreRequest (line 32) | public CoreRequest(Uri uri, Dictionary<string, string> parameters, str...
method Execute (line 40) | public async Task<JObject> Execute()
method GetFullUri (line 75) | private Uri GetFullUri(Dictionary<string, string> parameters)
FILE: LastFmLibPortable/Trunk/Core/Image/LastFmImage.cs
class LastFmImage (line 7) | public class LastFmImage
method FromJson (line 29) | internal static LastFmImage FromJson(JToken json)
FILE: LastFmLibPortable/Trunk/Core/LastFmErrorProcessor.cs
class LastFmErrorProcessor (line 7) | internal static class LastFmErrorProcessor
method ProcessError (line 9) | public static bool ProcessError(JToken response)
FILE: LastFmLibPortable/Trunk/Core/Tag/LastFmTagRequest.cs
class LastFmTagRequest (line 9) | public class LastFmTagRequest
method LastFmTagRequest (line 13) | public LastFmTagRequest(LastFm lastFm)
method GetTopTracks (line 19) | public async Task<IEnumerable<LastFmTrack>> GetTopTracks(string tag, i...
FILE: LastFmLibPortable/Trunk/Core/Track/LastFmTrack.cs
class LastFmTrack (line 6) | public class LastFmTrack
method FromJson (line 19) | internal static LastFmTrack FromJson(JToken json)
FILE: LastFmLibPortable/Trunk/Core/Track/LastFmTrackRequest.cs
class LastFmTrackRequest (line 9) | public class LastFmTrackRequest
method LastFmTrackRequest (line 13) | public LastFmTrackRequest(LastFm lastFm)
method GetInfo (line 18) | public async Task<LastFmTrack> GetInfo(string title, string artist, bo...
method UpdateNowPlaying (line 48) | public async Task UpdateNowPlaying(string artist, string track, string...
method Scrobble (line 87) | public async Task Scrobble(string artist, string track, string timeSta...
method Search (line 127) | public async Task<List<LastFmTrack>> Search(string track, string artist)
FILE: LastFmLibPortable/Trunk/Core/User/LastFmUserRequest.cs
class LastFmUserRequest (line 9) | public class LastFmUserRequest
method LastFmUserRequest (line 13) | public LastFmUserRequest(LastFm lastFm)
method GetRecommendedArtists (line 18) | public async Task<IEnumerable<LastFmArtist>> GetRecommendedArtists(int...
FILE: LastFmLibPortable/Trunk/Error/LastFmLoginException.cs
class LastFmLoginException (line 5) | public class LastFmLoginException : Exception
FILE: LastFmLibPortable/Trunk/Extensions/CommonExtensions.cs
class CommonExtensions (line 7) | public static class CommonExtensions
method ConstructQueryString (line 15) | public static string ConstructQueryString(this Dictionary<string, stri...
FILE: LastFmLibPortable/Trunk/Extensions/StreamExtensions.cs
class StreamExtensions (line 6) | internal static class StreamExtensions
method CopyStream (line 8) | public static int CopyStream(this Stream source, Stream dest)
FILE: LastFmLibPortable/Trunk/LastFM.cs
class LastFm (line 11) | public class LastFm
method LastFm (line 115) | public LastFm(string apiKey, string apiSecret, string lang = null)
FILE: LastFmLibPortable/Trunk/LastFmConst.cs
class LastFmConst (line 3) | internal static class LastFmConst
FILE: LastFmLibPortable/Trunk/LastFmUtils.cs
class LastFmUtils (line 8) | internal class LastFmUtils
method BuildSig (line 10) | public static string BuildSig(string secretKey, string method, IDictio...
method Md5 (line 25) | public static string Md5(string input)
method GetMd5Hash (line 33) | private static string GetMd5Hash(MD5 md5Hash, string input)
FILE: Meridian.Core/Services/AccountsService.cs
class AccountsService (line 6) | public class AccountsService
FILE: Meridian/App.xaml.cs
class App (line 25) | public partial class App : Application
method App_OnStartup (line 31) | private async void App_OnStartup(object sender, StartupEventArgs e)
method App_OnExit (line 103) | private void App_OnExit(object sender, ExitEventArgs e)
method App_OnDispatcherUnhandledException (line 111) | private void App_OnDispatcherUnhandledException(object sender, Dispatc...
method AddTrayIcon (line 132) | public void AddTrayIcon()
method TrayIconOnMouseClick (line 160) | private void TrayIconOnMouseClick(object sender, MouseEventArgs mouseE...
method RemoveTrayIcon (line 177) | public void RemoveTrayIcon()
FILE: Meridian/Behaviours/AutoScrollToCurrentItemBehaviour.cs
class AutoScrollToCurrentItemBehaviour (line 10) | public class AutoScrollToCurrentItemBehaviour : Behavior<ListBox>
method OnAttached (line 12) | protected override void OnAttached()
method OnDetaching (line 20) | protected override void OnDetaching()
method OnCurrentAudioChanged (line 25) | private void OnCurrentAudioChanged(CurrentAudioChangedMessage message)
FILE: Meridian/Behaviours/FocusBehaviour.cs
class FocusBehavior (line 7) | public class FocusBehavior : Behavior<Control>
method OnAttached (line 51) | protected override void OnAttached()
FILE: Meridian/Behaviours/TransitionBehaviour.cs
class TransitionBehaviour (line 12) | public class TransitionBehaviour : Behavior<FrameworkElement>
method SetTransitionIndex (line 35) | public static void SetTransitionIndex(UIElement element, int value)
method GetTransitionIndex (line 40) | public static int GetTransitionIndex(UIElement element)
method SetIgnoreTransition (line 48) | public static void SetIgnoreTransition(UIElement element, bool value)
method GetIgnoreTransition (line 53) | public static bool GetIgnoreTransition(UIElement element)
method OnAttached (line 58) | protected override void OnAttached()
method OnDetaching (line 70) | protected override void OnDetaching()
method ItemContainerGenerator_StatusChanged (line 83) | void ItemContainerGenerator_StatusChanged(object sender, EventArgs e)
method AssociatedObject_Loaded (line 117) | void AssociatedObject_Loaded(object sender, RoutedEventArgs e)
method GetTargets (line 138) | List<FrameworkElement> GetTargets()
FILE: Meridian/Behaviours/VisibilityTransitionBehaviour.cs
class VisibilityTransitionBehaviour (line 7) | public class VisibilityTransitionBehaviour : Behavior<FrameworkElement>
method PropertyChangedCallback (line 19) | private static void PropertyChangedCallback(DependencyObject d, Depend...
method OnAttached (line 45) | protected override void OnAttached()
method TransitionOut (line 52) | private void TransitionOut(Visibility oldValue)
method TransitionIn (line 68) | private void TransitionIn()
method AnimationOutCompleted (line 79) | void AnimationOutCompleted(object sender, object e)
FILE: Meridian/Controls/BindablePasswordBox.cs
class BindablePasswordBox (line 6) | public sealed class BindablePasswordBox : Decorator
method BindablePasswordBox (line 19) | static BindablePasswordBox()
method BindablePasswordBox (line 32) | public BindablePasswordBox()
method OnPasswordPropertyChanged (line 56) | private static void OnPasswordPropertyChanged(DependencyObject d, Depe...
method HandlePasswordChanged (line 76) | private void HandlePasswordChanged(object sender, RoutedEventArgs even...
FILE: Meridian/Controls/BusyIndicator.cs
class BusyIndicator (line 12) | [TemplateVisualState(Name = "Idle", GroupName = "BusyStates")]
method OnErrorPropertyChanged (line 119) | private static void OnErrorPropertyChanged(DependencyObject d, Depende...
method BusyIndicator (line 164) | static BusyIndicator()
method OnApplyTemplate (line 172) | public override void OnApplyTemplate()
method ChangeVisualState (line 182) | protected virtual void ChangeVisualState(bool useTransitions)
method OnIsBusyChanged (line 197) | private static void OnIsBusyChanged(DependencyObject d, DependencyProp...
method OnIsBusyChanged (line 206) | protected virtual void OnIsBusyChanged(DependencyPropertyChangedEventA...
FILE: Meridian/Controls/ContentTransitionControl.xaml.cs
class ContentTransitionControl (line 10) | public partial class ContentTransitionControl : UserControl
method SourcePropertyChanged (line 21) | private static void SourcePropertyChanged(DependencyObject d, Dependen...
method ContentTemplatePropertyChanged (line 42) | private static void ContentTemplatePropertyChanged(DependencyObject d,...
method ContentTransitionControl (line 56) | public ContentTransitionControl()
method Swap (line 64) | private void Swap()
method AnimateOut (line 71) | private void AnimateOut()
method AnimateIn (line 77) | private void AnimateIn()
FILE: Meridian/Controls/ExtendedListBox.cs
class ExtendedListBox (line 9) | public class ExtendedListBox : ListBox
method ExtendedListBox (line 22) | public ExtendedListBox()
method ExtendedListBox_Unloaded (line 27) | void ExtendedListBox_Unloaded(object sender, RoutedEventArgs e)
method OnApplyTemplate (line 33) | public override void OnApplyTemplate()
method _scrollViewer_ScrollChanged (line 41) | void _scrollViewer_ScrollChanged(object sender, ScrollChangedEventArgs e)
method FindElementRecursive (line 50) | private UIElement FindElementRecursive(FrameworkElement parent, Type t...
FILE: Meridian/Controls/FlyoutContent.cs
class FlyoutContent (line 9) | public class FlyoutContent : UserControl
method FlyoutContent (line 17) | public FlyoutContent()
method InitializeCommand (line 22) | private void InitializeCommand()
method Close (line 27) | protected void Close()
FILE: Meridian/Controls/FlyoutControl.xaml.cs
class FlyoutControl (line 18) | public partial class FlyoutControl : UserControl
method FlyoutControl (line 43) | public FlyoutControl()
method Show (line 48) | public void Show()
method ShowAsync (line 63) | public Task<object> ShowAsync()
method Close (line 73) | public void Close(object result = null)
method CloseNow (line 80) | public void CloseNow(object result = null)
method CloseAnim_OnCompleted (line 87) | private void CloseAnim_OnCompleted(object sender, EventArgs e)
method CloseInternal (line 92) | private void CloseInternal()
FILE: Meridian/Controls/ImageTransitionControl.xaml.cs
class ImageTransitionControl (line 11) | public partial class ImageTransitionControl : UserControl
method ImageSourcePropertyChanged (line 19) | private static void ImageSourcePropertyChanged(DependencyObject d, Dep...
method ImageOpacityPropertyChanged (line 45) | private static void ImageOpacityPropertyChanged(DependencyObject d, De...
method ImageTransitionControl (line 75) | public ImageTransitionControl()
method Swap (line 83) | private void Swap()
method AnimateOut (line 90) | private void AnimateOut()
method AnimateIn (line 101) | private void AnimateIn()
FILE: Meridian/Controls/LocalSearchControl.xaml.cs
class LocalSearchControl (line 15) | public partial class LocalSearchControl : UserControl
method IsActiveChanged (line 22) | private static void IsActiveChanged(DependencyObject d, DependencyProp...
method LocalSearchControl (line 85) | public LocalSearchControl()
method GetForCurrentView (line 90) | public static LocalSearchControl GetForCurrentView()
method LocalSearchControl_OnLoaded (line 95) | private void LocalSearchControl_OnLoaded(object sender, RoutedEventArg...
method LocalSearchBox_OnTextChanged (line 100) | private void LocalSearchBox_OnTextChanged(object sender, TextChangedEv...
method CloseLocalSearchBoxButton_OnClick (line 115) | private void CloseLocalSearchBoxButton_OnClick(object sender, RoutedEv...
method LocalSearchControl_OnKeyDown (line 120) | private void LocalSearchControl_OnKeyDown(object sender, KeyEventArgs e)
method LocalSearchControl_OnGotFocus (line 126) | private void LocalSearchControl_OnGotFocus(object sender, RoutedEventA...
method LocalSearchControl_OnIsVisibleChanged (line 131) | private void LocalSearchControl_OnIsVisibleChanged(object sender, Depe...
FILE: Meridian/Controls/NotificationControl.xaml.cs
class NotificationControl (line 12) | public partial class NotificationControl : UserControl
method ProgressChanged (line 23) | private static void ProgressChanged(DependencyObject d, DependencyProp...
method NotificationControl (line 47) | public NotificationControl()
method TimerTick (line 56) | private void TimerTick(object sender, EventArgs e)
method UpdateStatus (line 67) | private void UpdateStatus(string newValue)
method OnNotificationChanged (line 76) | private static void OnNotificationChanged(DependencyObject o, Dependen...
method SwitchOutAnim_OnCompleted (line 86) | private void SwitchOutAnim_OnCompleted(object sender, EventArgs e)
method SwitchInAnim_OnCompleted (line 100) | private void SwitchInAnim_OnCompleted(object sender, EventArgs e)
FILE: Meridian/Controls/PageBase.cs
class NavigationContext (line 7) | public sealed class NavigationContext
method NavigationContext (line 26) | public NavigationContext()
class PageBase (line 32) | public class PageBase : Page
method PageBase (line 36) | public PageBase()
method OnNavigatedTo (line 44) | public virtual void OnNavigatedTo()
method OnNavigatedFrom (line 49) | public virtual void OnNavigatedFrom()
method PageBase_Unloaded (line 54) | private void PageBase_Unloaded(object sender, RoutedEventArgs e)
method PageBase_Loaded (line 62) | private void PageBase_Loaded(object sender, RoutedEventArgs e)
FILE: Meridian/Controls/PlayerControl.xaml.cs
class PlayerControl (line 10) | public partial class PlayerControl : UserControl
method PlayerControl (line 12) | public PlayerControl()
method MenuItem_OnClick (line 17) | private void MenuItem_OnClick(object sender, RoutedEventArgs e)
FILE: Meridian/Controls/ShareBarControl.xaml.cs
class ShareBarControl (line 10) | public partial class ShareBarControl : UserControl
method ShareBarControl (line 14) | public ShareBarControl()
FILE: Meridian/Controls/TextBoxWithHint.cs
class TextBoxWithHint (line 6) | public class TextBoxWithHint : TextBox
method TextBoxWithHint (line 28) | public TextBoxWithHint()
method OnApplyTemplate (line 33) | public override void OnApplyTemplate()
method OnGotFocus (line 41) | protected override void OnGotFocus(RoutedEventArgs e)
method OnLostFocus (line 47) | protected override void OnLostFocus(RoutedEventArgs e)
method OnTextChanged (line 53) | protected override void OnTextChanged(TextChangedEventArgs e)
method DetermineHintVisibility (line 59) | private void DetermineHintVisibility()
FILE: Meridian/Controls/VirtualizingWrapPanel.cs
class VirtualizingWrapPanel (line 10) | public class VirtualizingWrapPanel : VirtualizingPanel, IScrollInfo
method GetVirtualItemIndex (line 32) | private static int GetVirtualItemIndex(DependencyObject obj)
method SetVirtualItemIndex (line 37) | private static void SetVirtualItemIndex(DependencyObject obj, int value)
method VirtualizingWrapPanel (line 54) | public VirtualizingWrapPanel()
method Initialize (line 62) | private void Initialize()
method OnItemsChanged (line 70) | protected override void OnItemsChanged(object sender, ItemsChangedEven...
method MeasureOverride (line 77) | protected override Size MeasureOverride(Size availableSize)
method EnsureScrollOffsetIsWithinConstrains (line 184) | private void EnsureScrollOffsetIsWithinConstrains(ExtentInfo extentInfo)
method RecycleItems (line 189) | private void RecycleItems(ItemLayoutInfo layoutInfo)
method ArrangeOverride (line 208) | protected override Size ArrangeOverride(Size finalSize)
method UpdateScrollInfo (line 218) | private void UpdateScrollInfo(Size availableSize, ExtentInfo extentInfo)
method RemoveRedundantChildren (line 226) | private void RemoveRedundantChildren()
method GetLayoutInfo (line 243) | private ItemLayoutInfo GetLayoutInfo(Size availableSize, double itemHe...
method GetExtentInfo (line 275) | private ExtentInfo GetExtentInfo(Size viewPortSize, double itemHeight)
method LineUp (line 295) | public void LineUp()
method LineDown (line 300) | public void LineDown()
method LineLeft (line 305) | public void LineLeft()
method LineRight (line 310) | public void LineRight()
method PageUp (line 315) | public void PageUp()
method PageDown (line 320) | public void PageDown()
method PageLeft (line 325) | public void PageLeft()
method PageRight (line 330) | public void PageRight()
method MouseWheelUp (line 335) | public void MouseWheelUp()
method MouseWheelDown (line 340) | public void MouseWheelDown()
method MouseWheelLeft (line 345) | public void MouseWheelLeft()
method MouseWheelRight (line 350) | public void MouseWheelRight()
method SetHorizontalOffset (line 355) | public void SetHorizontalOffset(double offset)
method SetVerticalOffset (line 369) | public void SetVerticalOffset(double offset)
method MakeVisible (line 383) | public Rect MakeVisible(Visual visual, Rect rectangle)
method GetVisibleItemsRange (line 388) | public ItemLayoutInfo GetVisibleItemsRange()
method InvalidateScrollInfo (line 441) | private void InvalidateScrollInfo()
method HandleItemDimensionChanged (line 449) | private static void HandleItemDimensionChanged(DependencyObject d, Dep...
method Clamp (line 457) | private double Clamp(double value, double min, double max)
class ExtentInfo (line 462) | internal class ExtentInfo
class ItemLayoutInfo (line 471) | public class ItemLayoutInfo
FILE: Meridian/Controls/VolumeControl.xaml.cs
class VolumeControl (line 10) | public partial class VolumeControl : UserControl
method VolumeControl (line 31) | public VolumeControl()
method VolumeButton_OnClick (line 36) | private void VolumeButton_OnClick(object sender, RoutedEventArgs e)
method VolumeControl_OnMouseWheel (line 41) | private void VolumeControl_OnMouseWheel(object sender, MouseWheelEvent...
method MuteButton_OnClick (line 60) | private void MuteButton_OnClick(object sender, RoutedEventArgs e)
FILE: Meridian/Converters/AlbumContextMenuVisibilityConverter.cs
class AlbumContextMenuVisibilityConverter (line 9) | public class AlbumContextMenuVisibilityConverter : IValueConverter
method Convert (line 11) | public object Convert(object value, Type targetType, object parameter,...
method ConvertBack (line 23) | public object ConvertBack(object value, Type targetType, object parame...
FILE: Meridian/Converters/AlbumListItemContainerSelector.cs
class AlbumListItemContainerStyleSelector (line 7) | public class AlbumListItemContainerStyleSelector : StyleSelector
method SelectStyle (line 29) | public override Style SelectStyle(object item, DependencyObject contai...
FILE: Meridian/Converters/AudioTemplateSelector.cs
class AudioTemplateSelector (line 7) | public class AudioTemplateSelector : DataTemplateSelector
method SelectTemplate (line 15) | public override DataTemplate SelectTemplate(object item, DependencyObj...
FILE: Meridian/Converters/AudioTimeSpanConverter.cs
class AudioTimeSpanConverter (line 7) | public class AudioTimeSpanConverter : IValueConverter
method Convert (line 9) | public object Convert(object value, Type targetType, object parameter,...
method ConvertBack (line 17) | public object ConvertBack(object value, Type targetType, object parame...
FILE: Meridian/Converters/BooleanToValueConverter.cs
class BooleanToValueConverter (line 7) | public class BooleanToValueConverter : IValueConverter
method Convert (line 13) | public object Convert(object value, Type targetType, object parameter,...
method ConvertBack (line 21) | public object ConvertBack(object value, Type targetType, object parame...
FILE: Meridian/Converters/MainMenuGroupStyleSelector.cs
class MainMenuGroupStyleSelector (line 7) | public class MainMenuGroupStyleSelector : StyleSelector
method SelectStyle (line 13) | public override Style SelectStyle(object item, DependencyObject contai...
FILE: Meridian/Converters/SearchResultTemplateSelector.cs
class SearchResultTemplateSelector (line 13) | public class SearchResultTemplateSelector : DataTemplateSelector
method SelectTemplate (line 29) | public override DataTemplate SelectTemplate(object item, DependencyObj...
class SearchResultStyleSelector (line 49) | public class SearchResultStyleSelector : StyleSelector
method SelectStyle (line 61) | public override Style SelectStyle(object item, DependencyObject contai...
class SearchListBoxStyleSelector (line 77) | public class SearchListBoxStyleSelector : IValueConverter
method Convert (line 89) | public object Convert(object value, Type targetType, object parameter,...
method ConvertBack (line 110) | public object ConvertBack(object value, Type targetType, object parame...
FILE: Meridian/Domain/Settings.cs
class Settings (line 22) | public class Settings
method Settings (line 137) | public Settings()
method Load (line 181) | public static void Load()
method Save (line 203) | public async void Save()
FILE: Meridian/Extensions/AudioExtensions.cs
class AudioExtensions (line 8) | public static class AudioExtensions
method ToAudio (line 10) | public static VkAudio ToAudio(this VkLib.Core.Audio.VkAudio audio)
method ToAudio (line 29) | public static VkAudio ToAudio(this LastFmTrack audio)
FILE: Meridian/Extensions/CommonExtensions.cs
class CommonExtensions (line 5) | public static class CommonExtensions
method Clamp (line 7) | public static T Clamp<T>(this T val, T min, T max) where T : IComparab...
method Contains (line 14) | public static bool Contains(this string source, string toCheck, String...
FILE: Meridian/Extensions/ListExtensions.cs
class ListExtensions (line 6) | public static class ListExtensions
method Shuffle (line 8) | public static void Shuffle<T>(this IList<T> list)
FILE: Meridian/Extensions/SocketExtensions.cs
class SocketExtensions (line 7) | public static class SocketExtensions
method ReceiveAsync (line 9) | public static Task<int> ReceiveAsync(this Socket socket, byte[] buffer...
FILE: Meridian/Helpers/AlbumCoversHelper.cs
class AlbumCoversHelper (line 14) | public static class AlbumCoversHelper
method RequestCover (line 26) | public static void RequestCover(AudioAlbum target)
method GetCover (line 36) | public static Task<ImageSource> GetCover(AudioAlbum target)
method EnqueueCoverRequest (line 41) | private static void EnqueueCoverRequest(AudioAlbum target)
method StartQueueProcessing (line 60) | private static async void StartQueueProcessing()
method ProcessQueueItem (line 122) | private static async Task<KeyValuePair<string, ImageSource>> ProcessQu...
method GetImage (line 137) | private static async Task<ImageSource> GetImage(string coverPath)
FILE: Meridian/Helpers/ArtistImageHelper.cs
class ArtistImageHelper (line 14) | public static class ArtistImageHelper
method RequestCover (line 26) | public static void RequestCover(AudioArtist target)
method GetCover (line 36) | public static Task<ImageSource> GetCover(AudioArtist target)
method EnqueueCoverRequest (line 41) | private static void EnqueueCoverRequest(AudioArtist target)
method StartQueueProcessing (line 60) | private static async void StartQueueProcessing()
method ProcessQueueItem (line 121) | private static async Task<KeyValuePair<string, ImageSource>> ProcessQu...
method GetImage (line 128) | private static async Task<ImageSource> GetImage(string artist)
method GetImageAsync (line 143) | private static Task<ImageSource> GetImageAsync(string artist)
FILE: Meridian/Helpers/DateTimeConverter.cs
class DateTimeConverter (line 9) | public static class DateTimeConverter
method FromUnixTime (line 30) | public static DateTime FromUnixTime(double unixTime)
method FromUnixTime (line 40) | public static DateTime FromUnixTime(string unixTime)
method ToUnixTime (line 56) | public static double ToUnixTime(DateTime dateTime)
method ToUnixTime (line 66) | public static double ToUnixTime(DateTimeOffset dateTime)
method ToIso8601FormattedDateTime (line 80) | public static string ToIso8601FormattedDateTime(DateTime dateTime)
method FromIso8601FormattedDateTime (line 94) | public static DateTime FromIso8601FormattedDateTime(string iso8601Date...
FILE: Meridian/Helpers/FilesHelper.cs
class FilesHelper (line 12) | public static class FilesHelper
method GetMusicFiles (line 14) | public static List<string> GetMusicFiles()
method GetDirectoryFiles (line 57) | public static IEnumerable<string> GetDirectoryFiles(string rootPath, s...
FILE: Meridian/Helpers/HotKeyManager.cs
class HotKey (line 13) | public sealed class HotKey : IDisposable
method HotKey (line 21) | public HotKey(ModifierKeys modifierKeys, Key key, Window window)
method HotKey (line 27) | public HotKey(ModifierKeys modifierKeys, Key key, WindowInteropHelper ...
method HotKey (line 33) | public HotKey(ModifierKeys modifierKeys, Key key, IntPtr windowHandle)
method RegisterHotKey (line 52) | public void RegisterHotKey()
method UnregisterHotKey (line 61) | public void UnregisterHotKey()
method Dispose (line 66) | public void Dispose()
method ThreadPreprocessMessageMethod (line 83) | private void ThreadPreprocessMessageMethod(ref MSG msg, ref bool handled)
method OnHotKeyPressed (line 96) | private void OnHotKeyPressed()
class HotKeyManager (line 103) | public class HotKeyManager : IDisposable
method HotKeyManager (line 108) | public HotKeyManager(IntPtr handle)
method RegisterHotkey (line 121) | public void RegisterHotkey(ModifierKeys modifier, Key key)
method RegisterHotkey (line 134) | public void RegisterHotkey(ModifierKeys modifier, Key key, Action<HotK...
method UnregisterHotkey (line 146) | public void UnregisterHotkey(ModifierKeys modifier, Key key)
method IsRegistered (line 162) | public bool IsRegistered(ModifierKeys modifier, Key key)
method InitializeHotkeys (line 177) | public void InitializeHotkeys()
method HotKeyPressed (line 212) | void HotKeyPressed(HotKey obj)
method Dispose (line 245) | public void Dispose()
FILE: Meridian/Helpers/ImageAsyncHelper.cs
class NullImageConverter (line 11) | public class NullImageConverter : IValueConverter
method Convert (line 13) | public object Convert(object value, Type targetType, object parameter,...
method ConvertBack (line 20) | public object ConvertBack(object value, Type targetType, object parame...
class ImageAsyncHelper (line 26) | public class ImageAsyncHelper : DependencyObject
method GetSourceUri (line 43) | public static Uri GetSourceUri(DependencyObject obj) { return (Uri)obj...
method SetSourceUri (line 44) | public static void SetSourceUri(DependencyObject obj, Uri value) { obj...
method SourceUriChanged (line 47) | private static void SourceUriChanged(DependencyObject d, DependencyPro...
FILE: Meridian/Helpers/LongRunningOperation.cs
class LongRunningOperation (line 6) | public class LongRunningOperation : INotifyPropertyChanged
method OnPropertyChanged (line 39) | protected virtual void OnPropertyChanged([CallerMemberName] string pro...
FILE: Meridian/Helpers/Md5Helper.cs
class Md5Helper (line 6) | public static class Md5Helper
method Md5 (line 8) | public static string Md5(string input)
FILE: Meridian/Helpers/NativeMethods.cs
class NativeMethods (line 7) | public static class NativeMethods
method SendMessage (line 11) | [DllImport("user32.dll")]
method RegisterHotKey (line 14) | [DllImport("user32.dll", SetLastError = true)]
method UnregisterHotKey (line 17) | [DllImport("user32.dll", SetLastError = true)]
method SizeWindow (line 20) | public static void SizeWindow(IntPtr handle)
method SizeWindowLeft (line 25) | public static void SizeWindowLeft(IntPtr handle)
method SizeWindowTop (line 30) | public static void SizeWindowTop(IntPtr handle)
method SizeWindowBottom (line 35) | public static void SizeWindowBottom(IntPtr handle)
method SizeWindowRight (line 40) | public static void SizeWindowRight(IntPtr handle)
FILE: Meridian/Helpers/NetworkHelper.cs
class NetworkHelper (line 8) | public static class NetworkHelper
method GetLocalIpAddresses (line 10) | public static List<string> GetLocalIpAddresses()
FILE: Meridian/Helpers/StringHelper.cs
class StringHelper (line 6) | public static class StringHelper
method FormatSize (line 8) | public static string FormatSize(double bytes, string[] orders = null)
method ToUtf8 (line 27) | public static string ToUtf8(string input)
FILE: Meridian/Layout/Controls/HeaderControl.xaml.cs
class HeaderControl (line 12) | public partial class HeaderControl : UserControl
method OnMenuItemsPropertyChanged (line 35) | private static void OnMenuItemsPropertyChanged(DependencyObject d, Dep...
method HeaderControl (line 50) | public HeaderControl()
method OnLoaded (line 58) | private void OnLoaded(object sender, RoutedEventArgs routedEventArgs)
method OnUnloaded (line 66) | private void OnUnloaded(object sender, RoutedEventArgs e)
method MenuItemClicked (line 74) | private void MenuItemClicked(object sender, RoutedEventArgs e)
FILE: Meridian/Layout/Controls/PageTabControl.cs
class PageTabControl (line 12) | public class PageTabControl : TabControl
method OnItemsChanged (line 16) | protected override void OnItemsChanged(NotifyCollectionChangedEventArg...
method ShowHideTabsPanel (line 23) | private void ShowHideTabsPanel(bool show)
method OnApplyTemplate (line 37) | public override void OnApplyTemplate()
FILE: Meridian/Layout/LayoutBase.cs
class LayoutBase (line 6) | public class LayoutBase : Control
FILE: Meridian/Layout/PageBase.cs
class PageBase (line 8) | public class PageBase : Page
method PageBase (line 76) | public PageBase()
method OnLoaded (line 89) | private void OnLoaded(object sender, RoutedEventArgs routedEventArgs)
method OnUnloaded (line 98) | private void OnUnloaded(object sender, RoutedEventArgs routedEventArgs)
method OnNavigatedTo (line 107) | public virtual void OnNavigatedTo()
method OnNavigatedFrom (line 112) | public virtual void OnNavigatedFrom()
class NavigationContext (line 118) | public sealed class NavigationContext
method NavigationContext (line 137) | public NavigationContext()
FILE: Meridian/Layout/TwoColumnPageLayout.cs
class TwoColumnPageLayout (line 6) | public class TwoColumnPageLayout : LayoutBase
method TwoColumnPageLayout (line 26) | public TwoColumnPageLayout()
FILE: Meridian/MainWindow.xaml.cs
class MainWindow (line 26) | public partial class MainWindow : Window
method MainWindow (line 31) | public MainWindow()
method MainWindow_OnMouseMove (line 36) | private void MainWindow_OnMouseMove(object sender, MouseEventArgs e)
method MainWindow_OnLoaded (line 56) | private void MainWindow_OnLoaded(object sender, RoutedEventArgs e)
method RootFrame_Navigating (line 105) | void RootFrame_Navigating(object sender, System.Windows.Navigation.Nav...
method RootFrame_Navigated (line 113) | void RootFrame_Navigated(object sender, System.Windows.Navigation.Navi...
method ResizeGripMouseMove (line 128) | private void ResizeGripMouseMove(object sender, MouseEventArgs e)
method MainWindow_OnClosing (line 139) | private void MainWindow_OnClosing(object sender, CancelEventArgs e)
method SearchBox_OnKeyUp (line 144) | private void SearchBox_OnKeyUp(object sender, KeyEventArgs e)
method MainWindow_OnKeyUp (line 152) | private void MainWindow_OnKeyUp(object sender, KeyEventArgs e)
method TellFriendsRequest (line 162) | private void TellFriendsRequest()
method MainWindow_OnStateChanged (line 169) | private void MainWindow_OnStateChanged(object sender, EventArgs e)
FILE: Meridian/Model/Account.cs
class LoginParams (line 13) | public class LoginParams
method LoginParams (line 21) | public LoginParams()
class Account (line 30) | public class Account : INotifyPropertyChanged
method Login (line 60) | public virtual void Login(LoginParams loginParams)
method OnPropertyChanged (line 67) | protected virtual void OnPropertyChanged([CallerMemberName] string pro...
class VkAccount (line 74) | public class VkAccount : Account
method Login (line 79) | public override async void Login(LoginParams loginParams)
class LastFmAccount (line 99) | public class LastFmAccount : Account
method Login (line 101) | public override async void Login(LoginParams loginParams)
FILE: Meridian/Model/Audio.cs
class Audio (line 11) | public class Audio : INotifyPropertyChanged
method Clone (line 126) | public virtual Audio Clone()
method OnPropertyChanged (line 141) | protected virtual void OnPropertyChanged(string propertyName = null)
class VkAudio (line 151) | public class VkAudio : Audio
method Clone (line 216) | public override Audio Clone()
class LocalAudio (line 235) | public class LocalAudio : Audio
FILE: Meridian/Model/AudioAlbum.cs
class AudioAlbum (line 11) | public class AudioAlbum : INotifyPropertyChanged
method GetCover (line 52) | private void GetCover()
method OnPropertyChanged (line 63) | protected virtual void OnPropertyChanged([CallerMemberName] string pro...
FILE: Meridian/Model/AudioArtist.cs
class AudioArtist (line 10) | public class AudioArtist : INotifyPropertyChanged
method AudioArtist (line 46) | public AudioArtist()
method GetImage (line 53) | private void GetImage()
method OnPropertyChanged (line 64) | protected virtual void OnPropertyChanged([CallerMemberName] string pro...
FILE: Meridian/Model/AudioPost.cs
class AudioPost (line 10) | public class AudioPost : Audio
FILE: Meridian/Model/ColorScheme.cs
class ColorScheme (line 3) | public class ColorScheme
method ColorScheme (line 9) | public ColorScheme(string name, string color)
FILE: Meridian/Model/ItemsResponse.cs
class ItemsResponse (line 5) | public class ItemsResponse<T>
method ItemsResponse (line 20) | public ItemsResponse()
method ItemsResponse (line 25) | public ItemsResponse(List<T> items, int totalCount = 0)
FILE: Meridian/Model/MainMenuItem.cs
class MainMenuItem (line 5) | public class MainMenuItem
class MenuItemsCollection (line 34) | public class MenuItemsCollection : List<MainMenuItem>
FILE: Meridian/Model/NewsItemsResponse.cs
class NewsItemsResponse (line 6) | public class NewsItemsResponse<T> : ItemsResponse<T>
method NewsItemsResponse (line 10) | public NewsItemsResponse(List<T> items, int totalCount = 0)
FILE: Meridian/Model/Recommendation.cs
class Recommendation (line 13) | public class Recommendation
class RecommendationsCollection (line 36) | public class RecommendationsCollection : List<Recommendation>
class GenreRecommendation (line 41) | public class GenreRecommendation : Recommendation
method GenreRecommendation (line 43) | public GenreRecommendation()
class MoodRecommendation (line 50) | public class MoodRecommendation : Recommendation
method MoodRecommendation (line 52) | public MoodRecommendation()
FILE: Meridian/Model/SearchMenuItem.cs
class SearchMenuItem (line 3) | public class SearchMenuItem
FILE: Meridian/Model/Settings/SettingsEngine.cs
class SettingsEngine (line 5) | public class SettingsEngine
FILE: Meridian/Model/Settings/SettingsHotKey.cs
class SettingsHotkey (line 8) | public class SettingsHotkey : INotifyPropertyChanged
method OnPropertyChanged (line 88) | protected virtual void OnPropertyChanged(string propertyName = null)
FILE: Meridian/Model/Settings/SettingsLanguage.cs
class SettingsLanguage (line 3) | public class SettingsLanguage
FILE: Meridian/Model/UIMode.cs
type UIMode (line 3) | public enum UIMode
FILE: Meridian/Properties/Resources.Designer.cs
class Resources (line 22) | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resource...
method Resources (line 31) | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Mic...
FILE: Meridian/Properties/Settings.Designer.cs
class Settings (line 14) | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
FILE: Meridian/RemotePlay/RemotePlayService.cs
class RemotePlayService (line 10) | public class RemotePlayService
method Start (line 20) | public async void Start()
method Stop (line 40) | public async void Stop()
method OnReceveData (line 59) | private void OnReceveData(string data)
FILE: Meridian/RemotePlay/SimpleHttpRequest.cs
class SimpleHttpRequest (line 6) | public class SimpleHttpRequest
method SimpleHttpRequest (line 14) | public SimpleHttpRequest()
FILE: Meridian/RemotePlay/SimpleHttpResponse.cs
class SimpleHttpResponse (line 7) | public class SimpleHttpResponse
method SimpleHttpResponse (line 13) | public SimpleHttpResponse()
method ToString (line 19) | public override string ToString()
FILE: Meridian/RemotePlay/SimpleWebServer.cs
class SimpleWebServer (line 21) | public class SimpleWebServer
method Start (line 29) | public void Start(IPAddress address, int port)
method Stop (line 42) | public void Stop()
method Listen (line 48) | private async void Listen()
method ProcessRequest (line 121) | private SimpleHttpRequest ProcessRequest(string request)
method ApiResponse (line 167) | private async Task ApiResponse(SimpleHttpRequest request, string targe...
method FileResponse (line 218) | private async Task FileResponse(SimpleHttpRequest request, string targ...
FILE: Meridian/RemotePlay/web/js/index.js
function onPlay (line 62) | function onPlay() {
function onPause (line 70) | function onPause() {
function onNext (line 77) | function onNext() {
function onPrev (line 84) | function onPrev() {
function onSliderChanged (line 88) | function onSliderChanged(event, ui) {
function onVolumeSliderChanged (line 99) | function onVolumeSliderChanged(event, ui) {
function setIsPlaying (line 105) | function setIsPlaying(isPlaying) {
function api (line 113) | function api(method, command, commandParam, cb) {
FILE: Meridian/RemotePlay/web/lib/svg4everybody.js
function a (line 1) | function a(t, n) { if (n) { var o = n.getAttribute("viewBox"), r = e.cre...
function l (line 1) | function l() { var t = this, n = e.createElement("x"), o = t.s; n.innerH...
function d (line 1) | function d() { for (var i; i = t[0];) if (r) { var s = new Image; s.src ...
FILE: Meridian/Resources/Localization/ErrorResources.Designer.cs
class ErrorResources (line 22) | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resource...
method ErrorResources (line 31) | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Mic...
FILE: Meridian/Resources/Localization/MainResources.Designer.cs
class MainResources (line 22) | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resource...
method MainResources (line 31) | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Mic...
FILE: Meridian/SQLite.cs
class SQLiteException (line 51) | public class SQLiteException : Exception
method SQLiteException (line 55) | protected SQLiteException (SQLite3.Result r,string message) : base(mes...
method New (line 60) | public static SQLiteException New (SQLite3.Result r, string message)
class NotNullConstraintViolationException (line 66) | public class NotNullConstraintViolationException : SQLiteException
method NotNullConstraintViolationException (line 70) | protected NotNullConstraintViolationException (SQLite3.Result r, strin...
method NotNullConstraintViolationException (line 76) | protected NotNullConstraintViolationException (SQLite3.Result r, strin...
method New (line 86) | public static new NotNullConstraintViolationException New (SQLite3.Res...
method New (line 91) | public static NotNullConstraintViolationException New (SQLite3.Result ...
method New (line 96) | public static NotNullConstraintViolationException New (SQLiteException...
type SQLiteOpenFlags (line 102) | [Flags]
type CreateFlags (line 113) | [Flags]
class SQLiteConnection (line 127) | public partial class SQLiteConnection : IDisposable
method SQLiteConnection (line 164) | public SQLiteConnection (string databasePath, bool storeDateTimeAsTick...
method SQLiteConnection (line 181) | public SQLiteConnection(string databasePath, SQLiteOpenFlags openFlags...
method SQLiteConnection (line 216) | static SQLiteConnection ()
method EnableLoadExtension (line 224) | public void EnableLoadExtension(int onoff)
method GetNullTerminatedUtf8 (line 233) | static byte[] GetNullTerminatedUtf8 (string s)
method GetMapping (line 284) | public TableMapping GetMapping(Type type, CreateFlags createFlags = Cr...
method GetMapping (line 304) | public TableMapping GetMapping<T> ()
type IndexedColumn (line 309) | private struct IndexedColumn
type IndexInfo (line 315) | private struct IndexInfo
method DropTable (line 326) | public int DropTable<T>()
method CreateTable (line 344) | public int CreateTable<T>(CreateFlags createFlags = CreateFlags.None)
method CreateTable (line 360) | public int CreateTable(Type ty, CreateFlags createFlags = CreateFlags....
method CreateIndex (line 425) | public int CreateIndex(string indexName, string tableName, string[] co...
method CreateIndex (line 439) | public int CreateIndex(string indexName, string tableName, string colu...
method CreateIndex (line 450) | public int CreateIndex(string tableName, string columnName, bool uniqu...
method CreateIndex (line 461) | public int CreateIndex(string tableName, string[] columnNames, bool un...
method CreateIndex (line 473) | public void CreateIndex<T>(Expression<Func<T, object>> property, bool ...
class ColumnInfo (line 498) | public class ColumnInfo
method ToString (line 514) | public override string ToString ()
method GetTableInfo (line 520) | public List<ColumnInfo> GetTableInfo (string tableName)
method MigrateTable (line 526) | void MigrateTable (TableMapping map)
method NewCommand (line 554) | protected virtual SQLiteCommand NewCommand ()
method CreateCommand (line 572) | public SQLiteCommand CreateCommand (string cmdText, params object[] ps)
method Execute (line 602) | public int Execute (string query, params object[] args)
method ExecuteScalar (line 625) | public T ExecuteScalar<T> (string query, params object[] args)
method Query (line 663) | public List<T> Query<T> (string query, params object[] args) where T :...
method DeferredQuery (line 686) | public IEnumerable<T> DeferredQuery<T>(string query, params object[] a...
method Query (line 712) | public List<object> Query (TableMapping map, string query, params obje...
method DeferredQuery (line 740) | public IEnumerable<object> DeferredQuery(TableMapping map, string quer...
method Table (line 753) | public TableQuery<T> Table<T> () where T : new()
method Get (line 770) | public T Get<T> (object pk) where T : new()
method Get (line 787) | public T Get<T> (Expression<Func<T, bool>> predicate) where T : new()
method Find (line 804) | public T Find<T> (object pk) where T : new ()
method Find (line 825) | public object Find (object pk, TableMapping map)
method Find (line 841) | public T Find<T> (Expression<Func<T, bool>> predicate) where T : new()
method BeginTransaction (line 857) | public void BeginTransaction ()
method SaveTransactionPoint (line 906) | public string SaveTransactionPoint ()
method Rollback (line 941) | public void Rollback ()
method RollbackTo (line 950) | public void RollbackTo (string savepoint)
method RollbackTo (line 959) | void RollbackTo (string savepoint, bool noThrow)
method Release (line 987) | public void Release (string savepoint)
method DoSavePointExecute (line 992) | void DoSavePointExecute (string savepoint, string cmd)
method Commit (line 1020) | public void Commit ()
method RunInTransaction (line 1038) | public void RunInTransaction (Action action)
method InsertAll (line 1059) | public int InsertAll (System.Collections.IEnumerable objects)
method InsertAll (line 1082) | public int InsertAll (System.Collections.IEnumerable objects, string e...
method InsertAll (line 1105) | public int InsertAll (System.Collections.IEnumerable objects, Type obj...
method Insert (line 1126) | public int Insert (object obj)
method InsertOrReplace (line 1147) | public int InsertOrReplace (object obj)
method InsertOrIgnore (line 1155) | public int InsertOrIgnore(object obj)
method InsertOrReplaceAll (line 1165) | public int InsertOrReplaceAll(IEnumerable objects)
method InsertOrIgnoreAll (line 1178) | public int InsertOrIgnoreAll(IEnumerable objects)
method Insert (line 1204) | public int Insert (object obj, Type objType)
method InsertOrReplace (line 1225) | public int InsertOrReplace (object obj, Type objType)
method Insert (line 1243) | public int Insert (object obj, string extra)
method Insert (line 1267) | public int Insert (object obj, string extra, Type objType)
method Update (line 1351) | public int Update (object obj)
method Update (line 1373) | public int Update (object obj, Type objType)
method UpdateAll (line 1422) | public int UpdateAll (System.Collections.IEnumerable objects)
method Delete (line 1442) | public int Delete (object objectToDelete)
method Delete (line 1465) | public int Delete<T> (object primaryKey)
method DeleteAll (line 1487) | public int DeleteAll<T> ()
method Dispose (line 1499) | public void Dispose ()
method Dispose (line 1505) | protected virtual void Dispose (bool disposing)
method Close (line 1510) | public void Close ()
class SQLiteConnectionString (line 1536) | class SQLiteConnectionString
method SQLiteConnectionString (line 1547) | public SQLiteConnectionString (string databasePath, bool storeDateTime...
class TableAttribute (line 1561) | [AttributeUsage (AttributeTargets.Class)]
method TableAttribute (line 1566) | public TableAttribute (string name)
class ColumnAttribute (line 1572) | [AttributeUsage (AttributeTargets.Property)]
method ColumnAttribute (line 1577) | public ColumnAttribute (string name)
class PrimaryKeyAttribute (line 1583) | [AttributeUsage (AttributeTargets.Property)]
class AutoIncrementAttribute (line 1588) | [AttributeUsage (AttributeTargets.Property)]
class IndexedAttribute (line 1593) | [AttributeUsage (AttributeTargets.Property)]
method IndexedAttribute (line 1600) | public IndexedAttribute()
method IndexedAttribute (line 1604) | public IndexedAttribute(string name, int order)
class IgnoreAttribute (line 1611) | [AttributeUsage (AttributeTargets.Property)]
class UniqueAttribute (line 1616) | [AttributeUsage (AttributeTargets.Property)]
class MaxLengthAttribute (line 1625) | [AttributeUsage (AttributeTargets.Property)]
method MaxLengthAttribute (line 1630) | public MaxLengthAttribute (int length)
class CollationAttribute (line 1636) | [AttributeUsage (AttributeTargets.Property)]
method CollationAttribute (line 1641) | public CollationAttribute (string collation)
class NotNullAttribute (line 1647) | [AttributeUsage (AttributeTargets.Property)]
class TableMapping (line 1652) | public class TableMapping
method TableMapping (line 1668) | public TableMapping(Type type, CreateFlags createFlags = CreateFlags.N...
method SetAutoIncPK (line 1722) | public void SetAutoIncPK (object obj, long id)
method FindColumnWithPropertyName (line 1747) | public Column FindColumnWithPropertyName (string propertyName)
method FindColumn (line 1753) | public Column FindColumn (string columnName)
method GetInsertCommand (line 1762) | public PreparedSqlLiteInsertCommand GetInsertCommand(SQLiteConnection ...
method CreateInsertCommand (line 1776) | PreparedSqlLiteInsertCommand CreateInsertCommand(SQLiteConnection conn...
method Dispose (line 1805) | protected internal void Dispose()
class Column (line 1813) | public class Column
method Column (line 1836) | public Column(PropertyInfo prop, CreateFlags createFlags = CreateFla...
method SetValue (line 1867) | public void SetValue (object obj, object val)
method GetValue (line 1872) | public object GetValue (object obj)
method SqlDecl (line 1886) | public static string SqlDecl(TableMapping.Column p, bool storeDateTimeAs...
method SqlType (line 1906) | public static string SqlType(TableMapping.Column p, bool storeDateTimeAs...
method IsPK (line 1943) | public static bool IsPK (MemberInfo p)
class SQLiteCommand (line 2009) | public partial class SQLiteCommand
method SQLiteCommand (line 2016) | internal SQLiteCommand (SQLiteConnection conn)
method ExecuteNonQuery (line 2023) | public int ExecuteNonQuery ()
method ExecuteDeferredQuery (line 2049) | public IEnumerable<T> ExecuteDeferredQuery<T> ()
method ExecuteQuery (line 2054) | public List<T> ExecuteQuery<T> ()
method ExecuteQuery (line 2059) | public List<T> ExecuteQuery<T> (TableMapping map)
method OnInstanceCreated (line 2076) | protected virtual void OnInstanceCreated (object obj)
method ExecuteDeferredQuery (line 2081) | public IEnumerable<T> ExecuteDeferredQuery<T> (TableMapping map)
method ExecuteScalar (line 2116) | public T ExecuteScalar<T> ()
method Bind (line 2148) | public void Bind (string name, object val)
method Bind (line 2156) | public void Bind (object val)
method ToString (line 2161) | public override string ToString ()
method Prepare (line 2173) | Sqlite3Statement Prepare()
method Finalize (line 2180) | void Finalize (Sqlite3Statement stmt)
method BindAll (line 2185) | void BindAll (Sqlite3Statement stmt)
method BindParameter (line 2201) | internal static void BindParameter (Sqlite3Statement stmt, int index, ...
class Binding (line 2245) | class Binding
method ReadCol (line 2254) | object ReadCol (Sqlite3Statement stmt, int index, SQLite3.ColType type...
class PreparedSqlLiteInsertCommand (line 2316) | public class PreparedSqlLiteInsertCommand : IDisposable
method PreparedSqlLiteInsertCommand (line 2327) | internal PreparedSqlLiteInsertCommand (SQLiteConnection conn)
method ExecuteNonQuery (line 2332) | public int ExecuteNonQuery (object[] source)
method Prepare (line 2370) | protected virtual Sqlite3Statement Prepare ()
method Dispose (line 2376) | public void Dispose ()
method Dispose (line 2382) | private void Dispose (bool disposing)
class BaseTableQuery (line 2400) | public abstract class BaseTableQuery
class Ordering (line 2402) | protected class Ordering
method TableQuery (line 2428) | TableQuery (SQLiteConnection conn, TableMapping table)
method TableQuery (line 2434) | public TableQuery (SQLiteConnection conn)
method Clone (line 2440) | public TableQuery<U> Clone<U> ()
method Where (line 2459) | public TableQuery<T> Where (Expression<Func<T, bool>> predExpr)
method Take (line 2472) | public TableQuery<T> Take (int n)
method Skip (line 2479) | public TableQuery<T> Skip (int n)
method ElementAt (line 2486) | public T ElementAt (int index)
method Deferred (line 2492) | public TableQuery<T> Deferred ()
method OrderBy (line 2499) | public TableQuery<T> OrderBy<U> (Expression<Func<T, U>> orderExpr)
method OrderByDescending (line 2504) | public TableQuery<T> OrderByDescending<U> (Expression<Func<T, U>> orderE...
method ThenBy (line 2509) | public TableQuery<T> ThenBy<U>(Expression<Func<T, U>> orderExpr)
method ThenByDescending (line 2514) | public TableQuery<T> ThenByDescending<U>(Expression<Func<T, U>> orderExpr)
method AddOrderBy (line 2519) | private TableQuery<T> AddOrderBy<U> (Expression<Func<T, U>> orderExpr, b...
method AddWhere (line 2552) | private void AddWhere (Expression pred)
method Join (line 2561) | public TableQuery<TResult> Join<TInner, TKey, TResult> (
method Select (line 2577) | public TableQuery<TResult> Select<TResult> (Expression<Func<T, TResult>>...
method GenerateCommand (line 2584) | private SQLiteCommand GenerateCommand (string selectionList)
class CompileResult (line 2613) | class CompileResult
class SQLite3 (line 2871) | public static class SQLite3
type Result (line 2873) | public enum Result : int
type ExtendedResult (line 2908) | public enum ExtendedResult : int
type ConfigOption (line 2958) | public enum ConfigOption : int
method Open (line 2966) | [DllImport("sqlite3", EntryPoint = "sqlite3_open", CallingConvention=C...
method Open (line 2969) | [DllImport("sqlite3", EntryPoint = "sqlite3_open_v2", CallingConventio...
method Open (line 2972) | [DllImport("sqlite3", EntryPoint = "sqlite3_open_v2", CallingConventio...
method Open16 (line 2975) | [DllImport("sqlite3", EntryPoint = "sqlite3_open16", CallingConvention...
method EnableLoadExtension (line 2978) | [DllImport("sqlite3", EntryPoint = "sqlite3_enable_load_extension", Ca...
method Close (line 2981) | [DllImport("sqlite3", EntryPoint = "sqlite3_close", CallingConvention=...
method Initialize (line 2984) | [DllImport("sqlite3", EntryPoint = "sqlite3_initialize", CallingConven...
method Shutdown (line 2987) | [DllImport("sqlite3", EntryPoint = "sqlite3_shutdown", CallingConventi...
method Config (line 2990) | [DllImport("sqlite3", EntryPoint = "sqlite3_config", CallingConvention...
method SetDirectory (line 2993) | [DllImport("sqlite3", EntryPoint = "sqlite3_win32_set_directory", Call...
method BusyTimeout (line 2996) | [DllImport("sqlite3", EntryPoint = "sqlite3_busy_timeout", CallingConv...
method Changes (line 2999) | [DllImport("sqlite3", EntryPoint = "sqlite3_changes", CallingConventio...
method Prepare2 (line 3002) | [DllImport("sqlite3", EntryPoint = "sqlite3_prepare_v2", CallingConven...
method Prepare2 (line 3006) | [DllImport ("sqlite3", EntryPoint = "sqlite3_prepare_v2", CallingConve...
method Prepare2 (line 3010) | public static IntPtr Prepare2 (IntPtr db, string query)
method Step (line 3025) | [DllImport("sqlite3", EntryPoint = "sqlite3_step", CallingConvention=C...
method Reset (line 3028) | [DllImport("sqlite3", EntryPoint = "sqlite3_reset", CallingConvention=...
method Finalize (line 3031) | [DllImport("sqlite3", EntryPoint = "sqlite3_finalize", CallingConventi...
method LastInsertRowid (line 3034) | [DllImport("sqlite3", EntryPoint = "sqlite3_last_insert_rowid", Callin...
method Errmsg (line 3037) | [DllImport("sqlite3", EntryPoint = "sqlite3_errmsg16", CallingConventi...
method GetErrmsg (line 3040) | public static string GetErrmsg (IntPtr db)
method BindParameterIndex (line 3045) | [DllImport("sqlite3", EntryPoint = "sqlite3_bind_parameter_index", Cal...
method BindNull (line 3048) | [DllImport("sqlite3", EntryPoint = "sqlite3_bind_null", CallingConvent...
method BindInt (line 3051) | [DllImport("sqlite3", EntryPoint = "sqlite3_bind_int", CallingConventi...
method BindInt64 (line 3054) | [DllImport("sqlite3", EntryPoint = "sqlite3_bind_int64", CallingConven...
method BindDouble (line 3057) | [DllImport("sqlite3", EntryPoint = "sqlite3_bind_double", CallingConve...
method BindText (line 3060) | [DllImport("sqlite3", EntryPoint = "sqlite3_bind_text16", CallingConve...
method BindBlob (line 3063) | [DllImport("sqlite3", EntryPoint = "sqlite3_bind_blob", CallingConvent...
method ColumnCount (line 3066) | [DllImport("sqlite3", EntryPoint = "sqlite3_column_count", CallingConv...
method ColumnName (line 3069) | [DllImport("sqlite3", EntryPoint = "sqlite3_column_name", CallingConve...
method ColumnName16Internal (line 3072) | [DllImport("sqlite3", EntryPoint = "sqlite3_column_name16", CallingCon...
method ColumnName16 (line 3074) | public static string ColumnName16(IntPtr stmt, int index)
method ColumnType (line 3079) | [DllImport("sqlite3", EntryPoint = "sqlite3_column_type", CallingConve...
method ColumnInt (line 3082) | [DllImport("sqlite3", EntryPoint = "sqlite3_column_int", CallingConven...
method ColumnInt64 (line 3085) | [DllImport("sqlite3", EntryPoint = "sqlite3_column_int64", CallingConv...
method ColumnDouble (line 3088) | [DllImport("sqlite3", EntryPoint = "sqlite3_column_double", CallingCon...
method ColumnText (line 3091) | [DllImport("sqlite3", EntryPoint = "sqlite3_column_text", CallingConve...
method ColumnText16 (line 3094) | [DllImport("sqlite3", EntryPoint = "sqlite3_column_text16", CallingCon...
method ColumnBlob (line 3097) | [DllImport("sqlite3", EntryPoint = "sqlite3_column_blob", CallingConve...
method ColumnBytes (line 3100) | [DllImport("sqlite3", EntryPoint = "sqlite3_column_bytes", CallingConv...
method ColumnString (line 3103) | public static string ColumnString (IntPtr stmt, int index)
method ColumnByteArray (line 3108) | public static byte[] ColumnByteArray (IntPtr stmt, int index)
method ExtendedErrCode (line 3117) | [DllImport ("sqlite3", EntryPoint = "sqlite3_extended_errcode", Callin...
method LibVersionNumber (line 3120) | [DllImport ("sqlite3", EntryPoint = "sqlite3_libversion_number", Calli...
method Open (line 3123) | public static Result Open(string filename, out Sqlite3DatabaseHandle db)
method Open (line 3128) | public static Result Open(string filename, out Sqlite3DatabaseHandle d...
method Close (line 3137) | public static Result Close(Sqlite3DatabaseHandle db)
method BusyTimeout (line 3142) | public static Result BusyTimeout(Sqlite3DatabaseHandle db, int millise...
method Changes (line 3147) | public static int Changes(Sqlite3DatabaseHandle db)
method Prepare2 (line 3152) | public static Sqlite3Statement Prepare2(Sqlite3DatabaseHandle db, stri...
method Step (line 3168) | public static Result Step(Sqlite3Statement stmt)
method Reset (line 3173) | public static Result Reset(Sqlite3Statement stmt)
method Finalize (line 3178) | public static Result Finalize(Sqlite3Statement stmt)
method LastInsertRowid (line 3183) | public static long LastInsertRowid(Sqlite3DatabaseHandle db)
method GetErrmsg (line 3188) | public static string GetErrmsg(Sqlite3DatabaseHandle db)
method BindParameterIndex (line 3193) | public static int BindParameterIndex(Sqlite3Statement stmt, string name)
method BindNull (line 3198) | public static int BindNull(Sqlite3Statement stmt, int index)
method BindInt (line 3203) | public static int BindInt(Sqlite3Statement stmt, int index, int val)
method BindInt64 (line 3208) | public static int BindInt64(Sqlite3Statement stmt, int index, long val)
method BindDouble (line 3213) | public static int BindDouble(Sqlite3Statement stmt, int index, double ...
method BindText (line 3218) | public static int BindText(Sqlite3Statement stmt, int index, string va...
method BindBlob (line 3227) | public static int BindBlob(Sqlite3Statement stmt, int index, byte[] va...
method ColumnCount (line 3236) | public static int ColumnCount(Sqlite3Statement stmt)
method ColumnName (line 3241) | public static string ColumnName(Sqlite3Statement stmt, int index)
method ColumnName16 (line 3246) | public static string ColumnName16(Sqlite3Statement stmt, int index)
method ColumnType (line 3251) | public static ColType ColumnType(Sqlite3Statement stmt, int index)
method ColumnInt (line 3256) | public static int ColumnInt(Sqlite3Statement stmt, int index)
method ColumnInt64 (line 3261) | public static long ColumnInt64(Sqlite3Statement stmt, int index)
method ColumnDouble (line 3266) | public static double ColumnDouble(Sqlite3Statement stmt, int index)
method ColumnText (line 3271) | public static string ColumnText(Sqlite3Statement stmt, int index)
method ColumnText16 (line 3276) | public static string ColumnText16(Sqlite3Statement stmt, int index)
method ColumnBlob (line 3281) | public static byte[] ColumnBlob(Sqlite3Statement stmt, int index)
method ColumnBytes (line 3286) | public static int ColumnBytes(Sqlite3Statement stmt, int index)
method ColumnString (line 3291) | public static string ColumnString(Sqlite3Statement stmt, int index)
method ColumnByteArray (line 3296) | public static byte[] ColumnByteArray(Sqlite3Statement stmt, int index)
method EnableLoadExtension (line 3301) | public static Result EnableLoadExtension(Sqlite3DatabaseHandle db, int...
method ExtendedErrCode (line 3306) | public static ExtendedResult ExtendedErrCode(Sqlite3DatabaseHandle db)
type ColType (line 3312) | public enum ColType : int
FILE: Meridian/SQLiteAsync.cs
class SQLiteAsyncConnection (line 33) | public partial class SQLiteAsyncConnection
method SQLiteAsyncConnection (line 40) | public SQLiteAsyncConnection(string databasePath, bool storeDateTimeAs...
method SQLiteAsyncConnection (line 46) | public SQLiteAsyncConnection(string databasePath, SQLiteOpenFlags open...
method GetConnection (line 53) | SQLiteConnectionWithLock GetConnection ()
method CreateTableAsync (line 58) | public Task<CreateTablesResult> CreateTableAsync<T> ()
method CreateTablesAsync (line 64) | public Task<CreateTablesResult> CreateTablesAsync<T, T2> ()
method CreateTablesAsync (line 71) | public Task<CreateTablesResult> CreateTablesAsync<T, T2, T3> ()
method CreateTablesAsync (line 79) | public Task<CreateTablesResult> CreateTablesAsync<T, T2, T3, T4> ()
method CreateTablesAsync (line 88) | public Task<CreateTablesResult> CreateTablesAsync<T, T2, T3, T4, T5> ()
method CreateTablesAsync (line 98) | public Task<CreateTablesResult> CreateTablesAsync (params Type[] types)
method DropTableAsync (line 113) | public Task<int> DropTableAsync<T> ()
method InsertAsync (line 124) | public Task<int> InsertAsync (object item)
method UpdateAsync (line 134) | public Task<int> UpdateAsync (object item)
method DeleteAsync (line 144) | public Task<int> DeleteAsync (object item)
method GetAsync (line 154) | public Task<T> GetAsync<T>(object pk)
method FindAsync (line 167) | public Task<T> FindAsync<T> (object pk)
method GetAsync (line 178) | public Task<T> GetAsync<T> (Expression<Func<T, bool>> predicate)
method FindAsync (line 191) | public Task<T> FindAsync<T> (Expression<Func<T, bool>> predicate)
method ExecuteAsync (line 202) | public Task<int> ExecuteAsync (string query, params object[] args)
method InsertAllAsync (line 212) | public Task<int> InsertAllAsync (IEnumerable items)
method InsertOrReplaceAsync (line 222) | public Task<int> InsertOrReplaceAsync(object item)
method InsertOrIgnoreAsync (line 234) | public Task<int> InsertOrIgnoreAsync(object item)
method InsertOrReplaceAllAsync (line 246) | public Task<int> InsertOrReplaceAllAsync(IEnumerable items)
method InsertOrIgnoreAllAsync (line 258) | public Task<int> InsertOrIgnoreAllAsync(IEnumerable items)
method UpdateAllAsync (line 270) | public Task<int> UpdateAllAsync (IEnumerable items)
method DeleteAllAsync (line 280) | public Task<int> DeleteAllAsync<T>()
method RunInTransactionAsync (line 293) | [Obsolete("Will cause a deadlock if any call in action ends up in a di...
method RunInTransactionAsync (line 312) | public Task RunInTransactionAsync(Action<SQLiteConnection> action)
method Table (line 334) | public AsyncTableQuery<T> Table<T> ()
method ExecuteScalarAsync (line 345) | public Task<T> ExecuteScalarAsync<T> (string sql, params object[] args)
method QueryAsync (line 356) | public Task<List<T>> QueryAsync<T> (string sql, params object[] args)
class AsyncTableQuery (line 372) | public class AsyncTableQuery<T>
method AsyncTableQuery (line 377) | public AsyncTableQuery (TableQuery<T> innerQuery)
method Where (line 382) | public AsyncTableQuery<T> Where (Expression<Func<T, bool>> predExpr)
method Skip (line 387) | public AsyncTableQuery<T> Skip (int n)
method Take (line 392) | public AsyncTableQuery<T> Take (int n)
method OrderBy (line 397) | public AsyncTableQuery<T> OrderBy<U> (Expression<Func<T, U>> orderExpr)
method OrderByDescending (line 402) | public AsyncTableQuery<T> OrderByDescending<U> (Expression<Func<T, U>>...
method ToListAsync (line 407) | public Task<List<T>> ToListAsync ()
method CountAsync (line 416) | public Task<int> CountAsync ()
method ElementAtAsync (line 425) | public Task<T> ElementAtAsync (int index)
method FirstAsync (line 434) | public Task<T> FirstAsync ()
method FirstOrDefaultAsync (line 443) | public Task<T> FirstOrDefaultAsync ()
class CreateTablesResult (line 453) | public class CreateTablesResult
method CreateTablesResult (line 457) | internal CreateTablesResult ()
class SQLiteConnectionPool (line 463) | class SQLiteConnectionPool
class Entry (line 465) | class Entry
method Entry (line 470) | public Entry (SQLiteConnectionString connectionString, SQLiteOpenFla...
method OnApplicationSuspended (line 476) | public void OnApplicationSuspended ()
method GetConnection (line 499) | public SQLiteConnectionWithLock GetConnection (SQLiteConnectionString ...
method Reset (line 517) | public void Reset ()
method ApplicationSuspended (line 531) | public void ApplicationSuspended ()
class SQLiteConnectionWithLock (line 537) | class SQLiteConnectionWithLock : SQLiteConnection
method SQLiteConnectionWithLock (line 541) | public SQLiteConnectionWithLock (SQLiteConnectionString connectionStri...
method Lock (line 546) | public IDisposable Lock ()
class LockWrapper (line 551) | private class LockWrapper : IDisposable
method LockWrapper (line 555) | public LockWrapper (object lockPoint)
method Dispose (line 561) | public void Dispose ()
FILE: Meridian/Services/AccountManager.cs
class AccountManager (line 18) | public static class AccountManager
method AccountManager (line 30) | static AccountManager()
method Initialize (line 38) | private static void Initialize()
method LoginVk (line 47) | public static async Task LoginVk(string login, string password, string...
method SetLoginVk (line 73) | public static void SetLoginVk(VkAccessToken token)
method LoginLastFm (line 88) | public static async Task LoginLastFm(string login, string password)
method LogoutLastFm (line 106) | public static void LogoutLastFm()
method LogOutVk (line 115) | public static void LogOutVk()
method IsLoggedInLastFm (line 134) | public static bool IsLoggedInLastFm()
FILE: Meridian/Services/CacheService.cs
class CacheService (line 12) | public static class CacheService
method GetCachedImage (line 16) | public static async Task<ImageSource> GetCachedImage(string path)
method CacheImage (line 40) | public static async Task<ImageSource> CacheImage(string url, string path)
method GetSafeFileName (line 75) | public static string GetSafeFileName(string input)
method SaveStream (line 86) | private static async Task SaveStream(Stream stream, string fileName)
FILE: Meridian/Services/DataBaseService.cs
class DataBaseService (line 12) | public class DataBaseService
method DataBaseService (line 18) | public DataBaseService()
method Initialize (line 23) | public async Task Initialize()
method Clear (line 36) | public async Task Clear<T>() where T : new()
method SaveItems (line 43) | public async Task SaveItems<T>(IEnumerable<T> items) where T : new()
method SaveItem (line 50) | public async Task SaveItem<T>(T item) where T : new()
method GetItems (line 57) | public Task<List<T>> GetItems<T>() where T : new()
method UpdateItems (line 64) | public async Task UpdateItems(IEnumerable items)
method DeleteItems (line 71) | public async Task DeleteItems(IEnumerable items)
method Search (line 81) | public async Task<List<T>> Search<T>(Expression<Func<T, bool>> predica...
method GetLocalAlbumTracks (line 89) | public async Task<List<LocalAudio>> GetLocalAlbumTracks(string albumId)
method GetLocalArtistAlbums (line 98) | public async Task<List<AudioAlbum>> GetLocalArtistAlbums(string artistId)
method GetLocalArtistUnsortedTracks (line 108) | public async Task<List<LocalAudio>> GetLocalArtistUnsortedTracks(strin...
FILE: Meridian/Services/DataService.cs
class DataService (line 30) | public static class DataService
method DataService (line 35) | static DataService()
method GetUserInfo (line 41) | public static async Task<VkProfile> GetUserInfo()
method GetUserAlbums (line 59) | public static async Task<ItemsResponse<VkPlaylist>> GetUserAlbums(long...
method GetUserTracks (line 80) | public static async Task<ItemsResponse<VkAudio>> GetUserTracks(int cou...
method GetPopularTracks (line 110) | public static async Task<ItemsResponse<VkAudio>> GetPopularTracks(int ...
method GetFriends (line 121) | public static async Task<ItemsResponse<VkProfile>> GetFriends(int coun...
method GetSubscriptions (line 132) | public static async Task<ItemsResponse<VkProfile>> GetSubscriptions(in...
method GetSocieties (line 147) | public static async Task<ItemsResponse<VkGroup>> GetSocieties(int coun...
method GetRecommendations (line 158) | public static async Task<List<VkAudio>> GetRecommendations(int count =...
method GetArtistImage (line 172) | public static async Task<Uri> GetArtistImage(string artist, bool big)
method GetTrackImage (line 192) | public static async Task<Uri> GetTrackImage(string artist, string title)
method GetTagTopTracks (line 204) | public static async Task<List<VkAudio>> GetTagTopTracks(string tag, in...
method GetAudioByArtistAndTitle (line 216) | public static async Task<VkAudio> GetAudioByArtistAndTitle(string arti...
method SearchAudio (line 253) | public static async Task<List<VkAudio>> SearchAudio(string query, int ...
method SearchAlbums (line 267) | public static async Task<List<LastFmAlbum>> SearchAlbums(string query)
method SearchArtists (line 274) | public static async Task<List<LastFmArtist>> SearchArtists(string query)
method GetAlbumInfo (line 281) | public static async Task<LastFmAlbum> GetAlbumInfo(string id, string n...
method GetArtistInfo (line 287) | public static async Task<LastFmArtist> GetArtistInfo(string id, string...
method GetArtistAlbums (line 294) | public static async Task<List<LastFmAlbum>> GetArtistAlbums(string id,...
method GetArtistTopTracks (line 301) | public static async Task<List<VkAudio>> GetArtistTopTracks(string id, ...
method GetNewsAudio (line 313) | public static async Task<NewsItemsResponse<Audio>> GetNewsAudio(int co...
method GetWallAudio (line 437) | public static async Task<List<Audio>> GetWallAudio(int count, int offs...
method GetFavoritesAudio (line 569) | public static async Task<List<Audio>> GetFavoritesAudio(int count, int...
method SetMusicStatus (line 689) | public static async Task<bool> SetMusicStatus(VkAudio audio, List<long...
method AddAudio (line 699) | public static async Task<bool> AddAudio(VkAudio audio, string captchaS...
method RemoveAudio (line 727) | public static async Task<bool> RemoveAudio(VkAudio audio)
method GetLyrics (line 738) | public static async Task<string> GetLyrics(string lyricsId)
method EditAudio (line 744) | public static async Task<string> EditAudio(string audioId, string owne...
method UpdateNowPlaying (line 750) | public static async Task<bool> UpdateNowPlaying(Audio audio)
method Scrobble (line 756) | public static async Task<bool> Scrobble(Audio audio)
method GetArtistsFromTracks (line 764) | public static Task<List<AudioArtist>> GetArtistsFromTracks(IEnumerable...
method CopyAlbum (line 794) | public static async Task CopyAlbum(string title, long albumId, long ow...
method RemoveCorruptedTracks (line 870) | private static IEnumerable<VkAudio> RemoveCorruptedTracks(IEnumerable<...
FILE: Meridian/Services/HostService.cs
class HostService (line 11) | public class HostService
method Update (line 13) | public static async Task Update()
FILE: Meridian/Services/LoggingService.cs
class LoggingService (line 8) | public static class LoggingService
method Log (line 12) | public static void Log(string message)
method Log (line 19) | public static void Log(Exception ex)
FILE: Meridian/Services/Media/AudioService.cs
class AudioService (line 26) | public static class AudioService
method AudioService (line 207) | static AudioService()
method Play (line 216) | public static void Play(Audio track)
method PlayInternal (line 222) | private async static void PlayInternal(Audio track, CancellationToken ...
method Play (line 311) | public static void Play()
method PlayNext (line 327) | public static void PlayNext(Audio audio)
method Pause (line 345) | public static void Pause()
method Stop (line 352) | public static void Stop()
method FastForward (line 359) | public static void FastForward(int step)
method Rewind (line 367) | public static void Rewind(int step)
method SkipNext (line 378) | public static void SkipNext()
method SwitchNext (line 390) | public static void SwitchNext()
method Next (line 395) | private static void Next(bool invokedByUser = false)
method Prev (line 431) | public static void Prev()
method SetCurrentPlaylist (line 456) | public static void SetCurrentPlaylist(IEnumerable<Audio> playlist, boo...
method Load (line 466) | public static Task Load()
method Save (line 504) | public static void Save()
method Clear (line 523) | public static void Clear()
method Dispose (line 536) | public static void Dispose()
method NotifyAudioChanged (line 542) | private static void NotifyAudioChanged(Audio oldAudio = null)
method PositionTimerTick (line 551) | private static void PositionTimerTick(object sender, object e)
method CancelAsync (line 568) | private static void CancelAsync()
method MediaPlayerOnMediaOpened (line 574) | private static void MediaPlayerOnMediaOpened(object sender, EventArgs e)
method MediaPlayerOnMediaFailed (line 580) | private static void MediaPlayerOnMediaFailed(object sender, Exception e)
method MediaPlayerOnMediaEnded (line 621) | private static void MediaPlayerOnMediaEnded(object sender, EventArgs e)
FILE: Meridian/Services/Media/Core/MediaPlayerBase.cs
type MediaEngine (line 9) | public enum MediaEngine
class MediaPlayerBase (line 25) | public abstract class MediaPlayerBase : IDisposable
method Initialize (line 39) | public abstract void Initialize();
method Play (line 40) | public abstract void Play();
method Pause (line 41) | public abstract void Pause();
method Stop (line 42) | public abstract void Stop();
method UpdateTransportControls (line 44) | public virtual void UpdateTransportControls(Audio currentTrack)
method Dispose (line 49) | public abstract void Dispose();
FILE: Meridian/Services/Media/Core/NaudioMediaPlayer.cs
class NaudioMediaPlayer (line 14) | public class NaudioMediaPlayer : MediaPlayerBase
method Initialize (line 82) | public override void Initialize()
method Dispose (line 87) | public override void Dispose()
method SwitchNext (line 108) | private void SwitchNext()
method Play (line 114) | public async override void Play()
method Pause (line 126) | public override void Pause()
method Stop (line 131) | public override void Stop()
method InitSource (line 136) | private async Task InitSource()
method _wavePlayer_PlaybackStopped (line 179) | void _wavePlayer_PlaybackStopped(object sender, StoppedEventArgs e)
FILE: Meridian/Services/Media/Core/UwpMediaPlayer.cs
class UwpMediaPlayer (line 12) | public class UwpMediaPlayer : MediaPlayerBase
method Initialize (line 53) | public override void Initialize()
method Play (line 61) | public override void Play()
method Pause (line 66) | public override void Pause()
method Stop (line 71) | public override void Stop()
method Dispose (line 76) | public override void Dispose()
method MediaPlayerOnMediaOpened (line 85) | private void MediaPlayerOnMediaOpened(MediaPlayer sender, object e)
method MediaPlayerOnMediaFailed (line 91) | private void MediaPlayerOnMediaFailed(MediaPlayer sender, MediaPlayerF...
method MediaPlayerOnMediaEnded (line 97) | private void MediaPlayerOnMediaEnded(MediaPlayer sender, object e)
method UpdateTransportControls (line 103) | public override void UpdateTransportControls(Audio currentTrack)
FILE: Meridian/Services/Media/Core/WmpMediaPlayer.cs
class WmpMediaPlayer (line 13) | public class WmpMediaPlayer : MediaPlayerBase
method Initialize (line 46) | public override void Initialize()
method Play (line 54) | public override void Play()
method Pause (line 59) | public override void Pause()
method Stop (line 64) | public override void Stop()
method Dispose (line 69) | public override void Dispose()
method MediaPlayerOnMediaOpened (line 78) | private void MediaPlayerOnMediaOpened(object sender, EventArgs e)
method MediaPlayerOnMediaFailed (line 84) | private void MediaPlayerOnMediaFailed(object sender, ExceptionEventArg...
method MediaPlayerOnMediaEnded (line 90) | private void MediaPlayerOnMediaEnded(object sender, EventArgs e)
FILE: Meridian/Services/Music/LocalMusicService.cs
class LocalMusicService (line 15) | public class LocalMusicService
method LocalMusicService (line 22) | public LocalMusicService()
method ScanMusic (line 29) | public async Task ScanMusic(IProgress<double> progress)
method ScanMusicCancel (line 134) | public void ScanMusicCancel()
method GetTracks (line 141) | public async Task<List<LocalAudio>> GetTracks()
method GetAlbumTracks (line 146) | public async Task<List<LocalAudio>> GetAlbumTracks(string albumId)
method GetAlbums (line 151) | public async Task<List<AudioAlbum>> GetAlbums()
method GetArtists (line 156) | public async Task<List<AudioArtist>> GetArtists()
method GetArtistAlbums (line 161) | public async Task<List<AudioAlbum>> GetArtistAlbums(string artistId)
method GetArtistUnsortedTracks (line 166) | public async Task<List<LocalAudio>> GetArtistUnsortedTracks(string art...
method SearchTracks (line 171) | public async Task<List<LocalAudio>> SearchTracks(string query)
method SearchAlbums (line 187) | public async Task<List<AudioAlbum>> SearchAlbums(string query)
method SearchArtists (line 201) | public async Task<List<AudioArtist>> SearchArtists(string query)
method Clear (line 214) | public async Task Clear()
FILE: Meridian/Services/Music/Repositories/LocalAlbumsRepository.cs
class LocalAlbumsRepository (line 13) | public class LocalAlbumsRepository
method LocalAlbumsRepository (line 17) | public LocalAlbumsRepository()
method Get (line 22) | public async Task<List<AudioAlbum>> Get()
method Refresh (line 37) | public async Task<Tuple<List<AudioAlbum>, List<AudioAlbum>, List<Audio...
method GetFromLibrary (line 79) | private Task<List<AudioAlbum>> GetFromLibrary()
method UpdateAlbum (line 143) | private bool UpdateAlbum(AudioAlbum cachedAlbum, AudioAlbum updatedAlbum)
method AlbumsRepositoryUpdated (line 180) | private async void AlbumsRepositoryUpdated(Tuple<List<AudioAlbum>, Lis...
FILE: Meridian/Services/Music/Repositories/LocalArtistsRepository.cs
class LocalArtistsRepository (line 13) | public class LocalArtistsRepository
method LocalArtistsRepository (line 17) | public LocalArtistsRepository()
method Get (line 22) | public async Task<List<AudioArtist>> Get()
method Refresh (line 37) | public async Task<Tuple<List<AudioArtist>, List<AudioArtist>, List<Aud...
method GetFromLibrary (line 77) | private Task<List<AudioArtist>> GetFromLibrary()
method UpdateArtist (line 127) | private bool UpdateArtist(AudioArtist cachedArtist, AudioArtist update...
method ArtistsRepositoryUpdated (line 140) | private async void ArtistsRepositoryUpdated(Tuple<List<AudioArtist>, L...
FILE: Meridian/Services/Music/Repositories/LocalTracksRepository.cs
class LocalTracksRepository (line 14) | public class LocalTracksRepository
method GetTracks (line 18) | public async Task<List<LocalAudio>> GetTracks()
method Refresh (line 33) | public async Task<Tuple<List<LocalAudio>, List<LocalAudio>, List<Local...
method GetFromLibrary (line 75) | private Task<List<LocalAudio>> GetFromLibrary()
method UpdateTrack (line 141) | private bool UpdateTrack(LocalAudio cachedTrack, LocalAudio updatedTrack)
method TracksRepositoryUpdated (line 184) | private async void TracksRepositoryUpdated(Tuple<List<LocalAudio>, Lis...
FILE: Meridian/Services/NotificationService.cs
class NotificationService (line 5) | public static class NotificationService
method Initialize (line 9) | public static void Initialize(NotificationControl control)
method Notify (line 14) | public static void Notify(string message)
method NotifyProgressStarted (line 19) | public static void NotifyProgressStarted(string message = null)
method NotifyProgressChanged (line 27) | public static void NotifyProgressChanged(int progress, string message ...
method NotifyProgressFinished (line 35) | public static void NotifyProgressFinished(string message = null)
FILE: Meridian/Services/ServiceLocator.cs
class ServiceLocator (line 8) | public static class ServiceLocator
FILE: Meridian/Services/UpdateService.cs
class UpdateService (line 14) | public class UpdateService : INotifyPropertyChanged
method CheckUpdates (line 91) | public async void CheckUpdates()
method Clean (line 134) | public void Clean()
method UpdateInternal (line 153) | private void UpdateInternal(string path)
method webClient_DownloadFileCompleted (line 168) | private void webClient_DownloadFileCompleted(object sender, AsyncCompl...
method webClient_DownloadProgressChanged (line 195) | private void webClient_DownloadProgressChanged(object sender, Download...
method Unpack (line 200) | private void Unpack(string path, string file)
method OnPropertyChanged (line 253) | protected virtual void OnPropertyChanged(string propertyName = null)
FILE: Meridian/View/Compact/CompactLandscapeView.xaml.cs
class CompactLandscapeView (line 14) | public partial class CompactLandscapeView : Window, INotifyPropertyChanged
method CompactLandscapeView (line 32) | public CompactLandscapeView()
method CompactView_OnMouseMove (line 40) | private void CompactView_OnMouseMove(object sender, MouseEventArgs e)
method OnPropertyChanged (line 52) | protected virtual void OnPropertyChanged(string propertyName = null)
method CompactView_OnLoaded (line 58) | private void CompactView_OnLoaded(object sender, RoutedEventArgs e)
method ButtonBase_OnClick (line 66) | private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
method UIElement_OnMouseWheel (line 71) | private void UIElement_OnMouseWheel(object sender, MouseWheelEventArgs e)
method CompactLandscapeView_OnStateChanged (line 87) | private void CompactLandscapeView_OnStateChanged(object sender, EventA...
FILE: Meridian/View/Compact/CompactView.xaml.cs
class CompactView (line 13) | public partial class CompactView : Window, INotifyPropertyChanged
method CompactView (line 31) | public CompactView()
method CompactView_OnMouseMove (line 39) | private void CompactView_OnMouseMove(object sender, MouseEventArgs e)
method OnPropertyChanged (line 51) | protected virtual void OnPropertyChanged(string propertyName = null)
method CompactView_OnLoaded (line 57) | private void CompactView_OnLoaded(object sender, RoutedEventArgs e)
method ButtonBase_OnClick (line 63) | private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
method UIElement_OnMouseWheel (line 68) | private void UIElement_OnMouseWheel(object sender, MouseWheelEventArgs e)
method CompactView_OnStateChanged (line 84) | private void CompactView_OnStateChanged(object sender, EventArgs e)
FILE: Meridian/View/Flyouts/AddSocietyFlyout.xaml.cs
class AddSocietyFlyout (line 24) | public partial class AddSocietyFlyout : UserControl, INotifyPropertyChanged
method AddSocietyFlyout (line 54) | public AddSocietyFlyout()
method InitializeCommands (line 64) | private void InitializeCommands()
method LoadSocieties (line 72) | private async void LoadSocieties()
method CloseButtonClick (line 96) | private void CloseButtonClick(object sender, RoutedEventArgs e)
method Close (line 101) | private void Close(object result = null)
method OnPropertyChanged (line 110) | protected virtual void OnPropertyChanged([CallerMemberName] string pro...
method OnTaskStarted (line 116) | private void OnTaskStarted(string id)
method OnTaskFinished (line 122) | private void OnTaskFinished(string id)
method OnTaskError (line 127) | private void OnTaskError(string id, string error)
FILE: Meridian/View/Flyouts/AddToAlbumView.xaml.cs
class AddToAlbumView (line 20) | public partial class AddToAlbumView : UserControl, INotifyPropertyChanged
method AddToAlbumView (line 38) | public AddToAlbumView(VkAudio track)
method Close (line 46) | private void Close(bool result = false)
method OnPropertyChanged (line 55) | protected virtual void OnPropertyChanged(string propertyName = null)
method AddToAlbumView_OnLoaded (line 62) | private async void AddToAlbumView_OnLoaded(object sender, RoutedEventA...
method CloseButtonClick (line 78) | private void CloseButtonClick(object sender, RoutedEventArgs e)
method AddButtonClick (line 83) | private async void AddButtonClick(object sender, RoutedEventArgs e)
method AddNewAlbum (line 122) | private async Task<VkAudioAlbum> AddNewAlbum(string title)
FILE: Meridian/View/Flyouts/CaptchaRequestView.xaml.cs
class CaptchaRequestView (line 15) | public partial class CaptchaRequestView : UserControl
method CaptchaRequestView (line 21) | public CaptchaRequestView(string captchaSid, string captchaImg)
method CloseButtonClick (line 33) | private void CloseButtonClick(object sender, RoutedEventArgs e)
method SaveButtonClick (line 38) | private void SaveButtonClick(object sender, RoutedEventArgs e)
method Close (line 44) | private void Close(string result = null)
method CaptchaTextBox_OnKeyUp (line 51) | private void CaptchaTextBox_OnKeyUp(object sender, KeyEventArgs e)
method CaptchaRequestView_OnLoaded (line 59) | private void CaptchaRequestView_OnLoaded(object sender, RoutedEventArg...
FILE: Meridian/View/Flyouts/CommonErrorView.xaml.cs
class CommonErrorView (line 12) | public partial class CommonErrorView : UserControl
method CommonErrorView (line 14) | public CommonErrorView()
method CommonErrorView (line 19) | public CommonErrorView(string title, string description) : this()
method RestartButton_OnClick (line 25) | private void RestartButton_OnClick(object sender, RoutedEventArgs e)
method CloseButton_OnClick (line 30) | private void CloseButton_OnClick(object sender, RoutedEventArgs e)
method Close (line 35) | private void Close(bool now = false, bool restart = false)
FILE: Meridian/View/Flyouts/CommonMessageView.xaml.cs
class CommonMessageView (line 12) | public partial class CommonMessageView : UserControl
method CommonMessageView (line 32) | public CommonMessageView()
method OkButton_OnClick (line 37) | private void OkButton_OnClick(object sender, RoutedEventArgs e)
method Close (line 42) | private void Close(bool now = false)
FILE: Meridian/View/Flyouts/EditAlbumView.xaml.cs
class EditAlbumView (line 14) | public partial class EditAlbumView : UserControl
method EditAlbumView (line 18) | public EditAlbumView(VkPlaylist album)
method CloseButtonClick (line 30) | private void CloseButtonClick(object sender, RoutedEventArgs e)
method Close (line 35) | private void Close(bool result = false)
method SaveButtonClick (line 42) | private void SaveButtonClick(object sender, RoutedEventArgs e)
FILE: Meridian/View/Flyouts/EditAudioView.xaml.cs
class EditAudioView (line 11) | public partial class EditAudioView : UserControl
method EditAudioView (line 15) | public EditAudioView(VkAudio audio)
FILE: Meridian/View/Flyouts/Local/MusicScanView.xaml.cs
class MusicScanView (line 14) | public partial class MusicScanView : FlyoutContent, INotifyPropertyChanged
method MusicScanView (line 43) | public MusicScanView()
method InitializeCommands (line 51) | private void InitializeCommands()
method Load (line 60) | private async void Load()
method UpdateProgress (line 66) | private void UpdateProgress(double progress)
method OnPropertyChanged (line 73) | protected virtual void OnPropertyChanged([CallerMemberName] string pro...
FILE: Meridian/View/Flyouts/LoginLastFmMessageView.xaml.cs
class LoginLastFmMessageView (line 16) | public partial class LoginLastFmMessageView : UserControl
method LoginLastFmMessageView (line 18) | public LoginLastFmMessageView()
method CancelButtonClick (line 23) | private void CancelButtonClick(object sender, RoutedEventArgs e)
method SettingsButtonClick (line 28) | private void SettingsButtonClick(object sender, RoutedEventArgs e)
method Close (line 44) | private void Close(bool now = false)
FILE: Meridian/View/Flyouts/LoginLastFmView.xaml.cs
class LoginLastFmView (line 11) | public partial class LoginLastFmView : UserControl
method LoginLastFmView (line 15) | public LoginLastFmView()
method LoginTextBox_OnKeyUp (line 23) | private void LoginTextBox_OnKeyUp(object sender, KeyEventArgs e)
method PasswordBox_OnKeyUp (line 41) | private void PasswordBox_OnKeyUp(object sender, KeyEventArgs e)
FILE: Meridian/View/Flyouts/LyricsView.xaml.cs
class LyricsView (line 15) | public partial class LyricsView : UserControl
method LyricsView (line 19) | public LyricsView(VkAudio audio)
method Close (line 28) | private void Close(bool now = false)
method ButtonBase_OnClick (line 40) | private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
FILE: Meridian/View/Flyouts/ShareView.xaml.cs
class ShareView (line 8) | public partial class ShareView : UserControl
method ShareView (line 10) | public ShareView()
FILE: Meridian/View/Flyouts/TellFriendsRequestView.xaml.cs
class TellFriendsRequestView (line 17) | public partial class TellFriendsRequestView : UserControl
method TellFriendsRequestView (line 19) | public TellFriendsRequestView()
method Close (line 24) | private void Close(bool now = false)
method TellButton_OnClick (line 36) | private void TellButton_OnClick(object sender, RoutedEventArgs e)
method CancelButton_OnClick (line 42) | private void CancelButton_OnClick(object sender, RoutedEventArgs e)
method Tell (line 47) | private async void Tell()
FILE: Meridian/View/Flyouts/TellResultView.xaml.cs
class TellResultView (line 14) | public partial class TellResultView : UserControl
method TellResultView (line 18) | public TellResultView(long postId)
method CancelButton_OnClick (line 25) | private void CancelButton_OnClick(object sender, RoutedEventArgs e)
method GoToPostButton_OnClick (line 30) | private void GoToPostButton_OnClick(object sender, RoutedEventArgs e)
method Close (line 38) | private void Close()
FILE: Meridian/View/Flyouts/WebValidationView.xaml.cs
class WebValidationView (line 19) | public partial class WebValidationView : UserControl
method WebValidationView (line 23) | public WebValidationView(Uri redirectUri)
method EnableIE11Mode (line 32) | private void EnableIE11Mode()
method ButtonBase_OnClick (line 50) | private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
method WebValidationView_OnLoaded (line 55) | private void WebValidationView_OnLoaded(object sender, RoutedEventArgs e)
method Close (line 61) | private void Close(object result = null, bool now = false)
method Browser_OnNavigated (line 73) | private void Browser_OnNavigated(object sender, NavigationEventArgs e)
method Browser_OnNavigating (line 81) | private void Browser_OnNavigating(object sender, NavigatingCancelEvent...
FILE: Meridian/View/Local/LocalAlbumView.xaml.cs
class LocalAlbumView (line 12) | public partial class LocalAlbumView : PageBase
method LocalAlbumView (line 16) | public LocalAlbumView()
method OnNavigatedTo (line 25) | public override void OnNavigatedTo()
method LocalAlbumView_OnLoaded (line 33) | private void LocalAlbumView_OnLoaded(object sender, RoutedEventArgs e)
FILE: Meridian/View/Local/LocalCollectionView.xaml.cs
class LocalCollectionView (line 12) | public partial class LocalCollectionView : Page
method LocalCollectionView (line 16) | public LocalCollectionView()
method MenuItem_OnClick (line 24) | private void MenuItem_OnClick(object sender, RoutedEventArgs e)
method LocalSearchItem_OnClick (line 29) | private void LocalSearchItem_OnClick(object sender, RoutedEventArgs e)
method Filter (line 35) | private bool Filter(object o)
method LocalCollectionView_OnLoaded (line 42) | private void LocalCollectionView_OnLoaded(object sender, RoutedEventAr...
FILE: Meridian/View/Main/FeedView.xaml.cs
class FeedView (line 9) | public partial class FeedView : PageBase
method FeedView (line 13) | public FeedView()
FILE: Meridian/View/Main/LoginView.xaml.cs
class LoginView (line 11) | public partial class LoginView : PageBase
method LoginView (line 15) | public LoginView()
method LoginTextBox_OnKeyUp (line 23) | private void LoginTextBox_OnKeyUp(object sender, KeyEventArgs e)
method PasswordBox_OnKeyUp (line 41) | private void PasswordBox_OnKeyUp(object sender, KeyEventArgs e)
method OnNavigatedTo (line 59) | public override void OnNavigatedTo()
FILE: Meridian/View/Main/MusicView.xaml.cs
class MusicView (line 11) | public partial class MusicView : PageBase
method MusicView (line 15) | public MusicView()
method LocalSearchItem_OnClick (line 25) | private void LocalSearchItem_OnClick(object sender, RoutedEventArgs e)
method Filter (line 30) | private bool Filter(object o)
FILE: Meridian/View/Main/NowPlayingView.xaml.cs
class NowPlayingView (line 12) | public partial class NowPlayingView : Page
method NowPlayingView (line 14) | public NowPlayingView()
method MenuItem_OnClick (line 21) | private void MenuItem_OnClick(object sender, RoutedEventArgs e)
method NowPlayingView_OnLoaded (line 26) | private void NowPlayingView_OnLoaded(object sender, RoutedEventArgs e)
method NowPlayingView_OnUnloaded (line 33) | private void NowPlayingView_OnUnloaded(object sender, RoutedEventArgs e)
method LocalSearchItem_OnClick (line 38) | private void LocalSearchItem_OnClick(object sender, RoutedEventArgs e)
method Filter (line 44) | private bool Filter(object o)
FILE: Meridian/View/Main/PopularAudioView.xaml.cs
class PopularAudioView (line 11) | public partial class PopularAudioView : PageBase
method PopularAudioView (line 15) | public PopularAudioView()
method OnNavigatedTo (line 23) | public override void OnNavigatedTo()
method Filter (line 30) | private bool Filter(object o)
method LocalSearchItem_OnClick (line 37) | private void LocalSearchItem_OnClick(object sender, RoutedEventArgs e)
FILE: Meridian/View/Main/RecommendationsView.xaml.cs
class RecommendationsView (line 14) | public partial class RecommendationsView : PageBase
method RecommendationsView (line 18) | public RecommendationsView()
method RecommendationsView_OnLoaded (line 26) | private void RecommendationsView_OnLoaded(object sender, RoutedEventAr...
method LocalSearchItem_OnClick (line 31) | private void LocalSearchItem_OnClick(object sender, RoutedEventArgs e)
method Filter (line 36) | private bool Filter(object o)
FILE: Meridian/View/People/FriendsAudioView.xaml.cs
class FriendAudioView (line 14) | public partial class FriendAudioView : PageBase
method FriendAudioView (line 18) | public FriendAudioView()
method OnNavigatedTo (line 26) | public override void OnNavigatedTo()
method FriendAudioView_OnUnloaded (line 36) | private void FriendAudioView_OnUnloaded(object sender, RoutedEventArgs e)
method MenuItem_OnClick (line 41) | private void MenuItem_OnClick(object sender, RoutedEventArgs e)
method LocalSearchItem_OnClick (line 46) | private void LocalSearchItem_OnClick(object sender, RoutedEventArgs e)
method Filter (line 52) | private bool Filter(object o)
FILE: Meridian/View/People/FriendsView.xaml.cs
class FriendsView (line 12) | public partial class FriendsView : PageBase
method FriendsView (line 16) | public FriendsView()
method FriendsView_OnLoaded (line 24) | private void FriendsView_OnLoaded(object sender, RoutedEventArgs e)
method LocalSearchItem_OnClick (line 31) | private void LocalSearchItem_OnClick(object sender, RoutedEventArgs e)
method Filter (line 36) | private bool Filter(object o)
FILE: Meridian/View/People/SocietiesView.xaml.cs
class SocietiesView (line 12) | public partial class SocietiesView : PageBase
method SocietiesView (line 16) | public SocietiesView()
method SocietiesView_OnLoaded (line 24) | private void SocietiesView_OnLoaded(object sender, RoutedEventArgs e)
method LocalSearchItem_OnClick (line 31) | private void LocalSearchItem_OnClick(object sender, RoutedEventArgs e)
method Filter (line 36) | private bool Filter(object o)
FILE: Meridian/View/People/SocietyAudioView.xaml.cs
class SocietyAudioView (line 14) | public partial class SocietyAudioView : PageBase
method SocietyAudioView (line 18) | public SocietyAudioView()
method OnNavigatedTo (line 27) | public override void OnNavigatedTo()
method SocietyAudioView_OnUnloaded (line 37) | private void SocietyAudioView_OnUnloaded(object sender, RoutedEventArg...
method MenuItem_OnClick (line 42) | private void MenuItem_OnClick(object sender, RoutedEventArgs e)
method LocalSearchItem_OnClick (line 47) | private void LocalSearchItem_OnClick(object sender, RoutedEventArgs e)
method Filter (line 53) | private bool Filter(object o)
FILE: Meridian/View/People/SubscriptionsView.xaml.cs
class SubscriptionsView (line 10) | public partial class SubscriptionsView : PageBase
method SubscriptionsView (line 14) | public SubscriptionsView()
method SubscriptionsView_OnLoaded (line 22) | private void SubscriptionsView_OnLoaded(object sender, RoutedEventArgs e)
FILE: Meridian/View/Search/AlbumView.xaml.cs
class AlbumView (line 13) | public partial class AlbumView : PageBase
method AlbumView (line 17) | public AlbumView()
method OnNavigatedTo (line 25) | public override void OnNavigatedTo()
method MenuItem_OnClick (line 33) | private void MenuItem_OnClick(object sender, RoutedEventArgs e)
FILE: Meridian/View/Search/ArtistAlbumsView.xaml.cs
class ArtistAlbumsView (line 12) | public partial class ArtistAlbumsView : PageBase
method ArtistAlbumsView (line 14) | public ArtistAlbumsView()
method OnNavigatedTo (line 19) | public override void OnNavigatedTo()
method MenuItem_OnClick (line 25) | private void MenuItem_OnClick(object sender, RoutedEventArgs e)
FILE: Meridian/View/Search/ArtistAudioView.xaml.cs
class ArtistAudioView (line 12) | public partial class ArtistAudioView : PageBase
method ArtistAudioView (line 14) | public ArtistAudioView()
method OnNavigatedTo (line 19) | public override void OnNavigatedTo()
method MenuItem_OnClick (line 25) | private void MenuItem_OnClick(object sender, RoutedEventArgs e)
FILE: Meridian/View/Search/ArtistView.xaml.cs
class ArtistView (line 13) | public partial class ArtistView : PageBase
method ArtistView (line 17) | public ArtistView()
method OnNavigatedTo (line 25) | public override void OnNavigatedTo()
method MenuItem_OnClick (line 33) | private void MenuItem_OnClick(object sender, RoutedEventArgs e)
FILE: Meridian/View/Search/SearchResultsView.xaml.cs
class SearchResultsView (line 9) | public partial class SearchResultsView : PageBase
method SearchResultsView (line 13) | public SearchResultsView()
method OnNavigatedTo (line 21) | public override void OnNavigatedTo()
FILE: Meridian/View/Settings/SettingsAboutView.xaml.cs
class SettingsAboutView (line 10) | public partial class SettingsAboutView : Page
method SettingsAboutView (line 12) | public SettingsAboutView()
method SiteLink_OnMouseLeftButtonUp (line 17) | private void SiteLink_OnMouseLeftButtonUp(object sender, MouseButtonEv...
method LastFmLink_OnMouseLeftButtonUp (line 22) | private void LastFmLink_OnMouseLeftButtonUp(object sender, MouseButton...
method EchonestLink_OnMouseLeftButtonUp (line 27) | private void EchonestLink_OnMouseLeftButtonUp(object sender, MouseButt...
method NAudioLink_OnMouseLeftButtonUp (line 32) | private void NAudioLink_OnMouseLeftButtonUp(object sender, MouseButton...
FILE: Meridian/View/Settings/SettingsAccountsView.xaml.cs
class SettingsAccountsView (line 8) | public partial class SettingsAccountsView : Page
method SettingsAccountsView (line 10) | public SettingsAccountsView()
FILE: Meridian/View/Settings/SettingsHotkeysView.xaml.cs
class SettingsHotkeysView (line 11) | public partial class SettingsHotkeysView : Page
method SettingsHotkeysView (line 15) | public SettingsHotkeysView()
method SettingsHotkeysView_OnDataContextChanged (line 20) | private void SettingsHotkeysView_OnDataContextChanged(object sender, D...
method HotkeyTextBoxOnPreviewKeyDown (line 25) | private void HotkeyTextBoxOnPreviewKeyDown(object sender, KeyEventArgs e)
method CheckBoxOnClick (line 50) | private void CheckBoxOnClick(object sender, RoutedEventArgs e)
FILE: Meridian/View/Settings/SettingsRemotePlayView.xaml.cs
class SettingsRemotePlayView (line 8) | public partial class SettingsRemotePlayView : Page
method SettingsRemotePlayView (line 10) | public SettingsRemotePlayView()
FILE: Meridian/View/Settings/SettingsUIView.xaml.cs
class SettingsUIView (line 8) | public partial class SettingsUIView : Page
method SettingsUIView (line 10) | public SettingsUIView()
FILE: Meridian/View/Settings/SettingsUpdatesView.xaml.cs
class SettingsUpdatesView (line 8) | public partial class SettingsUpdatesView : Page
method SettingsUpdatesView (line 10) | public SettingsUpdatesView()
FILE: Meridian/View/Settings/SettingsView.xaml.cs
class SettingsView (line 12) | public partial class SettingsView : PageBase
method SettingsView (line 17) | public SettingsView()
method SettingsView_OnLoaded (line 25) | private void SettingsView_OnLoaded(object sender, RoutedEventArgs e)
method OnNavigatedTo (line 30) | public override void OnNavigatedTo()
method OnNavigatedFrom (line 44) | public override void OnNavigatedFrom()
method SettingsFrame_OnNavigated (line 49) | private void SettingsFrame_OnNavigated(object sender, NavigationEventA...
FILE: Meridian/View/TrackNotifcationView.xaml.cs
class TrackNotifcationView (line 14) | public partial class TrackNotifcationView : Window, INotifyPropertyChanged
method TrackNotifcationView (line 33) | public TrackNotifcationView(Audio track)
method ButtonBase_OnClick (line 44) | private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
method Close (line 49) | private new void Close()
method ResetTimer (line 58) | private void ResetTimer()
method TrackNotifcationView_OnSourceInitialized (line 64) | private void TrackNotifcationView_OnSourceInitialized(object sender, E...
method _timer_Tick (line 76) | void _timer_Tick(object sender, EventArgs e)
method CloseAnim_OnCompleted (line 81) | private void CloseAnim_OnCompleted(object sender, EventArgs e)
method OnPropertyChanged (line 88) | protected virtual void OnPropertyChanged(string propertyName = null)
method TrackNotifcationView_OnMouseLeftButtonUp (line 94) | private void TrackNotifcationView_OnMouseLeftButtonUp(object sender, M...
FILE: Meridian/ViewModel/Flyouts/EditAudioViewModel.cs
class EditAudioViewModel (line 13) | public class EditAudioViewModel : ViewModelBase
method EditAudioViewModel (line 61) | public EditAudioViewModel()
method InitializeCommands (line 66) | private void InitializeCommands()
method Load (line 73) | private async void Load()
method LoadLyrics (line 87) | private async Task LoadLyrics()
method Save (line 104) | private async void Save()
method Close (line 130) | private void Close()
FILE: Meridian/ViewModel/Flyouts/LoginLastFmViewModel.cs
class LoginLastFmViewModel (line 13) | public class LoginLastFmViewModel : ViewModelBase
method LoginLastFmViewModel (line 71) | public LoginLastFmViewModel()
method InitalizeCommands (line 76) | private void InitalizeCommands()
method UpdateCanLogin (line 88) | private void UpdateCanLogin()
method DoLogin (line 96) | private async void DoLogin()
FILE: Meridian/ViewModel/Flyouts/LyricsViewModel.cs
class LyricsViewModel (line 7) | public class LyricsViewModel : ViewModelBase
method LoadLyrics (line 28) | private async void LoadLyrics()
FILE: Meridian/ViewModel/Flyouts/ShareViewModel.cs
class ShareViewModel (line 27) | public class ShareViewModel : ViewModelBase, IDropTarget
method ShareViewModel (line 166) | public ShareViewModel()
method InitializeCommands (line 176) | public void InitializeCommands()
method Activate (line 236) | public void Activate()
method DragOver (line 242) | public void DragOver(IDropInfo dropInfo)
method Drop (line 248) | public void Drop(IDropInfo dropInfo)
method Tracks_CollectionChanged (line 256) | private void Tracks_CollectionChanged(object sender, System.Collection...
method UpdateCanGoNext (line 261) | private void UpdateCanGoNext()
method LoadFriends (line 269) | private async void LoadFriends()
method Close (line 283) | private void Close()
method LoadSocieties (line 295) | private async void LoadSocieties()
method Share (line 309) | private async void Share(IProgress<int> progress, CancellationToken to...
method GetAudioList (line 379) | private async Task<List<VkAudioAttachment>> GetAudioList(IProgress<int...
method CancelAsync (line 440) | private void CancelAsync()
FILE: Meridian/ViewModel/Local/LocalAlbumViewModel.cs
class LocalAlbumViewModel (line 9) | public class LocalAlbumViewModel : ViewModelBase
method LocalAlbumViewModel (line 32) | public LocalAlbumViewModel()
method Activate (line 39) | public override void Activate()
method InitializeCommands (line 44) | private void InitializeCommands()
method Load (line 53) | private async void Load()
FILE: Meridian/ViewModel/Local/LocalMusicViewModel.cs
class LocalMusicViewModel (line 17) | public class LocalMusicViewModel : ViewModelBase
method LocalMusicViewModel (line 125) | public LocalMusicViewModel()
method InitializeCommands (line 135) | private void InitializeCommands()
method InitializeMessages (line 175) | private void InitializeMessages()
method Load (line 180) | private async void Load()
method Refresh (line 190) | private async void Refresh()
method LoadTracks (line 228) | private async Task LoadTracks()
method LoadAlbums (line 253) | private async Task LoadAlbums()
method LoadArtists (line 280) | private async Task LoadArtists()
method LoadSelectedArtist (line 307) | private async Task LoadSelectedArtist()
method OnLocalRepositoryUpdated (line 358) | private void OnLocalRepositoryUpdated(LocalRepositoryUpdatedMessage me...
FILE: Meridian/ViewModel/Main/FeedViewModel.cs
class FeedViewModel (line 19) | public class FeedViewModel : ViewModelBase
method FeedViewModel (line 72) | public FeedViewModel()
method InitializeCommands (line 81) | private void InitializeCommands()
method LoadSocieties (line 152) | private void LoadSocieties()
method SaveSocieties (line 168) | private void SaveSocieties()
method LoadFeed (line 173) | private async void LoadFeed(CancellationToken token)
method CancelAsync (line 252) | private void CancelAsync()
FILE: Meridian/ViewModel/Main/LoginViewModel.cs
class LoginViewModel (line 17) | public class LoginViewModel : ViewModelBase
method LoginViewModel (line 166) | public LoginViewModel()
method InitiailizeCommands (line 171) | private void InitiailizeCommands()
method UpdateCanLogin (line 184) | private void UpdateCanLogin()
method DoLogin (line 192) | private async void DoLogin()
method DoSignUp (line 241) | private void DoSignUp()
method ValidateUser (line 248) | private async void ValidateUser(Uri redirectUri)
FILE: Meridian/ViewModel/Main/MusicViewModel.cs
class MusicViewModel (line 24) | public class MusicViewModel : ViewModelBase, IDropTarget
method MusicViewModel (line 208) | public MusicViewModel()
method Activate (line 218) | public override async void Activate()
method Deactivate (line 227) | public override void Deactivate()
method InitializeCommands (line 234) | private void InitializeCommands()
method InitializeMessageInterception (line 305) | private void InitializeMessageInterception()
method OnUserTracksChanged (line 310) | private async void OnUserTracksChanged(UserTracksChangedMessage message)
method LoadAlbums (line 319) | private async Task LoadAlbums()
method LoadMoreAlbums (line 357) | private async Task LoadMoreAlbums()
method LoadTracks (line 385) | private async Task LoadTracks(CancellationToken token)
method LoadNewsAudios (line 430) | private async void LoadNewsAudios(CancellationToken token)
method LoadWallAudios (line 496) | private async void LoadWallAudios(CancellationToken token)
method LoadFavoritesAudios (line 557) | private async void LoadFavoritesAudios(CancellationToken token)
method LoadArtists (line 618) | private async Task LoadArtists(CancellationToken token)
method CancelAsync (line 645) | private void CancelAsync()
method AddNewAlbum (line 653) | private async void AddNewAlbum()
method EditAlbum (line 679) | private async void EditAlbum(VkPlaylist album)
method RemoveAlbum (line 701) | private async void RemoveAlbum(VkAudioAlbum album)
method PlayAlbum (line 719) | private async void PlayAlbum(VkAudioAlbum album)
method AddAlbumToNowPlaying (line 736) | private async void AddAlbumToNowPlaying(VkAudioAlbum album)
method DragOver (line 757) | public void DragOver(IDropInfo dropInfo)
method Drop (line 783) | public async void Drop(IDropInfo dropInfo)
FILE: Meridian/ViewModel/Main/NowPlayingViewModel.cs
class NowPlayingViewModel (line 16) | public class NowPlayingViewModel : ViewModelBase, IDropTarget
method NowPlayingViewModel (line 37) | public NowPlayingViewModel()
method Activate (line 44) | public override void Activate()
method Deactivate (line 53) | public override void Deactivate()
method InitializeCommands (line 62) | private void InitializeCommands()
method InitializeMessageInterception (line 77) | private void InitializeMessageInterception()
method DeinitializeMessageInterception (line 83) | private void DeinitializeMessageInterception()
method OnPlayerPositionChanged (line 89) | private void OnPlayerPositionChanged(PlayerPositionChangedMessage mess...
method OnCurrentAudioChanged (line 102) | private void OnCurrentAudioChanged(CurrentAudioChangedMessage message)
method GetArtistImage (line 109) | private async void GetArtistImage(CancellationToken token)
method CancelAsync (line 162) | private void CancelAsync()
method DragOver (line 171) | public void DragOver(IDropInfo dropInfo)
method Drop (line 180) | public void Drop(IDropInfo dropInfo)
FILE: Meridian/ViewModel/Main/PopularAudioViewModel.cs
class PopularAudioViewModel (line 15) | public class PopularAudioViewModel : ViewModelBase
method PopularAudioViewModel (line 71) | public PopularAudioViewModel()
method Activate (line 83) | public override async void Activate()
method InitializeCommands (line 89) | private void InitializeCommands()
method LoadTracks (line 104) | private async Task LoadTracks(CancellationToken token)
method CancelAsync (line 139) | private void CancelAsync()
FILE: Meridian/ViewModel/Main/RecommendationsViewModel.cs
class RecommendationsViewModel (line 13) | public class RecommendationsViewModel : ViewModelBase
method RecommendationsViewModel (line 134) | public RecommendationsViewModel()
method Activate (line 143) | public void Activate()
method Deactivate (line 148) | public void Deactivate()
method InitializeCommands (line 153) | private void InitializeCommands()
method LoadGeneralRecommendations (line 174) | private async void LoadGeneralRecommendations(CancellationToken token)
method LoadRecommendationsByTag (line 240) | private async void LoadRecommendationsByTag(string tag, CancellationTo...
method CancelAsync (line 276) | private void CancelAsync()
FILE: Meridian/ViewModel/MainViewModel.cs
class MainViewModel (line 36) | public class MainViewModel : ViewModelBase
method MainViewModel (line 504) | public MainViewModel()
method Initialize (line 510) | public void Initialize()
method LoadUserInfo (line 524) | public async void LoadUserInfo()
method InitializeCommands (line 539) | private void InitializeCommands()
method InitializeMessageInterception (line 738) | private void InitializeMessageInterception()
method OnNavigateToPage (line 747) | private void OnNavigateToPage(NavigateToPageMessage message)
method OnLoginMessage (line 784) | private void OnLoginMessage(LoginMessage message)
method OnCurrentAudioChanged (line 804) | private void OnCurrentAudioChanged(CurrentAudioChangedMessage message)
method OnPlayerPositionChanged (line 830) | private async void OnPlayerPositionChanged(PlayerPositionChangedMessag...
method OnPlayStateChanged (line 904) | private void OnPlayStateChanged(PlayStateChangedMessage message)
method UpdateCanGoBack (line 909) | public void UpdateCanGoBack()
method GetArtistImage (line 924) | private async void GetArtistImage(CancellationToken token)
method GetTrackImage (line 971) | private async void GetTrackImage(CancellationToken token)
method LikeDislikeAudio (line 1065) | private async Task LikeDislikeAudio(VkAudio audio, bool captchaNeeded ...
method ShowTrackNotification (line 1124) | private void ShowTrackNotification(Audio track)
method SwitchUIMode (line 1160) | private void SwitchUIMode(UIMode mode)
method CancelArt (line 1215) | private void CancelArt()
method CancelCover (line 1221) | private void CancelCover()
FILE: Meridian/ViewModel/Messages/CurrentAudioChangedMessage.cs
class CurrentAudioChangedMessage (line 5) | public class CurrentAudioChangedMessage
FILE: Meridian/ViewModel/Messages/LocalRepositoryUpdatedMessage.cs
class LocalRepositoryUpdatedMessage (line 5) | public class LocalRepositoryUpdatedMessage
FILE: Meridian/ViewModel/Messages/LoginMessage.cs
type LoginType (line 3) | public enum LoginType
class LoginMessage (line 9) | public class LoginMessage
FILE: Meridian/ViewModel/Messages/PlayStateChangedMessage.cs
type PlayerPlayState (line 3) | public enum PlayerPlayState
class PlayStateChangedMessage (line 12) | public class PlayStateChangedMessage
FILE: Meridian/ViewModel/Messages/PlayerPositionChangedMessage.cs
class PlayerPositionChangedMessage (line 5) | public class PlayerPositionChangedMessage
FILE: Meridian/ViewModel/Messages/UserTracksChangedMessage.cs
class UserTracksChangedMessage (line 3) | public class UserTracksChangedMessage
FILE: Meridian/ViewModel/People/FriendAudioViewModel.cs
class FriendAudioViewModel (line 18) | public class FriendAudioViewModel : ViewModelBase
method Activate (line 88) | public async void Activate()
method Deactivate (line 93) | public void Deactivate()
method FriendAudioViewModel (line 98) | public FriendAudioViewModel()
method InitializeCommands (line 107) | private void InitializeCommands()
method LoadAlbums (line 126) | private async Task LoadAlbums()
method LoadMoreAlbums (line 159) | private async Task LoadMoreAlbums()
method LoadTracks (line 186) | private async void LoadTracks(CancellationToken token)
method LoadWallAudios (line 233) | private async void LoadWallAudios(CancellationToken token)
method PlayAlbum (line 293) | private async void PlayAlbum(VkAudioAlbum album)
method AddAlbumToNowPlaying (line 310) | private async void AddAlbumToNowPlaying(VkAudioAlbum album)
method CopyAlbum (line 329) | private async void CopyAlbum(VkAudioAlbum album)
method CancelAsync (line 341) | private void CancelAsync()
FILE: Meridian/ViewModel/People/FriendsViewModel.cs
class FriendsViewModel (line 11) | public class FriendsViewModel : ViewModelBase
method Activate (line 27) | public void Activate()
method FriendsViewModel (line 33) | public FriendsViewModel()
method InitializeCommands (line 40) | private void InitializeCommands()
method LoadFriends (line 55) | private async void LoadFriends()
FILE: Meridian/ViewModel/People/SocietiesViewModel.cs
class SocietiesViewModel (line 11) | public class SocietiesViewModel : ViewModelBase
method Activate (line 34) | public void Activate()
method SocietiesViewModel (line 40) | public SocietiesViewModel()
method InitializeCommands (line 47) | private void InitializeCommands()
method LoadSocieties (line 62) | private async void LoadSocieties()
FILE: Meridian/ViewModel/People/SocietyAudioViewModel.cs
class SocietyAudioViewModel (line 18) | public class SocietyAudioViewModel : ViewModelBase
method Activate (line 88) | public async void Activate()
method Deactivate (line 93) | public void Deactivate()
method SocietyAudioViewModel (line 98) | public SocietyAudioViewModel()
method InitializeCommands (line 107) | private void InitializeCommands()
method LoadAlbums (line 126) | private async Task LoadAlbums()
method LoadMoreAlbums (line 159) | private async Task LoadMoreAlbums()
method LoadTracks (line 187) | private async void LoadTracks(CancellationToken token)
method LoadWallAudios (line 237) | private async void LoadWallAudios(CancellationToken token)
method CancelAsync (line 296) | private void CancelAsync()
method PlayAlbum (line 304) | private async void PlayAlbum(VkAudioAlbum album)
method AddAlbumToNowPlaying (line 321) | private async void AddAlbumToNowPlaying(VkAudioAlbum album)
method CopyAlbum (line 340) | private async void CopyAlbum(VkAudioAlbum album)
FILE: Meridian/ViewModel/People/SubscriptionsViewModel.cs
class SubscriptionsViewModel (line 11) | public class SubscriptionsViewModel : ViewModelBase
method Activate (line 34) | public void Activate()
method SubscriptionsViewModel (line 40) | public SubscriptionsViewModel()
method InitializeCommands (line 47) | private void InitializeCommands()
method LoadSubscriptions (line 62) | private async void LoadSubscriptions()
FILE: Meridian/ViewModel/Search/AlbumViewModel.cs
class AlbumViewModel (line 24) | public class AlbumViewModel : ViewModelBase
method AlbumViewModel (line 72) | public AlbumViewModel()
method Activate (line 77) | public void Activate()
method InitializeCommands (line 83) | private void InitializeCommands()
method LoadTracks (line 119) | private async void LoadTracks()
method LoadArtistInfo (line 155) | private async void LoadArtistInfo()
method Save (line 194) | private async void Save()
method GetAudioList (line 303) | private async Task<List<VkAudio>> GetAudioList(IProgress<int> progress)
FILE: Meridian/ViewModel/Search/ArtistViewModel.cs
class ArtistViewModel (line 19) | public class ArtistViewModel : ViewModelBase
method ArtistViewModel (line 111) | public ArtistViewModel()
method Activate (line 116) | public void Activate()
method InitializeCommands (line 124) | private void InitializeCommands()
method LoadTopTracks (line 207) | private async void LoadTopTracks()
method LoadAlbums (line 231) | private async void LoadAlbums()
method LoadInfo (line 249) | private async void LoadInfo()
method GetArtistImage (line 273) | private async void GetArtistImage()
FILE: Meridian/ViewModel/Search/SearchViewModel.cs
class SearchViewModel (line 20) | public class SearchViewModel : ViewModelBase
method SearchViewModel (line 90) | public SearchViewModel()
method InitializeCommands (line 99) | private void InitializeCommands()
method Search (line 155) | private void Search()
method SearchTracks (line 187) | private async void SearchTracks(CancellationToken token)
method SearchAlbums (line 249) | private async void SearchAlbums(CancellationToken token)
method SearchArtists (line 285) | private async void SearchArtists(CancellationToken token)
method SearchLocalTracks (line 323) | private async void SearchLocalTracks(CancellationToken token)
method SearchLocalAlbums (line 359) | private async void SearchLocalAlbums(CancellationToken token)
method SearchLocalArtists (line 395) | private async void SearchLocalArtists(CancellationToken token)
method CancelAsync (line 464) | private void CancelAsync()
FILE: Meridian/ViewModel/SettingsViewModel.cs
class SettingsViewModel (line 30) | public class SettingsViewModel : ViewModelBase
method SettingsViewModel (line 414) | public SettingsViewModel()
method Activate (line 565) | public async void Activate()
method InitializeCommands (line 575) | private void InitializeCommands()
method SaveSettings (line 645) | private void SaveSettings()
method CalculateFolderSizeAsync (line 927) | private static Task<float> CalculateFolderSizeAsync(string folder)
method CalculateFolderSize (line 935) | private static float CalculateFolderSize(string folder)
method Tell (line 971) | private async void Tell()
FILE: Meridian/ViewModel/ViewModelBase.cs
class ViewModelBase (line 6) | public class ViewModelBase : GalaSoft.MvvmLight.ViewModelBase
method Activate (line 23) | public virtual void Activate()
method Deactivate (line 31) | public virtual void Deactivate()
method RegisterTask (line 43) | private void RegisterTask(string id)
method RegisterTasks (line 48) | protected void RegisterTasks(params string[] ids)
method OnTaskStarted (line 56) | protected void OnTaskStarted(string id)
method OnTaskFinished (line 62) | protected void OnTaskFinished(string id)
method OnTaskError (line 67) | protected void OnTaskError(string id, string error)
FILE: Meridian/ViewModel/ViewModelLocator.cs
class ViewModelLocator (line 9) | public class ViewModelLocator
method ViewModelLocator (line 42) | public ViewModelLocator()
FILE: Neptune/Trunk/Neptune.Base/Collections/IAsyncCollection.cs
type IAsyncCollection (line 5) | public interface IAsyncCollection
method LoadMoreItemsAsync (line 25) | Task<uint> LoadMoreItemsAsync(uint count);
FILE: Neptune/Trunk/Neptune.Base/Extensions/CommonExtensions.cs
class CommonExtensions (line 7) | public static class CommonExtensions
method ForEach (line 9) | public static void ForEach<T>(this IEnumerable<T> source, Action<T> ac...
method IsNullOrEmpty (line 22) | public static bool IsNullOrEmpty(this IList source)
FILE: Neptune/Trunk/Neptune.Base/Extensions/StreamExtensions.cs
class StreamExtensions (line 6) | public static class StreamExtensions
method WriteText (line 8) | public static void WriteText(this Stream stream, string text)
method ReadText (line 20) | public static string ReadText(this Stream stream)
FILE: Neptune/Trunk/Neptune.Base/Helpers/TaskQueue.cs
class TaskQueue (line 11) | public class TaskQueue
method TaskQueue (line 21) | public TaskQueue()
method Enqueue (line 26) | public void Enqueue(Task t)
method Enqueue (line 31) | public void Enqueue(Func<Task> action)
method EnqueuInternal (line 37) | private void EnqueuInternal(Task t)
method TaskCallback (line 54) | private void TaskCallback(Task t)
FILE: Neptune/Trunk/Neptune.Base/Messages/GoHomeMessage.cs
class GoHomeMessage (line 6) | public class GoHomeMessage
FILE: Neptune/Trunk/Neptune.Base/Messages/NavigateToPageMessage.cs
class NavigateToPageMessage (line 8) | public class NavigateToPageMessage
FILE: Neptune/Trunk/Neptune.Base/Storage/IFileStorage.cs
type IFileStorage (line 9) | public interface IFileStorage
method OpenFile (line 16) | Task<Stream> OpenFile(string path);
method GetText (line 23) | Task<string> GetText(string path);
method WriteText (line 30) | Task WriteText(string path, string text);
method FileExists (line 37) | Task<bool> FileExists(string path);
method DeleteFile (line 44) | Task DeleteFile(string path);
method FolderExists (line 52) | Task<bool> FolderExists(string path);
method CreateFolder (line 59) | Task CreateFolder(string path);
method DeleteFolder (line 66) | Task DeleteFolder(string path);
FILE: Neptune/Trunk/Neptune.Base/View/IVisualViewModel.cs
type IVisualViewModel (line 3) | public interface IVisualViewModel
method Activate (line 5) | void Activate();
method Deactivate (line 7) | void Deactivate();
FILE: Neptune/Trunk/Neptune.Desktop/Behaviours/IgnoreMouseWheelBehavior.cs
class IgnoreMouseWheelBehavior (line 11) | public sealed class IgnoreMouseWheelBehavior : Behavior<UIElement>
method OnAttached (line 14) | protected override void OnAttached()
method OnDetaching (line 20) | protected override void OnDetaching()
method AssociatedObject_PreviewMouseWheel (line 26) | void AssociatedObject_PreviewMouseWheel(object sender, MouseWheelEvent...
FILE: Neptune/Trunk/Neptune.Desktop/Behaviours/TriggerTransitionBehaviour.cs
class TriggerTransitionBehaviour (line 14) | public class TriggerTransitionBehaviour : Behavior<FrameworkElement>
method PropertyChangedCallback (line 26) | private static void PropertyChangedCallback(DependencyObject d, Depend...
method TransitionOut (line 55) | private void TransitionOut()
method TransitionIn (line 70) | private void TransitionIn()
FILE: Neptune/Trunk/Neptune.Desktop/Behaviours/UpdateTextBindingOnPropertyChanged.cs
class UpdateTextBindingOnPropertyChanged (line 19) | public class UpdateTextBindingOnPropertyChanged : Behavior<TextBox>
method OnAttached (line 29) | protected override void OnAttached()
method OnDetaching (line 43) | protected override void OnDetaching()
method OnTextChanged (line 52) | private void OnTextChanged(object sender, EventArgs args)
method OnTextChanged (line 54) | private void OnTextChanged(object sender, TextChangedEventArgs args)
FILE: Neptune/Trunk/Neptune.Desktop/Behaviours/VisiblityTransitionBehaviour.cs
class VisibilityTransitionBehaviour (line 14) | public class VisibilityTransitionBehaviour : Behavior<FrameworkElement>
method PropertyChangedCallback (line 26) | private static void PropertyChangedCallback(DependencyObject d, Depend...
method OnAttached (line 52) | protected override void OnAttached()
method TransitionOut (line 59) | private void TransitionOut(Visibility oldValue)
method TransitionIn (line 82) | private void TransitionIn()
method AnimationOutCompleted (line 100) | void AnimationOutCompleted(object sender, object e)
FILE: Neptune/Trunk/Neptune.Desktop/Converters/BooleanToObjectConverter.cs
class BooleanToObjectConverter (line 14) | public class BooleanToObjectConverter : IValueConverter
method Convert (line 21) | public object Convert(object value, Type targetType, object parameter,...
method Convert (line 23) | public object Convert(object value, Type targetType, object parameter,...
method ConvertBack (line 32) | public object ConvertBack(object value, Type targetType, object parame...
method ConvertBack (line 34) | public object ConvertBack(object value, Type targetType, object parame...
FILE: Neptune/Trunk/Neptune.Desktop/Converters/BooleanToVisibilityConverter.cs
class BooleanToVisibilityConverter (line 18) | public class BooleanToVisibilityConverter : IValueConverter
method Convert (line 21) | public object Convert(object value, Type targetType, object parameter,...
method Convert (line 23) | public object Convert(object value, Type targetType, object parameter,...
method ConvertBack (line 54) | public object ConvertBack(object value, Type targetType, object parame...
method ConvertBack (line 56) | public object ConvertBack(object value, Type targetType, object parame...
FILE: Neptune/Trunk/Neptune.Desktop/Converters/InvertBooleanConverter.cs
class InvertBooleanConverter (line 18) | public class InvertBooleanConverter : IValueConverter
method Convert (line 21) | public object Convert(object value, Type targetType, object parameter,...
method Convert (line 23) | public object Convert(object value, Type targetType, object parameter,...
method ConvertBack (line 34) | public object ConvertBack(object value, Type targetType, object parame...
method ConvertBack (line 36) | public object ConvertBack(object value, Type targetType, object parame...
FILE: Neptune/Trunk/Neptune.Desktop/Converters/NullToBooleanConverter.cs
class NullToBooleanConverter (line 16) | public class NullToBooleanConverter : IValueConverter
method Convert (line 19) | public object Convert(object value, Type targetType, object parameter,...
method Convert (line 21) | public object Convert(object value, Type targetType, object parameter,...
method ConvertBack (line 45) | public object ConvertBack(object value, Type targetType, object parame...
method ConvertBack (line 47) | public object ConvertBack(object value, Type targetType, object parame...
FILE: Neptune/Trunk/Neptune.Desktop/Converters/NullToVisibilityConverter.cs
class NullToVisibilityConverter (line 18) | public class NullToVisibilityConverter : IValueConverter
method Convert (line 21) | public object Convert(object value, Type targetType, object parameter,...
method Convert (line 23) | public object Convert(object value, Type targetType, object parameter,...
method ConvertBack (line 61) | public object ConvertBack(object value, Type targetType, object parame...
method ConvertBack (line 63) | public object ConvertBack(object value, Type targetType, object parame...
FILE: Neptune/Trunk/Neptune.Desktop/Converters/StringToUpperConverter.cs
class StringToUpperConverter (line 16) | public class StringToUpperConverter : IValueConverter
method Convert (line 19) | public object Convert(object value, Type targetType, object parameter,...
method Convert (line 21) | public object Convert(object value, Type targetType, object parameter,...
method ConvertBack (line 28) | public object ConvertBack(object value, Type targetType, object parame...
method ConvertBack (line 30) | public object ConvertBack(object value, Type targetType, object parame...
FILE: Neptune/Trunk/Neptune.Desktop/Converters/TimeSpanConverter.cs
class TimeSpanConverter (line 16) | public class TimeSpanConverter : IValueConverter
method Convert (line 18) | public object Convert(object value, Type targetType, object parameter,
method ConvertBack (line 29) | public object ConvertBack(object value, Type targetType, object parame...
FILE: Neptune/Trunk/Neptune.Desktop/Domain/AppSettings.cs
class AppSettings (line 12) | public class AppSettings
method Set (line 21) | protected void Set<TValue>(string settingName, TValue value)
method TryGet (line 42) | protected bool TryGet<TValue>(string settingName, out TValue value)
method Get (line 81) | protected T Get<T>(string settingName, T defaultValue)
method Load (line 90) | public virtual void Load()
method Save (line 95) | public virtual void Save()
FILE: Neptune/Trunk/Neptune.Desktop/Extensions/VisualTreeHelperExtensions.cs
class VisualTreeHelperExtensions (line 13) | public static class VisualTreeHelperExtensions
method GetVisualDescendents (line 20) | public static IEnumerable<FrameworkElement> GetVisualDescendents(this ...
method GetVisualChildren (line 43) | public static IEnumerable<FrameworkElement> GetVisualChildren(this Fra...
method GetVisualAncestors (line 57) | public static IEnumerable<FrameworkElement> GetVisualAncestors(this Fr...
method GetVisualParent (line 72) | public static FrameworkElement GetVisualParent(this FrameworkElement n...
FILE: Neptune/Trunk/Neptune.Desktop/Storage/FileStorage.cs
class FileStorage (line 10) | public static class FileStorage
method OpenFile (line 14) | public static async Task<Stream> OpenFile(string path)
method GetText (line 19) | public static Task<string> GetText(string path)
method WriteText (line 30) | public static async Task WriteText(string path, string text)
method FileExists (line 45) | public static Task<bool> FileExists(string path)
method DeleteFile (line 50) | public static Task DeleteFile(string path)
method GetFileUpdateTime (line 60) | public static DateTime GetFileUpdateTime(string path)
method FolderExists (line 65) | public static Task<bool> FolderExists(string path)
method CreateFolder (line 73) | public static Task CreateFolder(string path)
method DeleteFolder (line 81) | public static Task DeleteFolder(string path)
method GetSemaphore (line 86) | private static SemaphoreSlim GetSemaphore(string fileName)
FILE: Neptune/Trunk/Neptune.UI.Desktop/Behaviours/IgnoreMouseWheelBehavior.cs
class IgnoreMouseWheelBehavior (line 11) | public sealed class IgnoreMouseWheelBehavior : Behavior<UIElement>
method OnAttached (line 14) | protected override void OnAttached()
method OnDetaching (line 20) | protected override void OnDetaching()
method AssociatedObject_PreviewMouseWheel (line 26) | void AssociatedObject_PreviewMouseWheel(object sender, MouseWheelEvent...
FILE: Neptune/Trunk/Neptune.UI.Desktop/Behaviours/TriggerTransitionBehaviour.cs
class TriggerTransitionBehaviour (line 14) | public class TriggerTransitionBehaviour : Behavior<FrameworkElement>
method PropertyChangedCallback (line 26) | private static void PropertyChangedCallback(DependencyObject d, Depend...
method TransitionOut (line 55) | private void TransitionOut()
method TransitionIn (line 70) | private void TransitionIn()
FILE: Neptune/Trunk/Neptune.UI.Desktop/Behaviours/UpdateTextBindingOnPropertyChanged.cs
class UpdateTextBindingOnPropertyChanged (line 18) | public class UpdateTextBindingOnPropertyChanged : Behavior<TextBox>
method OnAttached (line 28) | protected override void OnAttached()
method OnDetaching (line 42) | protected override void OnDetaching()
method OnTextChanged (line 51) | private void OnTextChanged(object sender, EventArgs args)
method OnTextChanged (line 53) | private void OnTextChanged(object sender, TextChangedEventArgs args)
FILE: Neptune/Trunk/Neptune.UI.Desktop/Behaviours/VisiblityTransitionBehaviour.cs
class VisibilityTransitionBehaviour (line 14) | public class VisibilityTransitionBehaviour : Behavior<FrameworkElement>
method PropertyChangedCallback (line 26) | private static void PropertyChangedCallback(DependencyObject d, Depend...
method OnAttached (line 52) | protected override void OnAttached()
method TransitionOut (line 59) | private void TransitionOut(Visibility oldValue)
method TransitionIn (line 82) | private void TransitionIn()
method AnimationOutCompleted (line 100) | void AnimationOutCompleted(object sender, object e)
FILE: Neptune/Trunk/Neptune.UI.Desktop/Converters/BooleanToObjectConverter.cs
class BooleanToObjectConverter (line 14) | public class BooleanToObjectConverter : IValueConverter
method Convert (line 21) | public object Convert(object value, Type targetType, object parameter,...
method Convert (line 23) | public object Convert(object value, Type targetType, object parameter,...
method ConvertBack (line 32) | public object ConvertBack(object value, Type targetType, object parame...
method ConvertBack (line 34) | public object ConvertBack(object value, Type targetType, object parame...
FILE: Neptune/Trunk/Neptune.UI.Desktop/Converters/BooleanToVisibilityConverter.cs
class BooleanToVisibilityConverter (line 18) | public class BooleanToVisibilityConverter : IValueConverter
method Convert (line 21) | public object Convert(object value, Type targetType, object parameter,...
method Convert (line 23) | public object Convert(object value, Type targetType, object parameter,...
method ConvertBack (line 54) | public object ConvertBack(object value, Type targetType, object parame...
method ConvertBack (line 56) | public object ConvertBack(object value, Type targetType, object parame...
FILE: Neptune/Trunk/Neptune.UI.Desktop/Converters/InvertBooleanConverter.cs
class InvertBooleanConverter (line 18) | public class InvertBooleanConverter : IValueConverter
method Convert (line 21) | public object Convert(object value, Type targetType, object parameter,...
method Convert (line 23) | public object Convert(object value, Type targetType, object parameter,...
method ConvertBack (line 34) | public object ConvertBack(object value, Type targetType, object parame...
method ConvertBack (line 36) | public object ConvertBack(object value, Type targetType, object parame...
FILE: Neptune/Trunk/Neptune.UI.Desktop/Converters/NullToBooleanConverter.cs
class NullToBooleanConverter (line 16) | public class NullToBooleanConverter : IValueConverter
method Convert (line 19) | public object Convert(object value, Type targetType, object parameter,...
method Convert (line 21) | public object Convert(object value, Type targetType, object parameter,...
method ConvertBack (line 45) | public object ConvertBack(object value, Type targetType, object parame...
method ConvertBack (line 47) | public object ConvertBack(object value, Type targetType, object parame...
FILE: Neptune/Trunk/Neptune.UI.Desktop/Converters/NullToVisibilityConverter.cs
class NullToVisibilityConverter (line 18) | public class NullToVisibilityConverter : IValueConverter
method Convert (line 21) | public object Convert(object value, Type targetType, object parameter,...
method Convert (line 23) | public object Convert(object value, Type targetType, object parameter,...
method ConvertBack (line 61) | public object ConvertBack(object value, Type targetType, object parame...
method ConvertBack (line 63) | public object ConvertBack(object value, Type targetType, object parame...
FILE: Neptune/Trunk/Neptune.UI.Desktop/Converters/StringToUpperConverter.cs
class StringToUpperConverter (line 16) | public class StringToUpperConverter : IValueConverter
method Convert (line 19) | public object Convert(object value, Type targetType, object parameter,...
method Convert (line 21) | public object Convert(object value, Type targetType, object parameter,...
method ConvertBack (line 28) | public object ConvertBack(object value, Type targetType, object parame...
method ConvertBack (line 30) | public object ConvertBack(object value, Type targetType, object parame...
FILE: Neptune/Trunk/Neptune.UI.Desktop/Converters/TimeSpanConverter.cs
class TimeSpanConverter (line 16) | public class TimeSpanConverter : IValueConverter
method Convert (line 18) | public object Convert(object value, Type targetType, object parameter,
method ConvertBack (line 29) | public object ConvertBack(object value, Type targetType, object parame...
FILE: Neptune/Trunk/Neptune.UI.Desktop/Extensions/VisualTreeHelperExtensions.cs
class VisualTreeHelperExtensions (line 13) | public static class VisualTreeHelperExtensions
method GetVisualDescendents (line 20) | public static IEnumerable<FrameworkElement> GetVisualDescendents(this ...
method GetVisualChildren (line 43) | public static IEnumerable<FrameworkElement> GetVisualChildren(this Fra...
method GetVisualAncestors (line 57) | public static IEnumerable<FrameworkElement> GetVisualAncestors(this Fr...
method GetVisualParent (line 72) | public static FrameworkElement GetVisualParent(this FrameworkElement n...
Condensed preview — 340 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,864K chars).
[
{
"path": ".gitattributes",
"chars": 2518,
"preview": "###############################################################################\n# Set default behavior to automatically "
},
{
"path": ".gitignore",
"chars": 3139,
"preview": "## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n\n# User"
},
{
"path": ".gitmodules",
"chars": 81,
"preview": "[submodule \"VkLib\"]\n\tpath = VkLib\n\turl = https://github.com/artemshuba/VkLib.git\n"
},
{
"path": ".nuget/NuGet.Config",
"chars": 162,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n <solution>\n <add key=\"disableSourceControlIntegration\" valu"
},
{
"path": ".nuget/NuGet.targets",
"chars": 7484,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild"
},
{
"path": "LICENSE.txt",
"chars": 10755,
"preview": " Apache License\n Version 2.0, January 2004\n "
},
{
"path": "LastFmLibPortable/Trunk/Core/Album/LastFmAlbum.cs",
"chars": 3264,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing LastFmLib.Core.Track;\nusing Newtonsoft.Json.Li"
},
{
"path": "LastFmLibPortable/Trunk/Core/Album/LastFmAlbumRequest.cs",
"chars": 2221,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Newtonsoft.Json."
},
{
"path": "LastFmLibPortable/Trunk/Core/Artist/LastFmArtist.cs",
"chars": 3559,
"preview": "using System;\nusing System.Collections.Generic;\nusing Newtonsoft.Json.Linq;\n\nnamespace LastFmLib.Core.Artist\n{\n publ"
},
{
"path": "LastFmLibPortable/Trunk/Core/Artist/LastFmArtistRequest.cs",
"chars": 6703,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LastFmLib.Core.A"
},
{
"path": "LastFmLibPortable/Trunk/Core/Auth/LastFmAuthRequest.cs",
"chars": 1144,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\n\nnamespace LastFmLib.Core.Auth\n{\n publ"
},
{
"path": "LastFmLibPortable/Trunk/Core/Auth/LastFmAuthResult.cs",
"chars": 585,
"preview": "using System;\nusing Newtonsoft.Json.Linq;\n\nnamespace LastFmLib.Core.Auth\n{\n public class LastFmAuthResult\n {\n "
},
{
"path": "LastFmLibPortable/Trunk/Core/Chart/LastFmChartRequest.cs",
"chars": 1784,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LastFmLib.Core.T"
},
{
"path": "LastFmLibPortable/Trunk/Core/CoreRequest.cs",
"chars": 3021,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.IO;\nusing System.Linq;\nusing Sys"
},
{
"path": "LastFmLibPortable/Trunk/Core/Image/LastFmImage.cs",
"chars": 3066,
"preview": "using System;\nusing System.Diagnostics;\nusing Newtonsoft.Json.Linq;\n\nnamespace LastFmLib.Core.Image\n{\n public class "
},
{
"path": "LastFmLibPortable/Trunk/Core/LastFmErrorProcessor.cs",
"chars": 792,
"preview": "using System.Diagnostics;\nusing LastFmLib.Error;\nusing Newtonsoft.Json.Linq;\n\nnamespace LastFmLib.Core\n{\n internal s"
},
{
"path": "LastFmLibPortable/Trunk/Core/Tag/LastFmTagRequest.cs",
"chars": 1210,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing LastFmLib.Core.Track;\nusing System."
},
{
"path": "LastFmLibPortable/Trunk/Core/Track/LastFmTrack.cs",
"chars": 3502,
"preview": "using System;\nusing Newtonsoft.Json.Linq;\n\nnamespace LastFmLib.Core.Track\n{\n public class LastFmTrack\n {\n "
},
{
"path": "LastFmLibPortable/Trunk/Core/Track/LastFmTrackRequest.cs",
"chars": 5371,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Newtonsoft.Json."
},
{
"path": "LastFmLibPortable/Trunk/Core/User/LastFmUserRequest.cs",
"chars": 1252,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LastFmLib.Core.A"
},
{
"path": "LastFmLibPortable/Trunk/Error/LastFmLoginException.cs",
"chars": 108,
"preview": "using System;\n\nnamespace LastFmLib.Error\n{\n public class LastFmLoginException : Exception\n {\n }\n}\n"
},
{
"path": "LastFmLibPortable/Trunk/Extensions/CommonExtensions.cs",
"chars": 744,
"preview": "using System.Collections.Generic;\nusing System.Linq;\nusing System.Net;\n\nnamespace LastFmLib.Extensions\n{\n public sta"
},
{
"path": "LastFmLibPortable/Trunk/Extensions/StreamExtensions.cs",
"chars": 883,
"preview": "using System.Diagnostics;\nusing System.IO;\n\nnamespace LastFmLib.Extensions\n{\n internal static class StreamExtensions"
},
{
"path": "LastFmLibPortable/Trunk/LastFM.cs",
"chars": 2700,
"preview": "using LastFmLib.Core.Album;\nusing LastFmLib.Core.Artist;\nusing LastFmLib.Core.Auth;\nusing LastFmLib.Core.Chart;\nusing L"
},
{
"path": "LastFmLibPortable/Trunk/LastFmConst.cs",
"chars": 545,
"preview": "namespace LastFmLib\n{\n internal static class LastFmConst\n {\n internal const string AuthorizationUrlBase = "
},
{
"path": "LastFmLibPortable/Trunk/LastFmLibPortable.csproj",
"chars": 437,
"preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n <PropertyGroup>\n <TargetFramework>netstandard2.0</TargetFramework>\n <Version>"
},
{
"path": "LastFmLibPortable/Trunk/LastFmUtils.cs",
"chars": 1584,
"preview": "using System.Collections.Generic;\nusing System.Linq;\nusing System.Security.Cryptography;\nusing System.Text;\n\nnamespace "
},
{
"path": "LastFmLibPortable/Trunk/app.config",
"chars": 75,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n \n</configuration>"
},
{
"path": "LastFmLibPortable/Trunk/project.json",
"chars": 263,
"preview": "{\n \"supports\": {\n \"net46.app\": {},\n \"dnxcore50.app\": {}\n },\n \"dependencies\": {\n \"Microsoft.NETCore\": \"5.0.0\""
},
{
"path": "Meridian/App.config",
"chars": 2308,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n <configSections>\n <section name=\"nlog\" type=\"NLog.Config.Co"
},
{
"path": "Meridian/App.xaml",
"chars": 3726,
"preview": "<Application x:Class=\"Meridian.App\"\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n "
},
{
"path": "Meridian/App.xaml.cs",
"chars": 6204,
"preview": "using System;\nusing System.Diagnostics;\nusing System.Drawing;\nusing System.Globalization;\nusing System.IO;\nusing System"
},
{
"path": "Meridian/Behaviours/AutoScrollToCurrentItemBehaviour.cs",
"chars": 1111,
"preview": "using System;\nusing System.Windows.Controls;\nusing GalaSoft.MvvmLight.Messaging;\nusing Meridian.Services;\nusing Meridia"
},
{
"path": "Meridian/Behaviours/FocusBehaviour.cs",
"chars": 2009,
"preview": "using Microsoft.Xaml.Behaviors;\nusing System.Windows;\nusing System.Windows.Controls;\n\nnamespace Meridian.Behaviours\n{\n "
},
{
"path": "Meridian/Behaviours/TransitionBehaviour.cs",
"chars": 6686,
"preview": "using Microsoft.Xaml.Behaviors;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Windows"
},
{
"path": "Meridian/Behaviours/VisibilityTransitionBehaviour.cs",
"chars": 2759,
"preview": "using Microsoft.Xaml.Behaviors;\nusing System.Windows;\nusing System.Windows.Media.Animation;\n\nnamespace Meridian.Behavio"
},
{
"path": "Meridian/Controls/BindablePasswordBox.cs",
"chars": 3042,
"preview": "using System.Windows;\nusing System.Windows.Controls;\n\nnamespace Meridian.Controls\n{\n public sealed class BindablePas"
},
{
"path": "Meridian/Controls/BusyIndicator.cs",
"chars": 7923,
"preview": "using System;\nusing System.Diagnostics;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Threa"
},
{
"path": "Meridian/Controls/ContentTransitionControl.xaml",
"chars": 2194,
"preview": "<UserControl x:Class=\"Meridian.Controls.ContentTransitionControl\"\n xmlns=\"http://schemas.microsoft.com/winf"
},
{
"path": "Meridian/Controls/ContentTransitionControl.xaml.cs",
"chars": 2662,
"preview": "using System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Media.Animation;\n\nnamespace Meridian.Controls"
},
{
"path": "Meridian/Controls/ExtendedListBox.cs",
"chars": 2423,
"preview": "using System;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Input;\nusing System.Windows.Med"
},
{
"path": "Meridian/Controls/FlyoutContent.cs",
"chars": 787,
"preview": "using System.Linq;\nusing System.Windows;\nusing System.Windows.Controls;\nusing GalaSoft.MvvmLight.Command;\nusing Neptune"
},
{
"path": "Meridian/Controls/FlyoutControl.xaml",
"chars": 3101,
"preview": "<UserControl x:Class=\"Meridian.Controls.FlyoutControl\"\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml"
},
{
"path": "Meridian/Controls/FlyoutControl.xaml.cs",
"chars": 3196,
"preview": "using System;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Forms;\nusing System.Windows.Inpu"
},
{
"path": "Meridian/Controls/ImageTransitionControl.xaml",
"chars": 3264,
"preview": "<UserControl x:Class=\"Meridian.Controls.ImageTransitionControl\"\n xmlns=\"http://schemas.microsoft.com/winfx/"
},
{
"path": "Meridian/Controls/ImageTransitionControl.xaml.cs",
"chars": 3406,
"preview": "using System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Media;\nusing System.Windows.Media.Animation;\n"
},
{
"path": "Meridian/Controls/LocalSearchControl.xaml",
"chars": 2413,
"preview": "<UserControl x:Class=\"Meridian.Controls.LocalSearchControl\"\n xmlns=\"http://schemas.microsoft.com/winfx/2006"
},
{
"path": "Meridian/Controls/LocalSearchControl.xaml.cs",
"chars": 4455,
"preview": "using System;\nusing System.Linq;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Data;\nusing "
},
{
"path": "Meridian/Controls/NotificationControl.xaml",
"chars": 3166,
"preview": "<UserControl x:Class=\"Meridian.Controls.NotificationControl\"\n xmlns=\"http://schemas.microsoft.com/winfx/200"
},
{
"path": "Meridian/Controls/NotificationControl.xaml.cs",
"chars": 3378,
"preview": "using System;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Media.Animation;\nusing System.W"
},
{
"path": "Meridian/Controls/PageBase.cs",
"chars": 1492,
"preview": "using System.Collections.Generic;\nusing System.Windows;\nusing System.Windows.Controls;\n\nnamespace Meridian.Controls\n{\n "
},
{
"path": "Meridian/Controls/PlayerControl.xaml",
"chars": 11317,
"preview": "<UserControl x:Class=\"Meridian.Controls.PlayerControl\"\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml"
},
{
"path": "Meridian/Controls/PlayerControl.xaml.cs",
"chars": 532,
"preview": "using System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Controls.Primitives;\n\nnamespace Meridian.Cont"
},
{
"path": "Meridian/Controls/ShareBarControl.xaml",
"chars": 3623,
"preview": "<UserControl x:Class=\"Meridian.Controls.ShareBarControl\"\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xa"
},
{
"path": "Meridian/Controls/ShareBarControl.xaml.cs",
"chars": 507,
"preview": "using System.Windows.Controls;\nusing Meridian.ViewModel;\nusing Meridian.ViewModel.Flyouts;\n\nnamespace Meridian.Controls"
},
{
"path": "Meridian/Controls/TextBoxWithHint.cs",
"chars": 2139,
"preview": "using System.Windows;\nusing System.Windows.Controls;\n\nnamespace Meridian.Controls\n{\n public class TextBoxWithHint : "
},
{
"path": "Meridian/Controls/VirtualizingWrapPanel.cs",
"chars": 15817,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windo"
},
{
"path": "Meridian/Controls/VolumeControl.xaml",
"chars": 1489,
"preview": "<UserControl x:Class=\"Meridian.Controls.VolumeControl\"\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml"
},
{
"path": "Meridian/Controls/VolumeControl.xaml.cs",
"chars": 1805,
"preview": "using System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Input;\n\nnamespace Meridian.Controls\n{\n ///"
},
{
"path": "Meridian/Converters/AlbumContextMenuVisibilityConverter.cs",
"chars": 771,
"preview": "using System;\nusing System.Globalization;\nusing System.Windows;\nusing System.Windows.Data;\nusing VkLib.Core.Audio;\n\nnam"
},
{
"path": "Meridian/Converters/AlbumListItemContainerSelector.cs",
"chars": 1419,
"preview": "using System.Windows;\nusing System.Windows.Controls;\nusing VkLib.Core.Audio;\n\nnamespace Meridian.Converters\n{\n publi"
},
{
"path": "Meridian/Converters/AudioTemplateSelector.cs",
"chars": 730,
"preview": "using System.Windows;\nusing System.Windows.Controls;\nusing Meridian.Model;\n\nnamespace Meridian.Converters\n{\n public "
},
{
"path": "Meridian/Converters/AudioTimeSpanConverter.cs",
"chars": 655,
"preview": "using System;\nusing System.Globalization;\nusing System.Windows.Data;\n\nnamespace Meridian.Converters\n{\n public class "
},
{
"path": "Meridian/Converters/BooleanToValueConverter.cs",
"chars": 683,
"preview": "using System;\nusing System.Globalization;\nusing System.Windows.Data;\n\nnamespace Meridian.Converters\n{\n public class "
},
{
"path": "Meridian/Converters/MainMenuGroupStyleSelector.cs",
"chars": 659,
"preview": "using System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Data;\n\nnamespace Meridian.Converters\n{\n pu"
},
{
"path": "Meridian/Converters/SearchResultTemplateSelector.cs",
"chars": 3434,
"preview": "using System;\nusing System.Globalization;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Dat"
},
{
"path": "Meridian/Domain/Settings.cs",
"chars": 7362,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.IO;\nusing System.Windows;\nusin"
},
{
"path": "Meridian/Extensions/AudioExtensions.cs",
"chars": 1313,
"preview": "using System;\nusing LastFmLib.Core.Track;\nusing Meridian.Model;\nusing Meridian.ViewModel;\n\nnamespace Meridian.Extension"
},
{
"path": "Meridian/Extensions/CommonExtensions.cs",
"chars": 516,
"preview": "using System;\n\nnamespace Meridian.Extensions\n{\n public static class CommonExtensions\n {\n public static T C"
},
{
"path": "Meridian/Extensions/ListExtensions.cs",
"chars": 521,
"preview": "using System;\nusing System.Collections.Generic;\n\nnamespace Meridian.Extensions\n{\n public static class ListExtensions"
},
{
"path": "Meridian/Extensions/SocketExtensions.cs",
"chars": 748,
"preview": "using System;\nusing System.Net.Sockets;\nusing System.Threading.Tasks;\n\nnamespace Meridian.Extensions\n{\n public stati"
},
{
"path": "Meridian/Helpers/AlbumCoversHelper.cs",
"chars": 5651,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.IO;\nusing System.Linq;\nusing Sys"
},
{
"path": "Meridian/Helpers/ArtistImageHelper.cs",
"chars": 5666,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing"
},
{
"path": "Meridian/Helpers/DateTimeConverter.cs",
"chars": 3685,
"preview": "using System;\nusing System.Globalization;\n\nnamespace Meridian.Helpers\n{\n /// <summary>\n /// Utilities to convert "
},
{
"path": "Meridian/Helpers/FilesHelper.cs",
"chars": 3624,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Text;\nusing System.Thr"
},
{
"path": "Meridian/Helpers/HotKeyManager.cs",
"chars": 8739,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Windows;\nusing System.Windows.Input;\nusing System.Windows."
},
{
"path": "Meridian/Helpers/ImageAsyncHelper.cs",
"chars": 2515,
"preview": "using System;\nusing System.Diagnostics;\nusing System.Globalization;\nusing System.Net;\nusing System.Windows;\nusing Syste"
},
{
"path": "Meridian/Helpers/LongRunningOperation.cs",
"chars": 1123,
"preview": "using System.ComponentModel;\nusing System.Runtime.CompilerServices;\n\nnamespace Meridian.Helpers\n{\n public class Long"
},
{
"path": "Meridian/Helpers/Md5Helper.cs",
"chars": 721,
"preview": "using System.Security.Cryptography;\nusing System.Text;\n\nnamespace Meridian.Helpers\n{\n public static class Md5Helper\n"
},
{
"path": "Meridian/Helpers/NativeMethods.cs",
"chars": 1308,
"preview": "using System;\nusing System.Runtime.InteropServices;\nusing System.Windows.Input;\n\nnamespace Meridian.Helpers\n{\n publi"
},
{
"path": "Meridian/Helpers/NetworkHelper.cs",
"chars": 604,
"preview": "using System.Collections.Generic;\nusing System.Linq;\nusing System.Net;\nusing System.Net.Sockets;\n\nnamespace Meridian.He"
},
{
"path": "Meridian/Helpers/StringHelper.cs",
"chars": 998,
"preview": "using System;\nusing System.Linq;\n\nnamespace Meridian.Helpers\n{\n public static class StringHelper\n {\n publi"
},
{
"path": "Meridian/Layout/Controls/HeaderControl.xaml",
"chars": 2156,
"preview": "<UserControl x:Class=\"Meridian.Layout.Controls.HeaderControl\"\n xmlns=\"http://schemas.microsoft.com/winfx/20"
},
{
"path": "Meridian/Layout/Controls/HeaderControl.xaml.cs",
"chars": 2748,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windo"
},
{
"path": "Meridian/Layout/Controls/PageTabControl.cs",
"chars": 1174,
"preview": "using System.Collections.Specialized;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Control"
},
{
"path": "Meridian/Layout/LayoutBase.cs",
"chars": 135,
"preview": "using System.Windows;\nusing System.Windows.Controls;\n\nnamespace Meridian.Layout\n{\n public class LayoutBase : Control"
},
{
"path": "Meridian/Layout/PageBase.cs",
"chars": 4231,
"preview": "using System.Collections.Generic;\nusing System.Windows;\nusing System.Windows.Controls;\nusing Meridian.ViewModel;\n\nnames"
},
{
"path": "Meridian/Layout/Templates/PageBaseTemplate.xaml",
"chars": 5578,
"preview": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n xmlns:x=\"http"
},
{
"path": "Meridian/Layout/Templates/TwoColumnPageLayoutTemplate.xaml",
"chars": 1726,
"preview": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n xmlns:x=\"http"
},
{
"path": "Meridian/Layout/TwoColumnPageLayout.cs",
"chars": 1087,
"preview": "using System.Windows;\nusing System.Windows.Controls;\n\nnamespace Meridian.Layout\n{\n public class TwoColumnPageLayout "
},
{
"path": "Meridian/MainWindow.xaml",
"chars": 15689,
"preview": "<Window x:Class=\"Meridian.MainWindow\"\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n "
},
{
"path": "Meridian/MainWindow.xaml.cs",
"chars": 5663,
"preview": "using System;\nusing System.ComponentModel;\nusing System.Linq;\nusing System.Windows;\nusing System.Windows.Input;\nusing S"
},
{
"path": "Meridian/Meridian.csproj",
"chars": 3583,
"preview": "<Project Sdk=\"Microsoft.NET.Sdk.WindowsDesktop\">\n\n <PropertyGroup>\n <OutputType>WinExe</OutputType>\n <TargetFram"
},
{
"path": "Meridian/Model/Account.cs",
"chars": 3907,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Runtime.CompilerServices;\nusin"
},
{
"path": "Meridian/Model/Audio.cs",
"chars": 6239,
"preview": "using System;\nusing System.ComponentModel;\nusing Newtonsoft.Json;\nusing SQLite;\n\nnamespace Meridian.Model\n{\n /// <su"
},
{
"path": "Meridian/Model/AudioAlbum.cs",
"chars": 1691,
"preview": "using System.Collections.Generic;\nusing System.ComponentModel;\nusing System.IO;\nusing System.Runtime.CompilerServices;\n"
},
{
"path": "Meridian/Model/AudioArtist.cs",
"chars": 1644,
"preview": "using System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Runtime.CompilerServices;\nusing System.Wind"
},
{
"path": "Meridian/Model/AudioPost.cs",
"chars": 665,
"preview": "using System;\nusing System.Collections.Generic;\nusing VkLib.Core.Users;\n\nnamespace Meridian.Model\n{\n /// <summary>\n "
},
{
"path": "Meridian/Model/ColorScheme.cs",
"chars": 282,
"preview": "namespace Meridian.Model\n{\n public class ColorScheme\n {\n public string Name { get; set; }\n\n public "
},
{
"path": "Meridian/Model/ItemsResponse.cs",
"chars": 748,
"preview": "using System.Collections.Generic;\n\nnamespace Meridian.Model\n{\n public class ItemsResponse<T>\n {\n public st"
},
{
"path": "Meridian/Model/MainMenuItem.cs",
"chars": 720,
"preview": "using System.Collections.Generic;\n\nnamespace Meridian.Model\n{\n public class MainMenuItem\n {\n /// <summary>"
},
{
"path": "Meridian/Model/NewsItemsResponse.cs",
"chars": 330,
"preview": "using System.Collections.Generic;\nusing VkLib.Core.News;\n\nnamespace Meridian.Model\n{\n public class NewsItemsResponse"
},
{
"path": "Meridian/Model/Recommendation.cs",
"chars": 1374,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusi"
},
{
"path": "Meridian/Model/SearchMenuItem.cs",
"chars": 207,
"preview": "namespace Meridian.Model\n{\n public class SearchMenuItem\n {\n public string Group { get; set; }\n\n pub"
},
{
"path": "Meridian/Model/Settings/SettingsEngine.cs",
"chars": 211,
"preview": "using Meridian.Services.Media.Core;\n\nnamespace Meridian.Model.Settings\n{\n public class SettingsEngine\n {\n "
},
{
"path": "Meridian/Model/Settings/SettingsHotKey.cs",
"chars": 2047,
"preview": "using System.ComponentModel;\n\nnamespace Meridian.Model\n{\n /// <summary>\n /// Модель горячей клавиши для экрана на"
},
{
"path": "Meridian/Model/Settings/SettingsLanguage.cs",
"chars": 168,
"preview": "namespace Meridian.Model\n{\n public class SettingsLanguage\n {\n public string LanguageCode { get; set; }\n\n "
},
{
"path": "Meridian/Model/UIMode.cs",
"chars": 123,
"preview": "namespace Meridian.Model\n{\n public enum UIMode\n {\n Normal,\n Compact,\n CompactLandscape\n }"
},
{
"path": "Meridian/Properties/Resources.Designer.cs",
"chars": 2780,
"preview": "//------------------------------------------------------------------------------\n// <auto-generated>\n// This code w"
},
{
"path": "Meridian/Properties/Resources.resx",
"chars": 5494,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n <!-- \n Microsoft ResX Schema \n \n Version 2.0\n \n The prim"
},
{
"path": "Meridian/Properties/Settings.Designer.cs",
"chars": 1063,
"preview": "//------------------------------------------------------------------------------\n// <auto-generated>\n// This code w"
},
{
"path": "Meridian/Properties/Settings.settings",
"chars": 193,
"preview": "<?xml version='1.0' encoding='utf-8'?>\n<SettingsFile xmlns=\"uri:settings\" CurrentProfile=\"(Default)\">\n <Profiles>\n "
},
{
"path": "Meridian/RemotePlay/RemotePlayService.cs",
"chars": 4137,
"preview": "using System;\nusing System.Net;\nusing Meridian.Domain;\nusing Meridian.Services;\nusing Meridian.ViewModel;\nusing Newtons"
},
{
"path": "Meridian/RemotePlay/SimpleHttpRequest.cs",
"chars": 404,
"preview": "using System.Collections.Generic;\nusing System.Net;\n\nnamespace Meridian.RemotePlay\n{\n public class SimpleHttpRequest"
},
{
"path": "Meridian/RemotePlay/SimpleHttpResponse.cs",
"chars": 837,
"preview": "using System.Collections.Generic;\nusing System.Net;\nusing System.Text;\n\nnamespace Meridian.RemotePlay\n{\n public clas"
},
{
"path": "Meridian/RemotePlay/SimpleWebServer.cs",
"chars": 9736,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.IO;\nusing System.Linq;\nusing Sys"
},
{
"path": "Meridian/RemotePlay/web/index.html",
"chars": 3736,
"preview": "<!DOCTYPE html>\n<html lang=\"en\" xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <meta charset=\"utf-8\" />\n <meta nam"
},
{
"path": "Meridian/RemotePlay/web/js/index.js",
"chars": 3688,
"preview": "$(document).ready(function () {\n var positionChanging = false;\n\n var play = document.getElementById(\"play\");\n "
},
{
"path": "Meridian/RemotePlay/web/js/utils.js",
"chars": 571,
"preview": "if (!String.prototype.toShortTimeString) {\n String.prototype.toShortTimeString = function () {\n var sec_num ="
},
{
"path": "Meridian/RemotePlay/web/lib/svg4everybody.js",
"chars": 1413,
"preview": "!function (e, t, n, o, r, i) { function a(t, n) { if (n) { var o = n.getAttribute(\"viewBox\"), r = e.createDocumentFragm"
},
{
"path": "Meridian/RemotePlay/web/styles/index.css",
"chars": 455,
"preview": "html {\n position: relative;\n width: 100%;\n height: 100%;\n min-height: 300pt;\n margin-bottom: 20pt;\n}\n\nbo"
},
{
"path": "Meridian/RemotePlay/web/styles/player.css",
"chars": 5538,
"preview": "#playerControl {\n margin-top: 30pt;\n}\n\n #playerControl #progressBar {\n width: auto;\n padding: 0;\n "
},
{
"path": "Meridian/Resources/Localization/ErrorResources.Designer.cs",
"chars": 10522,
"preview": "//------------------------------------------------------------------------------\n// <auto-generated>\n// This code w"
},
{
"path": "Meridian/Resources/Localization/ErrorResources.resx",
"chars": 8606,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n <!-- \n Microsoft ResX Schema \n \n Version 2.0\n \n The prim"
},
{
"path": "Meridian/Resources/Localization/ErrorResources.ru.resx",
"chars": 8747,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n <!-- \n Microsoft ResX Schema \n \n Version 2.0\n \n The prim"
},
{
"path": "Meridian/Resources/Localization/MainResources.Designer.cs",
"chars": 73003,
"preview": "//------------------------------------------------------------------------------\n// <auto-generated>\n// This code w"
},
{
"path": "Meridian/Resources/Localization/MainResources.resx",
"chars": 29118,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n <!-- \n Microsoft ResX Schema \n \n Version 2.0\n \n The prim"
},
{
"path": "Meridian/Resources/Localization/MainResources.ru.resx",
"chars": 29788,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n <!-- \n Microsoft ResX Schema \n \n Version 2.0\n \n The prim"
},
{
"path": "Meridian/Resources/Styles/Animations.xaml",
"chars": 11483,
"preview": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n xmlns:x=\"http"
},
{
"path": "Meridian/Resources/Styles/AudioControlStyles.xaml",
"chars": 21745,
"preview": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n xmlns:x=\"http"
},
{
"path": "Meridian/Resources/Styles/ButtonStyles.xaml",
"chars": 12874,
"preview": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n xmlns:x=\"http"
},
{
"path": "Meridian/Resources/Styles/CheckBoxStyles.xaml",
"chars": 6836,
"preview": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n xmlns:x=\"http"
},
{
"path": "Meridian/Resources/Styles/ComboBoxStyles.xaml",
"chars": 20364,
"preview": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n xmlns:x=\"http"
},
{
"path": "Meridian/Resources/Styles/ContextMenuStyles.xaml",
"chars": 14877,
"preview": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n xmlns:x=\"http"
},
{
"path": "Meridian/Resources/Styles/DataTemplates.xaml",
"chars": 38147,
"preview": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n xmlns:x=\"http"
},
{
"path": "Meridian/Resources/Styles/ExpanderStyles.xaml",
"chars": 18461,
"preview": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n xmlns:x=\"http"
},
{
"path": "Meridian/Resources/Styles/Icons.xaml",
"chars": 17592,
"preview": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n xmlns:x=\"http"
},
{
"path": "Meridian/Resources/Styles/ListBoxStyles.xaml",
"chars": 28210,
"preview": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n xmlns:x=\"http"
},
{
"path": "Meridian/Resources/Styles/ProgressBarStyles.xaml",
"chars": 14596,
"preview": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n xmlns:x=\"http"
},
{
"path": "Meridian/Resources/Styles/ScrollbarStyles.xaml",
"chars": 15074,
"preview": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n xmlns:x=\"http"
},
{
"path": "Meridian/Resources/Styles/SliderStyles.xaml",
"chars": 24422,
"preview": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n xmlns:x=\"http"
},
{
"path": "Meridian/Resources/Styles/Styles.xaml",
"chars": 29507,
"preview": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n xmlns:x=\"http"
},
{
"path": "Meridian/Resources/Styles/TabControlStyles.xaml",
"chars": 23759,
"preview": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n xmlns:x=\"http"
},
{
"path": "Meridian/Resources/Styles/TextBoxStyles.xaml",
"chars": 12991,
"preview": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n xmlns:x=\"http"
},
{
"path": "Meridian/Resources/Styles/WindowButtons.xaml",
"chars": 7478,
"preview": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n xmlns:x=\"http"
},
{
"path": "Meridian/Resources/Themes/Accent.xaml",
"chars": 5189,
"preview": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n xmlns:x=\"http"
},
{
"path": "Meridian/Resources/Themes/Accents/Blue.xaml",
"chars": 311,
"preview": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n xmlns:x=\"http"
},
{
"path": "Meridian/Resources/Themes/Accents/Emerald.xaml",
"chars": 311,
"preview": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n xmlns:x=\"http"
},
{
"path": "Meridian/Resources/Themes/Accents/Magenta.xaml",
"chars": 311,
"preview": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n xmlns:x=\"http"
},
{
"path": "Meridian/Resources/Themes/Accents/Mango.xaml",
"chars": 311,
"preview": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n xmlns:x=\"http"
},
{
"path": "Meridian/Resources/Themes/Accents/Pink.xaml",
"chars": 311,
"preview": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n xmlns:x=\"http"
},
{
"path": "Meridian/Resources/Themes/Accents/Purple.xaml",
"chars": 311,
"preview": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n xmlns:x=\"http"
},
{
"path": "Meridian/Resources/Themes/Accents/Red.xaml",
"chars": 311,
"preview": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n xmlns:x=\"http"
},
{
"path": "Meridian/Resources/Themes/Accents/Sea.xaml",
"chars": 311,
"preview": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n xmlns:x=\"http"
},
{
"path": "Meridian/Resources/Themes/Accents/Sky.xaml",
"chars": 311,
"preview": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n xmlns:x=\"http"
},
{
"path": "Meridian/Resources/Themes/Dark.xaml",
"chars": 5194,
"preview": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n xmlns:x=\"http"
},
{
"path": "Meridian/Resources/Themes/Graphite.xaml",
"chars": 5147,
"preview": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n xmlns:x=\"http"
},
{
"path": "Meridian/Resources/Themes/Light.xaml",
"chars": 5144,
"preview": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n xmlns:x=\"http"
},
{
"path": "Meridian/SQLite.cs",
"chars": 104259,
"preview": "//\n// Copyright (c) 2009-2012 Krueger Systems, Inc.\n// \n// Permission is hereby granted, free of charge, to any person o"
},
{
"path": "Meridian/SQLiteAsync.cs",
"chars": 14808,
"preview": "//\n// Copyright (c) 2012 Krueger Systems, Inc.\n// \n// Permission is hereby granted, free of charge, to any person obtain"
},
{
"path": "Meridian/Services/AccountManager.cs",
"chars": 4699,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing GalaSoft.MvvmLig"
},
{
"path": "Meridian/Services/CacheService.cs",
"chars": 2957,
"preview": "using System;\nusing System.IO;\nusing System.Net;\nusing System.Net.Http;\nusing System.Threading.Tasks;\nusing System.Wind"
},
{
"path": "Meridian/Services/DataBaseService.cs",
"chars": 3416,
"preview": "using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq.E"
},
{
"path": "Meridian/Services/DataService.cs",
"chars": 35389,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Threading;\nus"
},
{
"path": "Meridian/Services/HostService.cs",
"chars": 1380,
"preview": "using Meridian.ViewModel;\nusing Newtonsoft.Json;\nusing Newtonsoft.Json.Linq;\nusing System;\nusing System.Collections.Gen"
},
{
"path": "Meridian/Services/LoggingService.cs",
"chars": 573,
"preview": "using System;\nusing System.Diagnostics;\nusing Yandex.Metrica;\n\nnamespace Meridian.Services\n{\n \n public static cla"
},
{
"path": "Meridian/Services/Media/AudioService.cs",
"chars": 19538,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.IO;\nusing System.Lin"
},
{
"path": "Meridian/Services/Media/Core/MediaPlayerBase.cs",
"chars": 1241,
"preview": "using System;\nusing System.Windows;\nusing System.Windows.Media;\nusing Meridian.Model;\nusing Meridian.ViewModel.Messages"
},
{
"path": "Meridian/Services/Media/Core/NaudioMediaPlayer.cs",
"chars": 4812,
"preview": "using System;\nusing System.Diagnostics;\nusing System.Drawing.Printing;\nusing System.Threading;\nusing System.Threading.T"
},
{
"path": "Meridian/Services/Media/Core/UwpMediaPlayer.cs",
"chars": 3681,
"preview": "using Meridian.Model;\nusing System;\nusing Windows.Media;\nusing Windows.Media.Core;\nusing Windows.Media.Playback;\n\nnames"
},
{
"path": "Meridian/Services/Media/Core/WmpMediaPlayer.cs",
"chars": 2598,
"preview": "using System;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Media;\nusing Meridian.Model;\nus"
},
{
"path": "Meridian/Services/Music/LocalMusicService.cs",
"chars": 8991,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.IO;\nusing System.Linq;\nusing Sys"
},
{
"path": "Meridian/Services/Music/Repositories/LocalAlbumsRepository.cs",
"chars": 7083,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing"
},
{
"path": "Meridian/Services/Music/Repositories/LocalArtistsRepository.cs",
"chars": 5571,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing"
},
{
"path": "Meridian/Services/Music/Repositories/LocalTracksRepository.cs",
"chars": 6939,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.IO;\nusing System.Linq;\nusing Sys"
},
{
"path": "Meridian/Services/NotificationService.cs",
"chars": 1083,
"preview": "using Meridian.Controls;\n\nnamespace Meridian.Services\n{\n public static class NotificationService\n {\n priva"
},
{
"path": "Meridian/Services/ServiceLocator.cs",
"chars": 640,
"preview": "using Meridian.Services.Music;\n\nnamespace Meridian.Services\n{\n /// <summary>\n /// Contains instances of frequnetl"
},
{
"path": "Meridian/Services/UpdateService.cs",
"chars": 8310,
"preview": "using System;\nusing System.ComponentModel;\nusing System.IO;\nusing System.Net;\nusing System.Net.Http;\nusing System.Refle"
},
{
"path": "Meridian/View/Compact/CompactLandscapeView.xaml",
"chars": 20002,
"preview": "<Window x:Class=\"Meridian.View.Compact.CompactLandscapeView\"\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xam"
},
{
"path": "Meridian/View/Compact/CompactLandscapeView.xaml.cs",
"chars": 3029,
"preview": "using System;\nusing System.ComponentModel;\nusing System.Windows;\nusing System.Windows.Input;\nusing System.Windows.Media"
},
{
"path": "Meridian/View/Compact/CompactView.xaml",
"chars": 19343,
"preview": "<Window x:Class=\"Meridian.View.Compact.CompactView\"\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/present"
},
{
"path": "Meridian/View/Compact/CompactView.xaml.cs",
"chars": 2792,
"preview": "using System;\nusing System.ComponentModel;\nusing System.Windows;\nusing System.Windows.Input;\nusing Meridian.ViewModel;\n"
},
{
"path": "Meridian/View/Flyouts/AddSocietyFlyout.xaml",
"chars": 4048,
"preview": "<UserControl x:Class=\"Meridian.Flyouts.AddSocietyFlyout\"\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xa"
},
{
"path": "Meridian/View/Flyouts/AddSocietyFlyout.xaml.cs",
"chars": 3721,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Linq;\nusing System.Runtime.Co"
},
{
"path": "Meridian/View/Flyouts/AddToAlbumView.xaml",
"chars": 1821,
"preview": "<UserControl x:Class=\"Meridian.View.Flyouts.AddToAlbumView\"\n xmlns=\"http://schemas.microsoft.com/winfx/2006"
},
{
"path": "Meridian/View/Flyouts/AddToAlbumView.xaml.cs",
"chars": 4159,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Linq;\nusing System.Threading."
},
{
"path": "Meridian/View/Flyouts/CaptchaRequestView.xaml",
"chars": 2008,
"preview": "<UserControl x:Class=\"Meridian.View.Flyouts.CaptchaRequestView\"\n xmlns=\"http://schemas.microsoft.com/winfx/"
},
{
"path": "Meridian/View/Flyouts/CaptchaRequestView.xaml.cs",
"chars": 1762,
"preview": "using System;\nusing System.Linq;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Input;\nusing"
},
{
"path": "Meridian/View/Flyouts/CommonErrorView.xaml",
"chars": 1973,
"preview": "<UserControl x:Class=\"Meridian.View.Flyouts.CommonErrorView\"\n xmlns=\"http://schemas.microsoft.com/winfx/200"
},
{
"path": "Meridian/View/Flyouts/CommonErrorView.xaml.cs",
"chars": 1262,
"preview": "using System.Linq;\nusing System.Windows;\nusing System.Windows.Controls;\nusing Meridian.Controls;\nusing Neptune.UI.Exten"
},
{
"path": "Meridian/View/Flyouts/CommonMessageView.xaml",
"chars": 1610,
"preview": "<UserControl x:Class=\"Meridian.View.Flyouts.CommonMessageView\"\n xmlns=\"http://schemas.microsoft.com/winfx/2"
},
{
"path": "Meridian/View/Flyouts/CommonMessageView.xaml.cs",
"chars": 1654,
"preview": "using System.Linq;\nusing System.Windows;\nusing System.Windows.Controls;\nusing Meridian.Controls;\nusing Neptune.UI.Exten"
},
{
"path": "Meridian/View/Flyouts/EditAlbumView.xaml",
"chars": 1774,
"preview": "<UserControl x:Class=\"Meridian.View.Flyouts.EditAlbumView\"\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/pr"
},
{
"path": "Meridian/View/Flyouts/EditAlbumView.xaml.cs",
"chars": 1324,
"preview": "using System.Linq;\nusing System.Windows;\nusing System.Windows.Controls;\nusing Meridian.Controls;\nusing Meridian.Resourc"
},
{
"path": "Meridian/View/Flyouts/EditAudioView.xaml",
"chars": 3014,
"preview": "<UserControl x:Class=\"Meridian.View.Flyouts.EditAudioView\"\n xmlns=\"http://schemas.microsoft.com/winfx/2006/"
},
{
"path": "Meridian/View/Flyouts/EditAudioView.xaml.cs",
"chars": 582,
"preview": "using System.Windows.Controls;\nusing Meridian.Model;\nusing Meridian.ViewModel;\nusing Meridian.ViewModel.Flyouts;\n\nnames"
},
{
"path": "Meridian/View/Flyouts/Local/MusicScanView.xaml",
"chars": 2042,
"preview": "<controls:FlyoutContent x:Class=\"Meridian.View.Flyouts.Local.MusicScanView\"\n xmlns=\"http://schemas.microsof"
},
{
"path": "Meridian/View/Flyouts/Local/MusicScanView.xaml.cs",
"chars": 1981,
"preview": "using System;\nusing System.ComponentModel;\nusing System.Runtime.CompilerServices;\nusing GalaSoft.MvvmLight.Command;\nusi"
},
{
"path": "Meridian/View/Flyouts/LoginLastFmMessageView.xaml",
"chars": 1756,
"preview": "<UserControl x:Class=\"Meridian.View.Flyouts.LoginLastFmMessageView\"\n xmlns=\"http://schemas.microsoft.com/wi"
},
{
"path": "Meridian/View/Flyouts/LoginLastFmMessageView.xaml.cs",
"chars": 1509,
"preview": "using System.Collections.Generic;\nusing System.Linq;\nusing System.Windows;\nusing System.Windows.Controls;\nusing GalaSof"
}
]
// ... and 140 more files (download for full content)
About this extraction
This page contains the full source code of the Stealth2012/meridian GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 340 files (1.7 MB), approximately 374.9k tokens, and a symbol index with 1493 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.