This commit is contained in:
Javier Suárez Ruiz 2018-06-02 18:15:45 +02:00
Родитель 5be12c0f68
Коммит f527c31019
131 изменённых файлов: 29499 добавлений и 0 удалений

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Двоичные данные
DotNet2018/Samples/Ooui/Dependencies/Ooui.AspNetCore.dll Normal file

Двоичный файл не отображается.

Просмотреть файл

@ -0,0 +1,815 @@
{
"runtimeTarget": {
"name": ".NETStandard,Version=v2.0/",
"signature": "aabdbe0a6d7e0a67a00b9bb3d50419ececf771d0"
},
"compilationOptions": {},
"targets": {
".NETStandard,Version=v2.0": {},
".NETStandard,Version=v2.0/": {
"Ooui.Forms/1.0.0": {
"dependencies": {
"NETStandard.Library": "2.0.1",
"Ooui": "1.0.0",
"Xamarin.Forms": "2.5.0.122203"
},
"runtime": {
"Ooui.Forms.dll": {}
}
},
"Microsoft.CSharp/4.3.0": {
"dependencies": {
"System.Collections": "4.3.0",
"System.Diagnostics.Debug": "4.3.0",
"System.Dynamic.Runtime": "4.3.0",
"System.Globalization": "4.3.0",
"System.Linq": "4.3.0",
"System.Linq.Expressions": "4.3.0",
"System.ObjectModel": "4.3.0",
"System.Reflection": "4.3.0",
"System.Reflection.Extensions": "4.3.0",
"System.Reflection.Primitives": "4.3.0",
"System.Reflection.TypeExtensions": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Extensions": "4.3.0",
"System.Runtime.InteropServices": "4.3.0",
"System.Threading": "4.3.0"
},
"runtime": {
"lib/netstandard1.3/Microsoft.CSharp.dll": {}
}
},
"Microsoft.NETCore.Platforms/1.1.0": {},
"Microsoft.NETCore.Targets/1.1.0": {},
"NETStandard.Library/2.0.1": {
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0"
}
},
"Newtonsoft.Json/10.0.2": {
"dependencies": {
"Microsoft.CSharp": "4.3.0",
"NETStandard.Library": "2.0.1",
"System.ComponentModel.TypeConverter": "4.3.0",
"System.Runtime.Serialization.Formatters": "4.3.0",
"System.Runtime.Serialization.Primitives": "4.3.0",
"System.Xml.XmlDocument": "4.3.0"
},
"runtime": {
"lib/netstandard1.3/Newtonsoft.Json.dll": {}
}
},
"System.Collections/4.3.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.Runtime": "4.3.0"
}
},
"System.Collections.NonGeneric/4.3.0": {
"dependencies": {
"System.Diagnostics.Debug": "4.3.0",
"System.Globalization": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Extensions": "4.3.0",
"System.Threading": "4.3.0"
},
"runtime": {
"lib/netstandard1.3/System.Collections.NonGeneric.dll": {}
}
},
"System.Collections.Specialized/4.3.0": {
"dependencies": {
"System.Collections.NonGeneric": "4.3.0",
"System.Globalization": "4.3.0",
"System.Globalization.Extensions": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Extensions": "4.3.0",
"System.Threading": "4.3.0"
},
"runtime": {
"lib/netstandard1.3/System.Collections.Specialized.dll": {}
}
},
"System.ComponentModel/4.3.0": {
"dependencies": {
"System.Runtime": "4.3.0"
},
"runtime": {
"lib/netstandard1.3/System.ComponentModel.dll": {}
}
},
"System.ComponentModel.Primitives/4.3.0": {
"dependencies": {
"System.ComponentModel": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0"
},
"runtime": {
"lib/netstandard1.0/System.ComponentModel.Primitives.dll": {}
}
},
"System.ComponentModel.TypeConverter/4.3.0": {
"dependencies": {
"System.Collections": "4.3.0",
"System.Collections.NonGeneric": "4.3.0",
"System.Collections.Specialized": "4.3.0",
"System.ComponentModel": "4.3.0",
"System.ComponentModel.Primitives": "4.3.0",
"System.Globalization": "4.3.0",
"System.Linq": "4.3.0",
"System.Reflection": "4.3.0",
"System.Reflection.Extensions": "4.3.0",
"System.Reflection.Primitives": "4.3.0",
"System.Reflection.TypeExtensions": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Extensions": "4.3.0",
"System.Threading": "4.3.0"
},
"runtime": {
"lib/netstandard1.5/System.ComponentModel.TypeConverter.dll": {}
}
},
"System.Diagnostics.Debug/4.3.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.Runtime": "4.3.0"
}
},
"System.Dynamic.Runtime/4.3.0": {
"dependencies": {
"System.Collections": "4.3.0",
"System.Diagnostics.Debug": "4.3.0",
"System.Linq": "4.3.0",
"System.Linq.Expressions": "4.3.0",
"System.ObjectModel": "4.3.0",
"System.Reflection": "4.3.0",
"System.Reflection.Emit": "4.3.0",
"System.Reflection.Emit.ILGeneration": "4.3.0",
"System.Reflection.Primitives": "4.3.0",
"System.Reflection.TypeExtensions": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Extensions": "4.3.0",
"System.Threading": "4.3.0"
},
"runtime": {
"lib/netstandard1.3/System.Dynamic.Runtime.dll": {}
}
},
"System.Globalization/4.3.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.Runtime": "4.3.0"
}
},
"System.Globalization.Extensions/4.3.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"System.Globalization": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Extensions": "4.3.0",
"System.Runtime.InteropServices": "4.3.0"
}
},
"System.IO/4.3.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.Runtime": "4.3.0",
"System.Text.Encoding": "4.3.0",
"System.Threading.Tasks": "4.3.0"
}
},
"System.IO.FileSystem/4.3.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.IO": "4.3.0",
"System.IO.FileSystem.Primitives": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Handles": "4.3.0",
"System.Text.Encoding": "4.3.0",
"System.Threading.Tasks": "4.3.0"
}
},
"System.IO.FileSystem.Primitives/4.3.0": {
"dependencies": {
"System.Runtime": "4.3.0"
},
"runtime": {
"lib/netstandard1.3/System.IO.FileSystem.Primitives.dll": {}
}
},
"System.Linq/4.3.0": {
"dependencies": {
"System.Collections": "4.3.0",
"System.Diagnostics.Debug": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Extensions": "4.3.0"
},
"runtime": {
"lib/netstandard1.6/System.Linq.dll": {}
}
},
"System.Linq.Expressions/4.3.0": {
"dependencies": {
"System.Collections": "4.3.0",
"System.Diagnostics.Debug": "4.3.0",
"System.Globalization": "4.3.0",
"System.IO": "4.3.0",
"System.Linq": "4.3.0",
"System.ObjectModel": "4.3.0",
"System.Reflection": "4.3.0",
"System.Reflection.Emit": "4.3.0",
"System.Reflection.Emit.ILGeneration": "4.3.0",
"System.Reflection.Emit.Lightweight": "4.3.0",
"System.Reflection.Extensions": "4.3.0",
"System.Reflection.Primitives": "4.3.0",
"System.Reflection.TypeExtensions": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Extensions": "4.3.0",
"System.Threading": "4.3.0"
},
"runtime": {
"lib/netstandard1.6/System.Linq.Expressions.dll": {}
}
},
"System.ObjectModel/4.3.0": {
"dependencies": {
"System.Collections": "4.3.0",
"System.Diagnostics.Debug": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Threading": "4.3.0"
},
"runtime": {
"lib/netstandard1.3/System.ObjectModel.dll": {}
}
},
"System.Reflection/4.3.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.IO": "4.3.0",
"System.Reflection.Primitives": "4.3.0",
"System.Runtime": "4.3.0"
}
},
"System.Reflection.Emit/4.3.0": {
"dependencies": {
"System.IO": "4.3.0",
"System.Reflection": "4.3.0",
"System.Reflection.Emit.ILGeneration": "4.3.0",
"System.Reflection.Primitives": "4.3.0",
"System.Runtime": "4.3.0"
},
"runtime": {
"lib/netstandard1.3/System.Reflection.Emit.dll": {}
}
},
"System.Reflection.Emit.ILGeneration/4.3.0": {
"dependencies": {
"System.Reflection": "4.3.0",
"System.Reflection.Primitives": "4.3.0",
"System.Runtime": "4.3.0"
},
"runtime": {
"lib/netstandard1.3/System.Reflection.Emit.ILGeneration.dll": {}
}
},
"System.Reflection.Emit.Lightweight/4.3.0": {
"dependencies": {
"System.Reflection": "4.3.0",
"System.Reflection.Emit.ILGeneration": "4.3.0",
"System.Reflection.Primitives": "4.3.0",
"System.Runtime": "4.3.0"
},
"runtime": {
"lib/netstandard1.3/System.Reflection.Emit.Lightweight.dll": {}
}
},
"System.Reflection.Extensions/4.3.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.Reflection": "4.3.0",
"System.Runtime": "4.3.0"
}
},
"System.Reflection.Primitives/4.3.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.Runtime": "4.3.0"
}
},
"System.Reflection.TypeExtensions/4.3.0": {
"dependencies": {
"System.Reflection": "4.3.0",
"System.Runtime": "4.3.0"
},
"runtime": {
"lib/netstandard1.5/System.Reflection.TypeExtensions.dll": {}
}
},
"System.Resources.ResourceManager/4.3.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.Globalization": "4.3.0",
"System.Reflection": "4.3.0",
"System.Runtime": "4.3.0"
}
},
"System.Runtime/4.3.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0"
}
},
"System.Runtime.Extensions/4.3.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.Runtime": "4.3.0"
}
},
"System.Runtime.Handles/4.3.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.Runtime": "4.3.0"
}
},
"System.Runtime.InteropServices/4.3.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.Reflection": "4.3.0",
"System.Reflection.Primitives": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Handles": "4.3.0"
}
},
"System.Runtime.Serialization.Formatters/4.3.0": {
"dependencies": {
"System.Collections": "4.3.0",
"System.Reflection": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Serialization.Primitives": "4.3.0"
},
"runtime": {
"lib/netstandard1.4/System.Runtime.Serialization.Formatters.dll": {}
}
},
"System.Runtime.Serialization.Primitives/4.3.0": {
"dependencies": {
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0"
},
"runtime": {
"lib/netstandard1.3/System.Runtime.Serialization.Primitives.dll": {}
}
},
"System.Text.Encoding/4.3.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.Runtime": "4.3.0"
}
},
"System.Text.Encoding.Extensions/4.3.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.Runtime": "4.3.0",
"System.Text.Encoding": "4.3.0"
}
},
"System.Text.RegularExpressions/4.3.0": {
"dependencies": {
"System.Collections": "4.3.0",
"System.Globalization": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Extensions": "4.3.0",
"System.Threading": "4.3.0"
},
"runtime": {
"lib/netstandard1.6/System.Text.RegularExpressions.dll": {}
}
},
"System.Threading/4.3.0": {
"dependencies": {
"System.Runtime": "4.3.0",
"System.Threading.Tasks": "4.3.0"
},
"runtime": {
"lib/netstandard1.3/System.Threading.dll": {}
}
},
"System.Threading.Tasks/4.3.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.Runtime": "4.3.0"
}
},
"System.Threading.Tasks.Extensions/4.3.0": {
"dependencies": {
"System.Collections": "4.3.0",
"System.Runtime": "4.3.0",
"System.Threading.Tasks": "4.3.0"
},
"runtime": {
"lib/netstandard1.0/System.Threading.Tasks.Extensions.dll": {}
}
},
"System.Xml.ReaderWriter/4.3.0": {
"dependencies": {
"System.Collections": "4.3.0",
"System.Diagnostics.Debug": "4.3.0",
"System.Globalization": "4.3.0",
"System.IO": "4.3.0",
"System.IO.FileSystem": "4.3.0",
"System.IO.FileSystem.Primitives": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Extensions": "4.3.0",
"System.Runtime.InteropServices": "4.3.0",
"System.Text.Encoding": "4.3.0",
"System.Text.Encoding.Extensions": "4.3.0",
"System.Text.RegularExpressions": "4.3.0",
"System.Threading.Tasks": "4.3.0",
"System.Threading.Tasks.Extensions": "4.3.0"
},
"runtime": {
"lib/netstandard1.3/System.Xml.ReaderWriter.dll": {}
}
},
"System.Xml.XmlDocument/4.3.0": {
"dependencies": {
"System.Collections": "4.3.0",
"System.Diagnostics.Debug": "4.3.0",
"System.Globalization": "4.3.0",
"System.IO": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Extensions": "4.3.0",
"System.Text.Encoding": "4.3.0",
"System.Threading": "4.3.0",
"System.Xml.ReaderWriter": "4.3.0"
},
"runtime": {
"lib/netstandard1.3/System.Xml.XmlDocument.dll": {}
}
},
"Xamarin.Forms/2.5.0.122203": {
"runtime": {
"lib/netstandard1.0/Xamarin.Forms.Core.dll": {},
"lib/netstandard1.0/Xamarin.Forms.Platform.dll": {},
"lib/netstandard1.0/Xamarin.Forms.Xaml.dll": {}
}
},
"Ooui/1.0.0": {
"dependencies": {
"Newtonsoft.Json": "10.0.2"
},
"runtime": {
"Ooui.dll": {}
}
}
}
},
"libraries": {
"Ooui.Forms/1.0.0": {
"type": "project",
"serviceable": false,
"sha512": ""
},
"Microsoft.CSharp/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-P+MBhIM0YX+JqROuf7i306ZLJEjQYA9uUyRDE+OqwUI5sh41e2ZbPQV3LfAPh+29cmceE1pUffXsGfR4eMY3KA==",
"path": "microsoft.csharp/4.3.0",
"hashPath": "microsoft.csharp.4.3.0.nupkg.sha512"
},
"Microsoft.NETCore.Platforms/1.1.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A==",
"path": "microsoft.netcore.platforms/1.1.0",
"hashPath": "microsoft.netcore.platforms.1.1.0.nupkg.sha512"
},
"Microsoft.NETCore.Targets/1.1.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-aOZA3BWfz9RXjpzt0sRJJMjAscAUm3Hoa4UWAfceV9UTYxgwZ1lZt5nO2myFf+/jetYQo4uTP7zS8sJY67BBxg==",
"path": "microsoft.netcore.targets/1.1.0",
"hashPath": "microsoft.netcore.targets.1.1.0.nupkg.sha512"
},
"NETStandard.Library/2.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-oA6nwv9MhEKYvLpjZ0ggSpb1g4CQViDVQjLUcDWg598jtvJbpfeP2reqwI1GLW2TbxC/Ml7xL6BBR1HmKPXlTg==",
"path": "netstandard.library/2.0.1",
"hashPath": "netstandard.library.2.0.1.nupkg.sha512"
},
"Newtonsoft.Json/10.0.2": {
"type": "package",
"serviceable": true,
"sha512": "sha512-iwElSU2IXmwGvytJsezyDML2ZWDkG2JzTYzlU/BNlmzMdlmRvbnwITsGGY74gwVEpDli1UdOLkMT7/3jxWvXzA==",
"path": "newtonsoft.json/10.0.2",
"hashPath": "newtonsoft.json.10.0.2.nupkg.sha512"
},
"System.Collections/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-3Dcj85/TBdVpL5Zr+gEEBUuFe2icOnLalmEh9hfck1PTYbbyWuZgh4fmm2ysCLTrqLQw6t3TgTyJ+VLp+Qb+Lw==",
"path": "system.collections/4.3.0",
"hashPath": "system.collections.4.3.0.nupkg.sha512"
},
"System.Collections.NonGeneric/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-fo1z+YvNpb7h8zbzfvliNj/aVO+8ea5Bz5+iMKBpX7ekkMLB1Znf0Yx3iDRffPnNLeruAoLwnNVnuTAM6XIkOQ==",
"path": "system.collections.nongeneric/4.3.0",
"hashPath": "system.collections.nongeneric.4.3.0.nupkg.sha512"
},
"System.Collections.Specialized/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-R9jCiZQps9O/DnHKYWl/0CzghORAN2JUVqfNQ6Xw2xNGzVyb77H0Q0Tkxj02gyZoYwRO1ad1G7PZpsorkeInCA==",
"path": "system.collections.specialized/4.3.0",
"hashPath": "system.collections.specialized.4.3.0.nupkg.sha512"
},
"System.ComponentModel/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-k/ahcIfdwoCOIkHgICJuZudukj1GJKgdgle9O/YhYTLZYin5pfc1UEuRmtbHkSHKmHmGqC265/btmE019JnhUg==",
"path": "system.componentmodel/4.3.0",
"hashPath": "system.componentmodel.4.3.0.nupkg.sha512"
},
"System.ComponentModel.Primitives/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-j8GUkCpM8V4d4vhLIIoBLGey2Z5bCkMVNjEZseyAlm4n5arcsJOeI3zkUP+zvZgzsbLTYh4lYeP/ZD/gdIAPrw==",
"path": "system.componentmodel.primitives/4.3.0",
"hashPath": "system.componentmodel.primitives.4.3.0.nupkg.sha512"
},
"System.ComponentModel.TypeConverter/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-16pQ6P+EdhcXzPiEK4kbA953Fu0MNG2ovxTZU81/qsCd1zPRsKc3uif5NgvllCY598k6bI0KUyKW8fanlfaDQg==",
"path": "system.componentmodel.typeconverter/4.3.0",
"hashPath": "system.componentmodel.typeconverter.4.3.0.nupkg.sha512"
},
"System.Diagnostics.Debug/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-ZUhUOdqmaG5Jk3Xdb8xi5kIyQYAA4PnTNlHx1mu9ZY3qv4ELIdKbnL/akbGaKi2RnNUWaZsAs31rvzFdewTj2g==",
"path": "system.diagnostics.debug/4.3.0",
"hashPath": "system.diagnostics.debug.4.3.0.nupkg.sha512"
},
"System.Dynamic.Runtime/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-SNVi1E/vfWUAs/WYKhE9+qlS6KqK0YVhnlT0HQtr8pMIA8YX3lwy3uPMownDwdYISBdmAF/2holEIldVp85Wag==",
"path": "system.dynamic.runtime/4.3.0",
"hashPath": "system.dynamic.runtime.4.3.0.nupkg.sha512"
},
"System.Globalization/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-kYdVd2f2PAdFGblzFswE4hkNANJBKRmsfa2X5LG2AcWE1c7/4t0pYae1L8vfZ5xvE2nK/R9JprtToA61OSHWIg==",
"path": "system.globalization/4.3.0",
"hashPath": "system.globalization.4.3.0.nupkg.sha512"
},
"System.Globalization.Extensions/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-H1T7PZi4cp0++yoH9R1a8x0/+ANsb3RYQkw+s7K0LY+MKvpRQd5wyKzPhixUfBDPjN6TyKhO/XCFVGG1rQ5zHw==",
"path": "system.globalization.extensions/4.3.0",
"hashPath": "system.globalization.extensions.4.3.0.nupkg.sha512"
},
"System.IO/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-3qjaHvxQPDpSOYICjUoTsmoq5u6QJAFRUITgeT/4gqkF1bajbSmb1kwSxEA8AHlofqgcKJcM8udgieRNhaJ5Cg==",
"path": "system.io/4.3.0",
"hashPath": "system.io.4.3.0.nupkg.sha512"
},
"System.IO.FileSystem/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-3wEMARTnuio+ulnvi+hkRNROYwa1kylvYahhcLk4HSoVdl+xxTFVeVlYOfLwrDPImGls0mDqbMhrza8qnWPTdA==",
"path": "system.io.filesystem/4.3.0",
"hashPath": "system.io.filesystem.4.3.0.nupkg.sha512"
},
"System.IO.FileSystem.Primitives/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-6QOb2XFLch7bEc4lIcJH49nJN2HV+OC3fHDgsLVsBVBk3Y4hFAnOBGzJ2lUu7CyDDFo9IBWkSsnbkT6IBwwiMw==",
"path": "system.io.filesystem.primitives/4.3.0",
"hashPath": "system.io.filesystem.primitives.4.3.0.nupkg.sha512"
},
"System.Linq/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-5DbqIUpsDp0dFftytzuMmc0oeMdQwjcP/EWxsksIz/w1TcFRkZ3yKKz0PqiYFMmEwPSWw+qNVqD7PJ889JzHbw==",
"path": "system.linq/4.3.0",
"hashPath": "system.linq.4.3.0.nupkg.sha512"
},
"System.Linq.Expressions/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-PGKkrd2khG4CnlyJwxwwaWWiSiWFNBGlgXvJpeO0xCXrZ89ODrQ6tjEWS/kOqZ8GwEOUATtKtzp1eRgmYNfclg==",
"path": "system.linq.expressions/4.3.0",
"hashPath": "system.linq.expressions.4.3.0.nupkg.sha512"
},
"System.ObjectModel/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-bdX+80eKv9bN6K4N+d77OankKHGn6CH711a6fcOpMQu2Fckp/Ft4L/kW9WznHpyR0NRAvJutzOMHNNlBGvxQzQ==",
"path": "system.objectmodel/4.3.0",
"hashPath": "system.objectmodel.4.3.0.nupkg.sha512"
},
"System.Reflection/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-KMiAFoW7MfJGa9nDFNcfu+FpEdiHpWgTcS2HdMpDvt9saK3y/G4GwprPyzqjFH9NTaGPQeWNHU+iDlDILj96aQ==",
"path": "system.reflection/4.3.0",
"hashPath": "system.reflection.4.3.0.nupkg.sha512"
},
"System.Reflection.Emit/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-aTrZSsXzZBfiQbxSKE6s7hp4ehmeWBXepnxdhifURJe6p4m4sfzfcEhGVbEtPthrt6jWgF7Gax7pajfUfuGZWw==",
"path": "system.reflection.emit/4.3.0",
"hashPath": "system.reflection.emit.4.3.0.nupkg.sha512"
},
"System.Reflection.Emit.ILGeneration/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-59tBslAk9733NXLrUJrwNZEzbMAcu8k344OYo+wfSVygcgZ9lgBdGIzH/nrg3LYhXceynyvTc8t5/GD4Ri0/ng==",
"path": "system.reflection.emit.ilgeneration/4.3.0",
"hashPath": "system.reflection.emit.ilgeneration.4.3.0.nupkg.sha512"
},
"System.Reflection.Emit.Lightweight/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-oadVHGSMsTmZsAF864QYN1t1QzZjIcuKU3l2S9cZOwDdDueNTrqq1yRj7koFfIGEnKpt6NjpL3rOzRhs4ryOgA==",
"path": "system.reflection.emit.lightweight/4.3.0",
"hashPath": "system.reflection.emit.lightweight.4.3.0.nupkg.sha512"
},
"System.Reflection.Extensions/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-rJkrJD3kBI5B712aRu4DpSIiHRtr6QlfZSQsb0hYHrDCZORXCFjQfoipo2LaMUHoT9i1B7j7MnfaEKWDFmFQNQ==",
"path": "system.reflection.extensions/4.3.0",
"hashPath": "system.reflection.extensions.4.3.0.nupkg.sha512"
},
"System.Reflection.Primitives/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-5RXItQz5As4xN2/YUDxdpsEkMhvw3e6aNveFXUn4Hl/udNTCNhnKp8lT9fnc3MhvGKh1baak5CovpuQUXHAlIA==",
"path": "system.reflection.primitives/4.3.0",
"hashPath": "system.reflection.primitives.4.3.0.nupkg.sha512"
},
"System.Reflection.TypeExtensions/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-7u6ulLcZbyxB5Gq0nMkQttcdBTx57ibzw+4IOXEfR+sXYQoHvjW5LTLyNr8O22UIMrqYbchJQJnos4eooYzYJA==",
"path": "system.reflection.typeextensions/4.3.0",
"hashPath": "system.reflection.typeextensions.4.3.0.nupkg.sha512"
},
"System.Resources.ResourceManager/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-/zrcPkkWdZmI4F92gL/TPumP98AVDu/Wxr3CSJGQQ+XN6wbRZcyfSKVoPo17ilb3iOr0cCRqJInGwNMolqhS8A==",
"path": "system.resources.resourcemanager/4.3.0",
"hashPath": "system.resources.resourcemanager.4.3.0.nupkg.sha512"
},
"System.Runtime/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==",
"path": "system.runtime/4.3.0",
"hashPath": "system.runtime.4.3.0.nupkg.sha512"
},
"System.Runtime.Extensions/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-guW0uK0fn5fcJJ1tJVXYd7/1h5F+pea1r7FLSOz/f8vPEqbR2ZAknuRDvTQ8PzAilDveOxNjSfr0CHfIQfFk8g==",
"path": "system.runtime.extensions/4.3.0",
"hashPath": "system.runtime.extensions.4.3.0.nupkg.sha512"
},
"System.Runtime.Handles/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-OKiSUN7DmTWeYb3l51A7EYaeNMnvxwE249YtZz7yooT4gOZhmTjIn48KgSsw2k2lYdLgTKNJw/ZIfSElwDRVgg==",
"path": "system.runtime.handles/4.3.0",
"hashPath": "system.runtime.handles.4.3.0.nupkg.sha512"
},
"System.Runtime.InteropServices/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-uv1ynXqiMK8mp1GM3jDqPCFN66eJ5w5XNomaK2XD+TuCroNTLFGeZ+WCmBMcBDyTFKou3P6cR6J/QsaqDp7fGQ==",
"path": "system.runtime.interopservices/4.3.0",
"hashPath": "system.runtime.interopservices.4.3.0.nupkg.sha512"
},
"System.Runtime.Serialization.Formatters/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-KT591AkTNFOTbhZlaeMVvfax3RqhH1EJlcwF50Wm7sfnBLuHiOeZRRKrr1ns3NESkM20KPZ5Ol/ueMq5vg4QoQ==",
"path": "system.runtime.serialization.formatters/4.3.0",
"hashPath": "system.runtime.serialization.formatters.4.3.0.nupkg.sha512"
},
"System.Runtime.Serialization.Primitives/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-Wz+0KOukJGAlXjtKr+5Xpuxf8+c8739RI1C+A2BoQZT+wMCCoMDDdO8/4IRHfaVINqL78GO8dW8G2lW/e45Mcw==",
"path": "system.runtime.serialization.primitives/4.3.0",
"hashPath": "system.runtime.serialization.primitives.4.3.0.nupkg.sha512"
},
"System.Text.Encoding/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-BiIg+KWaSDOITze6jGQynxg64naAPtqGHBwDrLaCtixsa5bKiR8dpPOHA7ge3C0JJQizJE+sfkz1wV+BAKAYZw==",
"path": "system.text.encoding/4.3.0",
"hashPath": "system.text.encoding.4.3.0.nupkg.sha512"
},
"System.Text.Encoding.Extensions/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-YVMK0Bt/A43RmwizJoZ22ei2nmrhobgeiYwFzC4YAN+nue8RF6djXDMog0UCn+brerQoYVyaS+ghy9P/MUVcmw==",
"path": "system.text.encoding.extensions/4.3.0",
"hashPath": "system.text.encoding.extensions.4.3.0.nupkg.sha512"
},
"System.Text.RegularExpressions/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-RpT2DA+L660cBt1FssIE9CAGpLFdFPuheB7pLpKpn6ZXNby7jDERe8Ua/Ne2xGiwLVG2JOqziiaVCGDon5sKFA==",
"path": "system.text.regularexpressions/4.3.0",
"hashPath": "system.text.regularexpressions.4.3.0.nupkg.sha512"
},
"System.Threading/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-VkUS0kOBcUf3Wwm0TSbrevDDZ6BlM+b/HRiapRFWjM5O0NS0LviG0glKmFK+hhPDd1XFeSdU1GmlLhb2CoVpIw==",
"path": "system.threading/4.3.0",
"hashPath": "system.threading.4.3.0.nupkg.sha512"
},
"System.Threading.Tasks/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-LbSxKEdOUhVe8BezB/9uOGGppt+nZf6e1VFyw6v3DN6lqitm0OSn2uXMOdtP0M3W4iMcqcivm2J6UgqiwwnXiA==",
"path": "system.threading.tasks/4.3.0",
"hashPath": "system.threading.tasks.4.3.0.nupkg.sha512"
},
"System.Threading.Tasks.Extensions/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-npvJkVKl5rKXrtl1Kkm6OhOUaYGEiF9wFbppFRWSMoApKzt2PiPHT2Bb8a5sAWxprvdOAtvaARS9QYMznEUtug==",
"path": "system.threading.tasks.extensions/4.3.0",
"hashPath": "system.threading.tasks.extensions.4.3.0.nupkg.sha512"
},
"System.Xml.ReaderWriter/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-GrprA+Z0RUXaR4N7/eW71j1rgMnEnEVlgii49GZyAjTH7uliMnrOU3HNFBr6fEDBCJCIdlVNq9hHbaDR621XBA==",
"path": "system.xml.readerwriter/4.3.0",
"hashPath": "system.xml.readerwriter.4.3.0.nupkg.sha512"
},
"System.Xml.XmlDocument/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-lJ8AxvkX7GQxpC6GFCeBj8ThYVyQczx2+f/cWHJU8tjS7YfI6Cv6bon70jVEgs2CiFbmmM8b9j1oZVx0dSI2Ww==",
"path": "system.xml.xmldocument/4.3.0",
"hashPath": "system.xml.xmldocument.4.3.0.nupkg.sha512"
},
"Xamarin.Forms/2.5.0.122203": {
"type": "package",
"serviceable": true,
"sha512": "sha512-qg7A2IXbVV/5u9qqeiDhRMwpVEsbWKBxzeAtD0rTuntmaDB1Z7WuBg5IK2VBklJbKe2Ps8V9zBfEwgJIqPVJUw==",
"path": "xamarin.forms/2.5.0.122203",
"hashPath": "xamarin.forms.2.5.0.122203.nupkg.sha512"
},
"Ooui/1.0.0": {
"type": "project",
"serviceable": false,
"sha512": ""
}
}
}

