diff --git a/aurora-sharp-desktop/.gitignore b/aurora-sharp-desktop/.gitignore
new file mode 100644
index 0000000..23e17b6
--- /dev/null
+++ b/aurora-sharp-desktop/.gitignore
@@ -0,0 +1,351 @@
+## Ignore Visual Studio temporary files, build results, and
+## files generated by popular Visual Studio add-ons.
+##
+## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
+
+# User-specific files
+*.rsuser
+*.suo
+*.user
+*.userosscache
+*.sln.docstates
+
+# User-specific files (MonoDevelop/Xamarin Studio)
+*.userprefs
+
+# Mono auto generated files
+mono_crash.*
+
+# Build results
+[Dd]ebug/
+[Dd]ebugPublic/
+[Rr]elease/
+[Rr]eleases/
+x64/
+x86/
+[Aa][Rr][Mm]/
+[Aa][Rr][Mm]64/
+bld/
+[Bb]in/
+[Oo]bj/
+[Ll]og/
+
+# Visual Studio 2015/2017 cache/options directory
+.vs/
+# Uncomment if you have tasks that create the project's static files in wwwroot
+#wwwroot/
+
+# Visual Studio 2017 auto generated files
+Generated\ Files/
+
+# MSTest test Results
+[Tt]est[Rr]esult*/
+[Bb]uild[Ll]og.*
+
+# NUnit
+*.VisualState.xml
+TestResult.xml
+nunit-*.xml
+
+# Build Results of an ATL Project
+[Dd]ebugPS/
+[Rr]eleasePS/
+dlldata.c
+
+# Benchmark Results
+BenchmarkDotNet.Artifacts/
+
+# .NET Core
+project.lock.json
+project.fragment.lock.json
+artifacts/
+
+# StyleCop
+StyleCopReport.xml
+
+# Files built by Visual Studio
+*_i.c
+*_p.c
+*_h.h
+*.ilk
+*.meta
+*.obj
+*.iobj
+*.pch
+*.pdb
+*.ipdb
+*.pgc
+*.pgd
+*.rsp
+*.sbr
+*.tlb
+*.tli
+*.tlh
+*.tmp
+*.tmp_proj
+*_wpftmp.csproj
+*.log
+*.vspscc
+*.vssscc
+.builds
+*.pidb
+*.svclog
+*.scc
+
+# Chutzpah Test files
+_Chutzpah*
+
+# Visual C++ cache files
+ipch/
+*.aps
+*.ncb
+*.opendb
+*.opensdf
+*.sdf
+*.cachefile
+*.VC.db
+*.VC.VC.opendb
+
+# Visual Studio profiler
+*.psess
+*.vsp
+*.vspx
+*.sap
+
+# Visual Studio Trace Files
+*.e2e
+
+# 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
+
+# AxoCover is a Code Coverage Tool
+.axoCover/*
+!.axoCover/settings.json
+
+# Visual Studio code coverage results
+*.coverage
+*.coveragexml
+
+# NCrunch
+_NCrunch_*
+.*crunch*.local.xml
+nCrunchTemp_*
+
+# 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
+# Note: Comment the next line if you want to checkin your web deploy settings,
+# but database connection strings (with potential passwords) will be unencrypted
+*.pubxml
+*.publishproj
+
+# Microsoft Azure Web App publish settings. Comment the next line if you want to
+# checkin your Azure Web App publish settings, but sensitive information contained
+# in these scripts will be unencrypted
+PublishScripts/
+
+# NuGet Packages
+*.nupkg
+# NuGet Symbol Packages
+*.snupkg
+# The packages folder can be ignored because of Package Restore
+**/[Pp]ackages/*
+# except build/, which is used as an MSBuild target.
+!**/[Pp]ackages/build/
+# Uncomment if necessary however generally it will be regenerated when needed
+#!**/[Pp]ackages/repositories.config
+# NuGet v3's project.json files produces more ignorable files
+*.nuget.props
+*.nuget.targets
+
+# Microsoft Azure Build Output
+csx/
+*.build.csdef
+
+# Microsoft Azure Emulator
+ecf/
+rcf/
+
+# Windows Store app package directories and files
+AppPackages/
+BundleArtifacts/
+Package.StoreAssociation.xml
+_pkginfo.txt
+*.appx
+*.appxbundle
+*.appxupload
+
+# 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/
+~$*
+*~
+*.dbmdl
+*.dbproj.schemaview
+*.jfm
+*.pfx
+*.publishsettings
+orleans.codegen.cs
+
+# Including strong name files can present a security risk
+# (https://github.com/github/gitignore/pull/2483#issue-259490424)
+#*.snk
+
+# Since there are multiple workflows, uncomment next line to ignore bower_components
+# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
+#bower_components/
+
+# 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
+ServiceFabricBackup/
+*.rptproj.bak
+
+# SQL Server files
+*.mdf
+*.ldf
+*.ndf
+
+# Business Intelligence projects
+*.rdl.data
+*.bim.layout
+*.bim_*.settings
+*.rptproj.rsuser
+*- [Bb]ackup.rdl
+*- [Bb]ackup ([0-9]).rdl
+*- [Bb]ackup ([0-9][0-9]).rdl
+
+# Microsoft Fakes
+FakesAssemblies/
+
+# GhostDoc plugin setting file
+*.GhostDoc.xml
+
+# Node.js Tools for Visual Studio
+.ntvs_analysis.dat
+node_modules/
+
+# Visual Studio 6 build log
+*.plg
+
+# Visual Studio 6 workspace options file
+*.opt
+
+# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
+*.vbw
+
+# Visual Studio LightSwitch build output
+**/*.HTMLClient/GeneratedArtifacts
+**/*.DesktopClient/GeneratedArtifacts
+**/*.DesktopClient/ModelManifest.xml
+**/*.Server/GeneratedArtifacts
+**/*.Server/ModelManifest.xml
+_Pvt_Extensions
+
+# Paket dependency manager
+.paket/paket.exe
+paket-files/
+
+# FAKE - F# Make
+.fake/
+
+# CodeRush personal settings
+.cr/personal
+
+# Python Tools for Visual Studio (PTVS)
+__pycache__/
+*.pyc
+
+# Cake - Uncomment if you are using it
+# tools/**
+# !tools/packages.config
+
+# Tabs Studio
+*.tss
+
+# Telerik's JustMock configuration file
+*.jmconfig
+
+# BizTalk build output
+*.btp.cs
+*.btm.cs
+*.odx.cs
+*.xsd.cs
+
+# OpenCover UI analysis results
+OpenCover/
+
+# Azure Stream Analytics local run output
+ASALocalRun/
+
+# MSBuild Binary and Structured Log
+*.binlog
+
+# NVidia Nsight GPU debugger configuration file
+*.nvuser
+
+# MFractors (Xamarin productivity tool) working folder
+.mfractor/
+
+# Local History for Visual Studio
+.localhistory/
+
+# BeatPulse healthcheck temp database
+healthchecksdb
+
+# Backup folder for Package Reference Convert tool in Visual Studio 2017
+MigrationBackup/
+
+start*.sh
diff --git a/aurora-sharp-desktop/.vscode/launch.json b/aurora-sharp-desktop/.vscode/launch.json
new file mode 100644
index 0000000..6e73b4c
--- /dev/null
+++ b/aurora-sharp-desktop/.vscode/launch.json
@@ -0,0 +1,36 @@
+{
+ // Use IntelliSense to learn about possible attributes.
+ // Hover to view descriptions of existing attributes.
+ // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
+ "version": "0.2.0",
+ "configurations": [
+ {
+ "preLaunchTask": "build-and-start-debug-server",
+ "name": "Start and Attach",
+ "type": "mono",
+ "request": "attach",
+ "address": "localhost",
+ "port": 55555,
+ },
+ {
+ "preLaunchTask": "Attach",
+ "name": "Attach",
+ "type": "mono",
+ "request": "attach",
+ "address": "localhost",
+ "port": 55555,
+ },
+ {
+ "preLaunchTask": "build",
+ "name": "Launch",
+ "type": "mono",
+ "request": "launch",
+ "console": "internalConsole",
+ "program": "${workspaceFolder}/Aurora.gtk/bin/Debug/Aurora.gtk.exe",
+ "args": [
+ "--debug",
+ "--debuggre-agent=transport=dt_socket,server=y,address=127.0.0.1:5555"
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/aurora-sharp-desktop/.vscode/tasks.json b/aurora-sharp-desktop/.vscode/tasks.json
new file mode 100644
index 0000000..cef9c12
--- /dev/null
+++ b/aurora-sharp-desktop/.vscode/tasks.json
@@ -0,0 +1,45 @@
+{
+ // See https://go.microsoft.com/fwlink/?LinkId=733558
+ // for the documentation about the tasks.json format
+ "version": "2.0.0",
+ "tasks": [
+ {
+ "label": "build",
+ "type": "shell",
+ "command": "msbuild",
+ "args": [
+ // Ask msbuild to generate full paths for file names.
+ "/property:GenerateFullPaths=true",
+ "/t:build"
+ ],
+ "group": "build",
+ "problemMatcher": "$msCompile"
+ },
+ {
+ "label": "build-and-start-debug-server",
+ "type": "shell",
+ "isBackground": true,
+ "command": "./start.sh",
+ // This task is run before some debug tasks.
+ // Problem is, it's a watch script, and since it never exits, VSCode
+ // complains. All this is needed so VSCode just lets it run.
+ "problemMatcher": [
+ {
+ "pattern": [
+ {
+ "regexp": ".",
+ "file": 1,
+ "location": 2,
+ "message": 3
+ }
+ ],
+ "background": {
+ "activeOnStart": true,
+ "beginsPattern": ".",
+ "endsPattern": ".",
+ }
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/aurora-sharp-desktop/Aurora.gtk/Aurora.gtk.csproj b/aurora-sharp-desktop/Aurora.gtk/Aurora.gtk.csproj
new file mode 100644
index 0000000..d80583a
--- /dev/null
+++ b/aurora-sharp-desktop/Aurora.gtk/Aurora.gtk.csproj
@@ -0,0 +1,549 @@
+
+
+
+
+
+ Debug
+ iPhoneSimulator
+ {E8C8C24A-5C51-47CB-B241-F5A9F0E808B1}
+ WinExe
+ Aurora.gtk
+ Aurora.gtk
+ v4.7
+
+
+ true
+ full
+ false
+ bin\Debug
+ DEBUG;
+ prompt
+ 4
+
+
+ true
+ bin\Release
+ prompt
+ 4
+
+
+
+
+ False
+
+
+ False
+
+
+ False
+
+
+ False
+
+
+ False
+
+
+ False
+
+
+
+ ..\packages\Xamarin.Forms.4.3.0.991211\lib\netstandard2.0\Xamarin.Forms.Core.dll
+
+
+ ..\packages\Xamarin.Forms.4.3.0.991211\lib\netstandard2.0\Xamarin.Forms.Platform.dll
+
+
+ ..\packages\Xamarin.Forms.4.3.0.991211\lib\netstandard2.0\Xamarin.Forms.Xaml.dll
+
+
+ ..\packages\OpenTK.3.1.0\lib\net20\OpenTK.dll
+
+
+ ..\packages\Xamarin.Forms.Platform.GTK.4.3.0.991211\lib\net45\webkit-sharp.dll
+
+
+ ..\packages\Xamarin.Forms.Platform.GTK.4.3.0.991211\lib\net45\Xamarin.Forms.Platform.GTK.dll
+
+
+ ..\packages\System.Reflection.4.3.0\lib\net462\System.Reflection.dll
+
+
+
+ ..\packages\System.Reflection.TypeExtensions.4.6.0\lib\net461\System.Reflection.TypeExtensions.dll
+
+
+ ..\packages\System.Runtime.Serialization.Primitives.4.3.0\lib\net46\System.Runtime.Serialization.Primitives.dll
+
+
+
+ ..\packages\taglib-sharp-netstandard2.0.2.1.0\lib\netstandard2.0\taglib-sharp.dll
+
+
+
+ ..\packages\Microsoft.Bcl.Async.1.0.168\lib\net40\Microsoft.Threading.Tasks.dll
+
+
+ ..\packages\Microsoft.Bcl.Async.1.0.168\lib\net40\Microsoft.Threading.Tasks.Extensions.Desktop.dll
+
+
+ ..\packages\Microsoft.Bcl.Async.1.0.168\lib\net40\Microsoft.Threading.Tasks.Extensions.dll
+
+
+
+ ..\packages\System.ValueTuple.4.5.0\lib\net47\System.ValueTuple.dll
+
+
+ ..\packages\LibVLCSharp.3.3.1\lib\net40\LibVLCSharp.dll
+
+
+ ..\packages\LibVLCSharp.Forms.3.3.1\lib\netstandard2.0\LibVLCSharp.Forms.dll
+
+
+ ..\packages\System.Runtime.InteropServices.RuntimeInformation.4.3.0\lib\net45\System.Runtime.InteropServices.RuntimeInformation.dll
+
+
+ ..\packages\LibVLCSharp.GTK.3.3.1\lib\net47\LibVLCSharp.GTK.dll
+
+
+ ..\packages\LibVLCSharp.Forms.GTK.3.3.1\lib\net47\LibVLCSharp.Forms.Platforms.GTK.dll
+
+
+ ..\packages\Google.Protobuf.3.10.1\lib\net45\Google.Protobuf.dll
+
+
+ ..\packages\System.Interactive.Async.4.0.0\lib\net461\System.Interactive.Async.dll
+
+
+ ..\packages\Grpc.Core.Api.2.25.0\lib\net45\Grpc.Core.Api.dll
+
+
+
+ ..\packages\Grpc.Core.2.25.0\lib\net45\Grpc.Core.dll
+
+
+ ..\packages\Xam.Plugins.Settings.3.1.1\lib\net45\Plugin.Settings.Abstractions.dll
+
+
+ ..\packages\Xam.Plugins.Settings.3.1.1\lib\net45\Plugin.Settings.dll
+
+
+ ..\packages\Sharpnado.Forms.HorizontalListView.1.3.0\lib\netstandard2.0\Sharpnado.Infrastructure.dll
+
+
+ ..\packages\Sharpnado.Forms.HorizontalListView.1.3.0\lib\netstandard2.0\Sharpnado.Presentation.Forms.dll
+
+
+ ..\packages\System.Buffers.4.4.0\lib\netstandard2.0\System.Buffers.dll
+
+
+ ..\packages\System.Numerics.Vectors.4.4.0\lib\net46\System.Numerics.Vectors.dll
+
+
+
+ ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.2\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll
+
+
+ ..\packages\System.Memory.4.5.3\lib\netstandard2.0\System.Memory.dll
+
+
+ ..\packages\System.Threading.Tasks.Extensions.4.5.2\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll
+
+
+ ..\packages\Microsoft.Bcl.AsyncInterfaces.1.1.0\lib\net461\Microsoft.Bcl.AsyncInterfaces.dll
+
+
+ ..\packages\System.Linq.Async.4.0.0\lib\net461\System.Linq.Async.dll
+
+
+ ..\packages\OpenTK.GLControl.3.0.1\lib\net20\OpenTK.GLControl.dll
+
+
+ ..\packages\DLToolkit.Forms.Controls.FlowListView.2.0.11\lib\portable-net45+wp8+wpa81+win8+MonoAndroid10+MonoTouch10+Xamarin.iOS10+netstandard1.0\DLToolkit.Forms.Controls.FlowListView.dll
+
+
+ ..\packages\CarouselView.FormsPlugin.5.2.0\lib\netstandard2.0\CarouselView.FormsPlugin.Abstractions.dll
+
+
+ ..\packages\Autofac.5.0.0\lib\net461\Autofac.dll
+
+
+
+
+
+ gui.stetic
+
+
+ Always
+
+
+ Always
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PreserveNewest
+
+
+
+
+
+
+ {17F51282-39BE-4FE3-8EC7-6D108F5DD0FD}
+ Aurora
+
+
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/aurora-sharp-desktop/Aurora.gtk/Helpers/Settings.cs b/aurora-sharp-desktop/Aurora.gtk/Helpers/Settings.cs
new file mode 100644
index 0000000..301f469
--- /dev/null
+++ b/aurora-sharp-desktop/Aurora.gtk/Helpers/Settings.cs
@@ -0,0 +1,44 @@
+/*
+// Helpers/Settings.cs This file was automatically added when you installed the Settings Plugin. If you are not using a PCL then comment this file back in to use it.
+using Plugin.Settings;
+using Plugin.Settings.Abstractions;
+
+namespace Aurora.gtk.Helpers
+{
+ ///
+ /// This is the Settings static class that can be used in your Core solution or in any
+ /// of your client applications. All settings are laid out the same exact way with getters
+ /// and setters.
+ ///
+ public static class Settings
+ {
+ private static ISettings AppSettings
+ {
+ get
+ {
+ return CrossSettings.Current;
+ }
+ }
+
+ #region Setting Constants
+
+ private const string SettingsKey = "settings_key";
+ private static readonly string SettingsDefault = string.Empty;
+
+ #endregion
+
+
+ public static string GeneralSettings
+ {
+ get
+ {
+ return AppSettings.GetValueOrDefault(SettingsKey, SettingsDefault);
+ }
+ set
+ {
+ AppSettings.AddOrUpdateValue(SettingsKey, value);
+ }
+ }
+
+ }
+}*/
\ No newline at end of file
diff --git a/aurora-sharp-desktop/Aurora.gtk/LibVLCSharp.GTK.dll.config b/aurora-sharp-desktop/Aurora.gtk/LibVLCSharp.GTK.dll.config
new file mode 100644
index 0000000..781c4ac
--- /dev/null
+++ b/aurora-sharp-desktop/Aurora.gtk/LibVLCSharp.GTK.dll.config
@@ -0,0 +1,91 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/aurora-sharp-desktop/Aurora.gtk/LibVLCSharp.dll.config b/aurora-sharp-desktop/Aurora.gtk/LibVLCSharp.dll.config
new file mode 100644
index 0000000..781c4ac
--- /dev/null
+++ b/aurora-sharp-desktop/Aurora.gtk/LibVLCSharp.dll.config
@@ -0,0 +1,91 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/aurora-sharp-desktop/Aurora.gtk/MainWindow.cs b/aurora-sharp-desktop/Aurora.gtk/MainWindow.cs
new file mode 100644
index 0000000..8aad94d
--- /dev/null
+++ b/aurora-sharp-desktop/Aurora.gtk/MainWindow.cs
@@ -0,0 +1,16 @@
+using System;
+using Gtk;
+
+public partial class MainWindow : Gtk.Window
+{
+ public MainWindow() : base(Gtk.WindowType.Toplevel)
+ {
+ Build();
+ }
+
+ protected void OnDeleteEvent(object sender, DeleteEventArgs a)
+ {
+ Application.Quit();
+ a.RetVal = true;
+ }
+}
diff --git a/aurora-sharp-desktop/Aurora.gtk/OpenTK.dll.config b/aurora-sharp-desktop/Aurora.gtk/OpenTK.dll.config
new file mode 100644
index 0000000..7098d39
--- /dev/null
+++ b/aurora-sharp-desktop/Aurora.gtk/OpenTK.dll.config
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/aurora-sharp-desktop/Aurora.gtk/Program.cs b/aurora-sharp-desktop/Aurora.gtk/Program.cs
new file mode 100644
index 0000000..b3ef8c5
--- /dev/null
+++ b/aurora-sharp-desktop/Aurora.gtk/Program.cs
@@ -0,0 +1,31 @@
+using System;
+using LibVLCSharp.Forms.Shared;
+using Xamarin.Forms.Platform.GTK;
+
+namespace Aurora.gtk
+{
+ class MainClass
+ {
+ [STAThread]
+ public static void Main(string[] args)
+ {
+ Gtk.Application.Init();
+ LibVLCSharpFormsRenderer.Init();
+ DLToolkit.Forms.Controls.FlowListView.Init();
+
+ // For some reason, Xamarin does not pick the LibVLCSharp.Form.Platforms.Gtk assembly as a renderer assembly.
+ // Add it manually.
+
+ //Also css doesn't work without adding the Xaml assembly
+ global::Xamarin.Forms.Forms.Init(new[] { typeof(LibVLCSharp.Forms.Platforms.GTK.VideoViewRenderer).Assembly, typeof(Xamarin.Forms.Xaml.ArrayExtension).Assembly });
+
+ var app = new App();
+ var window = new FormsWindow();
+ window.LoadApplication(app);
+ window.SetApplicationTitle("Aurora");
+ window.Show();
+
+ Gtk.Application.Run();
+ }
+ }
+}
diff --git a/aurora-sharp-desktop/Aurora.gtk/Properties/AssemblyInfo.cs b/aurora-sharp-desktop/Aurora.gtk/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..f7c8a55
--- /dev/null
+++ b/aurora-sharp-desktop/Aurora.gtk/Properties/AssemblyInfo.cs
@@ -0,0 +1,26 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+
+// Information about this assembly is defined by the following attributes.
+// Change them to the values specific to your project.
+
+[assembly: AssemblyTitle("Aurora.gtk")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("")]
+[assembly: AssemblyCopyright("")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
+// The form "{Major}.{Minor}.*" will automatically update the build and revision,
+// and "{Major}.{Minor}.{Build}.*" will update just the revision.
+
+[assembly: AssemblyVersion("1.0.*")]
+
+// The following attributes are used to specify the signing key for the assembly,
+// if desired. See the Mono documentation for more information about signing.
+
+//[assembly: AssemblyDelaySign(false)]
+//[assembly: AssemblyKeyFile("")]
diff --git a/aurora-sharp-desktop/Aurora.gtk/Resources/backward.png b/aurora-sharp-desktop/Aurora.gtk/Resources/backward.png
new file mode 100644
index 0000000..047aeb8
Binary files /dev/null and b/aurora-sharp-desktop/Aurora.gtk/Resources/backward.png differ
diff --git a/aurora-sharp-desktop/Aurora.gtk/Resources/forwards.png b/aurora-sharp-desktop/Aurora.gtk/Resources/forwards.png
new file mode 100644
index 0000000..29b4b3f
Binary files /dev/null and b/aurora-sharp-desktop/Aurora.gtk/Resources/forwards.png differ
diff --git a/aurora-sharp-desktop/Aurora.gtk/Resources/like.png b/aurora-sharp-desktop/Aurora.gtk/Resources/like.png
new file mode 100644
index 0000000..0ed3e1b
Binary files /dev/null and b/aurora-sharp-desktop/Aurora.gtk/Resources/like.png differ
diff --git a/aurora-sharp-desktop/Aurora.gtk/Resources/loop.png b/aurora-sharp-desktop/Aurora.gtk/Resources/loop.png
new file mode 100644
index 0000000..4adfaa9
Binary files /dev/null and b/aurora-sharp-desktop/Aurora.gtk/Resources/loop.png differ
diff --git a/aurora-sharp-desktop/Aurora.gtk/Resources/menu.png b/aurora-sharp-desktop/Aurora.gtk/Resources/menu.png
new file mode 100644
index 0000000..dba7ae5
Binary files /dev/null and b/aurora-sharp-desktop/Aurora.gtk/Resources/menu.png differ
diff --git a/aurora-sharp-desktop/Aurora.gtk/Resources/pause.png b/aurora-sharp-desktop/Aurora.gtk/Resources/pause.png
new file mode 100644
index 0000000..bbc2a01
Binary files /dev/null and b/aurora-sharp-desktop/Aurora.gtk/Resources/pause.png differ
diff --git a/aurora-sharp-desktop/Aurora.gtk/Resources/play.png b/aurora-sharp-desktop/Aurora.gtk/Resources/play.png
new file mode 100644
index 0000000..90264e6
Binary files /dev/null and b/aurora-sharp-desktop/Aurora.gtk/Resources/play.png differ
diff --git a/aurora-sharp-desktop/Aurora.gtk/Resources/shuffle.png b/aurora-sharp-desktop/Aurora.gtk/Resources/shuffle.png
new file mode 100644
index 0000000..4ec3d3f
Binary files /dev/null and b/aurora-sharp-desktop/Aurora.gtk/Resources/shuffle.png differ
diff --git a/aurora-sharp-desktop/Aurora.gtk/gtk-gui/MainWindow.cs b/aurora-sharp-desktop/Aurora.gtk/gtk-gui/MainWindow.cs
new file mode 100644
index 0000000..8c2a74b
--- /dev/null
+++ b/aurora-sharp-desktop/Aurora.gtk/gtk-gui/MainWindow.cs
@@ -0,0 +1,22 @@
+
+// This file has been generated by the GUI designer. Do not modify.
+
+public partial class MainWindow
+{
+ protected virtual void Build()
+ {
+ global::Stetic.Gui.Initialize(this);
+ // Widget MainWindow
+ this.Name = "MainWindow";
+ this.Title = global::Mono.Unix.Catalog.GetString("MainWindow");
+ this.WindowPosition = ((global::Gtk.WindowPosition)(4));
+ if ((this.Child != null))
+ {
+ this.Child.ShowAll();
+ }
+ this.DefaultWidth = 400;
+ this.DefaultHeight = 300;
+ this.Show();
+ this.DeleteEvent += new global::Gtk.DeleteEventHandler(this.OnDeleteEvent);
+ }
+}
diff --git a/aurora-sharp-desktop/Aurora.gtk/gtk-gui/generated.cs b/aurora-sharp-desktop/Aurora.gtk/gtk-gui/generated.cs
new file mode 100644
index 0000000..4842e95
--- /dev/null
+++ b/aurora-sharp-desktop/Aurora.gtk/gtk-gui/generated.cs
@@ -0,0 +1,30 @@
+
+// This file has been generated by the GUI designer. Do not modify.
+namespace Stetic
+{
+ internal class Gui
+ {
+ private static bool initialized;
+
+ internal static void Initialize(Gtk.Widget iconRenderer)
+ {
+ if ((Stetic.Gui.initialized == false))
+ {
+ Stetic.Gui.initialized = true;
+ }
+ }
+ }
+
+ internal class ActionGroups
+ {
+ public static Gtk.ActionGroup GetActionGroup(System.Type type)
+ {
+ return Stetic.ActionGroups.GetActionGroup(type.FullName);
+ }
+
+ public static Gtk.ActionGroup GetActionGroup(string name)
+ {
+ return null;
+ }
+ }
+}
diff --git a/aurora-sharp-desktop/Aurora.gtk/gtk-gui/gui.stetic b/aurora-sharp-desktop/Aurora.gtk/gtk-gui/gui.stetic
new file mode 100644
index 0000000..0d4f676
--- /dev/null
+++ b/aurora-sharp-desktop/Aurora.gtk/gtk-gui/gui.stetic
@@ -0,0 +1,21 @@
+
+
+
+ ..
+
+
+
+
+
+
+
+
+
+ MainWindow
+ CenterOnParent
+
+
+
+
+
+
\ No newline at end of file
diff --git a/aurora-sharp-desktop/Aurora.gtk/libvlc.dylib b/aurora-sharp-desktop/Aurora.gtk/libvlc.dylib
new file mode 100755
index 0000000..a1af725
Binary files /dev/null and b/aurora-sharp-desktop/Aurora.gtk/libvlc.dylib differ
diff --git a/aurora-sharp-desktop/Aurora.gtk/packages.config b/aurora-sharp-desktop/Aurora.gtk/packages.config
new file mode 100644
index 0000000..45a8c07
--- /dev/null
+++ b/aurora-sharp-desktop/Aurora.gtk/packages.config
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/aurora-sharp-desktop/Aurora.gtk/webkit-sharp.dll.config b/aurora-sharp-desktop/Aurora.gtk/webkit-sharp.dll.config
new file mode 100644
index 0000000..2c002a5
--- /dev/null
+++ b/aurora-sharp-desktop/Aurora.gtk/webkit-sharp.dll.config
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/aurora-sharp-desktop/Aurora.sln b/aurora-sharp-desktop/Aurora.sln
new file mode 100644
index 0000000..2140969
--- /dev/null
+++ b/aurora-sharp-desktop/Aurora.sln
@@ -0,0 +1,57 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 15
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Aurora", "Aurora\Aurora.csproj", "{17F51282-39BE-4FE3-8EC7-6D108F5DD0FD}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Aurora.gtk", "Aurora.gtk\Aurora.gtk.csproj", "{E8C8C24A-5C51-47CB-B241-F5A9F0E808B1}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Aurora.test", "Aurora.test\Aurora.test.csproj", "{45680D8A-1AF1-4D93-AAC0-59CDB01CED5D}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|iPhoneSimulator = Debug|iPhoneSimulator
+ Release|iPhoneSimulator = Release|iPhoneSimulator
+ Debug|iPhone = Debug|iPhone
+ Release|iPhone = Release|iPhone
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {17F51282-39BE-4FE3-8EC7-6D108F5DD0FD}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {17F51282-39BE-4FE3-8EC7-6D108F5DD0FD}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {17F51282-39BE-4FE3-8EC7-6D108F5DD0FD}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {17F51282-39BE-4FE3-8EC7-6D108F5DD0FD}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+ {17F51282-39BE-4FE3-8EC7-6D108F5DD0FD}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+ {17F51282-39BE-4FE3-8EC7-6D108F5DD0FD}.Debug|iPhone.Build.0 = Debug|Any CPU
+ {17F51282-39BE-4FE3-8EC7-6D108F5DD0FD}.Release|iPhone.ActiveCfg = Release|Any CPU
+ {17F51282-39BE-4FE3-8EC7-6D108F5DD0FD}.Release|iPhone.Build.0 = Release|Any CPU
+ {17F51282-39BE-4FE3-8EC7-6D108F5DD0FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {17F51282-39BE-4FE3-8EC7-6D108F5DD0FD}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {17F51282-39BE-4FE3-8EC7-6D108F5DD0FD}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {17F51282-39BE-4FE3-8EC7-6D108F5DD0FD}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E8C8C24A-5C51-47CB-B241-F5A9F0E808B1}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator
+ {E8C8C24A-5C51-47CB-B241-F5A9F0E808B1}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator
+ {E8C8C24A-5C51-47CB-B241-F5A9F0E808B1}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator
+ {E8C8C24A-5C51-47CB-B241-F5A9F0E808B1}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator
+ {E8C8C24A-5C51-47CB-B241-F5A9F0E808B1}.Debug|iPhone.ActiveCfg = Debug|iPhoneSimulator
+ {E8C8C24A-5C51-47CB-B241-F5A9F0E808B1}.Debug|iPhone.Build.0 = Debug|iPhoneSimulator
+ {E8C8C24A-5C51-47CB-B241-F5A9F0E808B1}.Release|iPhone.ActiveCfg = Release|iPhoneSimulator
+ {E8C8C24A-5C51-47CB-B241-F5A9F0E808B1}.Release|iPhone.Build.0 = Release|iPhoneSimulator
+ {E8C8C24A-5C51-47CB-B241-F5A9F0E808B1}.Debug|Any CPU.ActiveCfg = Debug|iPhoneSimulator
+ {E8C8C24A-5C51-47CB-B241-F5A9F0E808B1}.Debug|Any CPU.Build.0 = Debug|iPhoneSimulator
+ {E8C8C24A-5C51-47CB-B241-F5A9F0E808B1}.Release|Any CPU.ActiveCfg = Release|iPhoneSimulator
+ {E8C8C24A-5C51-47CB-B241-F5A9F0E808B1}.Release|Any CPU.Build.0 = Release|iPhoneSimulator
+ {45680D8A-1AF1-4D93-AAC0-59CDB01CED5D}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {45680D8A-1AF1-4D93-AAC0-59CDB01CED5D}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {45680D8A-1AF1-4D93-AAC0-59CDB01CED5D}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {45680D8A-1AF1-4D93-AAC0-59CDB01CED5D}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+ {45680D8A-1AF1-4D93-AAC0-59CDB01CED5D}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+ {45680D8A-1AF1-4D93-AAC0-59CDB01CED5D}.Debug|iPhone.Build.0 = Debug|Any CPU
+ {45680D8A-1AF1-4D93-AAC0-59CDB01CED5D}.Release|iPhone.ActiveCfg = Release|Any CPU
+ {45680D8A-1AF1-4D93-AAC0-59CDB01CED5D}.Release|iPhone.Build.0 = Release|Any CPU
+ {45680D8A-1AF1-4D93-AAC0-59CDB01CED5D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {45680D8A-1AF1-4D93-AAC0-59CDB01CED5D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {45680D8A-1AF1-4D93-AAC0-59CDB01CED5D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {45680D8A-1AF1-4D93-AAC0-59CDB01CED5D}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+EndGlobal
diff --git a/aurora-sharp-desktop/Aurora.test/Aurora.test.csproj b/aurora-sharp-desktop/Aurora.test/Aurora.test.csproj
new file mode 100644
index 0000000..6c6b85c
--- /dev/null
+++ b/aurora-sharp-desktop/Aurora.test/Aurora.test.csproj
@@ -0,0 +1,117 @@
+
+
+ netcoreapp3.0
+ false
+
+
+
+
+
+
+
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+ all
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+
\ No newline at end of file
diff --git a/aurora-sharp-desktop/Aurora.test/ControllerTests/EventTests.cs b/aurora-sharp-desktop/Aurora.test/ControllerTests/EventTests.cs
new file mode 100644
index 0000000..513331c
--- /dev/null
+++ b/aurora-sharp-desktop/Aurora.test/ControllerTests/EventTests.cs
@@ -0,0 +1,100 @@
+
+using NUnit.Framework;
+using Aurora.Proto.Party;
+using Aurora.Services.Server;
+using Aurora.Services.EventManager;
+using Grpc.Core;
+using System.Threading.Tasks;
+using System.Threading;
+using Autofac;
+namespace Aurora.test.ControllerTests
+{
+ public class EventTest
+ {
+ private RemotePartyService.RemotePartyServiceClient _remotePartyService;
+ private Channel _channel;
+ private IContainer _container;
+ private IServerService _serverService;
+
+ #region Setup
+ [SetUp]
+ public void Setup()
+ {
+ _container = SetupUtil.SetupOneTime();
+ _remotePartyService = SetupUtil.Setup(ref _container, ref _serverService, ref _channel);
+ }
+
+ [TearDown]
+ public async Task TearDown()
+ {
+ await _serverService.Stop();
+ await _channel.ShutdownAsync();
+ _container.Dispose();
+ }
+ #endregion Setup
+ [Test]
+ [TestCase(EventType.MediaPlaying)]
+ public void Asdf(EventType value)
+ {
+ Assert.AreEqual(1, 1);
+ }
+
+ [Test]
+ [TestCase(EventType.MediaPlaying)]
+ [TestCase(EventType.MediaStopped)]
+ [TestCase(EventType.MemberCreated)]
+ [TestCase(EventType.MemberDeleted)]
+ public async Task TestEventSubscriptions(EventType value)
+ {
+ using (var scope = _container.BeginLifetimeScope())
+ {
+ IEventManager eventManager = scope.Resolve();
+
+ //Create new party member
+ Member member = _remotePartyService.CreateMember(new CreateMemberRequest()
+ {
+ Parent = "party1",
+ Member = new Member()
+ {
+ UserName = "newMember1",
+ IpAddress = ServerService.GetLocalIPAddress(),
+ }
+ });
+
+ //Subscribe to event type
+ _remotePartyService.CreateEventSubscription(new CreateEventSubscriptionRequest()
+ {
+ Parent = member.Name,
+ EventSubscription = new EventSubscription()
+ {
+ Type = value
+ }
+ });
+
+ BaseEvent @event = new BaseEvent
+ {
+ EventType = value,
+ };
+ //Fire event
+
+ CancellationTokenSource eventCancellationTokenSource = new CancellationTokenSource();
+ BaseEvent newEvent = null;
+
+ Task.Run(async () => { await Task.Delay(1000); eventManager.FireEvent(@event); });
+
+ using (AsyncServerStreamingCall eventStream = _remotePartyService
+ .GetEvents(new GetEventsRequest() { Parent = member.Name }))
+ {
+ while ((!eventCancellationTokenSource.Token.IsCancellationRequested &&
+ await eventStream.ResponseStream.MoveNext(eventCancellationTokenSource.Token)))
+ {
+ newEvent = new BaseEvent(eventStream.ResponseStream.Current);
+ break;
+ }
+ };
+
+ Assert.AreEqual(newEvent.EventType, value);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/aurora-sharp-desktop/Aurora.test/ControllerTests/MediaControllerTest.cs b/aurora-sharp-desktop/Aurora.test/ControllerTests/MediaControllerTest.cs
new file mode 100644
index 0000000..cf9e4ba
--- /dev/null
+++ b/aurora-sharp-desktop/Aurora.test/ControllerTests/MediaControllerTest.cs
@@ -0,0 +1,78 @@
+using NUnit.Framework;
+using Aurora.Proto.Party;
+using Aurora.Services.Server;
+using Grpc.Core;
+using System.Threading.Tasks;
+using System.Linq;
+using System.IO;
+using Autofac;
+
+namespace Aurora.test.ControllerTests
+{
+ public class MediaControllerTests
+ {
+ private RemotePartyService.RemotePartyServiceClient _remotePartyService;
+ private Channel _channel;
+ private IContainer _container;
+ private IServerService _serverService;
+
+ #region Setup
+ [OneTimeSetUp]
+ public void SetupOneTime()
+ {
+ _container = SetupUtil.SetupOneTime();
+ }
+
+ [OneTimeTearDown]
+ public void TearDownOneTime()
+ {
+ _container.Dispose();
+ }
+
+ [SetUp]
+ public void Setup()
+ {
+ _remotePartyService = SetupUtil.Setup(ref _container, ref _serverService, ref _channel);
+ }
+
+ [TearDown]
+ public async Task TearDown()
+ {
+ await _serverService.Stop();
+ await _channel.ShutdownAsync();
+ }
+ #endregion Setup
+
+ [Test]
+ public void TestNotEmpty()
+ {
+ ListMediaResponse resp = _remotePartyService.ListMedia(new ListMediaRequest()
+ {
+ Parent = "testParty",
+ PageSize = 5
+ });
+
+ Assert.NotNull(resp.Media);
+ Assert.NotZero(resp.Media.Count);
+ Assert.AreEqual(resp.Media.Count, 5);
+ }
+
+ [Test]
+ public void GetMediaTest()
+ {
+ ListMediaResponse resp = _remotePartyService.ListMedia(new ListMediaRequest()
+ {
+ Parent = "testParty",
+ PageSize = 5
+ });
+
+ Media media = _remotePartyService.GetMedia(new GetMediaRequest()
+ {
+ Name = resp.Media[0].Name
+ });
+
+ Assert.NotNull(media);
+ Assert.AreEqual(media.Name, resp.Media[0].Name);
+ }
+ }
+}
\ No newline at end of file
diff --git a/aurora-sharp-desktop/Aurora.test/ControllerTests/MembersControllerTest.cs b/aurora-sharp-desktop/Aurora.test/ControllerTests/MembersControllerTest.cs
new file mode 100644
index 0000000..212ffc2
--- /dev/null
+++ b/aurora-sharp-desktop/Aurora.test/ControllerTests/MembersControllerTest.cs
@@ -0,0 +1,206 @@
+using NUnit.Framework;
+using Aurora.Proto.Party;
+using Aurora.Services.Server;
+using Grpc.Core;
+using System.Threading.Tasks;
+using System.Linq;
+using Autofac;
+
+namespace Aurora.test.ControllerTests
+{
+ public class MemberControllerTests
+ {
+ private RemotePartyService.RemotePartyServiceClient _remotePartyService;
+ private Channel _channel;
+
+ private IContainer _container;
+ private IServerService _serverService;
+
+ #region Setup
+ [OneTimeSetUp]
+ public void SetupOneTime()
+ {
+ _container = SetupUtil.SetupOneTime();
+ }
+
+ [OneTimeTearDown]
+ public void TearDownOneTime()
+ {
+ _container.Dispose();
+ }
+
+ [SetUp]
+ public void Setup()
+ {
+ _remotePartyService = SetupUtil.Setup(ref _container, ref _serverService, ref _channel);
+ }
+
+ [TearDown]
+ public async Task TearDown()
+ {
+ await _serverService.Stop();
+ await _channel.ShutdownAsync();
+ }
+ #endregion Setup
+
+
+ [Test]
+ public void DefaultTest()
+ {
+ ListMembersResponse resp = _remotePartyService.ListMembers(new ListMembersRequest()
+ {
+ Parent = "party1",
+ PageSize = 10,
+ });
+ Assert.NotNull(resp);
+ Assert.GreaterOrEqual(resp.Members.Count, 1);
+ }
+
+ [Test]
+ [TestCase("Alex")]
+ [TestCase("Alex Goldberg")]
+ [TestCase("Alex/goldberg")]
+ [TestCase("alex@welcome.com")]
+ public void CreateMemberTest(string value)
+ {
+ Member member = _remotePartyService.CreateMember(new CreateMemberRequest()
+ {
+ Parent = "party1",
+ Member = new Member()
+ {
+ UserName = value,
+ IpAddress = ServerService.GetLocalIPAddress(),
+ }
+ });
+
+ Assert.NotNull(member);
+ }
+
+ static object[] MultipleMembersCases =
+ {
+ new object[] {"Tupac", "Aubrey Grahm", "Beyonce Knowls", "Ke$ha", "A$ap Ferg"},
+ };
+
+ [Test]
+ [TestCaseSource("MultipleMembersCases")]
+ public void CreateMultiplMembersTest(object[] memberNames)
+ {
+ //Add members
+ foreach (string name in memberNames)
+ {
+ Member member = _remotePartyService.CreateMember(new CreateMemberRequest()
+ {
+ Parent = "party1",
+ Member = new Member()
+ {
+ UserName = name
+ }
+ });
+
+ Assert.NotNull(member);
+ }
+
+ //List members
+ ListMembersResponse resp = _remotePartyService.ListMembers(new ListMembersRequest()
+ {
+ Parent = "party1",
+ PageSize = 10,
+ });
+ Assert.NotNull(resp);
+ Assert.AreEqual(resp.Members.Count, 6);
+ }
+
+ [Test]
+ [TestCaseSource("MultipleMembersCases")]
+ public void DeleteMemberTest(object[] memberNames)
+ {
+ //Add members
+ foreach (string name in memberNames)
+ {
+ Member member = _remotePartyService.CreateMember(new CreateMemberRequest()
+ {
+ Parent = "party1",
+ Member = new Member()
+ {
+ UserName = name
+ }
+ });
+
+ Assert.NotNull(member);
+ }
+
+ //List members
+ ListMembersResponse resp = _remotePartyService.ListMembers(new ListMembersRequest()
+ {
+ Parent = "party1",
+ PageSize = 10,
+ });
+ Assert.NotNull(resp);
+ Assert.AreEqual(resp.Members.Count, 6);
+
+ string keshaResourceName = resp.Members.First(member => member.UserName == "Ke$ha").Name;
+
+ //Delete member
+
+ _remotePartyService.DeleteMember(new DeleteMemberRequest()
+ {
+ Name = keshaResourceName
+ });
+
+ //List members
+ resp = _remotePartyService.ListMembers(new ListMembersRequest()
+ {
+ Parent = "party1",
+ PageSize = 10,
+ });
+ Assert.NotNull(resp);
+ Assert.AreEqual(resp.Members.Count, 5);
+ Assert.False(resp.Members.Any(member => member.UserName == "Ke$sha"));
+ }
+
+ static object[] PagingCases =
+ {
+ new object[] {"Tupac", "Aubrey Grahm", "Beyonce Knowls", "Ke$ha", "A$ap Ferg", "asdf", "sdfa", "dfas", "fasd"},
+ };
+
+ [Test]
+ [TestCaseSource("PagingCases")]
+ public void MemberPagingTest(object[] members)
+ {
+ foreach (string name in members)
+ {
+ Member member = _remotePartyService.CreateMember(new CreateMemberRequest()
+ {
+ Parent = "party1",
+ Member = new Member()
+ {
+ UserName = name
+ }
+ });
+
+ Assert.NotNull(member);
+ }
+
+ //List members
+ ListMembersResponse resp = _remotePartyService.ListMembers(new ListMembersRequest()
+ {
+ Parent = "party1",
+ PageSize = 2,
+ });
+
+ string nextPageToken = resp.NextPageToken;
+
+ Assert.AreEqual(resp.Members.Count, 2);
+
+ //List members
+ resp = _remotePartyService.ListMembers(new ListMembersRequest()
+ {
+ Parent = "party1",
+ PageSize = 2,
+ PageToken = nextPageToken,
+ });
+
+ Assert.AreEqual(resp.Members.Count, 2);
+ }
+ }
+}
\ No newline at end of file
diff --git a/aurora-sharp-desktop/Aurora.test/ControllerTests/PartyControllerTest.cs b/aurora-sharp-desktop/Aurora.test/ControllerTests/PartyControllerTest.cs
new file mode 100644
index 0000000..9c10b8d
--- /dev/null
+++ b/aurora-sharp-desktop/Aurora.test/ControllerTests/PartyControllerTest.cs
@@ -0,0 +1,53 @@
+using System.Threading.Tasks;
+using NUnit.Framework;
+using Aurora.Proto.Party;
+using Aurora.Services.Server;
+using Grpc.Core;
+using Autofac;
+
+namespace Aurora.test.ControllerTests
+{
+ public class PartyControllerTests
+ {
+ private RemotePartyService.RemotePartyServiceClient _remotePartyService;
+ private Channel _channel;
+ private IContainer _container;
+ private IServerService _serverService;
+
+ #region Setup
+ [OneTimeSetUp]
+ public void SetupOneTime()
+ {
+ _container = SetupUtil.SetupOneTime();
+ }
+
+ [OneTimeTearDown]
+ public void TearDownOneTime()
+ {
+ _container.Dispose();
+ }
+
+ [SetUp]
+ public void Setup()
+ {
+ _remotePartyService = SetupUtil.Setup(ref _container, ref _serverService, ref _channel);
+ }
+
+ [TearDown]
+ public async Task TearDown()
+ {
+ await _serverService.Stop();
+ await _channel.ShutdownAsync();
+ }
+ #endregion Setup
+
+ [Test]
+ public void DefaultTest()
+ {
+ Party party = _remotePartyService.GetParty(new Proto.General.Empty());
+
+ Assert.NotNull(party);
+ Assert.AreEqual(party.Name, "party/party1");
+ }
+ }
+}
\ No newline at end of file
diff --git a/aurora-sharp-desktop/Aurora.test/ControllerTests/Setup.cs b/aurora-sharp-desktop/Aurora.test/ControllerTests/Setup.cs
new file mode 100644
index 0000000..f011bf7
--- /dev/null
+++ b/aurora-sharp-desktop/Aurora.test/ControllerTests/Setup.cs
@@ -0,0 +1,39 @@
+using Autofac;
+using Aurora.Proto.Party;
+using Aurora.Services.Server;
+using Aurora.Services.Library;
+using Aurora.Services.Settings;
+using Aurora.Services.EventManager;
+using Aurora.test.Models.Mock;
+using System.IO;
+using Grpc.Core;
+
+namespace Aurora.test.ControllerTests
+{
+ public class SetupUtil
+ {
+ public static IContainer SetupOneTime()
+ {
+ ContainerBuilder builder = new ContainerBuilder();
+ builder.RegisterType().As().SingleInstance();
+ builder.RegisterInstance(new SettingsServiceMock()
+ {
+ Username = "Test User 1",
+ DefaultPort = 4005,
+ LibraryLocation = string.Format("{0}/Resources", Directory.GetCurrentDirectory())
+ }).SingleInstance();
+ builder.RegisterType().As().SingleInstance();
+ builder.RegisterType().As().SingleInstance();
+ return builder.Build();
+ }
+
+ public static RemotePartyService.RemotePartyServiceClient Setup(ref IContainer container, ref IServerService serverService, ref Channel channel)
+ {
+ serverService = container.Resolve();
+ serverService.Start("testParty", "asdf");
+ channel = new Channel(string.Format("{0}:{1}", ServerService.GetLocalIPAddress(), 8080), ChannelCredentials.Insecure);
+ return new RemotePartyService.RemotePartyServiceClient(channel);
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/aurora-sharp-desktop/Aurora.test/Models/CallContext.cs b/aurora-sharp-desktop/Aurora.test/Models/CallContext.cs
new file mode 100644
index 0000000..420c245
--- /dev/null
+++ b/aurora-sharp-desktop/Aurora.test/Models/CallContext.cs
@@ -0,0 +1,39 @@
+using System;
+using System.Threading;
+using System.Threading.Tasks;
+using Grpc.Core;
+
+namespace Aurora.test.Models
+{
+ public class CallContext : ServerCallContext
+ {
+ protected override string MethodCore => throw new NotImplementedException();
+
+ protected override string HostCore => throw new NotImplementedException();
+
+ protected override string PeerCore => throw new NotImplementedException();
+
+ protected override DateTime DeadlineCore => throw new NotImplementedException();
+
+ protected override Metadata RequestHeadersCore => throw new NotImplementedException();
+
+ protected override CancellationToken CancellationTokenCore => throw new NotImplementedException();
+
+ protected override Metadata ResponseTrailersCore => throw new NotImplementedException();
+
+ protected override Status StatusCore { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }
+ protected override WriteOptions WriteOptionsCore { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }
+
+ protected override AuthContext AuthContextCore => throw new NotImplementedException();
+
+ protected override ContextPropagationToken CreatePropagationTokenCore(ContextPropagationOptions options)
+ {
+ throw new NotImplementedException();
+ }
+
+ protected override Task WriteResponseHeadersAsyncCore(Metadata responseHeaders)
+ {
+ throw new NotImplementedException();
+ }
+ }
+}
\ No newline at end of file
diff --git a/aurora-sharp-desktop/Aurora.test/Models/Mock/SettingsServiceMock.cs b/aurora-sharp-desktop/Aurora.test/Models/Mock/SettingsServiceMock.cs
new file mode 100644
index 0000000..6126c92
--- /dev/null
+++ b/aurora-sharp-desktop/Aurora.test/Models/Mock/SettingsServiceMock.cs
@@ -0,0 +1,35 @@
+using Aurora.Services.Settings;
+using Plugin.Settings.Abstractions;
+
+namespace Aurora.test.Models.Mock
+{
+ public class SettingsServiceMock : ISettingsService
+ {
+ public SettingsServiceMock()
+ {
+
+ }
+
+ public ISettings AppSettings { get; set; }
+
+ ///
+ /// The user's username. This is persisted.
+ ///
+ ///
+ public string Username { get; set; }
+
+ ///
+ /// The default port to use. This is persisted.
+ ///
+ ///
+ public int DefaultPort { get; set; }
+
+ ///
+ /// The current sessions clientId. This is assigned by the server. This is not persisted.
+ ///
+ ///
+ public string ClientName { get; set; }
+
+ public string LibraryLocation { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/aurora-sharp-desktop/Aurora.test/Resources/Jidenna/The Chief/01 A Bull's Tale.mp3 b/aurora-sharp-desktop/Aurora.test/Resources/Jidenna/The Chief/01 A Bull's Tale.mp3
new file mode 100755
index 0000000..4378585
Binary files /dev/null and b/aurora-sharp-desktop/Aurora.test/Resources/Jidenna/The Chief/01 A Bull's Tale.mp3 differ
diff --git a/aurora-sharp-desktop/Aurora.test/Resources/Jidenna/The Chief/02 Chief Don't Run.mp3 b/aurora-sharp-desktop/Aurora.test/Resources/Jidenna/The Chief/02 Chief Don't Run.mp3
new file mode 100755
index 0000000..dc40b81
Binary files /dev/null and b/aurora-sharp-desktop/Aurora.test/Resources/Jidenna/The Chief/02 Chief Don't Run.mp3 differ
diff --git a/aurora-sharp-desktop/Aurora.test/Resources/Jidenna/The Chief/03 Trampoline.mp3 b/aurora-sharp-desktop/Aurora.test/Resources/Jidenna/The Chief/03 Trampoline.mp3
new file mode 100755
index 0000000..dea9b1f
Binary files /dev/null and b/aurora-sharp-desktop/Aurora.test/Resources/Jidenna/The Chief/03 Trampoline.mp3 differ
diff --git a/aurora-sharp-desktop/Aurora.test/Resources/Jidenna/The Chief/04 Bambi.mp3 b/aurora-sharp-desktop/Aurora.test/Resources/Jidenna/The Chief/04 Bambi.mp3
new file mode 100755
index 0000000..0ea6edd
Binary files /dev/null and b/aurora-sharp-desktop/Aurora.test/Resources/Jidenna/The Chief/04 Bambi.mp3 differ
diff --git a/aurora-sharp-desktop/Aurora.test/Resources/Jidenna/The Chief/05 Helicopters _ Beware.mp3 b/aurora-sharp-desktop/Aurora.test/Resources/Jidenna/The Chief/05 Helicopters _ Beware.mp3
new file mode 100755
index 0000000..457fe3f
Binary files /dev/null and b/aurora-sharp-desktop/Aurora.test/Resources/Jidenna/The Chief/05 Helicopters _ Beware.mp3 differ
diff --git a/aurora-sharp-desktop/Aurora.test/Resources/Jidenna/The Chief/06 Long Live The Chief.mp3 b/aurora-sharp-desktop/Aurora.test/Resources/Jidenna/The Chief/06 Long Live The Chief.mp3
new file mode 100755
index 0000000..04ff67d
Binary files /dev/null and b/aurora-sharp-desktop/Aurora.test/Resources/Jidenna/The Chief/06 Long Live The Chief.mp3 differ
diff --git a/aurora-sharp-desktop/Aurora.test/Resources/Jidenna/The Chief/07 2 Points.mp3 b/aurora-sharp-desktop/Aurora.test/Resources/Jidenna/The Chief/07 2 Points.mp3
new file mode 100755
index 0000000..6501991
Binary files /dev/null and b/aurora-sharp-desktop/Aurora.test/Resources/Jidenna/The Chief/07 2 Points.mp3 differ
diff --git a/aurora-sharp-desktop/Aurora.test/Resources/Jidenna/The Chief/08 The Let Out.mp3 b/aurora-sharp-desktop/Aurora.test/Resources/Jidenna/The Chief/08 The Let Out.mp3
new file mode 100755
index 0000000..9509e2d
Binary files /dev/null and b/aurora-sharp-desktop/Aurora.test/Resources/Jidenna/The Chief/08 The Let Out.mp3 differ
diff --git a/aurora-sharp-desktop/Aurora.test/Resources/Jidenna/The Chief/09 Safari.mp3 b/aurora-sharp-desktop/Aurora.test/Resources/Jidenna/The Chief/09 Safari.mp3
new file mode 100755
index 0000000..64a4e6c
Binary files /dev/null and b/aurora-sharp-desktop/Aurora.test/Resources/Jidenna/The Chief/09 Safari.mp3 differ
diff --git a/aurora-sharp-desktop/Aurora.test/Resources/Jidenna/The Chief/10 Adaora.mp3 b/aurora-sharp-desktop/Aurora.test/Resources/Jidenna/The Chief/10 Adaora.mp3
new file mode 100755
index 0000000..22d0f69
Binary files /dev/null and b/aurora-sharp-desktop/Aurora.test/Resources/Jidenna/The Chief/10 Adaora.mp3 differ
diff --git a/aurora-sharp-desktop/Aurora.test/Resources/Jidenna/The Chief/11 Little Bit More.mp3 b/aurora-sharp-desktop/Aurora.test/Resources/Jidenna/The Chief/11 Little Bit More.mp3
new file mode 100755
index 0000000..7cf9c19
Binary files /dev/null and b/aurora-sharp-desktop/Aurora.test/Resources/Jidenna/The Chief/11 Little Bit More.mp3 differ
diff --git a/aurora-sharp-desktop/Aurora.test/Resources/Jidenna/The Chief/12 Some Kind Of Way.mp3 b/aurora-sharp-desktop/Aurora.test/Resources/Jidenna/The Chief/12 Some Kind Of Way.mp3
new file mode 100755
index 0000000..1b81852
Binary files /dev/null and b/aurora-sharp-desktop/Aurora.test/Resources/Jidenna/The Chief/12 Some Kind Of Way.mp3 differ
diff --git a/aurora-sharp-desktop/Aurora.test/Resources/Jidenna/The Chief/13 White Niggas.mp3 b/aurora-sharp-desktop/Aurora.test/Resources/Jidenna/The Chief/13 White Niggas.mp3
new file mode 100755
index 0000000..ccf5195
Binary files /dev/null and b/aurora-sharp-desktop/Aurora.test/Resources/Jidenna/The Chief/13 White Niggas.mp3 differ
diff --git a/aurora-sharp-desktop/Aurora.test/Resources/Jidenna/The Chief/14 Bully Of The Earth.mp3 b/aurora-sharp-desktop/Aurora.test/Resources/Jidenna/The Chief/14 Bully Of The Earth.mp3
new file mode 100755
index 0000000..784ef6f
Binary files /dev/null and b/aurora-sharp-desktop/Aurora.test/Resources/Jidenna/The Chief/14 Bully Of The Earth.mp3 differ
diff --git a/aurora-sharp-desktop/Aurora.test/Resources/Mac Miller/Best Day Ever/01 Best Day Ever (Prod. By_ ID Labs).m4a b/aurora-sharp-desktop/Aurora.test/Resources/Mac Miller/Best Day Ever/01 Best Day Ever (Prod. By_ ID Labs).m4a
new file mode 100755
index 0000000..5c002a1
Binary files /dev/null and b/aurora-sharp-desktop/Aurora.test/Resources/Mac Miller/Best Day Ever/01 Best Day Ever (Prod. By_ ID Labs).m4a differ
diff --git a/aurora-sharp-desktop/Aurora.test/Resources/Mac Miller/Best Day Ever/02 Get Up (Prod. By_ Teddy Roxpin).m4a b/aurora-sharp-desktop/Aurora.test/Resources/Mac Miller/Best Day Ever/02 Get Up (Prod. By_ Teddy Roxpin).m4a
new file mode 100755
index 0000000..96fbcb3
Binary files /dev/null and b/aurora-sharp-desktop/Aurora.test/Resources/Mac Miller/Best Day Ever/02 Get Up (Prod. By_ Teddy Roxpin).m4a differ
diff --git a/aurora-sharp-desktop/Aurora.test/Resources/Mac Miller/Best Day Ever/03 Donald Trump (Prod. By_ Sap).m4a b/aurora-sharp-desktop/Aurora.test/Resources/Mac Miller/Best Day Ever/03 Donald Trump (Prod. By_ Sap).m4a
new file mode 100755
index 0000000..5ad4e13
Binary files /dev/null and b/aurora-sharp-desktop/Aurora.test/Resources/Mac Miller/Best Day Ever/03 Donald Trump (Prod. By_ Sap).m4a differ
diff --git a/aurora-sharp-desktop/Aurora.test/Resources/Mac Miller/Best Day Ever/04 Oy Vey (Prod By_ ID Labs).mp3 b/aurora-sharp-desktop/Aurora.test/Resources/Mac Miller/Best Day Ever/04 Oy Vey (Prod By_ ID Labs).mp3
new file mode 100755
index 0000000..c758aa5
Binary files /dev/null and b/aurora-sharp-desktop/Aurora.test/Resources/Mac Miller/Best Day Ever/04 Oy Vey (Prod By_ ID Labs).mp3 differ
diff --git a/aurora-sharp-desktop/Aurora.test/Resources/Mac Miller/Best Day Ever/05 I'll Be There (feat. Phonte) (Prod. By_ Beanz 'n' Kornbread).mp3 b/aurora-sharp-desktop/Aurora.test/Resources/Mac Miller/Best Day Ever/05 I'll Be There (feat. Phonte) (Prod. By_ Beanz 'n' Kornbread).mp3
new file mode 100755
index 0000000..1edcf91
Binary files /dev/null and b/aurora-sharp-desktop/Aurora.test/Resources/Mac Miller/Best Day Ever/05 I'll Be There (feat. Phonte) (Prod. By_ Beanz 'n' Kornbread).mp3 differ
diff --git a/aurora-sharp-desktop/Aurora.test/Resources/Mac Miller/Best Day Ever/06 Wear My Hat (Prod. By_ Chuck Inglish).m4a b/aurora-sharp-desktop/Aurora.test/Resources/Mac Miller/Best Day Ever/06 Wear My Hat (Prod. By_ Chuck Inglish).m4a
new file mode 100755
index 0000000..5410711
Binary files /dev/null and b/aurora-sharp-desktop/Aurora.test/Resources/Mac Miller/Best Day Ever/06 Wear My Hat (Prod. By_ Chuck Inglish).m4a differ
diff --git a/aurora-sharp-desktop/Aurora.test/Resources/Mac Miller/Best Day Ever/07 Wake Up (Prod By_ Sap & ID Labs).m4a b/aurora-sharp-desktop/Aurora.test/Resources/Mac Miller/Best Day Ever/07 Wake Up (Prod By_ Sap & ID Labs).m4a
new file mode 100755
index 0000000..8e94ac6
Binary files /dev/null and b/aurora-sharp-desktop/Aurora.test/Resources/Mac Miller/Best Day Ever/07 Wake Up (Prod By_ Sap & ID Labs).m4a differ
diff --git a/aurora-sharp-desktop/Aurora.test/Resources/Mac Miller/Best Day Ever/08 All Around The World (Prod. By_ Just Blaze).m4a b/aurora-sharp-desktop/Aurora.test/Resources/Mac Miller/Best Day Ever/08 All Around The World (Prod. By_ Just Blaze).m4a
new file mode 100755
index 0000000..c2cfe88
Binary files /dev/null and b/aurora-sharp-desktop/Aurora.test/Resources/Mac Miller/Best Day Ever/08 All Around The World (Prod. By_ Just Blaze).m4a differ
diff --git a/aurora-sharp-desktop/Aurora.test/Resources/Mac Miller/Best Day Ever/09 Down The Rabbit Hole (Prod. By_ Blue of The Sore Losers).m4a b/aurora-sharp-desktop/Aurora.test/Resources/Mac Miller/Best Day Ever/09 Down The Rabbit Hole (Prod. By_ Blue of The Sore Losers).m4a
new file mode 100755
index 0000000..85ccc30
Binary files /dev/null and b/aurora-sharp-desktop/Aurora.test/Resources/Mac Miller/Best Day Ever/09 Down The Rabbit Hole (Prod. By_ Blue of The Sore Losers).m4a differ
diff --git a/aurora-sharp-desktop/Aurora.test/Resources/Mac Miller/Best Day Ever/10 In The Air (Prod By_ Ritz Reynolds).m4a b/aurora-sharp-desktop/Aurora.test/Resources/Mac Miller/Best Day Ever/10 In The Air (Prod By_ Ritz Reynolds).m4a
new file mode 100755
index 0000000..96f324e
Binary files /dev/null and b/aurora-sharp-desktop/Aurora.test/Resources/Mac Miller/Best Day Ever/10 In The Air (Prod By_ Ritz Reynolds).m4a differ
diff --git a/aurora-sharp-desktop/Aurora.test/Resources/Mac Miller/Best Day Ever/11 Play Ya Cards (Prod By_ Chuck Inglish).m4a b/aurora-sharp-desktop/Aurora.test/Resources/Mac Miller/Best Day Ever/11 Play Ya Cards (Prod By_ Chuck Inglish).m4a
new file mode 100755
index 0000000..b8694c5
Binary files /dev/null and b/aurora-sharp-desktop/Aurora.test/Resources/Mac Miller/Best Day Ever/11 Play Ya Cards (Prod By_ Chuck Inglish).m4a differ
diff --git a/aurora-sharp-desktop/Aurora.test/Resources/Mac Miller/Best Day Ever/12 She Said (Prod By_ Khrysis).m4a b/aurora-sharp-desktop/Aurora.test/Resources/Mac Miller/Best Day Ever/12 She Said (Prod By_ Khrysis).m4a
new file mode 100755
index 0000000..d1917d7
Binary files /dev/null and b/aurora-sharp-desktop/Aurora.test/Resources/Mac Miller/Best Day Ever/12 She Said (Prod By_ Khrysis).m4a differ
diff --git a/aurora-sharp-desktop/Aurora.test/Resources/Mac Miller/Best Day Ever/13 Life Ain't Easy (Prod. By_ ID Labs).m4a b/aurora-sharp-desktop/Aurora.test/Resources/Mac Miller/Best Day Ever/13 Life Ain't Easy (Prod. By_ ID Labs).m4a
new file mode 100755
index 0000000..afa0d89
Binary files /dev/null and b/aurora-sharp-desktop/Aurora.test/Resources/Mac Miller/Best Day Ever/13 Life Ain't Easy (Prod. By_ ID Labs).m4a differ
diff --git a/aurora-sharp-desktop/Aurora.test/Resources/Mac Miller/Best Day Ever/14 Snooze (Prod By_ ID Labs).m4a b/aurora-sharp-desktop/Aurora.test/Resources/Mac Miller/Best Day Ever/14 Snooze (Prod By_ ID Labs).m4a
new file mode 100755
index 0000000..f1573a8
Binary files /dev/null and b/aurora-sharp-desktop/Aurora.test/Resources/Mac Miller/Best Day Ever/14 Snooze (Prod By_ ID Labs).m4a differ
diff --git a/aurora-sharp-desktop/Aurora.test/Resources/Mac Miller/Best Day Ever/15 Keep Floatin' (feat. Wiz Khalifa) (Prod. By_ ID Labs).mp3 b/aurora-sharp-desktop/Aurora.test/Resources/Mac Miller/Best Day Ever/15 Keep Floatin' (feat. Wiz Khalifa) (Prod. By_ ID Labs).mp3
new file mode 100755
index 0000000..c813526
Binary files /dev/null and b/aurora-sharp-desktop/Aurora.test/Resources/Mac Miller/Best Day Ever/15 Keep Floatin' (feat. Wiz Khalifa) (Prod. By_ ID Labs).mp3 differ
diff --git a/aurora-sharp-desktop/Aurora.test/Resources/Mac Miller/Best Day Ever/16 BDE Bonus (Prod. By_ ID Labs).mp3 b/aurora-sharp-desktop/Aurora.test/Resources/Mac Miller/Best Day Ever/16 BDE Bonus (Prod. By_ ID Labs).mp3
new file mode 100755
index 0000000..1eb1a11
Binary files /dev/null and b/aurora-sharp-desktop/Aurora.test/Resources/Mac Miller/Best Day Ever/16 BDE Bonus (Prod. By_ ID Labs).mp3 differ
diff --git a/aurora-sharp-desktop/Aurora/App.css b/aurora-sharp-desktop/Aurora/App.css
new file mode 100644
index 0000000..2982121
--- /dev/null
+++ b/aurora-sharp-desktop/Aurora/App.css
@@ -0,0 +1,11 @@
+.primaryColor {
+ background-color: #000000;
+}
+
+.accentColor {
+ background-color: #181818;
+}
+
+.secondAccentColor {
+ background-color: #303030
+}
\ No newline at end of file
diff --git a/aurora-sharp-desktop/Aurora/App.xaml b/aurora-sharp-desktop/Aurora/App.xaml
new file mode 100644
index 0000000..ffbf554
--- /dev/null
+++ b/aurora-sharp-desktop/Aurora/App.xaml
@@ -0,0 +1,31 @@
+
+
+
+
+ #FFFFFF
+ #000000
+ #F5C210
+ #151C25
+ #1E2634
+ #151C25
+ #44545C
+
+
+
+
+
+
\ No newline at end of file
diff --git a/aurora-sharp-desktop/Aurora/App.xaml.cs b/aurora-sharp-desktop/Aurora/App.xaml.cs
new file mode 100644
index 0000000..487ba7d
--- /dev/null
+++ b/aurora-sharp-desktop/Aurora/App.xaml.cs
@@ -0,0 +1,72 @@
+using System;
+using Aurora.Design.Views.Main;
+using Aurora.Design.Views.Albums;
+using Aurora.Design.Views.Artists;
+using Aurora.Design.Views.Party;
+using Aurora.Design.Views.Profile;
+using Aurora.Design.Views.Songs;
+using Aurora.Design.Views.Stations;
+using Aurora.Services.EventManager;
+using Aurora.Services.Server;
+using Aurora.Services.Client;
+using Autofac;
+using LibVLCSharp.Shared;
+using Xamarin.Forms;
+using Aurora.Services.Player;
+using Aurora.Services.Settings;
+using Aurora.Services.Library;
+
+namespace Aurora
+{
+ public partial class App : Application
+ {
+ private static IContainer _container;
+ public App()
+ {
+ InitializeComponent();
+ Core.Initialize();
+
+ //Register DI
+ ContainerBuilder _builder = new ContainerBuilder();
+ // _builder.RegisterInstance(new PlayerService()).SingleInstance();
+ _builder.RegisterType().As().SingleInstance();
+ _builder.RegisterType().As().SingleInstance();
+ _builder.RegisterType().As().SingleInstance();
+ _builder.RegisterType().As().SingleInstance();
+ _builder.RegisterType().As().SingleInstance();
+ _builder.RegisterType().As().SingleInstance();
+ _builder.RegisterType().SingleInstance();
+ _builder.RegisterType();
+ _builder.RegisterType();
+ _builder.RegisterType();
+ _builder.RegisterType();
+ _builder.RegisterType();
+ _builder.RegisterType();
+
+ // _builder.RegisterInstance(new SettingsService()).SingleInstance();
+ _container = _builder.Build();
+
+ MainPage = _container.Resolve();
+ }
+
+ public static IContainer Container
+ {
+ get { return _container; }
+ }
+
+ protected override void OnStart()
+ {
+ // Handle when your app starts
+ }
+
+ protected override void OnSleep()
+ {
+ // Handle when your app sleeps
+ }
+
+ protected override void OnResume()
+ {
+ // Handle when your app resumes
+ }
+ }
+}
diff --git a/aurora-sharp-desktop/Aurora/AssemblyInfo.cs b/aurora-sharp-desktop/Aurora/AssemblyInfo.cs
new file mode 100644
index 0000000..c859952
--- /dev/null
+++ b/aurora-sharp-desktop/Aurora/AssemblyInfo.cs
@@ -0,0 +1,3 @@
+using Xamarin.Forms.Xaml;
+
+[assembly: XamlCompilation(XamlCompilationOptions.Compile)]
\ No newline at end of file
diff --git a/aurora-sharp-desktop/Aurora/Aurora.csproj b/aurora-sharp-desktop/Aurora/Aurora.csproj
new file mode 100644
index 0000000..06593eb
--- /dev/null
+++ b/aurora-sharp-desktop/Aurora/Aurora.csproj
@@ -0,0 +1,85 @@
+
+
+ netstandard2.0
+ true
+
+
+ pdbonly
+ true
+
+
+
+
+
+
+
+
+
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+ all
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Player.xaml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PreserveNewest
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/aurora-sharp-desktop/Aurora/Design/Behaviors/BehaviorBase.cs b/aurora-sharp-desktop/Aurora/Design/Behaviors/BehaviorBase.cs
new file mode 100644
index 0000000..70993eb
--- /dev/null
+++ b/aurora-sharp-desktop/Aurora/Design/Behaviors/BehaviorBase.cs
@@ -0,0 +1,42 @@
+using System;
+using Xamarin.Forms;
+
+namespace Aurora.Design.Behaviors
+{
+ public class BehaviorBase : Behavior where T : BindableObject
+ {
+ public T AssociatedObject { get; private set; }
+
+ protected override void OnAttachedTo(T bindable)
+ {
+ base.OnAttachedTo(bindable);
+ AssociatedObject = bindable;
+
+ if (bindable.BindingContext != null)
+ {
+ BindingContext = bindable.BindingContext;
+ }
+
+ bindable.BindingContextChanged += OnBindingContextChanged;
+ }
+
+ protected override void OnDetachingFrom(T bindable)
+ {
+ base.OnDetachingFrom(bindable);
+ bindable.BindingContextChanged -= OnBindingContextChanged;
+ AssociatedObject = null;
+ }
+
+ void OnBindingContextChanged(object sender, EventArgs e)
+ {
+ OnBindingContextChanged();
+ }
+
+ protected override void OnBindingContextChanged()
+ {
+ base.OnBindingContextChanged();
+ BindingContext = AssociatedObject.BindingContext;
+ }
+ }
+}
+
diff --git a/aurora-sharp-desktop/Aurora/Design/Behaviors/EventToCommandBehavior.cs b/aurora-sharp-desktop/Aurora/Design/Behaviors/EventToCommandBehavior.cs
new file mode 100644
index 0000000..b8c111a
--- /dev/null
+++ b/aurora-sharp-desktop/Aurora/Design/Behaviors/EventToCommandBehavior.cs
@@ -0,0 +1,132 @@
+using System;
+using System.Reflection;
+using System.Windows.Input;
+using Xamarin.Forms;
+
+namespace Aurora.Design.Behaviors
+{
+ public class EventToCommandBehavior : BehaviorBase
+ {
+ Delegate eventHandler;
+
+ public static readonly BindableProperty EventNameProperty = BindableProperty.Create("EventName", typeof(string), typeof(EventToCommandBehavior), null, propertyChanged: OnEventNameChanged);
+ public static readonly BindableProperty CommandProperty = BindableProperty.Create("Command", typeof(ICommand), typeof(EventToCommandBehavior), null);
+ public static readonly BindableProperty CommandParameterProperty = BindableProperty.Create("CommandParameter", typeof(object), typeof(EventToCommandBehavior), null);
+ public static readonly BindableProperty InputConverterProperty = BindableProperty.Create("Converter", typeof(IValueConverter), typeof(EventToCommandBehavior), null);
+
+ public string EventName
+ {
+ get { return (string)GetValue(EventNameProperty); }
+ set { SetValue(EventNameProperty, value); }
+ }
+
+ public ICommand Command
+ {
+ get { return (ICommand)GetValue(CommandProperty); }
+ set { SetValue(CommandProperty, value); }
+ }
+
+ public object CommandParameter
+ {
+ get { return GetValue(CommandParameterProperty); }
+ set { SetValue(CommandParameterProperty, value); }
+ }
+
+ public IValueConverter Converter
+ {
+ get { return (IValueConverter)GetValue(InputConverterProperty); }
+ set { SetValue(InputConverterProperty, value); }
+ }
+
+ protected override void OnAttachedTo(View bindable)
+ {
+ base.OnAttachedTo(bindable);
+ RegisterEvent(EventName);
+ }
+
+ protected override void OnDetachingFrom(View bindable)
+ {
+ DeregisterEvent(EventName);
+ base.OnDetachingFrom(bindable);
+ }
+
+ void RegisterEvent(string name)
+ {
+ if (string.IsNullOrWhiteSpace(name))
+ {
+ return;
+ }
+
+ EventInfo eventInfo = AssociatedObject.GetType().GetRuntimeEvent(name);
+ if (eventInfo == null)
+ {
+ throw new ArgumentException(string.Format("EventToCommandBehavior: Can't register the '{0}' event.", EventName));
+ }
+ MethodInfo methodInfo = typeof(EventToCommandBehavior).GetTypeInfo().GetDeclaredMethod("OnEvent");
+ eventHandler = methodInfo.CreateDelegate(eventInfo.EventHandlerType, this);
+ eventInfo.AddEventHandler(AssociatedObject, eventHandler);
+ }
+
+ void DeregisterEvent(string name)
+ {
+ if (string.IsNullOrWhiteSpace(name))
+ {
+ return;
+ }
+
+ if (eventHandler == null)
+ {
+ return;
+ }
+ EventInfo eventInfo = AssociatedObject.GetType().GetRuntimeEvent(name);
+ if (eventInfo == null)
+ {
+ throw new ArgumentException(string.Format("EventToCommandBehavior: Can't de-register the '{0}' event.", EventName));
+ }
+ eventInfo.RemoveEventHandler(AssociatedObject, eventHandler);
+ eventHandler = null;
+ }
+
+ void OnEvent(object sender, object eventArgs)
+ {
+ if (Command == null)
+ {
+ return;
+ }
+
+ object resolvedParameter;
+ if (CommandParameter != null)
+ {
+ resolvedParameter = CommandParameter;
+ }
+ else if (Converter != null)
+ {
+ resolvedParameter = Converter.Convert(eventArgs, typeof(object), null, null);
+ }
+ else
+ {
+ resolvedParameter = eventArgs;
+ }
+
+ if (Command.CanExecute(resolvedParameter))
+ {
+ Command.Execute(resolvedParameter);
+ }
+ }
+
+ static void OnEventNameChanged(BindableObject bindable, object oldValue, object newValue)
+ {
+ var behavior = (EventToCommandBehavior)bindable;
+ if (behavior.AssociatedObject == null)
+ {
+ return;
+ }
+
+ string oldEventName = (string)oldValue;
+ string newEventName = (string)newValue;
+
+ behavior.DeregisterEvent(oldEventName);
+ behavior.RegisterEvent(newEventName);
+ }
+ }
+}
diff --git a/aurora-sharp-desktop/Aurora/Design/Components/DataGrid/ColumnCollection.cs b/aurora-sharp-desktop/Aurora/Design/Components/DataGrid/ColumnCollection.cs
new file mode 100644
index 0000000..1906bcb
--- /dev/null
+++ b/aurora-sharp-desktop/Aurora/Design/Components/DataGrid/ColumnCollection.cs
@@ -0,0 +1,8 @@
+using System.Collections.Generic;
+
+namespace Aurora.Design.Components.DataGrid
+{
+ public sealed class ColumnCollection : List
+ {
+ }
+}
diff --git a/aurora-sharp-desktop/Aurora/Design/Components/DataGrid/DataGrid.xaml b/aurora-sharp-desktop/Aurora/Design/Components/DataGrid/DataGrid.xaml
new file mode 100644
index 0000000..d6ae78c
--- /dev/null
+++ b/aurora-sharp-desktop/Aurora/Design/Components/DataGrid/DataGrid.xaml
@@ -0,0 +1,95 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/aurora-sharp-desktop/Aurora/Design/Components/DataGrid/DataGrid.xaml.cs b/aurora-sharp-desktop/Aurora/Design/Components/DataGrid/DataGrid.xaml.cs
new file mode 100644
index 0000000..fe7e878
--- /dev/null
+++ b/aurora-sharp-desktop/Aurora/Design/Components/DataGrid/DataGrid.xaml.cs
@@ -0,0 +1,756 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Collections.Specialized;
+using System.Collections.ObjectModel;
+using System.Linq;
+using System.Reflection;
+using System.Windows.Input;
+using Xamarin.Forms;
+using Aurora.Utils;
+
+namespace Aurora.Design.Components.DataGrid
+{
+ public partial class DataGrid : Grid
+ {
+ #region Private Fields
+ private ObservableCollection