mirror of
https://github.com/Sonarr/Sonarr.git
synced 2026-03-05 13:20:20 -05:00
Compare commits
3 Commits
curl-upgra
...
v2.0.0.285
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4394860fac | ||
|
|
1eeb40aede | ||
|
|
7aaf40d9d4 |
@@ -1,25 +0,0 @@
|
||||
# This file is for unifying the coding style for different editors and IDEs
|
||||
# editorconfig.org
|
||||
root = true
|
||||
|
||||
[*.{cs,html,js,hbs}]
|
||||
charset = utf-8
|
||||
trim_trailing_whitespace = true
|
||||
insert_final_newline = true
|
||||
indent_style = space
|
||||
indent_size = 4
|
||||
|
||||
[*.less]
|
||||
charset = utf-8
|
||||
trim_trailing_whitespace = true
|
||||
insert_final_newline = true
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
|
||||
# They have troubles with TABS. Use 2 spaces
|
||||
[{package.json,.travis.yml}]
|
||||
charset = utf-8
|
||||
trim_trailing_whitespace = true
|
||||
insert_final_newline = true
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
5
.github/ISSUE_TEMPLATE.md
vendored
5
.github/ISSUE_TEMPLATE.md
vendored
@@ -1,5 +0,0 @@
|
||||
|
||||
|
||||
|
||||
Provide a description of the feature request or bug, the more details the better.
|
||||
Please use https://forums.sonarr.tv/ for support or other questions. (When in doubt, use the forums)
|
||||
14
.github/PULL_REQUEST_TEMPLATE.md
vendored
14
.github/PULL_REQUEST_TEMPLATE.md
vendored
@@ -1,14 +0,0 @@
|
||||
#### Database Migration
|
||||
YES | NO
|
||||
|
||||
#### Description
|
||||
A few sentences describing the overall goals of the pull request's commits.
|
||||
|
||||
#### Todos
|
||||
- [ ] Tests
|
||||
- [ ] Documentation
|
||||
|
||||
|
||||
#### Issues Fixed or Closed by this PR
|
||||
|
||||
*
|
||||
23
.gitignore
vendored
23
.gitignore
vendored
@@ -10,7 +10,6 @@ src/**/[Oo]bj/
|
||||
*.suo
|
||||
*.user
|
||||
*.sln.docstates
|
||||
.vs/
|
||||
|
||||
# Build results
|
||||
*_i.c
|
||||
@@ -42,9 +41,6 @@ src/**/[Oo]bj/
|
||||
_ReSharper*
|
||||
_dotCover*
|
||||
|
||||
# DevExpress CodeRush
|
||||
src/.cr/
|
||||
|
||||
# NCrunch
|
||||
*.ncrunch*
|
||||
.*crunch*.local.xml
|
||||
@@ -101,7 +97,7 @@ App_Data/*.ldf
|
||||
_NCrunch_*
|
||||
_TeamCity*
|
||||
|
||||
# Sonarr
|
||||
# NzbDrone
|
||||
config.xml
|
||||
nzbdrone.log*txt
|
||||
UpdateLogs/
|
||||
@@ -109,7 +105,7 @@ UpdateLogs/
|
||||
*.test-cache
|
||||
*.userprefs
|
||||
*/test-results/*
|
||||
src/UI/.idea/*
|
||||
.idea/*
|
||||
*log.txt
|
||||
node_modules/
|
||||
_output*
|
||||
@@ -117,21 +113,12 @@ _rawPackage/
|
||||
_dotTrace*
|
||||
_tests/
|
||||
*.Result.xml
|
||||
wix/*.msi
|
||||
wix/*.wixobj
|
||||
wix/*.wixpdb
|
||||
setup/Output/
|
||||
*.~is
|
||||
|
||||
UI.Phantom/
|
||||
|
||||
#VS outout folders
|
||||
bin
|
||||
obj
|
||||
output/*
|
||||
|
||||
|
||||
#OS X metadata files
|
||||
._*
|
||||
|
||||
_start
|
||||
_temp_*/**/*
|
||||
|
||||
src/.idea/
|
||||
|
||||
4
.gitmodules
vendored
4
.gitmodules
vendored
@@ -1,4 +0,0 @@
|
||||
[submodule "src/ExternalModules/CurlSharp"]
|
||||
path = src/ExternalModules/CurlSharp
|
||||
url = https://github.com/Sonarr/CurlSharp.git
|
||||
branch = master
|
||||
1
.idea/.name
generated
1
.idea/.name
generated
@@ -1 +0,0 @@
|
||||
Sonarr
|
||||
25
.idea/Sonarr.iml
generated
25
.idea/Sonarr.iml
generated
@@ -1,25 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="WEB_MODULE" version="4">
|
||||
<component name="NewModuleRootManager">
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<excludeFolder url="file://$MODULE_DIR$/.idea" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/Logo" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/_output" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/_output_mono" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/_output_osx" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/_output_osx_app" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/_start" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/_tests" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/debian" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/node_modules" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/osx" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/schemas" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/setup" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/src" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/tools" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
<orderEntry type="library" name="Sonarr node_modules" level="project" />
|
||||
</component>
|
||||
</module>
|
||||
59
.idea/codeStyleSettings.xml
generated
59
.idea/codeStyleSettings.xml
generated
@@ -1,59 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectCodeStyleSettingsManager">
|
||||
<option name="PER_PROJECT_SETTINGS">
|
||||
<value>
|
||||
<option name="LINE_SEPARATOR" value=" " />
|
||||
<option name="RIGHT_MARGIN" value="190" />
|
||||
<option name="HTML_ATTRIBUTE_WRAP" value="0" />
|
||||
<option name="HTML_KEEP_LINE_BREAKS" value="false" />
|
||||
<option name="HTML_KEEP_BLANK_LINES" value="1" />
|
||||
<option name="HTML_ALIGN_ATTRIBUTES" value="false" />
|
||||
<option name="HTML_INLINE_ELEMENTS" value="" />
|
||||
<option name="HTML_DONT_ADD_BREAKS_IF_INLINE_CONTENT" value="" />
|
||||
<CssCodeStyleSettings>
|
||||
<option name="HEX_COLOR_LOWER_CASE" value="true" />
|
||||
<option name="HEX_COLOR_LONG_FORMAT" value="true" />
|
||||
<option name="VALUE_ALIGNMENT" value="1" />
|
||||
</CssCodeStyleSettings>
|
||||
<JSCodeStyleSettings>
|
||||
<option name="SPACE_BEFORE_PROPERTY_COLON" value="true" />
|
||||
<option name="ALIGN_OBJECT_PROPERTIES" value="2" />
|
||||
<option name="SPACE_BEFORE_FUNCTION_LEFT_PARENTH" value="false" />
|
||||
<option name="OBJECT_LITERAL_WRAP" value="2" />
|
||||
<option name="SPACES_WITHIN_OBJECT_LITERAL_BRACES" value="true" />
|
||||
</JSCodeStyleSettings>
|
||||
<XML>
|
||||
<option name="XML_LEGACY_SETTINGS_IMPORTED" value="true" />
|
||||
</XML>
|
||||
<codeStyleSettings language="CSS">
|
||||
<indentOptions>
|
||||
<option name="SMART_TABS" value="true" />
|
||||
</indentOptions>
|
||||
</codeStyleSettings>
|
||||
<codeStyleSettings language="JavaScript">
|
||||
<option name="LINE_COMMENT_AT_FIRST_COLUMN" value="true" />
|
||||
<option name="KEEP_LINE_BREAKS" value="false" />
|
||||
<option name="KEEP_FIRST_COLUMN_COMMENT" value="false" />
|
||||
<option name="KEEP_BLANK_LINES_IN_CODE" value="1" />
|
||||
<option name="CATCH_ON_NEW_LINE" value="true" />
|
||||
<option name="FINALLY_ON_NEW_LINE" value="true" />
|
||||
<option name="ALIGN_MULTILINE_PARAMETERS" value="false" />
|
||||
<option name="ALIGN_MULTILINE_BINARY_OPERATION" value="true" />
|
||||
<option name="SPACE_BEFORE_METHOD_PARENTHESES" value="true" />
|
||||
<option name="CALL_PARAMETERS_WRAP" value="1" />
|
||||
<option name="BINARY_OPERATION_WRAP" value="1" />
|
||||
<option name="TERNARY_OPERATION_SIGNS_ON_NEXT_LINE" value="true" />
|
||||
<option name="ARRAY_INITIALIZER_WRAP" value="2" />
|
||||
<option name="ARRAY_INITIALIZER_LBRACE_ON_NEXT_LINE" value="true" />
|
||||
<option name="ARRAY_INITIALIZER_RBRACE_ON_NEXT_LINE" value="true" />
|
||||
<option name="IF_BRACE_FORCE" value="3" />
|
||||
<option name="DOWHILE_BRACE_FORCE" value="3" />
|
||||
<option name="WHILE_BRACE_FORCE" value="3" />
|
||||
<option name="FOR_BRACE_FORCE" value="3" />
|
||||
</codeStyleSettings>
|
||||
</value>
|
||||
</option>
|
||||
<option name="USE_PER_PROJECT_SETTINGS" value="true" />
|
||||
</component>
|
||||
</project>
|
||||
6
.idea/encodings.xml
generated
6
.idea/encodings.xml
generated
@@ -1,6 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="Encoding">
|
||||
<file url="PROJECT" charset="UTF-8" />
|
||||
</component>
|
||||
</project>
|
||||
6
.idea/jsLibraryMappings.xml
generated
6
.idea/jsLibraryMappings.xml
generated
@@ -1,6 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="JavaScriptLibraryMappings">
|
||||
<includedPredefinedLibrary name="ECMAScript 6" />
|
||||
</component>
|
||||
</project>
|
||||
14
.idea/libraries/Sonarr_node_modules.xml
generated
14
.idea/libraries/Sonarr_node_modules.xml
generated
@@ -1,14 +0,0 @@
|
||||
<component name="libraryTable">
|
||||
<library name="Sonarr node_modules" type="javaScript">
|
||||
<properties>
|
||||
<option name="frameworkName" value="node_modules" />
|
||||
<sourceFilesUrls>
|
||||
<item url="file://$PROJECT_DIR$/node_modules" />
|
||||
</sourceFilesUrls>
|
||||
</properties>
|
||||
<CLASSES>
|
||||
<root url="file://$PROJECT_DIR$/node_modules" />
|
||||
</CLASSES>
|
||||
<SOURCES />
|
||||
</library>
|
||||
</component>
|
||||
14
.idea/misc.xml
generated
14
.idea/misc.xml
generated
@@ -1,14 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectLevelVcsManager" settingsEditedManually="false">
|
||||
<OptionsSetting value="true" id="Add" />
|
||||
<OptionsSetting value="true" id="Remove" />
|
||||
<OptionsSetting value="true" id="Checkout" />
|
||||
<OptionsSetting value="true" id="Update" />
|
||||
<OptionsSetting value="true" id="Status" />
|
||||
<OptionsSetting value="true" id="Edit" />
|
||||
<ConfirmationsSetting value="0" id="Add" />
|
||||
<ConfirmationsSetting value="0" id="Remove" />
|
||||
</component>
|
||||
<component name="ProjectRootManager" version="2" />
|
||||
</project>
|
||||
8
.idea/modules.xml
generated
8
.idea/modules.xml
generated
@@ -1,8 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/Sonarr.iml" filepath="$PROJECT_DIR$/.idea/Sonarr.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
||||
6
.idea/vcs.xml
generated
6
.idea/vcs.xml
generated
@@ -1,6 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
||||
4
CLA.md
4
CLA.md
@@ -1,6 +1,6 @@
|
||||
# Sonarr Individual Contributor License Agreement #
|
||||
# NzbDrone Individual Contributor License Agreement #
|
||||
|
||||
Thank you for your interest in contributing to Sonarr ("We" or "Us").
|
||||
Thank you for your interest in contributing to NzbDrone ("We" or "Us").
|
||||
This contributor agreement ("Agreement") documents the rights granted by contributors to Us. To make this document effective, please complete the form below. This is a legally binding document, so please read it carefully before agreeing to it. The Agreement may cover more than one software project managed by Us.
|
||||
|
||||
## 1. Definitions ##
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# How to Contribute #
|
||||
|
||||
We're always looking for people to help make Sonarr even better, there are a number of ways to contribute.
|
||||
We're always looking for people to help make NzbDrone even better, there are a number of ways to contribute. To get started, <a href="http://www.clahub.com/agreements/NzbDrone/NzbDrone">sign the Contributor License Agreement</a>.
|
||||
|
||||
## Documentation ##
|
||||
Setup guides, FAQ, the more information we have on the wiki the better.
|
||||
@@ -8,24 +8,22 @@ Setup guides, FAQ, the more information we have on the wiki the better.
|
||||
## Development ##
|
||||
|
||||
### Tools required ###
|
||||
- Visual Studio 2015
|
||||
- HTML/Javascript editor of choice (Sublime Text/Webstorm/Atom/etc)
|
||||
- Visual Studio 2013
|
||||
- HTML/Javascript editor of choice (Sublime Text/Webstorm/etc)
|
||||
- npm (node package manager)
|
||||
- git
|
||||
|
||||
### Getting started ###
|
||||
|
||||
1. Fork Sonarr
|
||||
2. Clone (develop branch) *you may need pull in submodules separately if you client doesn't clone them automatically (CurlSharp)*
|
||||
1. Fork NzbDrone
|
||||
2. Clone (develop branch)
|
||||
3. Run `npm install`
|
||||
4. Run `npm start` - Used to compile the UI components and copy them.
|
||||
Leave this window open.
|
||||
If you have gulp globally installed you can use `gulp watch` instead
|
||||
4. Run `gulp watch` - Used to compile the UI components and copy them (leave this window open)
|
||||
5. Compile in Visual Studio
|
||||
|
||||
### Contributing Code ###
|
||||
- If you're adding a new, already requested feature, please comment on [Github Issues](https://github.com/Sonarr/Sonarr/issues "Github Issues") so work is not duplicated (If you want to add something not already on there, please talk to us first)
|
||||
- Rebase from Sonarr's develop branch, don't merge
|
||||
- If you're adding a new, already requested feature, please comment on [Trello](https://trello.sonarr.tv "Trello") so work is not duplicated (If you want to add something not already on there, please talk to us first)
|
||||
- Rebase from NzbDrone's develop branch, don't merge
|
||||
- Make meaningful commits, or squash them
|
||||
- Feel free to make a pull request before work is complete, this will let us see where its at and make comments/suggest improvements
|
||||
- Reach out to us on the forums or on IRC if you have any questions
|
||||
@@ -35,13 +33,8 @@ Setup guides, FAQ, the more information we have on the wiki the better.
|
||||
- Use 4 spaces instead of tabs, this is the default for VS 2012 and WebStorm (to my knowledge)
|
||||
|
||||
### Pull Requesting ###
|
||||
- Only make pull requests to develop, never master, if you make a PR to master we'll comment on it and close it
|
||||
- You're probably going to get some comments or questions from us, they will be to ensure consistency and maintainability
|
||||
- We'll try to respond to pull requests as soon as possible, if its been a day or two, please reach out to us, we may have missed it
|
||||
- Each PR should come from its own [feature branch](http://martinfowler.com/bliki/FeatureBranch.html) not develop in your fork, it should have a meaningful branch name (what is being added/fixed)
|
||||
- new-feature (Good)
|
||||
- fix-bug (Good)
|
||||
- patch (Bad)
|
||||
- develop (Bad)
|
||||
- Each PR comes from its own [feature branch](http://martinfowler.com/bliki/FeatureBranch.html) not develop in your fork
|
||||
|
||||
If you have any questions about any of this, please let us know.
|
||||
|
||||
720
Log4ViewConfig.l4v
Normal file
720
Log4ViewConfig.l4v
Normal file
@@ -0,0 +1,720 @@
|
||||
<Config xmlns:a="http://schemas.microsoft.com/2003/10/Serialization/Arrays" xmlns:b="http://schemas.datacontract.org/2004/07/System.Drawing" xmlns:d="http://schemas.datacontract.org/2004/07/Prosa.Log4View.Db" xmlns:f="http://schemas.datacontract.org/2004/07/Prosa.Log4View.Receiver.File" xmlns:l="http://schemas.datacontract.org/2004/07/Prosa.Log4View.Level" xmlns:m="http://schemas.datacontract.org/2004/07/Prosa.Log4View.Receiver.Msg" xmlns:n="http://schemas.datacontract.org/2004/07/Prosa.Log4View.Receiver.Net" xmlns:t="http://schemas.datacontract.org/2004/07/Prosa.Log4View.LoggerTree" xmlns:u="http://schemas.datacontract.org/2004/07/Prosa.Log4View.Utils" xmlns:i="http://www.w3.org/2001/XMLSchema-instance" z:Id="1" xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/" xmlns="http://schemas.datacontract.org/2004/07/Prosa.Log4View.Configuration">
|
||||
<Id>
|
||||
<u:Value>1</u:Value>
|
||||
</Id>
|
||||
<Data z:Id="2">
|
||||
<Id>
|
||||
<u:Value>2</u:Value>
|
||||
</Id>
|
||||
<Version>17</Version>
|
||||
<_receivers z:Id="3" z:Size="1">
|
||||
<ReceiverConfig z:Id="4" i:type="n:NetReceiverConfig">
|
||||
<Id>
|
||||
<u:Value>16</u:Value>
|
||||
</Id>
|
||||
<BackColor>
|
||||
<b:knownColor>0</b:knownColor>
|
||||
<b:name i:nil="true" />
|
||||
<b:state>2</b:state>
|
||||
<b:value>4293654015</b:value>
|
||||
</BackColor>
|
||||
<BufferSize>500000</BufferSize>
|
||||
<Encoding z:Id="5">Windows-1252</Encoding>
|
||||
<LevelFilter z:Id="6" i:type="LogLevelSurrogated">
|
||||
<LevelName z:Id="7">ALL</LevelName>
|
||||
</LevelFilter>
|
||||
<LoggingFrameworkId z:Id="8">Log4net</LoggingFrameworkId>
|
||||
<Name z:Id="9">NzbDrone</Name>
|
||||
<ParserType>XML</ParserType>
|
||||
<ReadAdjacentMessages>0</ReadAdjacentMessages>
|
||||
<ReadFrom>0001-01-01T00:00:00</ReadFrom>
|
||||
<ReadUntil>0001-01-01T00:00:00</ReadUntil>
|
||||
<SourceId>0</SourceId>
|
||||
<TimeOffset>0</TimeOffset>
|
||||
<TimeZone z:Id="10">Pacific Standard Time</TimeZone>
|
||||
<UseFilter>false</UseFilter>
|
||||
<Window>18</Window>
|
||||
<n:HostName z:Id="11">localhost</n:HostName>
|
||||
<n:Port>20480</n:Port>
|
||||
<n:Protocol>Udp</n:Protocol>
|
||||
</ReceiverConfig>
|
||||
</_receivers>
|
||||
<_sources z:Id="12" z:Size="0" />
|
||||
</Data>
|
||||
<Presentation z:Id="13">
|
||||
<Id>
|
||||
<u:Value>3</u:Value>
|
||||
</Id>
|
||||
<DefaultLogLevel z:Ref="6" i:nil="true" />
|
||||
<ShowCodeDetails>false</ShowCodeDetails>
|
||||
<ShowMessageDetails>true</ShowMessageDetails>
|
||||
<ShowMultiField>true</ShowMultiField>
|
||||
<ShowOutputOnDebug>true</ShowOutputOnDebug>
|
||||
<ShowProcessDetails>false</ShowProcessDetails>
|
||||
<ToolTipLogLevel z:Id="14" i:type="LogLevelSurrogated">
|
||||
<LevelName z:Id="15">OFF</LevelName>
|
||||
</ToolTipLogLevel>
|
||||
<Version>17</Version>
|
||||
<_charts z:Id="16" z:Size="0" />
|
||||
<_columns z:Id="17" z:Size="29">
|
||||
<ColumnConfig z:Id="18">
|
||||
<Id>
|
||||
<u:Value>78</u:Value>
|
||||
</Id>
|
||||
<ClipMode>ClipRight</ClipMode>
|
||||
<FieldName z:Id="19">Id</FieldName>
|
||||
<Name z:Ref="19" i:nil="true" />
|
||||
<Position>-1</Position>
|
||||
<Width>45</Width>
|
||||
<WindowId>18</WindowId>
|
||||
</ColumnConfig>
|
||||
<ColumnConfig z:Id="20">
|
||||
<Id>
|
||||
<u:Value>79</u:Value>
|
||||
</Id>
|
||||
<ClipMode>ClipRight</ClipMode>
|
||||
<FieldName z:Id="21">OriginalTime</FieldName>
|
||||
<Name z:Ref="21" i:nil="true" />
|
||||
<Position>-1</Position>
|
||||
<Width>120</Width>
|
||||
<WindowId>18</WindowId>
|
||||
</ColumnConfig>
|
||||
<ColumnConfig z:Id="22">
|
||||
<Id>
|
||||
<u:Value>80</u:Value>
|
||||
</Id>
|
||||
<ClipMode>ClipRight</ClipMode>
|
||||
<FieldName z:Id="23">Time</FieldName>
|
||||
<Name z:Ref="23" i:nil="true" />
|
||||
<Position>1</Position>
|
||||
<Width>80</Width>
|
||||
<WindowId>18</WindowId>
|
||||
</ColumnConfig>
|
||||
<ColumnConfig z:Id="24">
|
||||
<Id>
|
||||
<u:Value>81</u:Value>
|
||||
</Id>
|
||||
<ClipMode>ClipRight</ClipMode>
|
||||
<FieldName z:Id="25">LocalTime</FieldName>
|
||||
<Name z:Ref="25" i:nil="true" />
|
||||
<Position>-1</Position>
|
||||
<Width>120</Width>
|
||||
<WindowId>18</WindowId>
|
||||
</ColumnConfig>
|
||||
<ColumnConfig z:Id="26">
|
||||
<Id>
|
||||
<u:Value>82</u:Value>
|
||||
</Id>
|
||||
<ClipMode>ClipRight</ClipMode>
|
||||
<FieldName z:Id="27">UtcTime</FieldName>
|
||||
<Name z:Ref="27" i:nil="true" />
|
||||
<Position>-1</Position>
|
||||
<Width>120</Width>
|
||||
<WindowId>18</WindowId>
|
||||
</ColumnConfig>
|
||||
<ColumnConfig z:Id="28">
|
||||
<Id>
|
||||
<u:Value>83</u:Value>
|
||||
</Id>
|
||||
<ClipMode>ClipRight</ClipMode>
|
||||
<FieldName z:Id="29">Date</FieldName>
|
||||
<Name z:Ref="29" i:nil="true" />
|
||||
<Position>-1</Position>
|
||||
<Width>70</Width>
|
||||
<WindowId>18</WindowId>
|
||||
</ColumnConfig>
|
||||
<ColumnConfig z:Id="30">
|
||||
<Id>
|
||||
<u:Value>84</u:Value>
|
||||
</Id>
|
||||
<ClipMode>ClipRight</ClipMode>
|
||||
<FieldName z:Id="31">Key</FieldName>
|
||||
<Name z:Ref="31" i:nil="true" />
|
||||
<Position>-1</Position>
|
||||
<Width>120</Width>
|
||||
<WindowId>18</WindowId>
|
||||
</ColumnConfig>
|
||||
<ColumnConfig z:Id="32">
|
||||
<Id>
|
||||
<u:Value>85</u:Value>
|
||||
</Id>
|
||||
<ClipMode>ClipRight</ClipMode>
|
||||
<FieldName z:Id="33">Level</FieldName>
|
||||
<Name z:Ref="33" i:nil="true" />
|
||||
<Position>-1</Position>
|
||||
<Width>85</Width>
|
||||
<WindowId>18</WindowId>
|
||||
</ColumnConfig>
|
||||
<ColumnConfig z:Id="34">
|
||||
<Id>
|
||||
<u:Value>86</u:Value>
|
||||
</Id>
|
||||
<ClipMode>ClipMiddle</ClipMode>
|
||||
<FieldName z:Id="35">Logger</FieldName>
|
||||
<Name z:Ref="35" i:nil="true" />
|
||||
<Position>2</Position>
|
||||
<Width>120</Width>
|
||||
<WindowId>18</WindowId>
|
||||
</ColumnConfig>
|
||||
<ColumnConfig z:Id="36">
|
||||
<Id>
|
||||
<u:Value>87</u:Value>
|
||||
</Id>
|
||||
<ClipMode>ClipRight</ClipMode>
|
||||
<FieldName z:Id="37">Source</FieldName>
|
||||
<Name z:Ref="37" i:nil="true" />
|
||||
<Position>-1</Position>
|
||||
<Width>90</Width>
|
||||
<WindowId>18</WindowId>
|
||||
</ColumnConfig>
|
||||
<ColumnConfig z:Id="38">
|
||||
<Id>
|
||||
<u:Value>88</u:Value>
|
||||
</Id>
|
||||
<ClipMode>ClipRight</ClipMode>
|
||||
<FieldName z:Id="39">Message</FieldName>
|
||||
<Name z:Ref="39" i:nil="true" />
|
||||
<Position>3</Position>
|
||||
<Width>874</Width>
|
||||
<WindowId>18</WindowId>
|
||||
</ColumnConfig>
|
||||
<ColumnConfig z:Id="40">
|
||||
<Id>
|
||||
<u:Value>89</u:Value>
|
||||
</Id>
|
||||
<ClipMode>ClipRight</ClipMode>
|
||||
<FieldName z:Id="41">Thread</FieldName>
|
||||
<Name z:Ref="41" i:nil="true" />
|
||||
<Position>-1</Position>
|
||||
<Width>95</Width>
|
||||
<WindowId>18</WindowId>
|
||||
</ColumnConfig>
|
||||
<ColumnConfig z:Id="42">
|
||||
<Id>
|
||||
<u:Value>90</u:Value>
|
||||
</Id>
|
||||
<ClipMode>ClipRight</ClipMode>
|
||||
<FieldName z:Id="43">Host</FieldName>
|
||||
<Name z:Ref="43" i:nil="true" />
|
||||
<Position>-1</Position>
|
||||
<Width>90</Width>
|
||||
<WindowId>18</WindowId>
|
||||
</ColumnConfig>
|
||||
<ColumnConfig z:Id="44">
|
||||
<Id>
|
||||
<u:Value>91</u:Value>
|
||||
</Id>
|
||||
<ClipMode>ClipRight</ClipMode>
|
||||
<FieldName z:Id="45">Exception</FieldName>
|
||||
<Name z:Ref="45" i:nil="true" />
|
||||
<Position>-1</Position>
|
||||
<Width>120</Width>
|
||||
<WindowId>18</WindowId>
|
||||
</ColumnConfig>
|
||||
<ColumnConfig z:Id="46">
|
||||
<Id>
|
||||
<u:Value>92</u:Value>
|
||||
</Id>
|
||||
<ClipMode>ClipRight</ClipMode>
|
||||
<FieldName z:Id="47">Domain</FieldName>
|
||||
<Name z:Ref="47" i:nil="true" />
|
||||
<Position>-1</Position>
|
||||
<Width>90</Width>
|
||||
<WindowId>18</WindowId>
|
||||
</ColumnConfig>
|
||||
<ColumnConfig z:Id="48">
|
||||
<Id>
|
||||
<u:Value>93</u:Value>
|
||||
</Id>
|
||||
<ClipMode>ClipRight</ClipMode>
|
||||
<FieldName z:Id="49">Identity</FieldName>
|
||||
<Name z:Ref="49" i:nil="true" />
|
||||
<Position>-1</Position>
|
||||
<Width>120</Width>
|
||||
<WindowId>18</WindowId>
|
||||
</ColumnConfig>
|
||||
<ColumnConfig z:Id="50">
|
||||
<Id>
|
||||
<u:Value>94</u:Value>
|
||||
</Id>
|
||||
<ClipMode>ClipRight</ClipMode>
|
||||
<FieldName z:Id="51">User</FieldName>
|
||||
<Name z:Ref="51" i:nil="true" />
|
||||
<Position>-1</Position>
|
||||
<Width>90</Width>
|
||||
<WindowId>18</WindowId>
|
||||
</ColumnConfig>
|
||||
<ColumnConfig z:Id="52">
|
||||
<Id>
|
||||
<u:Value>95</u:Value>
|
||||
</Id>
|
||||
<ClipMode>ClipRight</ClipMode>
|
||||
<FieldName z:Id="53">Class</FieldName>
|
||||
<Name z:Ref="53" i:nil="true" />
|
||||
<Position>-1</Position>
|
||||
<Width>90</Width>
|
||||
<WindowId>18</WindowId>
|
||||
</ColumnConfig>
|
||||
<ColumnConfig z:Id="54">
|
||||
<Id>
|
||||
<u:Value>96</u:Value>
|
||||
</Id>
|
||||
<ClipMode>ClipRight</ClipMode>
|
||||
<FieldName z:Id="55">Method</FieldName>
|
||||
<Name z:Ref="55" i:nil="true" />
|
||||
<Position>-1</Position>
|
||||
<Width>120</Width>
|
||||
<WindowId>18</WindowId>
|
||||
</ColumnConfig>
|
||||
<ColumnConfig z:Id="56">
|
||||
<Id>
|
||||
<u:Value>97</u:Value>
|
||||
</Id>
|
||||
<ClipMode>ClipRight</ClipMode>
|
||||
<FieldName z:Id="57">File</FieldName>
|
||||
<Name z:Ref="57" i:nil="true" />
|
||||
<Position>-1</Position>
|
||||
<Width>120</Width>
|
||||
<WindowId>18</WindowId>
|
||||
</ColumnConfig>
|
||||
<ColumnConfig z:Id="58">
|
||||
<Id>
|
||||
<u:Value>98</u:Value>
|
||||
</Id>
|
||||
<ClipMode>ClipRight</ClipMode>
|
||||
<FieldName z:Id="59">Line</FieldName>
|
||||
<Name z:Ref="59" i:nil="true" />
|
||||
<Position>-1</Position>
|
||||
<Width>45</Width>
|
||||
<WindowId>18</WindowId>
|
||||
</ColumnConfig>
|
||||
<ColumnConfig z:Id="60">
|
||||
<Id>
|
||||
<u:Value>99</u:Value>
|
||||
</Id>
|
||||
<ClipMode>ClipRight</ClipMode>
|
||||
<FieldName z:Id="61">NDC</FieldName>
|
||||
<Name z:Ref="61" i:nil="true" />
|
||||
<Position>-1</Position>
|
||||
<Width>120</Width>
|
||||
<WindowId>18</WindowId>
|
||||
</ColumnConfig>
|
||||
<ColumnConfig z:Id="62">
|
||||
<Id>
|
||||
<u:Value>100</u:Value>
|
||||
</Id>
|
||||
<ClipMode>ClipRight</ClipMode>
|
||||
<FieldName z:Id="63">MDC</FieldName>
|
||||
<Name z:Ref="63" i:nil="true" />
|
||||
<Position>-1</Position>
|
||||
<Width>120</Width>
|
||||
<WindowId>18</WindowId>
|
||||
</ColumnConfig>
|
||||
<ColumnConfig z:Id="64">
|
||||
<Id>
|
||||
<u:Value>101</u:Value>
|
||||
</Id>
|
||||
<ClipMode>ClipRight</ClipMode>
|
||||
<FieldName z:Id="65">Comment</FieldName>
|
||||
<Name z:Ref="65" i:nil="true" />
|
||||
<Position>-1</Position>
|
||||
<Width>120</Width>
|
||||
<WindowId>18</WindowId>
|
||||
</ColumnConfig>
|
||||
<ColumnConfig z:Id="66">
|
||||
<Id>
|
||||
<u:Value>102</u:Value>
|
||||
</Id>
|
||||
<ClipMode>ClipRight</ClipMode>
|
||||
<FieldName z:Id="67">StackTrace</FieldName>
|
||||
<Name z:Ref="67" i:nil="true" />
|
||||
<Position>-1</Position>
|
||||
<Width>120</Width>
|
||||
<WindowId>18</WindowId>
|
||||
</ColumnConfig>
|
||||
<ColumnConfig z:Id="68">
|
||||
<Id>
|
||||
<u:Value>103</u:Value>
|
||||
</Id>
|
||||
<ClipMode>ClipRight</ClipMode>
|
||||
<FieldName z:Id="69">ProcessId</FieldName>
|
||||
<Name z:Ref="69" i:nil="true" />
|
||||
<Position>-1</Position>
|
||||
<Width>120</Width>
|
||||
<WindowId>18</WindowId>
|
||||
</ColumnConfig>
|
||||
<ColumnConfig z:Id="70">
|
||||
<Id>
|
||||
<u:Value>104</u:Value>
|
||||
</Id>
|
||||
<ClipMode>ClipRight</ClipMode>
|
||||
<FieldName z:Id="71">ThreadId</FieldName>
|
||||
<Name z:Ref="71" i:nil="true" />
|
||||
<Position>-1</Position>
|
||||
<Width>120</Width>
|
||||
<WindowId>18</WindowId>
|
||||
</ColumnConfig>
|
||||
<ColumnConfig z:Id="72">
|
||||
<Id>
|
||||
<u:Value>105</u:Value>
|
||||
</Id>
|
||||
<ClipMode>ClipRight</ClipMode>
|
||||
<FieldName z:Id="73">CallStack</FieldName>
|
||||
<Name z:Ref="73" i:nil="true" />
|
||||
<Position>-1</Position>
|
||||
<Width>120</Width>
|
||||
<WindowId>18</WindowId>
|
||||
</ColumnConfig>
|
||||
<ColumnConfig z:Id="74">
|
||||
<Id>
|
||||
<u:Value>106</u:Value>
|
||||
</Id>
|
||||
<ClipMode>ClipRight</ClipMode>
|
||||
<FieldName z:Id="75">assembly</FieldName>
|
||||
<Name z:Ref="75" i:nil="true" />
|
||||
<Position>-1</Position>
|
||||
<Width>120</Width>
|
||||
<WindowId>18</WindowId>
|
||||
</ColumnConfig>
|
||||
</_columns>
|
||||
<_filters z:Id="76" z:Size="0" />
|
||||
<_formats z:Id="77" z:Size="1">
|
||||
<FormatConfig z:Id="78">
|
||||
<Id>
|
||||
<u:Value>0</u:Value>
|
||||
</Id>
|
||||
<ConditionFieldName z:Ref="39" i:nil="true" />
|
||||
<ConditionRelation z:Id="79"></ConditionRelation>
|
||||
<ConditionText z:Ref="79" i:nil="true" />
|
||||
<Formats z:Id="80" z:Size="12">
|
||||
<a:KeyValueOfLogLevelLoggerFormatConfigxIppDzWS>
|
||||
<a:Key z:Id="81" i:type="LogLevelSurrogated">
|
||||
<LevelName z:Id="82">VERBOSE</LevelName>
|
||||
</a:Key>
|
||||
<a:Value z:Id="83">
|
||||
<Id>
|
||||
<u:Value>4</u:Value>
|
||||
</Id>
|
||||
<Backcolor>
|
||||
<b:knownColor>0</b:knownColor>
|
||||
<b:name i:nil="true" />
|
||||
<b:state>0</b:state>
|
||||
<b:value>0</b:value>
|
||||
</Backcolor>
|
||||
<FontName z:Id="84">Tahoma</FontName>
|
||||
<Forecolor>
|
||||
<b:knownColor>0</b:knownColor>
|
||||
<b:name i:nil="true" />
|
||||
<b:state>2</b:state>
|
||||
<b:value>4290032820</b:value>
|
||||
</Forecolor>
|
||||
<Loglevel z:Ref="81" i:nil="true" />
|
||||
<Size>8.25</Size>
|
||||
<Style>Regular</Style>
|
||||
</a:Value>
|
||||
</a:KeyValueOfLogLevelLoggerFormatConfigxIppDzWS>
|
||||
<a:KeyValueOfLogLevelLoggerFormatConfigxIppDzWS>
|
||||
<a:Key z:Id="85" i:type="LogLevelSurrogated">
|
||||
<LevelName z:Id="86">TRACE</LevelName>
|
||||
</a:Key>
|
||||
<a:Value z:Id="87">
|
||||
<Id>
|
||||
<u:Value>5</u:Value>
|
||||
</Id>
|
||||
<Backcolor>
|
||||
<b:knownColor>0</b:knownColor>
|
||||
<b:name i:nil="true" />
|
||||
<b:state>0</b:state>
|
||||
<b:value>0</b:value>
|
||||
</Backcolor>
|
||||
<FontName z:Id="88">Tahoma</FontName>
|
||||
<Forecolor>
|
||||
<b:knownColor>0</b:knownColor>
|
||||
<b:name i:nil="true" />
|
||||
<b:state>2</b:state>
|
||||
<b:value>4288716960</b:value>
|
||||
</Forecolor>
|
||||
<Loglevel z:Ref="85" i:nil="true" />
|
||||
<Size>8.25</Size>
|
||||
<Style>Regular</Style>
|
||||
</a:Value>
|
||||
</a:KeyValueOfLogLevelLoggerFormatConfigxIppDzWS>
|
||||
<a:KeyValueOfLogLevelLoggerFormatConfigxIppDzWS>
|
||||
<a:Key z:Id="89" i:type="LogLevelSurrogated">
|
||||
<LevelName z:Id="90">DEBUG</LevelName>
|
||||
</a:Key>
|
||||
<a:Value z:Id="91">
|
||||
<Id>
|
||||
<u:Value>6</u:Value>
|
||||
</Id>
|
||||
<Backcolor>
|
||||
<b:knownColor>0</b:knownColor>
|
||||
<b:name i:nil="true" />
|
||||
<b:state>0</b:state>
|
||||
<b:value>0</b:value>
|
||||
</Backcolor>
|
||||
<FontName z:Id="92">Tahoma</FontName>
|
||||
<Forecolor>
|
||||
<b:knownColor>0</b:knownColor>
|
||||
<b:name i:nil="true" />
|
||||
<b:state>2</b:state>
|
||||
<b:value>4286743170</b:value>
|
||||
</Forecolor>
|
||||
<Loglevel z:Ref="89" i:nil="true" />
|
||||
<Size>8.25</Size>
|
||||
<Style>Regular</Style>
|
||||
</a:Value>
|
||||
</a:KeyValueOfLogLevelLoggerFormatConfigxIppDzWS>
|
||||
<a:KeyValueOfLogLevelLoggerFormatConfigxIppDzWS>
|
||||
<a:Key z:Id="93" i:type="LogLevelSurrogated">
|
||||
<LevelName z:Id="94">INFO</LevelName>
|
||||
</a:Key>
|
||||
<a:Value z:Id="95">
|
||||
<Id>
|
||||
<u:Value>7</u:Value>
|
||||
</Id>
|
||||
<Backcolor>
|
||||
<b:knownColor>0</b:knownColor>
|
||||
<b:name i:nil="true" />
|
||||
<b:state>0</b:state>
|
||||
<b:value>0</b:value>
|
||||
</Backcolor>
|
||||
<FontName z:Id="96">Tahoma</FontName>
|
||||
<Forecolor>
|
||||
<b:knownColor>0</b:knownColor>
|
||||
<b:name i:nil="true" />
|
||||
<b:state>2</b:state>
|
||||
<b:value>4278190080</b:value>
|
||||
</Forecolor>
|
||||
<Loglevel z:Ref="93" i:nil="true" />
|
||||
<Size>8.25</Size>
|
||||
<Style>Regular</Style>
|
||||
</a:Value>
|
||||
</a:KeyValueOfLogLevelLoggerFormatConfigxIppDzWS>
|
||||
<a:KeyValueOfLogLevelLoggerFormatConfigxIppDzWS>
|
||||
<a:Key z:Id="97" i:type="LogLevelSurrogated">
|
||||
<LevelName z:Id="98">NOTICE</LevelName>
|
||||
</a:Key>
|
||||
<a:Value z:Id="99">
|
||||
<Id>
|
||||
<u:Value>8</u:Value>
|
||||
</Id>
|
||||
<Backcolor>
|
||||
<b:knownColor>0</b:knownColor>
|
||||
<b:name i:nil="true" />
|
||||
<b:state>0</b:state>
|
||||
<b:value>0</b:value>
|
||||
</Backcolor>
|
||||
<FontName z:Id="100">Tahoma</FontName>
|
||||
<Forecolor>
|
||||
<b:knownColor>0</b:knownColor>
|
||||
<b:name i:nil="true" />
|
||||
<b:state>2</b:state>
|
||||
<b:value>4281957177</b:value>
|
||||
</Forecolor>
|
||||
<Loglevel z:Ref="97" i:nil="true" />
|
||||
<Size>8.25</Size>
|
||||
<Style>Regular</Style>
|
||||
</a:Value>
|
||||
</a:KeyValueOfLogLevelLoggerFormatConfigxIppDzWS>
|
||||
<a:KeyValueOfLogLevelLoggerFormatConfigxIppDzWS>
|
||||
<a:Key z:Id="101" i:type="LogLevelSurrogated">
|
||||
<LevelName z:Id="102">WARN</LevelName>
|
||||
</a:Key>
|
||||
<a:Value z:Id="103">
|
||||
<Id>
|
||||
<u:Value>9</u:Value>
|
||||
</Id>
|
||||
<Backcolor>
|
||||
<b:knownColor>0</b:knownColor>
|
||||
<b:name i:nil="true" />
|
||||
<b:state>0</b:state>
|
||||
<b:value>0</b:value>
|
||||
</Backcolor>
|
||||
<FontName z:Id="104">Tahoma</FontName>
|
||||
<Forecolor>
|
||||
<b:knownColor>0</b:knownColor>
|
||||
<b:name i:nil="true" />
|
||||
<b:state>2</b:state>
|
||||
<b:value>4294934528</b:value>
|
||||
</Forecolor>
|
||||
<Loglevel z:Ref="101" i:nil="true" />
|
||||
<Size>8.25</Size>
|
||||
<Style>Regular</Style>
|
||||
</a:Value>
|
||||
</a:KeyValueOfLogLevelLoggerFormatConfigxIppDzWS>
|
||||
<a:KeyValueOfLogLevelLoggerFormatConfigxIppDzWS>
|
||||
<a:Key z:Id="105" i:type="LogLevelSurrogated">
|
||||
<LevelName z:Id="106">ERROR</LevelName>
|
||||
</a:Key>
|
||||
<a:Value z:Id="107">
|
||||
<Id>
|
||||
<u:Value>10</u:Value>
|
||||
</Id>
|
||||
<Backcolor>
|
||||
<b:knownColor>0</b:knownColor>
|
||||
<b:name i:nil="true" />
|
||||
<b:state>0</b:state>
|
||||
<b:value>0</b:value>
|
||||
</Backcolor>
|
||||
<FontName z:Id="108">Tahoma</FontName>
|
||||
<Forecolor>
|
||||
<b:knownColor>0</b:knownColor>
|
||||
<b:name i:nil="true" />
|
||||
<b:state>2</b:state>
|
||||
<b:value>4294901760</b:value>
|
||||
</Forecolor>
|
||||
<Loglevel z:Ref="105" i:nil="true" />
|
||||
<Size>8.25</Size>
|
||||
<Style>Regular</Style>
|
||||
</a:Value>
|
||||
</a:KeyValueOfLogLevelLoggerFormatConfigxIppDzWS>
|
||||
<a:KeyValueOfLogLevelLoggerFormatConfigxIppDzWS>
|
||||
<a:Key z:Id="109" i:type="LogLevelSurrogated">
|
||||
<LevelName z:Id="110">SEVERE</LevelName>
|
||||
</a:Key>
|
||||
<a:Value z:Id="111">
|
||||
<Id>
|
||||
<u:Value>11</u:Value>
|
||||
</Id>
|
||||
<Backcolor>
|
||||
<b:knownColor>0</b:knownColor>
|
||||
<b:name i:nil="true" />
|
||||
<b:state>0</b:state>
|
||||
<b:value>0</b:value>
|
||||
</Backcolor>
|
||||
<FontName z:Id="112">Tahoma</FontName>
|
||||
<Forecolor>
|
||||
<b:knownColor>0</b:knownColor>
|
||||
<b:name i:nil="true" />
|
||||
<b:state>2</b:state>
|
||||
<b:value>4293067295</b:value>
|
||||
</Forecolor>
|
||||
<Loglevel z:Ref="109" i:nil="true" />
|
||||
<Size>8.25</Size>
|
||||
<Style>Regular</Style>
|
||||
</a:Value>
|
||||
</a:KeyValueOfLogLevelLoggerFormatConfigxIppDzWS>
|
||||
<a:KeyValueOfLogLevelLoggerFormatConfigxIppDzWS>
|
||||
<a:Key z:Id="113" i:type="LogLevelSurrogated">
|
||||
<LevelName z:Id="114">CRITICAL</LevelName>
|
||||
</a:Key>
|
||||
<a:Value z:Id="115">
|
||||
<Id>
|
||||
<u:Value>12</u:Value>
|
||||
</Id>
|
||||
<Backcolor>
|
||||
<b:knownColor>0</b:knownColor>
|
||||
<b:name i:nil="true" />
|
||||
<b:state>0</b:state>
|
||||
<b:value>0</b:value>
|
||||
</Backcolor>
|
||||
<FontName z:Id="116">Tahoma</FontName>
|
||||
<Forecolor>
|
||||
<b:knownColor>0</b:knownColor>
|
||||
<b:name i:nil="true" />
|
||||
<b:state>2</b:state>
|
||||
<b:value>4289400377</b:value>
|
||||
</Forecolor>
|
||||
<Loglevel z:Ref="113" i:nil="true" />
|
||||
<Size>8.25</Size>
|
||||
<Style>Regular</Style>
|
||||
</a:Value>
|
||||
</a:KeyValueOfLogLevelLoggerFormatConfigxIppDzWS>
|
||||
<a:KeyValueOfLogLevelLoggerFormatConfigxIppDzWS>
|
||||
<a:Key z:Id="117" i:type="LogLevelSurrogated">
|
||||
<LevelName z:Id="118">ALERT</LevelName>
|
||||
</a:Key>
|
||||
<a:Value z:Id="119">
|
||||
<Id>
|
||||
<u:Value>13</u:Value>
|
||||
</Id>
|
||||
<Backcolor>
|
||||
<b:knownColor>0</b:knownColor>
|
||||
<b:name i:nil="true" />
|
||||
<b:state>0</b:state>
|
||||
<b:value>0</b:value>
|
||||
</Backcolor>
|
||||
<FontName z:Id="120">Tahoma</FontName>
|
||||
<Forecolor>
|
||||
<b:knownColor>0</b:knownColor>
|
||||
<b:name i:nil="true" />
|
||||
<b:state>2</b:state>
|
||||
<b:value>4294902015</b:value>
|
||||
</Forecolor>
|
||||
<Loglevel z:Ref="117" i:nil="true" />
|
||||
<Size>8.25</Size>
|
||||
<Style>Regular</Style>
|
||||
</a:Value>
|
||||
</a:KeyValueOfLogLevelLoggerFormatConfigxIppDzWS>
|
||||
<a:KeyValueOfLogLevelLoggerFormatConfigxIppDzWS>
|
||||
<a:Key z:Id="121" i:type="LogLevelSurrogated">
|
||||
<LevelName z:Id="122">FATAL</LevelName>
|
||||
</a:Key>
|
||||
<a:Value z:Id="123">
|
||||
<Id>
|
||||
<u:Value>14</u:Value>
|
||||
</Id>
|
||||
<Backcolor>
|
||||
<b:knownColor>0</b:knownColor>
|
||||
<b:name i:nil="true" />
|
||||
<b:state>0</b:state>
|
||||
<b:value>0</b:value>
|
||||
</Backcolor>
|
||||
<FontName z:Id="124">Tahoma</FontName>
|
||||
<Forecolor>
|
||||
<b:knownColor>0</b:knownColor>
|
||||
<b:name i:nil="true" />
|
||||
<b:state>2</b:state>
|
||||
<b:value>4287309977</b:value>
|
||||
</Forecolor>
|
||||
<Loglevel z:Ref="121" i:nil="true" />
|
||||
<Size>8.25</Size>
|
||||
<Style>Regular</Style>
|
||||
</a:Value>
|
||||
</a:KeyValueOfLogLevelLoggerFormatConfigxIppDzWS>
|
||||
<a:KeyValueOfLogLevelLoggerFormatConfigxIppDzWS>
|
||||
<a:Key z:Id="125" i:type="LogLevelSurrogated">
|
||||
<LevelName z:Id="126">EMERGENCY</LevelName>
|
||||
</a:Key>
|
||||
<a:Value z:Id="127">
|
||||
<Id>
|
||||
<u:Value>15</u:Value>
|
||||
</Id>
|
||||
<Backcolor>
|
||||
<b:knownColor>0</b:knownColor>
|
||||
<b:name i:nil="true" />
|
||||
<b:state>0</b:state>
|
||||
<b:value>0</b:value>
|
||||
</Backcolor>
|
||||
<FontName z:Id="128">Tahoma</FontName>
|
||||
<Forecolor>
|
||||
<b:knownColor>0</b:knownColor>
|
||||
<b:name i:nil="true" />
|
||||
<b:state>2</b:state>
|
||||
<b:value>4285932413</b:value>
|
||||
</Forecolor>
|
||||
<Loglevel z:Ref="125" i:nil="true" />
|
||||
<Size>8.25</Size>
|
||||
<Style>Regular</Style>
|
||||
</a:Value>
|
||||
</a:KeyValueOfLogLevelLoggerFormatConfigxIppDzWS>
|
||||
</Formats>
|
||||
<IgnoreCase>false</IgnoreCase>
|
||||
<Name z:Id="129">Default Format Settings</Name>
|
||||
</FormatConfig>
|
||||
</_formats>
|
||||
<_logLevels z:Id="130" z:Size="0" />
|
||||
<_loggers z:Id="131" z:Size="1">
|
||||
<LoggerConfig z:Id="132">
|
||||
<Id>
|
||||
<u:Value>77</u:Value>
|
||||
</Id>
|
||||
<LogLevel z:Ref="6" i:nil="true" />
|
||||
<LoggerPath z:Ref="79" i:nil="true" />
|
||||
<ReceiverId>16</ReceiverId>
|
||||
</LoggerConfig>
|
||||
</_loggers>
|
||||
</Presentation>
|
||||
<Version>17</Version>
|
||||
</Config>
|
||||
240
Logo/Sonarr.svg
240
Logo/Sonarr.svg
@@ -1,240 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="218px"
|
||||
height="218px" viewBox="0 0 218 218" enable-background="new 0 0 218 218" xml:space="preserve">
|
||||
<symbol id="hex_grid" viewBox="-114.25 -98.617 228.55 197.233">
|
||||
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" fill="none" stroke="#989898" stroke-width="0.5" stroke-linecap="square" stroke-miterlimit="1" d="
|
||||
M72.15,90.3l4.7-2.7l4.65,2.7v5.4l-4.65,2.7l-4.7-2.7V90.3z M62.85,95.7l-4.65,2.7l-4.65-2.7v-5.4l4.65-2.7l4.65,2.7V95.7l4.65,2.7
|
||||
l4.65-2.7 M62.85,90.3l4.65-2.7l4.65,2.7 M62.85,79.55v-5.4l4.65-2.7l4.65,2.7v5.4L67.5,82.2L62.85,79.55L58.2,82.2l-4.65-2.65
|
||||
M72.15,74.15l4.7-2.7l4.65,2.7v5.4l-4.65,2.65l-4.7-2.65 M76.85,87.6v-5.4 M67.5,87.6v-5.4 M81.5,95.7l4.65,2.7l4.65-2.7l4.65,2.7
|
||||
l4.65-2.7l4.65,2.7l4.65-2.7v-5.4l4.65-2.7v-5.4l-4.65-2.65v-5.4l4.65-2.7v-5.4l-4.65-2.7v-5.4l4.65-2.7v-5.4l-4.65-2.65v-5.4
|
||||
l4.65-2.7v-5.4L109.4,31v-5.4l4.65-2.7v-5.4l-4.65-2.65v-5.4l4.65-2.7v-5.4l-4.65-2.7v-5.4l4.65-2.7v-5.4l-4.65-2.65v-5.4l4.65-2.7
|
||||
V-31l-4.65-2.7v-5.4l4.65-2.7v-5.4l-4.65-2.65v-5.4l4.65-2.7v-5.4l-4.65-2.7v-5.4l4.65-2.7v-5.4l-4.65-2.65v-5.4l4.65-2.7v-5.4
|
||||
l-4.65-2.7l-4.65,2.7l-4.65-2.7l-4.65,2.7l-4.65-2.7l-4.65,2.7l-4.65-2.7l-4.65,2.7l-4.7-2.7l-4.65,2.7l-4.65-2.7l-4.65,2.7
|
||||
l-4.65-2.7l-4.65,2.7l-4.65-2.7l-4.65,2.7l-4.65-2.7l-4.65,2.7l-4.7-2.7l-4.65,2.7l-4.65-2.7l-4.65,2.7L7-98.4l-4.65,2.7l-4.65-2.7
|
||||
l-4.65,2.7l-4.65-2.7l-4.65,2.7l-4.65-2.7l-4.65,2.7l-4.65-2.7l-4.65,2.7l-4.7-2.7l-4.65,2.7l-4.65-2.7l-4.65,2.7l-4.65-2.7
|
||||
l-4.65,2.7l-4.65-2.7l-4.65,2.7l-4.65-2.7l-4.65,2.7l-4.7-2.7l-4.65,2.7l-4.65-2.7l-4.65,2.7l-4.65-2.7l-4.65,2.7v5.4l-4.65,2.7
|
||||
v5.4l4.65,2.65v5.4l-4.65,2.7v5.4l4.65,2.7v5.4l-4.65,2.7v5.4l4.65,2.65v5.4l-4.65,2.7v5.4l4.65,2.7v5.4l-4.65,2.7v5.4l4.65,2.65
|
||||
v5.4l-4.65,2.7v5.4l4.65,2.7v5.4l-4.65,2.7v5.4l4.65,2.65v5.4l-4.65,2.7V31l4.65,2.7v5.4l-4.65,2.7v5.4l4.65,2.65v5.4l-4.65,2.7
|
||||
v5.4l4.65,2.7v5.4l-4.65,2.7v5.4l4.65,2.65v5.4l-4.65,2.7v5.4l4.65,2.7l4.65-2.7l4.65,2.7l4.65-2.7l4.65,2.7l4.65-2.7l4.7,2.7
|
||||
l4.65-2.7l4.65,2.7l4.65-2.7l4.65,2.7l4.65-2.7l4.65,2.7l4.65-2.7l4.65,2.7l4.65-2.7l4.7,2.7l4.65-2.7l4.65,2.7l4.65-2.7l4.65,2.7
|
||||
l4.65-2.7l4.65,2.7l4.65-2.7l4.65,2.7L7,95.7l4.65,2.7l4.65-2.7l4.65,2.7l4.65-2.7l4.7,2.7l4.65-2.7l4.65,2.7l4.65-2.7l4.65,2.7
|
||||
l4.65-2.7 M44.25,95.7v-5.4l4.65-2.7l4.65,2.7 M44.25,79.55v-5.4l4.65-2.7l4.65,2.7v5.4L48.9,82.2L44.25,79.55L39.6,82.2
|
||||
l-4.65-2.65 M58.2,87.6v-5.4 M48.9,87.6v-5.4 M53.55,63.35v-5.4l4.65-2.7l4.65,2.7v5.4l-4.65,2.7L53.55,63.35l-4.65,2.7l-4.65-2.7
|
||||
v-5.4l4.65-2.7l4.65,2.7 M62.85,74.15l-4.65-2.7v-5.4 M53.55,74.15l4.65-2.7 M48.9,71.45v-5.4 M48.9,55.25v-5.4l4.65-2.65
|
||||
l4.65,2.65v5.4 M67.5,71.45v-5.4l4.65-2.7l4.7,2.7v5.4 M67.5,66.05l-4.65-2.7 M58.2,49.85l4.65-2.65l4.65,2.65v5.4l-4.65,2.7
|
||||
M72.15,63.35v-5.4l4.7-2.7l4.65,2.7v5.4l-4.65,2.7 M76.85,55.25v-5.4l4.65-2.65l4.65,2.65v5.4l-4.65,2.7 M67.5,55.25l4.65,2.7
|
||||
M34.95,95.7v-5.4l4.65-2.7l4.65,2.7 M16.3,95.7v-5.4l4.65-2.7l4.65,2.7v5.4 M25.6,90.3l4.7-2.7l4.65,2.7 M25.6,79.55v-5.4l4.7-2.7
|
||||
l4.65,2.7v5.4L30.3,82.2L25.6,79.55l-4.65,2.65l-4.65-2.65v-5.4l4.65-2.7l4.65,2.7 M20.95,87.6v-5.4 M39.6,87.6v-5.4 M30.3,87.6
|
||||
v-5.4 M7,95.7v-5.4l4.65-2.7l4.65,2.7 M-2.3,95.7v-5.4l4.65-2.7L7,90.3 M2.35,82.2l-4.65-2.65v-5.4l4.65-2.7L7,74.15v5.4L2.35,82.2
|
||||
z M16.3,79.55l-4.65,2.65L7,79.55 M2.35,87.6v-5.4 M11.65,87.6v-5.4 M16.3,74.15l-4.65-2.7v-5.4l4.65-2.7l4.65,2.7v5.4 M2.35,71.45
|
||||
v-5.4L7,63.35l4.65,2.7 M2.35,49.85L7,47.2l4.65,2.65v5.4L7,57.95l-4.65-2.7V49.85L-2.3,47.2v-5.4l4.65-2.7L7,41.8v5.4
|
||||
M11.65,55.25l4.65,2.7v5.4 M7,74.15l4.65-2.7 M7,57.95v5.4 M30.3,71.45v-5.4l4.65-2.7l4.65,2.7v5.4l-4.65,2.7 M16.3,57.95
|
||||
l4.65-2.7l4.65,2.7v5.4l-4.65,2.7 M30.3,66.05l-4.7-2.7 M30.3,49.85l4.65-2.65l4.65,2.65v5.4l-4.65,2.7l-4.65-2.7V49.85l-4.7-2.65
|
||||
v-5.4l-4.65-2.7v-5.4L25.6,31l4.7,2.7v5.4l-4.7,2.7 M11.65,49.85l4.65-2.65l4.65,2.65v5.4 M25.6,57.95l4.7-2.7 M34.95,57.95v5.4
|
||||
M34.95,47.2v-5.4l4.65-2.7l4.65,2.7v5.4l-4.65,2.65 M25.6,31v-5.4l4.7-2.7l4.65,2.7V31l-4.65,2.7 M34.95,25.6l4.65-2.7l4.65,2.7
|
||||
V31l-4.65,2.7L34.95,31 M30.3,39.1l4.65,2.7 M39.6,39.1v-5.4 M20.95,39.1l-4.65,2.7l-4.65-2.7v-5.4L16.3,31l4.65,2.7 M16.3,41.8
|
||||
v5.4 M2.35,33.7L-2.3,31v-5.4l4.65-2.7L7,25.6V31L2.35,33.7z M7,25.6l4.65-2.7l4.65,2.7V31 M2.35,39.1v-5.4 M11.65,33.7L7,31
|
||||
M7,41.8l4.65-2.7 M11.65,17.5L7,14.85v-5.4l4.65-2.7l4.65,2.7v5.4L11.65,17.5z M11.65,22.9v-5.4 M2.35,22.9v-5.4L7,14.85 M7,9.45
|
||||
l-4.65-2.7v-5.4L7-1.35l4.65,2.7v5.4 M34.95,14.85v-5.4l4.65-2.7l4.65,2.7v5.4L39.6,17.5L34.95,14.85z M39.6,22.9v-5.4 M25.6,25.6
|
||||
l-4.65-2.7v-5.4l4.65-2.65l4.7,2.65v5.4 M16.3,9.45l4.65-2.7l4.65,2.7v5.4 M34.95,9.45l-4.65-2.7v-5.4l4.65-2.7l4.65,2.7v5.4
|
||||
M11.65,1.35l4.65-2.7l4.65,2.7v5.4 M25.6,9.45l4.7-2.7 M30.3,17.5l4.65-2.65 M16.3,25.6l4.65-2.7 M20.95,17.5l-4.65-2.65
|
||||
M76.85,49.85l-4.7-2.65v-5.4l4.7-2.7l4.65,2.7v5.4 M62.85,47.2v-5.4l4.65-2.7l4.65,2.7 M62.85,25.6l4.65-2.7l4.65,2.7V31
|
||||
l-4.65,2.7L62.85,31V25.6l-4.65-2.7v-5.4 M72.15,25.6l4.7-2.7l4.65,2.7V31l-4.65,2.7l-4.7-2.7 M76.85,39.1v-5.4 M67.5,39.1v-5.4
|
||||
M53.55,47.2v-5.4l4.65-2.7l4.65,2.7 M44.25,41.8l4.65-2.7l4.65,2.7 M44.25,25.6l4.65-2.7l4.65,2.7V31l-4.65,2.7L44.25,31
|
||||
M62.85,31l-4.65,2.7L53.55,31 M58.2,39.1v-5.4 M48.9,39.1v-5.4 M53.55,14.85v-5.4l4.65-2.7l4.65,2.7v5.4L58.2,17.5L53.55,14.85
|
||||
L48.9,17.5l-4.65-2.65 M48.9,22.9v-5.4 M53.55,9.45l-4.65-2.7v-5.4l4.65-2.7l4.65,2.7v5.4 M44.25,9.45l4.65-2.7 M76.85,22.9v-5.4
|
||||
l4.65-2.65l4.65,2.65v5.4l-4.65,2.7 M76.85,17.5l-4.7-2.65v-5.4l4.7-2.7l4.65,2.7v5.4 M67.5,22.9v-5.4l4.65-2.65 M67.5,17.5
|
||||
l-4.65-2.65 M72.15,9.45l-4.65-2.7v-5.4l4.65-2.7l4.7,2.7v5.4 M62.85,9.45l4.65-2.7 M53.55,25.6l4.65-2.7 M44.25,63.35l-4.65,2.7
|
||||
M39.6,55.25l4.65,2.7 M39.6,71.45l4.65,2.7 M67.5,49.85l4.65-2.65 M48.9,49.85l-4.65-2.65 M25.6,47.2l-4.65,2.65 M104.75,87.6
|
||||
l-4.65,2.7l-4.65-2.7v-5.4l4.65-2.65l4.65,2.65V87.6l4.65,2.7 M109.4,79.55l-4.65,2.65 M100.1,95.7v-5.4 M81.5,90.3l4.65-2.7
|
||||
l4.65,2.7v5.4 M81.5,74.15l4.65-2.7l4.65,2.7v5.4l-4.65,2.65l-4.65-2.65 M90.8,79.55l4.65,2.65 M86.15,87.6v-5.4 M90.8,90.3
|
||||
l4.65-2.7 M95.45,71.45v-5.4l4.65-2.7l4.65,2.7v5.4l-4.65,2.7L95.45,71.45l-4.65,2.7 M86.15,55.25l4.65,2.7v5.4l-4.65,2.7
|
||||
l-4.65-2.7 M86.15,71.45v-5.4 M95.45,55.25v-5.4l4.65-2.65l4.65,2.65v5.4l-4.65,2.7L95.45,55.25l-4.65,2.7 M100.1,63.35v-5.4
|
||||
M90.8,63.35l4.65,2.7 M109.4,63.35l-4.65,2.7 M104.75,71.45l4.65,2.7 M104.75,55.25l4.65,2.7 M100.1,79.55v-5.4 M100.1,47.2v-5.4
|
||||
l4.65-2.7l4.65,2.7 M100.1,41.8l-4.65-2.7v-5.4l4.65-2.7l4.65,2.7v5.4 M109.4,31l-4.65,2.7 M81.5,41.8l4.65-2.7l4.65,2.7v5.4
|
||||
l-4.65,2.65 M86.15,22.9l4.65,2.7V31l-4.65,2.7L81.5,31 M100.1,31v-5.4l4.65-2.7l4.65,2.7 M90.8,31l4.65,2.7 M86.15,39.1v-5.4
|
||||
M90.8,41.8l4.65-2.7 M86.15,17.5l4.65-2.65l4.65,2.65v5.4l-4.65,2.7 M90.8,14.85v-5.4l4.65-2.7l4.65,2.7v5.4l-4.65,2.65
|
||||
M81.5,9.45l4.65-2.7l4.65,2.7 M86.15,6.75v-5.4l4.65-2.7l4.65,2.7v5.4 M100.1,14.85l4.65,2.65v5.4 M109.4,14.85l-4.65,2.65
|
||||
M100.1,9.45l4.65-2.7l4.65,2.7 M95.45,1.35l4.65-2.7l4.65,2.7v5.4 M95.45,22.9l4.65,2.7 M109.4,47.2l-4.65,2.65 M90.8,47.2
|
||||
l4.65,2.65 M104.75-9.45l-4.65,2.7l-4.65-2.7v-5.4l4.65-2.65l4.65,2.65V-9.45l4.65,2.7 M109.4-17.5l-4.65,2.65 M100.1-1.35v-5.4
|
||||
M90.8-1.35v-5.4l4.65-2.7 M81.5-6.75l-4.65-2.7v-5.4l4.65-2.65l4.65,2.65v5.4L81.5-6.75v5.4l-4.65,2.7 M90.8-6.75l-4.65-2.7
|
||||
M95.45-14.85L90.8-17.5v-5.4l4.65-2.7l4.65,2.7v5.4 M76.85-14.85l-4.7-2.65v-5.4l4.7-2.7l4.65,2.7v5.4 M86.15-14.85l4.65-2.65
|
||||
M95.45-31l-4.65-2.7v-5.4l4.65-2.7l4.65,2.7v5.4L95.45-31z M95.45-25.6V-31 M90.8-22.9l-4.65-2.7V-31l4.65-2.7 M86.15-31
|
||||
l-4.65-2.7v-5.4l4.65-2.7l4.65,2.7 M86.15-41.8v-5.4l4.65-2.65l4.65,2.65v5.4 M100.1-33.7l4.65,2.7v5.4l-4.65,2.7 M109.4-33.7
|
||||
l-4.65,2.7 M95.45-47.2l4.65-2.65l4.65,2.65v5.4l-4.65,2.7 M104.75-41.8l4.65,2.7 M81.5-22.9l4.65-2.7 M104.75-25.6l4.65,2.7
|
||||
M100.1-49.85v-5.4l4.65-2.7l4.65,2.7 M109.4-66.05l-4.65,2.7l-4.65-2.7v-5.4l4.65-2.7l4.65,2.7 M104.75-63.35v5.4 M100.1-55.25
|
||||
l-4.65-2.7v-5.4l4.65-2.7 M86.15-47.2l-4.65-2.65v-5.4l4.65-2.7l4.65,2.7v5.4 M86.15-74.15l4.65,2.7v5.4l-4.65,2.7l-4.65-2.7v-5.4
|
||||
L86.15-74.15v-5.4l4.65-2.65l4.65,2.65 M90.8-71.45l4.65-2.7l4.65,2.7 M95.45-63.35l-4.65-2.7 M90.8-55.25l4.65-2.7 M86.15-57.95
|
||||
v-5.4 M95.45-74.15v-5.4l4.65-2.65l4.65,2.65v5.4 M81.5-71.45l-4.65-2.7v-5.4l4.65-2.65l4.65,2.65 M81.5-82.2v-5.4l4.65-2.7
|
||||
l4.65,2.7v5.4 M86.15-90.3v-5.4 M104.75-95.7v5.4l-4.65,2.7l-4.65-2.7v-5.4 M100.1-82.2v-5.4 M95.45-90.3l-4.65,2.7 M109.4-82.2
|
||||
l-4.65,2.65 M104.75-90.3l4.65,2.7 M109.4-49.85l-4.65,2.65 M72.15-1.35v-5.4l4.7-2.7 M67.5,1.35l-4.65-2.7v-5.4l4.65-2.7l4.65,2.7
|
||||
M72.15-17.5l-4.65,2.65l-4.65-2.65v-5.4l4.65-2.7l4.65,2.7 M67.5-14.85v5.4 M53.55-1.35v-5.4l4.65-2.7l4.65,2.7 M48.9,1.35
|
||||
l-4.65-2.7v-5.4l4.65-2.7l4.65,2.7 M44.25-22.9l4.65-2.7l4.65,2.7v5.4l-4.65,2.65l-4.65-2.65V-22.9l-4.65-2.7V-31 M53.55-17.5
|
||||
l4.65,2.65v5.4 M48.9-9.45v-5.4 M53.55-33.7v-5.4l4.65-2.7l4.65,2.7v5.4L58.2-31L53.55-33.7z M62.85-22.9l-4.65-2.7V-31 M48.9-25.6
|
||||
V-31l4.65-2.7 M48.9-31l-4.65-2.7v-5.4l4.65-2.7l4.65,2.7 M48.9-41.8v-5.4l4.65-2.65l4.65,2.65v5.4 M76.85-25.6V-31l4.65-2.7
|
||||
M76.85-31l-4.7-2.7v-5.4l4.7-2.7l4.65,2.7 M62.85-33.7L67.5-31v5.4 M72.15-39.1l-4.65-2.7v-5.4l4.65-2.65l4.7,2.65v5.4
|
||||
M62.85-39.1l4.65-2.7 M72.15-33.7L67.5-31 M53.55-22.9l4.65-2.7 M58.2-14.85l4.65-2.65 M30.3,1.35l-4.7-2.7v-5.4l4.7-2.7l4.65,2.7
|
||||
v5.4 M30.3-9.45v-5.4l4.65-2.65l4.65,2.65v5.4l-4.65,2.7 M16.3-1.35v-5.4l4.65-2.7l4.65,2.7 M30.3-14.85l-4.7-2.65v-5.4l4.7-2.7
|
||||
l4.65,2.7v5.4 M25.6-17.5l-4.65,2.65L16.3-17.5v-5.4l4.65-2.7l4.65,2.7 M20.95-14.85v5.4 M16.3-6.75l-4.65-2.7v-5.4l4.65-2.65
|
||||
M2.35,1.35l-4.65-2.7v-5.4l4.65-2.7L7-6.75v5.4 M7-17.5l-4.65,2.65L-2.3-17.5v-5.4l4.65-2.7L7-22.9V-17.5l4.65,2.65 M11.65-9.45
|
||||
L7-6.75 M2.35-9.45v-5.4 M11.65-31L7-33.7v-5.4l4.65-2.7l4.65,2.7v5.4L11.65-31z M16.3-22.9l-4.65-2.7V-31 M2.35-25.6V-31L7-33.7
|
||||
M7-39.1l-4.65-2.7v-5.4L7-49.85l4.65,2.65v5.4 M44.25-33.7L39.6-31l-4.65-2.7v-5.4l4.65-2.7l4.65,2.7 M20.95-25.6V-31l4.65-2.7
|
||||
l4.7,2.7v5.4 M20.95-47.2l4.65-2.65l4.7,2.65v5.4l-4.7,2.7l-4.65-2.7V-47.2l-4.65-2.65v-5.4l4.65-2.7l4.65,2.7 M30.3-47.2
|
||||
l4.65-2.65l4.65,2.65v5.4 M30.3-41.8l4.65,2.7 M25.6-33.7v-5.4 M34.95-33.7L30.3-31 M34.95-22.9l4.65-2.7 M20.95-31l-4.65-2.7
|
||||
M16.3-39.1l4.65-2.7 M7-22.9l4.65-2.7 M34.95-55.25l-4.65-2.7v-5.4l4.65-2.7l4.65,2.7v5.4L34.95-55.25v5.4 M25.6-49.85v-5.4
|
||||
l4.7-2.7 M30.3-63.35l-4.7-2.7v-5.4l4.7-2.7l4.65,2.7v5.4 M25.6-66.05l-4.65,2.7l-4.65-2.7v-5.4l4.65-2.7l4.65,2.7 M30.3-74.15
|
||||
v-5.4l4.65-2.65l4.65,2.65v5.4l-4.65,2.7 M20.95-63.35v5.4 M7-49.85v-5.4l4.65-2.7l4.65,2.7 M2.35-47.2l-4.65-2.65v-5.4l4.65-2.7
|
||||
L7-55.25 M2.35-63.35l-4.65-2.7v-5.4l4.65-2.7L7-71.45v5.4L2.35-63.35z M16.3-71.45l-4.65-2.7v-5.4l4.65-2.65l4.65,2.65v5.4
|
||||
M11.65-57.95v-5.4l4.65-2.7 M2.35-57.95v-5.4 M7-66.05l4.65,2.7 M11.65-74.15L7-71.45 M2.35-74.15v-5.4L7-82.2l4.65,2.65
|
||||
M11.65-95.7v5.4L7-87.6l-4.65-2.7v-5.4 M20.95-95.7v5.4l-4.65,2.7l-4.65-2.7 M7-87.6v5.4 M16.3-87.6v5.4 M20.95-90.3l4.65,2.7v5.4
|
||||
l-4.65,2.65 M30.3-79.55l-4.7-2.65 M30.3-95.7v5.4l-4.7,2.7 M48.9-95.7v5.4l-4.65,2.7l-4.65-2.7v-5.4 M34.95-82.2v-5.4l4.65-2.7
|
||||
M30.3-90.3l4.65,2.7 M72.15-49.85v-5.4l4.7-2.7l4.65,2.7 M67.5-47.2l-4.65-2.65v-5.4l4.65-2.7l4.65,2.7 M67.5-74.15l4.65,2.7v5.4
|
||||
l-4.65,2.7l-4.65-2.7v-5.4L67.5-74.15v-5.4l4.65-2.65l4.7,2.65 M81.5-66.05l-4.65,2.7l-4.7-2.7 M72.15-71.45l4.7-2.7 M76.85-63.35
|
||||
v5.4 M67.5-57.95v-5.4 M53.55-49.85v-5.4l4.65-2.7l4.65,2.7 M48.9-47.2l-4.65-2.65v-5.4l4.65-2.7l4.65,2.7 M44.25-66.05v-5.4
|
||||
l4.65-2.7l4.65,2.7v5.4l-4.65,2.7L44.25-66.05l-4.65,2.7 M62.85-66.05l-4.65,2.7l-4.65-2.7 M53.55-71.45l4.65-2.7l4.65,2.7
|
||||
M58.2-57.95v-5.4 M48.9-57.95v-5.4 M48.9-74.15v-5.4l4.65-2.65l4.65,2.65v5.4 M48.9-79.55l-4.65-2.65v-5.4 M58.2-95.7v5.4
|
||||
l-4.65,2.7l-4.65-2.7 M53.55-87.6v5.4 M58.2-79.55l4.65-2.65l4.65,2.65 M62.85-82.2v-5.4l4.65-2.7l4.65,2.7v5.4 M67.5-90.3v-5.4
|
||||
M76.85-95.7v5.4l-4.7,2.7 M58.2-90.3l4.65,2.7 M44.25-17.5l-4.65,2.65 M39.6-9.45l4.65,2.7 M39.6-74.15l4.65,2.7 M39.6-57.95
|
||||
l4.65,2.7 M44.25-49.85L39.6-47.2 M62.85-49.85L58.2-47.2 M16.3-49.85l-4.65,2.65 M44.25-82.2l-4.65,2.65 M76.85-90.3l4.65,2.7
|
||||
M81.5-49.85l-4.65,2.65 M86.15,1.35l-4.65-2.7 M44.25-1.35l-4.65,2.7 M62.85-1.35l-4.65,2.7 M109.4-1.35l-4.65,2.7 M25.6-1.35
|
||||
l-4.65,2.7 M-95.4,95.7v-5.4l4.65-2.7l4.65,2.7v5.4 M-86.1,90.3l4.7-2.7l4.65,2.7v5.4 M-104.7,95.7v-5.4l4.65-2.7l4.65,2.7
|
||||
M-100.05,82.2l-4.65-2.65v-5.4l4.65-2.7l4.65,2.7v5.4L-100.05,82.2z M-95.4,74.15l4.65-2.7l4.65,2.7v5.4l-4.65,2.65l-4.65-2.65
|
||||
M-86.1,74.15l4.7-2.7l4.65,2.7v5.4l-4.65,2.65l-4.7-2.65 M-100.05,87.6v-5.4 M-90.75,87.6v-5.4 M-81.4,87.6v-5.4 M-109.35,87.6
|
||||
l4.65,2.7 M-104.7,79.55l-4.65,2.65 M-109.35,55.25l4.65,2.7v5.4l-4.65,2.7 M-109.35,71.45l4.65,2.7 M-90.75,66.05l-4.65-2.7v-5.4
|
||||
l4.65-2.7l4.65,2.7v5.4L-90.75,66.05v5.4 M-86.1,57.95l4.7-2.7l4.65,2.7v5.4l-4.65,2.7l-4.7-2.7 M-81.4,71.45v-5.4 M-100.05,71.45
|
||||
v-5.4l4.65-2.7 M-95.4,57.95l-4.65-2.7v-5.4l4.65-2.65l4.65,2.65v5.4 M-81.4,55.25v-5.4l4.65-2.65l4.65,2.65v5.4l-4.65,2.7
|
||||
M-100.05,66.05l-4.65-2.7 M-104.7,57.95l4.65-2.7 M-86.1,41.8l-4.65-2.7v-5.4l4.65-2.7l4.7,2.7v5.4L-86.1,41.8z M-81.4,49.85
|
||||
l-4.7-2.65v-5.4 M-100.05,49.85l-4.65-2.65v-5.4l4.65-2.7l4.65,2.7v5.4 M-95.4,31l-4.65,2.7l-4.65-2.7v-5.4l4.65-2.7l4.65,2.7V31
|
||||
l4.65,2.7 M-86.1,31v-5.4l4.7-2.7l4.65,2.7V31l-4.65,2.7 M-100.05,39.1v-5.4 M-90.75,39.1l-4.65,2.7 M-109.35,39.1l4.65,2.7
|
||||
M-104.7,31l-4.65,2.7 M-109.35,6.75l4.65,2.7v5.4l-4.65,2.65 M-86.1,14.85v-5.4l4.7-2.7l4.65,2.7v5.4l-4.65,2.65L-86.1,14.85z
|
||||
M-81.4,22.9v-5.4 M-86.1,25.6l-4.65-2.7v-5.4l4.65-2.65 M-100.05,22.9v-5.4l4.65-2.65l4.65,2.65 M-100.05,6.75v-5.4l4.65-2.7
|
||||
l4.65,2.7v5.4l-4.65,2.7L-100.05,6.75z M-81.4,6.75v-5.4l4.65-2.7l4.65,2.7v5.4l-4.65,2.7 M-90.75,6.75l4.65,2.7 M-95.4,14.85v-5.4
|
||||
M-95.4,25.6l4.65-2.7 M-100.05,17.5l-4.65-2.65 M-104.7,9.45l4.65-2.7 M-109.35,22.9l4.65,2.7 M-86.1,47.2l-4.65,2.65
|
||||
M-104.7,47.2l-4.65,2.65 M-11.6,95.7v-5.4l4.65-2.7l4.65,2.7 M-20.9,95.7v-5.4l4.65-2.7l4.65,2.7 M-16.25,82.2l-4.65-2.65v-5.4
|
||||
l4.65-2.7l4.65,2.7v5.4L-16.25,82.2v5.4 M-2.3,79.55l-4.65,2.65l-4.65-2.65 M-6.95,82.2v5.4 M-30.2,95.7v-5.4l4.65-2.7l4.65,2.7
|
||||
M-39.55,95.7v-5.4l4.7-2.7l4.65,2.7 M-39.55,79.55v-5.4l4.7-2.7l4.65,2.7v5.4l-4.65,2.65L-39.55,79.55l-4.65,2.65l-4.65-2.65
|
||||
M-20.9,79.55l-4.65,2.65l-4.65-2.65 M-34.85,87.6v-5.4 M-25.55,87.6v-5.4 M-20.9,74.15l-4.65-2.7v-5.4l4.65-2.7l4.65,2.7v5.4
|
||||
M-30.2,74.15l4.65-2.7 M-25.55,66.05l-4.65-2.7v-5.4l4.65-2.7l4.65,2.7v5.4 M-39.55,74.15l-4.65-2.7v-5.4l4.65-2.7l4.7,2.7v5.4
|
||||
M-30.2,57.95l-4.65-2.7v-5.4l4.65-2.65l4.65,2.65v5.4 M-39.55,63.35v-5.4l4.7-2.7 M-30.2,63.35l-4.65,2.7 M-11.6,74.15l4.65-2.7
|
||||
l4.65,2.7 M-6.95,66.05l-4.65-2.7v-5.4l4.65-2.7l4.65,2.7v5.4L-6.95,66.05v5.4 M-16.25,66.05l4.65-2.7 M-11.6,57.95l-4.65-2.7v-5.4
|
||||
l4.65-2.65l4.65,2.65v5.4 M-16.25,55.25l-4.65,2.7 M-48.85,95.7v-5.4l4.65-2.7l4.65,2.7 M-58.15,95.7v-5.4l4.65-2.7l4.65,2.7
|
||||
M-58.15,79.55v-5.4l4.65-2.7l4.65,2.7v5.4l-4.65,2.65L-58.15,79.55l-4.65,2.65l-4.65-2.65 M-44.2,87.6v-5.4 M-53.5,87.6v-5.4
|
||||
M-67.45,95.7v-5.4l4.65-2.7l4.65,2.7 M-76.75,90.3l4.65-2.7l4.65,2.7 M-76.75,74.15l4.65-2.7l4.65,2.7v5.4l-4.65,2.65l-4.65-2.65
|
||||
M-62.8,87.6v-5.4 M-72.1,87.6v-5.4 M-67.45,74.15l4.65-2.7l4.65,2.7 M-62.8,71.45v-5.4l4.65-2.7l4.65,2.7v5.4 M-62.8,66.05
|
||||
l-4.65-2.7v-5.4l4.65-2.7l4.65,2.7v5.4 M-76.75,63.35l4.65,2.7v5.4 M-62.8,55.25v-5.4l4.65-2.65l4.65,2.65v5.4l-4.65,2.7
|
||||
M-67.45,63.35l-4.65,2.7 M-72.1,55.25l4.65,2.7 M-48.85,74.15l4.65-2.7 M-44.2,66.05l-4.65-2.7v-5.4l4.65-2.7l4.65,2.7
|
||||
M-53.5,49.85l4.65-2.65l4.65,2.65v5.4 M-53.5,66.05l4.65-2.7 M-53.5,55.25l4.65,2.7 M-48.85,47.2v-5.4l4.65-2.7l4.65,2.7v5.4
|
||||
l-4.65,2.65 M-58.15,47.2v-5.4l4.65-2.7l4.65,2.7 M-58.15,25.6l4.65-2.7l4.65,2.7V31l-4.65,2.7l-4.65-2.7V25.6l-4.65-2.7v-5.4
|
||||
M-48.85,25.6l4.65-2.7l4.65,2.7V31l-4.65,2.7l-4.65-2.7 M-44.2,39.1v-5.4 M-53.5,39.1v-5.4 M-62.8,49.85l-4.65-2.65v-5.4l4.65-2.7
|
||||
l4.65,2.7 M-76.75,47.2v-5.4l4.65-2.7l4.65,2.7 M-76.75,25.6l4.65-2.7l4.65,2.7V31l-4.65,2.7l-4.65-2.7 M-58.15,31l-4.65,2.7
|
||||
l-4.65-2.7 M-72.1,39.1v-5.4 M-62.8,39.1v-5.4 M-67.45,14.85v-5.4l4.65-2.7l4.65,2.7v5.4l-4.65,2.65L-67.45,14.85l-4.65,2.65
|
||||
l-4.65-2.65 M-72.1,22.9v-5.4 M-62.8,6.75v-5.4l4.65-2.7l4.65,2.7v5.4l-4.65,2.7 M-72.1,6.75l4.65,2.7 M-44.2,22.9v-5.4l4.65-2.65
|
||||
l4.7,2.65v5.4l-4.7,2.7 M-44.2,17.5l-4.65-2.65v-5.4l4.65-2.7l4.65,2.7v5.4 M-48.85,14.85l-4.65,2.65l-4.65-2.65 M-53.5,22.9v-5.4
|
||||
M-44.2,6.75v-5.4l4.65-2.7l4.7,2.7v5.4l-4.7,2.7 M-53.5,6.75l4.65,2.7 M-67.45,25.6l4.65-2.7 M-11.6,47.2v-5.4l4.65-2.7l4.65,2.7
|
||||
M-11.6,41.8l-4.65-2.7v-5.4l4.65-2.7l4.65,2.7v5.4 M-16.25,33.7L-20.9,31v-5.4l4.65-2.7l4.65,2.7V31 M-2.3,31l-4.65,2.7
|
||||
M-30.2,47.2v-5.4l4.65-2.7l4.65,2.7v5.4l-4.65,2.65 M-39.55,41.8l4.7-2.7l4.65,2.7 M-34.85,22.9l4.65,2.7V31l-4.65,2.7l-4.7-2.7
|
||||
M-20.9,31l-4.65,2.7L-30.2,31 M-34.85,39.1v-5.4 M-25.55,39.1v-5.4 M-20.9,25.6l-4.65-2.7v-5.4l4.65-2.65l4.65,2.65v5.4
|
||||
M-25.55,17.5l-4.65-2.65v-5.4l4.65-2.7l4.65,2.7v5.4 M-25.55,6.75v-5.4l4.65-2.7l4.65,2.7v5.4l-4.65,2.7 M-30.2,14.85l-4.65,2.65
|
||||
M-34.85,6.75l4.65,2.7 M-6.95,17.5l-4.65-2.65v-5.4l4.65-2.7l4.65,2.7v5.4L-6.95,17.5v5.4l-4.65,2.7 M-11.6,14.85l-4.65,2.65
|
||||
M-16.25,6.75l4.65,2.7 M-16.25,1.35l4.65-2.7l4.65,2.7v5.4 M-6.95,22.9l4.65,2.7 M-30.2,25.6l4.65-2.7 M-16.25,39.1l-4.65,2.7
|
||||
M-67.45,47.2l-4.65,2.65 M-2.3,47.2l-4.65,2.65 M-34.85,49.85l-4.7-2.65 M-16.25,49.85l-4.65-2.65 M-81.4,39.1l4.65,2.7
|
||||
M-11.6-1.35v-5.4l4.65-2.7l4.65,2.7 M-11.6-6.75l-4.65-2.7v-5.4l4.65-2.65l4.65,2.65v5.4 M-16.25-14.85l-4.65-2.65v-5.4l4.65-2.7
|
||||
l4.65,2.7v5.4 M-2.3-17.5l-4.65,2.65 M-20.9-1.35v-5.4l4.65-2.7 M-20.9-6.75l-4.65-2.7v-5.4l4.65-2.65 M-25.55-9.45l-4.65,2.7
|
||||
l-4.65-2.7v-5.4l4.65-2.65l4.65,2.65 M-30.2-6.75v5.4l-4.65,2.7 M-39.55-1.35v-5.4l4.7-2.7 M-34.85-14.85l-4.7-2.65v-5.4l4.7-2.7
|
||||
l4.65,2.7v5.4 M-30.2-33.7v-5.4l4.65-2.7l4.65,2.7v5.4l-4.65,2.7L-30.2-33.7l-4.65,2.7l-4.7-2.7v-5.4l4.7-2.7l4.65,2.7 M-20.9-22.9
|
||||
l-4.65-2.7V-31 M-34.85-25.6V-31 M-39.55-39.1l-4.65-2.7v-5.4l4.65-2.65l4.7,2.65v5.4 M-25.55-41.8v-5.4l4.65-2.65l4.65,2.65v5.4
|
||||
l-4.65,2.7 M-6.95-31l-4.65-2.7v-5.4l4.65-2.7l4.65,2.7v5.4L-6.95-31v5.4l-4.65,2.7 M-16.25-25.6V-31l4.65-2.7 M-16.25-41.8
|
||||
l4.65,2.7 M-16.25-47.2l4.65-2.65l4.65,2.65v5.4 M-30.2-22.9l4.65-2.7 M-16.25-31l-4.65-2.7 M-6.95-25.6l4.65,2.7 M-44.2,1.35
|
||||
l-4.65-2.7v-5.4l4.65-2.7l4.65,2.7 M-58.15-1.35v-5.4l4.65-2.7l4.65,2.7 M-58.15-6.75l-4.65-2.7v-5.4l4.65-2.65l4.65,2.65v5.4
|
||||
M-62.8-14.85l-4.65-2.65v-5.4l4.65-2.7l4.65,2.7v5.4 M-39.55-17.5l-4.65,2.65l-4.65-2.65v-5.4l4.65-2.7l4.65,2.7 M-44.2-9.45v-5.4
|
||||
M-53.5-14.85l4.65-2.65 M-62.8,1.35l-4.65-2.7v-5.4l4.65-2.7 M-76.75-6.75l-4.65-2.7v-5.4l4.65-2.65l4.65,2.65v5.4L-76.75-6.75
|
||||
v5.4 M-76.75-17.5v-5.4l4.65-2.7l4.65,2.7 M-67.45-17.5l-4.65,2.65 M-72.1-9.45l4.65,2.7 M-67.45-33.7v-5.4l4.65-2.7l4.65,2.7v5.4
|
||||
L-62.8-31L-67.45-33.7z M-62.8-25.6V-31 M-72.1-25.6V-31l4.65-2.7 M-72.1-31l-4.65-2.7v-5.4l4.65-2.7l4.65,2.7 M-76.75-39.1
|
||||
l-4.65-2.7v-5.4l4.65-2.65l4.65,2.65v5.4 M-62.8-41.8v-5.4l4.65-2.65l4.65,2.65v5.4l-4.65,2.7 M-44.2-25.6V-31l4.65-2.7 M-44.2-31
|
||||
l-4.65-2.7v-5.4l4.65-2.7 M-48.85-33.7L-53.5-31l-4.65-2.7 M-48.85-22.9l-4.65-2.7V-31 M-53.5-41.8l4.65,2.7 M-58.15-22.9l4.65-2.7
|
||||
M-58.15-49.85v-5.4l4.65-2.7l4.65,2.7v5.4l-4.65,2.65 M-48.85-55.25l4.65-2.7l4.65,2.7v5.4 M-58.15-71.45l4.65-2.7l4.65,2.7v5.4
|
||||
l-4.65,2.7l-4.65-2.7V-71.45z M-48.85-71.45l4.65-2.7l4.65,2.7v5.4l-4.65,2.7l-4.65-2.7 M-44.2-57.95v-5.4 M-53.5-57.95v-5.4
|
||||
M-76.75-49.85v-5.4l4.65-2.7l4.65,2.7v5.4l-4.65,2.65 M-67.45-55.25l4.65-2.7l4.65,2.7 M-76.75-55.25l-4.65-2.7v-5.4l4.65-2.7
|
||||
l4.65,2.7v5.4 M-81.4-63.35l-4.7-2.7v-5.4l4.7-2.7l4.65,2.7v5.4 M-81.4-74.15v-5.4l4.65-2.65l4.65,2.65v5.4l-4.65,2.7
|
||||
M-58.15-66.05l-4.65,2.7l-4.65-2.7v-5.4l4.65-2.7l4.65,2.7 M-62.8-57.95v-5.4 M-72.1-74.15l4.65,2.7 M-67.45-66.05l-4.65,2.7
|
||||
M-67.45-82.2v-5.4l4.65-2.7l4.65,2.7v5.4l-4.65,2.65L-67.45-82.2l-4.65,2.65 M-76.75-82.2v-5.4l4.65-2.7l4.65,2.7 M-72.1-90.3
|
||||
v-5.4 M-62.8-90.3v-5.4 M-53.5-74.15v-5.4l4.65-2.65l4.65,2.65v5.4 M-58.15-82.2l4.65,2.65 M-58.15-87.6l4.65-2.7l4.65,2.7v5.4
|
||||
M-53.5-90.3v-5.4 M-44.2-95.7v5.4l-4.65,2.7 M-62.8-74.15v-5.4 M-11.6-49.85v-5.4l4.65-2.7l4.65,2.7 M-20.9-49.85v-5.4l4.65-2.7
|
||||
l4.65,2.7 M-16.25-63.35l-4.65-2.7v-5.4l4.65-2.7l4.65,2.7v5.4L-16.25-63.35v5.4 M-2.3-66.05l-4.65,2.7l-4.65-2.7 M-11.6-71.45
|
||||
l4.65-2.7l4.65,2.7 M-6.95-63.35v5.4 M-25.55-47.2l-4.65-2.65v-5.4l4.65-2.7l4.65,2.7 M-39.55-55.25l4.7-2.7l4.65,2.7
|
||||
M-39.55-71.45l4.7-2.7l4.65,2.7v5.4l-4.65,2.7l-4.7-2.7 M-20.9-71.45l-4.65-2.7v-5.4l4.65-2.65l4.65,2.65v5.4 M-20.9-66.05
|
||||
l-4.65,2.7l-4.65-2.7 M-25.55-74.15l-4.65,2.7 M-34.85-63.35v5.4 M-25.55-57.95v-5.4 M-34.85-74.15v-5.4l4.65-2.65l4.65,2.65
|
||||
M-44.2-79.55l4.65-2.65l4.7,2.65 M-39.55-82.2v-5.4l4.7-2.7l4.65,2.7v5.4 M-34.85-90.3v-5.4 M-16.25-95.7v5.4l-4.65,2.7l-4.65-2.7
|
||||
v-5.4 M-25.55-90.3l-4.65,2.7 M-20.9-82.2v-5.4 M-6.95-79.55l-4.65-2.65v-5.4l4.65-2.7l4.65,2.7v5.4L-6.95-79.55v5.4 M-16.25-79.55
|
||||
l4.65-2.65 M-11.6-87.6l-4.65-2.7 M-6.95-95.7v5.4 M-44.2-90.3l4.65,2.7 M-62.8-47.2l-4.65-2.65 M-44.2-47.2l-4.65-2.65
|
||||
M-30.2-49.85l-4.65,2.65 M-2.3-49.85l-4.65,2.65 M-95.4-1.35v-5.4l4.65-2.7l4.65,2.7v5.4l-4.65,2.7 M-86.1-6.75l4.7-2.7
|
||||
M-100.05,1.35l-4.65-2.7v-5.4l4.65-2.7l4.65,2.7 M-95.4-17.5l-4.65,2.65l-4.65-2.65v-5.4l4.65-2.7l4.65,2.7V-17.5z M-95.4-22.9
|
||||
l4.65-2.7l4.65,2.7v5.4l-4.65,2.65l-4.65-2.65 M-81.4-14.85l-4.7-2.65 M-100.05-9.45v-5.4 M-90.75-14.85v5.4 M-109.35-9.45
|
||||
l4.65,2.7 M-104.7-17.5l-4.65,2.65 M-109.35-41.8l4.65,2.7v5.4l-4.65,2.7 M-90.75-25.6V-31l4.65-2.7l4.7,2.7v5.4l-4.7,2.7
|
||||
M-100.05-25.6V-31l4.65-2.7l4.65,2.7 M-100.05-47.2l4.65-2.65l4.65,2.65v5.4l-4.65,2.7l-4.65-2.7V-47.2l-4.65-2.65 M-90.75-41.8
|
||||
l4.65,2.7v5.4 M-86.1-39.1l4.7-2.7 M-95.4-33.7v-5.4 M-109.35-25.6l4.65,2.7 M-100.05-31l-4.65-2.7 M-104.7-39.1l4.65-2.7
|
||||
M-95.4-49.85v-5.4l4.65-2.7l4.65,2.7v5.4l-4.65,2.65 M-86.1-55.25l4.7-2.7 M-95.4-55.25l-4.65-2.7v-5.4l4.65-2.7l4.65,2.7v5.4
|
||||
M-100.05-63.35l-4.65-2.7v-5.4l4.65-2.7l4.65,2.7v5.4 M-95.4-71.45l4.65-2.7l4.65,2.7 M-86.1-66.05l-4.65,2.7 M-109.35-57.95
|
||||
l4.65,2.7v5.4l-4.65,2.65 M-109.35-74.15l4.65,2.7 M-104.7-66.05l-4.65,2.7 M-109.35-90.3l4.65,2.7v5.4l-4.65,2.65 M-81.4-79.55
|
||||
l-4.7-2.65v-5.4l4.7-2.7l4.65,2.7 M-86.1-82.2l-4.65,2.65l-4.65-2.65v-5.4l4.65-2.7l4.65,2.7 M-100.05-74.15v-5.4l4.65-2.65
|
||||
M-95.4-87.6l-4.65-2.7v-5.4 M-81.4-95.7v5.4 M-90.75-95.7v5.4 M-90.75-79.55v5.4 M-104.7-55.25l4.65-2.7 M-100.05-79.55
|
||||
l-4.65-2.65 M-104.7-87.6l4.65-2.7 M-81.4-47.2l-4.7-2.65 M-76.75-33.7L-81.4-31 M-81.4-25.6l4.65,2.7 M-67.45-1.35l-4.65,2.7
|
||||
M-104.7-1.35l-4.65,2.7 M-81.4,1.35l-4.7-2.7 M-25.55,1.35l-4.65-2.7 M-53.5,1.35l4.65-2.7 M-2.3-1.35l-4.65,2.7 M-2.3,57.95
|
||||
l4.65-2.7 M2.35,66.05l-4.65-2.7 M-2.3-39.1l4.65-2.7 M2.35-31l-4.65-2.7 M2.35-79.55L-2.3-82.2 M-2.3-87.6l4.65-2.7 M-2.3,9.45
|
||||
l4.65-2.7 M2.35,17.5l-4.65-2.65"/>
|
||||
</symbol>
|
||||
<g id="Layer_1">
|
||||
</g>
|
||||
<g id="Layer_6">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" fill="#EFEEEE" d="M217.5,108.95c0,29.833-10.533,55.399-31.6,76.7
|
||||
c-0.7,0.833-1.484,1.6-2.351,2.3c-3.466,3.399-7.134,6.483-11,9.25c-18.267,13.467-39.366,20.2-63.3,20.2
|
||||
c-23.967,0-45.033-6.733-63.2-20.2c-4.8-3.4-9.3-7.25-13.5-11.55c-16.367-16.267-26.417-35.167-30.15-56.7
|
||||
c-0.733-4.2-1.217-8.467-1.45-12.8c-0.1-2.4-0.15-4.801-0.15-7.2c0-2.534,0.05-4.95,0.15-7.25c0-0.233,0.066-0.467,0.2-0.7
|
||||
c1.567-26.6,12.033-49.583,31.4-68.95C53.85,11.017,79.417,0.5,109.25,0.5c29.934,0,55.483,10.517,76.65,31.55
|
||||
C206.967,53.483,217.5,79.117,217.5,108.95z"/>
|
||||
</g>
|
||||
<g id="Layer_5">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" fill="#010101" d="M195.45,43l-22.4,22.4c-8.833,13-13.25,27.867-13.25,44.6
|
||||
c0,17.934,5.067,33.833,15.2,47.7l19,18.95c-2.5,3.066-5.2,6.066-8.1,9c-0.7,0.833-1.484,1.6-2.351,2.3
|
||||
c-2.533,2.5-5.167,4.816-7.899,6.95L158.1,177.35c-13.934-10.733-30.133-16.1-48.6-16.1c-17.933,0-33.833,5.1-47.7,15.3
|
||||
L43.25,195.15c-3.767-2.867-7.333-6.034-10.7-9.5c-2.8-2.801-5.417-5.667-7.85-8.601l19.15-19.2
|
||||
c10.066-13.966,15.1-29.916,15.1-47.85c0-17.5-4.867-33.017-14.6-46.55l-21.05-21c2.833-3.6,5.917-7.067,9.25-10.4
|
||||
c2.934-2.867,5.934-5.55,9-8.05L61.9,44.35C75.7,54.583,91.567,59.7,109.5,59.7c18.467,0,34.666-5.367,48.6-16.1L177.4,24.35
|
||||
c2.899,2.367,5.732,4.933,8.5,7.7C189.367,35.583,192.55,39.233,195.45,43z"/>
|
||||
</g>
|
||||
<g id="Layer_4">
|
||||
<defs>
|
||||
<path id="SVGID_1_" d="M159.8,110c0-16.733,4.417-31.6,13.25-44.6l22.4-22.4c-2.9-3.767-6.083-7.417-9.55-10.95
|
||||
c-2.768-2.767-5.601-5.333-8.5-7.7L158.1,43.6c-13.934,10.733-30.133,16.1-48.6,16.1c-17.933,0-33.8-5.117-47.6-15.35L41.55,24
|
||||
c-3.066,2.5-6.066,5.183-9,8.05c-3.333,3.333-6.417,6.8-9.25,10.4l21.05,21c9.733,13.533,14.6,29.05,14.6,46.55
|
||||
c0,17.934-5.034,33.884-15.1,47.85l-19.15,19.2c2.433,2.934,5.05,5.8,7.85,8.601c3.367,3.466,6.934,6.633,10.7,9.5L61.8,176.55
|
||||
c13.867-10.2,29.767-15.3,47.7-15.3c18.467,0,34.666,5.366,48.6,16.1L175.65,194.9c2.732-2.134,5.366-4.45,7.899-6.95
|
||||
c0.866-0.7,1.65-1.467,2.351-2.3c2.899-2.934,5.6-5.934,8.1-9l-19-18.95C164.867,143.833,159.8,127.934,159.8,110z"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_2_">
|
||||
<use xlink:href="#SVGID_1_" overflow="visible"/>
|
||||
</clipPath>
|
||||
<g clip-path="url(#SVGID_2_)">
|
||||
|
||||
<use xlink:href="#hex_grid" width="228.55" height="197.233" x="-114.25" y="-98.617" transform="matrix(1.1415 0 0 -1.1415 105.5 107.75)" overflow="visible"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Layer_2">
|
||||
<g>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" fill="#35C6F4" d="M79.1,110.95c-0.033-0.667-0.05-1.333-0.05-2
|
||||
c0-0.7,0.017-1.366,0.05-2c0-0.067,0.017-0.134,0.05-0.2c0.434-7.367,3.333-13.733,8.7-19.1c5.9-5.833,12.983-8.75,21.25-8.75
|
||||
c8.301,0,15.384,2.917,21.25,8.75c5.834,5.934,8.75,13.033,8.75,21.3c0,8.267-2.916,15.35-8.75,21.25
|
||||
c-0.199,0.233-0.416,0.45-0.649,0.649c-0.967,0.934-1.983,1.784-3.05,2.551c-5.066,3.733-10.917,5.6-17.551,5.6
|
||||
c-6.633,0-12.466-1.866-17.5-5.6c-1.333-0.934-2.583-2-3.75-3.2c-4.533-4.5-7.317-9.733-8.35-15.7
|
||||
C79.3,113.334,79.167,112.15,79.1,110.95z M126.1,127.25l3.601,3.6L126.1,127.25z"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" fill="none" stroke="#35C6F4" stroke-width="2" stroke-miterlimit="1" d="
|
||||
M158.6,60.25l-15,14.65 M31.7,33.1l40.75,40.65 M126.1,127.25l3.601,3.6 M157.05,158l27.65,28.6 M153.05,153.95l-10.75-11.2
|
||||
M186.6,33l-28,27.25 M33.15,186.25l27.35-27.4"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" fill="none" stroke="#35C6F4" stroke-width="7" stroke-miterlimit="1" d="
|
||||
M158.6,60.25l-16.949,17.2 M59.4,61.35L76.6,78.5 M60.5,158.85l16.75-17.399 M153.05,153.95l4,4.05 M139.45,140.4l13.6,13.55"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 26 KiB |
2
NzbDrone.sln.DotSettings
Normal file
2
NzbDrone.sln.DotSettings
Normal file
@@ -0,0 +1,2 @@
|
||||
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
|
||||
<s:Boolean x:Key="/Default/Environment/ExternalSources/Decompiler/DecompileMethodBodies/@EntryValue">True</s:Boolean></wpf:ResourceDictionary>
|
||||
261
build.ps1
261
build.ps1
@@ -1 +1,260 @@
|
||||
Write-Warning "DEPRECATED -- Please use build.sh instead."
|
||||
$msBuild = 'C:\Windows\Microsoft.NET\Framework64\v4.0.30319\msbuild.exe'
|
||||
$outputFolder = '.\_output'
|
||||
$outputFolderMono = '.\_output_mono'
|
||||
$outputFolderOsx = '.\_output_osx'
|
||||
$outputFolderOsxApp = '.\_output_osx_app'
|
||||
$testPackageFolder = '.\_tests\'
|
||||
$testSearchPattern = '*.Test\bin\x86\Release'
|
||||
$sourceFolder = '.\src'
|
||||
$updateFolder = $outputFolder + '\NzbDrone.Update'
|
||||
$updateFolderMono = $outputFolderMono + '\NzbDrone.Update'
|
||||
|
||||
Function Build()
|
||||
{
|
||||
Write-Host "##teamcity[progressStart 'Build']"
|
||||
|
||||
$clean = $msbuild + " src\nzbdrone.sln /t:Clean /m"
|
||||
$build = $msbuild + " src\nzbdrone.sln /p:Configuration=Release /p:Platform=x86 /t:Build /m"
|
||||
|
||||
if(Test-Path $outputFolder)
|
||||
{
|
||||
Remove-Item -Recurse -Force $outputFolder -ErrorAction Continue
|
||||
}
|
||||
|
||||
Invoke-Expression $clean
|
||||
CheckExitCode
|
||||
|
||||
Invoke-Expression $build
|
||||
CheckExitCode
|
||||
|
||||
CleanFolder $outputFolder
|
||||
|
||||
AddJsonNet
|
||||
|
||||
Write-Host "Removing Mono.Posix.dll"
|
||||
Remove-Item "$outputFolder\Mono.Posix.dll"
|
||||
|
||||
Write-Host "##teamcity[progressFinish 'Build']"
|
||||
}
|
||||
|
||||
Function CleanFolder($path, $keepConfigFiles)
|
||||
{
|
||||
Write-Host Removing XMLDoc files
|
||||
get-childitem $path -File -Filter *.xml -Recurse | foreach ($_) {
|
||||
|
||||
$filename = $_.FullName
|
||||
$exeFilename = $filename -replace "xml", "exe"
|
||||
$dllFilename = $filename -replace "xml", "dll"
|
||||
|
||||
if (Test-Path $exeFilename) {
|
||||
remove-item $_.fullname
|
||||
}
|
||||
|
||||
if (Test-Path $dllFilename) {
|
||||
remove-item $_.fullname
|
||||
}
|
||||
}
|
||||
|
||||
get-childitem $path -File -Filter *.transform -Recurse | foreach ($_) {remove-item $_.fullname}
|
||||
|
||||
if($keepConfigFiles -ne $true)
|
||||
{
|
||||
get-childitem $path -File -Filter *.dll.config -Recurse | foreach ($_) {remove-item $_.fullname}
|
||||
}
|
||||
|
||||
Write-Host Removing FluentValidation.Resources files
|
||||
get-childitem $path -File -Filter FluentValidation.resources.dll -recurse | foreach ($_) {remove-item $_.fullname}
|
||||
|
||||
get-childitem $path -File -Filter app.config -Recurse | foreach ($_) {remove-item $_.fullname}
|
||||
|
||||
Write-Host Removing .less files
|
||||
get-childitem $path -File -Filter *.less -Recurse | foreach ($_) {remove-item $_.fullname}
|
||||
|
||||
Write-Host Removing vshost files
|
||||
get-childitem $path -File -Filter *.vshost.exe -Recurse | foreach ($_) {remove-item $_.fullname}
|
||||
|
||||
if(Test-Path $$path\NuGet)
|
||||
{
|
||||
Write-Host Removing NuGet
|
||||
Remove-Item -Recurse -Force "$path\NuGet"
|
||||
}
|
||||
|
||||
Write-Host Removing Empty folders
|
||||
while (Get-ChildItem $path -recurse | where {!@(Get-ChildItem -force $_.fullname)} | Test-Path)
|
||||
{
|
||||
Get-ChildItem $path -Directory -recurse | where {!@(Get-ChildItem -force $_.fullname)} | Remove-Item
|
||||
}
|
||||
}
|
||||
|
||||
Function PackageMono()
|
||||
{
|
||||
Write-Host "##teamcity[progressStart 'Creating Mono Package']"
|
||||
|
||||
if(Test-Path $outputFolderMono)
|
||||
{
|
||||
Remove-Item -Recurse -Force $outputFolderMono -ErrorAction Continue
|
||||
}
|
||||
|
||||
Copy-Item $outputFolder $outputFolderMono -recurse
|
||||
|
||||
Write-Host Creating MDBs
|
||||
get-childitem $outputFolderMono -File -Include @("*.exe", "*.dll") -Exclude @("MediaInfo.dll", "sqlite3.dll") -Recurse | foreach ($_) {
|
||||
Write-Host "Creating .mdb for $_"
|
||||
& "tools\pdb2mdb\pdb2mdb.exe" $_.fullname
|
||||
}
|
||||
|
||||
Write-Host Removing PDBs
|
||||
get-childitem $outputFolderMono -File -Filter *.pdb -Recurse | foreach ($_) {remove-item $_.fullname}
|
||||
|
||||
Write-Host Removing Service helpers
|
||||
get-childitem $outputFolderMono -File -Filter ServiceUninstall.* -Recurse | foreach ($_) {remove-item $_.fullname}
|
||||
get-childitem $outputFolderMono -File -Filter ServiceInstall.* -Recurse | foreach ($_) {remove-item $_.fullname}
|
||||
|
||||
Write-Host Removing native windows binaries Sqlite, MediaInfo
|
||||
get-childitem $outputFolderMono -File -Filter sqlite3.* -Recurse | foreach ($_) {remove-item $_.fullname}
|
||||
get-childitem $outputFolderMono -File -Filter MediaInfo.* -Recurse | foreach ($_) {remove-item $_.fullname}
|
||||
|
||||
Write-Host "Adding MediaInfoDotNet.dll.config (for dllmap)"
|
||||
Copy-Item "$sourceFolder\MediaInfoDotNet.dll.config" $outputFolderMono
|
||||
|
||||
Write-Host Renaming NzbDrone.Console.exe to NzbDrone.exe
|
||||
Get-ChildItem $outputFolderMono -File -Filter "NzbDrone.exe*" -Recurse | foreach ($_) {remove-item $_.fullname}
|
||||
|
||||
Write-Host Removing NzbDrone.Windows
|
||||
get-childitem $outputFolderMono -File -Filter NzbDrone.Windows.* -Recurse | foreach ($_) {remove-item $_.fullname}
|
||||
|
||||
Get-ChildItem $outputFolderMono -File -Filter "NzbDrone.Console.exe*" -Recurse | foreach ($_) {
|
||||
$newName = $_.fullname -Replace ".Console",""
|
||||
|
||||
Rename-Item $_.fullname $newName
|
||||
}
|
||||
|
||||
Write-Host Adding NzbDrone.Mono to UpdatePackage
|
||||
Copy-Item $outputFolderMono\* $updateFolderMono -Filter NzbDrone.Mono.*
|
||||
|
||||
Write-Host "##teamcity[progressFinish 'Creating Mono Package']"
|
||||
}
|
||||
|
||||
Function PackageOsx()
|
||||
{
|
||||
Write-Host "##teamcity[progressStart 'Creating OS X Package']"
|
||||
|
||||
if(Test-Path $outputFolderOsx)
|
||||
{
|
||||
Remove-Item -Recurse -Force $outputFolderOsx -ErrorAction Continue
|
||||
}
|
||||
|
||||
Copy-Item $outputFolderMono $outputFolderOsx -recurse
|
||||
|
||||
Write-Host "Adding sqlite dylibs"
|
||||
Copy-Item "$sourceFolder\Libraries\sqlite\*.dylib" "$outputFolderOsx"
|
||||
|
||||
Write-Host "Adding MediaInfo dylib"
|
||||
Copy-Item "$sourceFolder\Libraries\MediaInfo\*.dylib" "$outputFolderOsx"
|
||||
|
||||
Write-Host "Adding Startup script"
|
||||
Copy-Item .\osx\Sonarr "$outputFolderOsx"
|
||||
|
||||
Write-Host "##teamcity[progressFinish 'Creating OS X Package']"
|
||||
}
|
||||
|
||||
|
||||
Function PackageOsxApp()
|
||||
{
|
||||
Write-Host "##teamcity[progressStart 'Creating OS X App Package']"
|
||||
|
||||
if(Test-Path $outputFolderOsxApp)
|
||||
{
|
||||
Remove-Item -Recurse -Force $outputFolderOsxApp -ErrorAction Continue
|
||||
}
|
||||
|
||||
Copy-Item .\osx\Sonarr.app $outputFolderOsxApp\Sonarr.app -recurse
|
||||
Copy-Item $outputFolderOsx $outputFolderOsxApp\Sonarr.app\Contents\MacOS -recurse
|
||||
|
||||
Write-Host "##teamcity[progressFinish 'Creating OS X App Package']"
|
||||
}
|
||||
|
||||
Function AddJsonNet()
|
||||
{
|
||||
get-childitem $outputFolder -File -Filter Newtonsoft.Json.* -Recurse | foreach ($_) {remove-item $_.fullname}
|
||||
Copy-Item .\src\packages\Newtonsoft.Json.*.*\lib\net35\*.dll -Destination $outputFolder
|
||||
Copy-Item .\src\packages\Newtonsoft.Json.*.*\lib\net35\*.dll -Destination $outputFolder\NzbDrone.Update
|
||||
}
|
||||
|
||||
Function PackageTests()
|
||||
{
|
||||
|
||||
Write-Host Packaging Tests
|
||||
Write-Host "##teamcity[progressStart 'Creating Test Package']"
|
||||
|
||||
if(Test-Path $testPackageFolder)
|
||||
{
|
||||
Remove-Item -Recurse -Force $testPackageFolder -ErrorAction Continue
|
||||
}
|
||||
|
||||
Get-ChildItem -Recurse -Directory | Where-Object {$_.FullName -like $testSearchPattern} | foreach($_){
|
||||
Copy-Item -Recurse ($_.FullName + "\*") $testPackageFolder -ErrorAction Ignore
|
||||
}
|
||||
|
||||
.\src\.nuget\NuGet.exe install NUnit.Runners -Version 2.6.1 -Output $testPackageFolder
|
||||
|
||||
Copy-Item $outputFolder\*.dll -Destination $testPackageFolder -Force
|
||||
Copy-Item $outputFolder\*.pdb -Destination $testPackageFolder -Force
|
||||
Copy-Item .\*.sh -Destination $testPackageFolder -Force
|
||||
|
||||
Write-Host Creating MDBs for tests
|
||||
get-childitem $testPackageFolder -File -Include @("*.exe", "*.dll") -Exclude @("MediaInfo.dll", "sqlite3.dll") -Recurse | foreach ($_) {
|
||||
Write-Host "Creating .mdb for $_"
|
||||
& "tools\pdb2mdb\pdb2mdb.exe" $_.fullname
|
||||
}
|
||||
|
||||
get-childitem $testPackageFolder -File -Filter *log.config | foreach ($_) {remove-item $_.fullname}
|
||||
|
||||
CleanFolder $testPackageFolder $true
|
||||
|
||||
Write-Host "Adding MediaInfoDotNet.dll.config (for dllmap)"
|
||||
Copy-Item "$sourceFolder\MediaInfoDotNet.dll.config" -Destination $testPackageFolder -Force
|
||||
|
||||
Write-Host "##teamcity[progressFinish 'Creating Test Package']"
|
||||
}
|
||||
|
||||
Function RunGulp()
|
||||
{
|
||||
Write-Host "##teamcity[progressStart 'Running Gulp']"
|
||||
$gulpPath = '.\node_modules\gulp\bin\gulp'
|
||||
Invoke-Expression 'npm install'
|
||||
CheckExitCode
|
||||
|
||||
Invoke-Expression ('node ' + $gulpPath + ' build') -ErrorAction Continue -Verbose
|
||||
CheckExitCode
|
||||
|
||||
Remove-Item $outputFolder\UI\build.txt -ErrorAction Continue
|
||||
|
||||
Write-Host "##teamcity[progressFinish 'Running Gulp']"
|
||||
}
|
||||
|
||||
Function CheckExitCode()
|
||||
{
|
||||
if ($lastexitcode -ne 0)
|
||||
{
|
||||
Write-Host $errorMessage
|
||||
exit 1
|
||||
}
|
||||
}
|
||||
|
||||
Function CleanupWindowsPackage()
|
||||
{
|
||||
Write-Host Removing NzbDrone.Mono
|
||||
get-childitem $outputFolder -File -Filter NzbDrone.Mono.* -Recurse | foreach ($_) {remove-item $_.fullname}
|
||||
|
||||
Write-Host Adding NzbDrone.Windows to UpdatePackage
|
||||
Copy-Item $outputFolder\* $updateFolder -Filter NzbDrone.Windows.*
|
||||
}
|
||||
|
||||
Build
|
||||
RunGulp
|
||||
PackageMono
|
||||
PackageOsx
|
||||
PackageOsxApp
|
||||
PackageTests
|
||||
CleanupWindowsPackage
|
||||
|
||||
265
build.sh
265
build.sh
@@ -1,265 +0,0 @@
|
||||
#! /bin/bash
|
||||
msBuild='/c/Program Files (x86)/MSBuild/14.0/Bin'
|
||||
outputFolder='./_output'
|
||||
outputFolderMono='./_output_mono'
|
||||
outputFolderOsx='./_output_osx'
|
||||
outputFolderOsxApp='./_output_osx_app'
|
||||
testPackageFolder='./_tests/'
|
||||
testSearchPattern='*.Test/bin/x86/Release'
|
||||
sourceFolder='./src'
|
||||
slnFile=$sourceFolder/NzbDrone.sln
|
||||
updateFolder=$outputFolder/NzbDrone.Update
|
||||
updateFolderMono=$outputFolderMono/NzbDrone.Update
|
||||
|
||||
nuget='tools/nuget/nuget.exe';
|
||||
CheckExitCode()
|
||||
{
|
||||
"$@"
|
||||
local status=$?
|
||||
if [ $status -ne 0 ]; then
|
||||
echo "error with $1" >&2
|
||||
exit 1
|
||||
fi
|
||||
return $status
|
||||
}
|
||||
|
||||
CleanFolder()
|
||||
{
|
||||
local path=$1
|
||||
local keepConfigFiles=$2
|
||||
|
||||
|
||||
find $path -name "*.transform" -exec rm "{}" \;
|
||||
|
||||
if [ $keepConfigFiles != true ] ; then
|
||||
find $path -name "*.dll.config" -exec rm "{}" \;
|
||||
fi
|
||||
|
||||
echo "Removing FluentValidation.Resources files"
|
||||
find $path -name "FluentValidation.resources.dll" -exec rm "{}" \;
|
||||
find $path -name "App.config" -exec rm "{}" \;
|
||||
|
||||
echo "Removing .less files"
|
||||
find $path -name "*.less" -exec rm "{}" \;
|
||||
|
||||
echo "Removing vshost files"
|
||||
find $path -name "*.vshost.exe" -exec rm "{}" \;
|
||||
|
||||
echo "Removing dylib files"
|
||||
find $path -name "*.dylib" -exec rm "{}" \;
|
||||
|
||||
echo "Removing Empty folders"
|
||||
find $path -depth -empty -type d -exec rm -r "{}" \;
|
||||
}
|
||||
|
||||
|
||||
|
||||
AddJsonNet()
|
||||
{
|
||||
rm $outputFolder/Newtonsoft.Json.*
|
||||
cp $sourceFolder/packages/Newtonsoft.Json.*/lib/net35/*.dll $outputFolder
|
||||
cp $sourceFolder/packages/Newtonsoft.Json.*/lib/net35/*.dll $outputFolder/NzbDrone.Update
|
||||
}
|
||||
|
||||
BuildWithMSBuild()
|
||||
{
|
||||
export PATH=$msBuild:$PATH
|
||||
CheckExitCode MSBuild.exe $slnFile //t:Clean //m
|
||||
$nuget restore $slnFile
|
||||
CheckExitCode MSBuild.exe $slnFile //p:Configuration=Release //p:Platform=x86 //t:Build //m //p:AllowedReferenceRelatedFileExtensions=.pdb
|
||||
}
|
||||
|
||||
BuildWithXbuild()
|
||||
{
|
||||
export MONO_IOMAP=case
|
||||
CheckExitCode xbuild /t:Clean $slnFile
|
||||
mono $nuget restore $slnFile
|
||||
CheckExitCode xbuild /p:Configuration=Release /p:Platform=x86 /t:Build /p:AllowedReferenceRelatedFileExtensions=.pdb $slnFile
|
||||
}
|
||||
|
||||
Build()
|
||||
{
|
||||
echo "##teamcity[progressStart 'Build']"
|
||||
|
||||
rm -rf $outputFolder
|
||||
|
||||
if [ $runtime = "dotnet" ] ; then
|
||||
BuildWithMSBuild
|
||||
else
|
||||
BuildWithXbuild
|
||||
fi
|
||||
|
||||
CleanFolder $outputFolder false
|
||||
|
||||
AddJsonNet
|
||||
|
||||
echo "Removing Mono.Posix.dll"
|
||||
rm $outputFolder/Mono.Posix.dll
|
||||
|
||||
echo "##teamcity[progressFinish 'Build']"
|
||||
}
|
||||
|
||||
RunGulp()
|
||||
{
|
||||
echo "##teamcity[progressStart 'npm install']"
|
||||
npm-cache install npm || CheckExitCode npm install
|
||||
echo "##teamcity[progressFinish 'npm install']"
|
||||
|
||||
echo "##teamcity[progressStart 'Running gulp']"
|
||||
CheckExitCode npm run build
|
||||
echo "##teamcity[progressFinish 'Running gulp']"
|
||||
}
|
||||
|
||||
CreateMdbs()
|
||||
{
|
||||
local path=$1
|
||||
if [ $runtime = "dotnet" ] ; then
|
||||
local pdbFiles=( $(find $path -name "*.pdb") )
|
||||
for filename in "${pdbFiles[@]}"
|
||||
do
|
||||
if [ -e ${filename%.pdb}.dll ] ; then
|
||||
tools/pdb2mdb/pdb2mdb.exe ${filename%.pdb}.dll
|
||||
fi
|
||||
if [ -e ${filename%.pdb}.exe ] ; then
|
||||
tools/pdb2mdb/pdb2mdb.exe ${filename%.pdb}.exe
|
||||
fi
|
||||
done
|
||||
fi
|
||||
}
|
||||
|
||||
PackageMono()
|
||||
{
|
||||
echo "##teamcity[progressStart 'Creating Mono Package']"
|
||||
rm -rf $outputFolderMono
|
||||
cp -r $outputFolder $outputFolderMono
|
||||
|
||||
echo "Creating MDBs"
|
||||
CreateMdbs $outputFolderMono
|
||||
|
||||
echo "Removing PDBs"
|
||||
find $outputFolderMono -name "*.pdb" -exec rm "{}" \;
|
||||
|
||||
echo "Removing Service helpers"
|
||||
rm -f $outputFolderMono/ServiceUninstall.*
|
||||
rm -f $outputFolderMono/ServiceInstall.*
|
||||
|
||||
echo "Removing native windows binaries Sqlite, MediaInfo"
|
||||
rm -f $outputFolderMono/sqlite3.*
|
||||
rm -f $outputFolderMono/MediaInfo.*
|
||||
|
||||
echo "Adding NzbDrone.Core.dll.config (for dllmap)"
|
||||
cp $sourceFolder/NzbDrone.Core/NzbDrone.Core.dll.config $outputFolderMono
|
||||
|
||||
echo "Adding CurlSharp.dll.config (for dllmap)"
|
||||
cp $sourceFolder/NzbDrone.Common/CurlSharp.dll.config $outputFolderMono
|
||||
|
||||
echo "Renaming NzbDrone.Console.exe to NzbDrone.exe"
|
||||
rm $outputFolderMono/NzbDrone.exe*
|
||||
for file in $outputFolderMono/NzbDrone.Console.exe*; do
|
||||
mv "$file" "${file//.Console/}"
|
||||
done
|
||||
|
||||
echo "Removing NzbDrone.Windows"
|
||||
rm $outputFolderMono/NzbDrone.Windows.*
|
||||
|
||||
echo "Adding NzbDrone.Mono to UpdatePackage"
|
||||
cp $outputFolderMono/NzbDrone.Mono.* $updateFolderMono
|
||||
|
||||
echo "##teamcity[progressFinish 'Creating Mono Package']"
|
||||
}
|
||||
|
||||
PackageOsx()
|
||||
{
|
||||
echo "##teamcity[progressStart 'Creating OS X Package']"
|
||||
rm -rf $outputFolderOsx
|
||||
cp -r $outputFolderMono $outputFolderOsx
|
||||
|
||||
echo "Adding sqlite dylibs"
|
||||
cp $sourceFolder/Libraries/Sqlite/*.dylib $outputFolderOsx
|
||||
|
||||
echo "Adding MediaInfo dylib"
|
||||
cp $sourceFolder/Libraries/MediaInfo/*.dylib $outputFolderOsx
|
||||
|
||||
echo "Adding Startup script"
|
||||
cp ./osx/Sonarr $outputFolderOsx
|
||||
|
||||
echo "##teamcity[progressFinish 'Creating OS X Package']"
|
||||
}
|
||||
|
||||
PackageOsxApp()
|
||||
{
|
||||
echo "##teamcity[progressStart 'Creating OS X App Package']"
|
||||
rm -rf $outputFolderOsxApp
|
||||
mkdir $outputFolderOsxApp
|
||||
|
||||
cp -r ./osx/Sonarr.app $outputFolderOsxApp
|
||||
cp -r $outputFolderOsx $outputFolderOsxApp/Sonarr.app/Contents/MacOS
|
||||
|
||||
echo "##teamcity[progressFinish 'Creating OS X App Package']"
|
||||
}
|
||||
|
||||
PackageTests()
|
||||
{
|
||||
echo "Packaging Tests"
|
||||
echo "##teamcity[progressStart 'Creating Test Package']"
|
||||
rm -rf $testPackageFolder
|
||||
mkdir $testPackageFolder
|
||||
|
||||
find $sourceFolder -path $testSearchPattern -exec cp -r -u -T "{}" $testPackageFolder \;
|
||||
|
||||
if [ $runtime = "dotnet" ] ; then
|
||||
$nuget install NUnit.ConsoleRunner -Version 3.2.0 -Output $testPackageFolder
|
||||
else
|
||||
mono $nuget install NUnit.ConsoleRunner -Version 3.2.0 -Output $testPackageFolder
|
||||
fi
|
||||
|
||||
cp $outputFolder/*.dll $testPackageFolder
|
||||
cp ./*.sh $testPackageFolder
|
||||
|
||||
echo "Creating MDBs for tests"
|
||||
CreateMdbs $testPackageFolder
|
||||
|
||||
rm -f $testPackageFolder/*.log.config
|
||||
|
||||
CleanFolder $testPackageFolder true
|
||||
|
||||
echo "Adding NzbDrone.Core.dll.config (for dllmap)"
|
||||
cp $sourceFolder/NzbDrone.Core/NzbDrone.Core.dll.config $testPackageFolder
|
||||
|
||||
echo "Adding CurlSharp.dll.config (for dllmap)"
|
||||
cp $sourceFolder/NzbDrone.Common/CurlSharp.dll.config $testPackageFolder
|
||||
|
||||
echo "Copying CurlSharp libraries"
|
||||
cp $sourceFolder/ExternalModules/CurlSharp/libs/i386/* $testPackageFolder
|
||||
|
||||
echo "##teamcity[progressFinish 'Creating Test Package']"
|
||||
}
|
||||
|
||||
CleanupWindowsPackage()
|
||||
{
|
||||
echo "Removing NzbDrone.Mono"
|
||||
rm -f $outputFolder/NzbDrone.Mono.*
|
||||
|
||||
echo "Adding NzbDrone.Windows to UpdatePackage"
|
||||
cp $outputFolder/NzbDrone.Windows.* $updateFolder
|
||||
}
|
||||
|
||||
# Use mono or .net depending on OS
|
||||
case "$(uname -s)" in
|
||||
CYGWIN*|MINGW32*|MINGW64*|MSYS*)
|
||||
# on windows, use dotnet
|
||||
runtime="dotnet"
|
||||
;;
|
||||
*)
|
||||
# otherwise use mono
|
||||
runtime="mono"
|
||||
;;
|
||||
esac
|
||||
|
||||
Build
|
||||
RunGulp
|
||||
PackageMono
|
||||
PackageOsx
|
||||
PackageOsxApp
|
||||
PackageTests
|
||||
CleanupWindowsPackage
|
||||
2
debian/copyright
vendored
2
debian/copyright
vendored
@@ -3,7 +3,7 @@ Upstream-Name: nzbdrone
|
||||
Source: https://github.com/Sonarr/Sonarr
|
||||
|
||||
Files: *
|
||||
Copyright: 2010-2016 Sonarr <hello@sonarr.tv>
|
||||
Copyright: 2010-2014 Sonarr <hello@sonarr.tv>
|
||||
|
||||
License: GPL-3.0+
|
||||
|
||||
|
||||
@@ -2,17 +2,12 @@ var gulp = require('gulp');
|
||||
var runSequence = require('run-sequence');
|
||||
|
||||
require('./clean');
|
||||
require('./requirejs');
|
||||
require('./less');
|
||||
require('./handlebars');
|
||||
require('./copy');
|
||||
|
||||
gulp.task('build', function() {
|
||||
return runSequence('clean', [
|
||||
'webpack',
|
||||
'less',
|
||||
'handlebars',
|
||||
'copyHtml',
|
||||
'copyContent',
|
||||
'copyJs'
|
||||
]);
|
||||
});
|
||||
gulp.task('build', function () {
|
||||
return runSequence('clean',
|
||||
['requireJs', 'less', 'handlebars', 'copyIndex', 'copyContent']);
|
||||
});
|
||||
@@ -3,6 +3,6 @@ var del = require('del');
|
||||
|
||||
var paths = require('./paths');
|
||||
|
||||
gulp.task('clean', function(cb) {
|
||||
del([paths.dest.root], cb);
|
||||
gulp.task('clean', function (cb) {
|
||||
del([paths.dest.root], cb);
|
||||
});
|
||||
|
||||
30
gulp/copy.js
30
gulp/copy.js
@@ -1,31 +1,23 @@
|
||||
var gulp = require('gulp');
|
||||
var print = require('gulp-print');
|
||||
var cache = require('gulp-cached');
|
||||
var livereload = require('gulp-livereload');
|
||||
|
||||
var paths = require('./paths.js');
|
||||
|
||||
gulp.task('copyJs', function () {
|
||||
return gulp.src(
|
||||
[
|
||||
paths.src.root + 'polyfills.js',
|
||||
paths.src.root + 'JsLibraries/handlebars.runtime.js'
|
||||
])
|
||||
.pipe(cache('copyJs'))
|
||||
.pipe(print())
|
||||
.pipe(gulp.dest(paths.dest.root))
|
||||
.pipe(livereload());
|
||||
return gulp.src(paths.src.scripts)
|
||||
.pipe(cache('copyJs'))
|
||||
.pipe(print())
|
||||
.pipe(gulp.dest(paths.dest.root));
|
||||
});
|
||||
|
||||
gulp.task('copyHtml', function () {
|
||||
return gulp.src(paths.src.html)
|
||||
.pipe(cache('copyHtml'))
|
||||
.pipe(gulp.dest(paths.dest.root))
|
||||
.pipe(livereload());
|
||||
gulp.task('copyIndex', function () {
|
||||
return gulp.src(paths.src.index)
|
||||
.pipe(cache('copyIndex'))
|
||||
.pipe(gulp.dest(paths.dest.root));
|
||||
});
|
||||
|
||||
gulp.task('copyContent', function () {
|
||||
return gulp.src([paths.src.content + '**/*.*', '!**/*.less'])
|
||||
.pipe(gulp.dest(paths.dest.content))
|
||||
.pipe(livereload());
|
||||
});
|
||||
return gulp.src([paths.src.content + '**/*.*', '!**/*.less'])
|
||||
.pipe(gulp.dest(paths.dest.content));
|
||||
});
|
||||
@@ -1,7 +1,7 @@
|
||||
module.exports = {
|
||||
onError : function(error) {
|
||||
onError:function (error) {
|
||||
//If you want details of the error in the console
|
||||
console.log(error.toString());
|
||||
this.emit('end');
|
||||
}
|
||||
};
|
||||
}
|
||||
@@ -1,11 +1,12 @@
|
||||
require('./watch.js');
|
||||
require('./build.js');
|
||||
require('./clean.js');
|
||||
require('./requirejs.js');
|
||||
require('./jshint.js');
|
||||
require('./handlebars.js');
|
||||
require('./copy.js');
|
||||
require('./less.js');
|
||||
require('./stripBom.js');
|
||||
require('./imageMin.js');
|
||||
require('./webpack.js');
|
||||
require('./start.js');
|
||||
|
||||
|
||||
|
||||
@@ -2,26 +2,23 @@ var gulp = require('gulp');
|
||||
var handlebars = require('gulp-handlebars');
|
||||
var declare = require('gulp-declare');
|
||||
var concat = require('gulp-concat');
|
||||
var wrapAmd = require('gulp-wrap-amd');
|
||||
var wrap = require("gulp-wrap");
|
||||
var livereload = require('gulp-livereload');
|
||||
var path = require('path');
|
||||
var streamqueue = require('streamqueue');
|
||||
var stripbom = require('gulp-stripbom');
|
||||
|
||||
var paths = require('./paths.js');
|
||||
var bom = require('./pipelines/gulp-bom.js');
|
||||
|
||||
gulp.task('handlebars', function() {
|
||||
gulp.task('handlebars', function () {
|
||||
|
||||
var coreStream = gulp.src([
|
||||
paths.src.templates,
|
||||
'!*/**/*Partial.*'
|
||||
])
|
||||
.pipe(stripbom({ showLog : false }))
|
||||
var coreStream = gulp.src([paths.src.templates, '!*/**/*Partial.*'])
|
||||
.pipe(bom())
|
||||
.pipe(handlebars())
|
||||
.pipe(declare({
|
||||
namespace : 'T',
|
||||
noRedeclare : true,
|
||||
processName : function(filePath) {
|
||||
namespace: 'T',
|
||||
noRedeclare: true,
|
||||
processName: function (filePath) {
|
||||
|
||||
filePath = path.relative(paths.src.root, filePath);
|
||||
|
||||
@@ -33,12 +30,12 @@ gulp.task('handlebars', function() {
|
||||
}));
|
||||
|
||||
var partialStream = gulp.src([paths.src.partials])
|
||||
.pipe(stripbom({ showLog : false }))
|
||||
.pipe(bom())
|
||||
.pipe(handlebars())
|
||||
.pipe(wrap('Handlebars.template(<%= contents %>)'))
|
||||
.pipe(wrap('Handlebars.registerPartial(<%= processPartialName(file.relative) %>, <%= contents %>)', {}, {
|
||||
imports : {
|
||||
processPartialName : function(fileName) {
|
||||
imports: {
|
||||
processPartialName: function (fileName) {
|
||||
return JSON.stringify(
|
||||
path.basename(fileName, '.js')
|
||||
);
|
||||
@@ -46,10 +43,15 @@ gulp.task('handlebars', function() {
|
||||
}
|
||||
}));
|
||||
|
||||
return streamqueue({ objectMode : true },
|
||||
|
||||
return streamqueue({ objectMode: true },
|
||||
partialStream,
|
||||
coreStream
|
||||
).pipe(concat('templates.js'))
|
||||
.pipe(gulp.dest(paths.dest.root))
|
||||
.pipe(livereload());
|
||||
.pipe(wrapAmd({
|
||||
deps: ['handlebars'],
|
||||
params: ['Handlebars'],
|
||||
exports: 'this["T"]'
|
||||
}))
|
||||
.pipe(gulp.dest(paths.dest.root));
|
||||
});
|
||||
|
||||
@@ -2,13 +2,14 @@ var gulp = require('gulp');
|
||||
var print = require('gulp-print');
|
||||
var paths = require('./paths.js');
|
||||
|
||||
gulp.task('imageMin', function() {
|
||||
|
||||
gulp.task('imageMin', function () {
|
||||
var imagemin = require('gulp-imagemin');
|
||||
return gulp.src(paths.src.images)
|
||||
.pipe(imagemin({
|
||||
progressive : false,
|
||||
optimizationLevel : 4,
|
||||
svgoPlugins : [{ removeViewBox : false }]
|
||||
progressive: false,
|
||||
optimizationLevel :4,
|
||||
svgoPlugins: [{removeViewBox: false}]
|
||||
}))
|
||||
.pipe(print())
|
||||
.pipe(gulp.dest(paths.src.content + 'Images/'));
|
||||
|
||||
@@ -4,12 +4,23 @@ var stylish = require('jshint-stylish');
|
||||
var cache = require('gulp-cached');
|
||||
var paths = require('./paths.js');
|
||||
|
||||
gulp.task('jshint', function() {
|
||||
return gulp.src([
|
||||
paths.src.scripts,
|
||||
paths.src.exclude.libs
|
||||
])
|
||||
|
||||
gulp.task('jshint', function () {
|
||||
return gulp.src([paths.src.scripts, paths.src.exclude.libs])
|
||||
.pipe(cache('jshint'))
|
||||
.pipe(jshint())
|
||||
.pipe(jshint({
|
||||
'-W030': false,
|
||||
'-W064': false,
|
||||
'-W097': false, //Use the function form of “use strict”
|
||||
'-W100': false, //Silently deleted characters (in locales)
|
||||
'undef': true,
|
||||
'globals': {
|
||||
'require': true,
|
||||
'define': true,
|
||||
'window': true,
|
||||
'document': true,
|
||||
'console': true
|
||||
}
|
||||
}))
|
||||
.pipe(jshint.reporter(stylish));
|
||||
});
|
||||
|
||||
57
gulp/less.js
57
gulp/less.js
@@ -1,46 +1,33 @@
|
||||
var gulp = require('gulp');
|
||||
|
||||
var less = require('gulp-less');
|
||||
var postcss = require('gulp-postcss');
|
||||
var sourcemaps = require('gulp-sourcemaps');
|
||||
var autoprefixer = require('autoprefixer-core');
|
||||
var livereload = require('gulp-livereload');
|
||||
|
||||
var print = require('gulp-print');
|
||||
|
||||
var paths = require('./paths');
|
||||
var errorHandler = require('./errorHandler');
|
||||
|
||||
gulp.task('less', function() {
|
||||
|
||||
var src = [
|
||||
paths.src.content + 'bootstrap.less',
|
||||
paths.src.content + 'theme.less',
|
||||
paths.src.content + 'overrides.less',
|
||||
paths.src.root + 'Series/series.less',
|
||||
paths.src.root + 'Activity/activity.less',
|
||||
paths.src.root + 'AddSeries/addSeries.less',
|
||||
paths.src.root + 'Calendar/calendar.less',
|
||||
paths.src.root + 'Cells/cells.less',
|
||||
paths.src.root + 'ManualImport/manualimport.less',
|
||||
paths.src.root + 'Settings/settings.less',
|
||||
paths.src.root + 'System/Logs/logs.less',
|
||||
paths.src.root + 'System/Update/update.less',
|
||||
paths.src.root + 'System/Info/info.less'
|
||||
];
|
||||
|
||||
return gulp.src(src)
|
||||
gulp.task('less', function () {
|
||||
return gulp.src([
|
||||
paths.src.content + 'bootstrap.less',
|
||||
paths.src.content + 'theme.less',
|
||||
paths.src.content + 'overrides.less',
|
||||
paths.src.root + 'Series/series.less',
|
||||
paths.src.root + 'Activity/activity.less',
|
||||
paths.src.root + 'AddSeries/addSeries.less',
|
||||
paths.src.root + 'Calendar/calendar.less',
|
||||
paths.src.root + 'Cells/cells.less',
|
||||
paths.src.root + 'Settings/settings.less',
|
||||
paths.src.root + 'System/Logs/logs.less',
|
||||
paths.src.root + 'System/Update/update.less',
|
||||
paths.src.root + 'System/Info/info.less',
|
||||
])
|
||||
.pipe(print())
|
||||
.pipe(sourcemaps.init())
|
||||
.pipe(less({
|
||||
dumpLineNumbers : 'false',
|
||||
compress : true,
|
||||
yuicompress : true,
|
||||
ieCompat : true,
|
||||
strictImports : true
|
||||
dumpLineNumbers: 'false',
|
||||
compress: true,
|
||||
yuicompress: true,
|
||||
ieCompat: true,
|
||||
strictImports: true
|
||||
}))
|
||||
.pipe(postcss([ autoprefixer({ browsers: ['last 2 versions'] }) ]))
|
||||
.on('error', errorHandler.onError)
|
||||
.pipe(sourcemaps.write(paths.dest.content))
|
||||
.pipe(gulp.dest(paths.dest.content))
|
||||
.pipe(livereload());
|
||||
.pipe(gulp.dest(paths.dest.content));
|
||||
});
|
||||
|
||||
@@ -1,21 +1,19 @@
|
||||
var paths = {
|
||||
src : {
|
||||
root : './src/UI/',
|
||||
templates : './src/UI/**/*.hbs',
|
||||
html : './src/UI/*.html',
|
||||
partials : './src/UI/**/*Partial.hbs',
|
||||
scripts : './src/UI/**/*.js',
|
||||
less : ['./src/UI/**/*.less'],
|
||||
content : './src/UI/Content/',
|
||||
images : './src/UI/Content/Images/**/*',
|
||||
exclude : {
|
||||
libs : '!./src/UI/JsLibraries/**'
|
||||
module.exports = {
|
||||
src: {
|
||||
root: './src/UI/',
|
||||
templates: './src/UI/**/*.hbs',
|
||||
index: './src/UI/index.html',
|
||||
partials: './src/UI/**/*Partial.hbs',
|
||||
scripts: './src/UI/**/*.js',
|
||||
less: ['./src/UI/**/*.less'],
|
||||
content: './src/UI/Content/',
|
||||
images: './src/UI/Content/Images/**/*',
|
||||
exclude :{
|
||||
libs:'!./src/UI/JsLibraries/**'
|
||||
}
|
||||
},
|
||||
dest : {
|
||||
root : './_output/UI/',
|
||||
content : './_output/UI/Content/'
|
||||
dest: {
|
||||
root: './_output/UI/',
|
||||
content: './_output/UI/Content/'
|
||||
}
|
||||
};
|
||||
|
||||
module.exports = paths;
|
||||
|
||||
4
gulp/pipelines/gulp-bom.js
Normal file
4
gulp/pipelines/gulp-bom.js
Normal file
@@ -0,0 +1,4 @@
|
||||
var replace = require('gulp-replace');
|
||||
module.exports = function() {
|
||||
return replace(/^\uFEFF/, '');
|
||||
};
|
||||
32
gulp/requirejs.js
Normal file
32
gulp/requirejs.js
Normal file
@@ -0,0 +1,32 @@
|
||||
var gulp = require('gulp');
|
||||
var requirejs = require('requirejs');
|
||||
var paths = require('./paths');
|
||||
|
||||
require('./handlebars.js');
|
||||
require('./jshint.js');
|
||||
|
||||
|
||||
gulp.task('requireJs', ['jshint'], function (cb) {
|
||||
|
||||
var config = {
|
||||
mainConfigFile: 'src/UI/app.js',
|
||||
fileExclusionRegExp: /^.*\.(?!js$)[^.]+$/,
|
||||
preserveLicenseComments: false,
|
||||
dir: paths.dest.root,
|
||||
optimize: 'none',
|
||||
removeCombined: true,
|
||||
inlineText: false,
|
||||
keepBuildDir: true,
|
||||
modules: [
|
||||
{
|
||||
name: 'app',
|
||||
exclude: ['templates.js']
|
||||
}
|
||||
]};
|
||||
|
||||
requirejs.optimize(config, function (buildResponse) {
|
||||
console.log(buildResponse);
|
||||
cb();
|
||||
});
|
||||
|
||||
});
|
||||
112
gulp/start.js
112
gulp/start.js
@@ -1,112 +0,0 @@
|
||||
// will download and run sonarr (server) in a non-windows enviroment
|
||||
// you can use this if you don't care about the server code and just want to work
|
||||
// with the web code.
|
||||
|
||||
var http = require('http');
|
||||
var gulp = require('gulp');
|
||||
var fs = require('fs');
|
||||
var targz = require('tar.gz');
|
||||
var del = require('del');
|
||||
var print = require('gulp-print');
|
||||
var spawn = require('child_process').spawn;
|
||||
|
||||
function download(url, dest, cb) {
|
||||
console.log('Downloading ' + url + ' to ' + dest);
|
||||
var file = fs.createWriteStream(dest);
|
||||
var request = http.get(url, function (response) {
|
||||
response.pipe(file);
|
||||
file.on('finish', function () {
|
||||
console.log('Download completed');
|
||||
file.close(cb);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function getLatest(cb) {
|
||||
var branch = 'develop';
|
||||
process.argv.forEach(function (val) {
|
||||
var branchMatch = /branch=([\S]*)/.exec(val);
|
||||
if (branchMatch && branchMatch.length > 1) {
|
||||
branch = branchMatch[1];
|
||||
}
|
||||
});
|
||||
|
||||
var url = 'http://services.sonarr.tv/v1/update/' + branch + '?os=osx';
|
||||
|
||||
console.log('Checking for latest version:', url);
|
||||
|
||||
http.get(url, function (res) {
|
||||
var data = '';
|
||||
|
||||
res.on('data', function (chunk) {
|
||||
data += chunk;
|
||||
});
|
||||
|
||||
res.on('end', function () {
|
||||
var updatePackage = JSON.parse(data).updatePackage;
|
||||
console.log('Latest version available: ' + updatePackage.version + ' Release Date: ' + updatePackage.releaseDate);
|
||||
cb(updatePackage);
|
||||
});
|
||||
}).on('error', function (e) {
|
||||
console.log('problem with request: ' + e.message);
|
||||
});
|
||||
}
|
||||
|
||||
function extract(source, dest, cb) {
|
||||
console.log('extracting download page to ' + dest);
|
||||
new targz().extract(source, dest, function (err) {
|
||||
if (err) {
|
||||
console.log(err);
|
||||
}
|
||||
console.log('Update package extracted.');
|
||||
cb();
|
||||
});
|
||||
}
|
||||
|
||||
gulp.task('getSonarr', function () {
|
||||
|
||||
//gulp.src('/Users/kayone/git/Sonarr/_start/2.0.0.3288/NzbDrone/*.*')
|
||||
// .pipe(print())
|
||||
// .pipe(gulp.dest('./_output
|
||||
|
||||
//return;
|
||||
try {
|
||||
fs.mkdirSync('./_start/');
|
||||
} catch (e) {
|
||||
if (e.code != 'EEXIST') {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
getLatest(function (package) {
|
||||
var packagePath = "./_start/" + package.filename;
|
||||
var dirName = "./_start/" + package.version;
|
||||
download(package.url, packagePath, function () {
|
||||
extract(packagePath, dirName, function () {
|
||||
// clean old binaries
|
||||
console.log('Cleaning old binaries');
|
||||
del.sync(['./_output/*', '!./_output/UI/']);
|
||||
console.log('copying binaries to target');
|
||||
gulp.src(dirName + '/NzbDrone/*.*')
|
||||
.pipe(gulp.dest('./_output/'));
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
gulp.task('startSonarr', function () {
|
||||
|
||||
var ls = spawn('mono', ['--debug', './_output/NzbDrone.exe']);
|
||||
|
||||
ls.stdout.on('data', function (data) {
|
||||
process.stdout.write('' + data);
|
||||
});
|
||||
|
||||
ls.stderr.on('data', function (data) {
|
||||
process.stdout.write('' + data);
|
||||
});
|
||||
|
||||
ls.on('close', function (code) {
|
||||
console.log('child process exited with code ' + code);
|
||||
});
|
||||
});
|
||||
@@ -1,18 +1,22 @@
|
||||
var gulp = require('gulp');
|
||||
var paths = require('./paths.js');
|
||||
var stripbom = require('gulp-stripbom');
|
||||
var bom = require('./pipelines/gulp-bom.js');
|
||||
var gulpPrint = require('gulp-print');
|
||||
|
||||
|
||||
var stripBom = function (dest) {
|
||||
gulp.src([paths.src.scripts, paths.src.exclude.libs])
|
||||
.pipe(stripbom({ showLog: false }))
|
||||
.pipe(gulp.dest(dest));
|
||||
|
||||
gulp.src(paths.src.less)
|
||||
.pipe(stripbom({ showLog: false }))
|
||||
.pipe(bom())
|
||||
.pipe(gulpPrint(function (filepath) {
|
||||
return "booming: " + filepath;
|
||||
}))
|
||||
.pipe(gulp.dest(dest));
|
||||
|
||||
gulp.src(paths.src.templates)
|
||||
.pipe(stripbom({ showLog: false }))
|
||||
.pipe(bom())
|
||||
.pipe(gulpPrint(function (filepath) {
|
||||
return "booming: " + filepath;
|
||||
}))
|
||||
.pipe(gulp.dest(dest));
|
||||
};
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
var gulp = require('gulp');
|
||||
var livereload = require('gulp-livereload');
|
||||
//var livereload = require('gulp-livereload');
|
||||
|
||||
|
||||
var paths = require('./paths.js');
|
||||
|
||||
@@ -7,14 +8,23 @@ require('./jshint.js');
|
||||
require('./handlebars.js');
|
||||
require('./less.js');
|
||||
require('./copy.js');
|
||||
require('./webpack.js');
|
||||
|
||||
gulp.task('watch', ['jshint', 'handlebars', 'less', 'copyHtml', 'copyContent', 'copyJs'], function () {
|
||||
livereload.listen();
|
||||
gulp.start('webpackWatch');
|
||||
gulp.watch([paths.src.scripts, paths.src.exclude.libs], ['jshint', 'copyJs']);
|
||||
gulp.watch(paths.src.templates, ['handlebars']);
|
||||
gulp.watch([paths.src.less, paths.src.exclude.libs], ['less']);
|
||||
gulp.watch([paths.src.html], ['copyHtml']);
|
||||
gulp.watch([paths.src.content + '**/*.*', '!**/*.less'], ['copyContent']);
|
||||
|
||||
gulp.task('watch', ['jshint', 'handlebars', 'less', 'copyJs','copyIndex', 'copyContent'], function () {
|
||||
gulp.watch([paths.src.scripts, paths.src.exclude.libs], ['jshint', 'copyJs']);
|
||||
gulp.watch(paths.src.templates, ['handlebars']);
|
||||
gulp.watch([paths.src.less, paths.src.exclude.libs], ['less']);
|
||||
gulp.watch([paths.src.index], ['copyIndex']);
|
||||
gulp.watch([paths.src.content + '**/*.*', '!**/*.less'], ['copyContent']);
|
||||
});
|
||||
|
||||
gulp.task('liveReload', ['jshint', 'handlebars', 'less', 'copyJs'], function () {
|
||||
var server = livereload();
|
||||
gulp.watch([
|
||||
'app/**/*.js',
|
||||
'app/**/*.css',
|
||||
'app/index.html'
|
||||
]).on('change', function (file) {
|
||||
server.changed(file.path);
|
||||
});
|
||||
});
|
||||
@@ -1,13 +0,0 @@
|
||||
var gulp = require('gulp');
|
||||
var webpackStream = require('webpack-stream');
|
||||
var livereload = require('gulp-livereload');
|
||||
var webpackConfig = require('../webpack.config');
|
||||
|
||||
gulp.task('webpack', function() {
|
||||
return gulp.src('main.js').pipe(webpackStream(webpackConfig)).pipe(gulp.dest(''));
|
||||
});
|
||||
|
||||
gulp.task('webpackWatch', function() {
|
||||
webpackConfig.watch = true;
|
||||
return gulp.src('main.js').pipe(webpackStream(webpackConfig)).pipe(gulp.dest('')).pipe(livereload());
|
||||
});
|
||||
@@ -1 +1 @@
|
||||
require('./gulp/gulpFile.js');
|
||||
require('./gulp/gulpfile.js');
|
||||
|
||||
7
integration_mono.sh
Normal file
7
integration_mono.sh
Normal file
@@ -0,0 +1,7 @@
|
||||
EXCLUDE="-exclude:Windows -include:IntegrationTest"
|
||||
TESTDIR="."
|
||||
NUNIT="$TESTDIR/NUnit.Runners.2.6.1/tools/nunit-console-x86.exe"
|
||||
|
||||
mono --debug $NUNIT $EXCLUDE -xml:NzbDrone.Api.Result.xml $TESTDIR/NzbDrone.Api.Test.dll
|
||||
mono --debug $NUNIT $EXCLUDE -xml:NzbDrone.Core.Result.xml $TESTDIR/NzbDrone.Core.Test.dll
|
||||
mono --debug $NUNIT $EXCLUDE -xml:NzbDrone.Integration.Result.xml $TESTDIR/NzbDrone.Integration.Test.dll
|
||||
31
osx/Sonarr
31
osx/Sonarr
@@ -1,31 +1,17 @@
|
||||
#!/bin/sh
|
||||
|
||||
|
||||
#get the bundle's MacOS directory full path
|
||||
DIR=$(cd "$(dirname "$0")"; pwd)
|
||||
|
||||
|
||||
#change these values to match your app
|
||||
EXE_PATH="$DIR/NzbDrone.exe"
|
||||
EXE_PATH="$DIR/nzbdrone.exe"
|
||||
APPNAME="Sonarr"
|
||||
|
||||
#set up environment
|
||||
if [[ -x '/opt/local/bin/mono' ]]; then
|
||||
export PATH="/opt/local/bin:$PATH"
|
||||
fi
|
||||
|
||||
export DYLD_FALLBACK_LIBRARY_PATH="$DIR"
|
||||
|
||||
if [ -e /Library/Frameworks/Mono.framework ]; then
|
||||
MONO_FRAMEWORK_PATH=/Library/Frameworks/Mono.framework/Versions/Current
|
||||
export PATH="$MONO_FRAMEWORK_PATH/bin:$PATH"
|
||||
export DYLD_FALLBACK_LIBRARY_PATH="$DYLD_FALLBACK_LIBRARY_PATH:$MONO_FRAMEWORK_PATH/lib"
|
||||
fi
|
||||
|
||||
if [[ -f '/opt/local/lib/libsqlite3.0.dylib' ]]; then
|
||||
export DYLD_FALLBACK_LIBRARY_PATH="/opt/local/lib:$DYLD_FALLBACK_LIBRARY_PATH"
|
||||
fi
|
||||
|
||||
export DYLD_FALLBACK_LIBRARY_PATH="$DYLD_FALLBACK_LIBRARY_PATH:$HOME/lib:/usr/local/lib:/lib:/usr/lib"
|
||||
|
||||
MONO_FRAMEWORK_PATH=/Library/Frameworks/Mono.framework/Versions/Current
|
||||
export DYLD_FALLBACK_LIBRARY_PATH="$DIR:$MONO_FRAMEWORK_PATH/lib:/lib:/usr/lib"
|
||||
export PATH="$MONO_FRAMEWORK_PATH/bin:$PATH"
|
||||
|
||||
#mono version check
|
||||
REQUIRED_MAJOR=3
|
||||
REQUIRED_MINOR=10
|
||||
@@ -35,9 +21,6 @@ VERSION_MSG="$APPNAME requires Mono Runtime Environment(MRE) $REQUIRED_MAJOR.$RE
|
||||
DOWNLOAD_URL="http://www.mono-project.com/download/#download-mac"
|
||||
|
||||
MONO_VERSION="$(mono --version | grep 'Mono JIT compiler version ' | cut -f5 -d\ )"
|
||||
# if [[ -o DEBUG ]]; then osascript -e "display dialog \"MONO_VERSION: $MONO_VERSION\""; fi
|
||||
|
||||
|
||||
MONO_VERSION_MAJOR="$(echo $MONO_VERSION | cut -f1 -d.)"
|
||||
MONO_VERSION_MINOR="$(echo $MONO_VERSION | cut -f2 -d.)"
|
||||
if [ -z "$MONO_VERSION" ] \
|
||||
|
||||
48
package.json
48
package.json
@@ -1,46 +1,36 @@
|
||||
{
|
||||
"name": "Sonarr",
|
||||
"version": "2.0.0",
|
||||
"version": "0.0.0",
|
||||
"description": "Sonarr",
|
||||
"main": "main.js",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"build": "gulp build",
|
||||
"start": "gulp watch"
|
||||
"preinstall": ""
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/Sonarr/Sonarr.git"
|
||||
},
|
||||
"author": "",
|
||||
"license": "GPL-3.0",
|
||||
"license": "BSD",
|
||||
"gitHead": "9ff7aa1bf7fe38c4c5bdb92f56c8ad556916ed67",
|
||||
"readmeFilename": "readme.md",
|
||||
"dependencies": {
|
||||
"autoprefixer-core": "5.2.1",
|
||||
"del": "1.2.0",
|
||||
"gulp": "3.9.0",
|
||||
"gulp-cached": "1.1.0",
|
||||
"gulp-concat": "2.6.0",
|
||||
"fs-extra": "0.12.0",
|
||||
"gulp": "3.8.10",
|
||||
"gulp-cached": "1.0.1",
|
||||
"del": "0.1.3",
|
||||
"gulp-concat": "2.4.2",
|
||||
"gulp-declare": "0.3.0",
|
||||
"gulp-handlebars": "3.0.1",
|
||||
"gulp-jshint": "1.11.2",
|
||||
"gulp-less": "3.0.3",
|
||||
"gulp-livereload": "3.8.0",
|
||||
"gulp-postcss": "6.0.0",
|
||||
"gulp-handlebars": "2.2.0",
|
||||
"gulp-jshint": "1.9.0",
|
||||
"gulp-less": "1.3.6",
|
||||
"gulp-print": "1.1.0",
|
||||
"gulp-replace": "0.5.3",
|
||||
"gulp-run": "1.6.8",
|
||||
"gulp-sourcemaps": "1.5.2",
|
||||
"gulp-stripbom": "1.0.4",
|
||||
"gulp-webpack": "1.5.0",
|
||||
"gulp-wrap": "0.11.0",
|
||||
"handlebars": "3.0.3",
|
||||
"jshint-loader": "0.8.3",
|
||||
"jshint-stylish": "2.0.1",
|
||||
"run-sequence": "1.1.1",
|
||||
"streamqueue": "1.1.0",
|
||||
"tar.gz": "0.1.1",
|
||||
"webpack": "1.12.0",
|
||||
"webpack-stream": "2.1.0"
|
||||
"gulp-replace": "0.5.0",
|
||||
"gulp-wrap": "0.5.0",
|
||||
"gulp-wrap-amd": "0.3.1",
|
||||
"jshint-stylish": "1.0.0",
|
||||
"requirejs": "2.1.15",
|
||||
"run-sequence": "1.0.2",
|
||||
"streamqueue": "0.1.1"
|
||||
}
|
||||
}
|
||||
|
||||
13
readme.md
13
readme.md
@@ -5,7 +5,7 @@ Sonarr is a PVR for Usenet and BitTorrent users. It can monitor multiple RSS fee
|
||||
|
||||
## Major Features Include: ##
|
||||
|
||||
* Support for major platforms: Windows, Linux, OSX, Raspberry Pi, etc.
|
||||
* Support for major platforms: Windows, Linux, OSX, Raspberry Pi, etc.
|
||||
* Automatically detects new episodes
|
||||
* Can scan your existing library and download any missing episodes
|
||||
* Can watch for better quality of the episodes you already have and do an automatic upgrade. *eg. from DVD to Blu-Ray*
|
||||
@@ -21,19 +21,20 @@ Sonarr is a PVR for Usenet and BitTorrent users. It can monitor multiple RSS fee
|
||||
## Configuring Development Environment: ##
|
||||
|
||||
### Requirements ###
|
||||
- Visual Studio 2015 [Free Community Edition](https://www.visualstudio.com/en-us/products/visual-studio-community-vs.aspx)
|
||||
- Visual Studio 2013 ([Express Edition](http://www.microsoft.com/visualstudio/eng/products/visual-studio-express-for-web "Express Edition") might work but not tested.)
|
||||
- [Git](http://git-scm.com/downloads)
|
||||
- [NodeJS](http://nodejs.org/download/)
|
||||
- [Gulp](http://gulpjs.com)
|
||||
|
||||
### Setup ###
|
||||
|
||||
- Make sure all the required software mentioned above are installed.
|
||||
- Clone the repository into your development machine. [*info*](https://help.github.com/articles/working-with-repositories)
|
||||
- Grab the submodules `git submodule init && git submodule update`
|
||||
- install the required Node Packages `npm install`
|
||||
- start gulp to monitor your dev environment for any changes that need post processing using `npm start` command.
|
||||
- install gulp `npm install gulp -g`
|
||||
- start gulp to monitor your dev environment for any changes that need post processing using `gulp watch` command.
|
||||
|
||||
*Please note gulp must be running at all times while you are working with Sonarr client source files.*
|
||||
*Please note gulp must be running at all times while you are working with NzbDrone client source files.*
|
||||
|
||||
|
||||
### Development ###
|
||||
@@ -43,7 +44,7 @@ Sonarr is a PVR for Usenet and BitTorrent users. It can monitor multiple RSS fee
|
||||
|
||||
### License ###
|
||||
* [GNU GPL v3](http://www.gnu.org/licenses/gpl.html)
|
||||
Copyright 2010-2016
|
||||
Copyright 2010-2014
|
||||
|
||||
|
||||
### Sponsors ###
|
||||
|
||||
17
rename.ps1
Normal file
17
rename.ps1
Normal file
@@ -0,0 +1,17 @@
|
||||
Param(
|
||||
[Parameter(Mandatory=$true, Position=0, HelpMessage="A branch name is #requires required")]
|
||||
[string]$branch,
|
||||
[Parameter(Mandatory=$true, Position=1, HelpMessage="A version is required")]
|
||||
[string]$version
|
||||
)
|
||||
|
||||
if ($branch -eq "<default>")
|
||||
{
|
||||
$branch = "teamcity";
|
||||
}
|
||||
|
||||
Write-Host $branch;
|
||||
Write-Host $version;
|
||||
Write-Host "NzbDrone.$branch.$version.zip";
|
||||
|
||||
Rename-Item "nzbdrone.zip" "NzbDrone.$branch.$version.zip"
|
||||
@@ -1,88 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||||
targetNamespace="http://torznab.com/schemas/2015/feed"
|
||||
xmlns:torznab="http://torznab.com/schemas/2015/feed">
|
||||
<xs:simpleType name="attrNames">
|
||||
<xs:restriction base="xs:string">
|
||||
<!-- https://github.com/nZEDb/nZEDb/blob/master/docs/newznab_api_specification.txt -->
|
||||
<!-- http://newznab.readthedocs.org/en/latest/misc/api/ -->
|
||||
<!-- Original newznab attributes -->
|
||||
<!-- All -->
|
||||
<xs:enumeration value="size" />
|
||||
<xs:enumeration value="category" />
|
||||
<xs:enumeration value="guid" />
|
||||
<xs:enumeration value="poster" />
|
||||
<xs:enumeration value="team" />
|
||||
<xs:enumeration value="grabs" />
|
||||
<xs:enumeration value="comments" />
|
||||
<xs:enumeration value="year" />
|
||||
<!-- TV -->
|
||||
<xs:enumeration value="season" />
|
||||
<xs:enumeration value="episode" />
|
||||
<xs:enumeration value="rageid" />
|
||||
<xs:enumeration value="tvtitle" />
|
||||
<xs:enumeration value="tvairdate" />
|
||||
<!-- TV, Movies, Audio -->
|
||||
<xs:enumeration value="video" />
|
||||
<xs:enumeration value="audio" />
|
||||
<xs:enumeration value="resolution" />
|
||||
<xs:enumeration value="framerate" />
|
||||
<xs:enumeration value="language" />
|
||||
<xs:enumeration value="subs" />
|
||||
<!-- Movies -->
|
||||
<xs:enumeration value="imdb" />
|
||||
<xs:enumeration value="imdbscore" />
|
||||
<xs:enumeration value="imdbtitle" />
|
||||
<xs:enumeration value="imdbtagline" />
|
||||
<xs:enumeration value="imdbscore" />
|
||||
<xs:enumeration value="imdbtitle" />
|
||||
<xs:enumeration value="imdbtagline" />
|
||||
<xs:enumeration value="imdbplot" />
|
||||
<xs:enumeration value="imdbyear" />
|
||||
<xs:enumeration value="imdbdirector" />
|
||||
<xs:enumeration value="imdbactors" />
|
||||
<!-- TV, Movies -->
|
||||
<xs:enumeration value="genre" />
|
||||
<!-- Music -->
|
||||
<xs:enumeration value="artist" />
|
||||
<xs:enumeration value="album" />
|
||||
<xs:enumeration value="publisher" />
|
||||
<xs:enumeration value="tracks" />
|
||||
<!-- Mixed -->
|
||||
<xs:enumeration value="coverurl" />
|
||||
<xs:enumeration value="backdropcoverurl" />
|
||||
<xs:enumeration value="review" />
|
||||
<!-- Book -->
|
||||
<xs:enumeration value="booktitle" />
|
||||
<xs:enumeration value="publishdate" />
|
||||
<xs:enumeration value="author" />
|
||||
<xs:enumeration value="pages" />
|
||||
|
||||
<!-- Generic extensions -->
|
||||
<xs:enumeration value="type" /> <!-- series|movie|music|book if unknown just omit -->
|
||||
<xs:enumeration value="tvdbid" />
|
||||
<xs:enumeration value="bannerurl" />
|
||||
|
||||
<!-- Nzb extensions -->
|
||||
<xs:enumeration value="nzbhash" /> <!-- TBD, hash of sorted article headers of relevant content (relevant excludes stuff like par,nfo,nzb etc) -->
|
||||
|
||||
<!-- Torrent extensions -->
|
||||
<xs:enumeration value="infohash" />
|
||||
<xs:enumeration value="magneturl" />
|
||||
<xs:enumeration value="seeders" />
|
||||
<xs:enumeration value="leechers" />
|
||||
<xs:enumeration value="peers" /> <!-- seeders + leechers -->
|
||||
<xs:enumeration value="seedtype" /> <!-- TBD, which criteria must be met. was going for 'ratio,seedtime,both' but afaik it's always 'either' -->
|
||||
<xs:enumeration value="minimumratio" />
|
||||
<xs:enumeration value="minimumseedtime" />
|
||||
<xs:enumeration value="downloadvolumefactor" /> <!-- factor for the download volume, in most cases it should be set to 1, if a torrent is set to freeleech set it to 0, if only 50% is counted set it to 0.5 -->
|
||||
<xs:enumeration value="uploadvolumefactor" /> <!-- factor for the upload volume, in most cases it should be set to 1, if a torrent is set to neutral leech (upload is not counted) set it to 0, if it's set to double upload set it to 2 -->
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
<xs:element name="attr">
|
||||
<xs:complexType>
|
||||
<xs:attribute name="name" type="torznab:attrNames" />
|
||||
<xs:attribute name="value" type="xs:string" />
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:schema>
|
||||
6
src/.nuget/NuGet.Config
Normal file
6
src/.nuget/NuGet.Config
Normal file
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<solution>
|
||||
<add key="disableSourceControlIntegration" value="true" />
|
||||
</solution>
|
||||
</configuration>
|
||||
BIN
src/.nuget/NuGet.exe
Normal file
BIN
src/.nuget/NuGet.exe
Normal file
Binary file not shown.
136
src/.nuget/NuGet.targets
Normal file
136
src/.nuget/NuGet.targets
Normal file
@@ -0,0 +1,136 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">$(MSBuildProjectDirectory)\..\</SolutionDir>
|
||||
|
||||
<!-- Enable the restore command to run before builds -->
|
||||
<RestorePackages Condition=" '$(RestorePackages)' == '' ">false</RestorePackages>
|
||||
|
||||
<!-- Property that enables building a package from a project -->
|
||||
<BuildPackage Condition=" '$(BuildPackage)' == '' ">false</BuildPackage>
|
||||
|
||||
<!-- Determines if package restore consent is required to restore packages -->
|
||||
<RequireRestoreConsent Condition=" '$(RequireRestoreConsent)' != 'false' ">true</RequireRestoreConsent>
|
||||
|
||||
<!-- Download NuGet.exe if it does not already exist -->
|
||||
<DownloadNuGetExe Condition=" '$(DownloadNuGetExe)' == '' ">false</DownloadNuGetExe>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup Condition=" '$(PackageSources)' == '' ">
|
||||
<!-- Package sources used to restore packages. By default, registered sources under %APPDATA%\NuGet\NuGet.Config will be used -->
|
||||
<!-- The official NuGet package source (https://www.nuget.org/api/v2/) will be excluded if package sources are specified and it does not appear in the list -->
|
||||
<!--
|
||||
<PackageSource Include="https://www.nuget.org/api/v2/" />
|
||||
<PackageSource Include="https://my-nuget-source/nuget/" />
|
||||
-->
|
||||
</ItemGroup>
|
||||
|
||||
<PropertyGroup Condition=" '$(OS)' == 'Windows_NT'">
|
||||
<!-- Windows specific commands -->
|
||||
<NuGetToolsPath>$([System.IO.Path]::Combine($(SolutionDir), ".nuget"))</NuGetToolsPath>
|
||||
<PackagesConfig>$([System.IO.Path]::Combine($(ProjectDir), "packages.config"))</PackagesConfig>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition=" '$(OS)' != 'Windows_NT'">
|
||||
<!-- We need to launch nuget.exe with the mono command if we're not on windows -->
|
||||
<NuGetToolsPath>$(SolutionDir).nuget</NuGetToolsPath>
|
||||
<PackagesConfig>packages.config</PackagesConfig>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
<!-- NuGet command -->
|
||||
<NuGetExePath Condition=" '$(NuGetExePath)' == '' ">$(NuGetToolsPath)\NuGet.exe</NuGetExePath>
|
||||
<PackageSources Condition=" $(PackageSources) == '' ">@(PackageSource)</PackageSources>
|
||||
|
||||
<NuGetCommand Condition=" '$(OS)' == 'Windows_NT'">"$(NuGetExePath)"</NuGetCommand>
|
||||
<NuGetCommand Condition=" '$(OS)' != 'Windows_NT' ">mono --runtime=v4.0.30319 $(NuGetExePath)</NuGetCommand>
|
||||
|
||||
<PackageOutputDir Condition="$(PackageOutputDir) == ''">$(TargetDir.Trim('\\'))</PackageOutputDir>
|
||||
|
||||
<RequireConsentSwitch Condition=" $(RequireRestoreConsent) == 'true' ">-RequireConsent</RequireConsentSwitch>
|
||||
<NonInteractiveSwitch Condition=" '$(VisualStudioVersion)' != '' AND '$(OS)' == 'Windows_NT' ">-NonInteractive</NonInteractiveSwitch>
|
||||
|
||||
<PaddedSolutionDir Condition=" '$(OS)' == 'Windows_NT'">"$(SolutionDir) "</PaddedSolutionDir>
|
||||
<PaddedSolutionDir Condition=" '$(OS)' != 'Windows_NT' ">"$(SolutionDir)"</PaddedSolutionDir>
|
||||
|
||||
<!-- Commands -->
|
||||
<RestoreCommand>$(NuGetCommand) install "$(PackagesConfig)" -source "$(PackageSources)" $(NonInteractiveSwitch) $(RequireConsentSwitch) -solutionDir $(PaddedSolutionDir)</RestoreCommand>
|
||||
<BuildCommand>$(NuGetCommand) pack "$(ProjectPath)" -Properties "Configuration=$(Configuration);Platform=$(Platform)" $(NonInteractiveSwitch) -OutputDirectory "$(PackageOutputDir)" -symbols</BuildCommand>
|
||||
|
||||
<!-- We need to ensure packages are restored prior to assembly resolve -->
|
||||
<BuildDependsOn Condition="$(RestorePackages) == 'true'">
|
||||
RestorePackages;
|
||||
$(BuildDependsOn);
|
||||
</BuildDependsOn>
|
||||
|
||||
<!-- Make the build depend on restore packages -->
|
||||
<BuildDependsOn Condition="$(BuildPackage) == 'true'">
|
||||
$(BuildDependsOn);
|
||||
BuildPackage;
|
||||
</BuildDependsOn>
|
||||
</PropertyGroup>
|
||||
|
||||
<Target Name="CheckPrerequisites">
|
||||
<!-- Raise an error if we're unable to locate nuget.exe -->
|
||||
<Error Condition="'$(DownloadNuGetExe)' != 'true' AND !Exists('$(NuGetExePath)')" Text="Unable to locate '$(NuGetExePath)'" />
|
||||
<!--
|
||||
Take advantage of MsBuild's build dependency tracking to make sure that we only ever download nuget.exe once.
|
||||
This effectively acts as a lock that makes sure that the download operation will only happen once and all
|
||||
parallel builds will have to wait for it to complete.
|
||||
-->
|
||||
<MsBuild Targets="_DownloadNuGet" Projects="$(MSBuildThisFileFullPath)" Properties="Configuration=NOT_IMPORTANT;DownloadNuGetExe=$(DownloadNuGetExe)" />
|
||||
</Target>
|
||||
|
||||
<Target Name="_DownloadNuGet">
|
||||
<DownloadNuGet OutputFilename="$(NuGetExePath)" Condition=" '$(DownloadNuGetExe)' == 'true' AND !Exists('$(NuGetExePath)')" />
|
||||
</Target>
|
||||
|
||||
<Target Name="RestorePackages" DependsOnTargets="CheckPrerequisites">
|
||||
<Exec Command="$(RestoreCommand)"
|
||||
Condition="'$(OS)' != 'Windows_NT' And Exists('$(PackagesConfig)')" />
|
||||
|
||||
<Exec Command="$(RestoreCommand)"
|
||||
LogStandardErrorAsError="true"
|
||||
Condition="'$(OS)' == 'Windows_NT' And Exists('$(PackagesConfig)')" />
|
||||
</Target>
|
||||
|
||||
<Target Name="BuildPackage" DependsOnTargets="CheckPrerequisites">
|
||||
<Exec Command="$(BuildCommand)"
|
||||
Condition=" '$(OS)' != 'Windows_NT' " />
|
||||
|
||||
<Exec Command="$(BuildCommand)"
|
||||
LogStandardErrorAsError="true"
|
||||
Condition=" '$(OS)' == 'Windows_NT' " />
|
||||
</Target>
|
||||
|
||||
<UsingTask TaskName="DownloadNuGet" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
|
||||
<ParameterGroup>
|
||||
<OutputFilename ParameterType="System.String" Required="true" />
|
||||
</ParameterGroup>
|
||||
<Task>
|
||||
<Reference Include="System.Core" />
|
||||
<Using Namespace="System" />
|
||||
<Using Namespace="System.IO" />
|
||||
<Using Namespace="System.Net" />
|
||||
<Using Namespace="Microsoft.Build.Framework" />
|
||||
<Using Namespace="Microsoft.Build.Utilities" />
|
||||
<Code Type="Fragment" Language="cs">
|
||||
<![CDATA[
|
||||
try {
|
||||
OutputFilename = Path.GetFullPath(OutputFilename);
|
||||
|
||||
Log.LogMessage("Downloading latest version of NuGet.exe...");
|
||||
WebClient webClient = new WebClient();
|
||||
webClient.DownloadFile("https://www.nuget.org/nuget.exe", OutputFilename);
|
||||
|
||||
return true;
|
||||
}
|
||||
catch (Exception ex) {
|
||||
Log.LogErrorFromException(ex);
|
||||
return false;
|
||||
}
|
||||
]]>
|
||||
</Code>
|
||||
</Task>
|
||||
</UsingTask>
|
||||
</Project>
|
||||
Submodule src/ExternalModules/CurlSharp deleted from cfdbbbd9c6
Binary file not shown.
BIN
src/Libraries/Manifest Tool/mt.exe
Normal file
BIN
src/Libraries/Manifest Tool/mt.exe
Normal file
Binary file not shown.
9
src/Libraries/Manifest Tool/mt.exe.config
Normal file
9
src/Libraries/Manifest Tool/mt.exe.config
Normal file
@@ -0,0 +1,9 @@
|
||||
<?xml version ="1.0"?>
|
||||
<!-- This allows mt.exe to run on machines with the CLR v4 installed but not 1.1 or 2.0 -->
|
||||
<configuration>
|
||||
<startup useLegacyV2RuntimeActivationPolicy="true">
|
||||
<supportedRuntime version="v4.0"/>
|
||||
<supportedRuntime version="v2.0.50727"/>
|
||||
<supportedRuntime version="v1.1.4322"/>
|
||||
</startup>
|
||||
</configuration>
|
||||
Binary file not shown.
Binary file not shown.
@@ -296,7 +296,7 @@ namespace LogentriesCore
|
||||
WriteDebugMessages("HostName parameter is not defined - trying to get it from System.Environment.MachineName");
|
||||
m_HostName = "HostName=" + System.Environment.MachineName + " ";
|
||||
}
|
||||
catch (InvalidOperationException)
|
||||
catch (InvalidOperationException ex)
|
||||
{
|
||||
// Cannot get host name automatically, so assume that HostName is not used
|
||||
// and log message is sent without it.
|
||||
|
||||
@@ -73,6 +73,13 @@
|
||||
<PostBuildEvent>
|
||||
</PostBuildEvent>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
|
||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||
<PropertyGroup>
|
||||
<ErrorText>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}.</ErrorText>
|
||||
</PropertyGroup>
|
||||
<Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" />
|
||||
</Target>
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// General Information about an assembly is controlled through the following
|
||||
|
||||
@@ -51,9 +51,8 @@
|
||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\NLog.4.4.1\lib\net40\NLog.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Reference Include="NLog">
|
||||
<HintPath>..\packages\NLog.2.1.0\lib\net40\NLog.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
@@ -80,13 +79,19 @@
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="fastJSON\license.txt" />
|
||||
<None Include="packages.config" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<PropertyGroup>
|
||||
<PostBuildEvent>
|
||||
</PostBuildEvent>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
|
||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||
<PropertyGroup>
|
||||
<ErrorText>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}.</ErrorText>
|
||||
</PropertyGroup>
|
||||
<Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" />
|
||||
</Target>
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// General Information about an assembly is controlled through the following
|
||||
|
||||
@@ -24,7 +24,6 @@ namespace LogentriesNLog.fastJSON
|
||||
SerializeNullValues = false;
|
||||
UseOptimizedDatasetSchema = false;
|
||||
UsingGlobalTypes = false;
|
||||
UseUTCDateTime = true;
|
||||
}
|
||||
public bool UseOptimizedDatasetSchema = true;
|
||||
public bool UseFastGuid = true;
|
||||
@@ -40,7 +39,7 @@ namespace LogentriesNLog.fastJSON
|
||||
return ToJSON(obj, UseSerializerExtension, UseFastGuid, UseOptimizedDatasetSchema, SerializeNullValues);
|
||||
}
|
||||
|
||||
|
||||
|
||||
public string ToJSON(object obj,
|
||||
bool enableSerializerExtensions,
|
||||
bool enableFastGuid,
|
||||
@@ -50,13 +49,13 @@ namespace LogentriesNLog.fastJSON
|
||||
return new JSONSerializer(enableOptimizedDatasetSchema, enableFastGuid, enableSerializerExtensions, serializeNullValues, IndentOutput).ConvertToJSON(obj);
|
||||
}
|
||||
|
||||
|
||||
|
||||
public T ToObject<T>(string json)
|
||||
{
|
||||
return (T)ToObject(json, typeof(T));
|
||||
}
|
||||
|
||||
|
||||
|
||||
public object ToObject(string json, Type type)
|
||||
{
|
||||
var ht = new JsonParser(json).Decode() as Dictionary<string, object>;
|
||||
@@ -321,7 +320,7 @@ namespace LogentriesNLog.fastJSON
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
_getterscache.Add(type, getters);
|
||||
return getters;
|
||||
}
|
||||
@@ -449,7 +448,7 @@ namespace LogentriesNLog.fastJSON
|
||||
#if !SILVERLIGHT
|
||||
else if (pi.isDictionary || pi.isHashtable)
|
||||
oset = CreateDictionary((ArrayList)v, pi.pt, pi.GenericTypes, globaltypes);
|
||||
#else
|
||||
#else
|
||||
else if (pi.isDictionary)
|
||||
oset = CreateDictionary((List<object>)v, pi.pt, pi.GenericTypes, globaltypes);
|
||||
#endif
|
||||
@@ -818,4 +817,4 @@ namespace LogentriesNLog.fastJSON
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -170,8 +170,6 @@ namespace LogentriesNLog.fastJSON
|
||||
_output.Append(dt.Minute.ToString("00", NumberFormatInfo.InvariantInfo));
|
||||
_output.Append(":");
|
||||
_output.Append(dt.Second.ToString("00", NumberFormatInfo.InvariantInfo));
|
||||
_output.Append(".");
|
||||
_output.Append(dt.Millisecond.ToString("000", NumberFormatInfo.InvariantInfo));
|
||||
|
||||
if (JSON.Instance.UseUTCDateTime)
|
||||
_output.Append("Z");
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="NLog" version="4.4.1" targetFramework="net40" />
|
||||
</packages>
|
||||
@@ -198,8 +198,7 @@ namespace Marr.Data.Mapping
|
||||
{
|
||||
return AutoMapPropertiesWhere(m =>
|
||||
m.MemberType == MemberTypes.Property &&
|
||||
!DataHelper.IsSimpleType((m as PropertyInfo).PropertyType) &&
|
||||
!MapRepository.Instance.TypeConverters.ContainsKey((m as PropertyInfo).PropertyType));
|
||||
!DataHelper.IsSimpleType((m as PropertyInfo).PropertyType));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -144,6 +144,7 @@
|
||||
<PreBuildEvent>
|
||||
</PreBuildEvent>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(SolutionDir)\.nuget\nuget.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
|
||||
7
src/MediaInfoDotNet.dll.config
Normal file
7
src/MediaInfoDotNet.dll.config
Normal file
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<dllmap os="osx" dll="MediaInfo.dll" target="libmediainfo.0.dylib"/>
|
||||
<dllmap os="linux" dll="MediaInfo.dll" target="libmediainfo.so.0" />
|
||||
<dllmap os="freebsd" dll="MediaInfo.dll" target="libmediainfo.so.0" />
|
||||
<dllmap os="solaris" dll="MediaInfo.dll" target="libmediainfo.so.0.0.0" />
|
||||
</configuration>
|
||||
@@ -122,7 +122,7 @@ namespace Microsoft.AspNet.SignalR
|
||||
{
|
||||
if (user == null)
|
||||
{
|
||||
return false;
|
||||
throw new ArgumentNullException("user");
|
||||
}
|
||||
|
||||
if (!user.Identity.IsAuthenticated)
|
||||
|
||||
@@ -20,12 +20,8 @@ namespace Microsoft.AspNet.SignalR.Hosting
|
||||
throw new ArgumentNullException("instanceName");
|
||||
}
|
||||
|
||||
// Performance counters are broken on mono so just skip this step
|
||||
if (!MonoUtility.IsRunningMono)
|
||||
{
|
||||
// Initialize the performance counters
|
||||
resolver.InitializePerformanceCounters(instanceName, hostShutdownToken);
|
||||
}
|
||||
// Initialize the performance counters
|
||||
resolver.InitializePerformanceCounters(instanceName, hostShutdownToken);
|
||||
|
||||
// Dispose the dependency resolver on host shut down (cleanly)
|
||||
resolver.InitializeResolverDispose(hostShutdownToken);
|
||||
@@ -45,11 +41,12 @@ namespace Microsoft.AspNet.SignalR.Hosting
|
||||
// TODO: Guard against multiple calls to this
|
||||
|
||||
// When the host triggers the shutdown token, dispose the resolver
|
||||
hostShutdownToken.SafeRegister(state =>
|
||||
hostShutdownToken.Register(state =>
|
||||
{
|
||||
((IDependencyResolver)state).Dispose();
|
||||
},
|
||||
resolver);
|
||||
resolver,
|
||||
useSynchronizationContext: false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,11 +17,6 @@ namespace Microsoft.AspNet.SignalR.Hosting
|
||||
/// </summary>
|
||||
CancellationToken CancellationToken { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the status code of the response.
|
||||
/// </summary>
|
||||
int StatusCode { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the content type of the response.
|
||||
/// </summary>
|
||||
|
||||
@@ -16,9 +16,9 @@ namespace Microsoft.AspNet.SignalR.Hosting
|
||||
Action<string> OnMessage { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Invoked when the websocket closes
|
||||
/// Invoked when the websocket gracefully closes
|
||||
/// </summary>
|
||||
Action OnClose { get; set; }
|
||||
Action<bool> OnClose { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Invoked when there is an error
|
||||
|
||||
@@ -11,7 +11,6 @@ namespace Microsoft.AspNet.SignalR.Hosting
|
||||
/// Accepts an websocket request using the specified user function.
|
||||
/// </summary>
|
||||
/// <param name="callback">The callback that fires when the websocket is ready.</param>
|
||||
/// <param name="initTask">The task that completes when the websocket transport is ready.</param>
|
||||
Task AcceptWebSocketRequest(Func<IWebSocket, Task> callback, Task initTask);
|
||||
Task AcceptWebSocketRequest(Func<IWebSocket, Task> callback);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -358,7 +358,7 @@ namespace Microsoft.AspNet.SignalR.Hubs
|
||||
private Task ExecuteHubEvent(IRequest request, string connectionId, Func<IHub, Task> action)
|
||||
{
|
||||
var hubs = GetHubs(request, connectionId).ToList();
|
||||
var operations = hubs.Select(instance => action(instance).OrEmpty().Catch()).ToArray();
|
||||
var operations = hubs.Select(instance => action(instance).Catch().OrEmpty()).ToArray();
|
||||
|
||||
if (operations.Length == 0)
|
||||
{
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
using System;
|
||||
using Microsoft.AspNet.SignalR.Hosting;
|
||||
|
||||
namespace Microsoft.AspNet.SignalR.Infrastructure
|
||||
{
|
||||
/// <summary>
|
||||
/// A buffering text writer that supports writing binary directly as well
|
||||
/// </summary>
|
||||
internal unsafe class BinaryTextWriter : BufferTextWriter, IBinaryWriter
|
||||
{
|
||||
public BinaryTextWriter(IResponse response) :
|
||||
base((data, state) => ((IResponse)state).Write(data), response, reuseBuffers: true, bufferSize: 128)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public BinaryTextWriter(IWebSocket socket) :
|
||||
base((data, state) => ((IWebSocket)state).SendChunk(data), socket, reuseBuffers: false, bufferSize: 1024)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
public BinaryTextWriter(Action<ArraySegment<byte>, object> write, object state, bool reuseBuffers, int bufferSize) :
|
||||
base(write, state, reuseBuffers, bufferSize)
|
||||
{
|
||||
}
|
||||
|
||||
public void Write(ArraySegment<byte> data)
|
||||
{
|
||||
Writer.Write(data);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -13,7 +13,7 @@ namespace Microsoft.AspNet.SignalR.Infrastructure
|
||||
/// we don't need to write to a long lived buffer. This saves massive amounts of memory
|
||||
/// as the number of connections grows.
|
||||
/// </summary>
|
||||
internal abstract unsafe class BufferTextWriter : TextWriter
|
||||
internal unsafe class BufferTextWriter : TextWriter, IBinaryWriter
|
||||
{
|
||||
private readonly Encoding _encoding;
|
||||
|
||||
@@ -31,13 +31,13 @@ namespace Microsoft.AspNet.SignalR.Infrastructure
|
||||
}
|
||||
|
||||
public BufferTextWriter(IWebSocket socket) :
|
||||
this((data, state) => ((IWebSocket)state).SendChunk(data), socket, reuseBuffers: false, bufferSize: 1024 * 4)
|
||||
this((data, state) => ((IWebSocket)state).SendChunk(data), socket, reuseBuffers: false, bufferSize: 128)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
[SuppressMessage("Microsoft.Globalization", "CA1305:SpecifyIFormatProvider", MessageId = "System.IO.TextWriter.#ctor", Justification = "It won't be used")]
|
||||
protected BufferTextWriter(Action<ArraySegment<byte>, object> write, object state, bool reuseBuffers, int bufferSize)
|
||||
public BufferTextWriter(Action<ArraySegment<byte>, object> write, object state, bool reuseBuffers, int bufferSize)
|
||||
{
|
||||
_write = write;
|
||||
_writeState = state;
|
||||
@@ -46,7 +46,7 @@ namespace Microsoft.AspNet.SignalR.Infrastructure
|
||||
_bufferSize = bufferSize;
|
||||
}
|
||||
|
||||
protected internal ChunkedWriter Writer
|
||||
private ChunkedWriter Writer
|
||||
{
|
||||
get
|
||||
{
|
||||
@@ -79,12 +79,17 @@ namespace Microsoft.AspNet.SignalR.Infrastructure
|
||||
Writer.Write(value);
|
||||
}
|
||||
|
||||
public void Write(ArraySegment<byte> data)
|
||||
{
|
||||
Writer.Write(data);
|
||||
}
|
||||
|
||||
public override void Flush()
|
||||
{
|
||||
Writer.Flush();
|
||||
}
|
||||
|
||||
internal class ChunkedWriter
|
||||
private class ChunkedWriter
|
||||
{
|
||||
private int _charPos;
|
||||
private int _charLen;
|
||||
|
||||
@@ -48,14 +48,8 @@ namespace Microsoft.AspNet.SignalR.Infrastructure
|
||||
// This normally waits until the callback is finished invoked but we don't care
|
||||
if (_callbackWrapper.TrySetInvoked())
|
||||
{
|
||||
try
|
||||
{
|
||||
_registration.Dispose();
|
||||
}
|
||||
catch (ObjectDisposedException)
|
||||
{
|
||||
// Bug #1549, .NET 4.0 has a bug where this throws if the CTS is disposed.
|
||||
}
|
||||
// Bug #1549, .NET 4.0 has a bug where this throws if the CTS
|
||||
_registration.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -144,7 +144,7 @@ namespace Microsoft.AspNet.SignalR.Infrastructure
|
||||
{
|
||||
using (var stream = new MemoryStream(128))
|
||||
{
|
||||
var bufferWriter = new BinaryTextWriter((buffer, state) =>
|
||||
var bufferWriter = new BufferTextWriter((buffer, state) =>
|
||||
{
|
||||
((MemoryStream)state).Write(buffer.Array, buffer.Offset, buffer.Count);
|
||||
},
|
||||
@@ -236,7 +236,8 @@ namespace Microsoft.AspNet.SignalR.Infrastructure
|
||||
|
||||
if (command == null)
|
||||
{
|
||||
if (MonoUtility.IsRunningMono)
|
||||
var platform = (int)Environment.OSVersion.Platform;
|
||||
if (platform == 4 || platform == 6 || platform == 128)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1,31 +0,0 @@
|
||||
using System;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
|
||||
namespace Microsoft.AspNet.SignalR.Infrastructure
|
||||
{
|
||||
internal static class MonoUtility
|
||||
{
|
||||
private static readonly Lazy<bool> _isRunningMono = new Lazy<bool>(() => CheckRunningOnMono());
|
||||
|
||||
internal static bool IsRunningMono
|
||||
{
|
||||
get
|
||||
{
|
||||
return _isRunningMono.Value;
|
||||
}
|
||||
}
|
||||
|
||||
[SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes", Justification = "This should never fail")]
|
||||
private static bool CheckRunningOnMono()
|
||||
{
|
||||
try
|
||||
{
|
||||
return Type.GetType("Mono.Runtime") != null;
|
||||
}
|
||||
catch
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4,7 +4,7 @@ using System.Diagnostics;
|
||||
|
||||
namespace Microsoft.AspNet.SignalR.Infrastructure
|
||||
{
|
||||
public class NoOpPerformanceCounter : IPerformanceCounter
|
||||
internal class NoOpPerformanceCounter : IPerformanceCounter
|
||||
{
|
||||
public string CounterName
|
||||
{
|
||||
|
||||
@@ -56,7 +56,7 @@ namespace Microsoft.AspNet.SignalR.Infrastructure
|
||||
}
|
||||
catch(NotImplementedException)
|
||||
{
|
||||
// This happens on mono
|
||||
// This happens on mono
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -35,7 +35,7 @@ namespace Microsoft.AspNet.SignalR.Infrastructure
|
||||
_maxSize = maxSize;
|
||||
}
|
||||
|
||||
#if !CLIENT_NET45 && !CLIENT_NET4 && !NETFX_CORE && !SILVERLIGHT
|
||||
#if !CLIENT_NET45
|
||||
[SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Justification = "This is shared code.")]
|
||||
public IPerformanceCounter QueueSizeCounter { get; set; }
|
||||
#endif
|
||||
@@ -62,16 +62,19 @@ namespace Microsoft.AspNet.SignalR.Infrastructure
|
||||
|
||||
if (_maxSize != null)
|
||||
{
|
||||
// Increment the size if the queue
|
||||
if (Interlocked.Increment(ref _size) > _maxSize)
|
||||
if (Interlocked.Read(ref _size) == _maxSize)
|
||||
{
|
||||
Interlocked.Decrement(ref _size);
|
||||
|
||||
// REVIEW: Do we need to make the contract more clear between the
|
||||
// queue full case and the queue drained case? Should we throw an exeception instead?
|
||||
|
||||
// We failed to enqueue because the size limit was reached
|
||||
return null;
|
||||
}
|
||||
|
||||
#if !CLIENT_NET45 && !CLIENT_NET4 && !NETFX_CORE && !SILVERLIGHT
|
||||
// Increment the size if the queue
|
||||
Interlocked.Increment(ref _size);
|
||||
|
||||
#if !CLIENT_NET45
|
||||
var counter = QueueSizeCounter;
|
||||
if (counter != null)
|
||||
{
|
||||
@@ -90,7 +93,7 @@ namespace Microsoft.AspNet.SignalR.Infrastructure
|
||||
// Decrement the number of items left in the queue
|
||||
Interlocked.Decrement(ref queue._size);
|
||||
|
||||
#if !CLIENT_NET45 && !CLIENT_NET4 && !NETFX_CORE && !SILVERLIGHT
|
||||
#if !CLIENT_NET45
|
||||
var counter = QueueSizeCounter;
|
||||
if (counter != null)
|
||||
{
|
||||
|
||||
@@ -33,10 +33,8 @@ namespace Microsoft.AspNet.SignalR.Messaging
|
||||
_escapedKey = minifiedKey;
|
||||
}
|
||||
|
||||
public static void WriteCursors(TextWriter textWriter, IList<Cursor> cursors, string prefix)
|
||||
public static void WriteCursors(TextWriter textWriter, IList<Cursor> cursors)
|
||||
{
|
||||
textWriter.Write(prefix);
|
||||
|
||||
for (int i = 0; i < cursors.Count; i++)
|
||||
{
|
||||
if (i > 0)
|
||||
@@ -50,7 +48,7 @@ namespace Microsoft.AspNet.SignalR.Messaging
|
||||
}
|
||||
}
|
||||
|
||||
internal static void WriteUlongAsHexToBuffer(ulong value, TextWriter textWriter)
|
||||
private static void WriteUlongAsHexToBuffer(ulong value, TextWriter textWriter)
|
||||
{
|
||||
// This tracks the length of the output and serves as the index for the next character to be written into the pBuffer.
|
||||
// The length could reach up to 16 characters, so at least that much space should remain in the pBuffer.
|
||||
@@ -116,17 +114,17 @@ namespace Microsoft.AspNet.SignalR.Messaging
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
public static List<Cursor> GetCursors(string cursor, string prefix)
|
||||
public static List<Cursor> GetCursors(string cursor)
|
||||
{
|
||||
return GetCursors(cursor, prefix, s => s);
|
||||
return GetCursors(cursor, s => s);
|
||||
}
|
||||
|
||||
public static List<Cursor> GetCursors(string cursor, string prefix, Func<string, string> keyMaximizer)
|
||||
public static List<Cursor> GetCursors(string cursor, Func<string, string> keyMaximizer)
|
||||
{
|
||||
return GetCursors(cursor, prefix, (key, state) => ((Func<string, string>)state).Invoke(key), keyMaximizer);
|
||||
return GetCursors(cursor, (key, state) => ((Func<string, string>)state).Invoke(key), keyMaximizer);
|
||||
}
|
||||
|
||||
public static List<Cursor> GetCursors(string cursor, string prefix, Func<string, object, string> keyMaximizer, object state)
|
||||
public static List<Cursor> GetCursors(string cursor, Func<string, object, string> keyMaximizer, object state)
|
||||
{
|
||||
// Technically GetCursors should never be called with a null value, so this is extra cautious
|
||||
if (String.IsNullOrEmpty(cursor))
|
||||
@@ -134,14 +132,6 @@ namespace Microsoft.AspNet.SignalR.Messaging
|
||||
throw new FormatException(Resources.Error_InvalidCursorFormat);
|
||||
}
|
||||
|
||||
// If the cursor does not begin with the prefix stream, it isn't necessarily a formatting problem.
|
||||
// The cursor with a different prefix might have had different, but also valid, formatting.
|
||||
// Null should be returned so new cursors will be generated
|
||||
if (!cursor.StartsWith(prefix, StringComparison.Ordinal))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
var signals = new HashSet<string>();
|
||||
var cursors = new List<Cursor>();
|
||||
string currentKey = null;
|
||||
@@ -153,10 +143,8 @@ namespace Microsoft.AspNet.SignalR.Messaging
|
||||
var sbEscaped = new StringBuilder();
|
||||
Cursor parsedCursor;
|
||||
|
||||
for (int i = prefix.Length; i < cursor.Length; i++)
|
||||
foreach (var ch in cursor)
|
||||
{
|
||||
var ch = cursor[i];
|
||||
|
||||
// escape can only be true if we are consuming the key
|
||||
if (escape)
|
||||
{
|
||||
|
||||
@@ -3,9 +3,7 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Security.Cryptography;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNet.SignalR.Infrastructure;
|
||||
|
||||
@@ -13,8 +11,6 @@ namespace Microsoft.AspNet.SignalR.Messaging
|
||||
{
|
||||
internal class DefaultSubscription : Subscription
|
||||
{
|
||||
internal static string _defaultCursorPrefix = GetCursorPrefix();
|
||||
|
||||
private List<Cursor> _cursors;
|
||||
private List<Topic> _cursorTopics;
|
||||
|
||||
@@ -40,7 +36,7 @@ namespace Microsoft.AspNet.SignalR.Messaging
|
||||
else
|
||||
{
|
||||
// Ensure delegate continues to use the C# Compiler static delegate caching optimization.
|
||||
_cursors = Cursor.GetCursors(cursor, _defaultCursorPrefix, (k, s) => UnminifyCursor(k, s), stringMinifier) ?? GetCursorsFromEventKeys(EventKeys, topics);
|
||||
_cursors = Cursor.GetCursors(cursor, (k, s) => UnminifyCursor(k, s), stringMinifier) ?? GetCursorsFromEventKeys(EventKeys, topics);
|
||||
}
|
||||
|
||||
_cursorTopics = new List<Topic>();
|
||||
@@ -130,7 +126,7 @@ namespace Microsoft.AspNet.SignalR.Messaging
|
||||
{
|
||||
lock (_cursors)
|
||||
{
|
||||
Cursor.WriteCursors(textWriter, _cursors, _defaultCursorPrefix);
|
||||
Cursor.WriteCursors(textWriter, _cursors);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -200,22 +196,6 @@ namespace Microsoft.AspNet.SignalR.Messaging
|
||||
return list;
|
||||
}
|
||||
|
||||
private static string GetCursorPrefix()
|
||||
{
|
||||
using (var rng = new RNGCryptoServiceProvider())
|
||||
{
|
||||
var data = new byte[4];
|
||||
rng.GetBytes(data);
|
||||
|
||||
using (var writer = new StringWriter(CultureInfo.InvariantCulture))
|
||||
{
|
||||
var randomValue = (ulong)BitConverter.ToUInt32(data, 0);
|
||||
Cursor.WriteUlongAsHexToBuffer(randomValue, writer);
|
||||
return "d-" + writer.ToString() + "-";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static ulong GetMessageId(TopicLookup topics, string key)
|
||||
{
|
||||
Topic topic;
|
||||
|
||||
@@ -233,7 +233,7 @@ namespace Microsoft.AspNet.SignalR.Messaging
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (!subscription.UnsetQueued() || workTask.IsFaulted || workTask.IsCanceled)
|
||||
if (!subscription.UnsetQueued() || workTask.IsFaulted)
|
||||
{
|
||||
// If we don't have more work to do just make the subscription null
|
||||
subscription = null;
|
||||
@@ -271,7 +271,7 @@ namespace Microsoft.AspNet.SignalR.Messaging
|
||||
Trace.TraceEvent(TraceEventType.Error, 0, "Work failed for " + subscription.Identity + ": " + task.Exception.GetBaseException());
|
||||
}
|
||||
|
||||
if (moreWork && !task.IsFaulted && !task.IsCanceled)
|
||||
if (moreWork && !task.IsFaulted)
|
||||
{
|
||||
PumpImpl(taskCompletionSource, subscription);
|
||||
}
|
||||
@@ -295,7 +295,10 @@ namespace Microsoft.AspNet.SignalR.Messaging
|
||||
|
||||
Trace.TraceEvent(TraceEventType.Verbose, 0, "Dispoing the broker");
|
||||
|
||||
if (MonoUtility.IsRunningMono)
|
||||
//Check if OS is not Windows and exit
|
||||
var platform = (int)Environment.OSVersion.Platform;
|
||||
|
||||
if ((platform == 4) || (platform == 6) || (platform == 128))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -15,9 +15,6 @@ namespace Microsoft.AspNet.SignalR.Messaging
|
||||
private static readonly List<ArraySegment<Message>> _emptyList = new List<ArraySegment<Message>>();
|
||||
public readonly static MessageResult TerminalMessage = new MessageResult(terminal: true);
|
||||
|
||||
/// <summary>
|
||||
/// Gets an <see cref="T:IList{Message}"/> associated with the result.
|
||||
/// </summary>
|
||||
[SuppressMessage("Microsoft.Design", "CA1006:DoNotNestGenericTypesInMemberSignatures", Justification = "This is an optimization to avoid allocations.")]
|
||||
public IList<ArraySegment<Message>> Messages { get; private set; }
|
||||
|
||||
|
||||
@@ -12,8 +12,6 @@ namespace Microsoft.AspNet.SignalR.Messaging
|
||||
{
|
||||
public class ScaleoutSubscription : Subscription
|
||||
{
|
||||
private const string _scaleoutCursorPrefix = "s-";
|
||||
|
||||
private readonly IList<ScaleoutMappingStore> _streams;
|
||||
private readonly List<Cursor> _cursors;
|
||||
|
||||
@@ -42,15 +40,10 @@ namespace Microsoft.AspNet.SignalR.Messaging
|
||||
}
|
||||
else
|
||||
{
|
||||
cursors = Cursor.GetCursors(cursor, _scaleoutCursorPrefix);
|
||||
cursors = Cursor.GetCursors(cursor);
|
||||
|
||||
// If the cursor had a default prefix, "d-", cursors might be null
|
||||
if (cursors == null)
|
||||
{
|
||||
cursors = new List<Cursor>();
|
||||
}
|
||||
// If the streams don't match the cursors then throw it out
|
||||
else if (cursors.Count != _streams.Count)
|
||||
if (cursors.Count != _streams.Count)
|
||||
{
|
||||
cursors.Clear();
|
||||
}
|
||||
@@ -70,7 +63,7 @@ namespace Microsoft.AspNet.SignalR.Messaging
|
||||
|
||||
public override void WriteCursor(TextWriter textWriter)
|
||||
{
|
||||
Cursor.WriteCursors(textWriter, _cursors, _scaleoutCursorPrefix);
|
||||
Cursor.WriteCursors(textWriter, _cursors);
|
||||
}
|
||||
|
||||
[SuppressMessage("Microsoft.Design", "CA1002:DoNotExposeGenericLists", Justification = "The list needs to be populated")]
|
||||
|
||||
@@ -120,7 +120,13 @@ namespace Microsoft.AspNet.SignalR.Messaging
|
||||
|
||||
WorkImpl(tcs);
|
||||
|
||||
return tcs.Task;
|
||||
// Fast Path
|
||||
if (tcs.Task.IsCompleted)
|
||||
{
|
||||
return tcs.Task;
|
||||
}
|
||||
|
||||
return FinishAsync(tcs);
|
||||
}
|
||||
|
||||
public bool SetQueued()
|
||||
@@ -134,6 +140,19 @@ namespace Microsoft.AspNet.SignalR.Messaging
|
||||
return Interlocked.CompareExchange(ref _state, State.Idle, State.Working) != State.Working;
|
||||
}
|
||||
|
||||
private static Task FinishAsync(TaskCompletionSource<object> tcs)
|
||||
{
|
||||
return tcs.Task.ContinueWith(task =>
|
||||
{
|
||||
if (task.IsFaulted)
|
||||
{
|
||||
return TaskAsyncHelper.FromError(task.Exception);
|
||||
}
|
||||
|
||||
return TaskAsyncHelper.Empty;
|
||||
}).FastUnwrap();
|
||||
}
|
||||
|
||||
[SuppressMessage("Microsoft.Usage", "CA2202:Do not dispose objects multiple times", Justification = "We have a sync and async code path.")]
|
||||
[SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes", Justification = "We want to avoid user code taking the process down.")]
|
||||
private void WorkImpl(TaskCompletionSource<object> taskCompletionSource)
|
||||
@@ -181,14 +200,7 @@ namespace Microsoft.AspNet.SignalR.Messaging
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
if (ex.InnerException is TaskCanceledException)
|
||||
{
|
||||
taskCompletionSource.TrySetCanceled();
|
||||
}
|
||||
else
|
||||
{
|
||||
taskCompletionSource.TrySetUnwrappedException(ex);
|
||||
}
|
||||
taskCompletionSource.TrySetUnwrappedException(ex);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -221,10 +233,6 @@ namespace Microsoft.AspNet.SignalR.Messaging
|
||||
{
|
||||
taskCompletionSource.TrySetUnwrappedException(task.Exception);
|
||||
}
|
||||
else if (task.IsCanceled)
|
||||
{
|
||||
taskCompletionSource.TrySetCanceled();
|
||||
}
|
||||
else if (task.Result)
|
||||
{
|
||||
WorkImpl(taskCompletionSource);
|
||||
|
||||
@@ -43,9 +43,9 @@
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Newtonsoft.Json.9.0.1\lib\net40\Newtonsoft.Json.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Reference Include="Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\packages\Newtonsoft.Json.6.0.6\lib\net40\Newtonsoft.Json.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
@@ -71,11 +71,9 @@
|
||||
<Compile Include="Infrastructure\AckHandler.cs" />
|
||||
<Compile Include="Configuration\DefaultConfigurationManager.cs" />
|
||||
<Compile Include="Infrastructure\ArraySegmentTextReader.cs" />
|
||||
<Compile Include="Infrastructure\BinaryTextWriter.cs" />
|
||||
<Compile Include="Infrastructure\ConnectionManager.cs" />
|
||||
<Compile Include="ConnectionMessage.cs" />
|
||||
<Compile Include="Infrastructure\DefaultProtectedData.cs" />
|
||||
<Compile Include="Infrastructure\MonoUtility.cs" />
|
||||
<Compile Include="Infrastructure\DiffPair.cs" />
|
||||
<Compile Include="Infrastructure\DiffSet.cs" />
|
||||
<Compile Include="GlobalHost.cs" />
|
||||
@@ -276,9 +274,10 @@
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
<Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
||||
@@ -165,7 +165,7 @@ namespace Microsoft.AspNet.SignalR
|
||||
|
||||
if (Transport == null)
|
||||
{
|
||||
return FailResponse(context.Response, String.Format(CultureInfo.CurrentCulture, Resources.Error_ProtocolErrorUnknownTransport));
|
||||
throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, Resources.Error_ProtocolErrorUnknownTransport));
|
||||
}
|
||||
|
||||
string connectionToken = context.Request.QueryString["connectionToken"];
|
||||
@@ -173,17 +173,10 @@ namespace Microsoft.AspNet.SignalR
|
||||
// If there's no connection id then this is a bad request
|
||||
if (String.IsNullOrEmpty(connectionToken))
|
||||
{
|
||||
return FailResponse(context.Response, String.Format(CultureInfo.CurrentCulture, Resources.Error_ProtocolErrorMissingConnectionToken));
|
||||
throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, Resources.Error_ProtocolErrorMissingConnectionToken));
|
||||
}
|
||||
|
||||
string connectionId;
|
||||
string message;
|
||||
int statusCode;
|
||||
|
||||
if (!TryGetConnectionId(context, connectionToken, out connectionId, out message, out statusCode))
|
||||
{
|
||||
return FailResponse(context.Response, message, statusCode);
|
||||
}
|
||||
string connectionId = GetConnectionId(context, connectionToken);
|
||||
|
||||
// Set the transport's connection id to the unprotected one
|
||||
Transport.ConnectionId = connectionId;
|
||||
@@ -234,21 +227,10 @@ namespace Microsoft.AspNet.SignalR
|
||||
}
|
||||
|
||||
[SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes", Justification = "We want to catch any exception when unprotecting data.")]
|
||||
internal bool TryGetConnectionId(HostContext context,
|
||||
string connectionToken,
|
||||
out string connectionId,
|
||||
out string message,
|
||||
out int statusCode)
|
||||
internal string GetConnectionId(HostContext context, string connectionToken)
|
||||
{
|
||||
string unprotectedConnectionToken = null;
|
||||
|
||||
// connectionId is only valid when this method returns true
|
||||
connectionId = null;
|
||||
|
||||
// message and statusCode are only valid when this method returns false
|
||||
message = null;
|
||||
statusCode = 400;
|
||||
|
||||
try
|
||||
{
|
||||
unprotectedConnectionToken = ProtectedData.Unprotect(connectionToken, Purposes.ConnectionToken);
|
||||
@@ -260,24 +242,21 @@ namespace Microsoft.AspNet.SignalR
|
||||
|
||||
if (String.IsNullOrEmpty(unprotectedConnectionToken))
|
||||
{
|
||||
message = String.Format(CultureInfo.CurrentCulture, Resources.Error_ConnectionIdIncorrectFormat);
|
||||
return false;
|
||||
throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, Resources.Error_ConnectionIdIncorrectFormat));
|
||||
}
|
||||
|
||||
var tokens = unprotectedConnectionToken.Split(SplitChars, 2);
|
||||
|
||||
connectionId = tokens[0];
|
||||
string connectionId = tokens[0];
|
||||
string tokenUserName = tokens.Length > 1 ? tokens[1] : String.Empty;
|
||||
string userName = GetUserIdentity(context);
|
||||
|
||||
if (!String.Equals(tokenUserName, userName, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
message = String.Format(CultureInfo.CurrentCulture, Resources.Error_UnrecognizedUserIdentity);
|
||||
statusCode = 403;
|
||||
return false;
|
||||
throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, Resources.Error_UnrecognizedUserIdentity));
|
||||
}
|
||||
|
||||
return true;
|
||||
return connectionId;
|
||||
}
|
||||
|
||||
[SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes", Justification = "We want to prevent any failures in unprotecting")]
|
||||
@@ -498,12 +477,6 @@ namespace Microsoft.AspNet.SignalR
|
||||
return context.Response.End(data);
|
||||
}
|
||||
|
||||
private static Task FailResponse(IResponse response, string message, int statusCode = 400)
|
||||
{
|
||||
response.StatusCode = statusCode;
|
||||
return response.End(message);
|
||||
}
|
||||
|
||||
private static bool IsNegotiationRequest(IRequest request)
|
||||
{
|
||||
return request.Url.LocalPath.EndsWith("/negotiate", StringComparison.OrdinalIgnoreCase);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*!
|
||||
* ASP.NET SignalR JavaScript Library v1.2.2
|
||||
* ASP.NET SignalR JavaScript Library v1.1.3
|
||||
* http://signalr.net/
|
||||
*
|
||||
* Copyright Microsoft Open Technologies, Inc. All rights reserved.
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
/// <reference path="..\..\SignalR.Client.JS\Scripts\jquery-1.6.4.js" />
|
||||
/// <reference path="jquery.signalR.js" />
|
||||
(function ($, window, undefined) {
|
||||
(function ($, window) {
|
||||
/// <param name="$" type="jQuery" />
|
||||
"use strict";
|
||||
|
||||
|
||||
@@ -159,7 +159,7 @@ namespace Microsoft.AspNet.SignalR
|
||||
{
|
||||
// observe Exception
|
||||
#if !WINDOWS_PHONE && !SILVERLIGHT && !NETFX_CORE
|
||||
Trace.TraceWarning("SignalR exception thrown by Task: {0}", exception);
|
||||
Trace.TraceError("SignalR exception thrown by Task: {0}", exception);
|
||||
#endif
|
||||
handler(exception, state);
|
||||
}
|
||||
|
||||
@@ -162,7 +162,7 @@ namespace Microsoft.AspNet.SignalR.Transports
|
||||
}
|
||||
|
||||
[SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes", Justification = "Exceptions are flowed to the caller.")]
|
||||
protected Task ProcessReceiveRequest(ITransportConnection connection)
|
||||
private Task ProcessReceiveRequest(ITransportConnection connection)
|
||||
{
|
||||
Func<Task> initialize = null;
|
||||
|
||||
@@ -273,7 +273,7 @@ namespace Microsoft.AspNet.SignalR.Transports
|
||||
{
|
||||
var context = (MessageContext)state;
|
||||
|
||||
response.Reconnect = context.Transport.HostShutdownToken.IsCancellationRequested;
|
||||
response.TimedOut = context.Transport.IsTimedOut;
|
||||
|
||||
// If we're telling the client to disconnect then clean up the instantiated connection.
|
||||
if (response.Disconnect)
|
||||
@@ -282,7 +282,7 @@ namespace Microsoft.AspNet.SignalR.Transports
|
||||
return context.Transport.Send(response).Then(c => OnDisconnectMessage(c), context)
|
||||
.Then(() => TaskAsyncHelper.False);
|
||||
}
|
||||
else if (context.Transport.IsTimedOut || response.Aborted)
|
||||
else if (response.TimedOut || response.Aborted)
|
||||
{
|
||||
context.Registration.Dispose();
|
||||
|
||||
|
||||
@@ -252,7 +252,7 @@ namespace Microsoft.AspNet.SignalR.Transports
|
||||
{
|
||||
var context = (MessageContext)state;
|
||||
|
||||
response.Reconnect = context.Transport.HostShutdownToken.IsCancellationRequested;
|
||||
response.TimedOut = context.Transport.IsTimedOut;
|
||||
|
||||
Task task = TaskAsyncHelper.Empty;
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@ namespace Microsoft.AspNet.SignalR.Transports
|
||||
private readonly Action<TextWriter> _writeCursor;
|
||||
|
||||
public PersistentResponse()
|
||||
: this(message => false, writer => { })
|
||||
: this(message => true, writer => { })
|
||||
{
|
||||
|
||||
}
|
||||
@@ -61,10 +61,9 @@ namespace Microsoft.AspNet.SignalR.Transports
|
||||
public bool Aborted { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// True if the client should try reconnecting.
|
||||
/// True if the connection timed out.
|
||||
/// </summary>
|
||||
// This is set when the host is shutting down.
|
||||
public bool Reconnect { get; set; }
|
||||
public bool TimedOut { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Signed token representing the list of groups. Updates on change.
|
||||
@@ -107,7 +106,7 @@ namespace Microsoft.AspNet.SignalR.Transports
|
||||
jsonWriter.WriteValue(1);
|
||||
}
|
||||
|
||||
if (Reconnect)
|
||||
if (TimedOut)
|
||||
{
|
||||
jsonWriter.WritePropertyName("T");
|
||||
jsonWriter.WriteValue(1);
|
||||
|
||||
@@ -130,14 +130,6 @@ namespace Microsoft.AspNet.SignalR.Transports
|
||||
}
|
||||
}
|
||||
|
||||
protected CancellationToken HostShutdownToken
|
||||
{
|
||||
get
|
||||
{
|
||||
return _hostShutdownToken;
|
||||
}
|
||||
}
|
||||
|
||||
public bool IsTimedOut
|
||||
{
|
||||
get
|
||||
@@ -194,7 +186,7 @@ namespace Microsoft.AspNet.SignalR.Transports
|
||||
|
||||
protected virtual TextWriter CreateResponseWriter()
|
||||
{
|
||||
return new BinaryTextWriter(Context.Response);
|
||||
return new BufferTextWriter(Context.Response);
|
||||
}
|
||||
|
||||
protected void IncrementErrors()
|
||||
|
||||
@@ -19,7 +19,7 @@ namespace Microsoft.AspNet.SignalR.Transports
|
||||
private bool _isAlive = true;
|
||||
|
||||
private readonly Action<string> _message;
|
||||
private readonly Action _closed;
|
||||
private readonly Action<bool> _closed;
|
||||
private readonly Action<Exception> _error;
|
||||
|
||||
public WebSocketTransport(HostContext context,
|
||||
@@ -74,39 +74,28 @@ namespace Microsoft.AspNet.SignalR.Transports
|
||||
|
||||
public override Task ProcessRequest(ITransportConnection connection)
|
||||
{
|
||||
if (IsAbortRequest)
|
||||
var webSocketRequest = _context.Request as IWebSocketRequest;
|
||||
|
||||
// Throw if the server implementation doesn't support websockets
|
||||
if (webSocketRequest == null)
|
||||
{
|
||||
return connection.Abort(ConnectionId);
|
||||
throw new InvalidOperationException(Resources.Error_WebSocketsNotSupported);
|
||||
}
|
||||
else
|
||||
|
||||
return webSocketRequest.AcceptWebSocketRequest(socket =>
|
||||
{
|
||||
var webSocketRequest = _context.Request as IWebSocketRequest;
|
||||
_socket = socket;
|
||||
socket.OnClose = _closed;
|
||||
socket.OnMessage = _message;
|
||||
socket.OnError = _error;
|
||||
|
||||
// Throw if the server implementation doesn't support websockets
|
||||
if (webSocketRequest == null)
|
||||
{
|
||||
throw new InvalidOperationException(Resources.Error_WebSocketsNotSupported);
|
||||
}
|
||||
|
||||
Connection = connection;
|
||||
InitializePersistentState();
|
||||
|
||||
return webSocketRequest.AcceptWebSocketRequest(socket =>
|
||||
{
|
||||
_socket = socket;
|
||||
socket.OnClose = _closed;
|
||||
socket.OnMessage = _message;
|
||||
socket.OnError = _error;
|
||||
|
||||
return ProcessReceiveRequest(connection);
|
||||
},
|
||||
InitializeTcs.Task);
|
||||
}
|
||||
return ProcessRequestCore(connection);
|
||||
});
|
||||
}
|
||||
|
||||
protected override TextWriter CreateResponseWriter()
|
||||
{
|
||||
return new BinaryTextWriter(_socket);
|
||||
return new BufferTextWriter(_socket);
|
||||
}
|
||||
|
||||
public override Task Send(object value)
|
||||
@@ -124,11 +113,6 @@ namespace Microsoft.AspNet.SignalR.Transports
|
||||
return Send((object)response);
|
||||
}
|
||||
|
||||
protected internal override Task InitializeResponse(ITransportConnection connection)
|
||||
{
|
||||
return _socket.Send("{}");
|
||||
}
|
||||
|
||||
private static Task PerformSend(object state)
|
||||
{
|
||||
var context = (WebSocketTransportContext)state;
|
||||
@@ -147,11 +131,18 @@ namespace Microsoft.AspNet.SignalR.Transports
|
||||
}
|
||||
}
|
||||
|
||||
private void OnClosed()
|
||||
private void OnClosed(bool clean)
|
||||
{
|
||||
Trace.TraceInformation("CloseSocket({0})", ConnectionId);
|
||||
Trace.TraceInformation("CloseSocket({0}, {1})", clean, ConnectionId);
|
||||
|
||||
// If we performed a clean disconnect then we go through the normal disconnect routine. However,
|
||||
// If we performed an unclean disconnect we want to mark the connection as "not alive" and let the
|
||||
// HeartBeat clean it up. This is to maintain consistency across the transports.
|
||||
if (clean)
|
||||
{
|
||||
Abort();
|
||||
}
|
||||
|
||||
// Require a request to /abort to stop tracking the connection. #2195
|
||||
_isAlive = false;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="Newtonsoft.Json" version="9.0.1" targetFramework="net40" />
|
||||
<package id="Newtonsoft.Json" version="6.0.6" targetFramework="net40" />
|
||||
</packages>
|
||||
@@ -2,7 +2,6 @@
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Security.Principal;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNet.SignalR.Hosting;
|
||||
using Microsoft.AspNet.SignalR.Owin.Infrastructure;
|
||||
@@ -66,19 +65,9 @@ namespace Microsoft.AspNet.SignalR.Owin
|
||||
|
||||
if (!_connection.Authorize(serverRequest))
|
||||
{
|
||||
IPrincipal user = hostContext.Request.User;
|
||||
if (user != null && user.Identity.IsAuthenticated)
|
||||
{
|
||||
// If we failed to authorize the request then return a 403 since the request
|
||||
// can't do anything
|
||||
return EndResponse(environment, 403, "Forbidden");
|
||||
}
|
||||
else
|
||||
{
|
||||
// If we failed to authorize the request and the user is not authenticated
|
||||
// then return a 401
|
||||
return EndResponse(environment, 401, "Unauthorized");
|
||||
}
|
||||
// If we failed to authorize the request then return a 403 since the request
|
||||
// can't do anything
|
||||
return EndResponse(environment, 403, "Forbidden");
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -102,6 +102,7 @@
|
||||
</ItemGroup>
|
||||
<Import Project="..\Common\Microsoft.AspNet.SignalR.targets" />
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
@@ -109,4 +110,4 @@
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
||||
</Project>
|
||||
@@ -5,10 +5,12 @@ using System.Collections.Generic;
|
||||
using System.Collections.Specialized;
|
||||
using System.Security.Principal;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNet.SignalR.Owin.Infrastructure;
|
||||
|
||||
namespace Microsoft.AspNet.SignalR.Owin
|
||||
{
|
||||
using WebSocketFunc = Func<IDictionary<string, object>, Task>;
|
||||
public partial class ServerRequest :
|
||||
#if NET45
|
||||
IWebSocketRequest
|
||||
@@ -136,17 +138,15 @@ namespace Microsoft.AspNet.SignalR.Owin
|
||||
}
|
||||
|
||||
#if NET45
|
||||
public Task AcceptWebSocketRequest(Func<IWebSocket, Task> callback, Task initTask)
|
||||
public Task AcceptWebSocketRequest(Func<IWebSocket, Task> callback)
|
||||
{
|
||||
var accept = _environment.Get<Action<IDictionary<string, object>, WebSocketFunc>>(OwinConstants.WebSocketAccept);
|
||||
if (accept == null)
|
||||
{
|
||||
var response = new ServerResponse(_environment);
|
||||
response.StatusCode = 400;
|
||||
return response.End(Resources.Error_NotWebSocketRequest);
|
||||
throw new InvalidOperationException(Resources.Error_NotWebSocketRequest);
|
||||
}
|
||||
|
||||
var handler = new OwinWebSocketHandler(callback, initTask);
|
||||
var handler = new OwinWebSocketHandler(callback);
|
||||
accept(null, handler.ProcessRequestAsync);
|
||||
return TaskAsyncHelper.Empty;
|
||||
}
|
||||
|
||||
@@ -27,18 +27,6 @@ namespace Microsoft.AspNet.SignalR.Owin
|
||||
get { return _callCancelled; }
|
||||
}
|
||||
|
||||
public int StatusCode
|
||||
{
|
||||
get
|
||||
{
|
||||
return _environment.Get<int>(OwinConstants.ResponseStatusCode);
|
||||
}
|
||||
set
|
||||
{
|
||||
_environment[OwinConstants.ResponseStatusCode] = value;
|
||||
}
|
||||
}
|
||||
|
||||
public string ContentType
|
||||
{
|
||||
get { return ResponseHeaders.GetHeader("Content-Type"); }
|
||||
|
||||
@@ -774,8 +774,7 @@ namespace MonoTorrent
|
||||
break;
|
||||
|
||||
case ("nodes"):
|
||||
if (keypair.Value.ToString().Length != 0)
|
||||
this.nodes = (BEncodedList)keypair.Value;
|
||||
this.nodes = (BEncodedList)keypair.Value;
|
||||
break;
|
||||
|
||||
case ("comment.utf-8"):
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user