Двоичные данные
DotNet2018/Samples/Ooui/Dependencies/Ooui.Forms.dll Normal file

Двоичный файл не отображается.

Двоичные данные
DotNet2018/Samples/Ooui/Dependencies/Ooui.dll Normal file

Двоичный файл не отображается.

Просмотреть файл

@ -0,0 +1,25 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.27703.2000
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Movies.Web", "Movies.Web\Movies.Web.csproj", "{5378447F-1501-4690-A823-0E642E90A2B7}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{5378447F-1501-4690-A823-0E642E90A2B7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5378447F-1501-4690-A823-0E642E90A2B7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5378447F-1501-4690-A823-0E642E90A2B7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5378447F-1501-4690-A823-0E642E90A2B7}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {62E204E2-0BFD-47A3-B3EC-B2CC2FBEAC33}
EndGlobalSection
EndGlobal

Просмотреть файл

@ -0,0 +1,15 @@
namespace Movies.Web
{
public static class AppSettings
{
public static string ApiKey = "1e01bec596ba252a25dbb806a9792279";
public static string ApiUrl = "https://api.themoviedb.org/3/";
public static string PosterImageUrl = "http://image.tmdb.org/t/p/w185/";
public static string BackdropImageUrl = "http://image.tmdb.org/t/p/w500/";
public static string YouTubeUrl = "https://www.youtube.com/watch?v=";
public static string DialogMessage = "ShowDialog";
public static string MoviesMessage = "Movies";
public static string ShowsMessage = "Shows";
public static string ImagesMessage = "Images";
}
}

