From 072b0256db160463764bc2022591cd866268f3a2 Mon Sep 17 00:00:00 2001 From: Frederik Carlier Date: Sun, 31 May 2015 22:50:07 +0200 Subject: [PATCH] Remove Madb.Site from the repository Change project folder names to use the "Managed.Adb" prefix --- .../App_Data/Managed.AndroidDebugBridge.dll | Bin 156160 -> 0 bytes .../App_Data/Managed.AndroidDebugBridge.xml | 7297 ------------- Madb.Site/App_Start/BundleConfig.cs | 13 - Madb.Site/App_Start/FilterConfig.cs | 10 - Madb.Site/App_Start/RouteConfig.cs | 20 - Madb.Site/App_Start/Startup.Auth.cs | 32 - Madb.Site/Controllers/AssetsController.cs | 14 - .../Controllers/DocumentationController.cs | 23 - Madb.Site/Extensions/HtmlHelper.cs | 42 - Madb.Site/Extensions/Type.cs | 41 - Madb.Site/Extensions/UrlHelper.cs | 51 - .../Extensions/XmlDocumentationReader.cs | 143 - Madb.Site/Global.asax | 1 - Madb.Site/Global.asax.cs | 21 - Madb.Site/Madb.Site.csproj | 534 - Madb.Site/Models/AdSenseModel.cs | 12 - Madb.Site/Models/Documentation/ClassModel.cs | 36 - Madb.Site/Models/Documentation/MethodModel.cs | 47 - .../Models/Documentation/NamespaceModel.cs | 29 - .../Models/Documentation/ParameterModel.cs | 19 - .../Models/Documentation/PropertyModel.cs | 28 - Madb.Site/Models/Documentation/TypeModel.cs | 16 - .../Models/Documentation/Xml/Assembly.cs | 12 - .../Models/Documentation/Xml/Document.cs | 14 - Madb.Site/Models/Documentation/Xml/Gist.cs | 14 - Madb.Site/Models/Documentation/Xml/Member.cs | 42 - Madb.Site/Models/Documentation/Xml/Param.cs | 14 - .../Models/Documentation/Xml/Reference.cs | 14 - Madb.Site/Models/Documentation/Xml/Simple.cs | 32 - Madb.Site/Models/IconHelperModel.cs | 12 - Madb.Site/Models/NavigationPositions.cs | 11 - Madb.Site/Properties/AssemblyInfo.cs | 35 - Madb.Site/Services/DocumentationService.cs | 234 - Madb.Site/Startup.cs | 12 - Madb.Site/Views/Assets/Gist.cshtml | 12 - .../DisplayTemplates/ClassModel.cshtml | 31 - .../DisplayTemplates/Member.cshtml | 110 - .../DisplayTemplates/MethodModel.cshtml | 35 - .../DisplayTemplates/NamespaceModel.cshtml | 16 - .../DisplayTemplates/ParameterModel.cshtml | 12 - .../DisplayTemplates/PropertyModel.cshtml | 26 - .../DisplayTemplates/Type.cshtml | 12 - Madb.Site/Views/Documentation/Index.cshtml | 45 - .../Views/Documentation/Navigation.cshtml | 109 - .../Views/Documentation/_AboutPartial.cshtml | 13 - .../Documentation/_LicensePartial.cshtml | 11 - .../Views/Documentation/_NugetPartial.cshtml | 16 - Madb.Site/Views/Shared/AdSense.cshtml | 8 - Madb.Site/Views/Shared/Analytics.cshtml | 8 - Madb.Site/Views/Shared/Error.cshtml | 9 - Madb.Site/Views/Shared/Paypal.cshtml | 6 - Madb.Site/Views/Shared/_AdPartial.cshtml | 7 - .../Views/Shared/_AddThisCountPartial.cshtml | 9 - .../Shared/_AddThisSideBarPartial.cshtml | 12 - Madb.Site/Views/Shared/_DirectLink.cshtml | 3 - Madb.Site/Views/Shared/_IconPartial.cshtml | 2 - Madb.Site/Views/Shared/_Layout.cshtml | 63 - Madb.Site/Views/Shared/_NavBar.cshtml | 51 - Madb.Site/Views/Shared/_SideNavPartial.cshtml | 32 - Madb.Site/Views/Web.config | 38 - Madb.Site/Views/_ViewStart.cshtml | 3 - Madb.Site/Web.Debug.config | 30 - Madb.Site/Web.Release.config | 31 - Madb.Site/Web.config | 144 - Madb.Site/assets/Scripts/_references.js | Bin 750 -> 0 bytes Madb.Site/assets/Scripts/bootstrap.js | 2114 ---- Madb.Site/assets/Scripts/bootstrap.min.js | 6 - Madb.Site/assets/Scripts/endpointmvc.js | 136 - Madb.Site/assets/Scripts/endpointmvc.min.js | 4 - .../assets/Scripts/endpointmvc.min.js.map | 8 - .../Scripts/jquery-2.1.1.intellisense.js | 2670 ----- Madb.Site/assets/Scripts/jquery-2.1.1.js | 9190 ----------------- Madb.Site/assets/Scripts/jquery-2.1.1.min.js | 4 - Madb.Site/assets/Scripts/jquery-2.1.1.min.map | 1 - Madb.Site/assets/Scripts/jquery.scrollto.js | 174 - .../assets/Scripts/jquery.scrollto.min.js | 4 - .../assets/Scripts/jquery.scrollto.min.js.map | 8 - .../assets/Scripts/jquery.validate-vsdoc.js | 1288 --- Madb.Site/assets/Scripts/jquery.validate.js | 1357 --- .../assets/Scripts/jquery.validate.min.js | 4 - .../Scripts/jquery.validate.unobtrusive.js | 410 - .../jquery.validate.unobtrusive.min.js | 19 - Madb.Site/assets/Scripts/modernizr-2.8.3.js | 1406 --- Madb.Site/assets/Scripts/mousetrap.js | 953 -- Madb.Site/assets/Scripts/mousetrap.min.js | 4 - Madb.Site/assets/Scripts/mousetrap.min.js.map | 8 - Madb.Site/assets/Scripts/respond.js | 224 - .../Scripts/respond.matchmedia.addListener.js | 273 - .../respond.matchmedia.addListener.min.js | 5 - Madb.Site/assets/Scripts/respond.min.js | 5 - Madb.Site/assets/Scripts/system.copy.js | 58 - Madb.Site/assets/Scripts/system.copy.min.js | 4 - .../assets/Scripts/system.copy.min.js.map | 8 - Madb.Site/assets/Scripts/system.expandable.js | 24 - .../assets/Scripts/system.expandable.min.js | 4 - .../Scripts/system.expandable.min.js.map | 8 - .../assets/Scripts/system.floating-label.js | 58 - .../Scripts/system.floating-label.min.js | 4 - .../Scripts/system.floating-label.min.js.map | 8 - .../assets/Scripts/system.scroll-show.js | 19 - Madb.Site/assets/Scripts/system.scroll.js | 22 - Madb.Site/assets/Scripts/system.toastr.js | 47 - Madb.Site/assets/Scripts/system.toastr.min.js | 4 - .../assets/Scripts/system.toastr.min.js.map | 8 - Madb.Site/assets/Scripts/toastr.js | 340 - Madb.Site/assets/Scripts/toastr.min.js | 4 - Madb.Site/assets/Scripts/toastr.min.js.map | 8 - Madb.Site/assets/fonts/FontAwesome.otf | Bin 85908 -> 0 bytes .../assets/fonts/fontawesome-webfont.eot | Bin 56006 -> 0 bytes .../assets/fonts/fontawesome-webfont.svg | 520 - .../assets/fonts/fontawesome-webfont.ttf | Bin 112160 -> 0 bytes .../assets/fonts/fontawesome-webfont.woff | Bin 65452 -> 0 bytes .../fonts/glyphicons-halflings-regular.eot | Bin 20335 -> 0 bytes .../fonts/glyphicons-halflings-regular.svg | 229 - .../fonts/glyphicons-halflings-regular.ttf | Bin 41280 -> 0 bytes .../fonts/glyphicons-halflings-regular.woff | Bin 23320 -> 0 bytes Madb.Site/assets/images/madbee-114.png | Bin 9567 -> 0 bytes Madb.Site/assets/images/madbee-120.png | Bin 10226 -> 0 bytes Madb.Site/assets/images/madbee-144.png | Bin 13391 -> 0 bytes Madb.Site/assets/images/madbee-152.png | Bin 14493 -> 0 bytes Madb.Site/assets/images/madbee-16.png | Bin 715 -> 0 bytes Madb.Site/assets/images/madbee-32.png | Bin 1725 -> 0 bytes Madb.Site/assets/images/madbee-57.png | Bin 3675 -> 0 bytes Madb.Site/assets/images/madbee-72.png | Bin 5076 -> 0 bytes Madb.Site/assets/images/madbee-logo.png | Bin 8562 -> 0 bytes .../assets/styles/bootstrap-overrides.css | 38 - .../assets/styles/bootstrap-overrides.min.css | 1 - Madb.Site/assets/styles/bootstrap-theme.css | 442 - .../assets/styles/bootstrap-theme.css.map | 1 - .../assets/styles/bootstrap-theme.min.css | 5 - Madb.Site/assets/styles/bootstrap.css | 6203 ----------- Madb.Site/assets/styles/bootstrap.css.map | 1 - Madb.Site/assets/styles/bootstrap.min.css | 5 - Madb.Site/assets/styles/bootswatch-paper.css | 1106 -- .../assets/styles/bootswatch-paper.css.map | 1 - Madb.Site/assets/styles/bootswatch-paper.less | 957 -- .../assets/styles/bootswatch-paper.min.css | 1 - .../assets/styles/bootswatch-variables.css | 1 - .../styles/bootswatch-variables.css.map | 1 - .../assets/styles/bootswatch-variables.less | 1000 -- .../styles/bootswatch-variables.min.css | 1 - Madb.Site/assets/styles/bootswatch.css | 6380 ------------ Madb.Site/assets/styles/bootswatch.css.map | 9 - Madb.Site/assets/styles/bootswatch.less | 6288 ----------- Madb.Site/assets/styles/bootswatch.min.css | 10 - Madb.Site/assets/styles/documentation.css | 32 - Madb.Site/assets/styles/documentation.css.map | 1 - Madb.Site/assets/styles/documentation.less | 50 - Madb.Site/assets/styles/documentation.min.css | 1 - .../assets/styles/endpointmvc-variables.css | 1 - .../styles/endpointmvc-variables.css.map | 1 - .../assets/styles/endpointmvc-variables.less | 86 - .../styles/endpointmvc-variables.min.css | 1 - Madb.Site/assets/styles/endpointmvc.css | 239 - Madb.Site/assets/styles/endpointmvc.css.map | 1 - Madb.Site/assets/styles/endpointmvc.less | 272 - Madb.Site/assets/styles/endpointmvc.min.css | 1 - Madb.Site/assets/styles/font-awesome.css | 1672 --- Madb.Site/assets/styles/font-awesome.min.css | 4 - Madb.Site/assets/styles/gist.css | 64 - Madb.Site/assets/styles/gist.css.map | 1 - Madb.Site/assets/styles/gist.less | 85 - Madb.Site/assets/styles/gist.min.css | 1 - Madb.Site/assets/styles/google.adsense.css | 7 - .../assets/styles/google.adsense.min.css | 1 - Madb.Site/assets/styles/main.css | 140 - Madb.Site/assets/styles/main.css.map | 1 - Madb.Site/assets/styles/main.less | 174 - Madb.Site/assets/styles/main.min.css | 1 - Madb.Site/assets/styles/nuget.css | 13 - Madb.Site/assets/styles/nuget.css.map | 1 - Madb.Site/assets/styles/nuget.less | 14 - Madb.Site/assets/styles/nuget.min.css | 1 - Madb.Site/assets/styles/spacing.css | 273 - Madb.Site/assets/styles/spacing.css.map | 1 - Madb.Site/assets/styles/spacing.less | 214 - Madb.Site/assets/styles/spacing.min.css | 1 - Madb.Site/assets/styles/toastr.css | 185 - Madb.Site/assets/styles/toastr.css.map | 1 - Madb.Site/assets/styles/toastr.less | 256 - Madb.Site/assets/styles/toastr.min.css | 1 - Madb.Site/assets/styles/typography.css | 21 - Madb.Site/assets/styles/typography.min.css | 1 - Madb.Site/assets/swf/ZeroClipboard.swf | Bin 4036 -> 0 bytes Madb.Site/packages.config | 24 - .../Arguments.cs | 498 +- .../Managd.Adb.snk | Bin .../Managed.Adb.Console.csproj | 0 .../Program.cs | 162 +- .../Properties/AssemblyInfo.cs | 24 +- .../app.config | 6 +- Managed.Adb.Tests/Managed.Adb.Tests.csproj | 2 +- ....AndroidDebugBridge.sln => Managed.Adb.sln | 178 +- .../AdbHelper.cs | 2150 ++-- .../AdbResponse.cs | 98 +- .../AllocationInfo.cs | 130 +- .../AndroidDebugBridge.cs | 1688 +-- .../AndroidDebugBridgeEventArgs.cs | 56 +- .../BatteryInfo.cs | 340 +- .../BusyBox.cs | 504 +- .../ChunkHandler.cs | 482 +- .../Client.cs | 792 +- .../ClientData.cs | 320 +- .../ClientEventArgs.cs | 136 +- .../ColorData.cs | 58 +- .../Conversion/BigEndianBitConverter.cs | 232 +- .../Conversion/DoubleConverter.cs | 538 +- .../Conversion/EndianBitConverter.cs | 1494 +-- .../Conversion/Endianness.cs | 134 +- .../Conversion/LittleEndianBitConverter.cs | 230 +- .../DdmPreferences.cs | 120 +- .../DebugPortManager.cs | 70 +- .../Debugger.cs | 354 +- .../Device.cs | 1814 ++-- .../DeviceEventArgs.cs | 48 +- .../DeviceMonitor.cs | 1586 +-- .../ErrorCodeHelper.cs | 98 +- .../Exceptions/AdbCommandRejectedException.cs | 50 +- .../Exceptions/AdbException.cs | 96 +- .../Exceptions/BadPacketException.cs | 58 +- .../Exceptions/CommandAbortingException.cs | 94 +- .../Exceptions/DeviceNotFoundException.cs | 54 +- .../PackageInstallationException.cs | 88 +- .../Exceptions/PermissionDeniedException.cs | 90 +- .../ShellCommandUnresponsiveException.cs | 24 +- .../Exceptions/UnknownOptionException.cs | 96 +- .../Extensions/ArrayHelper.cs | 154 +- .../Extensions/BytesHelper.cs | 128 +- .../Extensions/DateTimeHelper.cs | 242 +- .../Extensions/FileInfoHelper.cs | 138 +- .../Extensions/IntegerHelper.cs | 398 +- .../Extensions/PathHelper.cs | 56 +- .../Extensions/ReflectionHelper.cs | 506 +- .../Extensions/StringHelper.cs | 408 +- .../Extensions/ThrowIf.cs | 156 +- .../FileEntry.cs | 936 +- .../FileListingService.cs | 806 +- .../FilePermission.cs | 298 +- .../FileSystem.cs | 872 +- .../IClient.cs | 160 +- .../IDebugPortProvider.cs | 36 +- .../IDevice.cs | 692 +- .../ILogOutput.cs | 54 +- .../IO/BEBinaryReader.cs | 184 +- .../IO/BEBinaryWriter.cs | 182 +- .../IO/ByteBuffer.cs | 714 +- .../IO/ByteOrder.cs | 88 +- .../IO/LinuxPath.cs | 1160 +-- .../IO/Rgb565.cs | 208 +- .../IPacketConsumer.cs | 64 +- .../ISyncProgressMonitor.cs | 80 +- .../JdwpPacket.cs | 494 +- .../Log.cs | 690 +- .../LogLevel.cs | 328 +- .../Logs/ILogListener.cs | 42 +- .../Logs/LogEntry.cs | 30 +- .../Logs/LogReceiver.cs | 280 +- .../Managd.Adb.snk | Bin .../Managed.Adb.csproj | 466 +- .../Managed.Adb.csproj.vspscc | 20 +- .../MonitorThread.cs | 156 +- .../MountPoint.cs | 158 +- .../NullSyncProgressMonitor.cs | 100 +- .../PackageManager.cs | 276 +- .../Properties/AssemblyInfo.cs | 18 +- .../RawImage.cs | 542 +- .../Receivers/BatteryReceiver.cs | 242 +- .../Receivers/CommandErrorReceiver.cs | 84 +- .../Receivers/CommandResultReceiver.cs | 72 +- .../Receivers/ConsoleOutputReceiver.cs | 78 +- .../Receivers/EnvironmentVariablesReceiver.cs | 138 +- .../Receivers/GetPropReceiver.cs | 134 +- .../Receivers/IListingReceiver.cs | 48 +- .../Receivers/IShellOutputReceiver.cs | 64 +- .../Receivers/InstallReceiver.cs | 120 +- .../Receivers/LinkResoverReceiver.cs | 48 +- .../Receivers/ListingServiceReceiver.cs | 466 +- .../Receivers/MountPointReceiver.cs | 176 +- .../Receivers/MultilineReceiver.cs | 278 +- .../Receivers/NullOutputReceiver.cs | 130 +- .../Receivers/PackageManagerReceiver.cs | 318 +- .../SyncResult.cs | 100 +- .../SyncService.cs | 1910 ++-- .../packages.config | 8 +- Managed.AndroidDebugBridge.vssscc | 10 - 285 files changed, 15863 insertions(+), 73599 deletions(-) delete mode 100644 Madb.Site/App_Data/Managed.AndroidDebugBridge.dll delete mode 100644 Madb.Site/App_Data/Managed.AndroidDebugBridge.xml delete mode 100644 Madb.Site/App_Start/BundleConfig.cs delete mode 100644 Madb.Site/App_Start/FilterConfig.cs delete mode 100644 Madb.Site/App_Start/RouteConfig.cs delete mode 100644 Madb.Site/App_Start/Startup.Auth.cs delete mode 100644 Madb.Site/Controllers/AssetsController.cs delete mode 100644 Madb.Site/Controllers/DocumentationController.cs delete mode 100644 Madb.Site/Extensions/HtmlHelper.cs delete mode 100644 Madb.Site/Extensions/Type.cs delete mode 100644 Madb.Site/Extensions/UrlHelper.cs delete mode 100644 Madb.Site/Extensions/XmlDocumentationReader.cs delete mode 100644 Madb.Site/Global.asax delete mode 100644 Madb.Site/Global.asax.cs delete mode 100644 Madb.Site/Madb.Site.csproj delete mode 100644 Madb.Site/Models/AdSenseModel.cs delete mode 100644 Madb.Site/Models/Documentation/ClassModel.cs delete mode 100644 Madb.Site/Models/Documentation/MethodModel.cs delete mode 100644 Madb.Site/Models/Documentation/NamespaceModel.cs delete mode 100644 Madb.Site/Models/Documentation/ParameterModel.cs delete mode 100644 Madb.Site/Models/Documentation/PropertyModel.cs delete mode 100644 Madb.Site/Models/Documentation/TypeModel.cs delete mode 100644 Madb.Site/Models/Documentation/Xml/Assembly.cs delete mode 100644 Madb.Site/Models/Documentation/Xml/Document.cs delete mode 100644 Madb.Site/Models/Documentation/Xml/Gist.cs delete mode 100644 Madb.Site/Models/Documentation/Xml/Member.cs delete mode 100644 Madb.Site/Models/Documentation/Xml/Param.cs delete mode 100644 Madb.Site/Models/Documentation/Xml/Reference.cs delete mode 100644 Madb.Site/Models/Documentation/Xml/Simple.cs delete mode 100644 Madb.Site/Models/IconHelperModel.cs delete mode 100644 Madb.Site/Models/NavigationPositions.cs delete mode 100644 Madb.Site/Properties/AssemblyInfo.cs delete mode 100644 Madb.Site/Services/DocumentationService.cs delete mode 100644 Madb.Site/Startup.cs delete mode 100644 Madb.Site/Views/Assets/Gist.cshtml delete mode 100644 Madb.Site/Views/Documentation/DisplayTemplates/ClassModel.cshtml delete mode 100644 Madb.Site/Views/Documentation/DisplayTemplates/Member.cshtml delete mode 100644 Madb.Site/Views/Documentation/DisplayTemplates/MethodModel.cshtml delete mode 100644 Madb.Site/Views/Documentation/DisplayTemplates/NamespaceModel.cshtml delete mode 100644 Madb.Site/Views/Documentation/DisplayTemplates/ParameterModel.cshtml delete mode 100644 Madb.Site/Views/Documentation/DisplayTemplates/PropertyModel.cshtml delete mode 100644 Madb.Site/Views/Documentation/DisplayTemplates/Type.cshtml delete mode 100644 Madb.Site/Views/Documentation/Index.cshtml delete mode 100644 Madb.Site/Views/Documentation/Navigation.cshtml delete mode 100644 Madb.Site/Views/Documentation/_AboutPartial.cshtml delete mode 100644 Madb.Site/Views/Documentation/_LicensePartial.cshtml delete mode 100644 Madb.Site/Views/Documentation/_NugetPartial.cshtml delete mode 100644 Madb.Site/Views/Shared/AdSense.cshtml delete mode 100644 Madb.Site/Views/Shared/Analytics.cshtml delete mode 100644 Madb.Site/Views/Shared/Error.cshtml delete mode 100644 Madb.Site/Views/Shared/Paypal.cshtml delete mode 100644 Madb.Site/Views/Shared/_AdPartial.cshtml delete mode 100644 Madb.Site/Views/Shared/_AddThisCountPartial.cshtml delete mode 100644 Madb.Site/Views/Shared/_AddThisSideBarPartial.cshtml delete mode 100644 Madb.Site/Views/Shared/_DirectLink.cshtml delete mode 100644 Madb.Site/Views/Shared/_IconPartial.cshtml delete mode 100644 Madb.Site/Views/Shared/_Layout.cshtml delete mode 100644 Madb.Site/Views/Shared/_NavBar.cshtml delete mode 100644 Madb.Site/Views/Shared/_SideNavPartial.cshtml delete mode 100644 Madb.Site/Views/Web.config delete mode 100644 Madb.Site/Views/_ViewStart.cshtml delete mode 100644 Madb.Site/Web.Debug.config delete mode 100644 Madb.Site/Web.Release.config delete mode 100644 Madb.Site/Web.config delete mode 100644 Madb.Site/assets/Scripts/_references.js delete mode 100644 Madb.Site/assets/Scripts/bootstrap.js delete mode 100644 Madb.Site/assets/Scripts/bootstrap.min.js delete mode 100644 Madb.Site/assets/Scripts/endpointmvc.js delete mode 100644 Madb.Site/assets/Scripts/endpointmvc.min.js delete mode 100644 Madb.Site/assets/Scripts/endpointmvc.min.js.map delete mode 100644 Madb.Site/assets/Scripts/jquery-2.1.1.intellisense.js delete mode 100644 Madb.Site/assets/Scripts/jquery-2.1.1.js delete mode 100644 Madb.Site/assets/Scripts/jquery-2.1.1.min.js delete mode 100644 Madb.Site/assets/Scripts/jquery-2.1.1.min.map delete mode 100644 Madb.Site/assets/Scripts/jquery.scrollto.js delete mode 100644 Madb.Site/assets/Scripts/jquery.scrollto.min.js delete mode 100644 Madb.Site/assets/Scripts/jquery.scrollto.min.js.map delete mode 100644 Madb.Site/assets/Scripts/jquery.validate-vsdoc.js delete mode 100644 Madb.Site/assets/Scripts/jquery.validate.js delete mode 100644 Madb.Site/assets/Scripts/jquery.validate.min.js delete mode 100644 Madb.Site/assets/Scripts/jquery.validate.unobtrusive.js delete mode 100644 Madb.Site/assets/Scripts/jquery.validate.unobtrusive.min.js delete mode 100644 Madb.Site/assets/Scripts/modernizr-2.8.3.js delete mode 100644 Madb.Site/assets/Scripts/mousetrap.js delete mode 100644 Madb.Site/assets/Scripts/mousetrap.min.js delete mode 100644 Madb.Site/assets/Scripts/mousetrap.min.js.map delete mode 100644 Madb.Site/assets/Scripts/respond.js delete mode 100644 Madb.Site/assets/Scripts/respond.matchmedia.addListener.js delete mode 100644 Madb.Site/assets/Scripts/respond.matchmedia.addListener.min.js delete mode 100644 Madb.Site/assets/Scripts/respond.min.js delete mode 100644 Madb.Site/assets/Scripts/system.copy.js delete mode 100644 Madb.Site/assets/Scripts/system.copy.min.js delete mode 100644 Madb.Site/assets/Scripts/system.copy.min.js.map delete mode 100644 Madb.Site/assets/Scripts/system.expandable.js delete mode 100644 Madb.Site/assets/Scripts/system.expandable.min.js delete mode 100644 Madb.Site/assets/Scripts/system.expandable.min.js.map delete mode 100644 Madb.Site/assets/Scripts/system.floating-label.js delete mode 100644 Madb.Site/assets/Scripts/system.floating-label.min.js delete mode 100644 Madb.Site/assets/Scripts/system.floating-label.min.js.map delete mode 100644 Madb.Site/assets/Scripts/system.scroll-show.js delete mode 100644 Madb.Site/assets/Scripts/system.scroll.js delete mode 100644 Madb.Site/assets/Scripts/system.toastr.js delete mode 100644 Madb.Site/assets/Scripts/system.toastr.min.js delete mode 100644 Madb.Site/assets/Scripts/system.toastr.min.js.map delete mode 100644 Madb.Site/assets/Scripts/toastr.js delete mode 100644 Madb.Site/assets/Scripts/toastr.min.js delete mode 100644 Madb.Site/assets/Scripts/toastr.min.js.map delete mode 100644 Madb.Site/assets/fonts/FontAwesome.otf delete mode 100644 Madb.Site/assets/fonts/fontawesome-webfont.eot delete mode 100644 Madb.Site/assets/fonts/fontawesome-webfont.svg delete mode 100644 Madb.Site/assets/fonts/fontawesome-webfont.ttf delete mode 100644 Madb.Site/assets/fonts/fontawesome-webfont.woff delete mode 100644 Madb.Site/assets/fonts/glyphicons-halflings-regular.eot delete mode 100644 Madb.Site/assets/fonts/glyphicons-halflings-regular.svg delete mode 100644 Madb.Site/assets/fonts/glyphicons-halflings-regular.ttf delete mode 100644 Madb.Site/assets/fonts/glyphicons-halflings-regular.woff delete mode 100644 Madb.Site/assets/images/madbee-114.png delete mode 100644 Madb.Site/assets/images/madbee-120.png delete mode 100644 Madb.Site/assets/images/madbee-144.png delete mode 100644 Madb.Site/assets/images/madbee-152.png delete mode 100644 Madb.Site/assets/images/madbee-16.png delete mode 100644 Madb.Site/assets/images/madbee-32.png delete mode 100644 Madb.Site/assets/images/madbee-57.png delete mode 100644 Madb.Site/assets/images/madbee-72.png delete mode 100644 Madb.Site/assets/images/madbee-logo.png delete mode 100644 Madb.Site/assets/styles/bootstrap-overrides.css delete mode 100644 Madb.Site/assets/styles/bootstrap-overrides.min.css delete mode 100644 Madb.Site/assets/styles/bootstrap-theme.css delete mode 100644 Madb.Site/assets/styles/bootstrap-theme.css.map delete mode 100644 Madb.Site/assets/styles/bootstrap-theme.min.css delete mode 100644 Madb.Site/assets/styles/bootstrap.css delete mode 100644 Madb.Site/assets/styles/bootstrap.css.map delete mode 100644 Madb.Site/assets/styles/bootstrap.min.css delete mode 100644 Madb.Site/assets/styles/bootswatch-paper.css delete mode 100644 Madb.Site/assets/styles/bootswatch-paper.css.map delete mode 100644 Madb.Site/assets/styles/bootswatch-paper.less delete mode 100644 Madb.Site/assets/styles/bootswatch-paper.min.css delete mode 100644 Madb.Site/assets/styles/bootswatch-variables.css delete mode 100644 Madb.Site/assets/styles/bootswatch-variables.css.map delete mode 100644 Madb.Site/assets/styles/bootswatch-variables.less delete mode 100644 Madb.Site/assets/styles/bootswatch-variables.min.css delete mode 100644 Madb.Site/assets/styles/bootswatch.css delete mode 100644 Madb.Site/assets/styles/bootswatch.css.map delete mode 100644 Madb.Site/assets/styles/bootswatch.less delete mode 100644 Madb.Site/assets/styles/bootswatch.min.css delete mode 100644 Madb.Site/assets/styles/documentation.css delete mode 100644 Madb.Site/assets/styles/documentation.css.map delete mode 100644 Madb.Site/assets/styles/documentation.less delete mode 100644 Madb.Site/assets/styles/documentation.min.css delete mode 100644 Madb.Site/assets/styles/endpointmvc-variables.css delete mode 100644 Madb.Site/assets/styles/endpointmvc-variables.css.map delete mode 100644 Madb.Site/assets/styles/endpointmvc-variables.less delete mode 100644 Madb.Site/assets/styles/endpointmvc-variables.min.css delete mode 100644 Madb.Site/assets/styles/endpointmvc.css delete mode 100644 Madb.Site/assets/styles/endpointmvc.css.map delete mode 100644 Madb.Site/assets/styles/endpointmvc.less delete mode 100644 Madb.Site/assets/styles/endpointmvc.min.css delete mode 100644 Madb.Site/assets/styles/font-awesome.css delete mode 100644 Madb.Site/assets/styles/font-awesome.min.css delete mode 100644 Madb.Site/assets/styles/gist.css delete mode 100644 Madb.Site/assets/styles/gist.css.map delete mode 100644 Madb.Site/assets/styles/gist.less delete mode 100644 Madb.Site/assets/styles/gist.min.css delete mode 100644 Madb.Site/assets/styles/google.adsense.css delete mode 100644 Madb.Site/assets/styles/google.adsense.min.css delete mode 100644 Madb.Site/assets/styles/main.css delete mode 100644 Madb.Site/assets/styles/main.css.map delete mode 100644 Madb.Site/assets/styles/main.less delete mode 100644 Madb.Site/assets/styles/main.min.css delete mode 100644 Madb.Site/assets/styles/nuget.css delete mode 100644 Madb.Site/assets/styles/nuget.css.map delete mode 100644 Madb.Site/assets/styles/nuget.less delete mode 100644 Madb.Site/assets/styles/nuget.min.css delete mode 100644 Madb.Site/assets/styles/spacing.css delete mode 100644 Madb.Site/assets/styles/spacing.css.map delete mode 100644 Madb.Site/assets/styles/spacing.less delete mode 100644 Madb.Site/assets/styles/spacing.min.css delete mode 100644 Madb.Site/assets/styles/toastr.css delete mode 100644 Madb.Site/assets/styles/toastr.css.map delete mode 100644 Madb.Site/assets/styles/toastr.less delete mode 100644 Madb.Site/assets/styles/toastr.min.css delete mode 100644 Madb.Site/assets/styles/typography.css delete mode 100644 Madb.Site/assets/styles/typography.min.css delete mode 100644 Madb.Site/assets/swf/ZeroClipboard.swf delete mode 100644 Madb.Site/packages.config rename {MadBee.Console => Managed.Adb.Console}/Arguments.cs (96%) rename {MadBee.Console => Managed.Adb.Console}/Managd.Adb.snk (100%) rename {MadBee.Console => Managed.Adb.Console}/Managed.Adb.Console.csproj (100%) rename {MadBee.Console => Managed.Adb.Console}/Program.cs (96%) rename {MadBee.Console => Managed.Adb.Console}/Properties/AssemblyInfo.cs (97%) rename {MadBee.Console => Managed.Adb.Console}/app.config (97%) rename Managed.AndroidDebugBridge.sln => Managed.Adb.sln (96%) rename {Managed.AndroidDebugBridge => Managed.Adb}/AdbHelper.cs (97%) rename {Managed.AndroidDebugBridge => Managed.Adb}/AdbResponse.cs (96%) rename {Managed.AndroidDebugBridge => Managed.Adb}/AllocationInfo.cs (97%) rename {Managed.AndroidDebugBridge => Managed.Adb}/AndroidDebugBridge.cs (96%) rename {Managed.AndroidDebugBridge => Managed.Adb}/AndroidDebugBridgeEventArgs.cs (95%) rename {Managed.AndroidDebugBridge => Managed.Adb}/BatteryInfo.cs (95%) rename {Managed.AndroidDebugBridge => Managed.Adb}/BusyBox.cs (96%) rename {Managed.AndroidDebugBridge => Managed.Adb}/ChunkHandler.cs (96%) rename {Managed.AndroidDebugBridge => Managed.Adb}/Client.cs (96%) rename {Managed.AndroidDebugBridge => Managed.Adb}/ClientData.cs (97%) rename {Managed.AndroidDebugBridge => Managed.Adb}/ClientEventArgs.cs (95%) rename {Managed.AndroidDebugBridge => Managed.Adb}/ColorData.cs (94%) rename {Managed.AndroidDebugBridge => Managed.Adb}/Conversion/BigEndianBitConverter.cs (97%) rename {Managed.AndroidDebugBridge => Managed.Adb}/Conversion/DoubleConverter.cs (96%) rename {Managed.AndroidDebugBridge => Managed.Adb}/Conversion/EndianBitConverter.cs (97%) rename {Managed.AndroidDebugBridge => Managed.Adb}/Conversion/Endianness.cs (97%) rename {Managed.AndroidDebugBridge => Managed.Adb}/Conversion/LittleEndianBitConverter.cs (97%) rename {Managed.AndroidDebugBridge => Managed.Adb}/DdmPreferences.cs (96%) rename {Managed.AndroidDebugBridge => Managed.Adb}/DebugPortManager.cs (95%) rename {Managed.AndroidDebugBridge => Managed.Adb}/Debugger.cs (97%) rename {Managed.AndroidDebugBridge => Managed.Adb}/Device.cs (96%) rename {Managed.AndroidDebugBridge => Managed.Adb}/DeviceEventArgs.cs (95%) rename {Managed.AndroidDebugBridge => Managed.Adb}/DeviceMonitor.cs (96%) rename {Managed.AndroidDebugBridge => Managed.Adb}/ErrorCodeHelper.cs (98%) rename {Managed.AndroidDebugBridge => Managed.Adb}/Exceptions/AdbCommandRejectedException.cs (97%) rename {Managed.AndroidDebugBridge => Managed.Adb}/Exceptions/AdbException.cs (96%) rename {Managed.AndroidDebugBridge => Managed.Adb}/Exceptions/BadPacketException.cs (95%) rename {Managed.AndroidDebugBridge => Managed.Adb}/Exceptions/CommandAbortingException.cs (97%) rename {Managed.AndroidDebugBridge => Managed.Adb}/Exceptions/DeviceNotFoundException.cs (96%) rename {Managed.AndroidDebugBridge => Managed.Adb}/Exceptions/PackageInstallationException.cs (97%) rename {Managed.AndroidDebugBridge => Managed.Adb}/Exceptions/PermissionDeniedException.cs (96%) rename {Managed.AndroidDebugBridge => Managed.Adb}/Exceptions/ShellCommandUnresponsiveException.cs (96%) rename {Managed.AndroidDebugBridge => Managed.Adb}/Exceptions/UnknownOptionException.cs (96%) rename {Managed.AndroidDebugBridge => Managed.Adb}/Extensions/ArrayHelper.cs (97%) rename {Managed.AndroidDebugBridge => Managed.Adb}/Extensions/BytesHelper.cs (96%) rename {Managed.AndroidDebugBridge => Managed.Adb}/Extensions/DateTimeHelper.cs (96%) rename {Managed.AndroidDebugBridge => Managed.Adb}/Extensions/FileInfoHelper.cs (96%) rename {Managed.AndroidDebugBridge => Managed.Adb}/Extensions/IntegerHelper.cs (96%) rename {Managed.AndroidDebugBridge => Managed.Adb}/Extensions/PathHelper.cs (96%) rename {Managed.AndroidDebugBridge => Managed.Adb}/Extensions/ReflectionHelper.cs (97%) rename {Managed.AndroidDebugBridge => Managed.Adb}/Extensions/StringHelper.cs (97%) rename {Managed.AndroidDebugBridge => Managed.Adb}/Extensions/ThrowIf.cs (97%) rename {Managed.AndroidDebugBridge => Managed.Adb}/FileEntry.cs (96%) rename {Managed.AndroidDebugBridge => Managed.Adb}/FileListingService.cs (96%) rename {Managed.AndroidDebugBridge => Managed.Adb}/FilePermission.cs (96%) rename {Managed.AndroidDebugBridge => Managed.Adb}/FileSystem.cs (97%) rename {Managed.AndroidDebugBridge => Managed.Adb}/IClient.cs (96%) rename {Managed.AndroidDebugBridge => Managed.Adb}/IDebugPortProvider.cs (97%) rename {Managed.AndroidDebugBridge => Managed.Adb}/IDevice.cs (97%) rename {Managed.AndroidDebugBridge => Managed.Adb}/ILogOutput.cs (96%) rename {Managed.AndroidDebugBridge => Managed.Adb}/IO/BEBinaryReader.cs (97%) rename {Managed.AndroidDebugBridge => Managed.Adb}/IO/BEBinaryWriter.cs (97%) rename {Managed.AndroidDebugBridge => Managed.Adb}/IO/ByteBuffer.cs (96%) rename {Managed.AndroidDebugBridge => Managed.Adb}/IO/ByteOrder.cs (95%) rename {Managed.AndroidDebugBridge => Managed.Adb}/IO/LinuxPath.cs (97%) rename {Managed.AndroidDebugBridge => Managed.Adb}/IO/Rgb565.cs (96%) rename {Managed.AndroidDebugBridge => Managed.Adb}/IPacketConsumer.cs (95%) rename {Managed.AndroidDebugBridge => Managed.Adb}/ISyncProgressMonitor.cs (96%) rename {Managed.AndroidDebugBridge => Managed.Adb}/JdwpPacket.cs (96%) rename {Managed.AndroidDebugBridge => Managed.Adb}/Log.cs (96%) rename {Managed.AndroidDebugBridge => Managed.Adb}/LogLevel.cs (96%) rename {Managed.AndroidDebugBridge => Managed.Adb}/Logs/ILogListener.cs (97%) rename {Managed.AndroidDebugBridge => Managed.Adb}/Logs/LogEntry.cs (96%) rename {Managed.AndroidDebugBridge => Managed.Adb}/Logs/LogReceiver.cs (97%) rename {Managed.AndroidDebugBridge => Managed.Adb}/Managd.Adb.snk (100%) rename {Managed.AndroidDebugBridge => Managed.Adb}/Managed.Adb.csproj (98%) rename {Managed.AndroidDebugBridge => Managed.Adb}/Managed.Adb.csproj.vspscc (96%) rename {Managed.AndroidDebugBridge => Managed.Adb}/MonitorThread.cs (95%) rename {Managed.AndroidDebugBridge => Managed.Adb}/MountPoint.cs (96%) rename {Managed.AndroidDebugBridge => Managed.Adb}/NullSyncProgressMonitor.cs (96%) rename {Managed.AndroidDebugBridge => Managed.Adb}/PackageManager.cs (96%) rename {Managed.AndroidDebugBridge => Managed.Adb}/Properties/AssemblyInfo.cs (97%) rename {Managed.AndroidDebugBridge => Managed.Adb}/RawImage.cs (96%) rename {Managed.AndroidDebugBridge => Managed.Adb}/Receivers/BatteryReceiver.cs (97%) rename {Managed.AndroidDebugBridge => Managed.Adb}/Receivers/CommandErrorReceiver.cs (96%) rename {Managed.AndroidDebugBridge => Managed.Adb}/Receivers/CommandResultReceiver.cs (95%) rename {Managed.AndroidDebugBridge => Managed.Adb}/Receivers/ConsoleOutputReceiver.cs (95%) rename {Managed.AndroidDebugBridge => Managed.Adb}/Receivers/EnvironmentVariablesReceiver.cs (96%) rename {Managed.AndroidDebugBridge => Managed.Adb}/Receivers/GetPropReceiver.cs (96%) rename {Managed.AndroidDebugBridge => Managed.Adb}/Receivers/IListingReceiver.cs (96%) rename {Managed.AndroidDebugBridge => Managed.Adb}/Receivers/IShellOutputReceiver.cs (96%) rename {Managed.AndroidDebugBridge => Managed.Adb}/Receivers/InstallReceiver.cs (96%) rename {Managed.AndroidDebugBridge => Managed.Adb}/Receivers/LinkResoverReceiver.cs (95%) rename {Managed.AndroidDebugBridge => Managed.Adb}/Receivers/ListingServiceReceiver.cs (97%) rename {Managed.AndroidDebugBridge => Managed.Adb}/Receivers/MountPointReceiver.cs (97%) rename {Managed.AndroidDebugBridge => Managed.Adb}/Receivers/MultilineReceiver.cs (96%) rename {Managed.AndroidDebugBridge => Managed.Adb}/Receivers/NullOutputReceiver.cs (96%) rename {Managed.AndroidDebugBridge => Managed.Adb}/Receivers/PackageManagerReceiver.cs (96%) rename {Managed.AndroidDebugBridge => Managed.Adb}/SyncResult.cs (95%) rename {Managed.AndroidDebugBridge => Managed.Adb}/SyncService.cs (97%) rename {Managed.AndroidDebugBridge => Managed.Adb}/packages.config (98%) delete mode 100644 Managed.AndroidDebugBridge.vssscc diff --git a/Madb.Site/App_Data/Managed.AndroidDebugBridge.dll b/Madb.Site/App_Data/Managed.AndroidDebugBridge.dll deleted file mode 100644 index ac21f4855c30d9e6d6b6a0a92ac0feac6fcd51a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 156160 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