Просмотреть файл

@ -0,0 +1,40 @@
using System.Diagnostics;
using Microsoft.AspNetCore.Mvc;
using Movies.Web.Models;
using Movies.Web.Pages;
using Ooui.AspNetCore;
using Xamarin.Forms;
namespace Movies.Web.Controllers
{
public class HomeController : Controller
{
public IActionResult Index()
{
var page = new HomeView();
var navigationPage = new NavigationPage(page);
var element = navigationPage.GetOouiElement();
return new ElementResult(element, "Movies Ooui Forms");
}
public IActionResult About()
{
ViewData["Message"] = "Your application description page.";
return View();
}
public IActionResult Contact()
{
ViewData["Message"] = "Your contact page.";
return View();
}
public IActionResult Error()
{
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
}
}
}

Просмотреть файл

@ -0,0 +1,176 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Windows.Input;
using Xamarin.Forms;
namespace Movies.Web.Controls
{
public class HorizontalList : Grid
{
private ICommand _innerSelectedCommand;
private readonly ScrollView _scrollView;
private readonly StackLayout _itemsStackLayout;
public event EventHandler SelectedItemChanged;
public StackOrientation ListOrientation { get; set; }
public double Spacing { get; set; }
public static readonly BindableProperty SelectedCommandProperty =
BindableProperty.Create("SelectedCommand", typeof(ICommand), typeof(HorizontalList), null);
public static readonly BindableProperty ItemsSourceProperty =
BindableProperty.Create("ItemsSource", typeof(IEnumerable), typeof(HorizontalList), default(IEnumerable<object>), BindingMode.TwoWay, propertyChanged: ItemsSourceChanged);
public static readonly BindableProperty SelectedItemProperty =
BindableProperty.Create("SelectedItem", typeof(object), typeof(HorizontalList), null, BindingMode.TwoWay, propertyChanged: OnSelectedItemChanged);
public static readonly BindableProperty ItemTemplateProperty =
BindableProperty.Create("ItemTemplate", typeof(DataTemplate), typeof(HorizontalList), default(DataTemplate));
public ICommand SelectedCommand
{
get { return (ICommand)GetValue(SelectedCommandProperty); }
set { SetValue(SelectedCommandProperty, value); }
}
public IEnumerable ItemsSource
{
get { return (IEnumerable)GetValue(ItemsSourceProperty); }
set { SetValue(ItemsSourceProperty, value); }
}
public object SelectedItem
{
get { return (object)GetValue(SelectedItemProperty); }
set { SetValue(SelectedItemProperty, value); }
}
public DataTemplate ItemTemplate
{
get { return (DataTemplate)GetValue(ItemTemplateProperty); }
set { SetValue(ItemTemplateProperty, value); }
}
private static void ItemsSourceChanged(BindableObject bindable, object oldValue, object newValue)
{
var itemsLayout = (HorizontalList)bindable;
itemsLayout.SetItems();
}
public HorizontalList()
{
BackgroundColor = Color.FromHex("#1E2634");
Spacing = 6;
_scrollView = new ScrollView();
_itemsStackLayout = new StackLayout
{
BackgroundColor = BackgroundColor,
Padding = Padding,
Spacing = Spacing,
HorizontalOptions = LayoutOptions.FillAndExpand
};
_scrollView.BackgroundColor = BackgroundColor;
_scrollView.Content = _itemsStackLayout;
Children.Add(_scrollView);
}
protected virtual void SetItems()
{
_itemsStackLayout.Children.Clear();
_itemsStackLayout.Spacing = Spacing;
_innerSelectedCommand = new Command<View>(view =>
{
SelectedItem = view.BindingContext;
SelectedItem = null; // Allowing item second time selection
});
_itemsStackLayout.Orientation = ListOrientation;
_scrollView.Orientation = ListOrientation == StackOrientation.Horizontal
? ScrollOrientation.Horizontal
: ScrollOrientation.Vertical;
if (ItemsSource == null)
{
return;
}
try
{
foreach (var item in ItemsSource)
{
_itemsStackLayout.Children.Add(GetItemView(item));
}
}
catch(Exception ex)
{
Debug.WriteLine(ex.Message);
}
_itemsStackLayout.BackgroundColor = BackgroundColor;
SelectedItem = null;
}
protected virtual View GetItemView(object item)
{
var content = ItemTemplate.CreateContent();
var view = content as View;
if (view == null)
{
return null;
}
view.BindingContext = item;
var gesture = new TapGestureRecognizer
{
Command = _innerSelectedCommand,
CommandParameter = view
};
AddGesture(view, gesture);
return view;
}
private void AddGesture(View view, TapGestureRecognizer gesture)
{
view.GestureRecognizers.Add(gesture);
var layout = view as Layout<View>;
if (layout == null)
{
return;
}
foreach (var child in layout.Children)
{
AddGesture(child, gesture);
}
}
private static void OnSelectedItemChanged(BindableObject bindable, object oldValue, object newValue)
{
var itemsView = (HorizontalList)bindable;
if (newValue == oldValue && newValue != null)
{
return;
}
itemsView.SelectedItemChanged?.Invoke(itemsView, EventArgs.Empty);
if (itemsView.SelectedCommand?.CanExecute(newValue) ?? false)
{
itemsView.SelectedCommand?.Execute(newValue);
}
}
}
}

Просмотреть файл

@ -0,0 +1,24 @@
using System;
using System.Globalization;
using Xamarin.Forms;
namespace Movies.Web.Converters
{
public class InverseBoolConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (!(value is bool))
{
throw new InvalidOperationException("The target must be a boolean");
}
return !(bool)value;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return null;
}
}
}

Просмотреть файл

@ -0,0 +1,22 @@
using System;
using System.Globalization;
using Xamarin.Forms;
namespace Movies.Web.Converters
{
public class MovieImageConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (parameter != null && parameter.Equals("Backdrop"))
return string.Format("{0}{1}", AppSettings.BackdropImageUrl, value);
else
return string.Format("{0}{1}", AppSettings.PosterImageUrl, value);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return null;
}
}
}

Просмотреть файл

@ -0,0 +1,24 @@
using System;
using System.Globalization;
using Xamarin.Forms;
namespace Movies.Web.Converters
{
public class ReleaseDateConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is DateTime)
{
return ((DateTime)value).Year;
}
return value;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return null;
}
}
}

Двоичные данные
DotNet2018/Samples/Ooui/Movies.Web/Images/movies-back.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 416 B

Двоичные данные
DotNet2018/Samples/Ooui/Movies.Web/Images/movies-cake.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 606 B

Двоичные данные
DotNet2018/Samples/Ooui/Movies.Web/Images/movies-circle.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 672 B

Двоичные данные
DotNet2018/Samples/Ooui/Movies.Web/Images/movies-discover.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 632 B

Двоичные данные
DotNet2018/Samples/Ooui/Movies.Web/Images/movies-favourites.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 746 B

Двоичные данные
DotNet2018/Samples/Ooui/Movies.Web/Images/movies-icon.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 833 B

Двоичные данные
DotNet2018/Samples/Ooui/Movies.Web/Images/movies-menu.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 288 B

Двоичные данные
DotNet2018/Samples/Ooui/Movies.Web/Images/movies-movie.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 461 B

Двоичные данные
DotNet2018/Samples/Ooui/Movies.Web/Images/movies-opacity.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 216 B

Двоичные данные
DotNet2018/Samples/Ooui/Movies.Web/Images/movies-play.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 652 B

Двоичные данные
DotNet2018/Samples/Ooui/Movies.Web/Images/movies-search.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 780 B

Двоичные данные
DotNet2018/Samples/Ooui/Movies.Web/Images/movies-settings.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 729 B

Двоичные данные
DotNet2018/Samples/Ooui/Movies.Web/Images/movies-shows.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 553 B

Двоичные данные
DotNet2018/Samples/Ooui/Movies.Web/Images/movies-upcoming.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 612 B

Двоичные данные
DotNet2018/Samples/Ooui/Movies.Web/Images/movies-web.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 901 B

Просмотреть файл

@ -0,0 +1,14 @@
using System.Runtime.Serialization;
namespace Movies.Web.Models
{
[DataContract]
public class Country
{
[DataMember(Name = "iso_3166_1")]
public string Iso3166Code { get; set; }
[DataMember(Name = "name")]
public string Name { get; set; }
}
}

Просмотреть файл

@ -0,0 +1,11 @@
using System;
namespace Movies.Web.Models
{
public class ErrorViewModel
{
public string RequestId { get; set; }
public bool ShowRequestId => !string.IsNullOrEmpty(RequestId);
}
}

Просмотреть файл

@ -0,0 +1,14 @@
using System.Runtime.Serialization;
namespace Movies.Web.Models.Genre
{
[DataContract]
public class Genre
{
[DataMember(Name = "id")]
public int Id { get; private set; }
[DataMember(Name = "name")]
public string Name { get; private set; }
}
}

Просмотреть файл

@ -0,0 +1,14 @@
using System.Runtime.Serialization;
namespace Movies.Web.Models
{
[DataContract]
public class Language
{
[DataMember(Name = "iso_639_1")]
public string Iso639Code { get; set; }
[DataMember(Name = "name")]
public string Name { get; set; }
}
}

Просмотреть файл

@ -0,0 +1,82 @@
using System;
using Xamarin.Forms;
namespace Movies.Web.Models
{
public enum MenuItemType
{
Discover,
Movies,
TVShows,
Upcoming,
Favourites,
Settings
}
public class MenuItem : BindableObject
{
private string _title;
public string Title
{
get
{
return _title;
}
set
{
_title = value;
OnPropertyChanged();
}
}
private MenuItemType _menuItemType;
public MenuItemType MenuItemType
{
get
{
return _menuItemType;
}
set
{
_menuItemType = value;
OnPropertyChanged();
}
}
private Type _viewModelType;
public Type ViewModelType
{
get
{
return _viewModelType;
}
set
{
_viewModelType = value;
OnPropertyChanged();
}
}
private bool _isEnabled;
public bool IsEnabled
{
get
{
return _isEnabled;
}
set
{
_isEnabled = value;
OnPropertyChanged();
}
}
}
}

Просмотреть файл

@ -0,0 +1,79 @@
using System;
using System.Collections.Generic;
using System.Runtime.Serialization;
namespace Movies.Web.Models.Movie
{
[DataContract]
public class Movie
{
[DataMember(Name = "id")]
public int Id { get; set; }
[DataMember(Name = "title")]
public string Title { get; set; }
[DataMember(Name = "adult")]
public bool IsAdultThemed { get; set; }
[DataMember(Name = "backdrop_path")]
public string BackdropPath { get; set; }
[DataMember(Name = "budget")]
public int Budget { get; set; }
[DataMember(Name = "genres")]
public IReadOnlyList<Genre.Genre> Genres { get; set; }
[DataMember(Name = "homepage")]
public string Homepage { get; set; }
[DataMember(Name = "imdb_id")]
public string ImdbId { get; set; }
[DataMember(Name = "original_language")]
public string OriginalLanguage { get; set; }
[DataMember(Name = "original_title")]
public string OriginalTitle { get; set; }
[DataMember(Name = "overview")]
public string Overview { get; set; }
[DataMember(Name = "popularity")]
public double Popularity { get; set; }
[DataMember(Name = "poster_path")]
public string PosterPath { get; set; }
[DataMember(Name = "production_countries")]
public IReadOnlyList<Country> ProductionCountries { get; set; }
[DataMember(Name = "release_date")]
public DateTime ReleaseDate { get; set; }
[DataMember(Name = "revenue")]
public decimal Revenue { get; set; }
[DataMember(Name = "runtime")]
public int Runtime { get; set; }
[DataMember(Name = "spoken_languages")]
public IReadOnlyList<Language> SpokenLanguages { get; set; }
[DataMember(Name = "status")]
public string Status { get; set; }
[DataMember(Name = "tagline")]
public string Tagline { get; set; }
[DataMember(Name = "video")]
public bool IsVideo { get; set; }
[DataMember(Name = "vote_average")]
public double VoteAverage { get; set; }
[DataMember(Name = "vote_count")]
public int VoteCount { get; set; }
}
}

Просмотреть файл

@ -0,0 +1,29 @@
using System.Runtime.Serialization;
namespace Movies.Web.Models.Movie
{
[DataContract]
public class MovieCastMember
{
[DataMember(Name = "id")]
public int PersonId { get; set; }
[DataMember(Name = "cast_id")]
public int CastId { get; set; }
[DataMember(Name = "credit_id")]
public string CreditId { get; set; }
[DataMember(Name = "character")]
public string Character { get; set; }
[DataMember(Name = "name")]
public string Name { get; set; }
[DataMember(Name = "order")]
public int Order { get; set; }
[DataMember(Name = "profile_path")]
public string ProfilePath { get; set; }
}
}

Просмотреть файл

@ -0,0 +1,18 @@
using System.Collections.Generic;
using System.Runtime.Serialization;
namespace Movies.Web.Models.Movie
{
[DataContract]
public class MovieCredit
{
[DataMember(Name = "id")]
public int MovieId { get; set; }
[DataMember(Name = "cast")]
public IList<MovieCastMember> CastMembers { get; set; }
[DataMember(Name = "crew")]
public IList<MovieCrewMember> CrewMembers { get; set; }
}
}

Просмотреть файл

@ -0,0 +1,26 @@
using System.Runtime.Serialization;
namespace Movies.Web.Models.Movie
{
[DataContract]
public class MovieCrewMember
{
[DataMember(Name = "id")]
public int PersonId { get; set; }
[DataMember(Name = "credit_id")]
public string CreditId { get; set; }
[DataMember(Name = "department")]
public string Department { get; set; }
[DataMember(Name = "job")]
public string Job { get; set; }
[DataMember(Name = "name")]
public string Name { get; set; }
[DataMember(Name = "profile_path")]
public string ProfilePath { get; set; }
}
}

Просмотреть файл

@ -0,0 +1,15 @@
using System.Collections.Generic;
using System.Runtime.Serialization;
namespace Movies.Web.Models.Movie
{
[DataContract]
public class MovieVideo
{
[DataMember(Name = "id")]
public int MovieId { get; set; }
[DataMember(Name = "results")]
public IList<MovieVideoItem> Videos { get; set; }
}
}

Просмотреть файл

@ -0,0 +1,26 @@
using System.Runtime.Serialization;
namespace Movies.Web.Models.Movie
{
[DataContract]
public class MovieVideoItem
{
[DataMember(Name = "id")]
public string MovieVideoItemId { get; set; }
[DataMember(Name = "key")]
public string Key { get; set; }
[DataMember(Name = "name")]
public string Name { get; set; }
[DataMember(Name = "site")]
public string Site { get; set; }
[DataMember(Name = "size")]
public int Size { get; set; }
[DataMember(Name = "type")]
public string Type { get; set; }
}
}

Просмотреть файл

@ -0,0 +1,9 @@
namespace Movies.Web.Models.People
{
public enum Gender
{
Unknown = 0,
Female = 1,
Male = 2
}
}

Просмотреть файл

@ -0,0 +1,49 @@
using System;
using System.Collections.Generic;
using System.Runtime.Serialization;
namespace Movies.Web.Models.People
{
[DataContract]
public class Person
{
[DataMember(Name = "id")]
public int Id { get; set; }
[DataMember(Name = "name")]
public string Name { get; set; }
[DataMember(Name = "also_known_as")]
public IReadOnlyList<string> AlsoKnownAs { get; set; }
[DataMember(Name = "adult")]
public bool IsAdultFilmStar { get; set; }
[DataMember(Name = "biography")]
public string Biography { get; set; }
[DataMember(Name = "birthday")]
public DateTime Birthday { get; set; }
[DataMember(Name = "deathday")]
public DateTime? Deathday { get; set; }
[DataMember(Name = "gender")]
public Gender Gender { get; set; }
[DataMember(Name = "homepage")]
public string Homepage { get; set; }
[DataMember(Name = "imdb_id")]
public string ImdbId { get; set; }
[DataMember(Name = "place_of_birth")]
public string PlaceOfBirth { get; set; }
[DataMember(Name = "popularity")]
public double Popularity { get; set; }
[DataMember(Name = "profile_path")]
public string ProfilePath { get; set; }
}
}

Просмотреть файл

@ -0,0 +1,15 @@
using System.Collections.Generic;
using System.Runtime.Serialization;
namespace Movies.Web.Models.People
{
[DataContract]
public class PersonImage
{
[DataMember(Name = "id")]
public int Id { get; set; }
[DataMember(Name = "profiles")]
public List<Profile> profiles { get; set; }
}
}

Просмотреть файл

@ -0,0 +1,26 @@
using System.Runtime.Serialization;
namespace Movies.Web.Models.People
{
[DataContract]
public class Profile
{
[DataMember(Name = "width")]
public int Width { get; set; }
[DataMember(Name = "height")]
public int Height { get; set; }
[DataMember(Name = "vote_count")]
public int VoteCount { get; set; }
[DataMember(Name = "vote_average")]
public double VoteAverage { get; set; }
[DataMember(Name = "file_path")]
public string FilePath { get; set; }
[DataMember(Name = "aspect_ratio")]
public double AspectRatio { get; set; }
}
}

Просмотреть файл

@ -0,0 +1,12 @@
using Movies.Web.Models.People;
using System.Collections.Generic;
namespace Movies.Web.Models
{
public class ProfileParameter
{
public Profile Current { get; set; }
public List<Profile> Images { get; set; }
}
}

Просмотреть файл

@ -0,0 +1,21 @@
using System.Collections.Generic;
using System.Runtime.Serialization;
namespace Movies.Web.Models
{
[DataContract]
public class SearchResponse<T>
{
[DataMember(Name = "results")]
public IReadOnlyList<T> Results { get; private set; }
[DataMember(Name = "page")]
public int PageNumber { get; private set; }
[DataMember(Name = "total_pages")]
public int TotalPages { get; private set; }
[DataMember(Name = "total_results")]
public int TotalResults { get; private set; }
}
}

Просмотреть файл

@ -0,0 +1,14 @@
using System.Runtime.Serialization;
namespace Movies.Web.Models.TVShow
{
[DataContract]
public class Network
{
[DataMember(Name = "id")]
public int Id { get; set; }
[DataMember(Name = "name")]
public string Name { get; set; }
}
}

Просмотреть файл

@ -0,0 +1,24 @@
using System;
using System.Runtime.Serialization;
namespace Movies.Web.Models.TVShow
{
[DataContract]
public class Season
{
[DataMember(Name = "id")]
public int Id { get; set; }
[DataMember(Name = "air_date")]
public DateTime AirDate { get; set; }
[DataMember(Name = "episode_count")]
public int EpisodeCount { get; set; }
[DataMember(Name = "poster_path")]
public string PosterPath { get; set; }
[DataMember(Name = "season_number")]
public int SeasonNumber { get; set; }
}
}

Просмотреть файл

@ -0,0 +1,73 @@
using System;
using System.Collections.Generic;
using System.Runtime.Serialization;
namespace Movies.Web.Models.TVShow
{
[DataContract]
public class TVShow
{
[DataMember(Name = "id")]
public int Id { get; set; }
[DataMember(Name = "backdrop_path")]
public string BackdropPath { get; set; }
[DataMember(Name = "created_by")]
public IReadOnlyList<TVShowCreator> CreatedBy { get; set; }
[DataMember(Name = "episode_run_time")]
public IReadOnlyList<int> EpisodeRunTime { get; set; }
[DataMember(Name = "first_air_date")]
public DateTime FirstAirDate { get; set; }
[DataMember(Name = "genres")]
public IReadOnlyList<Genre.Genre> Genres { get; set; }
[DataMember(Name = "homepage")]
public string Homepage { get; set; }
[DataMember(Name = "in_production")]
public bool InProduction { get; set; }
[DataMember(Name = "languages")]
public IReadOnlyList<string> Languages { get; set; }
[DataMember(Name = "last_air_date")]
public DateTime LastAirDate { get; set; }
[DataMember(Name = "name")]
public string Name { get; set; }
[DataMember(Name = "networks")]
public IReadOnlyList<Network> Networks { get; set; }
[DataMember(Name = "number_of_episodes")]
public int NumberOfEpisodes { get; set; }
[DataMember(Name = "number_of_seasons")]
public int NumberOfSeasons { get; set; }
[DataMember(Name = "origin_country")]
public IReadOnlyList<string> OriginCountry { get; set; }
[DataMember(Name = "original_language")]
public string OriginalLanguage { get; set; }
[DataMember(Name = "original_name")]
public string OriginalName { get; set; }
[DataMember(Name = "overview")]
public string Overview { get; set; }
[DataMember(Name = "popularity")]
public double Popularity { get; set; }
[DataMember(Name = "poster_path")]
public string PosterPath { get; set; }
[DataMember(Name = "seasons")]
public IReadOnlyList<Season> Seasons { get; set; }
}
}

Просмотреть файл

@ -0,0 +1,17 @@
using System.Runtime.Serialization;
namespace Movies.Web.Models.TVShow
{
[DataContract]
public class TVShowCreator
{
[DataMember(Name = "id")]
public int Id { get; set; }
[DataMember(Name = "name")]
public string Name { get; set; }
[DataMember(Name = "profile_path")]
public string ProfilePath { get; set; }
}
}

Просмотреть файл

@ -0,0 +1,86 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<None Remove="Images\movies-back.png" />
<None Remove="Images\movies-cake.png" />
<None Remove="Images\movies-circle.png" />
<None Remove="Images\movies-discover.png" />
<None Remove="Images\movies-favourites.png" />
<None Remove="Images\movies-icon.png" />
<None Remove="Images\movies-menu.png" />
<None Remove="Images\movies-movie.png" />
<None Remove="Images\movies-opacity.png" />
<None Remove="Images\movies-play.png" />
<None Remove="Images\movies-search.png" />
<None Remove="Images\movies-settings.png" />
<None Remove="Images\movies-shows.png" />
<None Remove="Images\movies-upcoming.png" />
<None Remove="Images\movies-web.png" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Autofac" Version="4.8.1" />
<PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.8" />
<PackageReference Include="Xamarin.Forms" Version="2.5.1.527436" />
</ItemGroup>
<ItemGroup>
<DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.4" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Images\movies-back.png" />
<EmbeddedResource Include="Images\movies-cake.png" />
<EmbeddedResource Include="Images\movies-circle.png" />
<EmbeddedResource Include="Images\movies-discover.png" />
<EmbeddedResource Include="Images\movies-favourites.png" />
<EmbeddedResource Include="Images\movies-icon.png" />
<EmbeddedResource Include="Images\movies-menu.png" />
<EmbeddedResource Include="Images\movies-movie.png" />
<EmbeddedResource Include="Images\movies-opacity.png" />
<EmbeddedResource Include="Images\movies-play.png" />
<EmbeddedResource Include="Images\movies-search.png" />
<EmbeddedResource Include="Images\movies-settings.png" />
<EmbeddedResource Include="Images\movies-shows.png" />
<EmbeddedResource Include="Images\movies-upcoming.png" />
<EmbeddedResource Include="Images\movies-web.png" />
</ItemGroup>
<ItemGroup>
<Reference Include="Ooui">
<HintPath>..\Dependencies\Ooui.dll</HintPath>
</Reference>
<Reference Include="Ooui.AspNetCore">
<HintPath>..\Dependencies\Ooui.AspNetCore.dll</HintPath>
</Reference>
<Reference Include="Ooui.Forms">
<HintPath>..\Dependencies\Ooui.Forms.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Update="Pages\DetailView.xaml">
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
</EmbeddedResource>
<EmbeddedResource Update="Pages\HomeView.xaml">
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
</EmbeddedResource>
<EmbeddedResource Update="Pages\Templates\CastingItemTemplate.xaml">
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
</EmbeddedResource>
<EmbeddedResource Update="Pages\Templates\HomeMainItemTemplate.xaml">
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
</EmbeddedResource>
<EmbeddedResource Update="Pages\Templates\MovieItemTemplate.xaml">
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
</EmbeddedResource>
<EmbeddedResource Update="Pages\Templates\ShowItemTemplate.xaml">
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
</EmbeddedResource>
</ItemGroup>
</Project>

Просмотреть файл