lJj%OlS#W9|6f?Mi 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⩔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 ywvPZ1{ltT!^9UTIWoI+C4oo{?|5G|c+SA(?69e - - - Managed.AndroidDebugBridge - - - -

- The ADB Helper class - - SERVICES.TXT - adb_client.c - adb.c - - - - Logging tag - - - - - The time to wait - - - - - The default encoding - - - - - Prevents a default instance of the class from being created. - - - - - - - - - - Opens the specified address on the device on the specified port. - - The address. - The device. - The port. - The open socket - - failed submitting request to ADB - or - connection request rejected - - - - - Kills the running adb server. - - The address. - 0 for success; -1 for failure. - failed asking to kill adb - - - - - Backups the specified address. - - The address. - failed asking to backup device - backup_service.c - - - - Restores this instance. - - - backup_service.c - - - - Gets the adb version of the server. - - The address. - The version number; or -1 if failure. - failed asking for adb version - - - - - Creates and connects a new pass-through socket, from the host to a port on the device. - - The endpoint. - the device to connect to. Can be null in which case the connection will be - to the first available device. - the process pid to connect to. - - The Socket - - - failed submitting request to ADB - or - connection request rejected: + resp.Message - - - - - Creates the adb forward request. - - The address. - The port. - - - - - Forms the adb request. - - The req. - - - - - Writes the specified data to the specified socket. - - The socket. - The data. - - - - - Writes the specified data to the specified socket. - - The socket. - The data. - The length. - The timeout. - - channel EOF - or - timeout - - - - - Reads the adb response. - - The socket. - if set to true [read diag string]. - - - - - Reads the data from specified socket. - - The socket. - The data. - - - - - Reads the data from specified socket. - - The socket. - The data. - The length. - The timeout. - - EOF - or - No Data to read: exception.Message - - - - - Creates the JDWP forward request. - - The pid. - - - - - Creates the forward. - - The adb sock addr. - The device. - The local port. - The remote port. - - - failed to submit the forward command. - or - Device rejected command: + resp.Message - - - - - Lists the forward. - - The address. - The device. - - - - - Removes the forward. - - The adb socket address. - The device. - The local port. - - - - - Removes all forwards. - - The address. - The device. - - - - - Determines whether the specified reply is okay. - - The reply. - - true if the specified reply is okay; otherwise, false. - - - - - Replies to string. - - The reply. - - - - - Gets the devices that are available for communication. - - The address. - A list of devices that are connected. - - - - - Gets the frame buffer from the specified end point. - - The adb sock addr. - The device. - Returns the RawImage. - - failed asking for frame buffer - or - failed nudging - - - - - Executes a shell command on the remote device - - The end point. - The command. - The device. - The RCVR. - - Should check if you CanSU before calling this. - - - - - Executes a shell command on the remote device - - The end point. - The command. - The device. - The RCVR. - The max time to output response. - - - - Executes the remote command. - - The end point. - The command. - The device. - The RCVR. - The max time to output response. - - - - - - - - failed submitting shell command - - - - - - - Executes a shell command on the remote device - - The socket end point - The command to execute - The device to execute on - The shell output receiver - Throws if the result is 'command': not found - Throws if there is a problem reading / writing to the socket - Throws if the execution was canceled - Throws if the Socket.Receice ever returns -1 - - - - Sets the device. - - The adb chan. - The device. - - failed submitting device ( + device + ) request to ADB - or - device ( + device + ) request rejected: + resp.Message - - - - - - Runs the Event log service on the Device, and provides its output to the LogReceiver. - - The address. - The device. - The RCVR. - - - - Runs the Event log service on the Device, and provides its output to the LogReceiver. - - The address. - The device. - Name of the log. - The RCVR. - failed asking for log - - - - - Reboots the specified adb socket address. - - The adb socket address. - The device. - - - - Reboots the specified device in to the specified mode. - - The into. - The adb sock addr. - The device. - - - - Executes a raw socket command. - - The address. - The device. - The command. - - failed to submit the command: {0}.With(command) - or - Device rejected command: {0}.With(resp.Message) - - - - Executes the raw socket command. - - The address. - The command. - - - - - Executes the raw socket command. - - The address. - The command. - - - - - Executes the raw socket command. - - The address. - The device. - The command. Should call FormAdbRequest on the string to create the byte array. - - - Device is offline - or - failed to submit the command: {0}..With(command.GetString().Trim()) - or - Device rejected command: {0}.With(resp.Message) - - Device is offline. - or - failed to submit the command: {0}.With(command) - or - Device rejected command: {0}.With(resp.Message) - - - - - - The device. - - - - - Gets an instance of the AdbHelper. - - - - - An Adb Communication Response - - - - - Initializes a new instance of the class. - - - - - Gets or sets a value indicating whether the IO communication was a success. - - - true if successful; otherwise, false. - - - - - Gets or sets a value indicating whether this is okay. - - - true if okay; otherwise, false. - - - - - Gets or sets a value indicating whether this is timeout. - - - true if timeout; otherwise, false. - - - - - Gets or sets the message. - - - The message. - - - - - Holds Allocation information. - - - - - Initializes a new instance of the class. - - The allocated class. - Size of the allocation. - The thread id. - The stack trace. - - - - Compares the current object with another object of the same type. - - An object to compare with this object. - - A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has the following meanings: Value Meaning Less than zero This object is less than the parameter.Zero This object is equal to . Greater than zero This object is greater than . - - - - - Gets the allocated class. - - The allocated class. - - - - Gets the size of the allocation. - - The size of the allocation. - - - - Gets the thread id. - - The thread id. - - - - Gets the stack trace. - - The stack trace. - - - - The android debug bridge - - - - - - - - - - - - - - - The regex pattern for getting the adb version - - - - - The ADB executive - - - - - The DDMS executive - - - - - The hierarchy viewer - - - - - The AAPT executive - - - - - The default ADB bridge port - - - - - - - - - - - - - - - Initializes the class. - - - - - Initializes the ddm library. - This must be called once before any call to CreateBridge. - - if set to true [client support]. - - - - Terminates the ddm library. This must be called upon application termination. - - - - - Creates a {@link AndroidDebugBridge} that is not linked to any particular executable. - This bridge will expect adb to be running. It will not be able to start/stop/restart - adb. - If a bridge has already been started, it is directly returned with no changes - - - - - Creates a new debug bridge from the location of the command line tool. - - the location of the command line tool 'adb' - force creation of a new bridge even if one with the same location - already exists. - a connected bridge. - Any existing server will be disconnected, unless the location is the same and - forceNewBridge is set to false. - - - - - Disconnects the current debug bridge, and destroy the object. - - This also stops the current adb host server. - - - - Gets the lock. - - - - - - Creates a new bridge. - - the location of the command line tool - - - - - - Creates a new bridge not linked to any particular adb executable. - - - - - Raises the event. - - The instance containing the event data. - - - - Raises the event. - - The instance containing the event data. - - - - Raises the event. - - The instance containing the event data. - - - - Raises the event. - - The instance containing the event data. - - - - Raises the event. - - The instance containing the event data. - - - - Starts the debug bridge. - - true if success. - - - - Kills the debug bridge, and the adb host server. - - true if success. - - - - Restarts adb, but not the services around it. - - true if success. - - - - Returns whether the bridge has acquired the initial list from adb after being created. - - -