@ -0,0 +1,267 @@
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Movies.Web.Pages.DetailView"
xmlns:converters="clr-namespace:Movies.Web.Converters;assembly=Movies.Web"
xmlns:controls="clr-namespace:Movies.Web.Controls;assembly=Movies.Web"
xmlns:templates="clr-namespace:Movies.Web.Pages.Templates;assembly=Movies.Web">
<ContentPage.Resources>
<ResourceDictionary>
<!-- COLORS -->
<Color x:Key="WhiteColor">#FFFFFF</Color>
<Color x:Key="BlackColor">#000000</Color>
<Color x:Key="AccentColor">#F5C210</Color>
<Color x:Key="BackgroundColor">#1E2634</Color>
<Color x:Key="DarkBackgroundColor">#151C25</Color>
<Color x:Key="TitleColor">#5D6576</Color>
<!-- CONVERTERS -->
<converters:InverseBoolConverter x:Key="InverseBoolConverter" />
<converters:MovieImageConverter x:Key="MovieImageConverter" />
<converters:ReleaseDateConverter x:Key="ReleaseDateConverter" />
<!-- STYLES -->
<Style x:Key="TitleStyle"
TargetType="Label">
<Setter Property="TextColor"
Value="{StaticResource TitleColor}" />
<Setter Property="FontSize"
Value="14" />
<Setter Property="FontAttributes"
Value="Bold" />
</Style>
<Style x:Key="MovieTitleStyle"
TargetType="Label">
<Setter Property="TextColor"
Value="{StaticResource WhiteColor}" />
<Setter Property="FontSize"
Value="20" />
<Setter Property="FontAttributes"
Value="Bold" />
<Setter Property="Margin"
Value="12, 0" />
</Style>
<Style x:Key="ReleaseDateStyle"
TargetType="Label">
<Setter Property="TextColor"
Value="{StaticResource WhiteColor}" />
<Setter Property="VerticalOptions"
Value="End" />
<Setter Property="FontAttributes"
Value="Bold" />
<Setter Property="Margin"
Value="12, 0" />
</Style>
<Color x:Key="VoteCountColor">#939CAE</Color>
<Style x:Key="VoteCountStyle"
TargetType="Label">
<Setter Property="TextColor"
Value="{StaticResource VoteCountColor}" />
<Setter Property="FontSize"
Value="10" />
</Style>
<Style x:Key="VoteAverageStyle"
TargetType="Label">
<Setter Property="TextColor"
Value="{StaticResource WhiteColor}" />
<Setter Property="FontSize"
Value="36" />
<Setter Property="Margin"
Value="12, 0, 24, 0" />
</Style>
<Style x:Key="StorylineTitleStyle"
TargetType="Label">
<Setter Property="TextColor"
Value="{StaticResource TitleColor}" />
<Setter Property="FontSize"
Value="14" />
<Setter Property="FontAttributes"
Value="Bold" />
<Setter Property="Margin"
Value="12, 0" />
</Style>
<Style x:Key="StorylineStyle"
TargetType="Label">
<Setter Property="TextColor"
Value="{StaticResource WhiteColor}" />
<Setter Property="BackgroundColor"
Value="{StaticResource DarkBackgroundColor}" />
<Setter Property="FontSize"
Value="12" />
<Setter Property="Margin"
Value="12, 0" />
<Setter Property="LineBreakMode"
Value="WordWrap" />
</Style>
<Style x:Key="PlayButtonStyle"
TargetType="Button">
<Setter Property="BackgroundColor"
Value="{DynamicResource AccentColor}" />
<Setter Property="TextColor"
Value="{StaticResource BlackColor}" />
<Setter Property="HorizontalOptions"
Value="Start" />
<Setter Property="WidthRequest"
Value="200" />
<Setter Property="Margin"
Value="12" />
</Style>
<Style x:Key="HomepageButtonStyle"
TargetType="Button"
BasedOn="{StaticResource PlayButtonStyle}">
<Setter Property="BackgroundColor"
Value="{StaticResource BlackColor}" />
<Setter Property="TextColor"
Value="{StaticResource WhiteColor}" />
</Style>
</ResourceDictionary>
</ContentPage.Resources>
<ContentPage.Content>
<Grid BackgroundColor="{StaticResource BackgroundColor}">
<ScrollView IsVisible="{Binding IsBusy, Converter={StaticResource InverseBoolConverter}}"
BackgroundColor="{StaticResource DarkBackgroundColor}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="300" />
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<!-- MOVIE PICTURE -->
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Image Grid.Row="0"
Grid.RowSpan="4"
Source="{Binding Movie.BackdropPath, Converter={StaticResource MovieImageConverter}, ConverterParameter=Backdrop}"
Aspect="AspectFill" />
<Image Grid.Row="0"
Grid.RowSpan="4"
Aspect="AspectFill"
Source="Images/movies-opacity.png">
</Image>
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="150" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="100" />
<ColumnDefinition Width="100" />
</Grid.ColumnDefinitions>
<!-- YEAR -->
<Label Grid.Column="0"
Text="{Binding Movie.ReleaseDate, Converter={StaticResource ReleaseDateConverter}}"
Style="{StaticResource ReleaseDateStyle}" />
<!-- VOTES -->
<Grid Grid.Column="2"
VerticalOptions="End">
<Grid.RowDefinitions>
<RowDefinition Height="12" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Label Grid.Column="0"
Text="{Binding Movie.VoteCount}"
Style="{StaticResource VoteCountStyle}" />
<Label Grid.Column="1"
Text="VOTES"
Style="{StaticResource VoteCountStyle}" />
</Grid>
</Grid>
<!-- VOTE AVERAGE -->
<Label Grid.Column="3"
Text="{Binding Movie.VoteAverage}"
Style="{StaticResource VoteAverageStyle}" />
</Grid>
<Grid Grid.Row="2">
<Label Text="{Binding Movie.Title}"
Style="{StaticResource MovieTitleStyle}" />
</Grid>
<Grid Grid.Row="3">
</Grid>
</Grid>
<!-- MOVIE STORYLINE -->
<Grid Grid.Row="1">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Label Grid.Row="0"
Text="STORYLINE"
Style="{StaticResource StorylineTitleStyle}" />
<Label Grid.Row="1"
Text="{Binding Movie.Overview}"
Style="{StaticResource StorylineStyle}" />
<Grid Grid.Row="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Button Grid.Column="0"
Style="{StaticResource PlayButtonStyle}"
Text="PLAY TRAILER"
Image="Images/movies-web.png"
WidthRequest="200"
Command="{Binding PlayCommand}">
</Button>
<Button Grid.Column="1"
Style="{StaticResource HomepageButtonStyle}"
Text="HOMEPAGE"
Image="Images/movies-web.png"
WidthRequest="200">
</Button>
</Grid>
</Grid>
<!-- ACTORS -->
<Grid Grid.Row="2"
BackgroundColor="{StaticResource DarkBackgroundColor}">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Label Grid.Row="0"
Text="ACTORS"
Style="{StaticResource StorylineTitleStyle}" />
<controls:HorizontalList Grid.Row="1"
ListOrientation="Horizontal"
BackgroundColor="{StaticResource DarkBackgroundColor}"
ItemsSource="{Binding Casting}"
VerticalOptions="Start"
HeightRequest="220"
Margin="12, 0, 12, 24">
<controls:HorizontalList.ItemTemplate>
<DataTemplate>
<templates:CastingItemTemplate />
</DataTemplate>
</controls:HorizontalList.ItemTemplate>
</controls:HorizontalList>
</Grid>
</Grid>
</ScrollView>
<ActivityIndicator IsVisible="{Binding IsBusy}"
IsRunning="{Binding IsBusy}"
Color="{StaticResource AccentColor}"
BackgroundColor="{StaticResource BackgroundColor}"
HorizontalOptions="Center"
VerticalOptions="Center" />
</Grid>
</ContentPage.Content>
</ContentPage>

Просмотреть файл

@ -0,0 +1,14 @@
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
namespace Movies.Web.Pages
{
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class DetailView : ContentPage
{
public DetailView()
{
InitializeComponent();
}
}
}

Просмотреть файл

@ -0,0 +1,136 @@
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Movies.Web.Pages.HomeView"
xmlns:controls="clr-namespace:Movies.Web.Controls;assembly=Movies.Web"
xmlns:templates="clr-namespace:Movies.Web.Pages.Templates;assembly=Movies.Web">
<ContentPage.Resources>
<ResourceDictionary>
<!-- GENERAL COLORS -->
<Color x:Key="WhiteColor">#FFFFFF</Color>
<Color x:Key="BlackColor">#000000</Color>
<!-- THEME COLORS -->
<Color x:Key="AccentColor">#F5C210</Color>
<Color x:Key="BackgroundColor">#1E2634</Color>
<Color x:Key="TitleColor">#5D6576</Color>
<!-- STYLES -->
<Style x:Key="TitleStyle"
TargetType="Label">
<Setter Property="TextColor"
Value="{StaticResource TitleColor}" />
<Setter Property="FontSize"
Value="14" />
<Setter Property="FontAttributes"
Value="Bold" />
</Style>
</ResourceDictionary>
</ContentPage.Resources>
<ContentPage.Content>
<Grid>
<ScrollView BackgroundColor="{StaticResource BackgroundColor}">
<Grid RowSpacing="0">
<Grid.RowDefinitions>
<RowDefinition Height="300" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<!-- HIGHLIGHT -->
<templates:HomeMainItemTemplate Grid.Row="0" />
<StackLayout Grid.Row="1">
<!-- TOP MOVIES -->
<Grid Margin="12">
<Grid.RowDefinitions>
<RowDefinition Height="36" />
<RowDefinition Height="300" />
</Grid.RowDefinitions>
<Label Grid.Row="0"
Text="TOP MOVIES"
Style="{StaticResource TitleStyle}" />
<controls:HorizontalList Grid.Row="1"
ListOrientation="Horizontal"
BackgroundColor="{StaticResource BackgroundColor}"
ItemsSource="{Binding TopRatedMovies}"
SelectedCommand="{Binding MovieDetailCommand}">
<controls:HorizontalList.ItemTemplate>
<DataTemplate>
<templates:MovieItemTemplate />
</DataTemplate>
</controls:HorizontalList.ItemTemplate>
</controls:HorizontalList>
</Grid>
<!-- POPULAR MOVIES -->
<Grid Margin="12">
<Grid.RowDefinitions>
<RowDefinition Height="36" />
<RowDefinition Height="300" />
</Grid.RowDefinitions>
<Label Grid.Row="0"
Text="POPULAR MOVIES"
Style="{StaticResource TitleStyle}" />
<controls:HorizontalList Grid.Row="1"
ListOrientation="Horizontal"
BackgroundColor="{StaticResource BackgroundColor}"
ItemsSource="{Binding PopularMovies}"
SelectedCommand="{Binding MovieDetailCommand}">
<controls:HorizontalList.ItemTemplate>
<DataTemplate>
<templates:MovieItemTemplate />
</DataTemplate>
</controls:HorizontalList.ItemTemplate>
</controls:HorizontalList>
</Grid>
<!-- TOP TVSHOWS -->
<Grid Margin="12">
<Grid.RowDefinitions>
<RowDefinition Height="36" />
<RowDefinition Height="300" />
</Grid.RowDefinitions>
<Label Grid.Row="0"
Text="TOP TV SHOWS"
Style="{StaticResource TitleStyle}" />
<controls:HorizontalList Grid.Row="1"
ListOrientation="Horizontal"
BackgroundColor="{StaticResource BackgroundColor}"
ItemsSource="{Binding TopRatedTvShows}">
<controls:HorizontalList.ItemTemplate>
<DataTemplate>
<templates:ShowItemTemplate />
</DataTemplate>
</controls:HorizontalList.ItemTemplate>
</controls:HorizontalList>
</Grid>
<!-- POPULAR TVSHOWS -->
<Grid Margin="12">
<Grid.RowDefinitions>
<RowDefinition Height="36" />
<RowDefinition Height="300" />
</Grid.RowDefinitions>
<Label Grid.Row="0"
Text="POPULAR TV SHOWS"
Style="{StaticResource TitleStyle}" />
<controls:HorizontalList Grid.Row="1"
ListOrientation="Horizontal"
BackgroundColor="{StaticResource BackgroundColor}"
ItemsSource="{Binding PopularTvShows}">
<controls:HorizontalList.ItemTemplate>
<DataTemplate>
<templates:ShowItemTemplate />
</DataTemplate>
</controls:HorizontalList.ItemTemplate>
</controls:HorizontalList>
</Grid>
</StackLayout>
</Grid>
</ScrollView>
<ActivityIndicator IsVisible="{Binding IsBusy}"
IsRunning="{Binding IsBusy}"
Color="{StaticResource AccentColor}"
BackgroundColor="{StaticResource BackgroundColor}"
HorizontalOptions="Center"
VerticalOptions="Center" />
</Grid>
</ContentPage.Content>
</ContentPage>

Просмотреть файл

@ -0,0 +1,25 @@
using Movies.Web.ViewModels;
using Movies.Web.ViewModels.Base;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
namespace Movies.Web.Pages
{
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class HomeView : ContentPage
{
public HomeView()
{
InitializeComponent();
ViewModelBase viewModel = Locator.Instance.Resolve<HomeViewModel>() as ViewModelBase;
BindingContext = viewModel;
}
protected override async void OnAppearing()
{
await (BindingContext as ViewModelBase).InitializeAsync(null);
}
}
}

Просмотреть файл

@ -0,0 +1,57 @@
<?xml version="1.0" encoding="UTF-8"?>
<ContentView xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Movies.Web.Pages.Templates.CastingItemTemplate"
xmlns:converters="clr-namespace:Movies.Web.Converters;assembly=Movies.Web">
<ContentView.Resources>
<ResourceDictionary>
<!-- COLORS -->
<Color x:Key="BackgroundColor">#1E2634</Color>
<!-- CONVERTERS -->
<converters:MovieImageConverter x:Key="MovieImageConverter" />
<!-- STYLES -->
<Style x:Key="CastingImageStyle"
TargetType="Image">
<Setter Property="Aspect"
Value="AspectFit" />
<Setter Property="HorizontalOptions"
Value="Start" />
</Style>
<Style x:Key="CastingNameStyle"
TargetType="Label">
<Setter Property="TextColor"
Value="White" />
<Setter Property="FontAttributes"
Value="Bold" />
<Setter Property="VerticalOptions"
Value="End" />
<Setter Property="Margin"
Value="6, 24" />
</Style>
</ResourceDictionary>
</ContentView.Resources>
<ContentView.Content>
<Grid BackgroundColor="{StaticResource BackgroundColor}"
WidthRequest="175"
MinimumHeightRequest="200"
Margin="0, 0, 12, 0">
<Grid.RowDefinitions>
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Image Grid.Column="0"
Grid.Row="0"
Source="{Binding ProfilePath, Converter={StaticResource MovieImageConverter}}"
Style="{StaticResource CastingImageStyle}">
</Image>
<Label Grid.Column="0"
Grid.Row="0"
Text="{Binding Name}"
Style="{StaticResource CastingNameStyle}" />
</Grid>
</ContentView.Content>
</ContentView>

Просмотреть файл

@ -0,0 +1,14 @@
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
namespace Movies.Web.Pages.Templates
{
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class CastingItemTemplate : ContentView
{
public CastingItemTemplate ()
{
InitializeComponent ();
}
}
}

Просмотреть файл