Calling getDevices() right after createBridge(String, boolean) will - generally result in an empty list. This is due to the internal asynchronous communication - mechanism with adb that does not guarantee that the IDevice list has been - built before the call to getDevices(). -

The recommended way to get the list of IDevice objects is to create a - IDeviceChangeListener object. - - - true if [has initial device list]; otherwise, false. - - - -

- Queries adb for its version number and checks it against #MIN_VERSION_NUMBER and MAX_VERSION_NUMBER - -
- - - Scans a line resulting from 'adb version' for a potential version number. - - The line to scan. - true if a version number was found (whether it is acceptable or not). - If a version number is found, it checks the version number against what is expected - by this version of ddms. - - - - Starts the adb host side server. - - true if success - - - - Stops the adb host side server. - - true if success - - - - Get the stderr/stdout outputs of a process and return when the process is done. - Both must be read or the process will block on windows. - - The process to get the ouput from - The array to store the stderr output. cannot be null. - The array to store the stdout output. cannot be null. - if true, this will wait for the reader threads. - the process return code. - - - - Occurs when [bridge changed]. - - true - - - - Occurs when [device changed]. - - true - - - - Occurs when [device connected]. - - true - - - - Occurs when [device disconnected]. - - true - - - - Occurs when [client changed]. - - true - - - - Gets or sets the socket address. - - The socket address. - - - - Gets or sets the host address. - - The host address. - - - - Gets an instance of . - - The instance. - - - - Gets an instance of . - - - - - Gets a value indicating whether there is client support. - - - true if there is client support; otherwise, false. - - - - - Gets or Sets the adb location on the OS. - - The adb location on the OS. - - - - Gets the devices. - - The devices. - - - - Gets or sets the client to accept debugger connection on the custom "Selected debug port". - - Not Yet Implemented - - - - Returns whether the AndroidDebugBridge object is still connected to the adb daemon. - - true if this instance is connected; otherwise, false. - - - - Returns the number of times the AndroidDebugBridge object attempted to connect - - The connection attempt count. - - - - Returns the number of times the AndroidDebugBridge object attempted to restart - the adb daemon. - - The restart attempt count. - - - - Gets the device monitor - - - - - Gets if the adb host has started - - - - - Gets the result of the version check - - - - - - - true - - - - Initializes a new instance of the class. - - The bridge. - - - - Gets the bridge. - - The bridge. - - - - - - - - - Returns a that represents this instance. - - - A that represents this instance. - - - - - Gets or sets a value indicating whether AC powered. - - - true if AC powered; otherwise, false. - - - - - Gets or sets a value indicating whether usb powered. - - - true if usb powered; otherwise, false. - - - - - Gets or sets the status. - - - The status. - - - - - Gets or sets the health. - - - The health. - - - - - Gets or sets a value indicating whether a battery is present. - - - true if present; otherwise, false. - - - - - Gets or sets the level. - - - The level. - - - - - Gets or sets the scale. - - - The scale. - - - - - Gets or sets the voltage. - - - The voltage. - - - - - Gets or sets the temperature. - - - The temperature. - - - - - Gets or sets the type. - - - The type. - - - - - Gets the calculated battery level. - - - The calculated level. - - - - - Battery Status Types - - - - - Unknown Status - - - - - Charging - - - - - Discharging - - - - - Discharging - - - - - Battery Full - - - - - Battery Health Types - - - - - Unknown Health - - - - - Good - - - - - Overheating - - - - - Cold - - - - - Over voltage - - - - - Unspecified Failure - - - - - A class to help with working with BusyBox - - - - - - - - - - - - - - - Initializes a new instance of the class. - - The device. - - - - Attempts to install on the device - - The path to the busybox binary to install. - true, if successful; otherwise, false - - - - Checks for busy box. - - - - - Executes a busybox command on the device - - - - - - - - Executes a busybox command on the device as root - - The command. - The receiver. - The command args. - - - - Gets if the specified command name is supported by this version of busybox - - The command name to check - true, if supported; otherwise, false. - - - - Gets or sets the device. - - - The device. - - - - - Gets if busybox is available on this device. - - - - - Gets the version of busybox - - - - - Gets a collection of the supported commands - - - - - - - - - - - - - - - - - - - - Adds the output. - - The data. - The offset. - The length. - - - - Flushes the output. - - This should always be called at the end of the "process" in order to indicate that the data is ready to be processed further if needed. - - - - Gets a value indicating whether this instance is cancelled. - - - true if this instance is cancelled; otherwise, false. - - - - - - - - - - - - - - - Initializes a new instance of the class. - - - - - Adds the output. - - The data. - The offset. - The length. - - - - Flushes the output. - - - - - Finishes the receiver - - - - - Processes the new lines. - - The lines. - - - - Gets or sets a value indicating whether [trim lines]. - - true if [trim lines]; otherwise, false. - - - - Gets or sets the unfinished line. - - The unfinished line. - - - - Gets or sets the lines. - - The lines. - - - - Gets a value indicating whether this instance is canceled. - - - true if this instance is canceled; otherwise, false. - - - - - The busybox version regex pattern - - - - - the busybox commands list regex pattern - - - - - Processes the new lines. - - The lines. - Issues w/ BusyBox.cs/ProcessNewLines() - - - - Gets or sets the busy box. - - - The busy box. - - - - - A debug client - - - - - - - - - - Reads this instance. - - - - - Forwards the packet to client. - - The packet. - - - - Sends the handshake. - - - - - Sends the and consume. - - The packet. - - - - - - - - - - - - - - - - - - - - - - - - Initializes a new instance of the class. - - The device. - The channel. - The pid. - - - - Executes the garbage collector. - - - - - Dumps the hprof. - - - - - Toggles the method profiling. - - - - - Requests the method profiling status. - - - - - Requests the thread update. - - - - - Requests the thread stack trace. - - The thread ID. - - - - Requests the native heap information. - - - - - - Enables the allocation tracker. - - if set to true [enable]. - - - - Requests the allocation status. - - - - - Requests the allocation details. - - - - - Kills this instance. - - - - - Registers the specified selector. - - The selector. - - - - Listens for debugger. - - The listen port. - - - - Sends the and consume. - - The packet. - The reply handler. - - - - Adds the request id. - - The id. - The handler. - - - - Removes the request id. - - The id. - - - - Determines whether [is response to us] [the specified id]. - - The id. - - - - - Packets the failed. - - The packet. - - - - DDMs the seen. - - - - - - Closes the specified notify. - - if set to true [notify]. - - - - Updates the specified change mask. - - The change mask. - - - - Reads this instance. - - - - - Gets the JDWP packet. - - - - - - Forwards the packet to client. - - The packet. - - - - Sends the handshake. - - - - - - Sends the and consume. - - The packet. - - - - Returns a that represents this instance. - - - A that represents this instance. - - - - - Gets the state of the change. - - - The state of the change. - - - - - Gets or sets the channel. - - - The channel. - - - - - Gets the state of the connection. - - - The state of the connection. - - - - - Gets the device. - - - - - Gets the device implementation. - - - - - Gets the debugger listen port. - - - - - Returns true if the client VM is DDM-aware. - - Calling here is only allowed after the connection has been established. - - - - Gets a value indicating whether this instance is debugger attached. - - - true if this instance is debugger attached; otherwise, false. - - - - - Gets the debugger. - - - - - Gets the client data. - - - - - Gets or sets a value indicating whether this instance is thread update enabled. - - - true if this instance is thread update enabled; otherwise, false. - - - - - Gets or sets a value indicating whether this instance is heap update enabled. - - - true if this instance is heap update enabled; otherwise, false. - - - - - Gets or sets a value indicating whether this instance is selected client. - - - true if this instance is selected client; otherwise, false. - - - - - Gets a value indicating whether this instance is valid. - - - true if this instance is valid; otherwise, false. - - - - - - - - - - - - - - - Name of the value representing the max size of the heap, in the Map returned by - GetVmHeapInfo(int) - - - - - Name of the value representing the size of the heap, in the {@link Map} returned by - {@link #getVmHeapInfo(int)} - - - - - Name of the value representing the number of allocated bytes of the heap, in the - {@link Map} returned by {@link #getVmHeapInfo(int)} - - - - - Name of the value representing the number of objects in the heap, in the {@link Map} - returned by {@link #getVmHeapInfo(int)} - - - - - String for feature enabling starting/stopping method profiling - @see #hasFeature(String) - - - - - String for feature enabling direct streaming of method profiling data - @see #hasFeature(String) - - - - - String for feature allowing to dump hprof files - @see #hasFeature(String) - - - - - String for feature allowing direct streaming of hprof dumps - @see #hasFeature(String) /// - - - - Initializes a new instance of the class. - - The pid. - - - - Gets the pid. - - - - - Gets or sets the debugger interest. - - - The debugger interest. - - - - - Gets or sets a value indicating whether this instance is DDM aware. - - - true if this instance is DDM aware; otherwise, false. - - - - - Gets or sets the vm identifier. - - - The vm identifier. - - - - - Gets or sets the description. - - - The description. - - - - - Gets or sets the debugger connection status. - - - The debugger connection status. - - - - - Debugger connection status: not waiting on one, not connected to one, but accepting - new connections. This is the default value. - - - - - Debugger connection status: the application's VM is paused, waiting for a debugger to connect to it before resuming. - - - - - Debugger connection status : Debugger is connected - - - - - Debugger connection status: The listening port for debugger connection failed to listen. - No debugger will be able to connect. - - - - - - - - - - Allocation tracking status: unknown. - This happens right after a {@link Client} is discovered - by the {@link AndroidDebugBridge}, and before the {@link Client} answered the query - regarding its allocation tracking status. - @see Client#requestAllocationStatus() - - - - - Allocation tracking status: the {@link Client} is not tracking allocations. - - - - - Allocation tracking status: the {@link Client} is tracking allocations. - - - - - - - - - - Method profiling status: unknown. - This happens right after a {@link Client} is discovered - by the {@link AndroidDebugBridge}, and before the {@link Client} answered the query - regarding its method profiling status. - @see Client#requestMethodProfilingStatus() - - - - - Method profiling status: the {@link Client} is not profiling method calls. - - - - - Method profiling status: the {@link Client} is profiling method calls. - - - - - - - true - - - - Gets or sets the length. - - - The length. - - - - - Gets or sets the offset. - - - The offset. - - - - - Implementation of EndianBitConverter which converts to/from big-endian - byte arrays. - - - - - Equivalent of System.BitConverter, but with either endianness. - - - - - Indicates the byte order ("endianess") in which data is converted using this class. - - - Different computer architectures store data using different byte orders. "Big-endian" - means the most significant byte is on the left end of a word. "Little-endian" means the - most significant byte is on the right end of a word. - - true if this converter is little-endian, false otherwise. - - - - Converts the specified double-precision floating point number to a - 64-bit signed integer. Note: the endianness of this converter does not - affect the returned value. - - The number to convert. - A 64-bit signed integer whose value is equivalent to value. - - - - Converts the specified 64-bit signed integer to a double-precision - floating point number. Note: the endianness of this converter does not - affect the returned value. - - The number to convert. - A double-precision floating point number whose value is equivalent to value. - - - - Converts the specified single-precision floating point number to a - 32-bit signed integer. Note: the endianness of this converter does not - affect the returned value. - - The number to convert. - A 32-bit signed integer whose value is equivalent to value. - - - - Converts the specified 32-bit signed integer to a single-precision floating point - number. Note: the endianness of this converter does not - affect the returned value. - - The number to convert. - A single-precision floating point number whose value is equivalent to value. - - - - Returns a Boolean value converted from one byte at a specified position in a byte array. - - An array of bytes. - The starting position within value. - true if the byte at startIndex in value is nonzero; otherwise, false. - - - - Returns a Unicode character converted from two bytes at a specified position in a byte array. - - An array of bytes. - The starting position within value. - A character formed by two bytes beginning at startIndex. - - - - Returns a double-precision floating point number converted from eight bytes - at a specified position in a byte array. - - An array of bytes. - The starting position within value. - A double precision floating point number formed by eight bytes beginning at startIndex. - - - - Returns a single-precision floating point number converted from four bytes - at a specified position in a byte array. - - An array of bytes. - The starting position within value. - A single precision floating point number formed by four bytes beginning at startIndex. - - - - Returns a 16-bit signed integer converted from two bytes at a specified position in a byte array. - - An array of bytes. - The starting position within value. - A 16-bit signed integer formed by two bytes beginning at startIndex. - - - - Returns a 32-bit signed integer converted from four bytes at a specified position in a byte array. - - An array of bytes. - The starting position within value. - A 32-bit signed integer formed by four bytes beginning at startIndex. - - - - Returns a 64-bit signed integer converted from eight bytes at a specified position in a byte array. - - An array of bytes. - The starting position within value. - A 64-bit signed integer formed by eight bytes beginning at startIndex. - - - - Returns a 16-bit unsigned integer converted from two bytes at a specified position in a byte array. - - An array of bytes. - The starting position within value. - A 16-bit unsigned integer formed by two bytes beginning at startIndex. - - - - Returns a 32-bit unsigned integer converted from four bytes at a specified position in a byte array. - - An array of bytes. - The starting position within value. - A 32-bit unsigned integer formed by four bytes beginning at startIndex. - - - - Returns a 64-bit unsigned integer converted from eight bytes at a specified position in a byte array. - - An array of bytes. - The starting position within value. - A 64-bit unsigned integer formed by eight bytes beginning at startIndex. - - - - Checks the given argument for validity. - - The byte array passed in - The start index passed in - The number of bytes required - value is a null reference - - startIndex is less than zero or greater than the length of value minus bytesRequired. - - - - - Checks the arguments for validity before calling FromBytes - (which can therefore assume the arguments are valid). - - The bytes to convert after checking - The index of the first byte to convert - The number of bytes to convert - - - - - Convert the given number of bytes from the given array, from the given start - position, into a long, using the bytes as the least significant part of the long. - By the time this is called, the arguments have been checked for validity. - - The bytes to convert - The index of the first byte to convert - The number of bytes to use in the conversion - The converted number - - - - Returns a String converted from the elements of a byte array. - - An array of bytes. - All the elements of value are converted. - - A String of hexadecimal pairs separated by hyphens, where each pair - represents the corresponding element in value; for example, "7F-2C-4A". - - - - - Returns a String converted from the elements of a byte array starting at a specified array position. - - An array of bytes. - The starting position within value. - The elements from array position startIndex to the end of the array are converted. - - A String of hexadecimal pairs separated by hyphens, where each pair - represents the corresponding element in value; for example, "7F-2C-4A". - - - - - Returns a String converted from a specified number of bytes at a specified position in a byte array. - - An array of bytes. - The starting position within value. - The number of bytes to convert. - The length elements from array position startIndex are converted. - - A String of hexadecimal pairs separated by hyphens, where each pair - represents the corresponding element in value; for example, "7F-2C-4A". - - - - - Returns a decimal value converted from sixteen bytes - at a specified position in a byte array. - - An array of bytes. - The starting position within value. - A decimal formed by sixteen bytes beginning at startIndex. - - - - Returns the specified decimal value as an array of bytes. - - The number to convert. - An array of bytes with length 16. - - - - Copies the specified decimal value into the specified byte array, - beginning at the specified index. - - A character to convert. - The byte array to copy the bytes into - The first index into the array to copy the bytes into - - - - Returns an array with the given number of bytes formed - from the least significant bytes of the specified value. - This is used to implement the other GetBytes methods. - - The value to get bytes for - The number of significant bytes to return - - - - Returns the specified Boolean value as an array of bytes. - - A Boolean value. - An array of bytes with length 1. - - - - Returns the specified Unicode character value as an array of bytes. - - A character to convert. - An array of bytes with length 2. - - - - Returns the specified double-precision floating point value as an array of bytes. - - The number to convert. - An array of bytes with length 8. - - - - Returns the specified 16-bit signed integer value as an array of bytes. - - The number to convert. - An array of bytes with length 2. - - - - Returns the specified 32-bit signed integer value as an array of bytes. - - The number to convert. - An array of bytes with length 4. - - - - Returns the specified 64-bit signed integer value as an array of bytes. - - The number to convert. - An array of bytes with length 8. - - - - Returns the specified single-precision floating point value as an array of bytes. - - The number to convert. - An array of bytes with length 4. - - - - Returns the specified 16-bit unsigned integer value as an array of bytes. - - The number to convert. - An array of bytes with length 2. - - - - Returns the specified 32-bit unsigned integer value as an array of bytes. - - The number to convert. - An array of bytes with length 4. - - - - Returns the specified 64-bit unsigned integer value as an array of bytes. - - The number to convert. - An array of bytes with length 8. - - - - Copies the given number of bytes from the least-specific - end of the specified value into the specified byte array, beginning - at the specified index. - This is used to implement the other CopyBytes methods. - - The value to copy bytes for - The number of significant bytes to copy - The byte array to copy the bytes into - The first index into the array to copy the bytes into - - - - Copies the given number of bytes from the least-specific - end of the specified value into the specified byte array, beginning - at the specified index. - This must be implemented in concrete derived classes, but the implementation - may assume that the value will fit into the buffer. - - The value to copy bytes for - The number of significant bytes to copy - The byte array to copy the bytes into - The first index into the array to copy the bytes into - - - - Copies the specified Boolean value into the specified byte array, - beginning at the specified index. - - A Boolean value. - The byte array to copy the bytes into - The first index into the array to copy the bytes into - - - - Copies the specified Unicode character value into the specified byte array, - beginning at the specified index. - - A character to convert. - The byte array to copy the bytes into - The first index into the array to copy the bytes into - - - - Copies the specified double-precision floating point value into the specified byte array, - beginning at the specified index. - - The number to convert. - The byte array to copy the bytes into - The first index into the array to copy the bytes into - - - - Copies the specified 16-bit signed integer value into the specified byte array, - beginning at the specified index. - - The number to convert. - The byte array to copy the bytes into - The first index into the array to copy the bytes into - - - - Copies the specified 32-bit signed integer value into the specified byte array, - beginning at the specified index. - - The number to convert. - The byte array to copy the bytes into - The first index into the array to copy the bytes into - - - - Copies the specified 64-bit signed integer value into the specified byte array, - beginning at the specified index. - - The number to convert. - The byte array to copy the bytes into - The first index into the array to copy the bytes into - - - - Copies the specified single-precision floating point value into the specified byte array, - beginning at the specified index. - - The number to convert. - The byte array to copy the bytes into - The first index into the array to copy the bytes into - - - - Copies the specified 16-bit unsigned integer value into the specified byte array, - beginning at the specified index. - - The number to convert. - The byte array to copy the bytes into - The first index into the array to copy the bytes into - - - - Copies the specified 32-bit unsigned integer value into the specified byte array, - beginning at the specified index. - - The number to convert. - The byte array to copy the bytes into - The first index into the array to copy the bytes into - - - - Copies the specified 64-bit unsigned integer value into the specified byte array, - beginning at the specified index. - - The number to convert. - The byte array to copy the bytes into - The first index into the array to copy the bytes into - - - - Indicates the byte order ("endianess") in which data is converted using this class. - - - - - Returns a little-endian bit converter instance. The same instance is - always returned. - - - - - Returns a big-endian bit converter instance. The same instance is - always returned. - - - - - Union used solely for the equivalent of DoubleToInt64Bits and vice versa. - - - - - Int32 version of the value. - - - - - Single version of the value. - - - - - Creates an instance representing the given integer. - - The integer value of the new instance. - - - - Creates an instance representing the given floating point number. - - The floating point value of the new instance. - - - - Returns the value of the instance as an integer. - - - - - Returns the value of the instance as a floating point number. - - - - - Indicates the byte order ("endianess") in which data is converted using this class. - - - Different computer architectures store data using different byte orders. "Big-endian" - means the most significant byte is on the left end of a word. "Little-endian" means the - most significant byte is on the right end of a word. - - true if this converter is little-endian, false otherwise. - - - - Copies the specified number of bytes from value to buffer, starting at index. - - The value to copy - The number of bytes to copy - The buffer to copy the bytes into - The index to start at - - - - Returns a value built from the specified number of bytes from the given buffer, - starting at index. - - The data in byte array format - The first index to use - The number of bytes to use - The value built from the given bytes - - - - Indicates the byte order ("endianess") in which data is converted using this class. - - - - - A class to allow the conversion of doubles to string representations of - their exact decimal values. The implementation aims for readability over - efficiency. - - - - - Converts the given double to a string representation of its - exact decimal value. - - The double to convert. - A string representation of the double's exact decimal value. - - - - Private class used for manipulating sequences of decimal digits. - - - - Digits in the decimal expansion, one byte per digit - - - - How many digits are *after* the decimal point - - - - - Constructs an arbitrary decimal expansion from the given long. - The long must not be negative. - - - - - Multiplies the current expansion by the given amount, which should - only be 2 or 5. - - - - - Shifts the decimal point; a negative value makes - the decimal expansion bigger (as fewer digits come after the - decimal place) and a positive value makes the decimal - expansion smaller. - - - - - Removes leading/trailing zeroes from the expansion. - - - - - Converts the value to a proper decimal string representation. - - - - - Endianness of a converter - - - - - Little endian - least significant byte first - - - - - Big endian - most significant byte first - - - - - Implementation of EndianBitConverter which converts to/from little-endian - byte arrays. - - - - - Indicates the byte order ("endianess") in which data is converted using this class. - - - Different computer architectures store data using different byte orders. "Big-endian" - means the most significant byte is on the left end of a word. "Little-endian" means the - most significant byte is on the right end of a word. - - true if this converter is little-endian, false otherwise. - - - - Copies the specified number of bytes from value to buffer, starting at index. - - The value to copy - The number of bytes to copy - The buffer to copy the bytes into - The index to start at - - - - Returns a value built from the specified number of bytes from the given buffer, - starting at index. - - The data in byte array format - The first index to use - The number of bytes to use - The value built from the given bytes - - - - Indicates the byte order ("endianess") in which data is converted using this class. - - - - - Exception thrown when adb refuses a command. - - - - - Represents an exception with communicating with ADB - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The message. - - - - Initializes a new instance of the class. - - The serialization info. - The context. - - - - Initializes a new instance of the class. - - The message. - The inner exception. - - - - Thrown when an executed command identifies that it is being aborted. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The message. - - - - Initializes a new instance of the class. - - The serialization info. - The context. - - - - Initializes a new instance of the class. - - The message. - The inner exception. - - - - Thrown when a command has an unknown option passed - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The message. - - - - Initializes a new instance of the class. - - The serialization info. - The context. - - - - Initializes a new instance of the class. - - The message. - The inner exception. - - - true - true - true - true - true - true - true - true - true - - - - Reverses the bytes. - - The value. - - - - - Reverses the bytes. - - The value. - - - - - Reverses the bytes. - - The value. - - - - - Ints the reverse for raw image. - - The source. - The action. - - - - Bits the shift right. - - The value. - The bits. - - - - - Bits the shift right. - - The value. - The bits. - - - - - Bits the shift right. - - The value. - The bits. - - - - - Converts the value to enum - - - The value. - - - - - Converts the value to enum - - - The value. - - - - - Converts the value to enum - - - The value. - - - - - Converts the value to enum - - - The value. - - - - - Converts the value to enum - - - The value. - - - - - Converts the value to enum - - - The value. - - - - - Converts the value to enum - - - The value. - - - - - Converts the value to enum - - - The value. - - - - - Reverses the byte array. - - The in array. - - - - - Gets the custom attributes. - - - The type. - - - - - Gets the custom attributes. - - - The module. - - - - - Gets the custom attributes. - - - The mi. - - - - - Gets the custom attributes. - - - The mi. - - - - - Gets the custom attributes. - - - The pi. - - - - - Gets the custom attributes. - - - The pi. - - - - - Gets the custom attributes. - - - The fi. - - - - - Gets the custom attribute. - - - The type. - - - - - Gets the custom attribute. - - - The type. - - - - - Gets the custom attribute. - - - The type. - - - - - Gets the custom attribute. - - - The type. - - - - - Gets the custom attribute. - - - The type. - - - - - Gets the custom attribute. - - - The type. - - - - - Gets the custom attribute. - - - The type. - - - - - Determines whether the specified type is nullable. - - The type. - - true if the specified type is nullable; otherwise, false. - - - - - Gets member info that have the specified attribute - - - The members. - - - - - Gets field info that have the specified attribute - - - The fields. - - - - - Gets module info that have the specified attribute - - - The modules. - - - - - Gets method info that have the specified attribute - - - The methods. - - - - - Gets parameter info that have the specified attribute - - - The parameters. - - - - - Gets property info that have the specified attribute - - - The properties. - - - - - Gets types that have the specified attribute - - - The types. - - - - - Gets the methods that have the specified return type. - - - The type. - - - - - Gets the methods that have the specified return type. - - - The type. - The binding flags. - - - - - Swaps an unsigned value around, and puts the result in an array that can be sent to a device. - - The value to swap. - the destination array - offset the offset in the array where to put the swapped value. - Array length must be at least offset + 4 - - - - Reads a signed 32 bit integer from an array coming from a device. - - the array containing the int - the offset in the array at which the int starts - the integer read from the array - - - - Reads an unsigned 16 bit integer from an array coming from a device, - and returns it as an 'int' - - the array containing the 16 bit int (2 byte). - the offset in the array at which the int starts - Array length must be at least offset + 2 - the integer read from the array. - - - - Reads a signed 64 bit integer from an array coming from a device. - - the array containing the int - the offset in the array at which the int starts - Array length must be at least offset + 8 - the integer read from the array - - - - Gets EPOCH time - - - - - Gets epoch time. - - The dt. - - - - - Currents the time millis. - - The date time. - - - - - Converts a DateTime to Unix Epoch - - The date. - - - - - Creates a DateTime from the seconds since Epoch - - The seconds. - - - - - Creates a DateTime from a string - - The date string. - - - - - Creates a DateTime from a string - - The date string. - The format. - - - - - Creates a DateTime from a string - - The date string. - The format. - The styles. - - - - - Creates a DateTime from a binary value - - The date data. - - - - - Creates a DateTime from a file time - - The file time. - - - - - Creates a DateTime from a file time UTC - - The file time. - - - - - Creates a DateTime from an OA Date - - The date. - - - - - Determines whether the specified path is directory. - - The path. - - true if the specified path is directory; otherwise, false. - - - - - Determines whether the specified fsi is directory. - - The fsi. - - true if the specified fsi is directory; otherwise, false. - - - - - Determines whether the specified path is file. - - The path. - - true if the specified path is file; otherwise, false. - - - - - Determines whether the specified fsi is file. - - The fsi. - - true if the specified fsi is file; otherwise, false. - - - - - Gets the file system info. - - The path. - - - - - Combines the specified paths. - - This wraps the normal System.IO.Path.Combine to allow for an unlimited list of paths to combine - The paths. - - - - - Formats the string with the specified arguments - - The string. - The arguments. - The newly formatted string. - - - - Gets the bytes from a string. - - The string. - - - - - Gets the bytes from a string. - - The string. - The encoding. - - - - - Gets the bytes from a string. - - The string. - The encoding. - - - - - Converts a byte to the Hex value - - The b. - - - - - Converts a byte to the Hex value - - The byte array. - - - - - Gets the string from a byte array. - - The bytes. - - - - - Gets the string from a byte array. - - The bytes. - The encoding. - - - - - Gets the string from a byte array. - - The bytes. - The encoding. - - - - - Gets the string from a byte array. - - The bytes. - The index. - The count. - - - - - Gets the string from a byte array. - - The bytes. - The index. - The count. - The encoding. - - - - - Gets the string from a byte array. - - The bytes. - The index. - The count. - The encoding. - - - - - Determines whether [is null or white space] [the specified source]. - - The source. - - true if [is null or white space] [the specified source]; otherwise, false. - - - - - Matches the specified source. - - The source. - The pattern. - - - - - Matches the specified source. - - The source. - The pattern. - The options. - - - - - Determines whether the specified source is match. - - The source. - The pattern. - - true if the specified source is match; otherwise, false. - - - - - Determines whether the specified source is match. - - The source. - The pattern. - The options. - - true if the specified source is match; otherwise, false. - - - - - Big-Endian Binary Reader - - true - - - - Reads a 2-byte signed integer from the current stream and advances the - current position of the stream by two bytes. - - - - - - Reads a 4-byte signed integer from the current stream and advances the - current position of the stream by four bytes. - - - - - - Reads an 8-byte signed integer from the current stream and advances - the current position of the stream by four bytes. - - - - - - Reads a 4-byte floating point value from the current stream and - advances the current position of the stream by four bytes. - - - - - - Reads an 8-byte floating point value from the current stream and - advances the current position of the stream by eight bytes. - - - - - - Big-Endian Binary Writer - - true - - - - Writes a two-byte signed integer to the current stream and advances the stream - position by two bytes. - - - - - - Writes a four-byte signed integer to the current stream and advances the stream - position by four bytes. - - - - - - Writes an eight-byte signed integer to the current stream and advances the stream - position by eight bytes. - - - - - - Writes a four-byte floating-point value to the current stream and advances the - stream position by four bytes. - - - - - - Writes an eight-byte floating-point value to the current stream and advances - the stream position by eight bytes. - - - - - - Summary description for ByteBuffer. - - true - - - Constructor - - - - Return length as int, o/w, we can use Length (long) directly - - - - - - Skip bytes - - How many bytes to skip - Actual bytes skipped - - - - Skip one byte - - Actual bytes skipped - - - - ByteBuffer - - - - - - - Byte - - - - - - - Bytes - - - - - - - Short - - - - - - - Int - - - - - - - Long - - - - - - - Float - - - - - - - Double - - - - - - - String - - - - - - - Boolean - - - - - - Public Class Methods - - - - - - true - - - - The big endian - - - - - The little endian - - - - - Returns a that represents the current . - - - A that represents the current . - - - - - Gets the name. - - - The name. - - - - - Sent when a new LogEntry has been parsed by the LogReceiver. - - entry the new log entry. - - - - Sent when new raw data is coming from the log service. - - the raw data buffer. - the offset into the buffer signaling the beginning of the new data. - the length of the new data. - - - - Data representing an image taken from a device frame buffer. - - - - - Initializes a new instance of the class. - - - - Reads the header of a RawImage from a {@link ByteBuffer}. -

The way the data is sent over adb is defined in system/core/adb/framebuffer_service.c - @param version the version of the protocol. - @param buf the buffer to read from. - @return true if success - - - Returns the size of the header for a specific version of the framebuffer adb protocol. - @param version the version of the protocol - @return the number of int that makes up the header. - - - Returns a rotated version of the image - The image is rotated counter-clockwise. - - -

- Returns a that represents this instance. - - - A that represents this instance. - -
- - - Converts this raw image to an Image - - The format. - - - - - Converts this raw image to an Image - - - - - - Gets or sets the version. - - - The version. - - - - - Gets or sets the BPP. - - - The BPP. - - - - - Gets or sets the size. - - - The size. - - - - - Gets or sets the width. - - - The width. - - - - - Gets or sets the height. - - - The height. - - - - - Gets or sets the red. - - - The red. - - - - - Gets or sets the blue. - - - The blue. - - - - - Gets or sets the green. - - - The green. - - - - - Gets or sets the alpha. - - - The alpha. - - - - - Gets or sets the data. - - - The data. - - - - - - - - - - Processes the new lines. - - The lines. - - - - Gets or sets the battery info. - - - The battery info. - - - - - Initializes a new instance of the class. - - - - - Processes the new lines. - - The lines. - - - - Gets or sets the error message. - - - The error message. - - - - - - - - - - Processes the new lines. - - The lines. - - - - Gets the result. - - - The result. - - - - - - - - - - Processes the new lines. - - The lines. - - - - Gets the instance. - - - The instance. - - - - Default value for thread update flag upon client connection. - - - Default value for heap update flag upon client connection. - - - Default value for the selected client debug port - - - Default value for the debug port base - - - Default timeout values for adb connection (milliseconds) - - - Default value for the logcat {@link LogLevel} - - - - Centralized point to provide a IDebugPortProvider to ddmlib. - - - - - Gets or sets the IDebugPortProvider that will be used when a new Client requests - - - - - Returns an instance of the debug port manager - - - - - A Device monitor. This connects to the Android Debug Bridge and get device and - debuggable process information from it. - - - - - - - - - - - - - - - - - - - - Initializes a new instance of the class. - - The bridge. - - - - Adds the client to drop and reopen. - - The client. - The port. - - - - Starts the monitoring - - - - - Stops the monitoring - - - - - Monitors the devices. This connects to the Debug Bridge - - - - - Waits before continuing. - - - - - Sends the device list monitoring request. - - - - - - Processes the incoming device data. - - The length. - - - - Removes the device. - - The device. - - - - Sends the device monitoring request. - - The socket. - The device. - - - - - Opens the client. - - The device. - The pid. - The port. - The monitor thread. - - - - Creates the client. - - The device. - The pid. - The socket. - The debugger port. - The monitor thread. - - - - Gets the next debugger port. - - - - - - Adds the port to available list. - - The port. - - - - Reads the length of the next message from a socket. - - The Socket to read from. - - the length, or 0 (zero) if no data is available from the socket. - - - - Reads the specified socket. - - The socket. - The data. - - - - - Attempts to connect to the debug bridge server. - - a connect socket if success, null otherwise - - - - Gets the devices. - - - - - Gets the debugger ports. - - - - - Gets the clients to reopen. - - - - - Gets the server. - - - - - Gets a value indicating whether this instance is monitoring. - - - true if this instance is monitoring; otherwise, false. - - - - - Gets a value indicating whether this instance is running. - - - true if this instance is running; otherwise, false. - - - - - Gets the connection attempt count. - - - - - Gets the restart attempt count. - - - - - Gets a value indicating whether this instance has initial device list. - - - true if this instance has initial device list; otherwise, false. - - - - - Gets or sets the main adb connection. - - - The main adb connection. - - - - - - - - - - - - - - - - - - - - Initializes a new instance of the class. - - The device. - - - - Processes the new lines. - - The lines. - - - - Finishes the receiver - - - - - Gets or sets the device. - - The device. - - - - Unable to connect to the device because it was not found in the list of available devices. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The device. - - - - An exception while installing a package on the device - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The message. - - - - Initializes a new instance of the class. - - The message. - The inner. - - - - Initializes a new instance of the class. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - - The parameter is null. - - - - The class name is null or is zero (0). - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The message. - - - - Initializes a new instance of the class. - - The serialization info. - The context. - - - - Initializes a new instance of the class. - - The message. - The inner exception. - - - - - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The MSG. - - - - - - - - - - - - - - - - - - - - - - - - Prevents a default instance of the class from being created. - - - - Client is ready. The monitor thread calls this method on all - handlers when the client is determined to be DDM-aware (usually - after receiving a HELO response.) - - The handler can use this opportunity to initialize client-side - activity. Because there's a fair chance we'll want to send a - message to the client, this method can throw an IOException. - - - Client has gone away. Can be used to clean up any resources - associated with this client connection. - - - Handle an incoming chunk. The data, of chunk type "type", begins - at the start of "data" and continues to data.limit(). - - If "isReply" is set, then "msgId" will be the ID of the request - we sent to the client. Otherwise, it's the ID generated by the - client for this event. Note that it's possible to receive chunks - in reply packets for which we are not registered. - - The handler may not modify the contents of "data". - - - Handle chunks not recognized by handlers. The handleChunk() method - in sub-classes should call this if the chunk type isn't recognized. - - - Utility function to copy a String out of a ByteBuffer. - - This is here because multiple chunk handlers can make use of it, - and there's nowhere better to put it. - - - Utility function to copy a String into a ByteBuffer. - - - Convert a 4-character string to a 32-bit type. - - - Convert an integer type to a 4-character string. - - - Allocate a ByteBuffer with enough space to hold the JDWP packet - header and one chunk header in addition to the demands of the - chunk being created. - - "maxChunkLen" indicates the size of the chunk contents only. - - - Return the slice of the JDWP packet buffer that holds just the - chunk data. - - - Write the chunk header at the start of the chunk. - - Pass in the byte buffer returned by JdwpPacket.getPayload(). - - - Check that the client is opened with the proper debugger port for the - specified application name, and if not, reopen it. - @param client - @param uiThread - @param appName - @return - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Initializes a new instance of the class. - - The client. - The change mask. - - - - Gets the change mask. - - The change mask. - - - - Gets the client. - - The client. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Gets the property value. - - The name of the property. - - the value or null if the property does not exist. - - - - - Gets the first property that exists in the array of property names. - - The array of property names. - - the value or null if the property does not exist. - - - - - Executes a shell command on the device, and sends the result to a receiver. - - The command to execute - The receiver object getting the result from the command. - - - - - Executes a shell command on the device, and sends the result to a receiver. - - The command to execute - The receiver object getting the result from the command. - The command args. - - - - Executes a shell command on the device, and sends the result to a receiver. - - The command to execute - The receiver object getting the result from the command. - The max time to output response. - The command args. - - - - Executes a shell command on the device as root, and sends the result to a receiver. - - The command to execute - The receiver object getting the result from the command. - The command args. - - - - Executes a shell command on the device as root, and sends the result to a receiver. - - The command to execute - The receiver object getting the result from the command. - The max time to output response. - The command args. - - - - Executes a shell command on the device as root, and sends the result to a receiver. - - The command to execute - The receiver object getting the result from the command. - - - - Executes a shell command on the device as root, and sends the result to a receiver. - - The command to execute - The receiver object getting the result from the command. - The max time to output response. - - - - Creates a port forwarding between a local and a remote port. - - the local port to forward - the remote port. - true if success. - - - - Removes a port forwarding between a local and a remote port. - - the local port to forward - true if success. - - - - Installs an Android application on device. - This is a helper method that combines the syncPackageToDevice, installRemotePackage, - and removePackage steps - - the absolute file system path to file on local host to install - set to trueif re-install of app should be performed - - - - Pushes a file to device - - the absolute path to file on local host - destination path on device for file - if fatal error occurred when pushing file - - - - Installs the application package that was pushed to a temporary location on the device. - - absolute file path to package file on device - set to true if re-install of app should be performed - - - - Remove a file from device - - path on device of file to remove - if file removal failed - - - - Uninstall an package from the device. - - Name of the package. - - - - - - Refreshes the environment variables. - - - - - Refreshes the mount points. - - - - - Refreshes the properties. - - - - - Occurs when device state changed. - - - - - Occurs when build info changed. - - - - - Occurs when client list changed. - - - - - Gets the file system. - - - The file system. - - - - - Gets the busy box. - - - The busy box. - - - - - Gets the serial number of the device. - - The serial number. - - - - Gets the TCP endpoint defined when the transport is TCP. - - - The endpoint. - - - - - Gets the type of the transport used to connect to this device. - - - The type of the transport. - - - - - Returns the name of the AVD the emulator is running. -

- This is only valid if {@link #isEmulator()} returns true. -

- If the emulator is not running any AVD (for instance it's running from an Android source - tree build), this method will return "<build>" - @return the name of the AVD or null - if there isn't any. -

- The name of the avd. -
- - - Gets the environment variables. - - The environment variables. - - - - Gets the mount points. - - The mount points. - - - - Gets the state. - - The state. - Returns the state of the device. - - - - Returns the device properties. It contains the whole output of 'getprop' - - The properties. - - - - Gets a value indicating whether the device is online. - - true if the device is online; otherwise, false. - - - - Gets a value indicating whether this device is emulator. - - - true if this device is emulator; otherwise, false. - - - - - Gets a value indicating whether this device is offline. - - - true if this device is offline; otherwise, false. - - - - - Gets a value indicating whether this device is in boot loader mode. - - - true if this device is in boot loader mode; otherwise, false. - - - - - Gets the list of clients - - - - - Returns a object to push / pull files to and from the device. - - - null if the SyncService couldn't be created. This can happen if adb - refuse to open the connection because the {@link IDevice} is invalid (or got disconnected). - - Throws IOException if the connection with adb failed. - - - - Returns a for this device. - - - - - Takes a screen shot of the device and returns it as a - - The screenshot. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Serial number of the first connected emulator. - - - - @deprecated Use {@link #PROP_BUILD_API_LEVEL}. - - - - Emulator Serial Number regexp. - - - - - Device list info regex - - 21136 - - - - Tag - - - - - - - - - - Initializes a new instance of the class. - - The serial. - The state. - The model. - The product. - The device. - - - - Retrieves the device info. - - - - - Get the device state from the string value - - The device state string - - - - - Create a device from Adb Device list data - - the line data for the device - - - - - Determines whether this device can perform a backup. - - - true if this device can perform a backup; otherwise, false. - - - - - Backups this device. - - - - - Determines whether this instance can use the SU shell. - - - true if this instance can use the SU shell; otherwise, false. - - - - - Gets the property value. - - The name of the property. - - the value or null if the property does not exist. - - - - - Gets the first property that exists in the array of property names. - - The array of property names. - - - - - Remounts the mount point. - - The mount point. - if set to true the mount poine will be set to read-only. - - - - Remounts the mount point. - - the mount point - if set to true the mount poine will be set to read-only. - Throws if the mount point does not exist. - - - - Refreshes the mount points. - - - - - Refreshes the environment variables. - - - - - Refreshes the properties. - - - - - Reboots the device in to the specified state - - The reboot state - - - - Reboots the device in to the specified state - - - - - Gets the battery level. - - - - - - Gets the battery level. - - The freshness. - - - - - Executes a shell command on the device, and sends the result to a receiver. - - The command to execute - The receiver object getting the result from the command. - - - - Executes a shell command on the device, and sends the result to a receiver. - - The command. - The receiver. - The timeout. - - - - Executes a shell command on the device, and sends the result to a receiver. - - The command. - The receiver. - The command args. - - - - Executes a shell command on the device, and sends the result to a receiver. - - The command. - The receiver. - The timeout. - The command args. - - - - Executes a shell command on the device as root, and sends the result to a receiver. - - The command. - The receiver. - - - - Executes a shell command on the device as root, and sends the result to a receiver. - - The command to execute - The receiver object getting the result from the command. - - - - Executes a root shell command on the device, and sends the result to a receiver. - - The command. - The receiver. - The command args. - - - - Executes a root shell command on the device, and sends the result to a receiver. - - The command. - The receiver. - The timeout. - The command args. - - - - Runs the event log service. - - The receiver. - - - - Runs the log service. - - The logname. - The receiver. - - - - Creates a port forwarding between a local and a remote port. - - the local port to forward - the remote port. - true if success. - - - - Removes a port forwarding between a local and a remote port. - - the local port to forward - the remote port. - true if success. - - - - Installs an Android application on device. - This is a helper method that combines the syncPackageToDevice, installRemotePackage, - and removePackage steps - - the absolute file system path to file on local host to install - set to trueif re-install of app should be performed - - - - Pushes a file to device - - the absolute path to file on local host - destination path on device for file - if fatal error occurred when pushing file - - - - Installs the application package that was pushed to a temporary location on the device. - - absolute file path to package file on device - set to true if re-install of app should be performed - - - - Remove a file from device - - path on device of file to remove - if file removal failed - - - - Uninstall an package from the device. - - Name of the package. - - - - - - - Raises the event. - - The instance containing the event data. - - - - Raises the event. - - The instance containing the event data. - - - - Raises the event. - - The instance containing the event data. - - - - Occurs when [state changed]. - - - - - Occurs when [build info changed]. - - - - - Occurs when [client list changed]. - - - - - Gets or sets the client monitoring socket. - - - The client monitoring socket. - - - - - Gets the device serial number - - - - - Gets the TCP endpoint defined when the transport is TCP. - - - The endpoint. - - - - - Gets or sets the Avd name. - - - - - Gets the product. - - - The product. - - - - - Gets the model. - - - The model. - - - - - Gets the device. - - - The device identifier. - - - - - Gets the device state - - - - - Gets the device mount points. - - - - - Returns the device properties. It contains the whole output of 'getprop' - - The properties. - - - - Gets the environment variables. - - The environment variables. - - - - Gets the file system for this device. - - - - - Gets the busy box object for this device. - - - - - Gets a value indicating whether the device is online. - - true if the device is online; otherwise, false. - - - - Gets a value indicating whether this device is emulator. - - true if this device is emulator; otherwise, false. - - - - Gets a value indicating whether this device is offline. - - true if this device is offline; otherwise, false. - - - - Gets a value indicating whether this device is in boot loader mode. - - - true if this device is in boot loader mode; otherwise, false. - - - - - Gets a value indicating whether this instance is recovery. - - - true if this instance is recovery; otherwise, false. - - - - - Gets a value indicating whether this instance has clients. - - - true if this instance has clients; otherwise, false. - - - - - Gets the list of clients - - - - - Returns a object to push / pull files to and from the device. - - - - null if the SyncService couldn't be created. This can happen if adb - refuse to open the connection because the {@link IDevice} is invalid (or got disconnected). - - Throws IOException if the connection with adb failed. - - - - Returns a for this device. - - - - - Returns a for this device. - - - - - - Takes a screen shot of the device and returns it as a - - The screenshot. - - - - Initializes a new instance of the class. - - The device. - - - - Gets the device. - - The device. - - - Result code for transfer success. - - - Result code for canceled transfer - - - Result code for unknown error - - - Result code for network connection error - - - Result code for unknown remote object during a pull - - - Result code when attempting to pull multiple files into a file - - - Result code when attempting to pull multiple into a directory that does not exist. - - - Result code for wrong encoding on the remote path. - - - Result code for remote path that is too long. - - - Result code for error while writing local file. - - - Result code for error while reading local file. - - - Result code for attempting to push a file that does not exist. - - - Result code for attempting to push a directory. - - - Result code for when the target path of a multi file push is a file. - - - Result code for receiving too much data from the remove device at once - - - - Represents a file entry on a device - - - - - Finds the file entry, or creates an empty FileEntry if it does not exist. - - The device. - The path. - This does not create the FileEntry on disk. It only creates the FileEntry object. - - - - - Gets a file entry from the specified path on the device. - - The device to check - the path to check - If the device is not connected. - If the device or path is null. - If the entrty is not found. - - - - - Creates a new file entry. - - The device. - parent entry or null if entry is root - name of the entry. - entry type. - if set to true [is root]. - - - - Initializes a new instance of the class. - - The device. - The path. - - - - Creates the file entry, if it does not exist. - - - - - - Deletes the file entry from the file system. - - - - - - Adds a child file entry - - The child file entry - - - - Returns the child FileEntry matching the name. - This uses the cached children list. - - the name of the child to return. - the FileEntry matching the name or null. - - - - Sets the internal app package status flag. This checks whether the entry is in an app - directory like /data/app or /system/app or /sd/app or /sd-ext/app. The last two are common for - apps2sd on rooted phones - - - - - Recursively fills the segment list with the full path. - - The list of segments to fill. - - - - Recursively fills the pathBuilder with the full path - - a StringBuilder used to create the path. - Whether the path need to be escaped for consumption by a shell command line. - if set to true [resolve links]. - - - - Fills the path builder. - - The path builder. - if set to true [escape path]. - - - - - - - - - - Gets the device associated with this file entry. - - - - - Gets the parent. - - - - - Gets the name. - - - - - Gets or sets the name of the link. - - - The name of the link. - - - - - Gets or sets the info. - - - The info. - - - - - Gets or sets the permissions. - - - The permissions. - - - - - Gets or sets the size. - - - The size. - - - - - Gets or sets the date. - - - The date. - - - - - Gets or sets the owner. - - - The owner. - - - - - Gets or sets the group. - - - The group. - - - - - Gets the type. - - - - - Gets a value indicating whether this instance is application package. - - - true if this instance is application package; otherwise, false. - - - - - Gets a value indicating whether this instance is root. - - - true if this instance is root; otherwise, false. - - - - - Gets a value indicating whether this instance is executable. - - - true if this instance is executable; otherwise, false. - - - - - Gets or sets the children. - - Note that this is not populated by default. Use the FileListingService.GetChildren to populate it. - - The children. - - - - - Gets a value indicating whether this instance is link. - - - true if this instance is link; otherwise, false. - - - - - Gets a value indicating whether this is exists. - - - true if exists; otherwise, false. - - - - - Indicates whether the entry content has been fetched yet, or not. - - - - - Gets a value indicating whether this instance is directory. - - - true if this instance is directory; otherwise, false. - - - - - Gets a value indicating whether this instance is application file name. - - - true if this instance is application file name; otherwise, false. - - - - - Gets the full path of the entry. - - - - - Gets the full resolved path. - - - - - Gets the fully escaped path of the entry. This path is safe to use in a shell command line. - - - - - Gets the path as a list of segments. - - - - - - - - - - Compares the specified x. - - The x. - The y. - - - - - Provides Device side file listing service. - - - - - - - - - - - - - - - This is the pattern that supports busybox ls and toolbox ls. - Groups -
    -
  1. Permissions
  2. -
  3. Group
  4. -
  5. Owner
  6. -
  7. Size, if empty or whitespace use 0
  8. -
  9. Month Name (or year in toolbox ls)
  10. -
  11. Date (or month number in toolbox ls)
  12. -
  13. Year, if empty, use current year (or date number in toolbox ls)
  14. -
  15. Time, if empty, use 00:00
  16. -
  17. Name
  18. -
  19. File types (or empty in toolbox ls)
  20. -
- -
- - added non-capture "(?:\d{1,},\s+)?" for "blocks" - -
- - - Top level data folder. - - - - - Top level sdcard folder. - - - - - Top level mount folder. - - - - - Top level system folder. - - - - - Top level temp folder. - - - - - Application folder. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Initializes a new instance of the class. - - The device. - if set to true [force busy box]. - - - - Initializes a new instance of the class. - - The device. - - - - Gets the children. - - The entry. - if set to true [use cache]. - The receiver. - - - - - Does the LS. - - The entry. - - - - Finds an entry from the path. - - The file path of - The FileEntry - Throws if unable to locate the file or directory - - - - Finds the file entry. - - The parent. - The path. - - - - - Gets or sets the device. - - The device. - - - - Gets or sets the root. - - The root. - - - - Gets or sets a value indicating whether [force busy box]. - - true if [force busy box]; otherwise, false. - - - - Gets or sets the threads. - - The threads. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The linux permissions. - - - - Converts the permissions to bit value that can be casted to an integer and used for calling chmod - - - - - - Gets or sets a value indicating whether this instance can execute. - - - true if this instance can execute; otherwise, false. - - - - - Gets or sets a value indicating whether this instance can write. - - true if this instance can write; otherwise, false. - - - - Gets or sets a value indicating whether this instance can read. - - true if this instance can read; otherwise, false. - - - - Gets or sets a value indicating whether this instance can delete. - - - true if this instance can delete; otherwise, false. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Initializes a new instance of the class. - - The device. - - - - Creates the specified path. - - The path. - - - - - Creates the specified file entry. - - The file entry. - - - - - Gets if the specified path exists on the device. - - the path to check - true, if the path exists; otherwise, false - If the device is not connected. - If the device or path is null. - - - - Makes the directory from the specified path. - - The path. - - - - Makes the directory. - - The path. - if set to true forces the use of the "non-busybox" method. - - - - this is a fallback if the mkdir -p fails for somereason - - - - - - - Copies the specified source to the specified destination. - - The source. - The destination. - - - - Moves the specified source to the specified destination. - - The source. - The destination. - - - - Chmods the specified path. - - The path. - The permissions. - - - - Chmods the specified path. - - The path. - The permissions. - - - - Gets if the specified mount point is read-only - - - true, if read-only; otherwise, false - If mount point doesnt exist - - - - Deletes the specified path. - - The path. - - If device is null - or - If path is null or empty. - - - If the command fails. - - - - Deletes the specified path. - - The file entry. - If the command fails. - - - - Mounts the specified device. - - The mp. - The options. - - - - Attempts to mount the mount point to the associated device without knowing the device or the type. - Some devices may not support this method. - - - - - - Mounts the specified mount point. - - The mountPoint. - - - - Mounts the specified devices to the specified directory. - - The directory. - The device. - Type of the file sytem. - if set to true is read only. - The options. - - - - Mounts the specified devices to the specified directory. - - The directory. - The device. - Type of the file sytem. - if set to true is read only. - - - - Unmounts the specified mount point. - - The mountPoint. - - - - Unmounts the specified mount point. - - The mountPoint. - The options. - - - - Unmounts the specified mount point. - - The mount point. - - - - Unmounts the specified mount point. - - The mount point. - The options. - - - - Resolves the link to the true path. - - The path. - - Uses "ls -l" to resolve links - - - - Gets or sets the device. - - - The device. - - - - - Gets the dev blocks for the device. - - Throws if unable to locate /dev/block - - - - - - - - - The getprop command - - - - - Initializes a new instance of the class. - - The device. - - - - Processes the new lines. - - The lines. - - - - Finishes the receiver - - - - - Gets or sets the device. - - The device. - - - - Returns a non-random debugger port for the specified application running on the specified Device. - - The device the application is running on. - The application name, as defined in the AndroidManifest.xml - package attribute of the manifest node. - The non-random debugger port or NO_STATIC_PORT if the Client - should use the automatic debugger port provider. - - - - Classes which implement this interface provide a method that deals with asynchronous - result from ls command on the device. - - - - - Sets the children. - - The entry. - The children. - - - - Refreshes the entry. - - The entry. - - - - - - - - - Writes the specified log level. - - The log level. - The tag. - The message. - - - - Writes the and prompt log. - - The log level. - The tag. - The message. - - - - - - - - - - - - - - - - - - - Processes the new lines. - - The lines. - - - - Gets the error message if the install was unsuccessful. - - The error message. - - - - Gets a value indicating whether the install was a success. - - - true if success; otherwise, false. - - - - - Just like System.IO.Path, except it is geared for Linux - - - - - Pattern to escape filenames for shell command consumption. - - - - - The max length of a directory path - - - - - the max length of a file path - - - - - The directory separator character - - - - - The directory separator alternate character - - - - - Invalid characters for a file name - - - - - the max length of a file path - - - - - The character used to separate multiple paths - - - - - Invalid characters for a file/directory path - - - - - Determines whether this instance [can path circumvent security native] the specified part of path. - - The part of path. - - true if this instance [can path circumvent security native] the specified part of path; otherwise, false. - - - - Changes the extension of a path string. - A string containing the modified path information.On Windows-based desktop platforms, if path is null or an empty string (""), the path information is returned unmodified. If extension is null, the returned string contains the specified path with its extension removed. If path has no extension, and extension is not null, the returned path string contains extension appended to the end of path. - The new extension (with a leading period). Specify null to remove an existing extension from path. - The path information to modify. The path cannot contain any of the characters defined in . - The path contains one or more of the invalid characters defined in , or contains a wildcard character. - 1 - - - - Checks if the char array starts with ordinal - - The array. - The num chars. - The compare to. - if set to true [ignore case]. - - - - - Checks if the char array starts with ordinal - - The array. - The num chars. - The compare to. - if set to true [ignore case]. - - - - - Checks the invalid path chars. - - The path. - - - Combines two path strings. - A string containing the combined paths. If one of the specified paths is a zero-length string, this method returns the other path. If path2 contains an absolute path, this method returns path2. - The second path. - The first path. - path1 or path2 is null. - path1 or path2 contain one or more of the invalid characters defined in , or contains a wildcard character. - - - - Combine the specified paths to form one path - - The path1. - The path2. - The path3. - - - - - Combine the specified paths to form one path - - The path1. - The path2. - The path3. - The path4. - - - - - Combine the specified paths to form one path - - The paths. - - - - - Combines the path with no checks. - - The path1. - The path2. - - - - Returns the directory information for the specified path string. - A containing directory information for path, or null if path denotes a root directory, is the empty string (""), or is null. Returns if path does not contain directory information. - The path of a file or directory. - The path parameter contains invalid characters, is empty, or contains only white spaces, or contains a wildcard character. - The path parameter is longer than the system-defined maximum length. - 1 - - - - Gets the path without file name. - - The path. - - - - - Fixups the path. - - The path. - - - - Returns the extension of the specified path string. - A containing the extension of the specified path (including the "."), null, or . If path is null, GetExtension returns null. If path does not have extension information, GetExtension returns Empty. - The path string from which to get the extension. - path contains one or more of the invalid characters defined in , or contains a wildcard character. - 1 - - - Returns the file name and extension of the specified path string. - A consisting of the characters after the last directory character in path. If the last character of path is a directory or volume separator character, this method returns . If path is null, this method returns null. - The path string from which to obtain the file name and extension. - path contains one or more of the invalid characters defined in , or contains a wildcard character. - 1 - - - Returns the file name of the specified path string without the extension. - A containing the string returned by , minus the last period (.) and all characters following it. - The path of the file. - path contains one or more of the invalid characters defined in , or contains a wildcard character. - 1 - - - Gets an array containing the characters that are not allowed in file names. - An array containing the characters that are not allowed in file names. - - - Gets an array containing the characters that are not allowed in path names. - An array containing the characters that are not allowed in path names. - - - Gets the root directory information of the specified path. - A string containing the root directory of path, such as "C:\", or null if path is null, or an empty string if path does not contain root directory information. - The path from which to obtain root directory information. - path contains one or more of the invalid characters defined in , or contains a wildcard character.-or- was passed to path. - 1 - - - - Gets the length of the root. - - The path. - - - - Determines whether a path includes a file name extension. - true if the characters that follow the last directory separator (\\ or /) or volume separator (:) in the path include a period (.) followed by one or more characters; otherwise, false. - The path to search for an extension. - path contains one or more of the invalid characters defined in , or contains a wildcard character. - 1 - - - - Combine the specified paths to form one path - - The path1. - The path2. - - - - Gets a value indicating whether the specified path string contains absolute or relative path information. - true if path contains an absolute path; otherwise, false. - The path to test. - path contains one or more of the invalid characters defined in , or contains a wildcard character. - 1 - - - - Returns an escaped version of the entry name. - - The path. - - - - - Quotes the specified path. - - The path. - - - - - A class that represents Rgb565 Image information - - - - - Gets the Image from the raw image data - - The format. - The data. - The width. - The height. - - - - - Converts the data to an image - - The data. - The width. - The height. - - - - - Saves the image as an Rgb565 bitmap to disk - - The image. - The file. - - - - - Saves the image as an Rgb565 bitmap to the specified stream - - The image. - The stream. - - - - - Classes which implement this interface provide methods that deal with displaying transfer progress. - - - - - Sent when the transfer starts - - the total amount of work. - - - - Sent when the transfer is finished or interrupted. - - - - - Sent when a sub task is started. - - the destination. - - - - Sent when some progress have been made. - - the amount of work done. - - - - Sent to query for possible cancellation. - - true if the transfer should be stopped; otherwise, false - - - - - - - - - - - - - - Create an ls receiver/parser. - - The list of current children. To prevent collapse during update, reusing the same - FileEntry objects for files that were already there is paramount. - the list of new children to be filled by the receiver. - the list of link path to compute post ls, to figure out if the link - pointed to a file or to a directory. - - - - Processes the new lines. - - The lines. - - - - Queries for an already existing Entry per name - - the name of the entry - the existing FileEntry or null if no entry with a matching name exists. - - - - Finishes the links. - - - - - Gets or sets the entries. - - The entries. - - - - Gets or sets the links. - - The links. - - - - Gets or sets the current children. - - The current children. - - - - Gets or sets the parent. - - The parent. - - - - Gets a value indicating whether this instance is cancelled. - - - true if this instance is cancelled; otherwise, false. - - - - - - - - - - - - - - - - - - - - Static Initializer for the class. - - - - - Cerates a new Instance of - - - - - Outputs a Verbose level message. - - The tag associated with the message. - The message to output - - - - Outputs a Verbose level message. - - The tag associated with the message. - The message to output format string. - The values for the format message - - - - Outputs a Debug level message. - - The tag associated with the message. - The message to output - - - - Outputs a Debug level message. - - The tag associated with the message. - The message to output format string. - The values for the format message - - - - Outputs a Info level message. - - The tag associated with the message. - The message to output. - - - - Outputs a Info level message. - - The tag associated with the message. - The message to output format string. - The values for the format message - - - - Outputs a Warn level message. - - The tag associated with the message. - The message to output. - - - - Outputs a Warn level message. - - The tag associated with the message. - The message to output format string. - The values for the format message - - - - Outputs a Warn level message. - - The tag associated with the message. - The exception to warn - - - - Outputs a Warn level message. - - The tag associated with the message. - The message to output. - The exception to warn - - - - Outputs a Error level message. - - The tag associated with the message. - The message to output. - - - - - Outputs a Error level message. - - The tag associated with the message. - The message to output format string. - The values for the format message - - - - - Outputs a Error level message. - - The tag associated with the message. - The exception to warn - - - - - Outputs a Error level message. - - The tag associated with the message. - The message to output. - The exception to warn - - - - - Outputs a log message and attempts to display it in a dialog. - - The log level - The tag associated with the message. - The message to output. - - - - Dump the entire contents of a byte array with DEBUG priority. - - - - - - - - Local addition. Output looks like: - 1230- 00 11 22 33 44 55 66 77 88 99 aa bb cc dd ee ff 0123456789abcdef - Uses no string concatenation; creates one String object per line. - - - - - Dump the entire contents of a byte array with DEBUG priority. - - - - - - prints to stdout; could write to a log window - - - - - - - - Prints a log message. - - - - - - - - Formats a log message. - - - - - - - - - Gets or sets the level. - - The level. - - - - Gets or sets the LogOutput - - - - - - - - - - Log Verbose - - - - - Log Debug - - - - - - - - - - Initializes the class. - - - - - Gets the by letter. - - The letter. - - - - - Gets the by letter. - - The letter. - - - - - Gets or sets the verbose log level. - - The verbose log level. - - - - Gets or sets the debug log level. - - The debug log level. - - - - Gets or sets the info log level. - - The info log level. - - - - Gets or sets the warn log level. - - The warn log level. - - - - Gets or sets the error log level. - - The error log level. - - - - Gets or sets the assert log level. - - The assert log level. - - - - Gets or sets the levels. - - The levels. - - - - Gets the values. - - The values. - - - - Gets the keys. - - The keys. - - - - - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The priority. - The value. - The letter. - - - - Gets or sets the priority. - - The priority. - - - - Gets or sets the value. - - The value. - - - - Gets or sets the letter. - - The letter. - - - - - - - - - Initializes a new instance of the class. - - - - - - - - - - Sets the debug selected port. - - The value. - - - - Gets the instance. - - The instance. - - - - Gets or sets a value indicating whether this is quit. - - true if quit; otherwise, false. - - - - Gets or sets the clients. - - The clients. - - - - - - - - - - - - - - - - - - - - - - - - Represents a mount point. - - - - - Initializes a new instance of the class. - - The block. - The name. - The fs. - if set to true [read only]. - - - - Returns a string representation of the mount point. - - - A that represents this instance. - - - - - Creates a clone of this MountPoint - - - - - - Creates a new object that is a copy of the current instance. - - - A new object that is a copy of this instance. - - - - - Gets the mount point block - - The block. - - - - Gets the mount point name - - The name. - - - - Gets the mount point file system - - The file system. - - - - Gets the mount point access - - - true if this instance is read only; otherwise, false. - - - - - A dynamic mount point receiver. - - Works on busybox and non-busybox devices - - - - The mount parsing pattern. - - - - - The mount command - - - - - Initializes a new instance of the class. - - The device. - - - - Processes the new lines. - - The lines. - Bug w/ MountPointReceiver.cs/ProcessNewLines() - - - - Finishes the receiver - - - - - Gets or sets the device. - - - The device. - - - - - - - - - - Prevents a default instance of the class from being created. - - - - - Adds the output. - - The data. - The offset. - The length. - - - - Flushes the output. - - - This should always be called at the end of the "process" in order to indicate that the data is ready to be processed further if needed. - - - - - Gets the instance. - - - The instance. - - - - - Gets a value indicating whether this instance is cancelled. - - - true if this instance is cancelled; otherwise, false. - - - - - A Sync progress monitor that does nothing - - - - - Sent when the transfer starts - - the total amount of work. - - - - Sent when the transfer is finished or interrupted. - - - - - Sent when a sub task is started. - - - the destination. - - - - Sent when some progress have been made. - - the amount of work done. - - - - Sent to query for possible cancellation. - - true if the transfer should be stopped; otherwise, false - - - - - - - - - Initializes a new instance of the class. - - The device. - - - - Refreshes the packages. - - - - - Existses the specified package. - - The package. - - - - - Gets the apk file entry. - - The package. - - - - - Gets the apk path. - - The package. - - - - - Gets or sets the packages. - - - The packages. - - - - - Gets or sets the device. - - - The device. - - - - - - - - - - Pattern to parse the output of the 'pm path <package>' command. - The output format looks like: - /data/app/myapp.apk=com.mypackage.myapp - - - - - Initializes a new instance of the class. - - - - - Processes the new lines. - - The lines. - - - - Gets or sets the path. - - - The path. - - - - - - - - - - Pattern to parse the output of the 'pm -lf' command. - The output format looks like: - /data/app/myapp.apk=com.mypackage.myapp - - - - - Creates an instance of PackageManagerReceiver - - - - - - - Processes the new lines. - - The lines. - - - - Gets or sets the device. - - - The device. - - - - - Gets or sets the package manager. - - - The package manager. - - - - - - - - - - Initializes a new instance of the class. - - The entry map. - The receiver. - - - - Processes the new lines. - - The lines. - - - - Gets or sets the map. - - The map. - - - - Gets or sets the receiver. - - The receiver. - - - - - - - - - Initializes a new SyncResult - - The error code - The error message - - - - Initializes a new SyncResult - - The error code - The exception - - - - Initializes a new SyncResult - - The error code - - - - Gets the error message - - - - - Gets the error code - - - - - Checks the result array starts with the provided code - - The result array to check - The 4 byte code. - true if the code matches. - - - - Gets the file type from the mode - - the file mode flags - - - - - Create a command with a code and an int values - - the 4 byte command (STAT, RECV, ...). - - the byte[] to send to the device through adb - - - - Create a command with a code and an int values - - the 4 byte command (STAT, RECV, ...). - - the byte[] to send to the device through adb - - - - Creates the data array for a file request. This creates an array with a 4 byte command + the remote file name. - - the 4 byte command (STAT, RECV, ...). - The path, as a byte array, of the remote file on which to execute the command - the byte[] to send to the device through adb - - - - Creates the data array for a file request. This creates an array with a 4 byte command + the remote file name. - - the 4 byte command (STAT, RECV, ...). - he path, as a byte array, of the remote file on which to execute the command - the byte[] to send to the device through adb - - - - Initializes a new instance of the class. - - The device. - - - - Initializes a new instance of the class. - - The address. - The device. - - - - Opens this connection. - - - - - Closes the connection. - - Closes this connection. - - - - - Pulls file(s) or folder(s). - - the remote item(s) to pull - The local destination. If the entries count is > 1 or if the unique entry is a - folder, this should be a folder. - The progress monitor. Cannot be null. - - a SyncResult object with a code and an optional message. - - monitor;Monitor cannot be null - - - - - Pulls a single file. - - remote the remote file - The local destination. - The progress monitor. Cannot be null. - - a SyncResult object with a code and an optional message. - - monitor;Monitor cannot be null - Throws if monitor is null - - - - - Pulls a single file. - Because this method just deals with a String for the remote file instead of FileEntry, - the size of the file being pulled is unknown and the ISyncProgressMonitor will not properly - show the progress - - the full path to the remote file - The local destination. - The progress monitor. Cannot be null. - - a SyncResult object with a code and an optional message. - - monitor;Monitor cannot be null - Throws if monitor is null - - - - - Push several files. - - An array of local files to push - the remote FileEntry representing a directory. - The progress monitor. Cannot be null. - - a SyncResult object with a code and an optional message. - - Monitor cannot be null - - - - - Push a single file. - - the local filepath. - The remote filepath. - The progress monitor. Cannot be null. - - a SyncResult object with a code and an optional message. - - monitor;Monitor cannot be null - Throws if monitor is null - - - - Push a single file - - the local file to push - the remote file (length max is 1024) - the monitor. The monitor must be started already. - - a SyncResult object with a code and an optional message. - - monitor;Monitor cannot be null - Throws if monitor is null - - - - Pulls a remote file - - the remote file (length max is 1024) - the local destination - the monitor. The monitor must be started already. - a SyncResult object with a code and an optional message. - Throws if monitor is null - - - - - - - - - - - Throws if unable to create a file or folder - Throws if the ISyncProgressMonitor is null - - - - compute the recursive file size of all the files in the list. Folder have a weight of 1. - - The remote files - The FileListingService - The total number of bytes of the specified remote files - - - - compute the recursive file size of all the files in the list. Folders have a weight of 1. - - The local files / folders - The total number of bytes - This does not check for circular links. - - - - Returns the mode of the remote file. - - the remote file - the mode if all went well; otherwise, FileMode.UNKNOWN - - - - Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. - - - - - Gets the null progress monitor. - - - The null progress monitor. - - - - - Gets the address. - - - The address. - - - - - Gets the device. - - - The device. - - - - - Gets a value indicating whether this instance is open. - - - true if this instance is open; otherwise, false. - - - - - The unknown - - - - - The socket - - - - - The symbolic link - - - - - The regular - - - - - The block - - - - - The directory - - - - - The character - - - - - The fifo - - - - diff --git a/Madb.Site/App_Start/BundleConfig.cs b/Madb.Site/App_Start/BundleConfig.cs deleted file mode 100644 index 0511f7c9..00000000 --- a/Madb.Site/App_Start/BundleConfig.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System.Web; -using System.Web.Optimization; -using Camalot.Common.Extensions; -using Camalot.Common.Mvc.Extensions; - -namespace Madb.Site { - public class BundleConfig { - // For more information on bundling, visit http://go.microsoft.com/fwlink/?LinkId=301862 - public static void RegisterBundles(BundleCollection bundles) { - bundles.LoadFromWebConfiguration(); - } - } -} diff --git a/Madb.Site/App_Start/FilterConfig.cs b/Madb.Site/App_Start/FilterConfig.cs deleted file mode 100644 index 9fe02883..00000000 --- a/Madb.Site/App_Start/FilterConfig.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System.Web; -using System.Web.Mvc; - -namespace Madb.Site { - public class FilterConfig { - public static void RegisterGlobalFilters(GlobalFilterCollection filters) { - filters.Add(new HandleErrorAttribute()); - } - } -} diff --git a/Madb.Site/App_Start/RouteConfig.cs b/Madb.Site/App_Start/RouteConfig.cs deleted file mode 100644 index eddaf932..00000000 --- a/Madb.Site/App_Start/RouteConfig.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; -using System.Web.Mvc; -using System.Web.Routing; - -namespace Madb.Site { - public class RouteConfig { - public static void RegisterRoutes(RouteCollection routes) { - routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); - - routes.MapRoute( - name: "Default", - url: "{controller}/{action}/{id}", - defaults: new { controller = "Documentation", action = "Index", id = "Managed.Adb" } - ); - } - } -} diff --git a/Madb.Site/App_Start/Startup.Auth.cs b/Madb.Site/App_Start/Startup.Auth.cs deleted file mode 100644 index 91e8ea4a..00000000 --- a/Madb.Site/App_Start/Startup.Auth.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System; -using Owin; - -namespace Madb.Site -{ - public partial class Startup - { - // For more information on configuring authentication, please visit http://go.microsoft.com/fwlink/?LinkId=301864 - public void ConfigureAuth(IAppBuilder app) - { - - // Uncomment the following lines to enable logging in with third party login providers - //app.UseMicrosoftAccountAuthentication( - // clientId: "", - // clientSecret: ""); - - //app.UseTwitterAuthentication( - // consumerKey: "", - // consumerSecret: ""); - - //app.UseFacebookAuthentication( - // appId: "", - // appSecret: ""); - - //app.UseGoogleAuthentication(new GoogleOAuth2AuthenticationOptions() - //{ - // ClientId = "", - // ClientSecret = "" - //}); - } - } -} \ No newline at end of file diff --git a/Madb.Site/Controllers/AssetsController.cs b/Madb.Site/Controllers/AssetsController.cs deleted file mode 100644 index 8ffdc006..00000000 --- a/Madb.Site/Controllers/AssetsController.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; -using System.Web.Mvc; - -namespace Madb.Site.Controllers { - public class AssetsController : Controller { - // GET: Assets - public PartialViewResult Gist(string id) { - return PartialView(model: id); - } - } -} \ No newline at end of file diff --git a/Madb.Site/Controllers/DocumentationController.cs b/Madb.Site/Controllers/DocumentationController.cs deleted file mode 100644 index c1a68e06..00000000 --- a/Madb.Site/Controllers/DocumentationController.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; -using System.Web.Mvc; -using Madb.Site.Services; - -namespace Madb.Site.Controllers { - public class DocumentationController : Controller { - // GET: Documentation - public ActionResult Index(String id) { - var builder = new DocumentationService(); - var model = builder.Build(id); - return View(model); - } - - public PartialViewResult Navigation(string id) { - var builder = new DocumentationService(); - var model = builder.Build(id); - return this.PartialView(model); - } - } -} \ No newline at end of file diff --git a/Madb.Site/Extensions/HtmlHelper.cs b/Madb.Site/Extensions/HtmlHelper.cs deleted file mode 100644 index 0e4e31d9..00000000 --- a/Madb.Site/Extensions/HtmlHelper.cs +++ /dev/null @@ -1,42 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Configuration; -using System.Linq; -using System.Web; -using System.Web.Mvc.Html; -using System.Web.Mvc; -using Camalot.Common.Extensions; -using Madb.Site.Models; - -namespace Madb.Site.Extensions { - public static partial class MadbSiteExtensions { - public static IHtmlString SiteName(this HtmlHelper helper) { - var value = ConfigurationManager.AppSettings["site:Name"].Or(""); - return new MvcHtmlString(value); - } - - public static IHtmlString DirectLink(this HtmlHelper helper, string id) { - return helper.Partial("_DirectLink", id); - } - - public static IHtmlString StaticIcon(this HtmlHelper helper, bool isStatic) { - return helper.Icon("fa-flag", isStatic, "Static"); - } - - public static IHtmlString ReadonlyIcon(this HtmlHelper helper, bool isReadonly) { - return helper.Icon("fa-lock", isReadonly, "Readonly"); - } - - public static IHtmlString ExtensionIcon(this HtmlHelper helper, bool isExtension) { - return helper.Icon("fa-plug", isExtension, "Extension"); - } - - public static IHtmlString Icon(this HtmlHelper helper, string icon, bool show = true, string title = "") { - return helper.Partial("_IconPartial", new IconHelperModel { - Show = show, - Title = title, - Icon = icon - }); - } - } -} \ No newline at end of file diff --git a/Madb.Site/Extensions/Type.cs b/Madb.Site/Extensions/Type.cs deleted file mode 100644 index 9d69e67e..00000000 --- a/Madb.Site/Extensions/Type.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; -using Camalot.Common.Extensions; - -namespace Madb.Site.Extensions { - public static partial class MadbSiteExtensions { - public static bool IsInNamespace(this Type type, string @namespace) { - return type != null && !string.IsNullOrWhiteSpace(type.Namespace) && type.Namespace.Equals(@namespace, StringComparison.InvariantCulture); - } - - public static bool IsInChildNamespace(this Type type, string rootNamespace) { - return type != null && !string.IsNullOrWhiteSpace(type.Namespace) && type.Namespace.StartsWith(rootNamespace, StringComparison.InvariantCulture) && !type.Namespace.Equals(rootNamespace, StringComparison.InvariantCulture); - } - - public static string ToSafeName(this Type type) { - if(type.IsGenericType) { - var gparams = type.GetGenericArguments(); - var len = type.Name.IndexOf("`"); - if(len <= 0) { - len = type.Name.Length; - } - return "{0}{1}".With(gparams.Count() > 0 ? type.Name.Substring(0,len) : type.Name, gparams.Count() > 0 ? "<{0}>".With(String.Join(", ", gparams.Select(g => g.ToSafeName()))) : ""); - } else { - return type.Name; - } - } - - - - public static string ToSafeFullName(this Type type) { - return "{1}.{0}".With(ToSafeName(type), type.Namespace); - } - - public static string ToSafeUrlFullName(this Type type) { - return "{1}.{0}".With(type.Name.REReplace(@"\[|\]",""), type.Namespace); - } - - } -} \ No newline at end of file diff --git a/Madb.Site/Extensions/UrlHelper.cs b/Madb.Site/Extensions/UrlHelper.cs deleted file mode 100644 index 6a4e5206..00000000 --- a/Madb.Site/Extensions/UrlHelper.cs +++ /dev/null @@ -1,51 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; -using System.Web.Mvc; -using System.Web.Mvc.Html; -using Camalot.Common.Extensions; -using Camalot.Common.Mvc.Extensions; - -namespace Madb.Site.Extensions { - public static partial class MadbSiteExtensions { - public static string ParseReferenceUrl(this UrlHelper helper, string url ) { - if(url.IsMatch("^!:")) { - return url.Substring(2); - } else if ( url.IsMatch("^(T|M|P):")) { - var skipped = url.Substring(2); - // is it msdn link? - if(url.IsMatch(@"^T\:System\.")) { - var baseUrl = "http://msdn.microsoft.com/en-us/library/{0}.aspx"; - return baseUrl.With(skipped.ToLowerInvariant()); - } - return "#{0}".With(skipped.Slug()); - } else { - return url; - } - } - - public static string ParseReferenceAsText(this UrlHelper helper, string url) { - if(url.IsMatch("^(!|T|M|P):")) { - return "{0}".With(url.Substring(2)); - } else { - return url; - } - } - - public static string UrlForType(this UrlHelper helper, Type type) { - var baseDocumentationNamespace = helper.RequestContext.RouteData.GetRequiredString("id"); - if(type.IsInNamespace(baseDocumentationNamespace) || type.IsInChildNamespace(baseDocumentationNamespace)) { - // local type - return "#{0}".With(type.ToSafeFullName().Slug()); - } else { - // remote type - if(type.IsGenericType) { - return "http://social.msdn.microsoft.com/Search/en-US?query={0}&ac=3".With(type.ToSafeFullName()); - } else { - return "http://msdn.microsoft.com/en-us/library/{0}.aspx".With(type.ToSafeUrlFullName().ToLowerInvariant()); - } - } - } - } -} \ No newline at end of file diff --git a/Madb.Site/Extensions/XmlDocumentationReader.cs b/Madb.Site/Extensions/XmlDocumentationReader.cs deleted file mode 100644 index 7066c873..00000000 --- a/Madb.Site/Extensions/XmlDocumentationReader.cs +++ /dev/null @@ -1,143 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Reflection; -using System.Text; -using System.Web; -using System.Xml; -using System.Xml.Serialization; -using Camalot.Common.Extensions; - -namespace Madb.Site.Extensions { - public static partial class MadbSiteExtensions { - - public static string GetXmlDocumentationName(this MethodInfo mi) { - var mparams = mi.GetParameters(); - var gcount = mi.GetGenericArguments().Count(); - var generics = mi.GetGenericArguments().Select((generic, index) => new { generic, index }); - var paramItems = mparams.Select((p, index) => new { - p, - index = generics.Where(x => x.generic == p.ParameterType).Count() > 0 ? generics.Where(x => x.generic == p.ParameterType).First().index : index - }).Select(x => x.p.ParameterType.XmlDocumentParameterSafeName(x.index)); - - return "M:{0}.{1}{2}{4}{3}{5}".With( - - mi.ReflectedType.XmlDocumentTypeSafeName(), - mi.Name, - gcount > 0 ? "``{0}".With(gcount) : "", - string.Join(",", paramItems), - mparams.Count() > 0 ? "(" : "", - mparams.Count() > 0 ? ")" : "" - ); - } - - public static string GetXmlDocumentationName(this PropertyInfo propertyInfo) { - return "P:{0}.{1}".With(propertyInfo.ReflectedType.XmlDocumentTypeSafeName(), propertyInfo.Name); - } - - public static string GetXmlDocumentationName(this Type type) { - return "T:{0}.{1}".With(type.Namespace,type.Name); - } - - private static string XmlDocumentTypeSafeName(this Type type) { - return "{1}.{0}".With(type.Name.Replace("`", "``"), type.Namespace); - } - - private static string XmlDocumentParameterSafeName(this Type type, int index) { - var gparams = type.GetGenericArguments(); - var s = new StringBuilder(); - s.Append("{"); - for(var i = 0; i < gparams.Length; ++i) { - if(gparams.Length > 1) { - s.Append("``{0},".With(i)); - } else { - s.Append(gparams[i].GetXmlParameterTypeSaveName(i)); - } - } - if(s.Length > 1 && s[s.Length - 1] == ',') { - s.Remove(s.Length - 1, 1); - } - s.Append("}"); - if(type.IsGenericType) { - return "{1}.{0}{2}".With(type.Name.Substring(0, type.Name.LastIndexOf("`")), type.Namespace, s); - } else if(type.IsGenericParameter) { - return "``{0}".With(index); - } else if(type.IsGenericTypeDefinition) { - return "GTD"; - } else { - return "{1}.{0}".With(type.Name, type.Namespace); - } - } - - private static string GetXmlParameterTypeSaveName(this Type type, int index) { - if(type.IsGenericParameter) { - return "``{0}".With(index); - } else { - return "{1}.{0}".With(type.Name, type.Namespace); - } - } - - public static Models.Documentation.Xml.Member GetDocumenation(this XmlDocument doc, MethodInfo mi) { - var itemName = mi.GetXmlDocumentationName(); - var tdoc = new XmlDocument(); - - var node = doc.SelectSingleNode("//member[@name=\"{0}\"]".With(itemName)); - if(node == null) { - return null; - } - var nnode = tdoc.ImportNode(node, true); - tdoc.AppendChild(nnode); - var serializer = new XmlSerializer(typeof(Models.Documentation.Xml.Member)); - using(var reader = new StringReader(tdoc.OuterXml)) { - using(var xreader = XmlReader.Create(reader)) { - var member = serializer.Deserialize(xreader) as Models.Documentation.Xml.Member; - if(mi.IsExtension()) { - if(member.Params.Count > 0) { - member.Params.RemoveAt(0); - } - } - return member; - } - } - } - - public static Models.Documentation.Xml.Member GetDocumenation(this XmlDocument doc, PropertyInfo pi) { - var itemName = pi.GetXmlDocumentationName(); - var tdoc = new XmlDocument(); - - var node = doc.SelectSingleNode("//member[@name=\"{0}\"]".With(itemName)); - if(node == null) { - return null; - } - var nnode = tdoc.ImportNode(node, true); - tdoc.AppendChild(nnode); - var serializer = new XmlSerializer(typeof(Models.Documentation.Xml.Member)); - using(var reader = new StringReader(tdoc.OuterXml)) { - using(var xreader = XmlReader.Create(reader)) { - var member = serializer.Deserialize(xreader) as Models.Documentation.Xml.Member; - return member; - } - } - } - - public static Models.Documentation.Xml.Member GetDocumenation(this XmlDocument doc, Type type) { - var itemName = type.GetXmlDocumentationName(); - var tdoc = new XmlDocument(); - - var node = doc.SelectSingleNode("//member[@name=\"{0}\"]".With(itemName)); - if(node == null) { - return null; - } - var nnode = tdoc.ImportNode(node, true); - tdoc.AppendChild(nnode); - var serializer = new XmlSerializer(typeof(Models.Documentation.Xml.Member)); - using(var reader = new StringReader(tdoc.OuterXml)) { - using(var xreader = XmlReader.Create(reader)) { - var member = serializer.Deserialize(xreader) as Models.Documentation.Xml.Member; - return member; - } - } - } - } -} \ No newline at end of file diff --git a/Madb.Site/Global.asax b/Madb.Site/Global.asax deleted file mode 100644 index 2ce8453c..00000000 --- a/Madb.Site/Global.asax +++ /dev/null @@ -1 +0,0 @@ -<%@ Application Codebehind="Global.asax.cs" Inherits="Madb.Site.MvcApplication" Language="C#" %> diff --git a/Madb.Site/Global.asax.cs b/Madb.Site/Global.asax.cs deleted file mode 100644 index 9f767d1d..00000000 --- a/Madb.Site/Global.asax.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; -using System.Web.Mvc; -using System.Web.Optimization; -using System.Web.Routing; - -namespace Madb.Site -{ - public class MvcApplication : System.Web.HttpApplication - { - protected void Application_Start() - { - AreaRegistration.RegisterAllAreas(); - FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); - RouteConfig.RegisterRoutes(RouteTable.Routes); - BundleConfig.RegisterBundles(BundleTable.Bundles); - } - } -} diff --git a/Madb.Site/Madb.Site.csproj b/Madb.Site/Madb.Site.csproj deleted file mode 100644 index f5198a5c..00000000 --- a/Madb.Site/Madb.Site.csproj +++ /dev/null @@ -1,534 +0,0 @@ - - - - - Debug - AnyCPU - - - 2.0 - {A3BA455F-4829-4412-9ACC-DEFBC1BC84FC} - {349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} - Library - Properties - Madb.Site - Madb.Site - v4.5.1 - false - false - - - - - ..\ - true - ..\packages\WebGrease.1.5.2\lib - - - true - full - false - bin\ - DEBUG;TRACE - prompt - 4 - - - AnyCPU - - - pdbonly - true - bin\ - TRACE - prompt - 4 - - - - False - ..\packages\Antlr.3.4.1.9004\lib\Antlr3.Runtime.dll - - - ..\packages\Camalot.Common.1.0.5320.29171\lib\net45\Camalot.Common.dll - - - ..\packages\Camalot.Common.Mvc5.5.0.5320.29172\lib\net45\Camalot.Common.Mvc.dll - - - - ..\packages\morelinq.1.1.0\lib\net35\MoreLinq.dll - - - False - ..\packages\Newtonsoft.Json.6.0.4\lib\net45\Newtonsoft.Json.dll - - - False - ..\packages\Owin.1.0\lib\net40\Owin.dll - - - - - - - False - ..\packages\Microsoft.AspNet.WebApi.Client.5.2.0\lib\net45\System.Net.Http.Formatting.dll - - - - - - - - - False - ..\packages\Microsoft.AspNet.WebApi.Core.5.2.0\lib\net45\System.Web.Http.dll - - - - - - - - - - - - True - ..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll - - - - - - - True - ..\packages\Microsoft.AspNet.WebPages.3.2.0\lib\net45\System.Web.Helpers.dll - - - True - ..\packages\Microsoft.AspNet.Mvc.5.2.0\lib\net45\System.Web.Mvc.dll - - - ..\packages\Microsoft.AspNet.Web.Optimization.1.1.3\lib\net40\System.Web.Optimization.dll - - - True - ..\packages\Microsoft.AspNet.Razor.3.2.0\lib\net45\System.Web.Razor.dll - - - True - ..\packages\Microsoft.AspNet.WebPages.3.2.0\lib\net45\System.Web.WebPages.dll - - - True - ..\packages\Microsoft.AspNet.WebPages.3.2.0\lib\net45\System.Web.WebPages.Deployment.dll - - - True - ..\packages\Microsoft.AspNet.WebPages.3.2.0\lib\net45\System.Web.WebPages.Razor.dll - - - False - ..\packages\WebGrease.1.5.2\lib\WebGrease.dll - - - - - - - - - - - - - - - Global.asax - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - endpointmvc.js - - - - jquery.scrollto.js - - - - mousetrap.js - - - - system.copy.js - - - - system.expandable.js - - - - system.floating-label.js - - - - - - system.toastr.js - - - - toastr.js - - - - bootstrap-overrides.css - - - - bootstrap-theme.css - - - - bootstrap.css - - - bootswatch-paper.less - - - bootswatch-paper.less - - - bootswatch-variables.less - - - bootswatch-variables.less - - - bootswatch.less - - - bootswatch.less - - - documentation.less - - - documentation.css - - - endpointmvc-variables.less - - - endpointmvc-variables.css - - - endpointmvc.less - - - endpointmvc.css - - - - font-awesome.css - - - FontAwesome.otf - - - gist.less - - - gist.less - - - - google.adsense.css - - - nuget.less - - - nuget.less - - - main.less - - - main.less - - - spacing.less - - - spacing.less - - - toastr.less - - - toastr.less - - - - typography.css - - - glyphicons-halflings-regular.eot - - - - - glyphicons-halflings-regular.eot - - - glyphicons-halflings-regular.eot - - - - bootstrap-theme.css - - - bootstrap.css - - - FontAwesome.otf - - - FontAwesome.otf - - - FontAwesome.otf - - - - endpointmvc.min.js - - - jquery-2.1.1.js - - - - bootstrap.js - - - - jquery-2.1.1.js - - - jquery-2.1.1.js - - - jquery.scrollto.js - - - jquery.validate.js - - - - jquery.validate.js - - - jquery.validate.js - - - jquery.validate.js - - - - - respond.js - - - respond.js - - - respond.js - - - - - Web.config - - - Web.config - - - - - - - bootswatch-paper.less - - - - bootswatch-variables.less - - - - bootswatch.less - - - - gist.less - - - - nuget.less - - - - main.less - - - - spacing.less - - - - toastr.less - - - - mousetrap.js - - - system.copy.js - - - system.toastr.js - - - toastr.js - - - system.floating-label.min.js - - - - - - - - - - - - - - - - - endpointmvc-variables.css - - - endpointmvc.css - - - - - - - - - - system.expandable.min.js - - - - - - - - documentation.css - - - - - {65473257-e70f-410b-9269-d0c0f771ea87} - Managed.Adb - - - - - - - 10.0 - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) - - - - - - - - - - - - True - True - 6460 - / - http://madb.bit13.local - False - False - - - False - - - - - - - - This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - - xcopy $(ProjectDir)$(OutDir)Managed.AndroidDebugBridge.* $(ProjectDir)App_Data /h /i /c /k /y - - - - \ No newline at end of file diff --git a/Madb.Site/Models/AdSenseModel.cs b/Madb.Site/Models/AdSenseModel.cs deleted file mode 100644 index 3a32022e..00000000 --- a/Madb.Site/Models/AdSenseModel.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; - -namespace Madb.Site.Models { - public class AdSenseModel { - public String PublisherId { get; set; } - public String Slot { get; set; } - public String Name { get; set; } - } -} \ No newline at end of file diff --git a/Madb.Site/Models/Documentation/ClassModel.cs b/Madb.Site/Models/Documentation/ClassModel.cs deleted file mode 100644 index a5a9382d..00000000 --- a/Madb.Site/Models/Documentation/ClassModel.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; -using Camalot.Common.Extensions; - -namespace Madb.Site.Models.Documentation { - public class ClassModel { - public ClassModel() { - Methods = new List(); - Properties = new List(); - } - public string Name { get; set; } - public string Description { get; set; } - public string Namespace { get; set; } - public string Assembly { get; set; } - public Xml.Member Documentation { get; set; } - public string XmlName { get; set; } - public bool Ignore { get { return Documentation != null && Documentation.Ignore; } } - public bool IsStatic { get; set; } - - public IList Methods {get;set;} - - public IList Properties { get; set; } - - public string Id { - get { - return "{0}.{1}".With(Namespace, Name).Slug(); - } - } - - public override string ToString() { - return "{0}.{1}".With(Namespace, Name); - } - } -} \ No newline at end of file diff --git a/Madb.Site/Models/Documentation/MethodModel.cs b/Madb.Site/Models/Documentation/MethodModel.cs deleted file mode 100644 index 1f2d2494..00000000 --- a/Madb.Site/Models/Documentation/MethodModel.cs +++ /dev/null @@ -1,47 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; -using Camalot.Common.Extensions; -using Madb.Site.Extensions; -namespace Madb.Site.Models.Documentation { - public class MethodModel { - public MethodModel() { - Parameters = new List(); - GenericParameters = new List(); - } - public string Name { get; set; } - public Xml.Member Documentation { get; set; } - public string XmlName { get; set; } - public bool Ignore { get { return Documentation != null && Documentation.Ignore; } } - public Type ReturnType { get; set; } - public Type Parent { get; set; } - public IList Parameters { get; set; } - public IList GenericParameters { get; set; } - public bool IsStatic { get; set; } - public bool IsExtension { - get { - return ExtensionOf != null; - } - } - public Type ExtensionOf { get; set; } - - public string Id { - get { - return "{0}.{1}".With(Parent.ToSafeFullName(), Name).Slug(); - } - } - - public override string ToString() { - if(ExtensionOf == null) { - return "{0}{2} ( {1} )".With(Name, String.Join(", ", Parameters.Select(p => p.ToString())), GenericParameters != null && GenericParameters.Count > 0 ? "<{0}>".With(String.Join(", ", GenericParameters.Select(g => g.ToString()))) : ""); - } else { - return "{0}{2} ( {1} )".With( - Name, - String.Join(", ", Parameters.Skip(1).Select(p => p.ToString())), - GenericParameters != null && GenericParameters.Count > 0 ? "<{0}>".With(String.Join(", ", GenericParameters.Select(g => g.ToString()))) : "" - ); - } - } - } -} \ No newline at end of file diff --git a/Madb.Site/Models/Documentation/NamespaceModel.cs b/Madb.Site/Models/Documentation/NamespaceModel.cs deleted file mode 100644 index 227f10a8..00000000 --- a/Madb.Site/Models/Documentation/NamespaceModel.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; -using Camalot.Common.Extensions; - -namespace Madb.Site.Models.Documentation { - public class NamespaceModel { - public NamespaceModel() { - Classes = new List(); - Namespaces = new List(); - } - public string Name { get; set; } - public IList Namespaces { get; set; } - public IList Classes { get; set; } - public bool Ignore { get { return Classes.Where(c => !c.Ignore).Count() == 0 && Namespaces.Where(c => !c.Ignore).Count() == 0; } } - public String AssemblyVersion { get; set; } - - public string Id { - get { - return Name.Slug(); - } - } - - public override string ToString() { - return this.Name; - } - } -} \ No newline at end of file diff --git a/Madb.Site/Models/Documentation/ParameterModel.cs b/Madb.Site/Models/Documentation/ParameterModel.cs deleted file mode 100644 index b30ab489..00000000 --- a/Madb.Site/Models/Documentation/ParameterModel.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; -using Camalot.Common.Extensions; - -namespace Madb.Site.Models.Documentation { - public class ParameterModel { - public string Name { get; set; } - public TypeModel Type { get; set; } - public bool IsOut { get; set; } - public bool IsIn { get; set; } - public bool IsOptional { get; set; } - - public override string ToString() { - return "{4}{2}{3}{0} {1}{5}".With(Type.ToString(), Name, IsOut ? "{out}" : "", IsIn ? "{in}" : "", IsOptional ? "[" : "", IsOptional ? "]" : ""); - } - } -} \ No newline at end of file diff --git a/Madb.Site/Models/Documentation/PropertyModel.cs b/Madb.Site/Models/Documentation/PropertyModel.cs deleted file mode 100644 index 3df0905f..00000000 --- a/Madb.Site/Models/Documentation/PropertyModel.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Camalot.Common.Extensions; -using Madb.Site.Extensions; - -namespace Madb.Site.Models.Documentation { - public class PropertyModel { - public string Name { get; set; } - public Xml.Member Documentation { get; set; } - public string XmlName { get; set; } - public bool Ignore { get { return Documentation != null && Documentation.Ignore; } } - public Type ReturnType { get; set; } - public Type Parent { get; set; } - public bool IsStatic { get; set; } - public bool IsReadOnly { get; set; } - public string Id { - get { - return "{0}.{1}".With(Parent.ToSafeFullName(), Name).Slug(); - } - } - - public override string ToString() { - return Name; - } - } -} diff --git a/Madb.Site/Models/Documentation/TypeModel.cs b/Madb.Site/Models/Documentation/TypeModel.cs deleted file mode 100644 index 6cb5cdfc..00000000 --- a/Madb.Site/Models/Documentation/TypeModel.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Camalot.Common.Extensions; -using Madb.Site.Extensions; - -namespace Madb.Site.Models.Documentation { - public class TypeModel { - public Type BaseType { get; set; } - public string Name { get; set; } - public override string ToString() { - return BaseType.ToSafeName(); - } - } -} diff --git a/Madb.Site/Models/Documentation/Xml/Assembly.cs b/Madb.Site/Models/Documentation/Xml/Assembly.cs deleted file mode 100644 index e9a82c56..00000000 --- a/Madb.Site/Models/Documentation/Xml/Assembly.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; -using System.Xml.Serialization; - -namespace Madb.Site.Models.Documentation.Xml { - public class Assembly { - [XmlElement("name")] - public string Name { get; set; } - } -} \ No newline at end of file diff --git a/Madb.Site/Models/Documentation/Xml/Document.cs b/Madb.Site/Models/Documentation/Xml/Document.cs deleted file mode 100644 index 1e6929b1..00000000 --- a/Madb.Site/Models/Documentation/Xml/Document.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; -using System.Xml.Serialization; - -namespace Madb.Site.Models.Documentation.Xml { - [XmlRoot("doc")] - public class Document { - [XmlArrayItem("member")] - [XmlArray("members")] - public IList Members { get; set; } - } -} \ No newline at end of file diff --git a/Madb.Site/Models/Documentation/Xml/Gist.cs b/Madb.Site/Models/Documentation/Xml/Gist.cs deleted file mode 100644 index 8f5812cd..00000000 --- a/Madb.Site/Models/Documentation/Xml/Gist.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace Madb.Site.Models.Documentation.Xml { - public class Gist { - [XmlAttribute("id")] - public string Id { get; set; } - [XmlText] - public string Description { get; set; } - } -} diff --git a/Madb.Site/Models/Documentation/Xml/Member.cs b/Madb.Site/Models/Documentation/Xml/Member.cs deleted file mode 100644 index 5a9c6be5..00000000 --- a/Madb.Site/Models/Documentation/Xml/Member.cs +++ /dev/null @@ -1,42 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Linq; -using System.Web; -using System.Xml; -using System.Xml.Serialization; - -namespace Madb.Site.Models.Documentation.Xml { - [XmlRoot("member")] - public class Member { - [XmlAttribute("name")] - public string Name { get; set; } - [XmlElement("summary")] - public List Summary { get; set; } - [XmlElement("typeparam")] - public List TypeParams { get; set; } - [XmlElement("param")] - public List Params { get; set; } - [XmlElement("returns")] - public List Returns { get; set; } - [XmlElement("gist")] - public List Gists { get; set; } - [XmlElement("remarks")] - public List Remarks { get; set; } - [XmlElement("example")] - public List Examples { get; set; } - [XmlElement("exception")] - public List Exceptions { get; set; } - [XmlElement("permission")] - public List Permissions { get; set; } - [XmlElement("see")] - public List Sees { get; set; } - [XmlElement("seealso")] - public List SeeAlsos { get; set; } - [XmlElement("value")] - public List Values { get; set; } - [XmlElement("ignore")] - [DefaultValue(false)] - public bool Ignore { get; set; } - } -} \ No newline at end of file diff --git a/Madb.Site/Models/Documentation/Xml/Param.cs b/Madb.Site/Models/Documentation/Xml/Param.cs deleted file mode 100644 index bbf13953..00000000 --- a/Madb.Site/Models/Documentation/Xml/Param.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace Madb.Site.Models.Documentation.Xml { - public class Param { - [XmlAttribute("name")] - public string Name { get; set; } - [XmlText] - public string Value { get; set; } - } -} diff --git a/Madb.Site/Models/Documentation/Xml/Reference.cs b/Madb.Site/Models/Documentation/Xml/Reference.cs deleted file mode 100644 index 4f821615..00000000 --- a/Madb.Site/Models/Documentation/Xml/Reference.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; -using System.Xml.Serialization; - -namespace Madb.Site.Models.Documentation.Xml { - public class Reference { - [XmlAttribute("cref")] - public string Link { get; set; } - [XmlText] - public string Description { get; set; } - } -} diff --git a/Madb.Site/Models/Documentation/Xml/Simple.cs b/Madb.Site/Models/Documentation/Xml/Simple.cs deleted file mode 100644 index 6153e78b..00000000 --- a/Madb.Site/Models/Documentation/Xml/Simple.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; -using System.Xml; -using System.Xml.Serialization; - -namespace Madb.Site.Models.Documentation.Xml { - public class Simple { - [XmlIgnore] - public string Value { get; set; } - - [XmlText] - public XmlNode[] CDataContent { - get { - var dummy = new XmlDocument(); - return new XmlNode[] { dummy.CreateCDataSection(Value) }; - } - set { - if(value == null) { - Value = null; - return; - } - Value = string.Join(" ", value.Select(a => a.OuterXml)).Trim(); - } - } - - public override string ToString() { - return Value; - } - } -} \ No newline at end of file diff --git a/Madb.Site/Models/IconHelperModel.cs b/Madb.Site/Models/IconHelperModel.cs deleted file mode 100644 index b5d49063..00000000 --- a/Madb.Site/Models/IconHelperModel.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; - -namespace Madb.Site.Models { - public class IconHelperModel { - public bool Show { get; set; } - public string Icon { get; set; } - public string Title { get; set; } - } -} \ No newline at end of file diff --git a/Madb.Site/Models/NavigationPositions.cs b/Madb.Site/Models/NavigationPositions.cs deleted file mode 100644 index 36486e6d..00000000 --- a/Madb.Site/Models/NavigationPositions.cs +++ /dev/null @@ -1,11 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; - -namespace Madb.Site.Models { - public enum NavigationPositions { - Left, - Right - } -} \ No newline at end of file diff --git a/Madb.Site/Properties/AssemblyInfo.cs b/Madb.Site/Properties/AssemblyInfo.cs deleted file mode 100644 index 5aa6eb16..00000000 --- a/Madb.Site/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("Madb.Site")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("Madb.Site")] -[assembly: AssemblyCopyright("Copyright © 2014")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("3a93b4d6-10b9-429b-b4b3-f2d99ea8e6c6")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Revision and Build Numbers -// by using the '*' as shown below: -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Madb.Site/Services/DocumentationService.cs b/Madb.Site/Services/DocumentationService.cs deleted file mode 100644 index 57f554a2..00000000 --- a/Madb.Site/Services/DocumentationService.cs +++ /dev/null @@ -1,234 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; -using System.Xml; -using Madb.Site.Models.Documentation; -using MoreLinq; -using Camalot.Common.Extensions; -using Madb.Site.Extensions; -using System.Configuration; -using System.Reflection; -using System.Web.Hosting; -using System.IO; -using System.Security.AccessControl; -using System.ComponentModel; - -namespace Madb.Site.Services { - public class DocumentationService { - - /// - /// You should call GetDocumentationDomain() - /// - /// - /// The documentation domain. - /// - private AppDomain DocumentationDomain { get; set; } - private IEnumerable DocumentationAssemblies { - get { - return GetDocumentationDomain().GetAssemblies().Where(a => !a.IsDynamic); - } - } - /// - /// Builds the specified assembly name. - /// - /// Name of the assembly. - /// - public NamespaceModel Build(string assemblyName) { - var alternateName = GetAlternateName(assemblyName); - var nm = new NamespaceModel { - Name = assemblyName, - }; - var exclude = this.GetType().Assembly; - - var xml = LoadXml(assemblyName); - var NSIgnoreList = ConfigurationManager.AppSettings["site:NamespacesIgnoreList"].Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries); - - DocumentationAssemblies.Where(a => a != exclude && - (a.GetName().Name.Equals(alternateName, StringComparison.InvariantCultureIgnoreCase) || a.GetName().Name.Equals(assemblyName, StringComparison.InvariantCultureIgnoreCase)) - ).ForEach(a => { - a.GetTypes() - .Where(t => ((t.IsInNamespace(alternateName) || t.IsInNamespace(assemblyName)) || (t.IsInChildNamespace(alternateName) || t.IsInChildNamespace(assemblyName))) && !NSIgnoreList.Contains(t.Namespace)) - .Select(t => t.Namespace) - .Distinct() - .ForEach(ns => { - if(string.IsNullOrWhiteSpace(nm.AssemblyVersion)) { - nm.AssemblyVersion = a.GetName().Version.ToString(); - } - var processedNS = ProcessNamespace(ns, xml); - if(processedNS != null && processedNS.Classes.Count > 0) { - nm.Namespaces.Add(processedNS); - } - }); - }); - return nm; - } - - /// - /// Gets the documentation domain. - /// - /// - private AppDomain GetDocumentationDomain() { - if(DocumentationDomain == null) { - // create a new app domain for processing. - DocumentationDomain = AppDomain.CreateDomain("Documentation"); - - var dir = new DirectoryInfo(HostingEnvironment.MapPath("~/app_data/")); - dir.GetFiles("*.dll").ForEach(a => { - DocumentationDomain.Load(AssemblyName.GetAssemblyName(a.FullName)); - }); - } - return DocumentationDomain; - } - - /// - /// Loads the XML. - /// - /// Name of the assembly. - /// - /// - private XmlDocument LoadXml(string assemblyName) { - var file = DocumentationPathFromAssemblyName(assemblyName); - if(file.Exists) { - var doc = new XmlDocument(); - using(var fs = new FileStream(file.FullName, FileMode.Open, FileSystemRights.Read, FileShare.Read, 2048, FileOptions.None)) { - doc.Load(fs); - } - return doc; - } else { - throw new FileNotFoundException(); - } - } - - - private FileInfo DocumentationPathFromAssemblyName(string assemblyName) { - - var overrideName = GetAlternateName(assemblyName); - - var fn = "{0}.xml".With(overrideName.Or(assemblyName)); - var dir = HostingEnvironment.MapPath("~/app_data/"); - var file = new FileInfo(Path.Combine(dir, fn)); - if(file.Exists) { - return file; - } else { - throw new FileNotFoundException(); - } - } - - private string GetAlternateName(string namespaceName) { - var overrideName = ConfigurationManager.AppSettings[namespaceName]; - return overrideName.Or(namespaceName); - } - - /// - /// Processes the namespace. - /// - /// The namespace. - /// The XML. - /// - private NamespaceModel ProcessNamespace(string @namespace, XmlDocument xml) { - var nm = new NamespaceModel { - Name = @namespace - }; - DocumentationAssemblies.ForEach(a => { - var classes = new List(); - a.GetTypes().Where(t => t.IsPublic && t.IsClass && t.IsInNamespace(@namespace)).ForEach(t => { - var pclass = ProcessType(t, xml); - nm.Classes.Add(pclass); - }); - }); - - return nm; - } - - /// - /// Processes the type. - /// - /// The type. - /// The XML. - /// - private ClassModel ProcessType(Type type, XmlDocument xml) { - return new ClassModel { - Name = type.ToSafeName(), - Namespace = type.Namespace, - Assembly = type.Assembly.GetName().Name, - Description = type.GetCustomAttributeValue(x => x.Description).Or(""), - XmlName = type.GetXmlDocumentationName(), - Documentation = xml.GetDocumenation(type), - Methods = ProcessMethods(type, xml), - IsStatic = type.IsAbstract && type.IsSealed, - Properties = ProcessProperties(type,xml) - }; - } - - private IList ProcessProperties(Type type, XmlDocument xml) { - return type.GetProperties(System.Reflection.BindingFlags.Public | BindingFlags.GetProperty | BindingFlags.SetProperty | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.DeclaredOnly) - .Where(m => true).Select(m => new PropertyModel { - Name = m.Name, - Documentation = xml.GetDocumenation(m), - XmlName = m.GetXmlDocumentationName(), - IsStatic = m.GetSetMethod() != null ? m.GetSetMethod().IsStatic : m.GetGetMethod() != null ? m.GetGetMethod().IsStatic : false, - IsReadOnly = m.GetSetMethod() == null, - Parent = type, - ReturnType = m.PropertyType - }).OrderBy(x => x.Name).ToList(); - } - - /// - /// Processes the methods. - /// - /// The type. - /// The XML. - /// - private IList ProcessMethods(Type type, XmlDocument xml) { - - return type.GetMethods(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.DeclaredOnly).Where(m => - !m.IsConstructor && - !m.Name.StartsWith("get_", StringComparison.CurrentCulture) && - !m.Name.StartsWith("set_", StringComparison.CurrentCulture) && - !m.Name.StartsWith("add_", StringComparison.CurrentCulture) && - !m.Name.StartsWith("remove_", StringComparison.CurrentCulture) && - // exclude overrides because I don't care about them. Unless, base definition is in this assembly. - (m.GetBaseDefinition() == null || m.GetBaseDefinition() == m || m.GetBaseDefinition().DeclaringType.Assembly == type.Assembly) - ).Select(m => new MethodModel { - Name = m.Name, - Documentation = xml.GetDocumenation(m), - XmlName = m.GetXmlDocumentationName(), - GenericParameters = ProcessMethodGenericParameters(m), - Parameters = ProcessParams(m), - ExtensionOf = m.ExtensionOf(), - Parent = type, - IsStatic = m.IsStatic, - ReturnType = m.ReturnType - }).OrderBy(x => x.Name).ThenBy(x => x.ExtensionOf == null ? "" : x.ExtensionOf.ToSafeFullName()).ThenBy(x => x.Parameters.Count).ToList(); - } - - /// - /// Processes the method generic parameters. - /// - /// The m. - /// - private IList ProcessMethodGenericParameters(System.Reflection.MethodInfo m) { - if(m.IsGenericMethod) { - return m.GetGenericArguments().Select(t => new TypeModel { BaseType = t, Name = t.ToSafeName() }).ToList(); - } else { - return default(IList); - } - } - - /// - /// Processes the parameters. - /// - /// The m. - /// - private IList ProcessParams(System.Reflection.MethodInfo m) { - return m.GetParameters().Select(p => new ParameterModel { - Type = new TypeModel { BaseType = p.ParameterType, Name = p.ParameterType.ToSafeName() }, - Name = p.Name, - IsOut = p.IsOut, - IsIn = p.IsIn, - IsOptional = p.IsOptional - }).ToList(); - } - } -} \ No newline at end of file diff --git a/Madb.Site/Startup.cs b/Madb.Site/Startup.cs deleted file mode 100644 index 01209f39..00000000 --- a/Madb.Site/Startup.cs +++ /dev/null @@ -1,12 +0,0 @@ - -using Owin; -namespace Madb.Site -{ - public partial class Startup - { - public void Configuration(IAppBuilder app) - { - ConfigureAuth(app); - } - } -} diff --git a/Madb.Site/Views/Assets/Gist.cshtml b/Madb.Site/Views/Assets/Gist.cshtml deleted file mode 100644 index fa320349..00000000 --- a/Madb.Site/Views/Assets/Gist.cshtml +++ /dev/null @@ -1,12 +0,0 @@ -@model String -
-
-
- - -
-
- -
-
-
\ No newline at end of file diff --git a/Madb.Site/Views/Documentation/DisplayTemplates/ClassModel.cshtml b/Madb.Site/Views/Documentation/DisplayTemplates/ClassModel.cshtml deleted file mode 100644 index fb5d3d4f..00000000 --- a/Madb.Site/Views/Documentation/DisplayTemplates/ClassModel.cshtml +++ /dev/null @@ -1,31 +0,0 @@ -@using Madb.Site.Extensions; - -@model Madb.Site.Models.Documentation.ClassModel - -
- - @if(Model.Documentation != null) { - @Html.DisplayFor(x => Model.Documentation) - } -
- @foreach(var m in Model.Properties) { - if(!m.Ignore) { - @Html.DisplayFor(x => m) - } - } - @foreach(var m in Model.Methods) { - if(!m.Ignore) { - @Html.DisplayFor(x => m) - } - } -
-
\ No newline at end of file diff --git a/Madb.Site/Views/Documentation/DisplayTemplates/Member.cshtml b/Madb.Site/Views/Documentation/DisplayTemplates/Member.cshtml deleted file mode 100644 index 10d68276..00000000 --- a/Madb.Site/Views/Documentation/DisplayTemplates/Member.cshtml +++ /dev/null @@ -1,110 +0,0 @@ -@model Madb.Site.Models.Documentation.Xml.Member -@{ - const int scrollOffset = -70; -} -
- @if(Model.Summary.Where(m => !string.IsNullOrWhiteSpace(m.Value)).Any()) { -
- @foreach(var s in Model.Summary) { - if(!string.IsNullOrWhiteSpace(s.Value)) { -

@Html.Raw(s)

- } - } -
- } - - @if(Model.Remarks.Where(m => !string.IsNullOrWhiteSpace(m.Value)).Any()) { -
- @foreach(var s in Model.Remarks) { - if(!string.IsNullOrWhiteSpace(s.Value)) { -

@Html.Raw(s)

- } - } -
- } - - @if(Model.Gists.Where(m => !string.IsNullOrWhiteSpace(m.Id)).Any()) { -
- @foreach(var s in Model.Gists) { - if(!string.IsNullOrWhiteSpace(s.Description)) { -
@s.Description
- } - @Html.Action("Gist", new { controller = "Assets", id = s.Id }) - } -
- } - - @if(Model.Params.Where(m => !string.IsNullOrWhiteSpace(m.Value)).Any()) { -

Parameters

-
- - - - - - @foreach(var s in Model.Params) { - if(!string.IsNullOrWhiteSpace(s.Name)) { - - - - - } - } -
NameDescription
@s.Name@s.Value
-
- } - - @if(Model.Exceptions.Any()) { -

Exceptions

-
- - - - - - @foreach(var s in Model.Exceptions) { - var reference = s.Link.Substring(2); - var link = Url.ParseReferenceUrl(s.Link); - var text = Url.ParseReferenceAsText(string.IsNullOrWhiteSpace(s.Description) ? s.Link : "{0}".With(s.Description)); - var regex = new System.Text.RegularExpressions.Regex(@"\sor\s", System.Text.RegularExpressions.RegexOptions.Multiline | System.Text.RegularExpressions.RegexOptions.IgnorePatternWhitespace); - foreach(var item in regex.Split(text)) { - - - - - } - } -
TypeDescription
- @if(link.StartsWith("#")) { - @reference - } else { - @reference - } - @item
-
- } - - @if(Model.SeeAlsos.Any() || Model.Sees.Any()) { -

References

-
- - @foreach(var s in Model.SeeAlsos.Concat(Model.Sees)) { - if(!string.IsNullOrWhiteSpace(s.Link)) { - var text = Url.ParseReferenceAsText(string.IsNullOrWhiteSpace(s.Description) ? s.Link : s.Description); - // process the link to internals. - var link = Url.ParseReferenceUrl(s.Link); - - - - } - } -
- @if(link.StartsWith("#")) { - @text - } else { - @text - } -
-
- } -
\ No newline at end of file diff --git a/Madb.Site/Views/Documentation/DisplayTemplates/MethodModel.cshtml b/Madb.Site/Views/Documentation/DisplayTemplates/MethodModel.cshtml deleted file mode 100644 index edfd4bf6..00000000 --- a/Madb.Site/Views/Documentation/DisplayTemplates/MethodModel.cshtml +++ /dev/null @@ -1,35 +0,0 @@ -@using Camalot.Common.Extensions; -@using Camalot.Common.Mvc.Extensions; -@using Madb.Site.Extensions; - -@model Madb.Site.Models.Documentation.MethodModel - -
- - @if(Model.Documentation != null) { - @Html.DisplayFor(x => Model.Documentation) - } -
\ No newline at end of file diff --git a/Madb.Site/Views/Documentation/DisplayTemplates/NamespaceModel.cshtml b/Madb.Site/Views/Documentation/DisplayTemplates/NamespaceModel.cshtml deleted file mode 100644 index 0f57b5c5..00000000 --- a/Madb.Site/Views/Documentation/DisplayTemplates/NamespaceModel.cshtml +++ /dev/null @@ -1,16 +0,0 @@ -@using Madb.Site.Extensions; - -@model Madb.Site.Models.Documentation.NamespaceModel - -
- -
- @foreach(var c in Model.Classes) { - if(!c.Ignore) { - @Html.DisplayFor(d => c) - } - } -
-
\ No newline at end of file diff --git a/Madb.Site/Views/Documentation/DisplayTemplates/ParameterModel.cshtml b/Madb.Site/Views/Documentation/DisplayTemplates/ParameterModel.cshtml deleted file mode 100644 index 4bfe0d5e..00000000 --- a/Madb.Site/Views/Documentation/DisplayTemplates/ParameterModel.cshtml +++ /dev/null @@ -1,12 +0,0 @@ -@using Madb.Site.Models.Documentation; -@using Madb.Site.Extensions; -@using Camalot.Common.Extensions; -@using Camalot.Common.Mvc.Extensions; -@model ParameterModel - - @Html.DisplayFor(m => Model.Type.BaseType) - @Html.Icon("fa-forward", Model.IsIn, "In") - @Html.Icon("fa-reply", Model.IsIn, "Out") - @Model.Name - \ No newline at end of file diff --git a/Madb.Site/Views/Documentation/DisplayTemplates/PropertyModel.cshtml b/Madb.Site/Views/Documentation/DisplayTemplates/PropertyModel.cshtml deleted file mode 100644 index 0f110aea..00000000 --- a/Madb.Site/Views/Documentation/DisplayTemplates/PropertyModel.cshtml +++ /dev/null @@ -1,26 +0,0 @@ -@using Camalot.Common.Extensions; -@using Camalot.Common.Mvc.Extensions; -@using Madb.Site.Extensions; - -@model Madb.Site.Models.Documentation.PropertyModel - -
- - @if(Model.Documentation != null) { - @Html.DisplayFor(x => Model.Documentation) - } -
diff --git a/Madb.Site/Views/Documentation/DisplayTemplates/Type.cshtml b/Madb.Site/Views/Documentation/DisplayTemplates/Type.cshtml deleted file mode 100644 index b21500eb..00000000 --- a/Madb.Site/Views/Documentation/DisplayTemplates/Type.cshtml +++ /dev/null @@ -1,12 +0,0 @@ -@model Type -@{ - var typeUrl = Url.UrlForType(Model); - var isExternal = !typeUrl.StartsWith("#"); - var scrollOffset = -70; -} -@if(isExternal) {@Model.ToSafeName()} else {@Model.ToSafeName()} diff --git a/Madb.Site/Views/Documentation/Index.cshtml b/Madb.Site/Views/Documentation/Index.cshtml deleted file mode 100644 index 4340f0d6..00000000 --- a/Madb.Site/Views/Documentation/Index.cshtml +++ /dev/null @@ -1,45 +0,0 @@ -@model Madb.Site.Models.Documentation.NamespaceModel - -@{ - ViewBag.Title = Model.Name; -} - -@section featured { -
- -} - -@(Html.Partial("_AboutPartial")) -@(Html.Partial("_NugetPartial")) -@(Html.Partial("_LicensePartial")) - -
- @(Html.Partial("_AdPartial")) -
-

Documentation

-
- @foreach(var ns in Model.Namespaces) { - if(!ns.Ignore) { - @(Html.Partial("_AdPartial")) - @Html.DisplayFor(d => ns) - } - } -
-
-
diff --git a/Madb.Site/Views/Documentation/Navigation.cshtml b/Madb.Site/Views/Documentation/Navigation.cshtml deleted file mode 100644 index 8afc37a5..00000000 --- a/Madb.Site/Views/Documentation/Navigation.cshtml +++ /dev/null @@ -1,109 +0,0 @@ -@using Madb.Site.Models.Documentation; - -@model NamespaceModel -@{ - const int scrollTopOffset = -70; - var id = ViewContext.ParentActionViewContext.RouteData.Values["id"] == null ? "" : ViewContext.ParentActionViewContext.RouteData.Values["id"].ToString(); - var fullNav = Model.Name.Equals(id, StringComparison.InvariantCultureIgnoreCase); - -} - -@helper SafeNamespaceName(string ns) { - if(ns.Equals(Model.Name)) { - @Model.Name - } else { - @ns.Substring(Model.Name.Length + 1) - } -} - - -@helper DisplayNamespace(NamespaceModel ns, int offset) { - if(!ns.Ignore) { -
  • - @SafeNamespaceName(ns.Name) - @if(ns.Classes.Count > 0) { - - } -
  • - } -} - - -@helper DisplayRootNamespace(int offset) { - var root = Model.Namespaces.First(m => m.Name == Model.Name); - if(!root.Ignore) { -
  • - @root.Name - @if(root.Classes.Count > 0 || root.Namespaces.Count > 0) { - - } -
  • - } -} -@helper DisplayClass(ClassModel cm, int offset) { - if(!cm.Ignore) { -
  • - @cm.Name - @if(cm.Properties.Count > 0 || cm.Methods.Count > 0) { - - } -
  • - } -} - -@helper DisplayProperty(PropertyModel pm, int offset) { - if(!pm.Ignore) { -
  • @pm.Name
  • - } -} - -@helper DisplayMethod(MethodModel mm, int offset) { - if(!mm.Ignore) { -
  • @mm.Name
  • - } -} - -@if(fullNav) { -
  • - @DisplayRootNamespace(scrollTopOffset) -
  • -} else { -
  • - @Model.Name -
  • -} diff --git a/Madb.Site/Views/Documentation/_AboutPartial.cshtml b/Madb.Site/Views/Documentation/_AboutPartial.cshtml deleted file mode 100644 index 44ad2213..00000000 --- a/Madb.Site/Views/Documentation/_AboutPartial.cshtml +++ /dev/null @@ -1,13 +0,0 @@ -
    - @(Html.Partial("_AdPartial")) -
    -

    About

    -
    -

    - This is a Managed port of the Android Debug Bridge to allow communication from .NET applications to Android devices. - This wraps the same methods that the ddms uses to directly communicate with ADB. This gives more flexibility to the developer - than launching an adb process and executing one of its built in commands. -

    -
    -
    -
    diff --git a/Madb.Site/Views/Documentation/_LicensePartial.cshtml b/Madb.Site/Views/Documentation/_LicensePartial.cshtml deleted file mode 100644 index 29ad4f2e..00000000 --- a/Madb.Site/Views/Documentation/_LicensePartial.cshtml +++ /dev/null @@ -1,11 +0,0 @@ -
    - @(Html.Partial("_AdPartial")) -
    -

    License

    -
    -
    - @(Html.Action("Gist", new { controller = "assets", id = "3d408440566327fe5c62" })) -
    -
    -
    -
    \ No newline at end of file diff --git a/Madb.Site/Views/Documentation/_NugetPartial.cshtml b/Madb.Site/Views/Documentation/_NugetPartial.cshtml deleted file mode 100644 index 1808266f..00000000 --- a/Madb.Site/Views/Documentation/_NugetPartial.cshtml +++ /dev/null @@ -1,16 +0,0 @@ -
    - @(Html.Partial("_AdPartial")) -
    -

    Nuget

    -
    -
    - PM> Install-Package Managed.Adb -
    - - -
    -
    -
    -
    -
    -
    \ No newline at end of file diff --git a/Madb.Site/Views/Shared/AdSense.cshtml b/Madb.Site/Views/Shared/AdSense.cshtml deleted file mode 100644 index 48f19ca3..00000000 --- a/Madb.Site/Views/Shared/AdSense.cshtml +++ /dev/null @@ -1,8 +0,0 @@ -@model Madb.Site.Models.AdSenseModel - - - - \ No newline at end of file diff --git a/Madb.Site/Views/Shared/Analytics.cshtml b/Madb.Site/Views/Shared/Analytics.cshtml deleted file mode 100644 index 10158fca..00000000 --- a/Madb.Site/Views/Shared/Analytics.cshtml +++ /dev/null @@ -1,8 +0,0 @@ - diff --git a/Madb.Site/Views/Shared/Error.cshtml b/Madb.Site/Views/Shared/Error.cshtml deleted file mode 100644 index fff6c861..00000000 --- a/Madb.Site/Views/Shared/Error.cshtml +++ /dev/null @@ -1,9 +0,0 @@ -@model System.Web.Mvc.HandleErrorInfo - -@{ - ViewBag.Title = "Error"; -} - -

    Error.

    -

    An error occurred while processing your request.

    - diff --git a/Madb.Site/Views/Shared/Paypal.cshtml b/Madb.Site/Views/Shared/Paypal.cshtml deleted file mode 100644 index cfc9361a..00000000 --- a/Madb.Site/Views/Shared/Paypal.cshtml +++ /dev/null @@ -1,6 +0,0 @@ -
    - - - - -
    \ No newline at end of file diff --git a/Madb.Site/Views/Shared/_AdPartial.cshtml b/Madb.Site/Views/Shared/_AdPartial.cshtml deleted file mode 100644 index bd0ffa8c..00000000 --- a/Madb.Site/Views/Shared/_AdPartial.cshtml +++ /dev/null @@ -1,7 +0,0 @@ -
    - @(Html.Partial("AdSense", new Madb.Site.Models.AdSenseModel { - PublisherId = "ca-pub-9157593394596390", - Slot = "4102865437", - Name = "responsivewin8" -})) -
    \ No newline at end of file diff --git a/Madb.Site/Views/Shared/_AddThisCountPartial.cshtml b/Madb.Site/Views/Shared/_AddThisCountPartial.cshtml deleted file mode 100644 index 24b1a45e..00000000 --- a/Madb.Site/Views/Shared/_AddThisCountPartial.cshtml +++ /dev/null @@ -1,9 +0,0 @@ - -
    - - - -
    - - - \ No newline at end of file diff --git a/Madb.Site/Views/Shared/_AddThisSideBarPartial.cshtml b/Madb.Site/Views/Shared/_AddThisSideBarPartial.cshtml deleted file mode 100644 index 1a1a53fd..00000000 --- a/Madb.Site/Views/Shared/_AddThisSideBarPartial.cshtml +++ /dev/null @@ -1,12 +0,0 @@ -@**@ - - \ No newline at end of file diff --git a/Madb.Site/Views/Shared/_DirectLink.cshtml b/Madb.Site/Views/Shared/_DirectLink.cshtml deleted file mode 100644 index 0d0b88e2..00000000 --- a/Madb.Site/Views/Shared/_DirectLink.cshtml +++ /dev/null @@ -1,3 +0,0 @@ -@model string - - \ No newline at end of file diff --git a/Madb.Site/Views/Shared/_IconPartial.cshtml b/Madb.Site/Views/Shared/_IconPartial.cshtml deleted file mode 100644 index 089bccd8..00000000 --- a/Madb.Site/Views/Shared/_IconPartial.cshtml +++ /dev/null @@ -1,2 +0,0 @@ -@model Madb.Site.Models.IconHelperModel -@if(Model.Show) { } \ No newline at end of file diff --git a/Madb.Site/Views/Shared/_Layout.cshtml b/Madb.Site/Views/Shared/_Layout.cshtml deleted file mode 100644 index 07ce7311..00000000 --- a/Madb.Site/Views/Shared/_Layout.cshtml +++ /dev/null @@ -1,63 +0,0 @@ - - - - - @(Html.SiteName()):@(ViewBag.Title) - - - - - - - - - - - - - - - - - - - - @(Styles.Render("~/css/site")) - @(RenderSection("styles", required: false)) - - - -
    - @(Html.Partial("_Navbar")) -
    -
    - @(RenderSection("featured", required: false)) - @(RenderBody()) -
    -
    - - -
    -
    -
    -

    Copyright © Ryan Conrad @DateTime.Now.Year. All Rights Reserved.

    -
    -
    -
    - - @(Scripts.Render("~/js/jquery")) - @(Scripts.Render("~/js/bootstrap")) - @(Scripts.Render("~/js/mousetrap")) - @(Scripts.Render("~/js/system")) - @(Html.Partial("_SideNavPartial")) - @(RenderSection("scripts", required: false)) - @(Html.Partial("Analytics")) - @*@(Html.Partial("_AddThisSideBarPartial"))*@ - -
    - -
    - - - - diff --git a/Madb.Site/Views/Shared/_NavBar.cshtml b/Madb.Site/Views/Shared/_NavBar.cshtml deleted file mode 100644 index 0b13a9a8..00000000 --- a/Madb.Site/Views/Shared/_NavBar.cshtml +++ /dev/null @@ -1,51 +0,0 @@ -@{ - var scrollTopOffset = -50; -} - \ No newline at end of file diff --git a/Madb.Site/Views/Shared/_SideNavPartial.cshtml b/Madb.Site/Views/Shared/_SideNavPartial.cshtml deleted file mode 100644 index d15f295e..00000000 --- a/Madb.Site/Views/Shared/_SideNavPartial.cshtml +++ /dev/null @@ -1,32 +0,0 @@ -@using Madb.Site.Models; -@{ - var navPosition = NavigationPositions.Right; - var scrollTopOffset = -70; -} - -
    -
    - - - -
    -
    -
    - -
    - diff --git a/Madb.Site/Views/Web.config b/Madb.Site/Views/Web.config deleted file mode 100644 index 3c345794..00000000 --- a/Madb.Site/Views/Web.config +++ /dev/null @@ -1,38 +0,0 @@ - - - - - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Madb.Site/Views/_ViewStart.cshtml b/Madb.Site/Views/_ViewStart.cshtml deleted file mode 100644 index b0180250..00000000 --- a/Madb.Site/Views/_ViewStart.cshtml +++ /dev/null @@ -1,3 +0,0 @@ -@{ - Layout = "~/Views/Shared/_Layout.cshtml"; -} diff --git a/Madb.Site/Web.Debug.config b/Madb.Site/Web.Debug.config deleted file mode 100644 index d425e94b..00000000 --- a/Madb.Site/Web.Debug.config +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - diff --git a/Madb.Site/Web.Release.config b/Madb.Site/Web.Release.config deleted file mode 100644 index 829eb4b8..00000000 --- a/Madb.Site/Web.Release.config +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - diff --git a/Madb.Site/Web.config b/Madb.Site/Web.config deleted file mode 100644 index 961ab9d3..00000000 --- a/Madb.Site/Web.config +++ /dev/null @@ -1,144 +0,0 @@ - - - - - -
    - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Madb.Site/assets/Scripts/_references.js b/Madb.Site/assets/Scripts/_references.js deleted file mode 100644 index 1d77f6c65cc55feb5fee3a90de38a73748e7f0d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 750 zcmb`E%?iRm420(__zuOp74_mleV4Xd(b7Nr2m0{pm+f7_mL+W1Br}uQ_iH0NfsTsQ zt5c;`50y%IOSvP(%E_EgT2XK4O34DI&RS~W=SPHw%7w7o5K_8o5ISA`bOE~a^-?!I z>04{3PzPd9WN`n7oayd$HE0htz?s9~Ja@`VkDiK6M*S_d0Uc8qZO4}FDv%vW1(@Z` zh~`{^cLiJy{0RJr%=ztFs^+u#JqQ0U59j%v@yE9)wwUf(%nwvJVQw_IQ-4AI0AU$= AwEzGB diff --git a/Madb.Site/assets/Scripts/bootstrap.js b/Madb.Site/assets/Scripts/bootstrap.js deleted file mode 100644 index 53da1c77..00000000 --- a/Madb.Site/assets/Scripts/bootstrap.js +++ /dev/null @@ -1,2114 +0,0 @@ -/*! - * Bootstrap v3.2.0 (http://getbootstrap.com) - * Copyright 2011-2014 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ - -if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript requires jQuery') } - -/* ======================================================================== - * Bootstrap: transition.js v3.2.0 - * http://getbootstrap.com/javascript/#transitions - * ======================================================================== - * Copyright 2011-2014 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * ======================================================================== */ - - -+function ($) { - 'use strict'; - - // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/) - // ============================================================ - - function transitionEnd() { - var el = document.createElement('bootstrap') - - var transEndEventNames = { - WebkitTransition : 'webkitTransitionEnd', - MozTransition : 'transitionend', - OTransition : 'oTransitionEnd otransitionend', - transition : 'transitionend' - } - - for (var name in transEndEventNames) { - if (el.style[name] !== undefined) { - return { end: transEndEventNames[name] } - } - } - - return false // explicit for ie8 ( ._.) - } - - // http://blog.alexmaccaw.com/css-transitions - $.fn.emulateTransitionEnd = function (duration) { - var called = false - var $el = this - $(this).one('bsTransitionEnd', function () { called = true }) - var callback = function () { if (!called) $($el).trigger($.support.transition.end) } - setTimeout(callback, duration) - return this - } - - $(function () { - $.support.transition = transitionEnd() - - if (!$.support.transition) return - - $.event.special.bsTransitionEnd = { - bindType: $.support.transition.end, - delegateType: $.support.transition.end, - handle: function (e) { - if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments) - } - } - }) - -}(jQuery); - -/* ======================================================================== - * Bootstrap: alert.js v3.2.0 - * http://getbootstrap.com/javascript/#alerts - * ======================================================================== - * Copyright 2011-2014 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * ======================================================================== */ - - -+function ($) { - 'use strict'; - - // ALERT CLASS DEFINITION - // ====================== - - var dismiss = '[data-dismiss="alert"]' - var Alert = function (el) { - $(el).on('click', dismiss, this.close) - } - - Alert.VERSION = '3.2.0' - - Alert.prototype.close = function (e) { - var $this = $(this) - var selector = $this.attr('data-target') - - if (!selector) { - selector = $this.attr('href') - selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 - } - - var $parent = $(selector) - - if (e) e.preventDefault() - - if (!$parent.length) { - $parent = $this.hasClass('alert') ? $this : $this.parent() - } - - $parent.trigger(e = $.Event('close.bs.alert')) - - if (e.isDefaultPrevented()) return - - $parent.removeClass('in') - - function removeElement() { - // detach from parent, fire event then clean up data - $parent.detach().trigger('closed.bs.alert').remove() - } - - $.support.transition && $parent.hasClass('fade') ? - $parent - .one('bsTransitionEnd', removeElement) - .emulateTransitionEnd(150) : - removeElement() - } - - - // ALERT PLUGIN DEFINITION - // ======================= - - function Plugin(option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.alert') - - if (!data) $this.data('bs.alert', (data = new Alert(this))) - if (typeof option == 'string') data[option].call($this) - }) - } - - var old = $.fn.alert - - $.fn.alert = Plugin - $.fn.alert.Constructor = Alert - - - // ALERT NO CONFLICT - // ================= - - $.fn.alert.noConflict = function () { - $.fn.alert = old - return this - } - - - // ALERT DATA-API - // ============== - - $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close) - -}(jQuery); - -/* ======================================================================== - * Bootstrap: button.js v3.2.0 - * http://getbootstrap.com/javascript/#buttons - * ======================================================================== - * Copyright 2011-2014 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * ======================================================================== */ - - -+function ($) { - 'use strict'; - - // BUTTON PUBLIC CLASS DEFINITION - // ============================== - - var Button = function (element, options) { - this.$element = $(element) - this.options = $.extend({}, Button.DEFAULTS, options) - this.isLoading = false - } - - Button.VERSION = '3.2.0' - - Button.DEFAULTS = { - loadingText: 'loading...' - } - - Button.prototype.setState = function (state) { - var d = 'disabled' - var $el = this.$element - var val = $el.is('input') ? 'val' : 'html' - var data = $el.data() - - state = state + 'Text' - - if (data.resetText == null) $el.data('resetText', $el[val]()) - - $el[val](data[state] == null ? this.options[state] : data[state]) - - // push to event loop to allow forms to submit - setTimeout($.proxy(function () { - if (state == 'loadingText') { - this.isLoading = true - $el.addClass(d).attr(d, d) - } else if (this.isLoading) { - this.isLoading = false - $el.removeClass(d).removeAttr(d) - } - }, this), 0) - } - - Button.prototype.toggle = function () { - var changed = true - var $parent = this.$element.closest('[data-toggle="buttons"]') - - if ($parent.length) { - var $input = this.$element.find('input') - if ($input.prop('type') == 'radio') { - if ($input.prop('checked') && this.$element.hasClass('active')) changed = false - else $parent.find('.active').removeClass('active') - } - if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change') - } - - if (changed) this.$element.toggleClass('active') - } - - - // BUTTON PLUGIN DEFINITION - // ======================== - - function Plugin(option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.button') - var options = typeof option == 'object' && option - - if (!data) $this.data('bs.button', (data = new Button(this, options))) - - if (option == 'toggle') data.toggle() - else if (option) data.setState(option) - }) - } - - var old = $.fn.button - - $.fn.button = Plugin - $.fn.button.Constructor = Button - - - // BUTTON NO CONFLICT - // ================== - - $.fn.button.noConflict = function () { - $.fn.button = old - return this - } - - - // BUTTON DATA-API - // =============== - - $(document).on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) { - var $btn = $(e.target) - if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') - Plugin.call($btn, 'toggle') - e.preventDefault() - }) - -}(jQuery); - -/* ======================================================================== - * Bootstrap: carousel.js v3.2.0 - * http://getbootstrap.com/javascript/#carousel - * ======================================================================== - * Copyright 2011-2014 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * ======================================================================== */ - - -+function ($) { - 'use strict'; - - // CAROUSEL CLASS DEFINITION - // ========================= - - var Carousel = function (element, options) { - this.$element = $(element).on('keydown.bs.carousel', $.proxy(this.keydown, this)) - this.$indicators = this.$element.find('.carousel-indicators') - this.options = options - this.paused = - this.sliding = - this.interval = - this.$active = - this.$items = null - - this.options.pause == 'hover' && this.$element - .on('mouseenter.bs.carousel', $.proxy(this.pause, this)) - .on('mouseleave.bs.carousel', $.proxy(this.cycle, this)) - } - - Carousel.VERSION = '3.2.0' - - Carousel.DEFAULTS = { - interval: 5000, - pause: 'hover', - wrap: true - } - - Carousel.prototype.keydown = function (e) { - switch (e.which) { - case 37: this.prev(); break - case 39: this.next(); break - default: return - } - - e.preventDefault() - } - - Carousel.prototype.cycle = function (e) { - e || (this.paused = false) - - this.interval && clearInterval(this.interval) - - this.options.interval - && !this.paused - && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) - - return this - } - - Carousel.prototype.getItemIndex = function (item) { - this.$items = item.parent().children('.item') - return this.$items.index(item || this.$active) - } - - Carousel.prototype.to = function (pos) { - var that = this - var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active')) - - if (pos > (this.$items.length - 1) || pos < 0) return - - if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid" - if (activeIndex == pos) return this.pause().cycle() - - return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos])) - } - - Carousel.prototype.pause = function (e) { - e || (this.paused = true) - - if (this.$element.find('.next, .prev').length && $.support.transition) { - this.$element.trigger($.support.transition.end) - this.cycle(true) - } - - this.interval = clearInterval(this.interval) - - return this - } - - Carousel.prototype.next = function () { - if (this.sliding) return - return this.slide('next') - } - - Carousel.prototype.prev = function () { - if (this.sliding) return - return this.slide('prev') - } - - Carousel.prototype.slide = function (type, next) { - var $active = this.$element.find('.item.active') - var $next = next || $active[type]() - var isCycling = this.interval - var direction = type == 'next' ? 'left' : 'right' - var fallback = type == 'next' ? 'first' : 'last' - var that = this - - if (!$next.length) { - if (!this.options.wrap) return - $next = this.$element.find('.item')[fallback]() - } - - if ($next.hasClass('active')) return (this.sliding = false) - - var relatedTarget = $next[0] - var slideEvent = $.Event('slide.bs.carousel', { - relatedTarget: relatedTarget, - direction: direction - }) - this.$element.trigger(slideEvent) - if (slideEvent.isDefaultPrevented()) return - - this.sliding = true - - isCycling && this.pause() - - if (this.$indicators.length) { - this.$indicators.find('.active').removeClass('active') - var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)]) - $nextIndicator && $nextIndicator.addClass('active') - } - - var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid" - if ($.support.transition && this.$element.hasClass('slide')) { - $next.addClass(type) - $next[0].offsetWidth // force reflow - $active.addClass(direction) - $next.addClass(direction) - $active - .one('bsTransitionEnd', function () { - $next.removeClass([type, direction].join(' ')).addClass('active') - $active.removeClass(['active', direction].join(' ')) - that.sliding = false - setTimeout(function () { - that.$element.trigger(slidEvent) - }, 0) - }) - .emulateTransitionEnd($active.css('transition-duration').slice(0, -1) * 1000) - } else { - $active.removeClass('active') - $next.addClass('active') - this.sliding = false - this.$element.trigger(slidEvent) - } - - isCycling && this.cycle() - - return this - } - - - // CAROUSEL PLUGIN DEFINITION - // ========================== - - function Plugin(option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.carousel') - var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option) - var action = typeof option == 'string' ? option : options.slide - - if (!data) $this.data('bs.carousel', (data = new Carousel(this, options))) - if (typeof option == 'number') data.to(option) - else if (action) data[action]() - else if (options.interval) data.pause().cycle() - }) - } - - var old = $.fn.carousel - - $.fn.carousel = Plugin - $.fn.carousel.Constructor = Carousel - - - // CAROUSEL NO CONFLICT - // ==================== - - $.fn.carousel.noConflict = function () { - $.fn.carousel = old - return this - } - - - // CAROUSEL DATA-API - // ================= - - $(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e) { - var href - var $this = $(this) - var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7 - if (!$target.hasClass('carousel')) return - var options = $.extend({}, $target.data(), $this.data()) - var slideIndex = $this.attr('data-slide-to') - if (slideIndex) options.interval = false - - Plugin.call($target, options) - - if (slideIndex) { - $target.data('bs.carousel').to(slideIndex) - } - - e.preventDefault() - }) - - $(window).on('load', function () { - $('[data-ride="carousel"]').each(function () { - var $carousel = $(this) - Plugin.call($carousel, $carousel.data()) - }) - }) - -}(jQuery); - -/* ======================================================================== - * Bootstrap: collapse.js v3.2.0 - * http://getbootstrap.com/javascript/#collapse - * ======================================================================== - * Copyright 2011-2014 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * ======================================================================== */ - - -+function ($) { - 'use strict'; - - // COLLAPSE PUBLIC CLASS DEFINITION - // ================================ - - var Collapse = function (element, options) { - this.$element = $(element) - this.options = $.extend({}, Collapse.DEFAULTS, options) - this.transitioning = null - - if (this.options.parent) this.$parent = $(this.options.parent) - if (this.options.toggle) this.toggle() - } - - Collapse.VERSION = '3.2.0' - - Collapse.DEFAULTS = { - toggle: true - } - - Collapse.prototype.dimension = function () { - var hasWidth = this.$element.hasClass('width') - return hasWidth ? 'width' : 'height' - } - - Collapse.prototype.show = function () { - if (this.transitioning || this.$element.hasClass('in')) return - - var startEvent = $.Event('show.bs.collapse') - this.$element.trigger(startEvent) - if (startEvent.isDefaultPrevented()) return - - var actives = this.$parent && this.$parent.find('> .panel > .in') - - if (actives && actives.length) { - var hasData = actives.data('bs.collapse') - if (hasData && hasData.transitioning) return - Plugin.call(actives, 'hide') - hasData || actives.data('bs.collapse', null) - } - - var dimension = this.dimension() - - this.$element - .removeClass('collapse') - .addClass('collapsing')[dimension](0) - - this.transitioning = 1 - - var complete = function () { - this.$element - .removeClass('collapsing') - .addClass('collapse in')[dimension]('') - this.transitioning = 0 - this.$element - .trigger('shown.bs.collapse') - } - - if (!$.support.transition) return complete.call(this) - - var scrollSize = $.camelCase(['scroll', dimension].join('-')) - - this.$element - .one('bsTransitionEnd', $.proxy(complete, this)) - .emulateTransitionEnd(350)[dimension](this.$element[0][scrollSize]) - } - - Collapse.prototype.hide = function () { - if (this.transitioning || !this.$element.hasClass('in')) return - - var startEvent = $.Event('hide.bs.collapse') - this.$element.trigger(startEvent) - if (startEvent.isDefaultPrevented()) return - - var dimension = this.dimension() - - this.$element[dimension](this.$element[dimension]())[0].offsetHeight - - this.$element - .addClass('collapsing') - .removeClass('collapse') - .removeClass('in') - - this.transitioning = 1 - - var complete = function () { - this.transitioning = 0 - this.$element - .trigger('hidden.bs.collapse') - .removeClass('collapsing') - .addClass('collapse') - } - - if (!$.support.transition) return complete.call(this) - - this.$element - [dimension](0) - .one('bsTransitionEnd', $.proxy(complete, this)) - .emulateTransitionEnd(350) - } - - Collapse.prototype.toggle = function () { - this[this.$element.hasClass('in') ? 'hide' : 'show']() - } - - - // COLLAPSE PLUGIN DEFINITION - // ========================== - - function Plugin(option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.collapse') - var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option) - - if (!data && options.toggle && option == 'show') option = !option - if (!data) $this.data('bs.collapse', (data = new Collapse(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - var old = $.fn.collapse - - $.fn.collapse = Plugin - $.fn.collapse.Constructor = Collapse - - - // COLLAPSE NO CONFLICT - // ==================== - - $.fn.collapse.noConflict = function () { - $.fn.collapse = old - return this - } - - - // COLLAPSE DATA-API - // ================= - - $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) { - var href - var $this = $(this) - var target = $this.attr('data-target') - || e.preventDefault() - || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7 - var $target = $(target) - var data = $target.data('bs.collapse') - var option = data ? 'toggle' : $this.data() - var parent = $this.attr('data-parent') - var $parent = parent && $(parent) - - if (!data || !data.transitioning) { - if ($parent) $parent.find('[data-toggle="collapse"][data-parent="' + parent + '"]').not($this).addClass('collapsed') - $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed') - } - - Plugin.call($target, option) - }) - -}(jQuery); - -/* ======================================================================== - * Bootstrap: dropdown.js v3.2.0 - * http://getbootstrap.com/javascript/#dropdowns - * ======================================================================== - * Copyright 2011-2014 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * ======================================================================== */ - - -+function ($) { - 'use strict'; - - // DROPDOWN CLASS DEFINITION - // ========================= - - var backdrop = '.dropdown-backdrop' - var toggle = '[data-toggle="dropdown"]' - var Dropdown = function (element) { - $(element).on('click.bs.dropdown', this.toggle) - } - - Dropdown.VERSION = '3.2.0' - - Dropdown.prototype.toggle = function (e) { - var $this = $(this) - - if ($this.is('.disabled, :disabled')) return - - var $parent = getParent($this) - var isActive = $parent.hasClass('open') - - clearMenus() - - if (!isActive) { - if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) { - // if mobile we use a backdrop because click events don't delegate - $('