@ -0,0 +1,111 @@
<?xml version="1.0" encoding="UTF-8"?>
<ContentView xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Movies.Web.Pages.Templates.HomeMainItemTemplate"
xmlns:converters="clr-namespace:Movies.Web.Converters;assembly=Movies.Web">
<ContentView.Resources>
<ResourceDictionary>
<!-- COLORS -->
<Color x:Key="WhiteColor">#FFFFFF</Color>
<Color x:Key="BlackColor">#000000</Color>
<!-- CONVERTERS -->
<converters:MovieImageConverter x:Key="MovieImageConverter" />
<!-- STYLES -->
<Style x:Key="HighlightImageStyle"
TargetType="Image">
<Setter Property="Aspect"
Value="AspectFill" />
</Style>
<Style x:Key="HighlightGradientImageStyle"
TargetType="Image">
<Setter Property="VerticalOptions"
Value="FillAndExpand" />
<Setter Property="Aspect"
Value="Fill" />
<Setter Property="Opacity"
Value=".75" />
</Style>
<Style x:Key="HighlightTitleStyle"
TargetType="Label">
<Setter Property="TextColor"
Value="{StaticResource WhiteColor}" />
<Setter Property="FontSize"
Value="20" />
<Setter Property="FontAttributes"
Value="Bold" />
</Style>
<Style x:Key="HighlightDescriptionStyle"
TargetType="Label">
<Setter Property="TextColor"
Value="{StaticResource WhiteColor}" />
<Setter Property="FontSize"
Value="14" />
<Setter Property="VerticalOptions"
Value="FillAndExpand" />
</Style>
<Style x:Key="PlayButtonStyle"
TargetType="Button">
<Setter Property="BackgroundColor"
Value="{DynamicResource AccentColor}" />
<Setter Property="TextColor"
Value="{StaticResource WhiteColor}" />
</Style>
</ResourceDictionary>
</ContentView.Resources>
<ContentView.Content>
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
</Grid.RowDefinitions>
<Image Grid.Row="0"
Aspect="AspectFill"
Source="{Binding Highlight.BackdropPath, Converter={StaticResource MovieImageConverter}, ConverterParameter=Backdrop}"
Style="{StaticResource HighlightImageStyle}" />
<Image Grid.Row="0"
Source="Images/movies-opacity.png"
Style="{StaticResource HighlightGradientImageStyle}">
</Image>
<Grid Grid.Row="0"
RowSpacing="12"
Margin="24"
VerticalOptions="FillAndExpand">
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="60" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="60*" />
<ColumnDefinition Width="40*" />
</Grid.ColumnDefinitions>
<Grid Grid.Column="0"
Grid.Row="0"
VerticalOptions="Start">
<Grid.RowDefinitions>
<RowDefinition Height="60" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Label Grid.Row="0"
Text="{Binding Highlight.OriginalTitle}"
Style="{StaticResource HighlightTitleStyle}" />
</Grid>
<Button Grid.Column="0"
Grid.Row="1"
WidthRequest="200"
VerticalOptions="End"
HorizontalOptions="Start"
Style="{StaticResource PlayButtonStyle}"
Text="PLAY TRAILER"
Image="Images/movies-play.png">
</Button>
</Grid>
</Grid>
</ContentView.Content>
</ContentView>

Просмотреть файл

@ -0,0 +1,14 @@
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
namespace Movies.Web.Pages.Templates
{
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class HomeMainItemTemplate : ContentView
{
public HomeMainItemTemplate ()
{
InitializeComponent ();
}
}
}

Просмотреть файл

@ -0,0 +1,74 @@
<?xml version="1.0" encoding="UTF-8"?>
<ContentView xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Movies.Web.Pages.Templates.MovieItemTemplate"
xmlns:converters="clr-namespace:Movies.Web.Converters;assembly=Movies.Web">
<ContentView.Resources>
<ResourceDictionary>
<!-- COLORS -->
<Color x:Key="WhiteColor">#FFFFFF</Color>
<Color x:Key="BackgroundColor">#1E2634</Color>
<!-- CONVERTERS -->
<converters:MovieImageConverter x:Key="MovieImageConverter" />
<!-- STYLES -->
<Style x:Key="MovieImageStyle"
TargetType="Image">
<Setter Property="Aspect"
Value="AspectFit" />
<Setter Property="HorizontalOptions"
Value="Start" />
</Style>
<Style x:Key="MovieTitleStyle"
TargetType="Label">
<Setter Property="TextColor"
Value="{StaticResource WhiteColor}" />
<Setter Property="LineBreakMode"
Value="TailTruncation" />
</Style>
<Style x:Key="MovieRatingStyle"
TargetType="Label">
<Setter Property="TextColor"
Value="{StaticResource WhiteColor}" />
<Setter Property="FontAttributes"
Value="Bold" />
</Style>
</ResourceDictionary>
</ContentView.Resources>
<ContentView.Content>
<Grid BackgroundColor="{StaticResource BackgroundColor}"
WidthRequest="200"
Margin="0, 0, 12, 0">
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="12" />
</Grid.RowDefinitions>
<Image Grid.Column="0"
Grid.Row="0"
WidthRequest="150"
Source="{Binding PosterPath, Converter={StaticResource MovieImageConverter}}"
Style="{StaticResource MovieImageStyle}">
</Image>
<Label Grid.Column="0"
Grid.Row="1"
Text="{Binding OriginalTitle}"
Style="{StaticResource MovieTitleStyle}" />
<Grid Grid.Column="0"
Grid.Row="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="24" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Label Text="{Binding VoteAverage}"
Style="{StaticResource MovieRatingStyle}" />
</Grid>
</Grid>
</ContentView.Content>
</ContentView>

Просмотреть файл

@ -0,0 +1,14 @@
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
namespace Movies.Web.Pages.Templates
{
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class MovieItemTemplate : ContentView
{
public MovieItemTemplate ()
{
InitializeComponent ();
}
}
}

Просмотреть файл

@ -0,0 +1,57 @@
<?xml version="1.0" encoding="UTF-8"?>
<ContentView xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Movies.Web.Pages.Templates.ShowItemTemplate"
xmlns:converters="clr-namespace:Movies.Web.Converters;assembly=Movies.Web">
<ContentView.Resources>
<ResourceDictionary>
<!-- COLORS -->
<Color x:Key="WhiteColor">#FFFFFF</Color>
<Color x:Key="BackgroundColor">#1E2634</Color>
<!-- CONVERTERS -->
<converters:MovieImageConverter x:Key="MovieImageConverter" />
<!-- STYLES -->
<Style x:Key="ShowImageStyle"
TargetType="Image">
<Setter Property="Aspect"
Value="AspectFit" />
<Setter Property="HorizontalOptions"
Value="Start" />
</Style>
<Style x:Key="ShowTitleStyle"
TargetType="Label">
<Setter Property="TextColor"
Value="{StaticResource WhiteColor}" />
<Setter Property="LineBreakMode"
Value="TailTruncation" />
</Style>
</ResourceDictionary>
</ContentView.Resources>
<ContentView.Content>
<Grid BackgroundColor="{StaticResource BackgroundColor}"
WidthRequest="200"
Margin="0, 0, 12, 0">
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
<RowDefinition Height="20" />
<RowDefinition Height="12" />
</Grid.RowDefinitions>
<Image Grid.Column="0"
Grid.Row="0"
WidthRequest="150"
Source="{Binding PosterPath, Converter={StaticResource MovieImageConverter}}"
Style="{StaticResource ShowImageStyle}">
</Image>
<Label Grid.Column="0"
Grid.Row="1"
Text="{Binding Name}"
Style="{StaticResource ShowTitleStyle}" />
</Grid>
</ContentView.Content>
</ContentView>

Просмотреть файл

@ -0,0 +1,14 @@
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
namespace Movies.Web.Pages.Templates
{
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class ShowItemTemplate : ContentView
{
public ShowItemTemplate ()
{
InitializeComponent ();
}
}
}

Просмотреть файл

@ -0,0 +1,18 @@
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
namespace Movies.Web
{
public class Program
{
public static void Main(string[] args)
{
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.Build();
}
}

Просмотреть файл

@ -0,0 +1,27 @@
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:60838/",
"sslPort": 0
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"Movies.Web": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "http://localhost:60839/"
}
}
}

Просмотреть файл

@ -0,0 +1,23 @@
using Movies.Web.Models;
using Movies.Web.Models.Movie;
using System.Threading.Tasks;
namespace Movies.Web.Services.Movies
{
public interface IMoviesService
{
Task<Movie> FindByIdAsync(int movieId, string language = "en");
Task<Movie> GetLatestAsync(string language = "en");
Task<SearchResponse<Movie>> GetUpcomingAsync(int pageNumber = 1, string language = "en");
Task<SearchResponse<Movie>> GetTopRatedAsync(int pageNumber = 1, string language = "en");
Task<SearchResponse<Movie>> GetPopularAsync(int pageNumber = 1, string language = "en");
Task<MovieCredit> GetCreditsAsync(int movieId, string language = "en");
Task<MovieVideo> GetVideosAsync(int movieId, string language = "en");
}
}

Просмотреть файл

@ -0,0 +1,80 @@
using Movies.Web.Models;
using Movies.Web.Models.Movie;
using Movies.Web.Services.Request;
using System.Threading.Tasks;
namespace Movies.Web.Services.Movies
{
public class MoviesService : IMoviesService
{
private readonly IRequestService _requestProvider;
public MoviesService(IRequestService requestProvider)
{
_requestProvider = requestProvider;
}
public async Task<Movie> FindByIdAsync(int movieId, string language = "en")
{
string uri = $"{AppSettings.ApiUrl}movie/{movieId}?api_key={AppSettings.ApiKey}&language={language}";
Movie response = await _requestProvider.GetAsync<Movie>(uri);
return response;
}
public async Task<Movie> GetLatestAsync(string language = "en")
{
string uri = $"{AppSettings.ApiUrl}movie/latest?api_key={AppSettings.ApiKey}&language={language}";
Movie response = await _requestProvider.GetAsync<Movie>(uri);
return response;
}
public async Task<SearchResponse<Movie>> GetPopularAsync(int pageNumber = 1, string language = "en")
{
string uri = $"{AppSettings.ApiUrl}movie/popular?api_key={AppSettings.ApiKey}&language={language}&page={pageNumber}";
SearchResponse<Movie> response = await _requestProvider.GetAsync<SearchResponse<Movie>>(uri);
return response;
}
public async Task<SearchResponse<Movie>> GetTopRatedAsync(int pageNumber = 1, string language = "en")
{
string uri = $"{AppSettings.ApiUrl}movie/top_rated?api_key={AppSettings.ApiKey}&language={language}&page={pageNumber}";
SearchResponse<Movie> response = await _requestProvider.GetAsync<SearchResponse<Movie>>(uri);
return response;
}
public async Task<SearchResponse<Movie>> GetUpcomingAsync(int pageNumber = 1, string language = "en")
{
string uri = $"{AppSettings.ApiUrl}movie/upcoming?api_key={AppSettings.ApiKey}&language={language}&page={pageNumber}";
SearchResponse<Movie> response = await _requestProvider.GetAsync<SearchResponse<Movie>>(uri);
return response;
}
public async Task<MovieCredit> GetCreditsAsync(int movieId, string language = "en")
{
string uri = $"{AppSettings.ApiUrl}movie/{movieId}/credits?api_key={AppSettings.ApiKey}&language={language}";
MovieCredit response = await _requestProvider.GetAsync<MovieCredit>(uri);
return response;
}
public async Task<MovieVideo> GetVideosAsync(int movieId, string language = "en")
{
string uri = $"{AppSettings.ApiUrl}movie/{movieId}/videos?api_key={AppSettings.ApiKey}&language={language}";
MovieVideo response = await _requestProvider.GetAsync<MovieVideo>(uri);
return response;
}
}
}

Просмотреть файл

@ -0,0 +1,19 @@
using Movies.Web.ViewModels.Base;
using System;
using System.Threading.Tasks;
namespace Movies.Web.Services.Navigation
{
public interface INavigationService
{
Task InitializeAsync();
Task NavigateToAsync<TViewModel>() where TViewModel : ViewModelBase;
Task NavigateToAsync<TViewModel>(object parameter) where TViewModel : ViewModelBase;
Task NavigateToAsync(Type viewModelType);
Task NavigateToAsync(Type viewModelType, object parameter);
}
}

Просмотреть файл

@ -0,0 +1,92 @@
using Movies.Web.Pages;
using Movies.Web.ViewModels;
using Movies.Web.ViewModels.Base;
using Ooui;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Xamarin.Forms;
namespace Movies.Web.Services.Navigation
{
public class NavigationService : INavigationService
{
protected readonly Dictionary<Type, Type> _mappings;
protected Application CurrentApplication
{
get { return Application.Current; }
}
public NavigationService()
{
_mappings = new Dictionary<Type, Type>();
CreatePageViewModelMappings();
}
public Task InitializeAsync()
{
return NavigateToAsync<HomeViewModel>();
}
public Task NavigateToAsync<TViewModel>() where TViewModel : ViewModelBase
{
return InternalNavigateToAsync(typeof(TViewModel), null);
}
public Task NavigateToAsync<TViewModel>(object parameter) where TViewModel : ViewModelBase
{
return InternalNavigateToAsync(typeof(TViewModel), parameter);
}
public Task NavigateToAsync(Type viewModelType)
{
return InternalNavigateToAsync(viewModelType, null);
}
public Task NavigateToAsync(Type viewModelType, object parameter)
{
return InternalNavigateToAsync(viewModelType, parameter);
}
protected virtual async Task InternalNavigateToAsync(Type viewModelType, object parameter)
{
Page page = CreateAndBindPage(viewModelType, parameter);
await CurrentApplication.MainPage.Navigation.PushAsync(page);
await (page.BindingContext as ViewModelBase).InitializeAsync(parameter);
}
protected Type GetPageTypeForViewModel(Type viewModelType)
{
if (!_mappings.ContainsKey(viewModelType))
{
throw new KeyNotFoundException($"No map for ${viewModelType} was found on navigation mappings");
}
return _mappings[viewModelType];
}
protected Page CreateAndBindPage(Type viewModelType, object parameter)
{
Type pageType = GetPageTypeForViewModel(viewModelType);
if (pageType == null)
{
throw new Exception($"Mapping type for {viewModelType} is not a page");
}
Page page = Activator.CreateInstance(pageType) as Page;
ViewModelBase viewModel = Locator.Instance.Resolve(viewModelType) as ViewModelBase;
page.BindingContext = viewModel;
return page;
}
private void CreatePageViewModelMappings()
{
_mappings.Add(typeof(DetailViewModel), typeof(DetailView));
_mappings.Add(typeof(HomeViewModel), typeof(HomeView));
}
}
}

Просмотреть файл

@ -0,0 +1,15 @@
using Movies.Web.Models;
using Movies.Web.Models.People;
using System.Threading.Tasks;
namespace Movies.Web.Services.People
{
public interface IPeopleService
{
Task<Person> FindByIdAsync(int personId, string language = "en");
Task<SearchResponse<Person>> SearchByNameAsync(string query, int pageNumber = 1, string language = "en");
Task<PersonImage> GetImagesAsync(int personId, string language = "en");
}
}

Просмотреть файл

@ -0,0 +1,44 @@
using System.Threading.Tasks;
using Movies.Web.Models;
using Movies.Web.Models.People;
using Movies.Web.Services.Request;
namespace Movies.Web.Services.People
{
public class PeopleService : IPeopleService
{
private readonly IRequestService _requestProvider;
public PeopleService(IRequestService requestProvider)
{
_requestProvider = requestProvider;
}
public async Task<Person> FindByIdAsync(int personId, string language = "en")
{
string uri = $"{AppSettings.ApiUrl}person/{personId}?api_key={AppSettings.ApiKey}&language={language}";
Person response = await _requestProvider.GetAsync<Person>(uri);
return response;
}
public async Task<SearchResponse<Person>> SearchByNameAsync(string query, int pageNumber = 1, string language = "en")
{
string uri = $"{AppSettings.ApiUrl}search/person?api_key={AppSettings.ApiKey}&language={language}&page={pageNumber}";
SearchResponse<Person> response = await _requestProvider.GetAsync<SearchResponse<Person>>(uri);
return response;
}
public async Task<PersonImage> GetImagesAsync(int personId, string language = "en")
{
string uri = $"{AppSettings.ApiUrl}person/{personId}/images?api_key={AppSettings.ApiKey}&language={language}";
PersonImage response = await _requestProvider.GetAsync<PersonImage>(uri);
return response;
}
}
}

Просмотреть файл

@ -0,0 +1,17 @@
using System.Threading.Tasks;
namespace Movies.Web.Services.Request
{
public interface IRequestService
{
Task<TResult> GetAsync<TResult>(string uri);
Task<TResult> PostAsync<TResult>(string uri, TResult data);
Task<TResult> PostAsync<TRequest, TResult>(string uri, TRequest data);
Task<TResult> PutAsync<TResult>(string uri, TResult data);
Task<TResult> PutAsync<TRequest, TResult>(string uri, TRequest data);
}
}

Просмотреть файл

@ -0,0 +1,102 @@
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Serialization;
using System;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
namespace Movies.Web.Services.Request
{
public class RequestService : IRequestService
{
private readonly JsonSerializerSettings _serializerSettings;
public RequestService()
{
_serializerSettings = new JsonSerializerSettings
{
ContractResolver = new CamelCasePropertyNamesContractResolver(),
DateTimeZoneHandling = DateTimeZoneHandling.Utc,
NullValueHandling = NullValueHandling.Ignore
};
_serializerSettings.Converters.Add(new StringEnumConverter());
}
public async Task<TResult> GetAsync<TResult>(string uri)
{
HttpClient httpClient = CreateHttpClient();
HttpResponseMessage response = await httpClient.GetAsync(uri);
await HandleResponse(response);
string serialized = await response.Content.ReadAsStringAsync();
TResult result = await Task.Run(() => JsonConvert.DeserializeObject<TResult>(serialized, _serializerSettings));
return result;
}
public Task<TResult> PostAsync<TResult>(string uri, TResult data)
{
return PostAsync<TResult, TResult>(uri, data);
}
public async Task<TResult> PostAsync<TRequest, TResult>(string uri, TRequest data)
{
HttpClient httpClient = CreateHttpClient();
string serialized = await Task.Run(() => JsonConvert.SerializeObject(data, _serializerSettings));
HttpResponseMessage response = await httpClient.PostAsync(uri, new StringContent(serialized, Encoding.UTF8, "application/json"));
await HandleResponse(response);
string responseData = await response.Content.ReadAsStringAsync();
return await Task.Run(() => JsonConvert.DeserializeObject<TResult>(responseData, _serializerSettings));
}
public Task<TResult> PutAsync<TResult>(string uri, TResult data)
{
return PutAsync<TResult, TResult>(uri, data);
}
public async Task<TResult> PutAsync<TRequest, TResult>(string uri, TRequest data)
{
HttpClient httpClient = CreateHttpClient();
string serialized = await Task.Run(() => JsonConvert.SerializeObject(data, _serializerSettings));
HttpResponseMessage response = await httpClient.PutAsync(uri, new StringContent(serialized, Encoding.UTF8, "application/json"));
await HandleResponse(response);
string responseData = await response.Content.ReadAsStringAsync();
return await Task.Run(() => JsonConvert.DeserializeObject<TResult>(responseData, _serializerSettings));
}
private HttpClient CreateHttpClient()
{
var httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
return httpClient;
}
private async Task HandleResponse(HttpResponseMessage response)
{
if (!response.IsSuccessStatusCode)
{
var content = await response.Content.ReadAsStringAsync();
if (response.StatusCode == HttpStatusCode.Forbidden || response.StatusCode == HttpStatusCode.Unauthorized)
{
throw new Exception(content);
}
throw new HttpRequestException(content);
}
}
}
}

Просмотреть файл

@ -0,0 +1,16 @@
using Movies.Web.Models;
using System.Threading.Tasks;
namespace Movies.Web.Services.TVShow
{
public interface ITVShowService
{
Task<Models.TVShow.TVShow> FindByIdAsync(int tvShowId, string language = "en");
Task<Models.TVShow.TVShow> GetLatestAsync(string language = "en");
Task<SearchResponse<Models.TVShow.TVShow>> GetTopRatedAsync(int pageNumber = 1, string language = "en");
Task<SearchResponse<Models.TVShow.TVShow>> GetPopularAsync(int pageNumber = 1, string language = "en");
}
}

Просмотреть файл

@ -0,0 +1,52 @@
using System.Threading.Tasks;
using Movies.Web.Models;
using Movies.Web.Services.Request;
namespace Movies.Web.Services.TVShow
{
public class TVShowService : ITVShowService
{
private readonly IRequestService _requestProvider;
public TVShowService(IRequestService requestProvider)
{
_requestProvider = requestProvider;
}
public async Task<Models.TVShow.TVShow> FindByIdAsync(int tvShowId, string language = "en")
{
string uri = $"{AppSettings.ApiUrl}tv/{tvShowId}?api_key={AppSettings.ApiKey}&language={language}";
Models.TVShow.TVShow response = await _requestProvider.GetAsync<Models.TVShow.TVShow>(uri);
return response;
}
public async Task<Models.TVShow.TVShow> GetLatestAsync(string language = "en")
{
string uri = $"{AppSettings.ApiUrl}tv/latest?api_key={AppSettings.ApiKey}&language={language}";
Models.TVShow.TVShow response = await _requestProvider.GetAsync<Models.TVShow.TVShow>(uri);
return response;
}
public async Task<SearchResponse<Models.TVShow.TVShow>> GetPopularAsync(int pageNumber = 1, string language = "en")
{
string uri = $"{AppSettings.ApiUrl}tv/popular?api_key={AppSettings.ApiKey}&language={language}&page={pageNumber}";
SearchResponse<Models.TVShow.TVShow> response = await _requestProvider.GetAsync<SearchResponse<Models.TVShow.TVShow>>(uri);
return response;
}
public async Task<SearchResponse<Models.TVShow.TVShow>> GetTopRatedAsync(int pageNumber = 1, string language = "en")
{
string uri = $"{AppSettings.ApiUrl}tv/top_rated?api_key={AppSettings.ApiKey}&language={language}&page={pageNumber}";
SearchResponse<Models.TVShow.TVShow> response = await _requestProvider.GetAsync<SearchResponse<Models.TVShow.TVShow>>(uri);
return response;
}
}
}

Просмотреть файл

@ -0,0 +1,50 @@
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
namespace Movies.Web
{
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseBrowserLink();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
app.UseStaticFiles();
app.UseOoui();
Xamarin.Forms.Forms.Init();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
}
}

Просмотреть файл

@ -0,0 +1,56 @@
using System;
using Movies.Web.Services.Movies;
using Movies.Web.Services.People;
using Movies.Web.Services.Request;
using Movies.Web.Services.TVShow;
using Autofac;
using Movies.Web.Services.Navigation;
namespace Movies.Web.ViewModels.Base
{
public class Locator
{
private static IContainer _container;
private static readonly Locator _instance = new Locator();
public static Locator Instance
{
get
{
return _instance;
}
}
protected Locator()
{
var builder = new ContainerBuilder();
builder.RegisterType<NavigationService>().As<INavigationService>().SingleInstance();
builder.RegisterType<RequestService>().As<IRequestService>();
builder.RegisterType<MoviesService>().As<IMoviesService>();
builder.RegisterType<PeopleService>().As<IPeopleService>();
builder.RegisterType<TVShowService>().As<ITVShowService>();
builder.RegisterType<DetailViewModel>();
builder.RegisterType<HomeViewModel>();
if (_container != null)
{
_container.Dispose();
}
_container = builder.Build();
}
public T Resolve<T>()
{
return _container.Resolve<T>();
}
public object Resolve(Type type)
{
return _container.Resolve(type);
}
}
}

Просмотреть файл

@ -0,0 +1,29 @@
using System.Threading.Tasks;
using Xamarin.Forms;
namespace Movies.Web.ViewModels.Base
{
public class ViewModelBase : BindableObject
{
private bool _isBusy;
public bool IsBusy
{
get
{
return _isBusy;
}
set
{
_isBusy = value;
OnPropertyChanged();
}
}
public virtual Task InitializeAsync(object navigationData)
{
return Task.FromResult(false);
}
}
}

Просмотреть файл

@ -0,0 +1,102 @@
using Movies.Web.Models.Movie;
using Movies.Web.Services.Movies;
using Movies.Web.Services.Navigation;
using Movies.Web.ViewModels.Base;
using System;
using System.Collections.ObjectModel;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Input;
using Xamarin.Forms;
namespace Movies.Web.ViewModels
{
public class DetailViewModel : ViewModelBase
{
private Movie _movie;
private ObservableCollection<MovieCastMember> _casting;
private string _video;
private INavigationService _navigationService;
private IMoviesService _moviesService;
public DetailViewModel(
INavigationService navigationService,
IMoviesService moviesService)
{
_navigationService = navigationService;
_moviesService = moviesService;
}
public Movie Movie
{
get { return _movie; }
set
{
_movie = value;
OnPropertyChanged();
}
}
public ObservableCollection<MovieCastMember> Casting
{
get { return _casting; }
set
{
_casting = value;
OnPropertyChanged();
}
}
public string Video
{
get { return _video; }
set
{
_video = value;
OnPropertyChanged();
}
}
public ICommand PlayCommand => new Command(Play);
public override async Task InitializeAsync(object navigationData)
{
if (navigationData is Movie)
{
IsBusy = true;
var movie = (Movie)navigationData;
try
{
Movie = await _moviesService.FindByIdAsync(movie.Id);
}
catch
{
Movie = movie;
}
var credits = await _moviesService.GetCreditsAsync(movie.Id);
Casting = new ObservableCollection<MovieCastMember>(credits.CastMembers.Take(10));
var videos = await _moviesService.GetVideosAsync(movie.Id);
if (videos.Videos.Any())
{
var video = videos.Videos.First();
Video = string.Format("{0}{1}", AppSettings.YouTubeUrl, video.Key);
}
IsBusy = false;
}
}
private void Play()
{
if (string.IsNullOrEmpty(Video))
return;
Device.OpenUri(new Uri(Video));
}
}
}

Просмотреть файл

@ -0,0 +1,140 @@
using Movies.Web.Models.Movie;
using Movies.Web.Models.TVShow;
using Movies.Web.Services.Movies;
using Movies.Web.Services.Navigation;
using Movies.Web.Services.TVShow;
using Movies.Web.ViewModels.Base;
using System.Collections.ObjectModel;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Input;
using Xamarin.Forms;
namespace Movies.Web.ViewModels
{
class HomeViewModel : ViewModelBase
{
private Movie _highlight;
private ObservableCollection<Movie> _topRatedMovies;
private ObservableCollection<Movie> _popularMovies;
private ObservableCollection<TVShow> _topRatedTvShows;
private ObservableCollection<TVShow> _popularTvShows;
private IMoviesService _moviesService;
private ITVShowService _tvShowService;
private INavigationService _navigationService;
public HomeViewModel(
IMoviesService moviesService,
ITVShowService tvShowService,
INavigationService navigationService)
{
_moviesService = moviesService;
_tvShowService = tvShowService;
_navigationService = navigationService;
TopRatedMovies = new ObservableCollection<Movie>();
}
public Movie Highlight
{
get { return _highlight; }
set
{
_highlight = value;
OnPropertyChanged();
}
}
public ObservableCollection<Movie> TopRatedMovies
{
get { return _topRatedMovies; }
set
{
_topRatedMovies = value;
OnPropertyChanged();
}
}
public ObservableCollection<Movie> PopularMovies
{
get { return _popularMovies; }
set
{
_popularMovies = value;
OnPropertyChanged();
}
}
public ObservableCollection<TVShow> TopRatedTvShows
{
get { return _topRatedTvShows; }
set
{
_topRatedTvShows = value;
OnPropertyChanged();
}
}
public ObservableCollection<TVShow> PopularTvShows
{
get { return _popularTvShows; }
set
{
_popularTvShows = value;
OnPropertyChanged();
}
}
public ICommand MovieDetailCommand => new Command<Movie>(MovieDetailAsync);
public override async Task InitializeAsync(object navigationData)
{
IsBusy = true;
await LoadTopRatedMoviesAync();
await LoadPopularMoviesAync();
await LoadTopRatedTvShowsAync();
await LoadPopularTvShowsAync();
IsBusy = false;
}
private async Task LoadTopRatedMoviesAync()
{
var result = await _moviesService.GetTopRatedAsync();
TopRatedMovies = new ObservableCollection<Movie>(result.Results.Take(10));
}
private async Task LoadPopularMoviesAync()
{
var result = await _moviesService.GetPopularAsync();
PopularMovies = new ObservableCollection<Movie>(result.Results.Take(10));
Highlight = result.Results.First();
}
private async Task LoadTopRatedTvShowsAync()
{
var result = await _tvShowService.GetTopRatedAsync();
TopRatedTvShows = new ObservableCollection<TVShow>(result.Results.Take(10));
}
private async Task LoadPopularTvShowsAync()
{
var result = await _tvShowService.GetPopularAsync();
PopularTvShows = new ObservableCollection<TVShow>(result.Results.Take(10));
}
private async void MovieDetailAsync(object obj)
{
if (obj is Movie movie)
{
await _navigationService.NavigateToAsync<DetailViewModel>(movie);
}
}
}
}

Просмотреть файл

@ -0,0 +1,7 @@
@{
ViewData["Title"] = "About";
}
<h2>@ViewData["Title"]</h2>
<h3>@ViewData["Message"]</h3>
<p>Use this area to provide additional information.</p>

Просмотреть файл

@ -0,0 +1,17 @@
@{
ViewData["Title"] = "Contact";
}
<h2>@ViewData["Title"]</h2>
<h3>@ViewData["Message"]</h3>
<address>
One Microsoft Way<br />
Redmond, WA 98052-6399<br />
<abbr title="Phone">P:</abbr>
425.555.0100
</address>
<address>
<strong>Support:</strong> <a href="mailto:Support@example.com">Support@example.com</a><br />
<strong>Marketing:</strong> <a href="mailto:Marketing@example.com">Marketing@example.com</a>
</address>

Просмотреть файл

@ -0,0 +1,106 @@
@{
ViewData["Title"] = "Home Page";
}
<div id="myCarousel" class="carousel slide" data-ride="carousel" data-interval="6000">
<ol class="carousel-indicators">
<li data-target="#myCarousel" data-slide-to="0" class="active"></li>
<li data-target="#myCarousel" data-slide-to="1"></li>
<li data-target="#myCarousel" data-slide-to="2"></li>
<li data-target="#myCarousel" data-slide-to="3"></li>
</ol>
<div class="carousel-inner" role="listbox">
<div class="item active">
<img src="~/images/banner1.svg" alt="ASP.NET" class="img-responsive" />
<div class="carousel-caption" role="option">
<p>
Learn how to build ASP.NET apps that can run anywhere.
<a class="btn btn-default" href="https://go.microsoft.com/fwlink/?LinkID=525028&clcid=0x409">
Learn More
</a>
</p>
</div>
</div>
<div class="item">
<img src="~/images/banner2.svg" alt="Visual Studio" class="img-responsive" />
<div class="carousel-caption" role="option">
<p>
There are powerful new features in Visual Studio for building modern web apps.
<a class="btn btn-default" href="https://go.microsoft.com/fwlink/?LinkID=525030&clcid=0x409">
Learn More
</a>
</p>
</div>
</div>
<div class="item">
<img src="~/images/banner3.svg" alt="Package Management" class="img-responsive" />
<div class="carousel-caption" role="option">
<p>
Bring in libraries from NuGet and npm, and automate tasks using Grunt or Gulp.
<a class="btn btn-default" href="https://go.microsoft.com/fwlink/?LinkID=525029&clcid=0x409">
Learn More
</a>
</p>
</div>
</div>
<div class="item">
<img src="~/images/banner4.svg" alt="Microsoft Azure" class="img-responsive" />
<div class="carousel-caption" role="option">
<p>
Learn how Microsoft's Azure cloud platform allows you to build, deploy, and scale web apps.
<a class="btn btn-default" href="https://go.microsoft.com/fwlink/?LinkID=525027&clcid=0x409">
Learn More
</a>
</p>
</div>
</div>
</div>
<a class="left carousel-control" href="#myCarousel" role="button" data-slide="prev">
<span class="glyphicon glyphicon-chevron-left" aria-hidden="true"></span>
<span class="sr-only">Previous</span>
</a>
<a class="right carousel-control" href="#myCarousel" role="button" data-slide="next">
<span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span>
<span class="sr-only">Next</span>
</a>
</div>
<div class="row">
<div class="col-md-3">
<h2>Application uses</h2>
<ul>
<li>Sample pages using ASP.NET Core MVC</li>
<li>Theming using <a href="https://go.microsoft.com/fwlink/?LinkID=398939">Bootstrap</a></li>
</ul>
</div>
<div class="col-md-3">
<h2>How to</h2>
<ul>
<li><a href="https://go.microsoft.com/fwlink/?LinkID=398600">Add a Controller and View</a></li>
<li><a href="https://go.microsoft.com/fwlink/?LinkId=699315">Manage User Secrets using Secret Manager.</a></li>
<li><a href="https://go.microsoft.com/fwlink/?LinkId=699316">Use logging to log a message.</a></li>
<li><a href="https://go.microsoft.com/fwlink/?LinkId=699317">Add packages using NuGet.</a></li>
<li><a href="https://go.microsoft.com/fwlink/?LinkId=699319">Target development, staging or production environment.</a></li>
</ul>
</div>
<div class="col-md-3">
<h2>Overview</h2>
<ul>
<li><a href="https://go.microsoft.com/fwlink/?LinkId=518008">Conceptual overview of what is ASP.NET Core</a></li>
<li><a href="https://go.microsoft.com/fwlink/?LinkId=699320">Fundamentals of ASP.NET Core such as Startup and middleware.</a></li>
<li><a href="https://go.microsoft.com/fwlink/?LinkId=398602">Working with Data</a></li>
<li><a href="https://go.microsoft.com/fwlink/?LinkId=398603">Security</a></li>
<li><a href="https://go.microsoft.com/fwlink/?LinkID=699321">Client side development</a></li>
<li><a href="https://go.microsoft.com/fwlink/?LinkID=699322">Develop on different platforms</a></li>
<li><a href="https://go.microsoft.com/fwlink/?LinkID=699323">Read more on the documentation site</a></li>
</ul>
</div>
<div class="col-md-3">
<h2>Run &amp; Deploy</h2>
<ul>
<li><a href="https://go.microsoft.com/fwlink/?LinkID=517851">Run your app</a></li>
<li><a href="https://go.microsoft.com/fwlink/?LinkID=517853">Run tools such as EF migrations and more</a></li>
<li><a href="https://go.microsoft.com/fwlink/?LinkID=398609">Publish to Microsoft Azure Web Apps</a></li>
</ul>
</div>
</div>

Просмотреть файл

@ -0,0 +1,22 @@
@model ErrorViewModel
@{
ViewData["Title"] = "Error";
}
<h1 class="text-danger">Error.</h1>
<h2 class="text-danger">An error occurred while processing your request.</h2>
@if (Model.ShowRequestId)
{
<p>
<strong>Request ID:</strong> <code>@Model.RequestId</code>
</p>
}
<h3>Development Mode</h3>
<p>
Swapping to <strong>Development</strong> environment will display more detailed information about the error that occurred.
</p>
<p>
<strong>Development environment should not be enabled in deployed applications</strong>, as it can result in sensitive information from exceptions being displayed to end users. For local debugging, development environment can be enabled by setting the <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to <strong>Development</strong>, and restarting the application.
</p>

Просмотреть файл

@ -0,0 +1,71 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>@ViewData["Title"] - Movies.Web</title>
<environment include="Development">
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
<link rel="stylesheet" href="~/css/site.css" />
</environment>
<environment exclude="Development">
<link rel="stylesheet" href="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.7/css/bootstrap.min.css"
asp-fallback-href="~/lib/bootstrap/dist/css/bootstrap.min.css"
asp-fallback-test-class="sr-only" asp-fallback-test-property="position" asp-fallback-test-value="absolute" />
<link rel="stylesheet" href="~/css/site.min.css" asp-append-version="true" />
</environment>
</head>
<body>
<nav class="navbar navbar-inverse navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a asp-area="" asp-controller="Home" asp-action="Index" class="navbar-brand">Movies.Web</a>
</div>
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li><a asp-area="" asp-controller="Home" asp-action="Index">Home</a></li>
<li><a asp-area="" asp-controller="Home" asp-action="About">About</a></li>
<li><a asp-area="" asp-controller="Home" asp-action="Contact">Contact</a></li>
</ul>
</div>
</div>
</nav>
<div class="container body-content">
@RenderBody()
<hr />
<footer>
<p>&copy; 2018 - Movies.Web</p>
</footer>
</div>
<environment include="Development">
<script src="~/lib/jquery/dist/jquery.js"></script>
<script src="~/lib/bootstrap/dist/js/bootstrap.js"></script>
<script src="~/js/site.js" asp-append-version="true"></script>
</environment>
<environment exclude="Development">
<script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-2.2.0.min.js"
asp-fallback-src="~/lib/jquery/dist/jquery.min.js"
asp-fallback-test="window.jQuery"
crossorigin="anonymous"
integrity="sha384-K+ctZQ+LL8q6tP7I94W+qzQsfRV2a+AfHIi9k8z8l9ggpc8X+Ytst4yBo/hH+8Fk">
</script>
<script src="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.7/bootstrap.min.js"
asp-fallback-src="~/lib/bootstrap/dist/js/bootstrap.min.js"
asp-fallback-test="window.jQuery && window.jQuery.fn && window.jQuery.fn.modal"
crossorigin="anonymous"
integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa">
</script>
<script src="~/js/site.min.js" asp-append-version="true"></script>
</environment>
@RenderSection("Scripts", required: false)
</body>
</html>

Просмотреть файл

@ -0,0 +1,18 @@
<environment include="Development">
<script src="~/lib/jquery-validation/dist/jquery.validate.js"></script>
<script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js"></script>
</environment>
<environment exclude="Development">
<script src="https://ajax.aspnetcdn.com/ajax/jquery.validate/1.14.0/jquery.validate.min.js"
asp-fallback-src="~/lib/jquery-validation/dist/jquery.validate.min.js"
asp-fallback-test="window.jQuery && window.jQuery.validator"
crossorigin="anonymous"
integrity="sha384-Fnqn3nxp3506LP/7Y3j/25BlWeA3PXTyT1l78LjECcPaKCV12TsZP7yyMxOe/G/k">
</script>
<script src="https://ajax.aspnetcdn.com/ajax/jquery.validation.unobtrusive/3.2.6/jquery.validate.unobtrusive.min.js"
asp-fallback-src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"
asp-fallback-test="window.jQuery && window.jQuery.validator && window.jQuery.validator.unobtrusive"
crossorigin="anonymous"
integrity="sha384-JrXK+k53HACyavUKOsL+NkmSesD2P+73eDMrbTtTk0h4RmOF8hF8apPlkp26JlyH">
</script>
</environment>

Просмотреть файл

@ -0,0 +1,3 @@
@using Movies.Web
@using Movies.Web.Models
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

Просмотреть файл

@ -0,0 +1,3 @@
@{
Layout = "_Layout";
}

Просмотреть файл

@ -0,0 +1,10 @@
{
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Debug",
"System": "Information",
"Microsoft": "Information"
}
}
}

Просмотреть файл

@ -0,0 +1,8 @@
{
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Warning"
}
}
}

Просмотреть файл

@ -0,0 +1,24 @@
// Configure bundling and minification for the project.
// More info at https://go.microsoft.com/fwlink/?LinkId=808241
[
{
"outputFileName": "wwwroot/css/site.min.css",
// An array of relative input file paths. Globbing patterns supported
"inputFiles": [
"wwwroot/css/site.css"
]
},
{
"outputFileName": "wwwroot/js/site.min.js",
"inputFiles": [
"wwwroot/js/site.js"
],
// Optionally specify minification options
"minify": {
"enabled": true,
"renameLocals": true
},
// Optionally generate .map file
"sourceMap": false
}
]

Просмотреть файл

@ -0,0 +1,35 @@
body {
padding-top: 50px;
padding-bottom: 20px;
}
/* Wrapping element */
/* Set some basic padding to keep content from hitting the edges */
.body-content {
padding-left: 15px;
padding-right: 15px;
}
/* Carousel */
.carousel-caption p {
font-size: 20px;
line-height: 1.4;
}
/* Make .svg files in the carousel display properly in older browsers */
.carousel-inner .item img[src$=".svg"] {
width: 100%;
}
/* QR code generator */
#qrCode {
margin: 15px;
}
/* Hide/rearrange for smaller screens */
@media screen and (max-width: 767px) {
/* Hide captions */
.carousel-caption {
display: none;
}
}

1
DotNet2018/Samples/Ooui/Movies.Web/wwwroot/css/site.min.css поставляемый Normal file
Просмотреть файл

@ -0,0 +1 @@
body{padding-top:50px;padding-bottom:20px}.body-content{padding-left:15px;padding-right:15px}.carousel-caption p{font-size:20px;line-height:1.4}.carousel-inner .item img[src$=".svg"]{width:100%}#qrCode{margin:15px}@media screen and (max-width:767px){.carousel-caption{display:none}}

Двоичные данные
DotNet2018/Samples/Ooui/Movies.Web/wwwroot/favicon.ico Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 31 KiB

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

После

Ширина:  |  Высота:  |  Размер: 9.5 KiB

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

После

Ширина:  |  Высота:  |  Размер: 8.2 KiB

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

После

Ширина:  |  Высота:  |  Размер: 11 KiB

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

После

Ширина:  |  Высота:  |  Размер: 12 KiB

Просмотреть файл

@ -0,0 +1 @@
// Write your JavaScript code.

0
DotNet2018/Samples/Ooui/Movies.Web/wwwroot/js/site.min.js поставляемый Normal file
Просмотреть файл

Просмотреть файл

@ -0,0 +1,45 @@
{
"name": "bootstrap",
"description": "The most popular front-end framework for developing responsive, mobile first projects on the web.",
"keywords": [
"css",
"js",
"less",
"mobile-first",
"responsive",
"front-end",
"framework",
"web"
],
"homepage": "http://getbootstrap.com",
"license": "MIT",
"moduleType": "globals",
"main": [
"less/bootstrap.less",
"dist/js/bootstrap.js"
],
"ignore": [
"/.*",
"_config.yml",
"CNAME",
"composer.json",
"CONTRIBUTING.md",
"docs",
"js/tests",
"test-infra"
],
"dependencies": {
"jquery": "1.9.1 - 3"
},
"version": "3.3.7",
"_release": "3.3.7",
"_resolution": {
"type": "version",
"tag": "v3.3.7",
"commit": "0b9c4a4007c44201dce9a6cc1a38407005c26c86"
},
"_source": "https://github.com/twbs/bootstrap.git",
"_target": "v3.3.7",
"_originalSource": "bootstrap",
"_direct": true
}

Просмотреть файл

@ -0,0 +1,21 @@
The MIT License (MIT)
Copyright (c) 2011-2016 Twitter, Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше