Commit 5b7238a2 by Sebastián Katzer

Update to latest dev

parent e62fff29
{ {
"_args": [ "_from": "cordova-windows@^5.0.0",
[
{
"raw": "cordova-windows@~5.0.0",
"scope": null,
"escapedName": "cordova-windows",
"name": "cordova-windows",
"rawSpec": "~5.0.0",
"spec": ">=5.0.0 <5.1.0",
"type": "range"
},
"/Users/sebastian/Documents/github/cordova-example-local-notifications/node_modules"
]
],
"_from": "cordova-windows@>=5.0.0 <5.1.0",
"_id": "cordova-windows@5.0.0", "_id": "cordova-windows@5.0.0",
"_inCache": true, "_inBundle": false,
"_integrity": "sha1-fWRTk+byEstL0XFWcZlFSEzudf4=",
"_location": "/cordova-windows", "_location": "/cordova-windows",
"_nodeVersion": "7.2.0",
"_npmOperationalInternal": {
"host": "packages-12-west.internal.npmjs.com",
"tmp": "tmp/cordova-windows-5.0.0.tgz_1486749384153_0.040384991792961955"
},
"_npmUser": {
"name": "kotikov.vladimir",
"email": "kotikov.vladimir@gmail.com"
},
"_npmVersion": "3.10.9",
"_phantomChildren": {}, "_phantomChildren": {},
"_requested": { "_requested": {
"raw": "cordova-windows@~5.0.0", "type": "range",
"scope": null, "registry": true,
"escapedName": "cordova-windows", "raw": "cordova-windows@^5.0.0",
"name": "cordova-windows", "name": "cordova-windows",
"rawSpec": "~5.0.0", "escapedName": "cordova-windows",
"spec": ">=5.0.0 <5.1.0", "rawSpec": "^5.0.0",
"type": "range" "saveSpec": null,
"fetchSpec": "^5.0.0"
}, },
"_requiredBy": [ "_requiredBy": [
"#USER",
"/" "/"
], ],
"_resolved": "https://registry.npmjs.org/cordova-windows/-/cordova-windows-5.0.0.tgz", "_resolved": "https://registry.npmjs.org/cordova-windows/-/cordova-windows-5.0.0.tgz",
"_shasum": "7d645393e6f212cb4bd17156719945484cee75fe", "_shasum": "7d645393e6f212cb4bd17156719945484cee75fe",
"_shrinkwrap": null, "_spec": "cordova-windows@^5.0.0",
"_spec": "cordova-windows@~5.0.0", "_where": "/Users/sebastian/Documents/github/cordova-example-local-notifications",
"_where": "/Users/sebastian/Documents/github/cordova-example-local-notifications/node_modules",
"author": { "author": {
"name": "Apache Software Foundation" "name": "Apache Software Foundation"
}, },
...@@ -75,6 +51,7 @@ ...@@ -75,6 +51,7 @@
"shelljs": "^0.5.3", "shelljs": "^0.5.3",
"winjs": "^4.4.0" "winjs": "^4.4.0"
}, },
"deprecated": false,
"description": "cordova-windows release", "description": "cordova-windows release",
"devDependencies": { "devDependencies": {
"istanbul": "^0.4.0", "istanbul": "^0.4.0",
...@@ -82,11 +59,6 @@ ...@@ -82,11 +59,6 @@
"jshint": "^2.8.0", "jshint": "^2.8.0",
"rewire": "^2.5.1" "rewire": "^2.5.1"
}, },
"directories": {},
"dist": {
"shasum": "7d645393e6f212cb4bd17156719945484cee75fe",
"tarball": "https://registry.npmjs.org/cordova-windows/-/cordova-windows-5.0.0.tgz"
},
"homepage": "https://github.com/apache/cordova-windows#readme", "homepage": "https://github.com/apache/cordova-windows#readme",
"keywords": [ "keywords": [
"windows", "windows",
...@@ -95,60 +67,7 @@ ...@@ -95,60 +67,7 @@
], ],
"license": "Apache-2.0", "license": "Apache-2.0",
"main": "template/cordova/Api.js", "main": "template/cordova/Api.js",
"maintainers": [
{
"name": "apachebuilds",
"email": "root@apache.org"
},
{
"name": "bowserj",
"email": "bowserj@apache.org"
},
{
"name": "cmarcelk",
"email": "cmarcelk@gmail.com"
},
{
"name": "filmaj",
"email": "maj.fil@gmail.com"
},
{
"name": "kamrik",
"email": "kamrik@gmail.com"
},
{
"name": "kotikov.vladimir",
"email": "kotikov.vladimir@gmail.com"
},
{
"name": "nikhilkh",
"email": "nikhil.khandelwal@gmail.com"
},
{
"name": "purplecabbage",
"email": "purplecabbage@gmail.com"
},
{
"name": "sgrebnov",
"email": "sergei.grebnov@gmail.com"
},
{
"name": "shazron",
"email": "shazron@gmail.com"
},
{
"name": "stevegill",
"email": "stevengill97@gmail.com"
},
{
"name": "timbarham",
"email": "npmjs@barhams.info"
}
],
"name": "cordova-windows", "name": "cordova-windows",
"optionalDependencies": {},
"readme": "<!--\n#\n# Licensed to the Apache Software Foundation (ASF) under one\n# or more contributor license agreements. See the NOTICE file\n# distributed with this work for additional information\n# regarding copyright ownership. The ASF licenses this file\n# to you under the Apache License, Version 2.0 (the\n# \"License\"); you may not use this file except in compliance\n# with the License. You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing,\n# software distributed under the License is distributed on an\n# \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n# KIND, either express or implied. See the License for the\n# specific language governing permissions and limitations\n# under the License.\n#\n-->\n\n#Apache Cordova for Windows\n\n[![Build status](https://ci.appveyor.com/api/projects/status/19h1fq0lyvwtei05/branch/master)](https://ci.appveyor.com/project/Humbedooh/cordova-windows/branch/master)\n[![Build Status](https://travis-ci.org/apache/cordova-windows.svg?branch=master)](https://travis-ci.org/apache/cordova-windows)\n[![codecov.io](https://codecov.io/github/apache/cordova-windows/coverage.svg?branch=master)](https://codecov.io/github/apache/cordova-windows?branch=master)\n\nThis repo contains the code for an [Apache Cordova](http://cordova.apache.org) platform that allows you to build applications that target Windows 10, and Windows 8.1, as well as Windows Phone 8.1. An Apache Cordova based applications is written in HTML, CSS and JavaScript.\n\n(Warning: Windows 8 has been deprecated, please update your applications to target Windows 8.1 or above)\n\n[Apache Cordova](http://cordova.apache.org) is a project of [The Apache Software Foundation (ASF)](http://apache.org)\n\n#Requirements\n### Windows 10, Windows 8.1, Windows Phone 8.1\n\nHost OS: Windows 8.1 or Windows 10\n\nInstall the tools: [Visual Studio 2015](http://www.visualstudio.com/downloads)\n\n### Windows 8.1,Windows Phone 8.1\n\nHost OS: Windows 8.1\n\nInstall the tools: [Visual Studio 2013 Express](http://www.visualstudio.com/downloads/download-visual-studio-vs#d-express-windows-8).\n\n#Getting started\nThe best way to use this is to install the [Cordova CLI](https://www.npmjs.com/package/cordova), create a project, add the windows platform, and run the app:\n\n\tnpm install -g cordova\n\tcordova create test\n\tcordova platform add windows\n\tcordova run windows\n\n#Getting logs from Windows Store applications\nYou can get your JavaScript logs as well as Windows logs related to your Windows Store application by running the following command from your app directory:\n\n\tplatforms\\windows\\cordova\\log\n\nIn most cases, this command requires administrator privileges. However, if you want to gather logs without admin privileges, you may need to manually enable logging channel via Event Viewer:\n\n\tStart -> Run -> eventvwr\n\tView -> Show Analytic and Debug Logs\n\tApplications and Services Logs -> Microsoft -> Windows -> AppHost -> AppTracing -> Enable Log\n\nPlease note that the log command is supported only for Windows Store applications and cannot get logs from Windows Phone application.\n\n#Report Issues\nReport them at the [Apache Cordova Issue Tracker](https://issues.apache.org/jira/browse/CB). Create a user account, use `windows` as the component.\n\n#Further Reading\n- [Windows Platform Guide](http://cordova.apache.org/docs/en/edge/guide_platforms_win8_index.md.html#Windows%208%20Platform%20Guide)\n- [Apache Cordova Documentation](http://docs.cordova.io)\n",
"readmeFilename": "README.md",
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git+https://github.com/apache/cordova-windows.git" "url": "git+https://github.com/apache/cordova-windows.git"
......
...@@ -2,10 +2,21 @@ ...@@ -2,10 +2,21 @@
"name": "de.appplant.localnotification.example", "name": "de.appplant.localnotification.example",
"version": "0.0.1", "version": "0.0.1",
"lockfileVersion": 1, "lockfileVersion": 1,
"requires": true,
"dependencies": { "dependencies": {
"cordova-ios": { "cordova-ios": {
"version": "https://registry.npmjs.org/cordova-ios/-/cordova-ios-4.4.0.tgz", "version": "https://registry.npmjs.org/cordova-ios/-/cordova-ios-4.4.0.tgz",
"integrity": "sha1-XNbvciRQXbVYRG5GN62X0IeMdO8=", "integrity": "sha1-XNbvciRQXbVYRG5GN62X0IeMdO8=",
"requires": {
"cordova-common": "2.0.2",
"ios-sim": "https://registry.npmjs.org/ios-sim/-/ios-sim-5.0.12.tgz",
"nopt": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
"plist": "https://registry.npmjs.org/plist/-/plist-1.2.0.tgz",
"q": "https://registry.npmjs.org/q/-/q-1.4.1.tgz",
"shelljs": "https://registry.npmjs.org/shelljs/-/shelljs-0.5.3.tgz",
"xcode": "https://registry.npmjs.org/xcode/-/xcode-0.9.3.tgz",
"xml-escape": "https://registry.npmjs.org/xml-escape/-/xml-escape-1.1.0.tgz"
},
"dependencies": { "dependencies": {
"abbrev": { "abbrev": {
"version": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", "version": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz",
...@@ -29,15 +40,25 @@ ...@@ -29,15 +40,25 @@
}, },
"bplist-creator": { "bplist-creator": {
"version": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.0.4.tgz", "version": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.0.4.tgz",
"integrity": "sha1-SsBJZ4LhJ6hcHSAmpPXrIqev+ZE=" "integrity": "sha1-SsBJZ4LhJ6hcHSAmpPXrIqev+ZE=",
"requires": {
"stream-buffers": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-0.2.6.tgz"
}
}, },
"bplist-parser": { "bplist-parser": {
"version": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.1.1.tgz", "version": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.1.1.tgz",
"integrity": "sha1-1g1dzCDLptx+HymbNdPh+V2vuuY=" "integrity": "sha1-1g1dzCDLptx+HymbNdPh+V2vuuY=",
"requires": {
"big-integer": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.17.tgz"
}
}, },
"brace-expansion": { "brace-expansion": {
"version": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.6.tgz", "version": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.6.tgz",
"integrity": "sha1-cZfX6qm4fmSDkOph/GbIRCdCDfk=" "integrity": "sha1-cZfX6qm4fmSDkOph/GbIRCdCDfk=",
"requires": {
"balanced-match": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
"concat-map": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
}
}, },
"concat-map": { "concat-map": {
"version": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "version": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
...@@ -46,7 +67,22 @@ ...@@ -46,7 +67,22 @@
"cordova-common": { "cordova-common": {
"version": "2.0.2", "version": "2.0.2",
"resolved": "https://registry.npmjs.org/cordova-common/-/cordova-common-2.0.2.tgz", "resolved": "https://registry.npmjs.org/cordova-common/-/cordova-common-2.0.2.tgz",
"integrity": "sha1-V0Z5driv1eC9ChMRG2akIEQWAcs=" "integrity": "sha1-V0Z5driv1eC9ChMRG2akIEQWAcs=",
"requires": {
"ansi": "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz",
"bplist-parser": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.1.1.tgz",
"cordova-registry-mapper": "https://registry.npmjs.org/cordova-registry-mapper/-/cordova-registry-mapper-1.1.15.tgz",
"elementtree": "https://registry.npmjs.org/elementtree/-/elementtree-0.1.6.tgz",
"glob": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
"minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz",
"osenv": "https://registry.npmjs.org/osenv/-/osenv-0.1.3.tgz",
"plist": "https://registry.npmjs.org/plist/-/plist-1.2.0.tgz",
"q": "https://registry.npmjs.org/q/-/q-1.4.1.tgz",
"semver": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
"shelljs": "https://registry.npmjs.org/shelljs/-/shelljs-0.5.3.tgz",
"underscore": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz",
"unorm": "https://registry.npmjs.org/unorm/-/unorm-1.4.1.tgz"
}
}, },
"cordova-registry-mapper": { "cordova-registry-mapper": {
"version": "https://registry.npmjs.org/cordova-registry-mapper/-/cordova-registry-mapper-1.1.15.tgz", "version": "https://registry.npmjs.org/cordova-registry-mapper/-/cordova-registry-mapper-1.1.15.tgz",
...@@ -54,15 +90,29 @@ ...@@ -54,15 +90,29 @@
}, },
"elementtree": { "elementtree": {
"version": "https://registry.npmjs.org/elementtree/-/elementtree-0.1.6.tgz", "version": "https://registry.npmjs.org/elementtree/-/elementtree-0.1.6.tgz",
"integrity": "sha1-KsTEbqMFFsjEy9teOsdBjlkt4gw=" "integrity": "sha1-KsTEbqMFFsjEy9teOsdBjlkt4gw=",
"requires": {
"sax": "https://registry.npmjs.org/sax/-/sax-0.3.5.tgz"
}
}, },
"glob": { "glob": {
"version": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", "version": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
"integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=" "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
"requires": {
"inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
"minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz",
"once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz"
}
}, },
"inflight": { "inflight": {
"version": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "version": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=" "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
"requires": {
"once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"wrappy": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz"
}
}, },
"inherits": { "inherits": {
"version": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "version": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
...@@ -71,6 +121,12 @@ ...@@ -71,6 +121,12 @@
"ios-sim": { "ios-sim": {
"version": "https://registry.npmjs.org/ios-sim/-/ios-sim-5.0.12.tgz", "version": "https://registry.npmjs.org/ios-sim/-/ios-sim-5.0.12.tgz",
"integrity": "sha1-CwdDbOG/Zjvamj+3VBL0Gh3sRls=", "integrity": "sha1-CwdDbOG/Zjvamj+3VBL0Gh3sRls=",
"requires": {
"bplist-parser": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.0.6.tgz",
"nopt": "https://registry.npmjs.org/nopt/-/nopt-1.0.9.tgz",
"plist": "https://registry.npmjs.org/plist/-/plist-1.2.0.tgz",
"simctl": "https://registry.npmjs.org/simctl/-/simctl-0.1.0.tgz"
},
"dependencies": { "dependencies": {
"bplist-parser": { "bplist-parser": {
"version": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.0.6.tgz", "version": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.0.6.tgz",
...@@ -78,7 +134,10 @@ ...@@ -78,7 +134,10 @@
}, },
"nopt": { "nopt": {
"version": "https://registry.npmjs.org/nopt/-/nopt-1.0.9.tgz", "version": "https://registry.npmjs.org/nopt/-/nopt-1.0.9.tgz",
"integrity": "sha1-O8DXy6e/sNWmdtvtfA6+SKT9RU4=" "integrity": "sha1-O8DXy6e/sNWmdtvtfA6+SKT9RU4=",
"requires": {
"abbrev": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz"
}
} }
} }
}, },
...@@ -88,7 +147,10 @@ ...@@ -88,7 +147,10 @@
}, },
"minimatch": { "minimatch": {
"version": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", "version": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz",
"integrity": "sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=" "integrity": "sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=",
"requires": {
"brace-expansion": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.6.tgz"
}
}, },
"node-uuid": { "node-uuid": {
"version": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.7.tgz", "version": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.7.tgz",
...@@ -96,11 +158,17 @@ ...@@ -96,11 +158,17 @@
}, },
"nopt": { "nopt": {
"version": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", "version": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
"integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=" "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
"requires": {
"abbrev": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz"
}
}, },
"once": { "once": {
"version": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "version": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=" "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
"requires": {
"wrappy": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz"
}
}, },
"os-homedir": { "os-homedir": {
"version": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", "version": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
...@@ -112,7 +180,11 @@ ...@@ -112,7 +180,11 @@
}, },
"osenv": { "osenv": {
"version": "https://registry.npmjs.org/osenv/-/osenv-0.1.3.tgz", "version": "https://registry.npmjs.org/osenv/-/osenv-0.1.3.tgz",
"integrity": "sha1-g88FxtZFj8TVrGNi6jJdkvJ1Qhc=" "integrity": "sha1-g88FxtZFj8TVrGNi6jJdkvJ1Qhc=",
"requires": {
"os-homedir": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
"os-tmpdir": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz"
}
}, },
"path-is-absolute": { "path-is-absolute": {
"version": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "version": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
...@@ -124,7 +196,13 @@ ...@@ -124,7 +196,13 @@
}, },
"plist": { "plist": {
"version": "https://registry.npmjs.org/plist/-/plist-1.2.0.tgz", "version": "https://registry.npmjs.org/plist/-/plist-1.2.0.tgz",
"integrity": "sha1-CEtQk93JJQbiWfh0uNmxr7jHlZM=" "integrity": "sha1-CEtQk93JJQbiWfh0uNmxr7jHlZM=",
"requires": {
"base64-js": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.8.tgz",
"util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
"xmlbuilder": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-4.0.0.tgz",
"xmldom": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz"
}
}, },
"q": { "q": {
"version": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", "version": "https://registry.npmjs.org/q/-/q-1.4.1.tgz",
...@@ -145,6 +223,10 @@ ...@@ -145,6 +223,10 @@
"simctl": { "simctl": {
"version": "https://registry.npmjs.org/simctl/-/simctl-0.1.0.tgz", "version": "https://registry.npmjs.org/simctl/-/simctl-0.1.0.tgz",
"integrity": "sha1-reEzthbid/6ly8m6Q4qAUpuqaW0=", "integrity": "sha1-reEzthbid/6ly8m6Q4qAUpuqaW0=",
"requires": {
"shelljs": "https://registry.npmjs.org/shelljs/-/shelljs-0.2.6.tgz",
"tail": "https://registry.npmjs.org/tail/-/tail-0.4.0.tgz"
},
"dependencies": { "dependencies": {
"shelljs": { "shelljs": {
"version": "https://registry.npmjs.org/shelljs/-/shelljs-0.2.6.tgz", "version": "https://registry.npmjs.org/shelljs/-/shelljs-0.2.6.tgz",
...@@ -155,6 +237,11 @@ ...@@ -155,6 +237,11 @@
"simple-plist": { "simple-plist": {
"version": "https://registry.npmjs.org/simple-plist/-/simple-plist-0.1.4.tgz", "version": "https://registry.npmjs.org/simple-plist/-/simple-plist-0.1.4.tgz",
"integrity": "sha1-EOtRtH4zxVbrjsRtXuZNZOcX210=", "integrity": "sha1-EOtRtH4zxVbrjsRtXuZNZOcX210=",
"requires": {
"bplist-creator": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.0.4.tgz",
"bplist-parser": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.0.6.tgz",
"plist": "https://registry.npmjs.org/plist/-/plist-1.2.0.tgz"
},
"dependencies": { "dependencies": {
"bplist-parser": { "bplist-parser": {
"version": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.0.6.tgz", "version": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.0.6.tgz",
...@@ -189,6 +276,11 @@ ...@@ -189,6 +276,11 @@
"xcode": { "xcode": {
"version": "https://registry.npmjs.org/xcode/-/xcode-0.9.3.tgz", "version": "https://registry.npmjs.org/xcode/-/xcode-0.9.3.tgz",
"integrity": "sha1-kQqJwWrubMC0LKgFptC0z4chHPM=", "integrity": "sha1-kQqJwWrubMC0LKgFptC0z4chHPM=",
"requires": {
"pegjs": "https://registry.npmjs.org/pegjs/-/pegjs-0.10.0.tgz",
"simple-plist": "https://registry.npmjs.org/simple-plist/-/simple-plist-0.2.1.tgz",
"uuid": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz"
},
"dependencies": { "dependencies": {
"base64-js": { "base64-js": {
"version": "https://registry.npmjs.org/base64-js/-/base64-js-1.1.2.tgz", "version": "https://registry.npmjs.org/base64-js/-/base64-js-1.1.2.tgz",
...@@ -196,7 +288,10 @@ ...@@ -196,7 +288,10 @@
}, },
"bplist-creator": { "bplist-creator": {
"version": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.0.7.tgz", "version": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.0.7.tgz",
"integrity": "sha1-N98VNgkoJLh8QvlXsBNEEXNyrkU=" "integrity": "sha1-N98VNgkoJLh8QvlXsBNEEXNyrkU=",
"requires": {
"stream-buffers": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz"
}
}, },
"pegjs": { "pegjs": {
"version": "https://registry.npmjs.org/pegjs/-/pegjs-0.10.0.tgz", "version": "https://registry.npmjs.org/pegjs/-/pegjs-0.10.0.tgz",
...@@ -204,11 +299,21 @@ ...@@ -204,11 +299,21 @@
}, },
"plist": { "plist": {
"version": "https://registry.npmjs.org/plist/-/plist-2.0.1.tgz", "version": "https://registry.npmjs.org/plist/-/plist-2.0.1.tgz",
"integrity": "sha1-CjLKlIGxw2TpLhjcVch23p0B2os=" "integrity": "sha1-CjLKlIGxw2TpLhjcVch23p0B2os=",
"requires": {
"base64-js": "https://registry.npmjs.org/base64-js/-/base64-js-1.1.2.tgz",
"xmlbuilder": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-8.2.2.tgz",
"xmldom": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz"
}
}, },
"simple-plist": { "simple-plist": {
"version": "https://registry.npmjs.org/simple-plist/-/simple-plist-0.2.1.tgz", "version": "https://registry.npmjs.org/simple-plist/-/simple-plist-0.2.1.tgz",
"integrity": "sha1-cXZts1IyaSjPOoByQrp2IyJjZyM=" "integrity": "sha1-cXZts1IyaSjPOoByQrp2IyJjZyM=",
"requires": {
"bplist-creator": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.0.7.tgz",
"bplist-parser": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.1.1.tgz",
"plist": "https://registry.npmjs.org/plist/-/plist-2.0.1.tgz"
}
}, },
"stream-buffers": { "stream-buffers": {
"version": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz", "version": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz",
...@@ -230,7 +335,10 @@ ...@@ -230,7 +335,10 @@
}, },
"xmlbuilder": { "xmlbuilder": {
"version": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-4.0.0.tgz", "version": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-4.0.0.tgz",
"integrity": "sha1-mLj2UcowqmJANvEn0RzGbce5B6M=" "integrity": "sha1-mLj2UcowqmJANvEn0RzGbce5B6M=",
"requires": {
"lodash": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz"
}
}, },
"xmldom": { "xmldom": {
"version": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz", "version": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz",
...@@ -245,6 +353,221 @@ ...@@ -245,6 +353,221 @@
"cordova-plugin-x-toast": { "cordova-plugin-x-toast": {
"version": "https://registry.npmjs.org/cordova-plugin-x-toast/-/cordova-plugin-x-toast-2.6.0.tgz", "version": "https://registry.npmjs.org/cordova-plugin-x-toast/-/cordova-plugin-x-toast-2.6.0.tgz",
"integrity": "sha1-R3i+y2HjbIlRCRoHWFDCje2PVqU=" "integrity": "sha1-R3i+y2HjbIlRCRoHWFDCje2PVqU="
},
"cordova-windows": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/cordova-windows/-/cordova-windows-5.0.0.tgz",
"integrity": "sha1-fWRTk+byEstL0XFWcZlFSEzudf4=",
"requires": {
"cordova-common": "2.0.0",
"elementtree": "0.1.6",
"node-uuid": "1.4.7",
"nopt": "3.0.6",
"q": "1.4.1",
"semver": "5.3.0",
"shelljs": "0.5.3",
"winjs": "4.4.0"
},
"dependencies": {
"abbrev": {
"version": "1.0.9",
"bundled": true
},
"ansi": {
"version": "0.3.1",
"bundled": true
},
"balanced-match": {
"version": "0.4.2",
"bundled": true
},
"base64-js": {
"version": "0.0.8",
"bundled": true
},
"big-integer": {
"version": "1.6.17",
"bundled": true
},
"bplist-parser": {
"version": "0.1.1",
"bundled": true,
"requires": {
"big-integer": "1.6.17"
}
},
"brace-expansion": {
"version": "1.1.6",
"bundled": true,
"requires": {
"balanced-match": "0.4.2",
"concat-map": "0.0.1"
}
},
"concat-map": {
"version": "0.0.1",
"bundled": true
},
"cordova-common": {
"version": "2.0.0",
"bundled": true,
"requires": {
"ansi": "0.3.1",
"bplist-parser": "0.1.1",
"cordova-registry-mapper": "1.1.15",
"elementtree": "0.1.6",
"glob": "5.0.15",
"minimatch": "3.0.3",
"osenv": "0.1.4",
"plist": "1.2.0",
"q": "1.4.1",
"semver": "5.3.0",
"shelljs": "0.5.3",
"underscore": "1.8.3",
"unorm": "1.4.1"
}
},
"cordova-registry-mapper": {
"version": "1.1.15",
"bundled": true
},
"elementtree": {
"version": "0.1.6",
"bundled": true,
"requires": {
"sax": "0.3.5"
}
},
"glob": {
"version": "5.0.15",
"bundled": true,
"requires": {
"inflight": "1.0.6",
"inherits": "2.0.3",
"minimatch": "3.0.3",
"once": "1.4.0",
"path-is-absolute": "1.0.1"
}
},
"inflight": {
"version": "1.0.6",
"bundled": true,
"requires": {
"once": "1.4.0",
"wrappy": "1.0.2"
}
},
"inherits": {
"version": "2.0.3",
"bundled": true
},
"lodash": {
"version": "3.10.1",
"bundled": true
},
"minimatch": {
"version": "3.0.3",
"bundled": true,
"requires": {
"brace-expansion": "1.1.6"
}
},
"node-uuid": {
"version": "1.4.7",
"bundled": true
},
"nopt": {
"version": "3.0.6",
"bundled": true,
"requires": {
"abbrev": "1.0.9"
}
},
"once": {
"version": "1.4.0",
"bundled": true,
"requires": {
"wrappy": "1.0.2"
}
},
"os-homedir": {
"version": "1.0.2",
"bundled": true
},
"os-tmpdir": {
"version": "1.0.2",
"bundled": true
},
"osenv": {
"version": "0.1.4",
"bundled": true,
"requires": {
"os-homedir": "1.0.2",
"os-tmpdir": "1.0.2"
}
},
"path-is-absolute": {
"version": "1.0.1",
"bundled": true
},
"plist": {
"version": "1.2.0",
"bundled": true,
"requires": {
"base64-js": "0.0.8",
"util-deprecate": "1.0.2",
"xmlbuilder": "4.0.0",
"xmldom": "0.1.27"
}
},
"q": {
"version": "1.4.1",
"bundled": true
},
"sax": {
"version": "0.3.5",
"bundled": true
},
"semver": {
"version": "5.3.0",
"bundled": true
},
"shelljs": {
"version": "0.5.3",
"bundled": true
},
"underscore": {
"version": "1.8.3",
"bundled": true
},
"unorm": {
"version": "1.4.1",
"bundled": true
},
"util-deprecate": {
"version": "1.0.2",
"bundled": true
},
"winjs": {
"version": "4.4.0",
"bundled": true
},
"wrappy": {
"version": "1.0.2",
"bundled": true
},
"xmlbuilder": {
"version": "4.0.0",
"bundled": true,
"requires": {
"lodash": "3.10.1"
}
},
"xmldom": {
"version": "0.1.27",
"bundled": true
}
}
} }
} }
} }
...@@ -18,13 +18,13 @@ ...@@ -18,13 +18,13 @@
D0D06B90644D41EAAE8C16D6 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E4042BD923824AEB9E9079DC /* QuartzCore.framework */; }; D0D06B90644D41EAAE8C16D6 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E4042BD923824AEB9E9079DC /* QuartzCore.framework */; };
E09211A0D1294D6588191EB4 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = B49413F707024AE39907B73F /* libz.tbd */; }; E09211A0D1294D6588191EB4 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = B49413F707024AE39907B73F /* libz.tbd */; };
E27F123D4ACE4BF39165B055 /* CDVDevice.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A150CBE2B3E47C5A4319096 /* CDVDevice.m */; }; E27F123D4ACE4BF39165B055 /* CDVDevice.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A150CBE2B3E47C5A4319096 /* CDVDevice.m */; };
520715FC8CC24074B2996DFE /* APPLocalNotification.m in Sources */ = {isa = PBXBuildFile; fileRef = 223C01213A344BA3A5F850BA /* APPLocalNotification.m */; }; 108C9D43229F4E2EBE2DECA0 /* APPLocalNotification.m in Sources */ = {isa = PBXBuildFile; fileRef = E999CAE000D44EF1A75B5799 /* APPLocalNotification.m */; };
BA4228D76F524318A690F7DC /* APPNotificationContent.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CDA90454A964D2AA3DD1606 /* APPNotificationContent.m */; }; 9AACB8F837894AF7B9B06BC4 /* APPNotificationContent.m in Sources */ = {isa = PBXBuildFile; fileRef = F9F8CBB01D954157B3BE5193 /* APPNotificationContent.m */; };
6D81AA9C83F9414193740A4A /* APPNotificationOptions.m in Sources */ = {isa = PBXBuildFile; fileRef = F171A529257A442BBEE0DAD3 /* APPNotificationOptions.m */; }; 37F34D7EC0124D339A3E4245 /* APPNotificationOptions.m in Sources */ = {isa = PBXBuildFile; fileRef = 595C58EAD99844C9881DCFF7 /* APPNotificationOptions.m */; };
763EAA7E1C1E469999D41344 /* UNUserNotificationCenter+APPLocalNotification.m in Sources */ = {isa = PBXBuildFile; fileRef = C63D0A36EF9644B7BEBDF03E /* UNUserNotificationCenter+APPLocalNotification.m */; }; 2AED393561D94BDE93435CFE /* UNUserNotificationCenter+APPLocalNotification.m in Sources */ = {isa = PBXBuildFile; fileRef = CBAE2538B12645008FF384F1 /* UNUserNotificationCenter+APPLocalNotification.m */; };
BBDEF81684CF4D96B610BDF4 /* UNNotificationRequest+APPLocalNotification.m in Sources */ = {isa = PBXBuildFile; fileRef = C61C65E3815548E9BEBD8CA0 /* UNNotificationRequest+APPLocalNotification.m */; }; F0C3627890224CEE84A78FEA /* UNNotificationRequest+APPLocalNotification.m in Sources */ = {isa = PBXBuildFile; fileRef = F7000FB532194593A477AAA6 /* UNNotificationRequest+APPLocalNotification.m */; };
A9BE8C9D094A42A295BE7C4E /* UserNotifications.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 174DCD6CDC864B05935C3844 /* UserNotifications.framework */; }; FD60B7C086C44B04A83A51C0 /* UserNotifications.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A16EEDD76F364E7B960FB55A /* UserNotifications.framework */; };
5FE7FCB9F9164B11945BB2E3 /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 064BC292CAAB48DD8DEA1D29 /* CoreLocation.framework */; }; FFEBA818A0644C1188BD90BF /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A4A3499808544C7EB82C4B61 /* CoreLocation.framework */; };
/* End PBXBuildFile section */ /* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */ /* Begin PBXContainerItemProxy section */
...@@ -80,18 +80,18 @@ ...@@ -80,18 +80,18 @@
EB87FDF41871DAF40020F90C /* config.xml */ = {isa = PBXFileReference; lastKnownFileType = text.xml; name = config.xml; path = ../../config.xml; sourceTree = "<group>"; }; EB87FDF41871DAF40020F90C /* config.xml */ = {isa = PBXFileReference; lastKnownFileType = text.xml; name = config.xml; path = ../../config.xml; sourceTree = "<group>"; };
ED33DF2A687741AEAF9F8254 /* Bridging-Header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Bridging-Header.h"; sourceTree = "<group>"; }; ED33DF2A687741AEAF9F8254 /* Bridging-Header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Bridging-Header.h"; sourceTree = "<group>"; };
F840E1F0165FE0F500CFE078 /* config.xml */ = {isa = PBXFileReference; lastKnownFileType = text.xml; name = config.xml; path = NotificationExample/config.xml; sourceTree = "<group>"; }; F840E1F0165FE0F500CFE078 /* config.xml */ = {isa = PBXFileReference; lastKnownFileType = text.xml; name = config.xml; path = NotificationExample/config.xml; sourceTree = "<group>"; };
223C01213A344BA3A5F850BA /* APPLocalNotification.m */ = {isa = PBXFileReference; name = "APPLocalNotification.m"; path = "../../../../../cordova-plugin-local-notifications/src/ios/APPLocalNotification.m"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; }; E999CAE000D44EF1A75B5799 /* APPLocalNotification.m */ = {isa = PBXFileReference; name = "APPLocalNotification.m"; path = "cordova-plugin-local-notifications/APPLocalNotification.m"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; };
6CDA90454A964D2AA3DD1606 /* APPNotificationContent.m */ = {isa = PBXFileReference; name = "APPNotificationContent.m"; path = "../../../../../cordova-plugin-local-notifications/src/ios/APPNotificationContent.m"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; }; F9F8CBB01D954157B3BE5193 /* APPNotificationContent.m */ = {isa = PBXFileReference; name = "APPNotificationContent.m"; path = "cordova-plugin-local-notifications/APPNotificationContent.m"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; };
F171A529257A442BBEE0DAD3 /* APPNotificationOptions.m */ = {isa = PBXFileReference; name = "APPNotificationOptions.m"; path = "../../../../../cordova-plugin-local-notifications/src/ios/APPNotificationOptions.m"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; }; 595C58EAD99844C9881DCFF7 /* APPNotificationOptions.m */ = {isa = PBXFileReference; name = "APPNotificationOptions.m"; path = "cordova-plugin-local-notifications/APPNotificationOptions.m"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; };
C63D0A36EF9644B7BEBDF03E /* UNUserNotificationCenter+APPLocalNotification.m */ = {isa = PBXFileReference; name = "UNUserNotificationCenter+APPLocalNotification.m"; path = "../../../../../cordova-plugin-local-notifications/src/ios/UNUserNotificationCenter+APPLocalNotification.m"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; }; CBAE2538B12645008FF384F1 /* UNUserNotificationCenter+APPLocalNotification.m */ = {isa = PBXFileReference; name = "UNUserNotificationCenter+APPLocalNotification.m"; path = "cordova-plugin-local-notifications/UNUserNotificationCenter+APPLocalNotification.m"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; };
C61C65E3815548E9BEBD8CA0 /* UNNotificationRequest+APPLocalNotification.m */ = {isa = PBXFileReference; name = "UNNotificationRequest+APPLocalNotification.m"; path = "../../../../../cordova-plugin-local-notifications/src/ios/UNNotificationRequest+APPLocalNotification.m"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; }; F7000FB532194593A477AAA6 /* UNNotificationRequest+APPLocalNotification.m */ = {isa = PBXFileReference; name = "UNNotificationRequest+APPLocalNotification.m"; path = "cordova-plugin-local-notifications/UNNotificationRequest+APPLocalNotification.m"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; };
9E975B15F82242159DF20877 /* APPLocalNotification.h */ = {isa = PBXFileReference; name = "APPLocalNotification.h"; path = "../../../../../cordova-plugin-local-notifications/src/ios/APPLocalNotification.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; }; 31679441BE5D476D889EB37E /* APPLocalNotification.h */ = {isa = PBXFileReference; name = "APPLocalNotification.h"; path = "cordova-plugin-local-notifications/APPLocalNotification.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; };
211B4E56A6204223BD842378 /* APPNotificationContent.h */ = {isa = PBXFileReference; name = "APPNotificationContent.h"; path = "../../../../../cordova-plugin-local-notifications/src/ios/APPNotificationContent.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; }; 271840E47E454737868156B8 /* APPNotificationContent.h */ = {isa = PBXFileReference; name = "APPNotificationContent.h"; path = "cordova-plugin-local-notifications/APPNotificationContent.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; };
03C67BDE81EB4D458B248416 /* APPNotificationOptions.h */ = {isa = PBXFileReference; name = "APPNotificationOptions.h"; path = "../../../../../cordova-plugin-local-notifications/src/ios/APPNotificationOptions.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; }; ED2B089C8384493692652830 /* APPNotificationOptions.h */ = {isa = PBXFileReference; name = "APPNotificationOptions.h"; path = "cordova-plugin-local-notifications/APPNotificationOptions.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; };
E07DC1B943BE47EBAED89D1D /* UNUserNotificationCenter+APPLocalNotification.h */ = {isa = PBXFileReference; name = "UNUserNotificationCenter+APPLocalNotification.h"; path = "../../../../../cordova-plugin-local-notifications/src/ios/UNUserNotificationCenter+APPLocalNotification.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; }; 7A2078E2751C469CB92D931A /* UNUserNotificationCenter+APPLocalNotification.h */ = {isa = PBXFileReference; name = "UNUserNotificationCenter+APPLocalNotification.h"; path = "cordova-plugin-local-notifications/UNUserNotificationCenter+APPLocalNotification.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; };
97D08C9901D54B0893172FAF /* UNNotificationRequest+APPLocalNotification.h */ = {isa = PBXFileReference; name = "UNNotificationRequest+APPLocalNotification.h"; path = "../../../../../cordova-plugin-local-notifications/src/ios/UNNotificationRequest+APPLocalNotification.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; }; D64710F014A04CF8860A7E99 /* UNNotificationRequest+APPLocalNotification.h */ = {isa = PBXFileReference; name = "UNNotificationRequest+APPLocalNotification.h"; path = "cordova-plugin-local-notifications/UNNotificationRequest+APPLocalNotification.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; };
174DCD6CDC864B05935C3844 /* UserNotifications.framework */ = {isa = PBXFileReference; name = "UserNotifications.framework"; path = "System/Library/Frameworks/UserNotifications.framework"; sourceTree = SDKROOT; fileEncoding = undefined; lastKnownFileType = wrapper.framework; explicitFileType = undefined; includeInIndex = 0; }; A16EEDD76F364E7B960FB55A /* UserNotifications.framework */ = {isa = PBXFileReference; name = "UserNotifications.framework"; path = "System/Library/Frameworks/UserNotifications.framework"; sourceTree = SDKROOT; fileEncoding = undefined; lastKnownFileType = wrapper.framework; explicitFileType = undefined; includeInIndex = 0; };
064BC292CAAB48DD8DEA1D29 /* CoreLocation.framework */ = {isa = PBXFileReference; name = "CoreLocation.framework"; path = "System/Library/Frameworks/CoreLocation.framework"; sourceTree = SDKROOT; fileEncoding = undefined; lastKnownFileType = wrapper.framework; explicitFileType = undefined; includeInIndex = 0; }; A4A3499808544C7EB82C4B61 /* CoreLocation.framework */ = {isa = PBXFileReference; name = "CoreLocation.framework"; path = "System/Library/Frameworks/CoreLocation.framework"; sourceTree = SDKROOT; fileEncoding = undefined; lastKnownFileType = wrapper.framework; explicitFileType = undefined; includeInIndex = 0; };
/* End PBXFileReference section */ /* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */ /* Begin PBXFrameworksBuildPhase section */
...@@ -102,8 +102,8 @@ ...@@ -102,8 +102,8 @@
301BF552109A68D80062928A /* libCordova.a in Frameworks */, 301BF552109A68D80062928A /* libCordova.a in Frameworks */,
E09211A0D1294D6588191EB4 /* libz.tbd in Frameworks */, E09211A0D1294D6588191EB4 /* libz.tbd in Frameworks */,
D0D06B90644D41EAAE8C16D6 /* QuartzCore.framework in Frameworks */, D0D06B90644D41EAAE8C16D6 /* QuartzCore.framework in Frameworks */,
A9BE8C9D094A42A295BE7C4E /* UserNotifications.framework in Frameworks */, FD60B7C086C44B04A83A51C0 /* UserNotifications.framework in Frameworks */,
5FE7FCB9F9164B11945BB2E3 /* CoreLocation.framework in Frameworks */, FFEBA818A0644C1188BD90BF /* CoreLocation.framework in Frameworks */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
...@@ -176,8 +176,8 @@ ...@@ -176,8 +176,8 @@
children = ( children = (
B49413F707024AE39907B73F /* libz.tbd */, B49413F707024AE39907B73F /* libz.tbd */,
E4042BD923824AEB9E9079DC /* QuartzCore.framework */, E4042BD923824AEB9E9079DC /* QuartzCore.framework */,
174DCD6CDC864B05935C3844 /* UserNotifications.framework */, A16EEDD76F364E7B960FB55A /* UserNotifications.framework */,
064BC292CAAB48DD8DEA1D29 /* CoreLocation.framework */, A4A3499808544C7EB82C4B61 /* CoreLocation.framework */,
); );
name = Frameworks; name = Frameworks;
sourceTree = "<group>"; sourceTree = "<group>";
...@@ -210,16 +210,16 @@ ...@@ -210,16 +210,16 @@
816F86ACE6CD4C8E8FA7A84A /* Toast.m */, 816F86ACE6CD4C8E8FA7A84A /* Toast.m */,
A380129C71E248EDBC5BE744 /* Toast+UIView.h */, A380129C71E248EDBC5BE744 /* Toast+UIView.h */,
84764C161F33453AB5FD1235 /* Toast.h */, 84764C161F33453AB5FD1235 /* Toast.h */,
223C01213A344BA3A5F850BA /* APPLocalNotification.m */, E999CAE000D44EF1A75B5799 /* APPLocalNotification.m */,
6CDA90454A964D2AA3DD1606 /* APPNotificationContent.m */, F9F8CBB01D954157B3BE5193 /* APPNotificationContent.m */,
F171A529257A442BBEE0DAD3 /* APPNotificationOptions.m */, 595C58EAD99844C9881DCFF7 /* APPNotificationOptions.m */,
C63D0A36EF9644B7BEBDF03E /* UNUserNotificationCenter+APPLocalNotification.m */, CBAE2538B12645008FF384F1 /* UNUserNotificationCenter+APPLocalNotification.m */,
C61C65E3815548E9BEBD8CA0 /* UNNotificationRequest+APPLocalNotification.m */, F7000FB532194593A477AAA6 /* UNNotificationRequest+APPLocalNotification.m */,
9E975B15F82242159DF20877 /* APPLocalNotification.h */, 31679441BE5D476D889EB37E /* APPLocalNotification.h */,
211B4E56A6204223BD842378 /* APPNotificationContent.h */, 271840E47E454737868156B8 /* APPNotificationContent.h */,
03C67BDE81EB4D458B248416 /* APPNotificationOptions.h */, ED2B089C8384493692652830 /* APPNotificationOptions.h */,
E07DC1B943BE47EBAED89D1D /* UNUserNotificationCenter+APPLocalNotification.h */, 7A2078E2751C469CB92D931A /* UNUserNotificationCenter+APPLocalNotification.h */,
97D08C9901D54B0893172FAF /* UNNotificationRequest+APPLocalNotification.h */, D64710F014A04CF8860A7E99 /* UNNotificationRequest+APPLocalNotification.h */,
); );
name = Plugins; name = Plugins;
path = NotificationExample/Plugins; path = NotificationExample/Plugins;
...@@ -350,11 +350,11 @@ ...@@ -350,11 +350,11 @@
E27F123D4ACE4BF39165B055 /* CDVDevice.m in Sources */, E27F123D4ACE4BF39165B055 /* CDVDevice.m in Sources */,
CA605C2FE84D46FC94CE18B1 /* Toast+UIView.m in Sources */, CA605C2FE84D46FC94CE18B1 /* Toast+UIView.m in Sources */,
91E68846231A433A8F26E364 /* Toast.m in Sources */, 91E68846231A433A8F26E364 /* Toast.m in Sources */,
520715FC8CC24074B2996DFE /* APPLocalNotification.m in Sources */, 108C9D43229F4E2EBE2DECA0 /* APPLocalNotification.m in Sources */,
BA4228D76F524318A690F7DC /* APPNotificationContent.m in Sources */, 9AACB8F837894AF7B9B06BC4 /* APPNotificationContent.m in Sources */,
6D81AA9C83F9414193740A4A /* APPNotificationOptions.m in Sources */, 37F34D7EC0124D339A3E4245 /* APPNotificationOptions.m in Sources */,
763EAA7E1C1E469999D41344 /* UNUserNotificationCenter+APPLocalNotification.m in Sources */, 2AED393561D94BDE93435CFE /* UNUserNotificationCenter+APPLocalNotification.m in Sources */,
BBDEF81684CF4D96B610BDF4 /* UNNotificationRequest+APPLocalNotification.m in Sources */, F0C3627890224CEE84A78FEA /* UNNotificationRequest+APPLocalNotification.m in Sources */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
......
...@@ -2,4 +2,22 @@ ...@@ -2,4 +2,22 @@
<Bucket <Bucket
type = "1" type = "1"
version = "2.0"> version = "2.0">
<Breakpoints>
<BreakpointProxy
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
<BreakpointContent
shouldBeEnabled = "Yes"
ignoreCount = "0"
continueAfterRunningActions = "No"
filePath = "../../../cordova-plugin-local-notifications/src/ios/APPNotificationContent.m"
timestampString = "526314552.870829"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "102"
endingLineNumber = "102"
landmarkName = "-request"
landmarkType = "7">
</BreakpointContent>
</BreakpointProxy>
</Breakpoints>
</Bucket> </Bucket>
...@@ -26,9 +26,9 @@ ...@@ -26,9 +26,9 @@
@interface APPLocalNotification : CDVPlugin <UNUserNotificationCenterDelegate> @interface APPLocalNotification : CDVPlugin <UNUserNotificationCenterDelegate>
// Set launchDetails object // Set launchDetails object
- (void) launchDetails:(CDVInvokedUrlCommand*)command; - (void) launch:(CDVInvokedUrlCommand*)command;
// Execute all queued events // Execute all queued events
- (void) deviceready:(CDVInvokedUrlCommand*)command; - (void) ready:(CDVInvokedUrlCommand*)command;
// Check permission to show notifications // Check permission to show notifications
- (void) check:(CDVInvokedUrlCommand*)command; - (void) check:(CDVInvokedUrlCommand*)command;
...@@ -40,8 +40,8 @@ ...@@ -40,8 +40,8 @@
// Schedule notifications // Schedule notifications
- (void) schedule:(CDVInvokedUrlCommand*)command; - (void) schedule:(CDVInvokedUrlCommand*)command;
//// Update set of notifications // Update set of notifications
//- (void) update:(CDVInvokedUrlCommand*)command; - (void) update:(CDVInvokedUrlCommand*)command;
// Clear notifications by id // Clear notifications by id
- (void) clear:(CDVInvokedUrlCommand*)command; - (void) clear:(CDVInvokedUrlCommand*)command;
// Clear all notifications // Clear all notifications
......
...@@ -47,13 +47,12 @@ ...@@ -47,13 +47,12 @@
* *
* @return [ Void ] * @return [ Void ]
*/ */
- (void) launchDetails:(CDVInvokedUrlCommand*)command - (void) launch:(CDVInvokedUrlCommand*)command
{ {
if (!_launchDetails) if (!_launchDetails)
return; return;
NSString* js; NSString* js;
js = [NSString stringWithFormat: js = [NSString stringWithFormat:
@"cordova.plugins.notification.local.launchDetails = {id:%@, action:'%@'}", @"cordova.plugins.notification.local.launchDetails = {id:%@, action:'%@'}",
_launchDetails[0], _launchDetails[1]]; _launchDetails[0], _launchDetails[1]];
...@@ -68,7 +67,7 @@ ...@@ -68,7 +67,7 @@
* *
* @return [ Void ] * @return [ Void ]
*/ */
- (void) deviceready:(CDVInvokedUrlCommand*)command - (void) ready:(CDVInvokedUrlCommand*)command
{ {
deviceready = YES; deviceready = YES;
...@@ -104,60 +103,36 @@ ...@@ -104,60 +103,36 @@
}]; }];
} }
///** /**
// * Update a set of notifications. * Update notifications.
// * *
// * @param properties * @param [Array<Hash>] properties A list of key-value properties.
// * A dict of properties for each notification *
// */ * @return [ Void ]
//- (void) update:(CDVInvokedUrlCommand*)command */
//{ - (void) update:(CDVInvokedUrlCommand*)command
// NSArray* notifications = command.arguments; {
// NSArray* notifications = command.arguments;
// [self.commandDelegate runInBackground:^{
// if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"10.0")) { [self.commandDelegate runInBackground:^{
// for (NSDictionary* options in notifications) { for (NSDictionary* options in notifications) {
// NSNumber* id = [options objectForKey:@"id"]; NSNumber* id = [options objectForKey:@"id"];
// UNNotificationRequest* notification; UNNotificationRequest* notification;
//
// notification = [_center getNotificationWithId:id]; notification = [_center getNotificationWithId:id];
//
// if (!notification) if (!notification)
// continue; continue;
//
// // [self updateNotification:[notification copy] [self updateNotification:[notification copy]
// // withOptions:options]; withOptions:options];
// //
// // [self fireEvent:@"update" notification:notification]; [self fireEvent:@"update" notification:notification];
// // }
// // if (notifications.count > 1) {
// // [NSThread sleepForTimeInterval:0.01]; [self execCallback:command];
// // } }];
// } }
// } else {
// for (NSDictionary* options in notifications) {
// NSNumber* id = [options objectForKey:@"id"];
// UILocalNotification* notification;
//
// notification = [_app localNotificationWithId:id];
//
// if (!notification)
// continue;
//
// [self updateLocalNotification:[notification copy]
// withOptions:options];
//
// [self fireEvent:@"update" localnotification:notification];
//
// if (notifications.count > 1) {
// [NSThread sleepForTimeInterval:0.01];
// }
// }
// }
//
// [self execCallback:command];
// }];
//}
/** /**
* Clear notifications by id. * Clear notifications by id.
...@@ -242,58 +217,32 @@ ...@@ -242,58 +217,32 @@
} }
/** /**
* If a notification by ID is present. * Get type of notification.
*
* @param [ Number ]id The ID of the notification.
*
* @return [ Void ]
*/
- (void) isPresent:(CDVInvokedUrlCommand *)command
{
[self exist:command byType:NotifcationTypeAll];
}
/**
* If a notification by ID is scheduled.
*
* @param [ Number ]id The ID of the notification.
*
* @return [ Void ]
*/
- (void) isScheduled:(CDVInvokedUrlCommand*)command
{
[self exist:command byType:NotifcationTypeScheduled];
}
/**
* Check if a notification with an ID is triggered.
* *
* @param [ Number ]id The ID of the notification. * @param [ Int ] id The ID of the notification.
* *
* @return [ Void ] * @return [ Void ]
*/ */
- (void) isTriggered:(CDVInvokedUrlCommand*)command - (void) type:(CDVInvokedUrlCommand*)command
{
[self exist:command byType:NotifcationTypeTriggered];
}
/**
* Check if a notification exists by ID and type.
*
* @param [ APPNotificationType ] type The type of notifications to look for.
*
* @return [ Void ]
*/
- (void) exist:(CDVInvokedUrlCommand*)command
byType:(APPNotificationType)type;
{ {
[self.commandDelegate runInBackground:^{ [self.commandDelegate runInBackground:^{
NSNumber* id = [command argumentAtIndex:0]; NSNumber* id = [command argumentAtIndex:0];
BOOL exist = [_center notificationExist:id type:type]; NSString* type;
switch ([_center getTypeOfNotificationWithId:id]) {
case NotifcationTypeScheduled:
type = @"scheduled";
break;
case NotifcationTypeTriggered:
type = @"triggered";
break;
default:
type = @"unknown";
}
CDVPluginResult* result; CDVPluginResult* result;
result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK
messageAsBool:exist]; messageAsString:type];
[self.commandDelegate sendPluginResult:result [self.commandDelegate sendPluginResult:result
callbackId:command.callbackId]; callbackId:command.callbackId];
...@@ -361,24 +310,11 @@ ...@@ -361,24 +310,11 @@
*/ */
- (void) notification:(CDVInvokedUrlCommand*)command - (void) notification:(CDVInvokedUrlCommand*)command
{ {
[self notification:command byType:NotifcationTypeAll];
}
/**
* Notification by type and id.
*
* @param [ APPNotificationType ] type The type of notifications to look for.
*
* @return [ Void ]
*/
- (void) notification:(CDVInvokedUrlCommand*)command
byType:(APPNotificationType)type;
{
[self.commandDelegate runInBackground:^{ [self.commandDelegate runInBackground:^{
NSArray* ids = command.arguments; NSArray* ids = command.arguments;
NSArray* notifications; NSArray* notifications;
notifications = [_center getNotificationOptionsByType:type andId:ids]; notifications = [_center getNotificationOptionsById:ids];
CDVPluginResult* result; CDVPluginResult* result;
result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK
...@@ -426,7 +362,7 @@ ...@@ -426,7 +362,7 @@
} }
/** /**
* List of notifications by type and id. * List of notifications by type or id.
* *
* @param [ APPNotificationType ] type The type of notifications to look for. * @param [ APPNotificationType ] type The type of notifications to look for.
* *
...@@ -439,18 +375,11 @@ ...@@ -439,18 +375,11 @@
NSArray* ids = command.arguments; NSArray* ids = command.arguments;
NSArray* notifications; NSArray* notifications;
if (type == NotifcationTypeAll && ids.count == 0) { if (ids.count > 0) {
notifications = [_center getNotificationOptions];
}
else if (type == NotifcationTypeAll) {
notifications = [_center getNotificationOptionsById:ids]; notifications = [_center getNotificationOptionsById:ids];
} }
else if (ids.count == 0) {
notifications = [_center getNotificationOptionsByType:type];
}
else { else {
notifications = [_center getNotificationOptionsByType:type notifications = [_center getNotificationOptionsByType:type];
andId:ids];
} }
CDVPluginResult* result; CDVPluginResult* result;
...@@ -522,36 +451,46 @@ ...@@ -522,36 +451,46 @@
/** /**
* Schedule the local notification. * Schedule the local notification.
*
* @param [ APPNotificationContent* ] notification The notification to schedule.
*
* @return [ Void ]
*/ */
- (void) scheduleNotification:(APPNotificationContent*)notification - (void) scheduleNotification:(APPNotificationContent*)notification
{ {
__weak APPLocalNotification* weakSelf = self; __weak APPLocalNotification* weakSelf = self;
UNNotificationRequest* request = notification.request; UNNotificationRequest* request = notification.request;
NSString* event = [notification.request wasUpdated] ? @"update" : @"add";
[_center addNotificationCategory:notification.category]; [_center addNotificationCategory:notification.category];
[_center addNotificationRequest:request withCompletionHandler:^(NSError* e) { [_center addNotificationRequest:request withCompletionHandler:^(NSError* e) {
__strong APPLocalNotification* strongSelf = weakSelf; __strong APPLocalNotification* strongSelf = weakSelf;
[strongSelf fireEvent:@"add" notification:request]; [strongSelf fireEvent:event notification:request];
}]; }];
} }
///** /**
// * Update the local notification. * Update the local notification.
// */ *
//- (void) updateNotification:(UILocalNotification*)notification * @param [ UNNotificationRequest* ] notification The notification to update.
// withOptions:(NSDictionary*)newOptions * @param [ NSDictionary* ] options The options to update.
//{APPNotificationRequest* *
// NSMutableDictionary* options = [notification.userInfo mutableCopy]; * @return [ Void ]
// */
// [options addEntriesFromDictionary:newOptions]; - (void) updateNotification:(UNNotificationRequest*)notification
// [options setObject:[NSDate date] forKey:@"updatedAt"]; withOptions:(NSDictionary*)newOptions
// {
//// notification = [[UILocalNotification alloc] NSMutableDictionary* options = [notification.content.userInfo mutableCopy];
//// initWithOptions:options];
//// [options addEntriesFromDictionary:newOptions];
//// [self scheduleLocalNotification:notification]; [options setObject:[NSDate date] forKey:@"updatedAt"];
//}
APPNotificationContent*
newNotification = [[APPNotificationContent alloc] initWithOptions:options];
[self scheduleNotification:newNotification];
}
#pragma mark - #pragma mark -
#pragma mark UNUserNotificationCenterDelegate #pragma mark UNUserNotificationCenterDelegate
...@@ -563,8 +502,15 @@ ...@@ -563,8 +502,15 @@
willPresentNotification:(UNNotification *)notification willPresentNotification:(UNNotification *)notification
withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler
{ {
[self fireEvent:@"trigger" notification:notification.request]; if (![notification.request wasUpdated]) {
completionHandler(UNNotificationPresentationOptionBadge|UNNotificationPresentationOptionSound|UNNotificationPresentationOptionAlert); [self fireEvent:@"trigger" notification:notification.request];
}
if (notification.request.options.silent) {
completionHandler(UNNotificationPresentationOptionNone);
} else {
completionHandler(UNNotificationPresentationOptionBadge|UNNotificationPresentationOptionSound|UNNotificationPresentationOptionAlert);
}
} }
/** /**
......
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
@property (readonly, getter=subtitle) NSString* subtitle; @property (readonly, getter=subtitle) NSString* subtitle;
@property (readonly, getter=badge) NSNumber* badge; @property (readonly, getter=badge) NSNumber* badge;
@property (readonly, getter=text) NSString* text; @property (readonly, getter=text) NSString* text;
@property (readonly, getter=silent) BOOL silent;
@property (readonly, getter=sound) UNNotificationSound* sound; @property (readonly, getter=sound) UNNotificationSound* sound;
@property (readonly, getter=userInfo) NSDictionary* userInfo; @property (readonly, getter=userInfo) NSDictionary* userInfo;
@property (readonly, getter=actions) NSArray<UNNotificationAction *> * actions; @property (readonly, getter=actions) NSArray<UNNotificationAction *> * actions;
......
...@@ -61,18 +61,6 @@ ...@@ -61,18 +61,6 @@
#pragma mark Properties #pragma mark Properties
/** /**
* The type for the notification.
*
* @return [ NSString* ]
*/
- (NSString*) triggerType
{
NSString* type = [dict objectForKey:@"trigger"];
return type.length ? type : @"normal";
}
/**
* The ID for the notification. * The ID for the notification.
* *
* @return [ NSNumber* ] * @return [ NSNumber* ]
...@@ -127,6 +115,16 @@ ...@@ -127,6 +115,16 @@
} }
/** /**
* Show notification in foreground.
*
* @return [ BOOL ]
*/
- (BOOL) silent
{
return [[dict objectForKey:@"silent"] boolValue];
}
/**
* The badge number for the notification. * The badge number for the notification.
* *
* @return [ NSNumber* ] * @return [ NSNumber* ]
...@@ -280,12 +278,12 @@ ...@@ -280,12 +278,12 @@
*/ */
- (UNNotificationTrigger*) trigger - (UNNotificationTrigger*) trigger
{ {
NSString* type = [self triggerType]; NSString* type = [self valueForTriggerOption:@"type"];
if ([type isEqualToString:@"location"]) if ([type isEqualToString:@"location"])
return [self triggerWithRegion]; return [self triggerWithRegion];
if (![type isEqualToString:@"date"]) if (![type isEqualToString:@"calendar"])
NSLog(@"Unknown type: %@", type); NSLog(@"Unknown type: %@", type);
if ([self isRepeating]) if ([self isRepeating])
...@@ -315,6 +313,11 @@ ...@@ -315,6 +313,11 @@
#pragma mark - #pragma mark -
#pragma mark Private #pragma mark Private
- (id) valueForTriggerOption:(NSString*)key
{
return [[dict objectForKey:@"trigger"] objectForKey:key];
}
/** /**
* The date when to fire the notification. * The date when to fire the notification.
* *
...@@ -322,8 +325,7 @@ ...@@ -322,8 +325,7 @@
*/ */
- (NSDate*) triggerDate - (NSDate*) triggerDate
{ {
double timestamp = [[dict objectForKey:@"at"] double timestamp = [[self valueForTriggerOption:@"at"] doubleValue];
doubleValue];
return [NSDate dateWithTimeIntervalSince1970:timestamp]; return [NSDate dateWithTimeIntervalSince1970:timestamp];
} }
...@@ -335,7 +337,7 @@ ...@@ -335,7 +337,7 @@
*/ */
- (BOOL) isRepeating - (BOOL) isRepeating
{ {
id every = [dict objectForKey:@"every"]; id every = [self valueForTriggerOption:@"every"];
if ([every isKindOfClass:NSString.class]) if ([every isKindOfClass:NSString.class])
return ((NSString*) every).length > 0; return ((NSString*) every).length > 0;
...@@ -364,7 +366,7 @@ ...@@ -364,7 +366,7 @@
*/ */
- (UNNotificationTrigger*) repeatingTrigger - (UNNotificationTrigger*) repeatingTrigger
{ {
id every = [dict objectForKey:@"every"]; id every = [self valueForTriggerOption:@"every"];
if ([every isKindOfClass:NSString.class]) if ([every isKindOfClass:NSString.class])
return [self triggerWithDateMatchingComponents]; return [self triggerWithDateMatchingComponents];
...@@ -382,7 +384,7 @@ ...@@ -382,7 +384,7 @@
*/ */
- (UNTimeIntervalNotificationTrigger*) triggerWithTimeInterval - (UNTimeIntervalNotificationTrigger*) triggerWithTimeInterval
{ {
long interval = [[dict objectForKey:@"every"] longValue]; long interval = [[self valueForTriggerOption:@"every"] longValue];
if (interval < 60) { if (interval < 60) {
NSLog(@"time interval must be at least 60 if repeating"); NSLog(@"time interval must be at least 60 if repeating");
...@@ -438,8 +440,8 @@ ...@@ -438,8 +440,8 @@
*/ */
- (UNLocationNotificationTrigger*) triggerWithRegion - (UNLocationNotificationTrigger*) triggerWithRegion
{ {
NSArray* center = [dict objectForKey:@"center"]; NSArray* center = [self valueForTriggerOption:@"center"];
double radius = [[dict objectForKey:@"radius"] doubleValue]; double radius = [[self valueForTriggerOption:@"radius"] doubleValue];
CLLocationCoordinate2D coord = CLLocationCoordinate2D coord =
CLLocationCoordinate2DMake([center[0] doubleValue], [center[1] doubleValue]); CLLocationCoordinate2DMake([center[0] doubleValue], [center[1] doubleValue]);
...@@ -449,8 +451,8 @@ ...@@ -449,8 +451,8 @@
radius:radius radius:radius
identifier:self.identifier]; identifier:self.identifier];
region.notifyOnEntry = [[dict objectForKey:@"notifyOnEntry"] boolValue]; region.notifyOnEntry = [[self valueForTriggerOption:@"notifyOnEntry"] boolValue];
region.notifyOnExit = [[dict objectForKey:@"notifyOnExit"] boolValue]; region.notifyOnExit = [[self valueForTriggerOption:@"notifyOnExit"] boolValue];
return [UNLocationNotificationTrigger triggerWithRegion:region repeats:YES]; return [UNLocationNotificationTrigger triggerWithRegion:region repeats:YES];
} }
...@@ -472,7 +474,7 @@ ...@@ -472,7 +474,7 @@
*/ */
- (NSCalendarUnit) repeatInterval - (NSCalendarUnit) repeatInterval
{ {
NSString* interval = [dict objectForKey:@"every"]; NSString* interval = [self valueForTriggerOption:@"every"];
NSCalendarUnit units = NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay|NSCalendarUnitHour|NSCalendarUnitMinute|NSCalendarUnitSecond; NSCalendarUnit units = NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay|NSCalendarUnitHour|NSCalendarUnitMinute|NSCalendarUnitSecond;
if ([interval isEqualToString:@"minute"]) if ([interval isEqualToString:@"minute"])
...@@ -504,7 +506,7 @@ ...@@ -504,7 +506,7 @@
- (NSDateComponents*) customDateComponents - (NSDateComponents*) customDateComponents
{ {
NSDateComponents* date = [[NSDateComponents alloc] init]; NSDateComponents* date = [[NSDateComponents alloc] init];
NSDictionary* every = [dict objectForKey:@"every"]; NSDictionary* every = [self valueForTriggerOption:@"every"];
for (NSString* key in every) { for (NSString* key in every) {
long value = [[every valueForKey:key] longValue]; long value = [[every valueForKey:key] longValue];
......
...@@ -27,6 +27,8 @@ ...@@ -27,6 +27,8 @@
// The options provided by the plug-in // The options provided by the plug-in
- (APPNotificationOptions*) options; - (APPNotificationOptions*) options;
// If the notification was updated
- (BOOL) wasUpdated;
// Encode the user info dict to JSON // Encode the user info dict to JSON
- (NSString*) encodeToJSON; - (NSString*) encodeToJSON;
......
...@@ -65,6 +65,16 @@ static char optionsKey; ...@@ -65,6 +65,16 @@ static char optionsKey;
} }
/** /**
* If the notification was updated.
*
* @return [ BOOL ]
*/
- (BOOL) wasUpdated
{
return [self.content userInfo][@"updatedAt"] != NULL;
}
/**
* Encode the user info dict to JSON. * Encode the user info dict to JSON.
*/ */
- (NSString*) encodeToJSON - (NSString*) encodeToJSON
......
...@@ -28,7 +28,8 @@ extern NSString * const kAPPGeneralCategory; ...@@ -28,7 +28,8 @@ extern NSString * const kAPPGeneralCategory;
typedef NS_ENUM(NSUInteger, APPNotificationType) { typedef NS_ENUM(NSUInteger, APPNotificationType) {
NotifcationTypeAll = 0, NotifcationTypeAll = 0,
NotifcationTypeScheduled = 1, NotifcationTypeScheduled = 1,
NotifcationTypeTriggered = 2 NotifcationTypeTriggered = 2,
NotifcationTypeUnknown = 3
}; };
#define APPNotificationType_DEFINED #define APPNotificationType_DEFINED
...@@ -44,15 +45,10 @@ typedef NS_ENUM(NSUInteger, APPNotificationType) { ...@@ -44,15 +45,10 @@ typedef NS_ENUM(NSUInteger, APPNotificationType) {
// List of all notification IDs from given type // List of all notification IDs from given type
- (NSArray*) getNotificationIdsByType:(APPNotificationType)type; - (NSArray*) getNotificationIdsByType:(APPNotificationType)type;
// Find out if notification with ID exists
- (BOOL) notificationExist:(NSNumber*)id;
// Find out if notification with ID and type exists
- (BOOL) notificationExist:(NSNumber*)id type:(APPNotificationType)type;
// Find notification by ID // Find notification by ID
- (UNNotificationRequest*) getNotificationWithId:(NSNumber*)id; - (UNNotificationRequest*) getNotificationWithId:(NSNumber*)id;
// Find notification by ID and type // Find notification type by ID
- (UNNotificationRequest*) getNotificationWithId:(NSNumber*)id andType:(APPNotificationType)type; - (APPNotificationType) getTypeOfNotificationWithId:(NSNumber*)id;
// Property list from all local notifications // Property list from all local notifications
- (NSArray*) getNotificationOptions; - (NSArray*) getNotificationOptions;
...@@ -60,8 +56,6 @@ typedef NS_ENUM(NSUInteger, APPNotificationType) { ...@@ -60,8 +56,6 @@ typedef NS_ENUM(NSUInteger, APPNotificationType) {
- (NSArray*) getNotificationOptionsById:(NSArray*)ids; - (NSArray*) getNotificationOptionsById:(NSArray*)ids;
// Property list from all local notifications with type constraint // Property list from all local notifications with type constraint
- (NSArray*) getNotificationOptionsByType:(APPNotificationType)type; - (NSArray*) getNotificationOptionsByType:(APPNotificationType)type;
// Property list from given local notifications with type constraint
- (NSArray*) getNotificationOptionsByType:(APPNotificationType)type andId:(NSArray*)ids;
// Clear specified notfication // Clear specified notfication
- (void) clearNotification:(UNNotificationRequest*)notification; - (void) clearNotification:(UNNotificationRequest*)notification;
......
...@@ -185,29 +185,6 @@ NSString * const kAPPGeneralCategory = @"GENERAL"; ...@@ -185,29 +185,6 @@ NSString * const kAPPGeneralCategory = @"GENERAL";
return ids; return ids;
} }
/*
* If the notification with the specified ID does exists.
*
* @param id
* Notification ID
*/
- (BOOL) notificationExist:(NSNumber*)id
{
return [self getNotificationWithId:id] != NULL;
}
/* If the notification with specified ID and type exists.
*
* @param id
* Notification ID
* @param type
* Notification life cycle type
*/
- (BOOL) notificationExist:(NSNumber*)id type:(APPNotificationType)type
{
return [self getNotificationWithId:id andType:type] != NULL;
}
/** /**
* Find notification by ID. * Find notification by ID.
* *
...@@ -216,34 +193,39 @@ NSString * const kAPPGeneralCategory = @"GENERAL"; ...@@ -216,34 +193,39 @@ NSString * const kAPPGeneralCategory = @"GENERAL";
*/ */
- (UNNotificationRequest*) getNotificationWithId:(NSNumber*)id - (UNNotificationRequest*) getNotificationWithId:(NSNumber*)id
{ {
return [self getNotificationWithId:id andType:NotifcationTypeAll]; NSArray* notifications = [self getNotifications];
}
/*
* Find notification by ID and type.
*
* @param id
* Notification ID
* @param type
* Notification life cycle type
*/
- (UNNotificationRequest*) getNotificationWithId:(NSNumber*)id andType:(APPNotificationType)type
{
NSArray* notifications = [self getNotificationsByType:type];
for (UNNotificationRequest* notification in notifications) for (UNNotificationRequest* notification in notifications)
{ {
NSString* fid = [NSString stringWithFormat:@"%@", notification.options.id]; NSString* fid = [NSString stringWithFormat:@"%@", notification.options.id];
if ([fid isEqualToString:[id stringValue]]) { if ([fid isEqualToString:[id stringValue]]) {
return notification; return notification;
} }
} }
return NULL; return NULL;
} }
/** /**
* Find notification type by ID
*/
- (APPNotificationType) getTypeOfNotificationWithId:(NSNumber*)id
{
NSArray* ids = [self getNotificationIdsByType:NotifcationTypeTriggered];
if ([ids containsObject:id])
return NotifcationTypeTriggered;
ids = [self getNotificationIdsByType:NotifcationTypeScheduled];
if ([ids containsObject:id])
return NotifcationTypeScheduled;
return NotifcationTypeUnknown;
}
/**
* List of properties from all notifications. * List of properties from all notifications.
*/ */
- (NSArray*) getNotificationOptions - (NSArray*) getNotificationOptions
...@@ -278,29 +260,16 @@ NSString * const kAPPGeneralCategory = @"GENERAL"; ...@@ -278,29 +260,16 @@ NSString * const kAPPGeneralCategory = @"GENERAL";
*/ */
- (NSArray*) getNotificationOptionsById:(NSArray*)ids - (NSArray*) getNotificationOptionsById:(NSArray*)ids
{ {
return [self getNotificationOptionsByType:NotifcationTypeAll andId:ids]; NSArray* notifications = [self getNotifications];
}
/**
* List of properties from given local notifications.
*
* @param type
* Notification life cycle type
* @param ids
* Notification IDs
*/
- (NSArray*) getNotificationOptionsByType:(APPNotificationType)type andId:(NSArray*)ids
{
NSArray* notifications = [self getNotificationsByType:type];
NSMutableArray* options = [[NSMutableArray alloc] init]; NSMutableArray* options = [[NSMutableArray alloc] init];
for (UNNotificationRequest* notification in notifications) for (UNNotificationRequest* notification in notifications)
{ {
if ([ids containsObject:notification.options.id]) { if ([ids containsObject:notification.options.id]) {
[options addObject:notification.options.userInfo]; [options addObject:notification.options.userInfo];
} }
} }
return options; return options;
} }
......
...@@ -84,41 +84,38 @@ exports.schedule = function (msgs, callback, scope, args) { ...@@ -84,41 +84,38 @@ exports.schedule = function (msgs, callback, scope, args) {
} }
}; };
// /** /**
// * Update existing notifications specified by IDs in options. * Schedule notifications.
// * *
// * @param {Object} notifications * @param [ Array ] notifications The notifications to schedule.
// * The notification properties to update * @param [ Function ] callback The function to be exec as the callback.
// * @param {Function} callback * @param [ Object ] scope The callback function's scope.
// * A function to be called after the notification has been updated * @param [ Object ] args Optional flags how to schedule.
// * @param {Object?} scope *
// * The scope for the callback function * @return [ Void ]
// * @param {Object?} args */
// * skipPermission:true schedules the notifications immediatly without exports.update = function (msgs, callback, scope, args) {
// * registering or checking for permission var fn = function(granted) {
// */
// exports.update = function (msgs, callback, scope, args) { if (!granted) return;
// var fn = function(granted) {
var notifications = Array.isArray(msgs) ? msgs : [msgs];
// if (!granted) return;
for (var i = 0; i < notifications.length; i++) {
// var notifications = Array.isArray(msgs) ? msgs : [msgs]; var notification = notifications[i];
// for (var i = 0; i < notifications.length; i++) { this.convertProperties(notification);
// var notification = notifications[i]; }
// this.convertProperties(notification); this.exec('update', notifications, callback, scope);
// } };
// this.exec('update', notifications, callback, scope); if (args && args.skipPermission) {
// }; fn.call(this, true);
} else {
// if (args && args.skipPermission) { this.requestPermission(fn, this);
// fn.call(this, true); }
// } else { };
// this.registerPermission(fn, this);
// }
// };
/** /**
* Clear the specified notifications by id. * Clear the specified notifications by id.
......
...@@ -29,14 +29,14 @@ exports._defaults = { ...@@ -29,14 +29,14 @@ exports._defaults = {
text: '', text: '',
title: '', title: '',
sound: 'res://platform_default', sound: 'res://platform_default',
trigger: 'date',
badge: undefined, badge: undefined,
data: undefined, data: undefined,
every: undefined, icon: undefined,
at: undefined, trigger: { type: 'calendar' },
actions: [], actions: [],
actionGroupId: undefined, actionGroupId: undefined,
attachments: [] attachments: [],
progressBar: false
}; };
// Listener // Listener
...@@ -59,12 +59,6 @@ exports.applyPlatformSpecificOptions = function () { ...@@ -59,12 +59,6 @@ exports.applyPlatformSpecificOptions = function () {
defaults.led = undefined; defaults.led = undefined;
defaults.color = undefined; defaults.color = undefined;
break; break;
case 'iOS':
defaults.region = undefined;
defaults.radius = undefined;
defaults.notifyOnEntry = true;
defaults.notifyOnExit = false;
break;
} }
}; };
...@@ -78,7 +72,6 @@ exports.applyPlatformSpecificOptions = function () { ...@@ -78,7 +72,6 @@ exports.applyPlatformSpecificOptions = function () {
exports.mergeWithDefaults = function (options) { exports.mergeWithDefaults = function (options) {
var defaults = this.getDefaults(); var defaults = this.getDefaults();
options.at = this.getValueFor(options, 'at', 'firstAt', 'date');
options.text = this.getValueFor(options, 'text', 'message'); options.text = this.getValueFor(options, 'text', 'message');
options.data = this.getValueFor(options, 'data', 'json'); options.data = this.getValueFor(options, 'data', 'json');
...@@ -90,10 +83,6 @@ exports.mergeWithDefaults = function (options) { ...@@ -90,10 +83,6 @@ exports.mergeWithDefaults = function (options) {
options.autoClear = false; options.autoClear = false;
} }
if (options.at === undefined || options.at === null) {
options.at = new Date();
}
for (var key in defaults) { for (var key in defaults) {
if (options[key] === null || options[key] === undefined) { if (options[key] === null || options[key] === undefined) {
if (options.hasOwnProperty(key) && ['data','sound'].indexOf(key) > -1) { if (options.hasOwnProperty(key) && ['data','sound'].indexOf(key) > -1) {
...@@ -106,7 +95,7 @@ exports.mergeWithDefaults = function (options) { ...@@ -106,7 +95,7 @@ exports.mergeWithDefaults = function (options) {
for (key in options) { for (key in options) {
if (!defaults.hasOwnProperty(key)) { if (!defaults.hasOwnProperty(key)) {
delete options[key]; // delete options[key];
console.warn('Unknown property: ' + key); console.warn('Unknown property: ' + key);
} }
} }
...@@ -149,21 +138,13 @@ exports.convertProperties = function (options) { ...@@ -149,21 +138,13 @@ exports.convertProperties = function (options) {
} }
} }
if (options.at) {
if (typeof options.at == 'object') {
options.at = options.at.getTime();
}
options.at = Math.round(options.at/1000);
}
if (typeof options.data == 'object') { if (typeof options.data == 'object') {
options.data = JSON.stringify(options.data); options.data = JSON.stringify(options.data);
} }
if (options.actions) { this.convertTrigger(options);
this.convertActions(options); this.convertActions(options);
} this.convertProgressBar(options);
return options; return options;
}; };
...@@ -199,6 +180,82 @@ exports.convertActions = function (options) { ...@@ -199,6 +180,82 @@ exports.convertActions = function (options) {
options.category = (options.category || 'DEFAULT_GROUP').toString(); options.category = (options.category || 'DEFAULT_GROUP').toString();
options.actions = actions; options.actions = actions;
return options;
};
/**
* Convert the passed values for the trigger to their required type.
*
* @param [ Map ] options Set of custom values.
*
* @return [ Map ] Interaction object with trigger spec.
*/
exports.convertTrigger = function (options) {
var cfg = options.trigger,
isDate = Date.prototype.isPrototypeOf(cfg),
isObject = Object.prototype.isPrototypeOf(cfg),
trigger = !isDate && isObject ? cfg : {},
date = this.getValueFor(trigger, 'at', 'firstAt', 'date');
if (!trigger.type) {
trigger.type = trigger.center ? 'location' : 'calendar';
}
var isCal = trigger.type == 'calendar';
if (isCal && !date) {
date = this.getValueFor(options, 'at', 'firstAt', 'date') || new Date();
}
if (isCal) {
date = typeof date == 'object' ? date.getTime() : date;
trigger.at = Math.round(date / 1000);
}
if (isCal && !trigger.every && options.every) {
trigger.every = options.every;
}
if (!trigger.count && device.platform == 'windows') {
trigger.count = trigger.every ? 5 : 1;
}
if (trigger.every && device.platform == 'windows') {
trigger.every = trigger.every.toString();
}
if (!isCal) {
trigger.notifyOnEntry = !!trigger.notifyOnEntry;
trigger.notifyOnExit = trigger.notifyOnExit === true;
trigger.radius = trigger.radius || 5;
}
delete options.every;
delete options.at;
delete options.firstAt;
delete options.date;
options.trigger = trigger;
return options;
};
/**
* Convert the passed values for the progressBar to their required type.
*
* @param [ Map ] options Set of custom values.
*
* @return [ Map ] Interaction object with trigger spec.
*/
exports.convertProgressBar = function (options) {
var cfg = options.progressBar;
if (typeof cfg === 'boolean') {
options.progressBar = { enabled: cfg };
}
return options;
}; };
/** /**
...@@ -306,13 +363,13 @@ exports.exec = function (action, args, callback, scope) { ...@@ -306,13 +363,13 @@ exports.exec = function (action, args, callback, scope) {
channel.deviceready.subscribe(function () { channel.deviceready.subscribe(function () {
// Device is ready now, the listeners are registered // Device is ready now, the listeners are registered
// and all queued events can be executed. // and all queued events can be executed.
exports.exec('deviceready'); exports.exec('ready');
}); });
// Called before 'deviceready' event // Called before 'deviceready' event
channel.onCordovaReady.subscribe(function () { channel.onCordovaReady.subscribe(function () {
// Set launchDetails object // Set launchDetails object
exports.exec('launchDetails'); exports.exec('launch');
// Device plugin is ready now // Device plugin is ready now
channel.onCordovaInfoReady.subscribe(function () { channel.onCordovaInfoReady.subscribe(function () {
// Merge platform specifics into defaults // Merge platform specifics into defaults
......
...@@ -58,22 +58,19 @@ exports.schedule = function (notifications, callback, scope, args) { ...@@ -58,22 +58,19 @@ exports.schedule = function (notifications, callback, scope, args) {
this.core.schedule(notifications, callback, scope, args); this.core.schedule(notifications, callback, scope, args);
}; };
// /** /**
// * Update existing notifications specified by IDs in options. * Update notifications.
// * *
// * @param {Object} notifications * @param [ Array ] notifications The notifications to schedule.
// * The notification properties to update * @param [ Function ] callback The function to be exec as the callback.
// * @param {Function} callback * @param [ Object ] scope The callback function's scope.
// * A function to be called after the notification has been updated * @param [ Object ] args Optional flags how to schedule.
// * @param {Object?} scope *
// * The scope for the callback function * @return [ Void ]
// * @param {Object?} args */
// * skipPermission:true schedules the notifications immediatly without exports.update = function (notifications, callback, scope, args) {
// * registering or checking for permission this.core.update(notifications, callback, scope, args);
// */ };
// exports.update = function (notifications, callback, scope, args) {
// this.core.update(notifications, callback, scope, args);
// };
/** /**
* Clear the specified notifications by id. * Clear the specified notifications by id.
......
...@@ -51,32 +51,34 @@ var app = { ...@@ -51,32 +51,34 @@ var app = {
}, },
// Initialize plugin // Initialize plugin
pluginInitialize: function() { pluginInitialize: function() {
document.getElementById('granted').onclick = app.hasPermission; document.getElementById('granted').onclick = app.hasPermission;
document.getElementById('request').onclick = app.askPermission; document.getElementById('request').onclick = app.askPermission;
document.getElementById('sched_single').onclick = app.scheduleSingle; document.getElementById('sched_single').onclick = app.scheduleSingle;
document.getElementById('sched_multi').onclick = app.scheduleMultiple; document.getElementById('sched_multi').onclick = app.scheduleMultiple;
document.getElementById('sched_delayed').onclick = app.scheduleDelayed; document.getElementById('sched_delayed').onclick = app.scheduleDelayed;
document.getElementById('sched_interval').onclick = app.scheduleInterval; document.getElementById('sched_interval').onclick = app.scheduleInterval;
document.getElementById('sched_actions').onclick = app.scheduleActions; document.getElementById('sched_actions').onclick = app.scheduleActions;
document.getElementById('clear_single').onclick = app.clearSingle; document.getElementById('update_text').onclick = app.update;
document.getElementById('clear_multi').onclick = app.clearMulti; document.getElementById('update_interval').onclick = app.updateInterval;
document.getElementById('clear_all').onclick = app.clearAll; document.getElementById('clear_single').onclick = app.clearSingle;
document.getElementById('cancel_single').onclick = app.cancelSingle; document.getElementById('clear_multi').onclick = app.clearMulti;
document.getElementById('cancel_multi').onclick = app.cancelMulti; document.getElementById('clear_all').onclick = app.clearAll;
document.getElementById('cancel_all').onclick = app.cancelAll; document.getElementById('cancel_single').onclick = app.cancelSingle;
document.getElementById('present?').onclick = app.isPresent; document.getElementById('cancel_multi').onclick = app.cancelMulti;
document.getElementById('scheduled?').onclick = app.isScheduled; document.getElementById('cancel_all').onclick = app.cancelAll;
document.getElementById('triggered?').onclick = app.isTriggered; document.getElementById('present?').onclick = app.isPresent;
document.getElementById('type').onclick = app.type; document.getElementById('scheduled?').onclick = app.isScheduled;
document.getElementById('ids').onclick = app.ids; document.getElementById('triggered?').onclick = app.isTriggered;
document.getElementById('scheduled_ids').onclick = app.scheduledIds; document.getElementById('type').onclick = app.type;
document.getElementById('triggered_ids').onclick = app.triggeredIds; document.getElementById('ids').onclick = app.ids;
document.getElementById('scheduled_nots').onclick = app.scheduledNots; document.getElementById('scheduled_ids').onclick = app.scheduledIds;
document.getElementById('triggered_nots').onclick = app.triggeredNots; document.getElementById('triggered_ids').onclick = app.triggeredIds;
document.getElementById('notification').onclick = app.notification; document.getElementById('scheduled_nots').onclick = app.scheduledNots;
document.getElementById('multiple_nots').onclick = app.multipleNots; document.getElementById('triggered_nots').onclick = app.triggeredNots;
document.getElementById('notifications').onclick = app.notifications; document.getElementById('notification').onclick = app.notification;
document.getElementById('defaults').onclick = app.setDefaultTitle; document.getElementById('multiple_nots').onclick = app.multipleNots;
document.getElementById('notifications').onclick = app.notifications;
document.getElementById('defaults').onclick = app.setDefaultTitle;
var details = cordova.plugins.notification.local.launchDetails; var details = cordova.plugins.notification.local.launchDetails;
...@@ -100,7 +102,8 @@ var app = { ...@@ -100,7 +102,8 @@ var app = {
scheduleSingle: function () { scheduleSingle: function () {
cordova.plugins.notification.local.schedule({ cordova.plugins.notification.local.schedule({
id: 1, id: 1,
text: 'Test Message 1', title: 'Test Message',
text: 'My first notification',
icon: 'http://3.bp.blogspot.com/-Qdsy-GpempY/UU_BN9LTqSI/AAAAAAAAAMA/LkwLW2yNBJ4/s1600/supersu.png', icon: 'http://3.bp.blogspot.com/-Qdsy-GpempY/UU_BN9LTqSI/AAAAAAAAAMA/LkwLW2yNBJ4/s1600/supersu.png',
smallIcon: 'res://cordova', smallIcon: 'res://cordova',
sound: null, sound: null,
...@@ -131,25 +134,25 @@ var app = { ...@@ -131,25 +134,25 @@ var app = {
var now = new Date().getTime(), var now = new Date().getTime(),
_5_sec_from_now = new Date(now + 5 * 1000); _5_sec_from_now = new Date(now + 5 * 1000);
var sound = device.platform == 'Android' ? 'file://sound.mp3' : 'file://beep.caf'; var sound = device.platform != 'iOS' ? 'file://sound.mp3' : 'file://beep.caf';
cordova.plugins.notification.local.schedule({ cordova.plugins.notification.local.schedule({
id: 1, id: 1,
title: 'Scheduled with delay', title: 'Scheduled with delay',
text: 'Test Message 1', text: 'Test Message 1',
at: _5_sec_from_now, trigger: _5_sec_from_now,
sound: sound, sound: sound,
badge: 12 badge: 12
}); });
}, },
// Schedule a repeating notification // Schedule a repeating notification
scheduleInterval: function () { scheduleInterval: function () {
var sound = device.platform == 'Android' ? 'file://sound.mp3' : 'file://beep.caf'; var sound = device.platform != 'iOS' ? 'file://sound.mp3' : 'file://beep.caf';
cordova.plugins.notification.local.schedule({ cordova.plugins.notification.local.schedule({
id: 1, id: 1,
text: 'Scheduled every minute', text: 'Scheduled every minute',
every: 'minute', trigger: { every: 'minute' },
sound: sound, sound: sound,
icon: 'res://icon', icon: 'res://icon',
smallIcon: 'res://ic_popup_sync' smallIcon: 'res://ic_popup_sync'
...@@ -160,6 +163,7 @@ var app = { ...@@ -160,6 +163,7 @@ var app = {
cordova.plugins.notification.local.schedule({ cordova.plugins.notification.local.schedule({
title: 'Local Notification Plugin', title: 'Local Notification Plugin',
text: 'Made by appPlant from Leipzig/Germany', text: 'Made by appPlant from Leipzig/Germany',
icon: 'file://img/avatar.jpg?crop=cirlce',
attachments: ['file://img/logo.png'], attachments: ['file://img/logo.png'],
actionGroupId: 'like-dislike', actionGroupId: 'like-dislike',
actions: [{ actions: [{
...@@ -181,6 +185,27 @@ var app = { ...@@ -181,6 +185,27 @@ var app = {
}] }]
}); });
}, },
// Update notification text
update: function () {
cordova.plugins.notification.local.update({
id: 1,
title: 'Updated Message 1',
text: 'New icon :)',
icon: 'res://icon',
color: 'FF0000',
attachments: ['file://img/logo.png'],
data: { updated: true }
});
},
// Update trigger interval
updateInterval: function () {
cordova.plugins.notification.local.update({
id: 1,
title: 'Updated Message 1',
text: 'Triggeres every minute',
every: 'minute'
});
},
// Clear a single notification // Clear a single notification
clearSingle: function () { clearSingle: function () {
cordova.plugins.notification.local.clear(1, app.ids); cordova.plugins.notification.local.clear(1, app.ids);
...@@ -298,7 +323,7 @@ var app = { ...@@ -298,7 +323,7 @@ var app = {
}); });
cordova.plugins.notification.local.on('update', function (obj) { cordova.plugins.notification.local.on('update', function (obj) {
console.log('update', arguments); console.log('update', arguments);
// showToast('updated: ' + obj.id); showToast('updated: ' + obj.id);
}); });
cordova.plugins.notification.local.on('trigger', function (obj) { cordova.plugins.notification.local.on('trigger', function (obj) {
console.log('trigger', arguments); console.log('trigger', arguments);
...@@ -371,7 +396,7 @@ showWinDialog = function (text) { ...@@ -371,7 +396,7 @@ showWinDialog = function (text) {
}; };
if (window.hasOwnProperty('Windows')) { if (window.hasOwnProperty('Windows')) {
alert = function (msg) { new Windows.UI.Popups.MessageDialog(msg).showAsync(); }; alert = showWinDialog;
} }
app.initialize(); app.initialize();
...@@ -84,41 +84,38 @@ exports.schedule = function (msgs, callback, scope, args) { ...@@ -84,41 +84,38 @@ exports.schedule = function (msgs, callback, scope, args) {
} }
}; };
// /** /**
// * Update existing notifications specified by IDs in options. * Schedule notifications.
// * *
// * @param {Object} notifications * @param [ Array ] notifications The notifications to schedule.
// * The notification properties to update * @param [ Function ] callback The function to be exec as the callback.
// * @param {Function} callback * @param [ Object ] scope The callback function's scope.
// * A function to be called after the notification has been updated * @param [ Object ] args Optional flags how to schedule.
// * @param {Object?} scope *
// * The scope for the callback function * @return [ Void ]
// * @param {Object?} args */
// * skipPermission:true schedules the notifications immediatly without exports.update = function (msgs, callback, scope, args) {
// * registering or checking for permission var fn = function(granted) {
// */
// exports.update = function (msgs, callback, scope, args) { if (!granted) return;
// var fn = function(granted) {
var notifications = Array.isArray(msgs) ? msgs : [msgs];
// if (!granted) return;
for (var i = 0; i < notifications.length; i++) {
// var notifications = Array.isArray(msgs) ? msgs : [msgs]; var notification = notifications[i];
// for (var i = 0; i < notifications.length; i++) { this.convertProperties(notification);
// var notification = notifications[i]; }
// this.convertProperties(notification); this.exec('update', notifications, callback, scope);
// } };
// this.exec('update', notifications, callback, scope); if (args && args.skipPermission) {
// }; fn.call(this, true);
} else {
// if (args && args.skipPermission) { this.requestPermission(fn, this);
// fn.call(this, true); }
// } else { };
// this.registerPermission(fn, this);
// }
// };
/** /**
* Clear the specified notifications by id. * Clear the specified notifications by id.
......
...@@ -29,14 +29,14 @@ exports._defaults = { ...@@ -29,14 +29,14 @@ exports._defaults = {
text: '', text: '',
title: '', title: '',
sound: 'res://platform_default', sound: 'res://platform_default',
trigger: 'date',
badge: undefined, badge: undefined,
data: undefined, data: undefined,
every: undefined, icon: undefined,
at: undefined, trigger: { type: 'calendar' },
actions: [], actions: [],
actionGroupId: undefined, actionGroupId: undefined,
attachments: [] attachments: [],
progressBar: false
}; };
// Listener // Listener
...@@ -59,12 +59,6 @@ exports.applyPlatformSpecificOptions = function () { ...@@ -59,12 +59,6 @@ exports.applyPlatformSpecificOptions = function () {
defaults.led = undefined; defaults.led = undefined;
defaults.color = undefined; defaults.color = undefined;
break; break;
case 'iOS':
defaults.region = undefined;
defaults.radius = undefined;
defaults.notifyOnEntry = true;
defaults.notifyOnExit = false;
break;
} }
}; };
...@@ -78,7 +72,6 @@ exports.applyPlatformSpecificOptions = function () { ...@@ -78,7 +72,6 @@ exports.applyPlatformSpecificOptions = function () {
exports.mergeWithDefaults = function (options) { exports.mergeWithDefaults = function (options) {
var defaults = this.getDefaults(); var defaults = this.getDefaults();
options.at = this.getValueFor(options, 'at', 'firstAt', 'date');
options.text = this.getValueFor(options, 'text', 'message'); options.text = this.getValueFor(options, 'text', 'message');
options.data = this.getValueFor(options, 'data', 'json'); options.data = this.getValueFor(options, 'data', 'json');
...@@ -90,10 +83,6 @@ exports.mergeWithDefaults = function (options) { ...@@ -90,10 +83,6 @@ exports.mergeWithDefaults = function (options) {
options.autoClear = false; options.autoClear = false;
} }
if (options.at === undefined || options.at === null) {
options.at = new Date();
}
for (var key in defaults) { for (var key in defaults) {
if (options[key] === null || options[key] === undefined) { if (options[key] === null || options[key] === undefined) {
if (options.hasOwnProperty(key) && ['data','sound'].indexOf(key) > -1) { if (options.hasOwnProperty(key) && ['data','sound'].indexOf(key) > -1) {
...@@ -106,7 +95,7 @@ exports.mergeWithDefaults = function (options) { ...@@ -106,7 +95,7 @@ exports.mergeWithDefaults = function (options) {
for (key in options) { for (key in options) {
if (!defaults.hasOwnProperty(key)) { if (!defaults.hasOwnProperty(key)) {
delete options[key]; // delete options[key];
console.warn('Unknown property: ' + key); console.warn('Unknown property: ' + key);
} }
} }
...@@ -149,21 +138,13 @@ exports.convertProperties = function (options) { ...@@ -149,21 +138,13 @@ exports.convertProperties = function (options) {
} }
} }
if (options.at) {
if (typeof options.at == 'object') {
options.at = options.at.getTime();
}
options.at = Math.round(options.at/1000);
}
if (typeof options.data == 'object') { if (typeof options.data == 'object') {
options.data = JSON.stringify(options.data); options.data = JSON.stringify(options.data);
} }
if (options.actions) { this.convertTrigger(options);
this.convertActions(options); this.convertActions(options);
} this.convertProgressBar(options);
return options; return options;
}; };
...@@ -199,6 +180,82 @@ exports.convertActions = function (options) { ...@@ -199,6 +180,82 @@ exports.convertActions = function (options) {
options.category = (options.category || 'DEFAULT_GROUP').toString(); options.category = (options.category || 'DEFAULT_GROUP').toString();
options.actions = actions; options.actions = actions;
return options;
};
/**
* Convert the passed values for the trigger to their required type.
*
* @param [ Map ] options Set of custom values.
*
* @return [ Map ] Interaction object with trigger spec.
*/
exports.convertTrigger = function (options) {
var cfg = options.trigger,
isDate = Date.prototype.isPrototypeOf(cfg),
isObject = Object.prototype.isPrototypeOf(cfg),
trigger = !isDate && isObject ? cfg : {},
date = this.getValueFor(trigger, 'at', 'firstAt', 'date');
if (!trigger.type) {
trigger.type = trigger.center ? 'location' : 'calendar';
}
var isCal = trigger.type == 'calendar';
if (isCal && !date) {
date = this.getValueFor(options, 'at', 'firstAt', 'date') || new Date();
}
if (isCal) {
date = typeof date == 'object' ? date.getTime() : date;
trigger.at = Math.round(date / 1000);
}
if (isCal && !trigger.every && options.every) {
trigger.every = options.every;
}
if (!trigger.count && device.platform == 'windows') {
trigger.count = trigger.every ? 5 : 1;
}
if (trigger.every && device.platform == 'windows') {
trigger.every = trigger.every.toString();
}
if (!isCal) {
trigger.notifyOnEntry = !!trigger.notifyOnEntry;
trigger.notifyOnExit = trigger.notifyOnExit === true;
trigger.radius = trigger.radius || 5;
}
delete options.every;
delete options.at;
delete options.firstAt;
delete options.date;
options.trigger = trigger;
return options;
};
/**
* Convert the passed values for the progressBar to their required type.
*
* @param [ Map ] options Set of custom values.
*
* @return [ Map ] Interaction object with trigger spec.
*/
exports.convertProgressBar = function (options) {
var cfg = options.progressBar;
if (typeof cfg === 'boolean') {
options.progressBar = { enabled: cfg };
}
return options;
}; };
/** /**
...@@ -306,13 +363,13 @@ exports.exec = function (action, args, callback, scope) { ...@@ -306,13 +363,13 @@ exports.exec = function (action, args, callback, scope) {
channel.deviceready.subscribe(function () { channel.deviceready.subscribe(function () {
// Device is ready now, the listeners are registered // Device is ready now, the listeners are registered
// and all queued events can be executed. // and all queued events can be executed.
exports.exec('deviceready'); exports.exec('ready');
}); });
// Called before 'deviceready' event // Called before 'deviceready' event
channel.onCordovaReady.subscribe(function () { channel.onCordovaReady.subscribe(function () {
// Set launchDetails object // Set launchDetails object
exports.exec('launchDetails'); exports.exec('launch');
// Device plugin is ready now // Device plugin is ready now
channel.onCordovaInfoReady.subscribe(function () { channel.onCordovaInfoReady.subscribe(function () {
// Merge platform specifics into defaults // Merge platform specifics into defaults
......
...@@ -58,22 +58,19 @@ exports.schedule = function (notifications, callback, scope, args) { ...@@ -58,22 +58,19 @@ exports.schedule = function (notifications, callback, scope, args) {
this.core.schedule(notifications, callback, scope, args); this.core.schedule(notifications, callback, scope, args);
}; };
// /** /**
// * Update existing notifications specified by IDs in options. * Update notifications.
// * *
// * @param {Object} notifications * @param [ Array ] notifications The notifications to schedule.
// * The notification properties to update * @param [ Function ] callback The function to be exec as the callback.
// * @param {Function} callback * @param [ Object ] scope The callback function's scope.
// * A function to be called after the notification has been updated * @param [ Object ] args Optional flags how to schedule.
// * @param {Object?} scope *
// * The scope for the callback function * @return [ Void ]
// * @param {Object?} args */
// * skipPermission:true schedules the notifications immediatly without exports.update = function (notifications, callback, scope, args) {
// * registering or checking for permission this.core.update(notifications, callback, scope, args);
// */ };
// exports.update = function (notifications, callback, scope, args) {
// this.core.update(notifications, callback, scope, args);
// };
/** /**
* Clear the specified notifications by id. * Clear the specified notifications by id.
......
<?xml version="1.0" encoding="UTF-8"?>
<!--
IIS configuration sections.
For schema documentation, see
%IIS_BIN%\config\schema\IIS_schema.xml.
Please make a backup of this file before making any changes to it.
NOTE: The following environment variables are available to be used
within this file and are understood by the IIS Express.
%IIS_USER_HOME% - The IIS Express home directory for the user
%IIS_SITES_HOME% - The default home directory for sites
%IIS_BIN% - The location of the IIS Express binaries
%SYSTEMDRIVE% - The drive letter of %IIS_BIN%
-->
<configuration>
<!--
The <configSections> section controls the registration of sections.
Section is the basic unit of deployment, locking, searching and
containment for configuration settings.
Every section belongs to one section group.
A section group is a container of logically-related sections.
Sections cannot be nested.
Section groups may be nested.
<section
name="" [Required, Collection Key] [XML name of the section]
allowDefinition="Everywhere" [MachineOnly|MachineToApplication|AppHostOnly|Everywhere] [Level where it can be set]
overrideModeDefault="Allow" [Allow|Deny] [Default delegation mode]
allowLocation="true" [true|false] [Allowed in location tags]
/>
The recommended way to unlock sections is by using a location tag:
<location path="Default Web Site" overrideMode="Allow">
<system.webServer>
<asp />
</system.webServer>
</location>
-->
<configSections>
<sectionGroup name="system.applicationHost">
<section name="applicationPools" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
<section name="configHistory" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
<section name="customMetadata" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
<section name="listenerAdapters" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
<section name="log" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
<section name="serviceAutoStartProviders" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
<section name="sites" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
<section name="webLimits" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
</sectionGroup>
<sectionGroup name="system.webServer">
<section name="asp" overrideModeDefault="Deny" />
<section name="caching" overrideModeDefault="Allow" />
<section name="cgi" overrideModeDefault="Deny" />
<section name="defaultDocument" overrideModeDefault="Allow" />
<section name="directoryBrowse" overrideModeDefault="Allow" />
<section name="fastCgi" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
<section name="globalModules" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
<section name="handlers" overrideModeDefault="Deny" />
<section name="httpCompression" overrideModeDefault="Allow" />
<section name="httpErrors" overrideModeDefault="Allow" />
<section name="httpLogging" overrideModeDefault="Deny" />
<section name="httpProtocol" overrideModeDefault="Allow" />
<section name="httpRedirect" overrideModeDefault="Allow" />
<section name="httpTracing" overrideModeDefault="Deny" />
<section name="isapiFilters" allowDefinition="MachineToApplication" overrideModeDefault="Deny" />
<section name="modules" allowDefinition="MachineToApplication" overrideModeDefault="Deny" />
<section name="applicationInitialization" allowDefinition="MachineToApplication" overrideModeDefault="Allow" />
<section name="odbcLogging" overrideModeDefault="Deny" />
<sectionGroup name="security">
<section name="access" overrideModeDefault="Deny" />
<section name="applicationDependencies" overrideModeDefault="Deny" />
<sectionGroup name="authentication">
<section name="anonymousAuthentication" overrideModeDefault="Deny" />
<section name="basicAuthentication" overrideModeDefault="Deny" />
<section name="clientCertificateMappingAuthentication" overrideModeDefault="Deny" />
<section name="digestAuthentication" overrideModeDefault="Deny" />
<section name="iisClientCertificateMappingAuthentication" overrideModeDefault="Deny" />
<section name="windowsAuthentication" overrideModeDefault="Deny" />
</sectionGroup>
<section name="authorization" overrideModeDefault="Allow" />
<section name="ipSecurity" overrideModeDefault="Deny" />
<section name="dynamicIpSecurity" overrideModeDefault="Deny" />
<section name="isapiCgiRestriction" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
<section name="requestFiltering" overrideModeDefault="Allow" />
</sectionGroup>
<section name="serverRuntime" overrideModeDefault="Deny" />
<section name="serverSideInclude" overrideModeDefault="Deny" />
<section name="staticContent" overrideModeDefault="Allow" />
<sectionGroup name="tracing">
<section name="traceFailedRequests" overrideModeDefault="Allow" />
<section name="traceProviderDefinitions" overrideModeDefault="Deny" />
</sectionGroup>
<section name="urlCompression" overrideModeDefault="Allow" />
<section name="validation" overrideModeDefault="Allow" />
<sectionGroup name="webdav">
<section name="globalSettings" overrideModeDefault="Deny" />
<section name="authoring" overrideModeDefault="Deny" />
<section name="authoringRules" overrideModeDefault="Deny" />
</sectionGroup>
<sectionGroup name="rewrite">
<section name="allowedServerVariables" overrideModeDefault="Deny" />
<section name="rules" overrideModeDefault="Allow" />
<section name="outboundRules" overrideModeDefault="Allow" />
<section name="globalRules" overrideModeDefault="Deny" allowDefinition="AppHostOnly" />
<section name="providers" overrideModeDefault="Allow" />
<section name="rewriteMaps" overrideModeDefault="Allow" />
</sectionGroup>
<section name="webSocket" overrideModeDefault="Deny" />
</sectionGroup>
</configSections>
<configProtectedData>
<providers>
<add name="IISWASOnlyRsaProvider" type="" description="Uses RsaCryptoServiceProvider to encrypt and decrypt" keyContainerName="iisWasKey" cspProviderName="" useMachineContainer="true" useOAEP="false" />
<add name="AesProvider" type="Microsoft.ApplicationHost.AesProtectedConfigurationProvider" description="Uses an AES session key to encrypt and decrypt" keyContainerName="iisConfigurationKey" cspProviderName="" useOAEP="false" useMachineContainer="true" sessionKey="AQIAAA5mAAAApAAAKmFQvWHDEETRz8l2bjZlRxIkwcqTFaCUnCLljn3Q1OkesrhEO9YyLyx4bUhsj1/DyShAv7OAFFhXlrlomaornnk5PLeyO4lIXxaiT33yOFUUgxDx4GSaygkqghVV0tO5yQ/XguUBp2juMfZyztnsNa4pLcz7ZNZQ6p4yn9hxwNs=" />
<add name="IISWASOnlyAesProvider" type="Microsoft.ApplicationHost.AesProtectedConfigurationProvider" description="Uses an AES session key to encrypt and decrypt" keyContainerName="iisWasKey" cspProviderName="" useOAEP="false" useMachineContainer="true" sessionKey="AQIAAA5mAAAApAAA4WoiRJ8KHwzAG8AgejPxEOO4/2Vhkolbwo/8gZeNdUDSD36m55hWv4uC9tr/MlKdnwRLL0NhT50Gccyftqz5xTZ0dg5FtvQhTw/he1NwexTKbV+I4Zrd+sZUqHZTsr7JiEr6OHGXL70qoISW5G2m9U8wKT3caPiDPNj2aAaYPLo=" />
</providers>
</configProtectedData>
<system.applicationHost>
<applicationPools>
<add name="Clr4IntegratedAppPool" managedRuntimeVersion="v4.0" managedPipelineMode="Integrated" CLRConfigFile="%IIS_USER_HOME%\config\aspnet.config" autoStart="true" />
<add name="Clr4ClassicAppPool" managedRuntimeVersion="v4.0" managedPipelineMode="Classic" CLRConfigFile="%IIS_USER_HOME%\config\aspnet.config" autoStart="true" />
<add name="Clr2IntegratedAppPool" managedRuntimeVersion="v2.0" managedPipelineMode="Integrated" CLRConfigFile="%IIS_USER_HOME%\config\aspnet.config" autoStart="true" />
<add name="Clr2ClassicAppPool" managedRuntimeVersion="v2.0" managedPipelineMode="Classic" CLRConfigFile="%IIS_USER_HOME%\config\aspnet.config" autoStart="true" />
<add name="UnmanagedClassicAppPool" managedRuntimeVersion="" managedPipelineMode="Classic" autoStart="true" />
<applicationPoolDefaults managedRuntimeLoader="v4.0">
<processModel />
</applicationPoolDefaults>
</applicationPools>
<!--
The <listenerAdapters> section defines the protocols with which the
Windows Process Activation Service (WAS) binds.
-->
<listenerAdapters>
<add name="http" />
</listenerAdapters>
<sites>
<site name="WebSite1" id="1" serverAutoStart="true">
<application path="/">
<virtualDirectory path="/" physicalPath="%IIS_SITES_HOME%\WebSite1" />
</application>
<bindings>
<binding protocol="http" bindingInformation=":8080:localhost" />
</bindings>
</site>
<siteDefaults>
<logFile logFormat="W3C" directory="%IIS_USER_HOME%\Logs" />
<traceFailedRequestsLogging directory="%IIS_USER_HOME%\TraceLogFiles" enabled="true" maxLogFileSizeKB="1024" />
</siteDefaults>
<applicationDefaults applicationPool="Clr4IntegratedAppPool" />
<virtualDirectoryDefaults allowSubDirConfig="true" />
</sites>
<webLimits />
</system.applicationHost>
<system.webServer>
<serverRuntime />
<asp scriptErrorSentToBrowser="true">
<cache diskTemplateCacheDirectory="%TEMP%\iisexpress\ASP Compiled Templates" />
<limits />
</asp>
<caching enabled="true" enableKernelCache="true">
</caching>
<cgi />
<defaultDocument enabled="true">
<files>
<add value="Default.htm" />
<add value="Default.asp" />
<add value="index.htm" />
<add value="index.html" />
<add value="iisstart.htm" />
<add value="default.aspx" />
</files>
</defaultDocument>
<directoryBrowse enabled="false" />
<fastCgi />
<!--
The <globalModules> section defines all native-code modules.
To enable a module, specify it in the <modules> section.
-->
<globalModules>
<add name="HttpLoggingModule" image="%IIS_BIN%\loghttp.dll" />
<add name="UriCacheModule" image="%IIS_BIN%\cachuri.dll" />
<!-- <add name="FileCacheModule" image="%IIS_BIN%\cachfile.dll" /> -->
<add name="TokenCacheModule" image="%IIS_BIN%\cachtokn.dll" />
<!-- <add name="HttpCacheModule" image="%IIS_BIN%\cachhttp.dll" /> -->
<add name="DynamicCompressionModule" image="%IIS_BIN%\compdyn.dll" />
<add name="StaticCompressionModule" image="%IIS_BIN%\compstat.dll" />
<add name="DefaultDocumentModule" image="%IIS_BIN%\defdoc.dll" />
<add name="DirectoryListingModule" image="%IIS_BIN%\dirlist.dll" />
<add name="ProtocolSupportModule" image="%IIS_BIN%\protsup.dll" />
<add name="HttpRedirectionModule" image="%IIS_BIN%\redirect.dll" />
<add name="ServerSideIncludeModule" image="%IIS_BIN%\iis_ssi.dll" />
<add name="StaticFileModule" image="%IIS_BIN%\static.dll" />
<add name="AnonymousAuthenticationModule" image="%IIS_BIN%\authanon.dll" />
<add name="CertificateMappingAuthenticationModule" image="%IIS_BIN%\authcert.dll" />
<add name="UrlAuthorizationModule" image="%IIS_BIN%\urlauthz.dll" />
<add name="BasicAuthenticationModule" image="%IIS_BIN%\authbas.dll" />
<add name="WindowsAuthenticationModule" image="%IIS_BIN%\authsspi.dll" />
<!-- <add name="DigestAuthenticationModule" image="%IIS_BIN%\authmd5.dll" /> -->
<add name="IISCertificateMappingAuthenticationModule" image="%IIS_BIN%\authmap.dll" />
<add name="IpRestrictionModule" image="%IIS_BIN%\iprestr.dll" />
<add name="DynamicIpRestrictionModule" image="%IIS_BIN%\diprestr.dll" />
<add name="RequestFilteringModule" image="%IIS_BIN%\modrqflt.dll" />
<add name="CustomLoggingModule" image="%IIS_BIN%\logcust.dll" />
<add name="CustomErrorModule" image="%IIS_BIN%\custerr.dll" />
<!-- <add name="TracingModule" image="%IIS_BIN%\iisetw.dll" /> -->
<add name="FailedRequestsTracingModule" image="%IIS_BIN%\iisfreb.dll" />
<add name="RequestMonitorModule" image="%IIS_BIN%\iisreqs.dll" />
<add name="IsapiModule" image="%IIS_BIN%\isapi.dll" />
<add name="IsapiFilterModule" image="%IIS_BIN%\filter.dll" />
<add name="CgiModule" image="%IIS_BIN%\cgi.dll" />
<add name="FastCgiModule" image="%IIS_BIN%\iisfcgi.dll" />
<!-- <add name="WebDAVModule" image="%IIS_BIN%\webdav.dll" /> -->
<add name="RewriteModule" image="%IIS_BIN%\rewrite.dll" />
<add name="ConfigurationValidationModule" image="%IIS_BIN%\validcfg.dll" />
<add name="WebSocketModule" image="%IIS_BIN%\iiswsock.dll" />
<add name="WebMatrixSupportModule" image="%IIS_BIN%\webmatrixsup.dll" />
<add name="ManagedEngine" image="%windir%\Microsoft.NET\Framework\v2.0.50727\webengine.dll" preCondition="integratedMode,runtimeVersionv2.0,bitness32" />
<add name="ManagedEngine64" image="%windir%\Microsoft.NET\Framework64\v2.0.50727\webengine.dll" preCondition="integratedMode,runtimeVersionv2.0,bitness64" />
<add name="ManagedEngineV4.0_32bit" image="%windir%\Microsoft.NET\Framework\v4.0.30319\webengine4.dll" preCondition="integratedMode,runtimeVersionv4.0,bitness32" />
<add name="ManagedEngineV4.0_64bit" image="%windir%\Microsoft.NET\Framework64\v4.0.30319\webengine4.dll" preCondition="integratedMode,runtimeVersionv4.0,bitness64" />
<add name="ApplicationInitializationModule" image="%IIS_BIN%\warmup.dll" />
</globalModules>
<httpCompression directory="%TEMP%\iisexpress\IIS Temporary Compressed Files">
<scheme name="gzip" dll="%IIS_BIN%\gzip.dll" />
<dynamicTypes>
<add mimeType="text/*" enabled="true" />
<add mimeType="message/*" enabled="true" />
<add mimeType="application/javascript" enabled="true" />
<add mimeType="application/atom+xml" enabled="true" />
<add mimeType="application/xaml+xml" enabled="true" />
<add mimeType="*/*" enabled="false" />
</dynamicTypes>
<staticTypes>
<add mimeType="text/*" enabled="true" />
<add mimeType="message/*" enabled="true" />
<add mimeType="image/svg+xml" enabled="true" />
<add mimeType="application/javascript" enabled="true" />
<add mimeType="application/atom+xml" enabled="true" />
<add mimeType="application/xaml+xml" enabled="true" />
<add mimeType="*/*" enabled="false" />
</staticTypes>
</httpCompression>
<httpErrors lockAttributes="allowAbsolutePathsWhenDelegated,defaultPath">
<error statusCode="401" prefixLanguageFilePath="%IIS_BIN%\custerr" path="401.htm" />
<error statusCode="403" prefixLanguageFilePath="%IIS_BIN%\custerr" path="403.htm" />
<error statusCode="404" prefixLanguageFilePath="%IIS_BIN%\custerr" path="404.htm" />
<error statusCode="405" prefixLanguageFilePath="%IIS_BIN%\custerr" path="405.htm" />
<error statusCode="406" prefixLanguageFilePath="%IIS_BIN%\custerr" path="406.htm" />
<error statusCode="412" prefixLanguageFilePath="%IIS_BIN%\custerr" path="412.htm" />
<error statusCode="500" prefixLanguageFilePath="%IIS_BIN%\custerr" path="500.htm" />
<error statusCode="501" prefixLanguageFilePath="%IIS_BIN%\custerr" path="501.htm" />
<error statusCode="502" prefixLanguageFilePath="%IIS_BIN%\custerr" path="502.htm" />
</httpErrors>
<httpLogging dontLog="false" />
<httpProtocol>
<customHeaders>
<clear />
<add name="X-Powered-By" value="ASP.NET" />
</customHeaders>
<redirectHeaders>
<clear />
</redirectHeaders>
</httpProtocol>
<httpRedirect enabled="false" />
<httpTracing>
</httpTracing>
<isapiFilters>
<filter name="ASP.Net_2.0.50727-64" path="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_filter.dll" enableCache="true" preCondition="bitness64,runtimeVersionv2.0" />
<filter name="ASP.Net_2.0.50727.0" path="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_filter.dll" enableCache="true" preCondition="bitness32,runtimeVersionv2.0" />
<filter name="ASP.Net_2.0_for_v1.1" path="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_filter.dll" enableCache="true" preCondition="runtimeVersionv1.1" />
<filter name="ASP.Net_4.0_32bit" path="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_filter.dll" enableCache="true" preCondition="bitness32,runtimeVersionv4.0" />
<filter name="ASP.Net_4.0_64bit" path="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_filter.dll" enableCache="true" preCondition="bitness64,runtimeVersionv4.0" />
</isapiFilters>
<odbcLogging />
<security>
<access sslFlags="None" />
<applicationDependencies>
<application name="Active Server Pages" groupId="ASP" />
</applicationDependencies>
<authentication>
<anonymousAuthentication enabled="true" userName="" />
<basicAuthentication enabled="false" />
<clientCertificateMappingAuthentication enabled="false" />
<digestAuthentication enabled="false" />
<iisClientCertificateMappingAuthentication enabled="false">
</iisClientCertificateMappingAuthentication>
<windowsAuthentication enabled="false">
<providers>
<add value="Negotiate" />
<add value="NTLM" />
</providers>
</windowsAuthentication>
</authentication>
<authorization>
<add accessType="Allow" users="*" />
</authorization>
<ipSecurity allowUnlisted="true" />
<isapiCgiRestriction notListedIsapisAllowed="true" notListedCgisAllowed="true">
<add path="%windir%\Microsoft.NET\Framework64\v4.0.30319\webengine4.dll" allowed="true" groupId="ASP.NET_v4.0" description="ASP.NET_v4.0" />
<add path="%windir%\Microsoft.NET\Framework\v4.0.30319\webengine4.dll" allowed="true" groupId="ASP.NET_v4.0" description="ASP.NET_v4.0" />
<add path="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" allowed="true" groupId="ASP.NET v2.0.50727" description="ASP.NET v2.0.50727" />
<add path="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" allowed="true" groupId="ASP.NET v2.0.50727" description="ASP.NET v2.0.50727" />
</isapiCgiRestriction>
<requestFiltering>
<fileExtensions allowUnlisted="true" applyToWebDAV="true">
<add fileExtension=".asa" allowed="false" />
<add fileExtension=".asax" allowed="false" />
<add fileExtension=".ascx" allowed="false" />
<add fileExtension=".master" allowed="false" />
<add fileExtension=".skin" allowed="false" />
<add fileExtension=".browser" allowed="false" />
<add fileExtension=".sitemap" allowed="false" />
<add fileExtension=".config" allowed="false" />
<add fileExtension=".cs" allowed="false" />
<add fileExtension=".csproj" allowed="false" />
<add fileExtension=".vb" allowed="false" />
<add fileExtension=".vbproj" allowed="false" />
<add fileExtension=".webinfo" allowed="false" />
<add fileExtension=".licx" allowed="false" />
<add fileExtension=".resx" allowed="false" />
<add fileExtension=".resources" allowed="false" />
<add fileExtension=".mdb" allowed="false" />
<add fileExtension=".vjsproj" allowed="false" />
<add fileExtension=".java" allowed="false" />
<add fileExtension=".jsl" allowed="false" />
<add fileExtension=".ldb" allowed="false" />
<add fileExtension=".dsdgm" allowed="false" />
<add fileExtension=".ssdgm" allowed="false" />
<add fileExtension=".lsad" allowed="false" />
<add fileExtension=".ssmap" allowed="false" />
<add fileExtension=".cd" allowed="false" />
<add fileExtension=".dsprototype" allowed="false" />
<add fileExtension=".lsaprototype" allowed="false" />
<add fileExtension=".sdm" allowed="false" />
<add fileExtension=".sdmDocument" allowed="false" />
<add fileExtension=".mdf" allowed="false" />
<add fileExtension=".ldf" allowed="false" />
<add fileExtension=".ad" allowed="false" />
<add fileExtension=".dd" allowed="false" />
<add fileExtension=".ldd" allowed="false" />
<add fileExtension=".sd" allowed="false" />
<add fileExtension=".adprototype" allowed="false" />
<add fileExtension=".lddprototype" allowed="false" />
<add fileExtension=".exclude" allowed="false" />
<add fileExtension=".refresh" allowed="false" />
<add fileExtension=".compiled" allowed="false" />
<add fileExtension=".msgx" allowed="false" />
<add fileExtension=".vsdisco" allowed="false" />
<add fileExtension=".rules" allowed="false" />
</fileExtensions>
<verbs allowUnlisted="true" applyToWebDAV="true" />
<hiddenSegments applyToWebDAV="true">
<add segment="web.config" />
<add segment="bin" />
<add segment="App_code" />
<add segment="App_GlobalResources" />
<add segment="App_LocalResources" />
<add segment="App_WebReferences" />
<add segment="App_Data" />
<add segment="App_Browsers" />
</hiddenSegments>
</requestFiltering>
</security>
<serverSideInclude ssiExecDisable="false" />
<staticContent lockAttributes="isDocFooterFileName">
<mimeMap fileExtension=".323" mimeType="text/h323" />
<mimeMap fileExtension=".3g2" mimeType="video/3gpp2" />
<mimeMap fileExtension=".3gp2" mimeType="video/3gpp2" />
<mimeMap fileExtension=".3gp" mimeType="video/3gpp" />
<mimeMap fileExtension=".3gpp" mimeType="video/3gpp" />
<mimeMap fileExtension=".aac" mimeType="audio/aac" />
<mimeMap fileExtension=".aaf" mimeType="application/octet-stream" />
<mimeMap fileExtension=".aca" mimeType="application/octet-stream" />
<mimeMap fileExtension=".accdb" mimeType="application/msaccess" />
<mimeMap fileExtension=".accde" mimeType="application/msaccess" />
<mimeMap fileExtension=".accdt" mimeType="application/msaccess" />
<mimeMap fileExtension=".acx" mimeType="application/internet-property-stream" />
<mimeMap fileExtension=".adt" mimeType="audio/vnd.dlna.adts" />
<mimeMap fileExtension=".adts" mimeType="audio/vnd.dlna.adts" />
<mimeMap fileExtension=".afm" mimeType="application/octet-stream" />
<mimeMap fileExtension=".ai" mimeType="application/postscript" />
<mimeMap fileExtension=".aif" mimeType="audio/x-aiff" />
<mimeMap fileExtension=".aifc" mimeType="audio/aiff" />
<mimeMap fileExtension=".aiff" mimeType="audio/aiff" />
<mimeMap fileExtension=".appcache" mimeType="text/cache-manifest" />
<mimeMap fileExtension=".application" mimeType="application/x-ms-application" />
<mimeMap fileExtension=".art" mimeType="image/x-jg" />
<mimeMap fileExtension=".asd" mimeType="application/octet-stream" />
<mimeMap fileExtension=".asf" mimeType="video/x-ms-asf" />
<mimeMap fileExtension=".asi" mimeType="application/octet-stream" />
<mimeMap fileExtension=".asm" mimeType="text/plain" />
<mimeMap fileExtension=".asr" mimeType="video/x-ms-asf" />
<mimeMap fileExtension=".asx" mimeType="video/x-ms-asf" />
<mimeMap fileExtension=".atom" mimeType="application/atom+xml" />
<mimeMap fileExtension=".au" mimeType="audio/basic" />
<mimeMap fileExtension=".avi" mimeType="video/msvideo" />
<mimeMap fileExtension=".axs" mimeType="application/olescript" />
<mimeMap fileExtension=".bas" mimeType="text/plain" />
<mimeMap fileExtension=".bcpio" mimeType="application/x-bcpio" />
<mimeMap fileExtension=".bin" mimeType="application/octet-stream" />
<mimeMap fileExtension=".bmp" mimeType="image/bmp" />
<mimeMap fileExtension=".c" mimeType="text/plain" />
<mimeMap fileExtension=".cab" mimeType="application/vnd.ms-cab-compressed" />
<mimeMap fileExtension=".calx" mimeType="application/vnd.ms-office.calx" />
<mimeMap fileExtension=".cat" mimeType="application/vnd.ms-pki.seccat" />
<mimeMap fileExtension=".cdf" mimeType="application/x-cdf" />
<mimeMap fileExtension=".chm" mimeType="application/octet-stream" />
<mimeMap fileExtension=".class" mimeType="application/x-java-applet" />
<mimeMap fileExtension=".clp" mimeType="application/x-msclip" />
<mimeMap fileExtension=".cmx" mimeType="image/x-cmx" />
<mimeMap fileExtension=".cnf" mimeType="text/plain" />
<mimeMap fileExtension=".cod" mimeType="image/cis-cod" />
<mimeMap fileExtension=".cpio" mimeType="application/x-cpio" />
<mimeMap fileExtension=".cpp" mimeType="text/plain" />
<mimeMap fileExtension=".crd" mimeType="application/x-mscardfile" />
<mimeMap fileExtension=".crl" mimeType="application/pkix-crl" />
<mimeMap fileExtension=".crt" mimeType="application/x-x509-ca-cert" />
<mimeMap fileExtension=".csh" mimeType="application/x-csh" />
<mimeMap fileExtension=".css" mimeType="text/css" />
<mimeMap fileExtension=".csv" mimeType="application/octet-stream" />
<mimeMap fileExtension=".cur" mimeType="application/octet-stream" />
<mimeMap fileExtension=".dcr" mimeType="application/x-director" />
<mimeMap fileExtension=".deploy" mimeType="application/octet-stream" />
<mimeMap fileExtension=".der" mimeType="application/x-x509-ca-cert" />
<mimeMap fileExtension=".dib" mimeType="image/bmp" />
<mimeMap fileExtension=".dir" mimeType="application/x-director" />
<mimeMap fileExtension=".disco" mimeType="text/xml" />
<mimeMap fileExtension=".dll" mimeType="application/x-msdownload" />
<mimeMap fileExtension=".dll.config" mimeType="text/xml" />
<mimeMap fileExtension=".dlm" mimeType="text/dlm" />
<mimeMap fileExtension=".doc" mimeType="application/msword" />
<mimeMap fileExtension=".docm" mimeType="application/vnd.ms-word.document.macroEnabled.12" />
<mimeMap fileExtension=".docx" mimeType="application/vnd.openxmlformats-officedocument.wordprocessingml.document" />
<mimeMap fileExtension=".dot" mimeType="application/msword" />
<mimeMap fileExtension=".dotm" mimeType="application/vnd.ms-word.template.macroEnabled.12" />
<mimeMap fileExtension=".dotx" mimeType="application/vnd.openxmlformats-officedocument.wordprocessingml.template" />
<mimeMap fileExtension=".dsp" mimeType="application/octet-stream" />
<mimeMap fileExtension=".dtd" mimeType="text/xml" />
<mimeMap fileExtension=".dvi" mimeType="application/x-dvi" />
<mimeMap fileExtension=".dvr-ms" mimeType="video/x-ms-dvr" />
<mimeMap fileExtension=".dwf" mimeType="drawing/x-dwf" />
<mimeMap fileExtension=".dwp" mimeType="application/octet-stream" />
<mimeMap fileExtension=".dxr" mimeType="application/x-director" />
<mimeMap fileExtension=".eml" mimeType="message/rfc822" />
<mimeMap fileExtension=".emz" mimeType="application/octet-stream" />
<mimeMap fileExtension=".eot" mimeType="application/vnd.ms-fontobject" />
<mimeMap fileExtension=".eps" mimeType="application/postscript" />
<mimeMap fileExtension=".etx" mimeType="text/x-setext" />
<mimeMap fileExtension=".evy" mimeType="application/envoy" />
<mimeMap fileExtension=".exe" mimeType="application/octet-stream" />
<mimeMap fileExtension=".exe.config" mimeType="text/xml" />
<mimeMap fileExtension=".fdf" mimeType="application/vnd.fdf" />
<mimeMap fileExtension=".fif" mimeType="application/fractals" />
<mimeMap fileExtension=".fla" mimeType="application/octet-stream" />
<mimeMap fileExtension=".flr" mimeType="x-world/x-vrml" />
<mimeMap fileExtension=".flv" mimeType="video/x-flv" />
<mimeMap fileExtension=".gif" mimeType="image/gif" />
<mimeMap fileExtension=".gtar" mimeType="application/x-gtar" />
<mimeMap fileExtension=".gz" mimeType="application/x-gzip" />
<mimeMap fileExtension=".h" mimeType="text/plain" />
<mimeMap fileExtension=".hdf" mimeType="application/x-hdf" />
<mimeMap fileExtension=".hdml" mimeType="text/x-hdml" />
<mimeMap fileExtension=".hhc" mimeType="application/x-oleobject" />
<mimeMap fileExtension=".hhk" mimeType="application/octet-stream" />
<mimeMap fileExtension=".hhp" mimeType="application/octet-stream" />
<mimeMap fileExtension=".hlp" mimeType="application/winhlp" />
<mimeMap fileExtension=".hqx" mimeType="application/mac-binhex40" />
<mimeMap fileExtension=".hta" mimeType="application/hta" />
<mimeMap fileExtension=".htc" mimeType="text/x-component" />
<mimeMap fileExtension=".htm" mimeType="text/html" />
<mimeMap fileExtension=".html" mimeType="text/html" />
<mimeMap fileExtension=".htt" mimeType="text/webviewhtml" />
<mimeMap fileExtension=".hxt" mimeType="text/html" />
<mimeMap fileExtension=".ico" mimeType="image/x-icon" />
<mimeMap fileExtension=".ics" mimeType="text/calendar" />
<mimeMap fileExtension=".ief" mimeType="image/ief" />
<mimeMap fileExtension=".iii" mimeType="application/x-iphone" />
<mimeMap fileExtension=".inf" mimeType="application/octet-stream" />
<mimeMap fileExtension=".ins" mimeType="application/x-internet-signup" />
<mimeMap fileExtension=".isp" mimeType="application/x-internet-signup" />
<mimeMap fileExtension=".IVF" mimeType="video/x-ivf" />
<mimeMap fileExtension=".jar" mimeType="application/java-archive" />
<mimeMap fileExtension=".java" mimeType="application/octet-stream" />
<mimeMap fileExtension=".jck" mimeType="application/liquidmotion" />
<mimeMap fileExtension=".jcz" mimeType="application/liquidmotion" />
<mimeMap fileExtension=".jfif" mimeType="image/pjpeg" />
<mimeMap fileExtension=".jpb" mimeType="application/octet-stream" />
<mimeMap fileExtension=".jpe" mimeType="image/jpeg" />
<mimeMap fileExtension=".jpeg" mimeType="image/jpeg" />
<mimeMap fileExtension=".jpg" mimeType="image/jpeg" />
<mimeMap fileExtension=".js" mimeType="application/javascript" />
<mimeMap fileExtension=".json" mimeType="application/json" />
<mimeMap fileExtension=".jsonld" mimeType="application/ld+json" />
<mimeMap fileExtension=".jsx" mimeType="text/jscript" />
<mimeMap fileExtension=".latex" mimeType="application/x-latex" />
<mimeMap fileExtension=".less" mimeType="text/css" />
<mimeMap fileExtension=".lit" mimeType="application/x-ms-reader" />
<mimeMap fileExtension=".lpk" mimeType="application/octet-stream" />
<mimeMap fileExtension=".lsf" mimeType="video/x-la-asf" />
<mimeMap fileExtension=".lsx" mimeType="video/x-la-asf" />
<mimeMap fileExtension=".lzh" mimeType="application/octet-stream" />
<mimeMap fileExtension=".m13" mimeType="application/x-msmediaview" />
<mimeMap fileExtension=".m14" mimeType="application/x-msmediaview" />
<mimeMap fileExtension=".m1v" mimeType="video/mpeg" />
<mimeMap fileExtension=".m2ts" mimeType="video/vnd.dlna.mpeg-tts" />
<mimeMap fileExtension=".m3u" mimeType="audio/x-mpegurl" />
<mimeMap fileExtension=".m4a" mimeType="audio/mp4" />
<mimeMap fileExtension=".m4v" mimeType="video/mp4" />
<mimeMap fileExtension=".man" mimeType="application/x-troff-man" />
<mimeMap fileExtension=".manifest" mimeType="application/x-ms-manifest" />
<mimeMap fileExtension=".map" mimeType="text/plain" />
<mimeMap fileExtension=".mdb" mimeType="application/x-msaccess" />
<mimeMap fileExtension=".mdp" mimeType="application/octet-stream" />
<mimeMap fileExtension=".me" mimeType="application/x-troff-me" />
<mimeMap fileExtension=".mht" mimeType="message/rfc822" />
<mimeMap fileExtension=".mhtml" mimeType="message/rfc822" />
<mimeMap fileExtension=".mid" mimeType="audio/mid" />
<mimeMap fileExtension=".midi" mimeType="audio/mid" />
<mimeMap fileExtension=".mix" mimeType="application/octet-stream" />
<mimeMap fileExtension=".mmf" mimeType="application/x-smaf" />
<mimeMap fileExtension=".mno" mimeType="text/xml" />
<mimeMap fileExtension=".mny" mimeType="application/x-msmoney" />
<mimeMap fileExtension=".mov" mimeType="video/quicktime" />
<mimeMap fileExtension=".movie" mimeType="video/x-sgi-movie" />
<mimeMap fileExtension=".mp2" mimeType="video/mpeg" />
<mimeMap fileExtension=".mp3" mimeType="audio/mpeg" />
<mimeMap fileExtension=".mp4" mimeType="video/mp4" />
<mimeMap fileExtension=".mp4v" mimeType="video/mp4" />
<mimeMap fileExtension=".mpa" mimeType="video/mpeg" />
<mimeMap fileExtension=".mpe" mimeType="video/mpeg" />
<mimeMap fileExtension=".mpeg" mimeType="video/mpeg" />
<mimeMap fileExtension=".mpg" mimeType="video/mpeg" />
<mimeMap fileExtension=".mpp" mimeType="application/vnd.ms-project" />
<mimeMap fileExtension=".mpv2" mimeType="video/mpeg" />
<mimeMap fileExtension=".ms" mimeType="application/x-troff-ms" />
<mimeMap fileExtension=".msi" mimeType="application/octet-stream" />
<mimeMap fileExtension=".mso" mimeType="application/octet-stream" />
<mimeMap fileExtension=".mvb" mimeType="application/x-msmediaview" />
<mimeMap fileExtension=".mvc" mimeType="application/x-miva-compiled" />
<mimeMap fileExtension=".nc" mimeType="application/x-netcdf" />
<mimeMap fileExtension=".nsc" mimeType="video/x-ms-asf" />
<mimeMap fileExtension=".nws" mimeType="message/rfc822" />
<mimeMap fileExtension=".ocx" mimeType="application/octet-stream" />
<mimeMap fileExtension=".oda" mimeType="application/oda" />
<mimeMap fileExtension=".odc" mimeType="text/x-ms-odc" />
<mimeMap fileExtension=".ods" mimeType="application/oleobject" />
<mimeMap fileExtension=".oga" mimeType="audio/ogg" />
<mimeMap fileExtension=".ogg" mimeType="video/ogg" />
<mimeMap fileExtension=".ogv" mimeType="video/ogg" />
<mimeMap fileExtension=".one" mimeType="application/onenote" />
<mimeMap fileExtension=".onea" mimeType="application/onenote" />
<mimeMap fileExtension=".onetoc" mimeType="application/onenote" />
<mimeMap fileExtension=".onetoc2" mimeType="application/onenote" />
<mimeMap fileExtension=".onetmp" mimeType="application/onenote" />
<mimeMap fileExtension=".onepkg" mimeType="application/onenote" />
<mimeMap fileExtension=".osdx" mimeType="application/opensearchdescription+xml" />
<mimeMap fileExtension=".otf" mimeType="font/otf" />
<mimeMap fileExtension=".p10" mimeType="application/pkcs10" />
<mimeMap fileExtension=".p12" mimeType="application/x-pkcs12" />
<mimeMap fileExtension=".p7b" mimeType="application/x-pkcs7-certificates" />
<mimeMap fileExtension=".p7c" mimeType="application/pkcs7-mime" />
<mimeMap fileExtension=".p7m" mimeType="application/pkcs7-mime" />
<mimeMap fileExtension=".p7r" mimeType="application/x-pkcs7-certreqresp" />
<mimeMap fileExtension=".p7s" mimeType="application/pkcs7-signature" />
<mimeMap fileExtension=".pbm" mimeType="image/x-portable-bitmap" />
<mimeMap fileExtension=".pcx" mimeType="application/octet-stream" />
<mimeMap fileExtension=".pcz" mimeType="application/octet-stream" />
<mimeMap fileExtension=".pdf" mimeType="application/pdf" />
<mimeMap fileExtension=".pfb" mimeType="application/octet-stream" />
<mimeMap fileExtension=".pfm" mimeType="application/octet-stream" />
<mimeMap fileExtension=".pfx" mimeType="application/x-pkcs12" />
<mimeMap fileExtension=".pgm" mimeType="image/x-portable-graymap" />
<mimeMap fileExtension=".pko" mimeType="application/vnd.ms-pki.pko" />
<mimeMap fileExtension=".pma" mimeType="application/x-perfmon" />
<mimeMap fileExtension=".pmc" mimeType="application/x-perfmon" />
<mimeMap fileExtension=".pml" mimeType="application/x-perfmon" />
<mimeMap fileExtension=".pmr" mimeType="application/x-perfmon" />
<mimeMap fileExtension=".pmw" mimeType="application/x-perfmon" />
<mimeMap fileExtension=".png" mimeType="image/png" />
<mimeMap fileExtension=".pnm" mimeType="image/x-portable-anymap" />
<mimeMap fileExtension=".pnz" mimeType="image/png" />
<mimeMap fileExtension=".pot" mimeType="application/vnd.ms-powerpoint" />
<mimeMap fileExtension=".potm" mimeType="application/vnd.ms-powerpoint.template.macroEnabled.12" />
<mimeMap fileExtension=".potx" mimeType="application/vnd.openxmlformats-officedocument.presentationml.template" />
<mimeMap fileExtension=".ppam" mimeType="application/vnd.ms-powerpoint.addin.macroEnabled.12" />
<mimeMap fileExtension=".ppm" mimeType="image/x-portable-pixmap" />
<mimeMap fileExtension=".pps" mimeType="application/vnd.ms-powerpoint" />
<mimeMap fileExtension=".ppsm" mimeType="application/vnd.ms-powerpoint.slideshow.macroEnabled.12" />
<mimeMap fileExtension=".ppsx" mimeType="application/vnd.openxmlformats-officedocument.presentationml.slideshow" />
<mimeMap fileExtension=".ppt" mimeType="application/vnd.ms-powerpoint" />
<mimeMap fileExtension=".pptm" mimeType="application/vnd.ms-powerpoint.presentation.macroEnabled.12" />
<mimeMap fileExtension=".pptx" mimeType="application/vnd.openxmlformats-officedocument.presentationml.presentation" />
<mimeMap fileExtension=".prf" mimeType="application/pics-rules" />
<mimeMap fileExtension=".prm" mimeType="application/octet-stream" />
<mimeMap fileExtension=".prx" mimeType="application/octet-stream" />
<mimeMap fileExtension=".ps" mimeType="application/postscript" />
<mimeMap fileExtension=".psd" mimeType="application/octet-stream" />
<mimeMap fileExtension=".psm" mimeType="application/octet-stream" />
<mimeMap fileExtension=".psp" mimeType="application/octet-stream" />
<mimeMap fileExtension=".pub" mimeType="application/x-mspublisher" />
<mimeMap fileExtension=".qt" mimeType="video/quicktime" />
<mimeMap fileExtension=".qtl" mimeType="application/x-quicktimeplayer" />
<mimeMap fileExtension=".qxd" mimeType="application/octet-stream" />
<mimeMap fileExtension=".ra" mimeType="audio/x-pn-realaudio" />
<mimeMap fileExtension=".ram" mimeType="audio/x-pn-realaudio" />
<mimeMap fileExtension=".rar" mimeType="application/octet-stream" />
<mimeMap fileExtension=".ras" mimeType="image/x-cmu-raster" />
<mimeMap fileExtension=".rf" mimeType="image/vnd.rn-realflash" />
<mimeMap fileExtension=".rgb" mimeType="image/x-rgb" />
<mimeMap fileExtension=".rm" mimeType="application/vnd.rn-realmedia" />
<mimeMap fileExtension=".rmi" mimeType="audio/mid" />
<mimeMap fileExtension=".roff" mimeType="application/x-troff" />
<mimeMap fileExtension=".rpm" mimeType="audio/x-pn-realaudio-plugin" />
<mimeMap fileExtension=".rtf" mimeType="application/rtf" />
<mimeMap fileExtension=".rtx" mimeType="text/richtext" />
<mimeMap fileExtension=".scd" mimeType="application/x-msschedule" />
<mimeMap fileExtension=".sct" mimeType="text/scriptlet" />
<mimeMap fileExtension=".sea" mimeType="application/octet-stream" />
<mimeMap fileExtension=".setpay" mimeType="application/set-payment-initiation" />
<mimeMap fileExtension=".setreg" mimeType="application/set-registration-initiation" />
<mimeMap fileExtension=".sgml" mimeType="text/sgml" />
<mimeMap fileExtension=".sh" mimeType="application/x-sh" />
<mimeMap fileExtension=".shar" mimeType="application/x-shar" />
<mimeMap fileExtension=".sit" mimeType="application/x-stuffit" />
<mimeMap fileExtension=".sldm" mimeType="application/vnd.ms-powerpoint.slide.macroEnabled.12" />
<mimeMap fileExtension=".sldx" mimeType="application/vnd.openxmlformats-officedocument.presentationml.slide" />
<mimeMap fileExtension=".smd" mimeType="audio/x-smd" />
<mimeMap fileExtension=".smi" mimeType="application/octet-stream" />
<mimeMap fileExtension=".smx" mimeType="audio/x-smd" />
<mimeMap fileExtension=".smz" mimeType="audio/x-smd" />
<mimeMap fileExtension=".snd" mimeType="audio/basic" />
<mimeMap fileExtension=".snp" mimeType="application/octet-stream" />
<mimeMap fileExtension=".spc" mimeType="application/x-pkcs7-certificates" />
<mimeMap fileExtension=".spl" mimeType="application/futuresplash" />
<mimeMap fileExtension=".spx" mimeType="audio/ogg" />
<mimeMap fileExtension=".src" mimeType="application/x-wais-source" />
<mimeMap fileExtension=".ssm" mimeType="application/streamingmedia" />
<mimeMap fileExtension=".sst" mimeType="application/vnd.ms-pki.certstore" />
<mimeMap fileExtension=".stl" mimeType="application/vnd.ms-pki.stl" />
<mimeMap fileExtension=".sv4cpio" mimeType="application/x-sv4cpio" />
<mimeMap fileExtension=".sv4crc" mimeType="application/x-sv4crc" />
<mimeMap fileExtension=".svg" mimeType="image/svg+xml" />
<mimeMap fileExtension=".svgz" mimeType="image/svg+xml" />
<mimeMap fileExtension=".swf" mimeType="application/x-shockwave-flash" />
<mimeMap fileExtension=".t" mimeType="application/x-troff" />
<mimeMap fileExtension=".tar" mimeType="application/x-tar" />
<mimeMap fileExtension=".tcl" mimeType="application/x-tcl" />
<mimeMap fileExtension=".tex" mimeType="application/x-tex" />
<mimeMap fileExtension=".texi" mimeType="application/x-texinfo" />
<mimeMap fileExtension=".texinfo" mimeType="application/x-texinfo" />
<mimeMap fileExtension=".tgz" mimeType="application/x-compressed" />
<mimeMap fileExtension=".thmx" mimeType="application/vnd.ms-officetheme" />
<mimeMap fileExtension=".thn" mimeType="application/octet-stream" />
<mimeMap fileExtension=".tif" mimeType="image/tiff" />
<mimeMap fileExtension=".tiff" mimeType="image/tiff" />
<mimeMap fileExtension=".toc" mimeType="application/octet-stream" />
<mimeMap fileExtension=".tr" mimeType="application/x-troff" />
<mimeMap fileExtension=".trm" mimeType="application/x-msterminal" />
<mimeMap fileExtension=".ts" mimeType="video/vnd.dlna.mpeg-tts" />
<mimeMap fileExtension=".tsv" mimeType="text/tab-separated-values" />
<mimeMap fileExtension=".ttf" mimeType="application/octet-stream" />
<mimeMap fileExtension=".tts" mimeType="video/vnd.dlna.mpeg-tts" />
<mimeMap fileExtension=".txt" mimeType="text/plain" />
<mimeMap fileExtension=".u32" mimeType="application/octet-stream" />
<mimeMap fileExtension=".uls" mimeType="text/iuls" />
<mimeMap fileExtension=".ustar" mimeType="application/x-ustar" />
<mimeMap fileExtension=".vbs" mimeType="text/vbscript" />
<mimeMap fileExtension=".vcf" mimeType="text/x-vcard" />
<mimeMap fileExtension=".vcs" mimeType="text/plain" />
<mimeMap fileExtension=".vdx" mimeType="application/vnd.ms-visio.viewer" />
<mimeMap fileExtension=".vml" mimeType="text/xml" />
<mimeMap fileExtension=".vsd" mimeType="application/vnd.visio" />
<mimeMap fileExtension=".vss" mimeType="application/vnd.visio" />
<mimeMap fileExtension=".vst" mimeType="application/vnd.visio" />
<mimeMap fileExtension=".vsto" mimeType="application/x-ms-vsto" />
<mimeMap fileExtension=".vsw" mimeType="application/vnd.visio" />
<mimeMap fileExtension=".vsx" mimeType="application/vnd.visio" />
<mimeMap fileExtension=".vtx" mimeType="application/vnd.visio" />
<mimeMap fileExtension=".wav" mimeType="audio/wav" />
<mimeMap fileExtension=".wax" mimeType="audio/x-ms-wax" />
<mimeMap fileExtension=".wbmp" mimeType="image/vnd.wap.wbmp" />
<mimeMap fileExtension=".wcm" mimeType="application/vnd.ms-works" />
<mimeMap fileExtension=".wdb" mimeType="application/vnd.ms-works" />
<mimeMap fileExtension=".webm" mimeType="video/webm" />
<mimeMap fileExtension=".wks" mimeType="application/vnd.ms-works" />
<mimeMap fileExtension=".wm" mimeType="video/x-ms-wm" />
<mimeMap fileExtension=".wma" mimeType="audio/x-ms-wma" />
<mimeMap fileExtension=".wmd" mimeType="application/x-ms-wmd" />
<mimeMap fileExtension=".wmf" mimeType="application/x-msmetafile" />
<mimeMap fileExtension=".wml" mimeType="text/vnd.wap.wml" />
<mimeMap fileExtension=".wmlc" mimeType="application/vnd.wap.wmlc" />
<mimeMap fileExtension=".wmls" mimeType="text/vnd.wap.wmlscript" />
<mimeMap fileExtension=".wmlsc" mimeType="application/vnd.wap.wmlscriptc" />
<mimeMap fileExtension=".wmp" mimeType="video/x-ms-wmp" />
<mimeMap fileExtension=".wmv" mimeType="video/x-ms-wmv" />
<mimeMap fileExtension=".wmx" mimeType="video/x-ms-wmx" />
<mimeMap fileExtension=".wmz" mimeType="application/x-ms-wmz" />
<mimeMap fileExtension=".woff" mimeType="font/x-woff" />
<mimeMap fileExtension=".woff2" mimeType="application/font-woff2" />
<mimeMap fileExtension=".wps" mimeType="application/vnd.ms-works" />
<mimeMap fileExtension=".wri" mimeType="application/x-mswrite" />
<mimeMap fileExtension=".wrl" mimeType="x-world/x-vrml" />
<mimeMap fileExtension=".wrz" mimeType="x-world/x-vrml" />
<mimeMap fileExtension=".wsdl" mimeType="text/xml" />
<mimeMap fileExtension=".wtv" mimeType="video/x-ms-wtv" />
<mimeMap fileExtension=".wvx" mimeType="video/x-ms-wvx" />
<mimeMap fileExtension=".x" mimeType="application/directx" />
<mimeMap fileExtension=".xaf" mimeType="x-world/x-vrml" />
<mimeMap fileExtension=".xaml" mimeType="application/xaml+xml" />
<mimeMap fileExtension=".xap" mimeType="application/x-silverlight-app" />
<mimeMap fileExtension=".xbap" mimeType="application/x-ms-xbap" />
<mimeMap fileExtension=".xbm" mimeType="image/x-xbitmap" />
<mimeMap fileExtension=".xdr" mimeType="text/plain" />
<mimeMap fileExtension=".xht" mimeType="application/xhtml+xml" />
<mimeMap fileExtension=".xhtml" mimeType="application/xhtml+xml" />
<mimeMap fileExtension=".xla" mimeType="application/vnd.ms-excel" />
<mimeMap fileExtension=".xlam" mimeType="application/vnd.ms-excel.addin.macroEnabled.12" />
<mimeMap fileExtension=".xlc" mimeType="application/vnd.ms-excel" />
<mimeMap fileExtension=".xlm" mimeType="application/vnd.ms-excel" />
<mimeMap fileExtension=".xls" mimeType="application/vnd.ms-excel" />
<mimeMap fileExtension=".xlsb" mimeType="application/vnd.ms-excel.sheet.binary.macroEnabled.12" />
<mimeMap fileExtension=".xlsm" mimeType="application/vnd.ms-excel.sheet.macroEnabled.12" />
<mimeMap fileExtension=".xlsx" mimeType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" />
<mimeMap fileExtension=".xlt" mimeType="application/vnd.ms-excel" />
<mimeMap fileExtension=".xltm" mimeType="application/vnd.ms-excel.template.macroEnabled.12" />
<mimeMap fileExtension=".xltx" mimeType="application/vnd.openxmlformats-officedocument.spreadsheetml.template" />
<mimeMap fileExtension=".xlw" mimeType="application/vnd.ms-excel" />
<mimeMap fileExtension=".xml" mimeType="text/xml" />
<mimeMap fileExtension=".xof" mimeType="x-world/x-vrml" />
<mimeMap fileExtension=".xpm" mimeType="image/x-xpixmap" />
<mimeMap fileExtension=".xps" mimeType="application/vnd.ms-xpsdocument" />
<mimeMap fileExtension=".xsd" mimeType="text/xml" />
<mimeMap fileExtension=".xsf" mimeType="text/xml" />
<mimeMap fileExtension=".xsl" mimeType="text/xml" />
<mimeMap fileExtension=".xslt" mimeType="text/xml" />
<mimeMap fileExtension=".xsn" mimeType="application/octet-stream" />
<mimeMap fileExtension=".xtp" mimeType="application/octet-stream" />
<mimeMap fileExtension=".xwd" mimeType="image/x-xwindowdump" />
<mimeMap fileExtension=".z" mimeType="application/x-compress" />
<mimeMap fileExtension=".zip" mimeType="application/x-zip-compressed" />
</staticContent>
<tracing>
<traceProviderDefinitions>
<add name="WWW Server" guid="{3a2a4e84-4c21-4981-ae10-3fda0d9b0f83}">
<areas>
<clear />
<add name="Authentication" value="2" />
<add name="Security" value="4" />
<add name="Filter" value="8" />
<add name="StaticFile" value="16" />
<add name="CGI" value="32" />
<add name="Compression" value="64" />
<add name="Cache" value="128" />
<add name="RequestNotifications" value="256" />
<add name="Module" value="512" />
<add name="Rewrite" value="1024" />
<add name="FastCGI" value="4096" />
<add name="WebSocket" value="16384" />
</areas>
</add>
<add name="ASP" guid="{06b94d9a-b15e-456e-a4ef-37c984a2cb4b}">
<areas>
<clear />
</areas>
</add>
<add name="ISAPI Extension" guid="{a1c2040e-8840-4c31-ba11-9871031a19ea}">
<areas>
<clear />
</areas>
</add>
<add name="ASPNET" guid="{AFF081FE-0247-4275-9C4E-021F3DC1DA35}">
<areas>
<add name="Infrastructure" value="1" />
<add name="Module" value="2" />
<add name="Page" value="4" />
<add name="AppServices" value="8" />
</areas>
</add>
</traceProviderDefinitions>
<traceFailedRequests>
<add path="*">
<traceAreas>
<add provider="ASP" verbosity="Verbose" />
<add provider="ASPNET" areas="Infrastructure,Module,Page,AppServices" verbosity="Verbose" />
<add provider="ISAPI Extension" verbosity="Verbose" />
<add provider="WWW Server" areas="Authentication,Security,Filter,StaticFile,CGI,Compression,Cache,RequestNotifications,Module,Rewrite,WebSocket" verbosity="Verbose" />
</traceAreas>
<failureDefinitions statusCodes="200-999" />
</add>
</traceFailedRequests>
</tracing>
<urlCompression />
<validation />
<webdav>
<globalSettings>
<propertyStores>
<add name="webdav_simple_prop" image="%IIS_BIN%\webdav_simple_prop.dll" image32="%IIS_BIN%\webdav_simple_prop.dll" />
</propertyStores>
<lockStores>
<add name="webdav_simple_lock" image="%IIS_BIN%\webdav_simple_lock.dll" image32="%IIS_BIN%\webdav_simple_lock.dll" />
</lockStores>
</globalSettings>
<authoring>
<locks enabled="true" lockStore="webdav_simple_lock" />
</authoring>
<authoringRules />
</webdav>
<webSocket />
<applicationInitialization />
</system.webServer>
<location path="" overrideMode="Allow">
<system.webServer>
<modules>
<add name="IsapiFilterModule" lockItem="true" />
<add name="BasicAuthenticationModule" lockItem="true" />
<add name="IsapiModule" lockItem="true" />
<add name="HttpLoggingModule" lockItem="true" />
<!--
<add name="HttpCacheModule" lockItem="true" />
-->
<add name="DynamicCompressionModule" lockItem="true" />
<add name="StaticCompressionModule" lockItem="true" />
<add name="DefaultDocumentModule" lockItem="true" />
<add name="DirectoryListingModule" lockItem="true" />
<add name="ProtocolSupportModule" lockItem="true" />
<add name="HttpRedirectionModule" lockItem="true" />
<add name="ServerSideIncludeModule" lockItem="true" />
<add name="StaticFileModule" lockItem="true" />
<add name="AnonymousAuthenticationModule" lockItem="true" />
<add name="CertificateMappingAuthenticationModule" lockItem="true" />
<add name="UrlAuthorizationModule" lockItem="true" />
<add name="WindowsAuthenticationModule" lockItem="true" />
<!--
<add name="DigestAuthenticationModule" lockItem="true" />
-->
<add name="IISCertificateMappingAuthenticationModule" lockItem="true" />
<add name="WebMatrixSupportModule" lockItem="true" />
<add name="IpRestrictionModule" lockItem="true" />
<add name="DynamicIpRestrictionModule" lockItem="true" />
<add name="RequestFilteringModule" lockItem="true" />
<add name="CustomLoggingModule" lockItem="true" />
<add name="CustomErrorModule" lockItem="true" />
<add name="FailedRequestsTracingModule" lockItem="true" />
<add name="CgiModule" lockItem="true" />
<add name="FastCgiModule" lockItem="true" />
<!-- <add name="WebDAVModule" /> -->
<add name="RewriteModule" />
<add name="OutputCache" type="System.Web.Caching.OutputCacheModule" preCondition="managedHandler" />
<add name="Session" type="System.Web.SessionState.SessionStateModule" preCondition="managedHandler" />
<add name="WindowsAuthentication" type="System.Web.Security.WindowsAuthenticationModule" preCondition="managedHandler" />
<add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule" preCondition="managedHandler" />
<add name="DefaultAuthentication" type="System.Web.Security.DefaultAuthenticationModule" preCondition="managedHandler" />
<add name="RoleManager" type="System.Web.Security.RoleManagerModule" preCondition="managedHandler" />
<add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule" preCondition="managedHandler" />
<add name="FileAuthorization" type="System.Web.Security.FileAuthorizationModule" preCondition="managedHandler" />
<add name="AnonymousIdentification" type="System.Web.Security.AnonymousIdentificationModule" preCondition="managedHandler" />
<add name="Profile" type="System.Web.Profile.ProfileModule" preCondition="managedHandler" />
<add name="UrlMappingsModule" type="System.Web.UrlMappingsModule" preCondition="managedHandler" />
<add name="ApplicationInitializationModule" lockItem="true" />
<add name="WebSocketModule" lockItem="true" />
<add name="ServiceModel-4.0" type="System.ServiceModel.Activation.ServiceHttpModule,System.ServiceModel.Activation,Version=4.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35" preCondition="managedHandler,runtimeVersionv4.0" />
<add name="ConfigurationValidationModule" lockItem="true" />
<add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="managedHandler,runtimeVersionv4.0" />
<add name="ScriptModule-4.0" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="managedHandler,runtimeVersionv4.0" />
</modules>
<handlers accessPolicy="Read, Script">
<!-- <add name="WebDAV" path="*" verb="PROPFIND,PROPPATCH,MKCOL,PUT,COPY,DELETE,MOVE,LOCK,UNLOCK" modules="WebDAVModule" resourceType="Unspecified" requireAccess="None" /> -->
<add name="AXD-ISAPI-4.0_64bit" path="*.axd" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="PageHandlerFactory-ISAPI-4.0_64bit" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="SimpleHandlerFactory-ISAPI-4.0_64bit" path="*.ashx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="WebServiceHandlerFactory-ISAPI-4.0_64bit" path="*.asmx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="HttpRemotingHandlerFactory-rem-ISAPI-4.0_64bit" path="*.rem" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="HttpRemotingHandlerFactory-soap-ISAPI-4.0_64bit" path="*.soap" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="svc-ISAPI-4.0_64bit" path="*.svc" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" />
<add name="rules-ISAPI-4.0_64bit" path="*.rules" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" />
<add name="xoml-ISAPI-4.0_64bit" path="*.xoml" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" />
<add name="xamlx-ISAPI-4.0_64bit" path="*.xamlx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" />
<add name="aspq-ISAPI-4.0_64bit" path="*.aspq" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="cshtm-ISAPI-4.0_64bit" path="*.cshtm" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="cshtml-ISAPI-4.0_64bit" path="*.cshtml" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="vbhtm-ISAPI-4.0_64bit" path="*.vbhtm" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="vbhtml-ISAPI-4.0_64bit" path="*.vbhtml" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="AXD-ISAPI-4.0_32bit" path="*.axd" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="PageHandlerFactory-ISAPI-4.0_32bit" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="SimpleHandlerFactory-ISAPI-4.0_32bit" path="*.ashx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="WebServiceHandlerFactory-ISAPI-4.0_32bit" path="*.asmx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="HttpRemotingHandlerFactory-rem-ISAPI-4.0_32bit" path="*.rem" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="HttpRemotingHandlerFactory-soap-ISAPI-4.0_32bit" path="*.soap" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="svc-ISAPI-4.0_32bit" path="*.svc" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" />
<add name="rules-ISAPI-4.0_32bit" path="*.rules" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" />
<add name="xoml-ISAPI-4.0_32bit" path="*.xoml" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" />
<add name="xamlx-ISAPI-4.0_32bit" path="*.xamlx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" />
<add name="aspq-ISAPI-4.0_32bit" path="*.aspq" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="cshtm-ISAPI-4.0_32bit" path="*.cshtm" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="cshtml-ISAPI-4.0_32bit" path="*.cshtml" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="vbhtm-ISAPI-4.0_32bit" path="*.vbhtm" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="vbhtml-ISAPI-4.0_32bit" path="*.vbhtml" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="TraceHandler-Integrated-4.0" path="trace.axd" verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TraceHandler" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="WebAdminHandler-Integrated-4.0" path="WebAdmin.axd" verb="GET,DEBUG" type="System.Web.Handlers.WebAdminHandler" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="AssemblyResourceLoader-Integrated-4.0" path="WebResource.axd" verb="GET,DEBUG" type="System.Web.Handlers.AssemblyResourceLoader" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="PageHandlerFactory-Integrated-4.0" path="*.aspx" verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.PageHandlerFactory" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="SimpleHandlerFactory-Integrated-4.0" path="*.ashx" verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.SimpleHandlerFactory" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="WebServiceHandlerFactory-Integrated-4.0" path="*.asmx" verb="GET,HEAD,POST,DEBUG" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="HttpRemotingHandlerFactory-rem-Integrated-4.0" path="*.rem" verb="GET,HEAD,POST,DEBUG" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="HttpRemotingHandlerFactory-soap-Integrated-4.0" path="*.soap" verb="GET,HEAD,POST,DEBUG" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="svc-Integrated-4.0" path="*.svc" verb="*" type="System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="rules-Integrated-4.0" path="*.rules" verb="*" type="System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="xoml-Integrated-4.0" path="*.xoml" verb="*" type="System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="xamlx-Integrated-4.0" path="*.xamlx" verb="GET,HEAD,POST,DEBUG" type="System.Xaml.Hosting.XamlHttpHandlerFactory, System.Xaml.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="aspq-Integrated-4.0" path="*.aspq" verb="GET,HEAD,POST,DEBUG" type="System.Web.HttpForbiddenHandler" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="cshtm-Integrated-4.0" path="*.cshtm" verb="GET,HEAD,POST,DEBUG" type="System.Web.HttpForbiddenHandler" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="cshtml-Integrated-4.0" path="*.cshtml" verb="GET,HEAD,POST,DEBUG" type="System.Web.HttpForbiddenHandler" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="vbhtm-Integrated-4.0" path="*.vbhtm" verb="GET,HEAD,POST,DEBUG" type="System.Web.HttpForbiddenHandler" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="vbhtml-Integrated-4.0" path="*.vbhtml" verb="GET,HEAD,POST,DEBUG" type="System.Web.HttpForbiddenHandler" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="ScriptHandlerFactoryAppServices-Integrated-4.0" path="*_AppService.axd" verb="*" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="ScriptResourceIntegrated-4.0" path="*ScriptResource.axd" verb="GET,HEAD" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="ASPClassic" path="*.asp" verb="GET,HEAD,POST" modules="IsapiModule" scriptProcessor="%IIS_BIN%\asp.dll" resourceType="File" />
<add name="SecurityCertificate" path="*.cer" verb="GET,HEAD,POST" modules="IsapiModule" scriptProcessor="%IIS_BIN%\asp.dll" resourceType="File" />
<add name="ISAPI-dll" path="*.dll" verb="*" modules="IsapiModule" resourceType="File" requireAccess="Execute" allowPathInfo="true" />
<add name="TraceHandler-Integrated" path="trace.axd" verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TraceHandler" preCondition="integratedMode,runtimeVersionv2.0" />
<add name="WebAdminHandler-Integrated" path="WebAdmin.axd" verb="GET,DEBUG" type="System.Web.Handlers.WebAdminHandler" preCondition="integratedMode,runtimeVersionv2.0" />
<add name="AssemblyResourceLoader-Integrated" path="WebResource.axd" verb="GET,DEBUG" type="System.Web.Handlers.AssemblyResourceLoader" preCondition="integratedMode,runtimeVersionv2.0" />
<add name="PageHandlerFactory-Integrated" path="*.aspx" verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.PageHandlerFactory" preCondition="integratedMode,runtimeVersionv2.0" />
<add name="SimpleHandlerFactory-Integrated" path="*.ashx" verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.SimpleHandlerFactory" preCondition="integratedMode,runtimeVersionv2.0" />
<add name="WebServiceHandlerFactory-Integrated" path="*.asmx" verb="GET,HEAD,POST,DEBUG" type="System.Web.Services.Protocols.WebServiceHandlerFactory,System.Web.Services,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a" preCondition="integratedMode,runtimeVersionv2.0" />
<add name="HttpRemotingHandlerFactory-rem-Integrated" path="*.rem" verb="GET,HEAD,POST,DEBUG" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory,System.Runtime.Remoting,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv2.0" />
<add name="HttpRemotingHandlerFactory-soap-Integrated" path="*.soap" verb="GET,HEAD,POST,DEBUG" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory,System.Runtime.Remoting,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv2.0" />
<add name="AXD-ISAPI-2.0" path="*.axd" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
<add name="PageHandlerFactory-ISAPI-2.0" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
<add name="SimpleHandlerFactory-ISAPI-2.0" path="*.ashx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
<add name="WebServiceHandlerFactory-ISAPI-2.0" path="*.asmx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
<add name="HttpRemotingHandlerFactory-rem-ISAPI-2.0" path="*.rem" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
<add name="HttpRemotingHandlerFactory-soap-ISAPI-2.0" path="*.soap" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
<add name="AXD-ISAPI-2.0-64" path="*.axd" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
<add name="PageHandlerFactory-ISAPI-2.0-64" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
<add name="SimpleHandlerFactory-ISAPI-2.0-64" path="*.ashx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
<add name="WebServiceHandlerFactory-ISAPI-2.0-64" path="*.asmx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
<add name="HttpRemotingHandlerFactory-rem-ISAPI-2.0-64" path="*.rem" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
<add name="HttpRemotingHandlerFactory-soap-ISAPI-2.0-64" path="*.soap" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
<add name="CGI-exe" path="*.exe" verb="*" modules="CgiModule" resourceType="File" requireAccess="Execute" allowPathInfo="true" />
<add name="SSINC-stm" path="*.stm" verb="GET,HEAD,POST" modules="ServerSideIncludeModule" resourceType="File" />
<add name="SSINC-shtm" path="*.shtm" verb="GET,HEAD,POST" modules="ServerSideIncludeModule" resourceType="File" />
<add name="SSINC-shtml" path="*.shtml" verb="GET,HEAD,POST" modules="ServerSideIncludeModule" resourceType="File" />
<add name="TRACEVerbHandler" path="*" verb="TRACE" modules="ProtocolSupportModule" requireAccess="None" />
<add name="OPTIONSVerbHandler" path="*" verb="OPTIONS" modules="ProtocolSupportModule" requireAccess="None" />
<add name="ExtensionlessUrl-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="ExtensionlessUrl-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" responseBufferLimit="0" />
<add name="StaticFile" path="*" verb="*" modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule" resourceType="Either" requireAccess="Read" />
</handlers>
</system.webServer>
</location>
</configuration>
...@@ -13,4 +13,10 @@ ...@@ -13,4 +13,10 @@
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
<DebuggerFlavor>AppHostDeviceDebugger</DebuggerFlavor> <DebuggerFlavor>AppHostDeviceDebugger</DebuggerFlavor>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)|$(UseDotNetNativeToolchain)'=='Release|x86|true'">
<DebuggerFlavor>AppHostDeviceDebugger</DebuggerFlavor>
</PropertyGroup>
<PropertyGroup>
<AutoRefresh>false</AutoRefresh>
</PropertyGroup>
</Project> </Project>
\ No newline at end of file
...@@ -13,4 +13,22 @@ ...@@ -13,4 +13,22 @@
</ItemGroup> </ItemGroup>
<Import Condition="Exists('$(MSBuildThisFileDirectory)CordovaAppDebug.projitems') And '$(Configuration)'=='Debug'" Project="CordovaAppDebug.projitems" /> <Import Condition="Exists('$(MSBuildThisFileDirectory)CordovaAppDebug.projitems') And '$(Configuration)'=='Debug'" Project="CordovaAppDebug.projitems" />
<Import Condition="Exists('$(MSBuildThisFileDirectory)CordovaAppRelease.projitems') And '$(Configuration)'!='Debug'" Project="CordovaAppRelease.projitems" /> <Import Condition="Exists('$(MSBuildThisFileDirectory)CordovaAppRelease.projitems') And '$(Configuration)'!='Debug'" Project="CordovaAppRelease.projitems" />
<ItemGroup>
<Reference Condition="'$(Platform)'=='x86'" Include="LocalNotificationProxy">
<HintPath>plugins/cordova-plugin-local-notifications/x86/LocalNotificationProxy.winmd</HintPath>
<IsWinMDFile>true</IsWinMDFile>
</Reference>
</ItemGroup>
<ItemGroup>
<Reference Condition="'$(Platform)'=='x64'" Include="LocalNotificationProxy">
<HintPath>plugins/cordova-plugin-local-notifications/x64/LocalNotificationProxy.winmd</HintPath>
<IsWinMDFile>true</IsWinMDFile>
</Reference>
</ItemGroup>
<ItemGroup>
<Reference Condition="'$(Platform)'=='ARM'" Include="LocalNotificationProxy">
<HintPath>plugins/cordova-plugin-local-notifications/ARM/LocalNotificationProxy.winmd</HintPath>
<IsWinMDFile>true</IsWinMDFile>
</Reference>
</ItemGroup>
</Project> </Project>
Microsoft Visual Studio Solution File, Format Version 12.00 Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15 # Visual Studio 15
VisualStudioVersion = 15.0.26430.15 VisualStudioVersion = 15.0.26730.12
MinimumVisualStudioVersion = 10.0.40219.1 MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "CordovaApp", "CordovaApp", "{3A47E08D-7EA5-4F3F-AA6D-1D4A41F26944}" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "CordovaApp", "CordovaApp", "{3A47E08D-7EA5-4F3F-AA6D-1D4A41F26944}"
EndProject EndProject
...@@ -113,14 +113,14 @@ Global ...@@ -113,14 +113,14 @@ Global
{FB381278-F4AD-4703-A12A-C43EE0B231BD}.Debug|x64.Build.0 = Debug|Any CPU {FB381278-F4AD-4703-A12A-C43EE0B231BD}.Debug|x64.Build.0 = Debug|Any CPU
{FB381278-F4AD-4703-A12A-C43EE0B231BD}.Debug|x86.ActiveCfg = Debug|Any CPU {FB381278-F4AD-4703-A12A-C43EE0B231BD}.Debug|x86.ActiveCfg = Debug|Any CPU
{FB381278-F4AD-4703-A12A-C43EE0B231BD}.Debug|x86.Build.0 = Debug|Any CPU {FB381278-F4AD-4703-A12A-C43EE0B231BD}.Debug|x86.Build.0 = Debug|Any CPU
{FB381278-F4AD-4703-A12A-C43EE0B231BD}.Publish|Any CPU.ActiveCfg = Publish|Any CPU {FB381278-F4AD-4703-A12A-C43EE0B231BD}.Publish|Any CPU.ActiveCfg = Release|Any CPU
{FB381278-F4AD-4703-A12A-C43EE0B231BD}.Publish|Any CPU.Build.0 = Publish|Any CPU {FB381278-F4AD-4703-A12A-C43EE0B231BD}.Publish|Any CPU.Build.0 = Release|Any CPU
{FB381278-F4AD-4703-A12A-C43EE0B231BD}.Publish|ARM.ActiveCfg = Publish|Any CPU {FB381278-F4AD-4703-A12A-C43EE0B231BD}.Publish|ARM.ActiveCfg = Release|Any CPU
{FB381278-F4AD-4703-A12A-C43EE0B231BD}.Publish|ARM.Build.0 = Publish|Any CPU {FB381278-F4AD-4703-A12A-C43EE0B231BD}.Publish|ARM.Build.0 = Release|Any CPU
{FB381278-F4AD-4703-A12A-C43EE0B231BD}.Publish|x64.ActiveCfg = Publish|Any CPU {FB381278-F4AD-4703-A12A-C43EE0B231BD}.Publish|x64.ActiveCfg = Release|Any CPU
{FB381278-F4AD-4703-A12A-C43EE0B231BD}.Publish|x64.Build.0 = Publish|Any CPU {FB381278-F4AD-4703-A12A-C43EE0B231BD}.Publish|x64.Build.0 = Release|Any CPU
{FB381278-F4AD-4703-A12A-C43EE0B231BD}.Publish|x86.ActiveCfg = Publish|Any CPU {FB381278-F4AD-4703-A12A-C43EE0B231BD}.Publish|x86.ActiveCfg = Release|Any CPU
{FB381278-F4AD-4703-A12A-C43EE0B231BD}.Publish|x86.Build.0 = Publish|Any CPU {FB381278-F4AD-4703-A12A-C43EE0B231BD}.Publish|x86.Build.0 = Release|Any CPU
{FB381278-F4AD-4703-A12A-C43EE0B231BD}.Release|Any CPU.ActiveCfg = Release|Any CPU {FB381278-F4AD-4703-A12A-C43EE0B231BD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FB381278-F4AD-4703-A12A-C43EE0B231BD}.Release|Any CPU.Build.0 = Release|Any CPU {FB381278-F4AD-4703-A12A-C43EE0B231BD}.Release|Any CPU.Build.0 = Release|Any CPU
{FB381278-F4AD-4703-A12A-C43EE0B231BD}.Release|ARM.ActiveCfg = Release|Any CPU {FB381278-F4AD-4703-A12A-C43EE0B231BD}.Release|ARM.ActiveCfg = Release|Any CPU
...@@ -139,4 +139,7 @@ Global ...@@ -139,4 +139,7 @@ Global
{F5B32CBA-8DAB-43E5-AE4F-98B3B1281FF1} = {3A47E08D-7EA5-4F3F-AA6D-1D4A41F26944} {F5B32CBA-8DAB-43E5-AE4F-98B3B1281FF1} = {3A47E08D-7EA5-4F3F-AA6D-1D4A41F26944}
{FB381278-F4AD-4703-A12A-C43EE0B231BD} = {3A47E08D-7EA5-4F3F-AA6D-1D4A41F26944} {FB381278-F4AD-4703-A12A-C43EE0B231BD} = {3A47E08D-7EA5-4F3F-AA6D-1D4A41F26944}
EndGlobalSection EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {AD3B56BE-BD21-4EFF-B8E4-BA2F4F33DD21}
EndGlobalSection
EndGlobal EndGlobal
...@@ -21,7 +21,9 @@ ...@@ -21,7 +21,9 @@
<uap:DefaultTile ShortName="NotificationExample" Square310x310Logo="images\Square310x310Logo.png" Square71x71Logo="images\Square71x71Logo.png" Wide310x150Logo="images\Wide310x150Logo.png"> <uap:DefaultTile ShortName="NotificationExample" Square310x310Logo="images\Square310x310Logo.png" Square71x71Logo="images\Square71x71Logo.png" Wide310x150Logo="images\Wide310x150Logo.png">
</uap:DefaultTile> </uap:DefaultTile>
<uap:InitialRotationPreference> <uap:InitialRotationPreference>
<uap:Rotation Preference="portrait" />
<uap:Rotation Preference="landscape" /> <uap:Rotation Preference="landscape" />
<uap:Rotation Preference="landscapeFlipped" />
</uap:InitialRotationPreference> </uap:InitialRotationPreference>
</uap:VisualElements> </uap:VisualElements>
<uap:ApplicationContentUriRules> <uap:ApplicationContentUriRules>
......
...@@ -23,7 +23,41 @@ cordova.define("cordova-plugin-local-notifications.LocalNotification.Proxy", fun ...@@ -23,7 +23,41 @@ cordova.define("cordova-plugin-local-notifications.LocalNotification.Proxy", fun
var LocalNotification = LocalNotificationProxy.LocalNotification, var LocalNotification = LocalNotificationProxy.LocalNotification,
ActivationKind = Windows.ApplicationModel.Activation.ActivationKind; ActivationKind = Windows.ApplicationModel.Activation.ActivationKind;
var impl = new LocalNotificationProxy.LocalNotificationProxy(); var impl = new LocalNotificationProxy.LocalNotificationProxy(),
queue = [],
ready = false;
/**
* Set launchDetails object.
*
* @param [ Function ] success Success callback
* @param [ Function ] error Error callback
* @param [ Array ] args Interface arguments
*
* @return [ Void ]
*/
exports.launch = function (success, error, args) {
var plugin = cordova.plugins.notification.local;
if (args.length === 0 || plugin.launchDetails) return;
plugin.launchDetails = { id: args[0], action: args[1] };
};
/**
* To execute all queued events.
*
* @return [ Void ]
*/
exports.ready = function () {
ready = true;
for (var i = 0; i < queue.length; i++) {
exports.fireEvent.apply(exports, queue[i]);
}
queue = [];
};
/** /**
* Check permission to show notifications. * Check permission to show notifications.
...@@ -61,40 +95,113 @@ exports.request = function (success, error) { ...@@ -61,40 +95,113 @@ exports.request = function (success, error) {
* @return [ Void ] * @return [ Void ]
*/ */
exports.schedule = function (success, error, args) { exports.schedule = function (success, error, args) {
var options = [], actions = []; var options = [];
for (var i = 0, props, opts; i < args.length; i++) { for (var i = 0, props, opts; i < args.length; i++) {
props = args[i]; props = args[i];
opts = new LocalNotification.Options(); opts = exports.parseOptions(props);
options.push(opts);
}
for (var prop in opts) { impl.schedule(options);
if (prop != 'actions' && props[prop]) opts[prop] = props[prop];
}
for (var j = 0, action, btn; j < props.actions.length; j++) { for (i = 0; i < options.length; i++) {
action = props.actions[j]; exports.fireEvent('add', options[i]);
}
if (!action.type || action.type == 'button') { success();
btn = new LocalNotification.Button(); };
} else
if (action.type == 'input') {
btn = new LocalNotification.Input();
}
for (prop in btn) { /**
if (action[prop]) btn[prop] = action[prop]; * Update notifications.
} *
* @param [ Function ] success Success callback
* @param [ Function ] error Error callback
* @param [ Array ] args Interface arguments
*
* @return [ Void ]
*/
exports.update = function (success, error, args) {
var options = [];
actions.push(btn); for (var i = 0, props, opts; i < args.length; i++) {
} props = args[i];
opts = exports.parseOptions(props);
options.push(opts);
}
opts.actions = actions; impl.update(options);
options.push(opts); for (i = 0; i < options.length; i++) {
exports.fireEvent('update', options[i]);
} }
impl.schedule(options); success();
};
/**
* Clear the notifications specified by id.
*
* @param [ Function ] success Success callback
* @param [ Function ] error Error callback
* @param [ Array ] args Interface arguments
*
* @return [ Void ]
*/
exports.clear = function (success, error, args) {
var toasts = impl.clear(args) || [];
for (var i = 0; i < toasts.length; i++) {
exports.fireEvent('clear', toasts[i]);
}
success();
};
/**
* Clear all notifications.
*
* @param [ Function ] success Success callback
* @param [ Function ] error Error callback
*
* @return [ Void ]
*/
exports.clearAll = function (success, error) {
impl.clearAll();
exports.fireEvent('clearall');
success();
};
/**
* Cancel the notifications specified by id.
*
* @param [ Function ] success Success callback
* @param [ Function ] error Error callback
* @param [ Array ] args Interface arguments
*
* @return [ Void ]
*/
exports.cancel = function (success, error, args) {
var toasts = impl.cancel(args) || [];
for (var i = 0; i < toasts.length; i++) {
exports.fireEvent('cancel', toasts[i]);
}
success();
};
/**
* Cancel all notifications.
*
* @param [ Function ] success Success callback
* @param [ Function ] error Error callback
*
* @return [ Void ]
*/
exports.cancelAll = function (success, error) {
impl.cancelAll();
exports.fireEvent('cancelall');
success(); success();
}; };
...@@ -167,7 +274,7 @@ exports.triggeredIds = function (success, error) { ...@@ -167,7 +274,7 @@ exports.triggeredIds = function (success, error) {
exports.notification = function (success, error, args) { exports.notification = function (success, error, args) {
var obj = impl.notification(args[0]); var obj = impl.notification(args[0]);
success(obj); success(exports.clone(obj));
}; };
/** /**
...@@ -182,7 +289,7 @@ exports.notification = function (success, error, args) { ...@@ -182,7 +289,7 @@ exports.notification = function (success, error, args) {
exports.notifications = function (success, error, args) { exports.notifications = function (success, error, args) {
var objs = impl.notifications(args) || []; var objs = impl.notifications(args) || [];
success(Array.from(objs)); success(exports.cloneAll(objs));
}; };
/** /**
...@@ -196,7 +303,7 @@ exports.notifications = function (success, error, args) { ...@@ -196,7 +303,7 @@ exports.notifications = function (success, error, args) {
exports.scheduledNotifications = function (success, error) { exports.scheduledNotifications = function (success, error) {
var objs = impl.scheduledNotifications() || []; var objs = impl.scheduledNotifications() || [];
success(Array.from(objs)); success(exports.cloneAll(objs));
}; };
/** /**
...@@ -210,7 +317,7 @@ exports.scheduledNotifications = function (success, error) { ...@@ -210,7 +317,7 @@ exports.scheduledNotifications = function (success, error) {
exports.triggeredNotifications = function (success, error) { exports.triggeredNotifications = function (success, error) {
var objs = impl.triggeredNotifications() || []; var objs = impl.triggeredNotifications() || [];
success(Array.from(objs)); success(exports.cloneAll(objs));
}; };
/** /**
...@@ -223,20 +330,187 @@ exports.triggeredNotifications = function (success, error) { ...@@ -223,20 +330,187 @@ exports.triggeredNotifications = function (success, error) {
exports.clicked = function (xml, input) { exports.clicked = function (xml, input) {
var toast = LocalNotification.Options.parse(xml), var toast = LocalNotification.Options.parse(xml),
event = toast.action || 'click', event = toast.action || 'click',
e = { event: event }; meta = Object.assign({}, input);
if (input && input.size > 0) { if (input && input.size > 0) {
var it = input.first(); meta.text = input.first().current.value;
}
if (!ready) {
exports.launch(null, null, [toast.id, event]);
}
exports.fireEvent(event, toast, meta);
};
/**
* Invoke listeners for the given event.
*
* @param [ String ] event The name of the event.
* @param [ Object ] toast Optional notification object.
* @param [ Object ] data Optional meta data about the event.
*
* @return [ Void ]
*/
exports.fireEvent = function (event, toast, data) {
var meta = Object.assign({ event: event }, data),
plugin = cordova.plugins.notification.local.core;
if (!ready) {
queue.push(arguments);
return;
}
if (toast) {
plugin.fireEvent(event, exports.clone(toast), meta);
} else {
plugin.fireEvent(event, meta);
}
};
e.text = it.current.value; /**
* Clone the objects and delete internal properties.
*
* @param [ Array<Object> ] objs The objects to clone for.
*
* @return [ Array<Object> ]
*/
exports.cloneAll = function (objs) {
var clones = [];
while (it.hasCurrent) { for (var i = 0; i < objs.length; i++) {
e[it.current.key] = it.current.value; clones.push(exports.clone(objs[i]));
it.moveNext(); }
return clones;
};
/**
* Clone the object and delete internal properties.
*
* @param [ Object ] obj The object to clone for.
*
* @return [ Object ]
*/
exports.clone = function (obj) {
var ignore = ['action'],
clone = {};
for (var prop in obj) {
if (ignore.includes(prop) || typeof obj[prop] === 'function')
continue;
try {
clone[prop] = obj[prop];
} catch (e) {
clone[prop] = null;
} }
} }
cordova.plugins.notification.local.core.fireEvent(event, toast, e); return clone;
};
/**
* Parse notification spec into an instance of prefered type.
*
* @param [ Object ] obj The notification options map.
*
* @return [ LocalNotification.Options ]
*/
exports.parseOptions = function (obj) {
var opts = new LocalNotification.Options(),
ignore = ['progressBar', 'actions', 'trigger'];
for (var prop in opts) {
if (!ignore.includes(prop) && obj[prop]) {
opts[prop] = obj[prop];
}
}
var progressBar = exports.parseProgressBar(obj);
opts.progressBar = progressBar;
var trigger = exports.parseTrigger(obj);
opts.trigger = trigger;
var actions = exports.parseActions(obj);
opts.actions = actions;
return opts;
};
/**
* Parse trigger spec into instance of prefered type.
*
* @param [ Object ] obj The notification options map.
*
* @return [ LocalNotification.Trigger ]
*/
exports.parseTrigger = function (obj) {
var trigger = new LocalNotification.Trigger(),
spec = obj.trigger, val;
if (!spec) return trigger;
for (var prop in trigger) {
val = spec[prop];
if (!val) continue;
trigger[prop] = prop == 'every' ? val.toString() : val;
}
return trigger;
};
/**
* Parse action specs into instances of prefered types.
*
* @param [ Object ] obj The notification options map.
*
* @return [ Array<LocalNotification.Action> ]
*/
exports.parseActions = function (obj) {
var actions = [];
if (!obj.actions) return actions;
for (var i = 0, action, btn; i < obj.actions.length; i++) {
action = obj.actions[i];
if (!action.type || action.type == 'button') {
btn = new LocalNotification.Button();
} else
if (action.type == 'input') {
btn = new LocalNotification.Input();
}
for (var prop in btn) {
if (action[prop]) btn[prop] = action[prop];
}
actions.push(btn);
}
return actions;
};
/**
* Parse progressBar specs into instances of prefered types.
*
* @param [ Object ] obj The notification options map.
*
* @return [ LocalNotification.ProgressBar ]
*/
exports.parseProgressBar = function (obj) {
var bar = new LocalNotification.ProgressBar(),
spec = obj.progressBar;
if (!spec) return bar;
for (var prop in bar) {
if (spec[prop]) bar[prop] = spec[prop];
}
return bar;
}; };
// Handle onclick event // Handle onclick event
......
...@@ -84,41 +84,38 @@ exports.schedule = function (msgs, callback, scope, args) { ...@@ -84,41 +84,38 @@ exports.schedule = function (msgs, callback, scope, args) {
} }
}; };
// /** /**
// * Update existing notifications specified by IDs in options. * Schedule notifications.
// * *
// * @param {Object} notifications * @param [ Array ] notifications The notifications to schedule.
// * The notification properties to update * @param [ Function ] callback The function to be exec as the callback.
// * @param {Function} callback * @param [ Object ] scope The callback function's scope.
// * A function to be called after the notification has been updated * @param [ Object ] args Optional flags how to schedule.
// * @param {Object?} scope *
// * The scope for the callback function * @return [ Void ]
// * @param {Object?} args */
// * skipPermission:true schedules the notifications immediatly without exports.update = function (msgs, callback, scope, args) {
// * registering or checking for permission var fn = function(granted) {
// */
// exports.update = function (msgs, callback, scope, args) { if (!granted) return;
// var fn = function(granted) {
var notifications = Array.isArray(msgs) ? msgs : [msgs];
// if (!granted) return;
for (var i = 0; i < notifications.length; i++) {
// var notifications = Array.isArray(msgs) ? msgs : [msgs]; var notification = notifications[i];
// for (var i = 0; i < notifications.length; i++) { this.convertProperties(notification);
// var notification = notifications[i]; }
// this.convertProperties(notification); this.exec('update', notifications, callback, scope);
// } };
// this.exec('update', notifications, callback, scope); if (args && args.skipPermission) {
// }; fn.call(this, true);
} else {
// if (args && args.skipPermission) { this.requestPermission(fn, this);
// fn.call(this, true); }
// } else { };
// this.registerPermission(fn, this);
// }
// };
/** /**
* Clear the specified notifications by id. * Clear the specified notifications by id.
......
...@@ -29,14 +29,14 @@ exports._defaults = { ...@@ -29,14 +29,14 @@ exports._defaults = {
text: '', text: '',
title: '', title: '',
sound: 'res://platform_default', sound: 'res://platform_default',
trigger: 'date',
badge: undefined, badge: undefined,
data: undefined, data: undefined,
every: undefined, icon: undefined,
at: undefined, trigger: { type: 'calendar' },
actions: [], actions: [],
actionGroupId: undefined, actionGroupId: undefined,
attachments: [] attachments: [],
progressBar: false
}; };
// Listener // Listener
...@@ -59,12 +59,6 @@ exports.applyPlatformSpecificOptions = function () { ...@@ -59,12 +59,6 @@ exports.applyPlatformSpecificOptions = function () {
defaults.led = undefined; defaults.led = undefined;
defaults.color = undefined; defaults.color = undefined;
break; break;
case 'iOS':
defaults.region = undefined;
defaults.radius = undefined;
defaults.notifyOnEntry = true;
defaults.notifyOnExit = false;
break;
} }
}; };
...@@ -78,7 +72,6 @@ exports.applyPlatformSpecificOptions = function () { ...@@ -78,7 +72,6 @@ exports.applyPlatformSpecificOptions = function () {
exports.mergeWithDefaults = function (options) { exports.mergeWithDefaults = function (options) {
var defaults = this.getDefaults(); var defaults = this.getDefaults();
options.at = this.getValueFor(options, 'at', 'firstAt', 'date');
options.text = this.getValueFor(options, 'text', 'message'); options.text = this.getValueFor(options, 'text', 'message');
options.data = this.getValueFor(options, 'data', 'json'); options.data = this.getValueFor(options, 'data', 'json');
...@@ -90,10 +83,6 @@ exports.mergeWithDefaults = function (options) { ...@@ -90,10 +83,6 @@ exports.mergeWithDefaults = function (options) {
options.autoClear = false; options.autoClear = false;
} }
if (options.at === undefined || options.at === null) {
options.at = new Date();
}
for (var key in defaults) { for (var key in defaults) {
if (options[key] === null || options[key] === undefined) { if (options[key] === null || options[key] === undefined) {
if (options.hasOwnProperty(key) && ['data','sound'].indexOf(key) > -1) { if (options.hasOwnProperty(key) && ['data','sound'].indexOf(key) > -1) {
...@@ -106,7 +95,7 @@ exports.mergeWithDefaults = function (options) { ...@@ -106,7 +95,7 @@ exports.mergeWithDefaults = function (options) {
for (key in options) { for (key in options) {
if (!defaults.hasOwnProperty(key)) { if (!defaults.hasOwnProperty(key)) {
delete options[key]; // delete options[key];
console.warn('Unknown property: ' + key); console.warn('Unknown property: ' + key);
} }
} }
...@@ -149,21 +138,13 @@ exports.convertProperties = function (options) { ...@@ -149,21 +138,13 @@ exports.convertProperties = function (options) {
} }
} }
if (options.at) {
if (typeof options.at == 'object') {
options.at = options.at.getTime();
}
options.at = Math.round(options.at/1000);
}
if (typeof options.data == 'object') { if (typeof options.data == 'object') {
options.data = JSON.stringify(options.data); options.data = JSON.stringify(options.data);
} }
if (options.actions) { this.convertTrigger(options);
this.convertActions(options); this.convertActions(options);
} this.convertProgressBar(options);
return options; return options;
}; };
...@@ -199,6 +180,82 @@ exports.convertActions = function (options) { ...@@ -199,6 +180,82 @@ exports.convertActions = function (options) {
options.category = (options.category || 'DEFAULT_GROUP').toString(); options.category = (options.category || 'DEFAULT_GROUP').toString();
options.actions = actions; options.actions = actions;
return options;
};
/**
* Convert the passed values for the trigger to their required type.
*
* @param [ Map ] options Set of custom values.
*
* @return [ Map ] Interaction object with trigger spec.
*/
exports.convertTrigger = function (options) {
var cfg = options.trigger,
isDate = Date.prototype.isPrototypeOf(cfg),
isObject = Object.prototype.isPrototypeOf(cfg),
trigger = !isDate && isObject ? cfg : {},
date = this.getValueFor(trigger, 'at', 'firstAt', 'date');
if (!trigger.type) {
trigger.type = trigger.center ? 'location' : 'calendar';
}
var isCal = trigger.type == 'calendar';
if (isCal && !date) {
date = this.getValueFor(options, 'at', 'firstAt', 'date') || new Date();
}
if (isCal) {
date = typeof date == 'object' ? date.getTime() : date;
trigger.at = Math.round(date / 1000);
}
if (isCal && !trigger.every && options.every) {
trigger.every = options.every;
}
if (!trigger.count && device.platform == 'windows') {
trigger.count = trigger.every ? 5 : 1;
}
if (trigger.every && device.platform == 'windows') {
trigger.every = trigger.every.toString();
}
if (!isCal) {
trigger.notifyOnEntry = !!trigger.notifyOnEntry;
trigger.notifyOnExit = trigger.notifyOnExit === true;
trigger.radius = trigger.radius || 5;
}
delete options.every;
delete options.at;
delete options.firstAt;
delete options.date;
options.trigger = trigger;
return options;
};
/**
* Convert the passed values for the progressBar to their required type.
*
* @param [ Map ] options Set of custom values.
*
* @return [ Map ] Interaction object with trigger spec.
*/
exports.convertProgressBar = function (options) {
var cfg = options.progressBar;
if (typeof cfg === 'boolean') {
options.progressBar = { enabled: cfg };
}
return options;
}; };
/** /**
...@@ -306,13 +363,13 @@ exports.exec = function (action, args, callback, scope) { ...@@ -306,13 +363,13 @@ exports.exec = function (action, args, callback, scope) {
channel.deviceready.subscribe(function () { channel.deviceready.subscribe(function () {
// Device is ready now, the listeners are registered // Device is ready now, the listeners are registered
// and all queued events can be executed. // and all queued events can be executed.
exports.exec('deviceready'); exports.exec('ready');
}); });
// Called before 'deviceready' event // Called before 'deviceready' event
channel.onCordovaReady.subscribe(function () { channel.onCordovaReady.subscribe(function () {
// Set launchDetails object // Set launchDetails object
exports.exec('launchDetails'); exports.exec('launch');
// Device plugin is ready now // Device plugin is ready now
channel.onCordovaInfoReady.subscribe(function () { channel.onCordovaInfoReady.subscribe(function () {
// Merge platform specifics into defaults // Merge platform specifics into defaults
......
...@@ -58,22 +58,19 @@ exports.schedule = function (notifications, callback, scope, args) { ...@@ -58,22 +58,19 @@ exports.schedule = function (notifications, callback, scope, args) {
this.core.schedule(notifications, callback, scope, args); this.core.schedule(notifications, callback, scope, args);
}; };
// /** /**
// * Update existing notifications specified by IDs in options. * Update notifications.
// * *
// * @param {Object} notifications * @param [ Array ] notifications The notifications to schedule.
// * The notification properties to update * @param [ Function ] callback The function to be exec as the callback.
// * @param {Function} callback * @param [ Object ] scope The callback function's scope.
// * A function to be called after the notification has been updated * @param [ Object ] args Optional flags how to schedule.
// * @param {Object?} scope *
// * The scope for the callback function * @return [ Void ]
// * @param {Object?} args */
// * skipPermission:true schedules the notifications immediatly without exports.update = function (notifications, callback, scope, args) {
// * registering or checking for permission this.core.update(notifications, callback, scope, args);
// */ };
// exports.update = function (notifications, callback, scope, args) {
// this.core.update(notifications, callback, scope, args);
// };
/** /**
* Clear the specified notifications by id. * Clear the specified notifications by id.
......
...@@ -51,32 +51,34 @@ var app = { ...@@ -51,32 +51,34 @@ var app = {
}, },
// Initialize plugin // Initialize plugin
pluginInitialize: function() { pluginInitialize: function() {
document.getElementById('granted').onclick = app.hasPermission; document.getElementById('granted').onclick = app.hasPermission;
document.getElementById('request').onclick = app.askPermission; document.getElementById('request').onclick = app.askPermission;
document.getElementById('sched_single').onclick = app.scheduleSingle; document.getElementById('sched_single').onclick = app.scheduleSingle;
document.getElementById('sched_multi').onclick = app.scheduleMultiple; document.getElementById('sched_multi').onclick = app.scheduleMultiple;
document.getElementById('sched_delayed').onclick = app.scheduleDelayed; document.getElementById('sched_delayed').onclick = app.scheduleDelayed;
document.getElementById('sched_interval').onclick = app.scheduleInterval; document.getElementById('sched_interval').onclick = app.scheduleInterval;
document.getElementById('sched_actions').onclick = app.scheduleActions; document.getElementById('sched_actions').onclick = app.scheduleActions;
document.getElementById('clear_single').onclick = app.clearSingle; document.getElementById('update_text').onclick = app.update;
document.getElementById('clear_multi').onclick = app.clearMulti; document.getElementById('update_interval').onclick = app.updateInterval;
document.getElementById('clear_all').onclick = app.clearAll; document.getElementById('clear_single').onclick = app.clearSingle;
document.getElementById('cancel_single').onclick = app.cancelSingle; document.getElementById('clear_multi').onclick = app.clearMulti;
document.getElementById('cancel_multi').onclick = app.cancelMulti; document.getElementById('clear_all').onclick = app.clearAll;
document.getElementById('cancel_all').onclick = app.cancelAll; document.getElementById('cancel_single').onclick = app.cancelSingle;
document.getElementById('present?').onclick = app.isPresent; document.getElementById('cancel_multi').onclick = app.cancelMulti;
document.getElementById('scheduled?').onclick = app.isScheduled; document.getElementById('cancel_all').onclick = app.cancelAll;
document.getElementById('triggered?').onclick = app.isTriggered; document.getElementById('present?').onclick = app.isPresent;
document.getElementById('type').onclick = app.type; document.getElementById('scheduled?').onclick = app.isScheduled;
document.getElementById('ids').onclick = app.ids; document.getElementById('triggered?').onclick = app.isTriggered;
document.getElementById('scheduled_ids').onclick = app.scheduledIds; document.getElementById('type').onclick = app.type;
document.getElementById('triggered_ids').onclick = app.triggeredIds; document.getElementById('ids').onclick = app.ids;
document.getElementById('scheduled_nots').onclick = app.scheduledNots; document.getElementById('scheduled_ids').onclick = app.scheduledIds;
document.getElementById('triggered_nots').onclick = app.triggeredNots; document.getElementById('triggered_ids').onclick = app.triggeredIds;
document.getElementById('notification').onclick = app.notification; document.getElementById('scheduled_nots').onclick = app.scheduledNots;
document.getElementById('multiple_nots').onclick = app.multipleNots; document.getElementById('triggered_nots').onclick = app.triggeredNots;
document.getElementById('notifications').onclick = app.notifications; document.getElementById('notification').onclick = app.notification;
document.getElementById('defaults').onclick = app.setDefaultTitle; document.getElementById('multiple_nots').onclick = app.multipleNots;
document.getElementById('notifications').onclick = app.notifications;
document.getElementById('defaults').onclick = app.setDefaultTitle;
var details = cordova.plugins.notification.local.launchDetails; var details = cordova.plugins.notification.local.launchDetails;
...@@ -100,7 +102,8 @@ var app = { ...@@ -100,7 +102,8 @@ var app = {
scheduleSingle: function () { scheduleSingle: function () {
cordova.plugins.notification.local.schedule({ cordova.plugins.notification.local.schedule({
id: 1, id: 1,
text: 'Test Message 1', title: 'Test Message',
text: 'My first notification',
icon: 'http://3.bp.blogspot.com/-Qdsy-GpempY/UU_BN9LTqSI/AAAAAAAAAMA/LkwLW2yNBJ4/s1600/supersu.png', icon: 'http://3.bp.blogspot.com/-Qdsy-GpempY/UU_BN9LTqSI/AAAAAAAAAMA/LkwLW2yNBJ4/s1600/supersu.png',
smallIcon: 'res://cordova', smallIcon: 'res://cordova',
sound: null, sound: null,
...@@ -131,25 +134,25 @@ var app = { ...@@ -131,25 +134,25 @@ var app = {
var now = new Date().getTime(), var now = new Date().getTime(),
_5_sec_from_now = new Date(now + 5 * 1000); _5_sec_from_now = new Date(now + 5 * 1000);
var sound = device.platform == 'Android' ? 'file://sound.mp3' : 'file://beep.caf'; var sound = device.platform != 'iOS' ? 'file://sound.mp3' : 'file://beep.caf';
cordova.plugins.notification.local.schedule({ cordova.plugins.notification.local.schedule({
id: 1, id: 1,
title: 'Scheduled with delay', title: 'Scheduled with delay',
text: 'Test Message 1', text: 'Test Message 1',
at: _5_sec_from_now, trigger: _5_sec_from_now,
sound: sound, sound: sound,
badge: 12 badge: 12
}); });
}, },
// Schedule a repeating notification // Schedule a repeating notification
scheduleInterval: function () { scheduleInterval: function () {
var sound = device.platform == 'Android' ? 'file://sound.mp3' : 'file://beep.caf'; var sound = device.platform != 'iOS' ? 'file://sound.mp3' : 'file://beep.caf';
cordova.plugins.notification.local.schedule({ cordova.plugins.notification.local.schedule({
id: 1, id: 1,
text: 'Scheduled every minute', text: 'Scheduled every minute',
every: 'minute', trigger: { every: 'minute' },
sound: sound, sound: sound,
icon: 'res://icon', icon: 'res://icon',
smallIcon: 'res://ic_popup_sync' smallIcon: 'res://ic_popup_sync'
...@@ -160,6 +163,7 @@ var app = { ...@@ -160,6 +163,7 @@ var app = {
cordova.plugins.notification.local.schedule({ cordova.plugins.notification.local.schedule({
title: 'Local Notification Plugin', title: 'Local Notification Plugin',
text: 'Made by appPlant from Leipzig/Germany', text: 'Made by appPlant from Leipzig/Germany',
icon: 'file://img/avatar.jpg?crop=cirlce',
attachments: ['file://img/logo.png'], attachments: ['file://img/logo.png'],
actionGroupId: 'like-dislike', actionGroupId: 'like-dislike',
actions: [{ actions: [{
...@@ -181,6 +185,27 @@ var app = { ...@@ -181,6 +185,27 @@ var app = {
}] }]
}); });
}, },
// Update notification text
update: function () {
cordova.plugins.notification.local.update({
id: 1,
title: 'Updated Message 1',
text: 'New icon :)',
icon: 'res://icon',
color: 'FF0000',
attachments: ['file://img/logo.png'],
data: { updated: true }
});
},
// Update trigger interval
updateInterval: function () {
cordova.plugins.notification.local.update({
id: 1,
title: 'Updated Message 1',
text: 'Triggeres every minute',
every: 'minute'
});
},
// Clear a single notification // Clear a single notification
clearSingle: function () { clearSingle: function () {
cordova.plugins.notification.local.clear(1, app.ids); cordova.plugins.notification.local.clear(1, app.ids);
...@@ -298,7 +323,7 @@ var app = { ...@@ -298,7 +323,7 @@ var app = {
}); });
cordova.plugins.notification.local.on('update', function (obj) { cordova.plugins.notification.local.on('update', function (obj) {
console.log('update', arguments); console.log('update', arguments);
// showToast('updated: ' + obj.id); showToast('updated: ' + obj.id);
}); });
cordova.plugins.notification.local.on('trigger', function (obj) { cordova.plugins.notification.local.on('trigger', function (obj) {
console.log('trigger', arguments); console.log('trigger', arguments);
...@@ -371,7 +396,7 @@ showWinDialog = function (text) { ...@@ -371,7 +396,7 @@ showWinDialog = function (text) {
}; };
if (window.hasOwnProperty('Windows')) { if (window.hasOwnProperty('Windows')) {
alert = function (msg) { new Windows.UI.Popups.MessageDialog(msg).showAsync(); }; alert = showWinDialog;
} }
app.initialize(); app.initialize();
...@@ -23,7 +23,41 @@ ...@@ -23,7 +23,41 @@
var LocalNotification = LocalNotificationProxy.LocalNotification, var LocalNotification = LocalNotificationProxy.LocalNotification,
ActivationKind = Windows.ApplicationModel.Activation.ActivationKind; ActivationKind = Windows.ApplicationModel.Activation.ActivationKind;
var impl = new LocalNotificationProxy.LocalNotificationProxy(); var impl = new LocalNotificationProxy.LocalNotificationProxy(),
queue = [],
ready = false;
/**
* Set launchDetails object.
*
* @param [ Function ] success Success callback
* @param [ Function ] error Error callback
* @param [ Array ] args Interface arguments
*
* @return [ Void ]
*/
exports.launch = function (success, error, args) {
var plugin = cordova.plugins.notification.local;
if (args.length === 0 || plugin.launchDetails) return;
plugin.launchDetails = { id: args[0], action: args[1] };
};
/**
* To execute all queued events.
*
* @return [ Void ]
*/
exports.ready = function () {
ready = true;
for (var i = 0; i < queue.length; i++) {
exports.fireEvent.apply(exports, queue[i]);
}
queue = [];
};
/** /**
* Check permission to show notifications. * Check permission to show notifications.
...@@ -61,42 +95,45 @@ exports.request = function (success, error) { ...@@ -61,42 +95,45 @@ exports.request = function (success, error) {
* @return [ Void ] * @return [ Void ]
*/ */
exports.schedule = function (success, error, args) { exports.schedule = function (success, error, args) {
var options = [], actions = []; var options = [];
for (var i = 0, props, opts; i < args.length; i++) { for (var i = 0, props, opts; i < args.length; i++) {
props = args[i]; props = args[i];
opts = new LocalNotification.Options(); opts = exports.parseOptions(props);
options.push(opts);
for (var prop in opts) { }
if (prop != 'actions' && props[prop]) opts[prop] = props[prop];
}
for (var j = 0, action, btn; j < props.actions.length; j++) {
action = props.actions[j];
if (!action.type || action.type == 'button') { impl.schedule(options);
btn = new LocalNotification.Button();
} else
if (action.type == 'input') {
btn = new LocalNotification.Input();
}
for (prop in btn) { for (i = 0; i < options.length; i++) {
if (action[prop]) btn[prop] = action[prop]; exports.fireEvent('add', options[i]);
} }
actions.push(btn); success();
} };
opts.actions = actions; /**
* Update notifications.
*
* @param [ Function ] success Success callback
* @param [ Function ] error Error callback
* @param [ Array ] args Interface arguments
*
* @return [ Void ]
*/
exports.update = function (success, error, args) {
var options = [];
for (var i = 0, props, opts; i < args.length; i++) {
props = args[i];
opts = exports.parseOptions(props);
options.push(opts); options.push(opts);
} }
impl.schedule(options); impl.update(options);
for (i = 0; i < options.length; i++) { for (i = 0; i < options.length; i++) {
exports.fireEvent('add', options[i]); exports.fireEvent('update', options[i]);
} }
success(); success();
...@@ -299,6 +336,10 @@ exports.clicked = function (xml, input) { ...@@ -299,6 +336,10 @@ exports.clicked = function (xml, input) {
meta.text = input.first().current.value; meta.text = input.first().current.value;
} }
if (!ready) {
exports.launch(null, null, [toast.id, event]);
}
exports.fireEvent(event, toast, meta); exports.fireEvent(event, toast, meta);
}; };
...@@ -315,6 +356,11 @@ exports.fireEvent = function (event, toast, data) { ...@@ -315,6 +356,11 @@ exports.fireEvent = function (event, toast, data) {
var meta = Object.assign({ event: event }, data), var meta = Object.assign({ event: event }, data),
plugin = cordova.plugins.notification.local.core; plugin = cordova.plugins.notification.local.core;
if (!ready) {
queue.push(arguments);
return;
}
if (toast) { if (toast) {
plugin.fireEvent(event, exports.clone(toast), meta); plugin.fireEvent(event, exports.clone(toast), meta);
} else { } else {
...@@ -364,6 +410,109 @@ exports.clone = function (obj) { ...@@ -364,6 +410,109 @@ exports.clone = function (obj) {
return clone; return clone;
}; };
/**
* Parse notification spec into an instance of prefered type.
*
* @param [ Object ] obj The notification options map.
*
* @return [ LocalNotification.Options ]
*/
exports.parseOptions = function (obj) {
var opts = new LocalNotification.Options(),
ignore = ['progressBar', 'actions', 'trigger'];
for (var prop in opts) {
if (!ignore.includes(prop) && obj[prop]) {
opts[prop] = obj[prop];
}
}
var progressBar = exports.parseProgressBar(obj);
opts.progressBar = progressBar;
var trigger = exports.parseTrigger(obj);
opts.trigger = trigger;
var actions = exports.parseActions(obj);
opts.actions = actions;
return opts;
};
/**
* Parse trigger spec into instance of prefered type.
*
* @param [ Object ] obj The notification options map.
*
* @return [ LocalNotification.Trigger ]
*/
exports.parseTrigger = function (obj) {
var trigger = new LocalNotification.Trigger(),
spec = obj.trigger, val;
if (!spec) return trigger;
for (var prop in trigger) {
val = spec[prop];
if (!val) continue;
trigger[prop] = prop == 'every' ? val.toString() : val;
}
return trigger;
};
/**
* Parse action specs into instances of prefered types.
*
* @param [ Object ] obj The notification options map.
*
* @return [ Array<LocalNotification.Action> ]
*/
exports.parseActions = function (obj) {
var actions = [];
if (!obj.actions) return actions;
for (var i = 0, action, btn; i < obj.actions.length; i++) {
action = obj.actions[i];
if (!action.type || action.type == 'button') {
btn = new LocalNotification.Button();
} else
if (action.type == 'input') {
btn = new LocalNotification.Input();
}
for (var prop in btn) {
if (action[prop]) btn[prop] = action[prop];
}
actions.push(btn);
}
return actions;
};
/**
* Parse progressBar specs into instances of prefered types.
*
* @param [ Object ] obj The notification options map.
*
* @return [ LocalNotification.ProgressBar ]
*/
exports.parseProgressBar = function (obj) {
var bar = new LocalNotification.ProgressBar(),
spec = obj.progressBar;
if (!spec) return bar;
for (var prop in bar) {
if (spec[prop]) bar[prop] = spec[prop];
}
return bar;
};
// Handle onclick event // Handle onclick event
document.addEventListener('activated', function (e) { document.addEventListener('activated', function (e) {
if (e.kind == ActivationKind.toastNotification) { if (e.kind == ActivationKind.toastNotification) {
......
...@@ -84,41 +84,38 @@ exports.schedule = function (msgs, callback, scope, args) { ...@@ -84,41 +84,38 @@ exports.schedule = function (msgs, callback, scope, args) {
} }
}; };
// /** /**
// * Update existing notifications specified by IDs in options. * Schedule notifications.
// * *
// * @param {Object} notifications * @param [ Array ] notifications The notifications to schedule.
// * The notification properties to update * @param [ Function ] callback The function to be exec as the callback.
// * @param {Function} callback * @param [ Object ] scope The callback function's scope.
// * A function to be called after the notification has been updated * @param [ Object ] args Optional flags how to schedule.
// * @param {Object?} scope *
// * The scope for the callback function * @return [ Void ]
// * @param {Object?} args */
// * skipPermission:true schedules the notifications immediatly without exports.update = function (msgs, callback, scope, args) {
// * registering or checking for permission var fn = function(granted) {
// */
// exports.update = function (msgs, callback, scope, args) { if (!granted) return;
// var fn = function(granted) {
var notifications = Array.isArray(msgs) ? msgs : [msgs];
// if (!granted) return;
for (var i = 0; i < notifications.length; i++) {
// var notifications = Array.isArray(msgs) ? msgs : [msgs]; var notification = notifications[i];
// for (var i = 0; i < notifications.length; i++) { this.convertProperties(notification);
// var notification = notifications[i]; }
// this.convertProperties(notification); this.exec('update', notifications, callback, scope);
// } };
// this.exec('update', notifications, callback, scope); if (args && args.skipPermission) {
// }; fn.call(this, true);
} else {
// if (args && args.skipPermission) { this.requestPermission(fn, this);
// fn.call(this, true); }
// } else { };
// this.registerPermission(fn, this);
// }
// };
/** /**
* Clear the specified notifications by id. * Clear the specified notifications by id.
......
...@@ -29,14 +29,14 @@ exports._defaults = { ...@@ -29,14 +29,14 @@ exports._defaults = {
text: '', text: '',
title: '', title: '',
sound: 'res://platform_default', sound: 'res://platform_default',
trigger: 'date',
badge: undefined, badge: undefined,
data: undefined, data: undefined,
every: undefined, icon: undefined,
at: undefined, trigger: { type: 'calendar' },
actions: [], actions: [],
actionGroupId: undefined, actionGroupId: undefined,
attachments: [] attachments: [],
progressBar: false
}; };
// Listener // Listener
...@@ -59,12 +59,6 @@ exports.applyPlatformSpecificOptions = function () { ...@@ -59,12 +59,6 @@ exports.applyPlatformSpecificOptions = function () {
defaults.led = undefined; defaults.led = undefined;
defaults.color = undefined; defaults.color = undefined;
break; break;
case 'iOS':
defaults.region = undefined;
defaults.radius = undefined;
defaults.notifyOnEntry = true;
defaults.notifyOnExit = false;
break;
} }
}; };
...@@ -78,7 +72,6 @@ exports.applyPlatformSpecificOptions = function () { ...@@ -78,7 +72,6 @@ exports.applyPlatformSpecificOptions = function () {
exports.mergeWithDefaults = function (options) { exports.mergeWithDefaults = function (options) {
var defaults = this.getDefaults(); var defaults = this.getDefaults();
options.at = this.getValueFor(options, 'at', 'firstAt', 'date');
options.text = this.getValueFor(options, 'text', 'message'); options.text = this.getValueFor(options, 'text', 'message');
options.data = this.getValueFor(options, 'data', 'json'); options.data = this.getValueFor(options, 'data', 'json');
...@@ -90,10 +83,6 @@ exports.mergeWithDefaults = function (options) { ...@@ -90,10 +83,6 @@ exports.mergeWithDefaults = function (options) {
options.autoClear = false; options.autoClear = false;
} }
if (options.at === undefined || options.at === null) {
options.at = new Date();
}
for (var key in defaults) { for (var key in defaults) {
if (options[key] === null || options[key] === undefined) { if (options[key] === null || options[key] === undefined) {
if (options.hasOwnProperty(key) && ['data','sound'].indexOf(key) > -1) { if (options.hasOwnProperty(key) && ['data','sound'].indexOf(key) > -1) {
...@@ -106,7 +95,7 @@ exports.mergeWithDefaults = function (options) { ...@@ -106,7 +95,7 @@ exports.mergeWithDefaults = function (options) {
for (key in options) { for (key in options) {
if (!defaults.hasOwnProperty(key)) { if (!defaults.hasOwnProperty(key)) {
delete options[key]; // delete options[key];
console.warn('Unknown property: ' + key); console.warn('Unknown property: ' + key);
} }
} }
...@@ -149,21 +138,13 @@ exports.convertProperties = function (options) { ...@@ -149,21 +138,13 @@ exports.convertProperties = function (options) {
} }
} }
if (options.at) {
if (typeof options.at == 'object') {
options.at = options.at.getTime();
}
options.at = Math.round(options.at/1000);
}
if (typeof options.data == 'object') { if (typeof options.data == 'object') {
options.data = JSON.stringify(options.data); options.data = JSON.stringify(options.data);
} }
if (options.actions) { this.convertTrigger(options);
this.convertActions(options); this.convertActions(options);
} this.convertProgressBar(options);
return options; return options;
}; };
...@@ -199,6 +180,82 @@ exports.convertActions = function (options) { ...@@ -199,6 +180,82 @@ exports.convertActions = function (options) {
options.category = (options.category || 'DEFAULT_GROUP').toString(); options.category = (options.category || 'DEFAULT_GROUP').toString();
options.actions = actions; options.actions = actions;
return options;
};
/**
* Convert the passed values for the trigger to their required type.
*
* @param [ Map ] options Set of custom values.
*
* @return [ Map ] Interaction object with trigger spec.
*/
exports.convertTrigger = function (options) {
var cfg = options.trigger,
isDate = Date.prototype.isPrototypeOf(cfg),
isObject = Object.prototype.isPrototypeOf(cfg),
trigger = !isDate && isObject ? cfg : {},
date = this.getValueFor(trigger, 'at', 'firstAt', 'date');
if (!trigger.type) {
trigger.type = trigger.center ? 'location' : 'calendar';
}
var isCal = trigger.type == 'calendar';
if (isCal && !date) {
date = this.getValueFor(options, 'at', 'firstAt', 'date') || new Date();
}
if (isCal) {
date = typeof date == 'object' ? date.getTime() : date;
trigger.at = Math.round(date / 1000);
}
if (isCal && !trigger.every && options.every) {
trigger.every = options.every;
}
if (!trigger.count && device.platform == 'windows') {
trigger.count = trigger.every ? 5 : 1;
}
if (trigger.every && device.platform == 'windows') {
trigger.every = trigger.every.toString();
}
if (!isCal) {
trigger.notifyOnEntry = !!trigger.notifyOnEntry;
trigger.notifyOnExit = trigger.notifyOnExit === true;
trigger.radius = trigger.radius || 5;
}
delete options.every;
delete options.at;
delete options.firstAt;
delete options.date;
options.trigger = trigger;
return options;
};
/**
* Convert the passed values for the progressBar to their required type.
*
* @param [ Map ] options Set of custom values.
*
* @return [ Map ] Interaction object with trigger spec.
*/
exports.convertProgressBar = function (options) {
var cfg = options.progressBar;
if (typeof cfg === 'boolean') {
options.progressBar = { enabled: cfg };
}
return options;
}; };
/** /**
...@@ -306,13 +363,13 @@ exports.exec = function (action, args, callback, scope) { ...@@ -306,13 +363,13 @@ exports.exec = function (action, args, callback, scope) {
channel.deviceready.subscribe(function () { channel.deviceready.subscribe(function () {
// Device is ready now, the listeners are registered // Device is ready now, the listeners are registered
// and all queued events can be executed. // and all queued events can be executed.
exports.exec('deviceready'); exports.exec('ready');
}); });
// Called before 'deviceready' event // Called before 'deviceready' event
channel.onCordovaReady.subscribe(function () { channel.onCordovaReady.subscribe(function () {
// Set launchDetails object // Set launchDetails object
exports.exec('launchDetails'); exports.exec('launch');
// Device plugin is ready now // Device plugin is ready now
channel.onCordovaInfoReady.subscribe(function () { channel.onCordovaInfoReady.subscribe(function () {
// Merge platform specifics into defaults // Merge platform specifics into defaults
......
...@@ -58,22 +58,19 @@ exports.schedule = function (notifications, callback, scope, args) { ...@@ -58,22 +58,19 @@ exports.schedule = function (notifications, callback, scope, args) {
this.core.schedule(notifications, callback, scope, args); this.core.schedule(notifications, callback, scope, args);
}; };
// /** /**
// * Update existing notifications specified by IDs in options. * Update notifications.
// * *
// * @param {Object} notifications * @param [ Array ] notifications The notifications to schedule.
// * The notification properties to update * @param [ Function ] callback The function to be exec as the callback.
// * @param {Function} callback * @param [ Object ] scope The callback function's scope.
// * A function to be called after the notification has been updated * @param [ Object ] args Optional flags how to schedule.
// * @param {Object?} scope *
// * The scope for the callback function * @return [ Void ]
// * @param {Object?} args */
// * skipPermission:true schedules the notifications immediatly without exports.update = function (notifications, callback, scope, args) {
// * registering or checking for permission this.core.update(notifications, callback, scope, args);
// */ };
// exports.update = function (notifications, callback, scope, args) {
// this.core.update(notifications, callback, scope, args);
// };
/** /**
* Clear the specified notifications by id. * Clear the specified notifications by id.
......
{ {
"name": "de.appplant.cordova.plugin.local-notification", "name": "cordova-plugin-local-notifications",
"cordova_name": "Cordova LocalNotification Plugin", "version": "0.0.0",
"version": "0.8.5",
"description": "Schedules and queries for local notifications", "description": "Schedules and queries for local notifications",
"scripts": { "cordova": {
"test": "echo \"Error: no test specified\" && exit 1" "id": "cordova-plugin-local-notifications",
"platforms": [
"ios",
"windows"
]
}, },
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git+https://github.com/katzer/cordova-plugin-local-notifications.git#ios10" "url": "git+https://github.com/katzer/cordova-plugin-local-notifications.git#x"
}, },
"keywords": [ "keywords": [
"appplant", "appplant",
"notification", "notification",
"local notification", "local notification",
"cordova", "user notification",
"ecosystem:cordova", "ecosystem:cordova",
"cordova-android",
"cordova-ios", "cordova-ios",
"cordova-windows" "cordova-windows"
], ],
"platforms": [
"ios",
"android",
"windows"
],
"engines": [ "engines": [
{ {
"name": "cordova", "name": "cordova",
...@@ -37,14 +34,14 @@ ...@@ -37,14 +34,14 @@
{ {
"name": "cordova-windows", "name": "cordova-windows",
"version": ">=4.2.0" "version": ">=4.2.0"
},
{
"name": "apple-ios",
"version": ">=10.0.0"
} }
], ],
"dependencies": {
"cordova-plugin-device": "*",
"cordova-plugin-app-event": ">=1.1.0"
},
"author": "Sebastián Katzer", "author": "Sebastián Katzer",
"license": "Apache-2.0", "license": "Apache 2.0",
"bugs": { "bugs": {
"url": "https://github.com/katzer/cordova-plugin-local-notifications/issues" "url": "https://github.com/katzer/cordova-plugin-local-notifications/issues"
}, },
......
...@@ -26,9 +26,9 @@ ...@@ -26,9 +26,9 @@
@interface APPLocalNotification : CDVPlugin <UNUserNotificationCenterDelegate> @interface APPLocalNotification : CDVPlugin <UNUserNotificationCenterDelegate>
// Set launchDetails object // Set launchDetails object
- (void) launchDetails:(CDVInvokedUrlCommand*)command; - (void) launch:(CDVInvokedUrlCommand*)command;
// Execute all queued events // Execute all queued events
- (void) deviceready:(CDVInvokedUrlCommand*)command; - (void) ready:(CDVInvokedUrlCommand*)command;
// Check permission to show notifications // Check permission to show notifications
- (void) check:(CDVInvokedUrlCommand*)command; - (void) check:(CDVInvokedUrlCommand*)command;
...@@ -40,8 +40,8 @@ ...@@ -40,8 +40,8 @@
// Schedule notifications // Schedule notifications
- (void) schedule:(CDVInvokedUrlCommand*)command; - (void) schedule:(CDVInvokedUrlCommand*)command;
//// Update set of notifications // Update set of notifications
//- (void) update:(CDVInvokedUrlCommand*)command; - (void) update:(CDVInvokedUrlCommand*)command;
// Clear notifications by id // Clear notifications by id
- (void) clear:(CDVInvokedUrlCommand*)command; - (void) clear:(CDVInvokedUrlCommand*)command;
// Clear all notifications // Clear all notifications
......
...@@ -47,13 +47,12 @@ ...@@ -47,13 +47,12 @@
* *
* @return [ Void ] * @return [ Void ]
*/ */
- (void) launchDetails:(CDVInvokedUrlCommand*)command - (void) launch:(CDVInvokedUrlCommand*)command
{ {
if (!_launchDetails) if (!_launchDetails)
return; return;
NSString* js; NSString* js;
js = [NSString stringWithFormat: js = [NSString stringWithFormat:
@"cordova.plugins.notification.local.launchDetails = {id:%@, action:'%@'}", @"cordova.plugins.notification.local.launchDetails = {id:%@, action:'%@'}",
_launchDetails[0], _launchDetails[1]]; _launchDetails[0], _launchDetails[1]];
...@@ -68,7 +67,7 @@ ...@@ -68,7 +67,7 @@
* *
* @return [ Void ] * @return [ Void ]
*/ */
- (void) deviceready:(CDVInvokedUrlCommand*)command - (void) ready:(CDVInvokedUrlCommand*)command
{ {
deviceready = YES; deviceready = YES;
...@@ -104,60 +103,36 @@ ...@@ -104,60 +103,36 @@
}]; }];
} }
///** /**
// * Update a set of notifications. * Update notifications.
// * *
// * @param properties * @param [Array<Hash>] properties A list of key-value properties.
// * A dict of properties for each notification *
// */ * @return [ Void ]
//- (void) update:(CDVInvokedUrlCommand*)command */
//{ - (void) update:(CDVInvokedUrlCommand*)command
// NSArray* notifications = command.arguments; {
// NSArray* notifications = command.arguments;
// [self.commandDelegate runInBackground:^{
// if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"10.0")) { [self.commandDelegate runInBackground:^{
// for (NSDictionary* options in notifications) { for (NSDictionary* options in notifications) {
// NSNumber* id = [options objectForKey:@"id"]; NSNumber* id = [options objectForKey:@"id"];
// UNNotificationRequest* notification; UNNotificationRequest* notification;
//
// notification = [_center getNotificationWithId:id]; notification = [_center getNotificationWithId:id];
//
// if (!notification) if (!notification)
// continue; continue;
//
// // [self updateNotification:[notification copy] [self updateNotification:[notification copy]
// // withOptions:options]; withOptions:options];
// //
// // [self fireEvent:@"update" notification:notification]; [self fireEvent:@"update" notification:notification];
// // }
// // if (notifications.count > 1) {
// // [NSThread sleepForTimeInterval:0.01]; [self execCallback:command];
// // } }];
// } }
// } else {
// for (NSDictionary* options in notifications) {
// NSNumber* id = [options objectForKey:@"id"];
// UILocalNotification* notification;
//
// notification = [_app localNotificationWithId:id];
//
// if (!notification)
// continue;
//
// [self updateLocalNotification:[notification copy]
// withOptions:options];
//
// [self fireEvent:@"update" localnotification:notification];
//
// if (notifications.count > 1) {
// [NSThread sleepForTimeInterval:0.01];
// }
// }
// }
//
// [self execCallback:command];
// }];
//}
/** /**
* Clear notifications by id. * Clear notifications by id.
...@@ -264,7 +239,7 @@ ...@@ -264,7 +239,7 @@
default: default:
type = @"unknown"; type = @"unknown";
} }
CDVPluginResult* result; CDVPluginResult* result;
result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK
messageAsString:type]; messageAsString:type];
...@@ -340,11 +315,11 @@ ...@@ -340,11 +315,11 @@
NSArray* notifications; NSArray* notifications;
notifications = [_center getNotificationOptionsById:ids]; notifications = [_center getNotificationOptionsById:ids];
CDVPluginResult* result; CDVPluginResult* result;
result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK
messageAsDictionary:[notifications firstObject]]; messageAsDictionary:[notifications firstObject]];
[self.commandDelegate sendPluginResult:result [self.commandDelegate sendPluginResult:result
callbackId:command.callbackId]; callbackId:command.callbackId];
}]; }];
...@@ -476,36 +451,46 @@ ...@@ -476,36 +451,46 @@
/** /**
* Schedule the local notification. * Schedule the local notification.
*
* @param [ APPNotificationContent* ] notification The notification to schedule.
*
* @return [ Void ]
*/ */
- (void) scheduleNotification:(APPNotificationContent*)notification - (void) scheduleNotification:(APPNotificationContent*)notification
{ {
__weak APPLocalNotification* weakSelf = self; __weak APPLocalNotification* weakSelf = self;
UNNotificationRequest* request = notification.request; UNNotificationRequest* request = notification.request;
NSString* event = [notification.request wasUpdated] ? @"update" : @"add";
[_center addNotificationCategory:notification.category]; [_center addNotificationCategory:notification.category];
[_center addNotificationRequest:request withCompletionHandler:^(NSError* e) { [_center addNotificationRequest:request withCompletionHandler:^(NSError* e) {
__strong APPLocalNotification* strongSelf = weakSelf; __strong APPLocalNotification* strongSelf = weakSelf;
[strongSelf fireEvent:@"add" notification:request]; [strongSelf fireEvent:event notification:request];
}]; }];
} }
///** /**
// * Update the local notification. * Update the local notification.
// */ *
//- (void) updateNotification:(UILocalNotification*)notification * @param [ UNNotificationRequest* ] notification The notification to update.
// withOptions:(NSDictionary*)newOptions * @param [ NSDictionary* ] options The options to update.
//{APPNotificationRequest* *
// NSMutableDictionary* options = [notification.userInfo mutableCopy]; * @return [ Void ]
// */
// [options addEntriesFromDictionary:newOptions]; - (void) updateNotification:(UNNotificationRequest*)notification
// [options setObject:[NSDate date] forKey:@"updatedAt"]; withOptions:(NSDictionary*)newOptions
// {
//// notification = [[UILocalNotification alloc] NSMutableDictionary* options = [notification.content.userInfo mutableCopy];
//// initWithOptions:options];
//// [options addEntriesFromDictionary:newOptions];
//// [self scheduleLocalNotification:notification]; [options setObject:[NSDate date] forKey:@"updatedAt"];
//}
APPNotificationContent*
newNotification = [[APPNotificationContent alloc] initWithOptions:options];
[self scheduleNotification:newNotification];
}
#pragma mark - #pragma mark -
#pragma mark UNUserNotificationCenterDelegate #pragma mark UNUserNotificationCenterDelegate
...@@ -517,8 +502,15 @@ ...@@ -517,8 +502,15 @@
willPresentNotification:(UNNotification *)notification willPresentNotification:(UNNotification *)notification
withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler
{ {
[self fireEvent:@"trigger" notification:notification.request]; if (![notification.request wasUpdated]) {
completionHandler(UNNotificationPresentationOptionBadge|UNNotificationPresentationOptionSound|UNNotificationPresentationOptionAlert); [self fireEvent:@"trigger" notification:notification.request];
}
if (notification.request.options.silent) {
completionHandler(UNNotificationPresentationOptionNone);
} else {
completionHandler(UNNotificationPresentationOptionBadge|UNNotificationPresentationOptionSound|UNNotificationPresentationOptionAlert);
}
} }
/** /**
......
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
@property (readonly, getter=subtitle) NSString* subtitle; @property (readonly, getter=subtitle) NSString* subtitle;
@property (readonly, getter=badge) NSNumber* badge; @property (readonly, getter=badge) NSNumber* badge;
@property (readonly, getter=text) NSString* text; @property (readonly, getter=text) NSString* text;
@property (readonly, getter=silent) BOOL silent;
@property (readonly, getter=sound) UNNotificationSound* sound; @property (readonly, getter=sound) UNNotificationSound* sound;
@property (readonly, getter=userInfo) NSDictionary* userInfo; @property (readonly, getter=userInfo) NSDictionary* userInfo;
@property (readonly, getter=actions) NSArray<UNNotificationAction *> * actions; @property (readonly, getter=actions) NSArray<UNNotificationAction *> * actions;
......
...@@ -61,18 +61,6 @@ ...@@ -61,18 +61,6 @@
#pragma mark Properties #pragma mark Properties
/** /**
* The type for the notification.
*
* @return [ NSString* ]
*/
- (NSString*) triggerType
{
NSString* type = [dict objectForKey:@"trigger"];
return type.length ? type : @"normal";
}
/**
* The ID for the notification. * The ID for the notification.
* *
* @return [ NSNumber* ] * @return [ NSNumber* ]
...@@ -127,6 +115,16 @@ ...@@ -127,6 +115,16 @@
} }
/** /**
* Show notification in foreground.
*
* @return [ BOOL ]
*/
- (BOOL) silent
{
return [[dict objectForKey:@"silent"] boolValue];
}
/**
* The badge number for the notification. * The badge number for the notification.
* *
* @return [ NSNumber* ] * @return [ NSNumber* ]
...@@ -280,12 +278,12 @@ ...@@ -280,12 +278,12 @@
*/ */
- (UNNotificationTrigger*) trigger - (UNNotificationTrigger*) trigger
{ {
NSString* type = [self triggerType]; NSString* type = [self valueForTriggerOption:@"type"];
if ([type isEqualToString:@"location"]) if ([type isEqualToString:@"location"])
return [self triggerWithRegion]; return [self triggerWithRegion];
if (![type isEqualToString:@"date"]) if (![type isEqualToString:@"calendar"])
NSLog(@"Unknown type: %@", type); NSLog(@"Unknown type: %@", type);
if ([self isRepeating]) if ([self isRepeating])
...@@ -315,6 +313,11 @@ ...@@ -315,6 +313,11 @@
#pragma mark - #pragma mark -
#pragma mark Private #pragma mark Private
- (id) valueForTriggerOption:(NSString*)key
{
return [[dict objectForKey:@"trigger"] objectForKey:key];
}
/** /**
* The date when to fire the notification. * The date when to fire the notification.
* *
...@@ -322,8 +325,7 @@ ...@@ -322,8 +325,7 @@
*/ */
- (NSDate*) triggerDate - (NSDate*) triggerDate
{ {
double timestamp = [[dict objectForKey:@"at"] double timestamp = [[self valueForTriggerOption:@"at"] doubleValue];
doubleValue];
return [NSDate dateWithTimeIntervalSince1970:timestamp]; return [NSDate dateWithTimeIntervalSince1970:timestamp];
} }
...@@ -335,7 +337,7 @@ ...@@ -335,7 +337,7 @@
*/ */
- (BOOL) isRepeating - (BOOL) isRepeating
{ {
id every = [dict objectForKey:@"every"]; id every = [self valueForTriggerOption:@"every"];
if ([every isKindOfClass:NSString.class]) if ([every isKindOfClass:NSString.class])
return ((NSString*) every).length > 0; return ((NSString*) every).length > 0;
...@@ -364,7 +366,7 @@ ...@@ -364,7 +366,7 @@
*/ */
- (UNNotificationTrigger*) repeatingTrigger - (UNNotificationTrigger*) repeatingTrigger
{ {
id every = [dict objectForKey:@"every"]; id every = [self valueForTriggerOption:@"every"];
if ([every isKindOfClass:NSString.class]) if ([every isKindOfClass:NSString.class])
return [self triggerWithDateMatchingComponents]; return [self triggerWithDateMatchingComponents];
...@@ -382,7 +384,7 @@ ...@@ -382,7 +384,7 @@
*/ */
- (UNTimeIntervalNotificationTrigger*) triggerWithTimeInterval - (UNTimeIntervalNotificationTrigger*) triggerWithTimeInterval
{ {
long interval = [[dict objectForKey:@"every"] longValue]; long interval = [[self valueForTriggerOption:@"every"] longValue];
if (interval < 60) { if (interval < 60) {
NSLog(@"time interval must be at least 60 if repeating"); NSLog(@"time interval must be at least 60 if repeating");
...@@ -438,8 +440,8 @@ ...@@ -438,8 +440,8 @@
*/ */
- (UNLocationNotificationTrigger*) triggerWithRegion - (UNLocationNotificationTrigger*) triggerWithRegion
{ {
NSArray* center = [dict objectForKey:@"center"]; NSArray* center = [self valueForTriggerOption:@"center"];
double radius = [[dict objectForKey:@"radius"] doubleValue]; double radius = [[self valueForTriggerOption:@"radius"] doubleValue];
CLLocationCoordinate2D coord = CLLocationCoordinate2D coord =
CLLocationCoordinate2DMake([center[0] doubleValue], [center[1] doubleValue]); CLLocationCoordinate2DMake([center[0] doubleValue], [center[1] doubleValue]);
...@@ -449,8 +451,8 @@ ...@@ -449,8 +451,8 @@
radius:radius radius:radius
identifier:self.identifier]; identifier:self.identifier];
region.notifyOnEntry = [[dict objectForKey:@"notifyOnEntry"] boolValue]; region.notifyOnEntry = [[self valueForTriggerOption:@"notifyOnEntry"] boolValue];
region.notifyOnExit = [[dict objectForKey:@"notifyOnExit"] boolValue]; region.notifyOnExit = [[self valueForTriggerOption:@"notifyOnExit"] boolValue];
return [UNLocationNotificationTrigger triggerWithRegion:region repeats:YES]; return [UNLocationNotificationTrigger triggerWithRegion:region repeats:YES];
} }
...@@ -472,7 +474,7 @@ ...@@ -472,7 +474,7 @@
*/ */
- (NSCalendarUnit) repeatInterval - (NSCalendarUnit) repeatInterval
{ {
NSString* interval = [dict objectForKey:@"every"]; NSString* interval = [self valueForTriggerOption:@"every"];
NSCalendarUnit units = NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay|NSCalendarUnitHour|NSCalendarUnitMinute|NSCalendarUnitSecond; NSCalendarUnit units = NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay|NSCalendarUnitHour|NSCalendarUnitMinute|NSCalendarUnitSecond;
if ([interval isEqualToString:@"minute"]) if ([interval isEqualToString:@"minute"])
...@@ -504,7 +506,7 @@ ...@@ -504,7 +506,7 @@
- (NSDateComponents*) customDateComponents - (NSDateComponents*) customDateComponents
{ {
NSDateComponents* date = [[NSDateComponents alloc] init]; NSDateComponents* date = [[NSDateComponents alloc] init];
NSDictionary* every = [dict objectForKey:@"every"]; NSDictionary* every = [self valueForTriggerOption:@"every"];
for (NSString* key in every) { for (NSString* key in every) {
long value = [[every valueForKey:key] longValue]; long value = [[every valueForKey:key] longValue];
......
...@@ -27,6 +27,8 @@ ...@@ -27,6 +27,8 @@
// The options provided by the plug-in // The options provided by the plug-in
- (APPNotificationOptions*) options; - (APPNotificationOptions*) options;
// If the notification was updated
- (BOOL) wasUpdated;
// Encode the user info dict to JSON // Encode the user info dict to JSON
- (NSString*) encodeToJSON; - (NSString*) encodeToJSON;
......
...@@ -65,6 +65,16 @@ static char optionsKey; ...@@ -65,6 +65,16 @@ static char optionsKey;
} }
/** /**
* If the notification was updated.
*
* @return [ BOOL ]
*/
- (BOOL) wasUpdated
{
return [self.content userInfo][@"updatedAt"] != NULL;
}
/**
* Encode the user info dict to JSON. * Encode the user info dict to JSON.
*/ */
- (NSString*) encodeToJSON - (NSString*) encodeToJSON
......
...@@ -22,7 +22,41 @@ ...@@ -22,7 +22,41 @@
var LocalNotification = LocalNotificationProxy.LocalNotification, var LocalNotification = LocalNotificationProxy.LocalNotification,
ActivationKind = Windows.ApplicationModel.Activation.ActivationKind; ActivationKind = Windows.ApplicationModel.Activation.ActivationKind;
var impl = new LocalNotificationProxy.LocalNotificationProxy(); var impl = new LocalNotificationProxy.LocalNotificationProxy(),
queue = [],
ready = false;
/**
* Set launchDetails object.
*
* @param [ Function ] success Success callback
* @param [ Function ] error Error callback
* @param [ Array ] args Interface arguments
*
* @return [ Void ]
*/
exports.launch = function (success, error, args) {
var plugin = cordova.plugins.notification.local;
if (args.length === 0 || plugin.launchDetails) return;
plugin.launchDetails = { id: args[0], action: args[1] };
};
/**
* To execute all queued events.
*
* @return [ Void ]
*/
exports.ready = function () {
ready = true;
for (var i = 0; i < queue.length; i++) {
exports.fireEvent.apply(exports, queue[i]);
}
queue = [];
};
/** /**
* Check permission to show notifications. * Check permission to show notifications.
...@@ -60,42 +94,45 @@ exports.request = function (success, error) { ...@@ -60,42 +94,45 @@ exports.request = function (success, error) {
* @return [ Void ] * @return [ Void ]
*/ */
exports.schedule = function (success, error, args) { exports.schedule = function (success, error, args) {
var options = [], actions = []; var options = [];
for (var i = 0, props, opts; i < args.length; i++) { for (var i = 0, props, opts; i < args.length; i++) {
props = args[i]; props = args[i];
opts = new LocalNotification.Options(); opts = exports.parseOptions(props);
options.push(opts);
for (var prop in opts) { }
if (prop != 'actions' && props[prop]) opts[prop] = props[prop];
}
for (var j = 0, action, btn; j < props.actions.length; j++) {
action = props.actions[j];
if (!action.type || action.type == 'button') { impl.schedule(options);
btn = new LocalNotification.Button();
} else
if (action.type == 'input') {
btn = new LocalNotification.Input();
}
for (prop in btn) { for (i = 0; i < options.length; i++) {
if (action[prop]) btn[prop] = action[prop]; exports.fireEvent('add', options[i]);
} }
actions.push(btn); success();
} };
opts.actions = actions; /**
* Update notifications.
*
* @param [ Function ] success Success callback
* @param [ Function ] error Error callback
* @param [ Array ] args Interface arguments
*
* @return [ Void ]
*/
exports.update = function (success, error, args) {
var options = [];
for (var i = 0, props, opts; i < args.length; i++) {
props = args[i];
opts = exports.parseOptions(props);
options.push(opts); options.push(opts);
} }
impl.schedule(options); impl.update(options);
for (i = 0; i < options.length; i++) { for (i = 0; i < options.length; i++) {
exports.fireEvent('add', options[i]); exports.fireEvent('update', options[i]);
} }
success(); success();
...@@ -298,6 +335,10 @@ exports.clicked = function (xml, input) { ...@@ -298,6 +335,10 @@ exports.clicked = function (xml, input) {
meta.text = input.first().current.value; meta.text = input.first().current.value;
} }
if (!ready) {
exports.launch(null, null, [toast.id, event]);
}
exports.fireEvent(event, toast, meta); exports.fireEvent(event, toast, meta);
}; };
...@@ -314,6 +355,11 @@ exports.fireEvent = function (event, toast, data) { ...@@ -314,6 +355,11 @@ exports.fireEvent = function (event, toast, data) {
var meta = Object.assign({ event: event }, data), var meta = Object.assign({ event: event }, data),
plugin = cordova.plugins.notification.local.core; plugin = cordova.plugins.notification.local.core;
if (!ready) {
queue.push(arguments);
return;
}
if (toast) { if (toast) {
plugin.fireEvent(event, exports.clone(toast), meta); plugin.fireEvent(event, exports.clone(toast), meta);
} else { } else {
...@@ -363,6 +409,109 @@ exports.clone = function (obj) { ...@@ -363,6 +409,109 @@ exports.clone = function (obj) {
return clone; return clone;
}; };
/**
* Parse notification spec into an instance of prefered type.
*
* @param [ Object ] obj The notification options map.
*
* @return [ LocalNotification.Options ]
*/
exports.parseOptions = function (obj) {
var opts = new LocalNotification.Options(),
ignore = ['progressBar', 'actions', 'trigger'];
for (var prop in opts) {
if (!ignore.includes(prop) && obj[prop]) {
opts[prop] = obj[prop];
}
}
var progressBar = exports.parseProgressBar(obj);
opts.progressBar = progressBar;
var trigger = exports.parseTrigger(obj);
opts.trigger = trigger;
var actions = exports.parseActions(obj);
opts.actions = actions;
return opts;
};
/**
* Parse trigger spec into instance of prefered type.
*
* @param [ Object ] obj The notification options map.
*
* @return [ LocalNotification.Trigger ]
*/
exports.parseTrigger = function (obj) {
var trigger = new LocalNotification.Trigger(),
spec = obj.trigger, val;
if (!spec) return trigger;
for (var prop in trigger) {
val = spec[prop];
if (!val) continue;
trigger[prop] = prop == 'every' ? val.toString() : val;
}
return trigger;
};
/**
* Parse action specs into instances of prefered types.
*
* @param [ Object ] obj The notification options map.
*
* @return [ Array<LocalNotification.Action> ]
*/
exports.parseActions = function (obj) {
var actions = [];
if (!obj.actions) return actions;
for (var i = 0, action, btn; i < obj.actions.length; i++) {
action = obj.actions[i];
if (!action.type || action.type == 'button') {
btn = new LocalNotification.Button();
} else
if (action.type == 'input') {
btn = new LocalNotification.Input();
}
for (var prop in btn) {
if (action[prop]) btn[prop] = action[prop];
}
actions.push(btn);
}
return actions;
};
/**
* Parse progressBar specs into instances of prefered types.
*
* @param [ Object ] obj The notification options map.
*
* @return [ LocalNotification.ProgressBar ]
*/
exports.parseProgressBar = function (obj) {
var bar = new LocalNotification.ProgressBar(),
spec = obj.progressBar;
if (!spec) return bar;
for (var prop in bar) {
if (spec[prop]) bar[prop] = spec[prop];
}
return bar;
};
// Handle onclick event // Handle onclick event
document.addEventListener('activated', function (e) { document.addEventListener('activated', function (e) {
if (e.kind == ActivationKind.toastNotification) { if (e.kind == ActivationKind.toastNotification) {
......
...@@ -30,22 +30,27 @@ namespace LocalNotificationProxy.LocalNotification ...@@ -30,22 +30,27 @@ namespace LocalNotificationProxy.LocalNotification
/// Initializes a new instance of the <see cref="Builder"/> class. /// Initializes a new instance of the <see cref="Builder"/> class.
/// </summary> /// </summary>
/// <param name="options">Notification properties to set.</param> /// <param name="options">Notification properties to set.</param>
internal Builder(Options options) public Builder(Options options)
{ {
this.Content = new Notification(options); this.Content = new Notification(options);
} }
/// <summary> /// <summary>
/// Gets content /// Gets the content.
/// </summary> /// </summary>
public Notification Content { get; private set; } public Notification Content { get; private set; }
/// <summary> /// <summary>
/// Gets options /// Gets the options.
/// </summary> /// </summary>
private Options Options { get => this.Content.Options; } private Options Options { get => this.Content.Options; }
/// <summary> /// <summary>
/// Gets the trigger.
/// </summary>
private Trigger Trigger { get => this.Options.Trigger; }
/// <summary>
/// Build a toast notification specified by the options. /// Build a toast notification specified by the options.
/// </summary> /// </summary>
/// <returns>A fully configured toast notification instance.</returns> /// <returns>A fully configured toast notification instance.</returns>
...@@ -53,6 +58,7 @@ namespace LocalNotificationProxy.LocalNotification ...@@ -53,6 +58,7 @@ namespace LocalNotificationProxy.LocalNotification
{ {
var toast = this.InitToast(); var toast = this.InitToast();
this.AddProgressBarToToast(toast);
this.AddAttachmentsToToast(toast); this.AddAttachmentsToToast(toast);
this.AddActionsToToast(toast); this.AddActionsToToast(toast);
...@@ -60,6 +66,17 @@ namespace LocalNotificationProxy.LocalNotification ...@@ -60,6 +66,17 @@ namespace LocalNotificationProxy.LocalNotification
} }
/// <summary> /// <summary>
/// If there is at least one more toast variant to build.
/// </summary>
/// <returns>True if there are more toasts to build.</returns>
public bool HasNext() => this.Trigger.Count > this.Trigger.Occurrence;
/// <summary>
/// Moves the flag to the next toast variant.
/// </summary>
public void MoveNext() => this.Trigger.Occurrence += this.HasNext() ? 1 : 0;
/// <summary>
/// Gets the initialize skeleton for a toast notification. /// Gets the initialize skeleton for a toast notification.
/// </summary> /// </summary>
/// <returns>Basic skeleton with sound, image and text.</returns> /// <returns>Basic skeleton with sound, image and text.</returns>
...@@ -87,7 +104,7 @@ namespace LocalNotificationProxy.LocalNotification ...@@ -87,7 +104,7 @@ namespace LocalNotificationProxy.LocalNotification
} }
}, },
AppLogoOverride = this.Content.Image AppLogoOverride = this.Content.Icon
} }
}, },
...@@ -100,6 +117,20 @@ namespace LocalNotificationProxy.LocalNotification ...@@ -100,6 +117,20 @@ namespace LocalNotificationProxy.LocalNotification
} }
/// <summary> /// <summary>
/// Adds optional progress bar to the toast.
/// </summary>
/// <param name="toast">Tho toast to extend for.</param>
private void AddProgressBarToToast(ToastContent toast)
{
var progressBar = this.Content.ProgressBar;
if (progressBar != null)
{
toast.Visual.BindingGeneric.Children.Add(progressBar);
}
}
/// <summary>
/// Adds attachments to the toast. /// Adds attachments to the toast.
/// </summary> /// </summary>
/// <param name="toast">Tho toast to extend for.</param> /// <param name="toast">Tho toast to extend for.</param>
...@@ -137,21 +168,17 @@ namespace LocalNotificationProxy.LocalNotification ...@@ -137,21 +168,17 @@ namespace LocalNotificationProxy.LocalNotification
{ {
var xml = toast.GetXml(); var xml = toast.GetXml();
var at = this.Content.Date; var at = this.Content.Date;
ScheduledToastNotification notification; var notification = new ScheduledToastNotification(xml, at);
if (this.Content.IsRepeating()) notification.Id = this.Content.Id;
{ notification.Tag = this.Options.Id.ToString();
var interval = this.Content.Interval; notification.SuppressPopup = this.Options.Silent;
notification = new ScheduledToastNotification(xml, at, interval, 5);
} if (this.Trigger.Occurrence > 1)
else
{ {
notification = new ScheduledToastNotification(xml, at); notification.Group = notification.Tag;
} }
notification.Id = this.Options.ID.ToString();
notification.Tag = notification.Id;
return notification; return notification;
} }
} }
......
...@@ -46,8 +46,40 @@ namespace LocalNotificationProxy.LocalNotification ...@@ -46,8 +46,40 @@ namespace LocalNotificationProxy.LocalNotification
{ {
foreach (Options options in notifications) foreach (Options options in notifications)
{ {
var toast = new Builder(options).Build(); var builder = new Builder(options);
ToastNotifier.AddToSchedule(toast); ScheduledToastNotification toast;
do
{
toast = builder.Build();
ToastNotifier.AddToSchedule(toast);
builder.MoveNext();
} while (builder.HasNext());
}
}
/// <summary>
/// Update notifications.
/// </summary>
/// <param name="notifications">List of key-value properties</param>
public void Update([ReadOnlyArray] Options[] notifications)
{
foreach (Options options in notifications)
{
var bar = options.ProgressBar;
if (!bar.Enabled)
{
continue;
}
var data = new NotificationData { SequenceNumber = 0 };
data.Values["progress.value"] = bar.Value.ToString();
data.Values["progress.status"] = bar.Status.ToString();
data.Values["progress.description"] = bar.Description.ToString();
ToastNotifier.Update(data, options.Id.ToString());
} }
} }
...@@ -98,29 +130,29 @@ namespace LocalNotificationProxy.LocalNotification ...@@ -98,29 +130,29 @@ namespace LocalNotificationProxy.LocalNotification
public List<Options> Cancel(int[] ids) public List<Options> Cancel(int[] ids)
{ {
var scheduled = ToastNotifier.GetScheduledToastNotifications(); var scheduled = ToastNotifier.GetScheduledToastNotifications();
var tags = new List<int>(ids); var toRemove = new List<int>(ids);
var toClear = new List<int>(ids);
var toasts = new List<Options>(); var toasts = new List<Options>();
foreach (var toast in scheduled) foreach (var toast in scheduled)
{ {
var id = int.Parse(toast.Tag); var id = int.Parse(toast.Tag);
if (tags.Contains(id)) if (toRemove.Contains(id))
{ {
tags.Remove(id); toClear.Remove(id);
toasts.Add(new Notification(toast).Options);
ToastNotifier.RemoveFromSchedule(toast); ToastNotifier.RemoveFromSchedule(toast);
}
if (tags.Count == 0) if (!this.IsPhantom(toast))
{ {
break; toasts.Add(new Notification(toast).Options);
}
} }
} }
if (tags.Count > 0) if (toClear.Count > 0)
{ {
toasts.AddRange(this.Clear(tags.ToArray())); toasts.AddRange(this.Clear(toClear.ToArray()));
} }
return toasts; return toasts;
...@@ -165,7 +197,10 @@ namespace LocalNotificationProxy.LocalNotification ...@@ -165,7 +197,10 @@ namespace LocalNotificationProxy.LocalNotification
foreach (var toast in toasts) foreach (var toast in toasts)
{ {
ids.Add(int.Parse(toast.Tag)); if (!this.IsPhantom(toast))
{
ids.Add(int.Parse(toast.Tag));
}
} }
} }
...@@ -175,7 +210,10 @@ namespace LocalNotificationProxy.LocalNotification ...@@ -175,7 +210,10 @@ namespace LocalNotificationProxy.LocalNotification
foreach (var toast in toasts) foreach (var toast in toasts)
{ {
ids.Add(int.Parse(toast.Tag)); if (!this.IsPhantom(toast))
{
ids.Add(int.Parse(toast.Tag));
}
} }
} }
...@@ -206,7 +244,10 @@ namespace LocalNotificationProxy.LocalNotification ...@@ -206,7 +244,10 @@ namespace LocalNotificationProxy.LocalNotification
foreach (var toast in toasts) foreach (var toast in toasts)
{ {
notifications.Add(new Notification(toast)); if (!this.IsPhantom(toast))
{
notifications.Add(new Notification(toast));
}
} }
} }
...@@ -216,7 +257,10 @@ namespace LocalNotificationProxy.LocalNotification ...@@ -216,7 +257,10 @@ namespace LocalNotificationProxy.LocalNotification
foreach (var toast in toasts) foreach (var toast in toasts)
{ {
notifications.Add(new Notification(toast)); if (!this.IsPhantom(toast))
{
notifications.Add(new Notification(toast));
}
} }
} }
...@@ -358,5 +402,25 @@ namespace LocalNotificationProxy.LocalNotification ...@@ -358,5 +402,25 @@ namespace LocalNotificationProxy.LocalNotification
return Notification.Type.Unknown; return Notification.Type.Unknown;
} }
/// <summary>
/// If the specified toast is only for internal reason.
/// </summary>
/// <param name="toast">The toast notification to test for.</param>
/// <returns>True if its an internal ("phantom") one.</returns>
private bool IsPhantom(ToastNotification toast)
{
return toast.Group.Length > 0;
}
/// <summary>
/// If the specified toast is only for internal reason.
/// </summary>
/// <param name="toast">The toast notification to test for.</param>
/// <returns>True if its an internal ("phantom") one.</returns>
private bool IsPhantom(ScheduledToastNotification toast)
{
return toast.Group.Length > 0;
}
} }
} }
...@@ -49,9 +49,17 @@ ...@@ -49,9 +49,17 @@
All, Scheduled, Triggered, Unknown All, Scheduled, Triggered, Unknown
} }
/// <summary>
/// Gets the wrapped notification options.
/// </summary>
public Options Options { get; private set; } public Options Options { get; private set; }
/// <summary> /// <summary>
/// Gets the unique identifier for the toast.
/// </summary>
public string Id => $"{this.Options.Id}#{this.Options.Trigger.Occurrence}";
/// <summary>
/// Gets a ToastAudio object based on the specified sound uri. /// Gets a ToastAudio object based on the specified sound uri.
/// </summary> /// </summary>
public ToastAudio Sound public ToastAudio Sound
...@@ -93,12 +101,12 @@ ...@@ -93,12 +101,12 @@
/// <summary> /// <summary>
/// Gets a GenericAppLogo object based on the specified icon uri. /// Gets a GenericAppLogo object based on the specified icon uri.
/// </summary> /// </summary>
public ToastGenericAppLogo Image public ToastGenericAppLogo Icon
{ {
get get
{ {
var image = new ToastGenericAppLogo(); var image = new ToastGenericAppLogo();
var path = this.Options.Image; var path = this.Options.Icon;
if (path == null || path.StartsWith("res://logo")) if (path == null || path.StartsWith("res://logo"))
{ {
...@@ -254,15 +262,43 @@ ...@@ -254,15 +262,43 @@
} }
/// <summary> /// <summary>
/// Gets the progress bar widget.
/// </summary>
public AdaptiveProgressBar ProgressBar
{
get
{
var bar = this.Options.ProgressBar;
if (!bar.Enabled)
{
return null;
}
return new AdaptiveProgressBar()
{
Title = bar.Title,
Value = new BindableProgressBarValue("progress.value"),
ValueStringOverride = new BindableString("progress.description"),
Status = new BindableString("progress.status")
};
}
}
/// <summary>
/// Gets the date when to trigger the notification. /// Gets the date when to trigger the notification.
/// </summary> /// </summary>
public DateTime Date public DateTime Date
{ {
get get
{ {
var date = DateTimeOffset.FromUnixTimeMilliseconds(this.Options.At * 1000).LocalDateTime; var trigger = this.Options.Trigger;
var time = trigger.At;
var date = DateTimeOffset.FromUnixTimeMilliseconds(time * 1000).LocalDateTime;
var minDate = DateTime.Now.AddSeconds(0.1); var minDate = DateTime.Now.AddSeconds(0.1);
date = date.AddTicks(this.Interval.Ticks * (trigger.Occurrence - 1));
return (date < minDate) ? minDate : date; return (date < minDate) ? minDate : date;
} }
} }
...@@ -274,16 +310,38 @@ ...@@ -274,16 +310,38 @@
{ {
get get
{ {
switch (this.Options.Every) var every = this.Options.Trigger.Every;
switch (every)
{ {
case null:
case "":
return TimeSpan.Zero;
case "second":
return new TimeSpan(TimeSpan.TicksPerSecond);
case "minute": case "minute":
return new TimeSpan(TimeSpan.TicksPerMinute); return new TimeSpan(TimeSpan.TicksPerMinute);
case "hour": case "hour":
return new TimeSpan(TimeSpan.TicksPerHour); return new TimeSpan(TimeSpan.TicksPerHour);
case "day": case "day":
return new TimeSpan(TimeSpan.TicksPerDay); return new TimeSpan(TimeSpan.TicksPerDay);
default: case "week":
return TimeSpan.Zero; return new TimeSpan(TimeSpan.TicksPerDay * 7);
case "month":
return new TimeSpan(TimeSpan.TicksPerDay * 31);
case "quarter":
return new TimeSpan(TimeSpan.TicksPerHour * 2190);
case "year":
return new TimeSpan(TimeSpan.TicksPerDay * 365);
}
try
{
return TimeSpan.FromSeconds(60 * int.Parse(every));
}
catch
{
return TimeSpan.Zero;
} }
} }
} }
...@@ -296,16 +354,5 @@ ...@@ -296,16 +354,5 @@
{ {
return this.Options.GetXml(); return this.Options.GetXml();
} }
/// <summary>
/// If the notification shall be repeating.
/// </summary>
/// <returns>True if the Every property has some value.</returns>
public bool IsRepeating()
{
var every = this.Options.Every;
return every != null && every.Length > 0 && !every.Equals("0");
}
} }
} }
...@@ -33,7 +33,7 @@ namespace LocalNotificationProxy.LocalNotification ...@@ -33,7 +33,7 @@ namespace LocalNotificationProxy.LocalNotification
/// <summary> /// <summary>
/// Gets or sets notification ID. /// Gets or sets notification ID.
/// </summary> /// </summary>
public int ID { get; set; } public int Id { get; set; } = 0;
/// <summary> /// <summary>
/// Gets or sets notification title. /// Gets or sets notification title.
...@@ -58,17 +58,17 @@ namespace LocalNotificationProxy.LocalNotification ...@@ -58,17 +58,17 @@ namespace LocalNotificationProxy.LocalNotification
/// <summary> /// <summary>
/// Gets or sets the notification image. /// Gets or sets the notification image.
/// </summary> /// </summary>
public string Image { get; set; } public string Icon { get; set; }
/// <summary> /// <summary>
/// Gets or sets the notification fire date. /// Gets or sets a value indicating whether the popup shall be visible.
/// </summary> /// </summary>
public long At { get; set; } public bool Silent { get; set; } = false;
/// <summary> /// <summary>
/// Gets or sets the notification repeat interval. /// Gets or sets the notification trigger.
/// </summary> /// </summary>
public string Every { get; set; } public Trigger Trigger { get; set; }
/// <summary> /// <summary>
/// Gets or sets the notification user data. /// Gets or sets the notification user data.
...@@ -86,6 +86,11 @@ namespace LocalNotificationProxy.LocalNotification ...@@ -86,6 +86,11 @@ namespace LocalNotificationProxy.LocalNotification
public IAction[] Actions { get; set; } public IAction[] Actions { get; set; }
/// <summary> /// <summary>
/// Gets or sets the notification progress bar.
/// </summary>
public ProgressBar ProgressBar { get; set; }
/// <summary>
/// Deserializes the XML string into an instance of Options. /// Deserializes the XML string into an instance of Options.
/// </summary> /// </summary>
/// <param name="identifier">The serialized instance of Options as an xml string.</param> /// <param name="identifier">The serialized instance of Options as an xml string.</param>
...@@ -98,9 +103,8 @@ namespace LocalNotificationProxy.LocalNotification ...@@ -98,9 +103,8 @@ namespace LocalNotificationProxy.LocalNotification
var options = new Options(); var options = new Options();
var node = doc.DocumentElement; var node = doc.DocumentElement;
options.ID = int.Parse(node.GetAttribute("id")); options.Id = int.Parse(node.GetAttribute("id"));
options.Badge = int.Parse(node.GetAttribute("badge")); options.Badge = int.Parse(node.GetAttribute("badge"));
options.At = int.Parse(node.GetAttribute("at"));
if (node.GetAttributeNode("text") != null) if (node.GetAttributeNode("text") != null)
{ {
...@@ -119,17 +123,22 @@ namespace LocalNotificationProxy.LocalNotification ...@@ -119,17 +123,22 @@ namespace LocalNotificationProxy.LocalNotification
if (node.GetAttributeNode("image") != null) if (node.GetAttributeNode("image") != null)
{ {
options.Image = node.GetAttribute("image"); options.Icon = node.GetAttribute("image");
} }
if (node.GetAttributeNode("every") != null) if (node.GetAttributeNode("data") != null)
{ {
options.Every = node.GetAttribute("every"); options.Data = node.GetAttribute("data");
} }
if (node.GetAttributeNode("data") != null) if (node.GetAttributeNode("attachments") != null)
{ {
options.Data = node.GetAttribute("data"); options.Attachments = node.GetAttribute("attachments").Split(',');
}
if (node.GetAttributeNode("silent") != null)
{
options.Silent = true;
} }
if (node.GetAttributeNode("action") != null) if (node.GetAttributeNode("action") != null)
...@@ -158,9 +167,8 @@ namespace LocalNotificationProxy.LocalNotification ...@@ -158,9 +167,8 @@ namespace LocalNotificationProxy.LocalNotification
{ {
var node = new XmlDocument().CreateElement("options"); var node = new XmlDocument().CreateElement("options");
node.SetAttribute("id", this.ID.ToString()); node.SetAttribute("id", this.Id.ToString());
node.SetAttribute("badge", this.Badge.ToString()); node.SetAttribute("badge", this.Badge.ToString());
node.SetAttribute("at", this.At.ToString());
if (this.Title != null) if (this.Title != null)
{ {
...@@ -177,19 +185,24 @@ namespace LocalNotificationProxy.LocalNotification ...@@ -177,19 +185,24 @@ namespace LocalNotificationProxy.LocalNotification
node.SetAttribute("sound", this.Sound); node.SetAttribute("sound", this.Sound);
} }
if (this.Image != null) if (this.Icon != null)
{ {
node.SetAttribute("image", this.Image); node.SetAttribute("image", this.Icon);
} }
if (this.Every != null) if (this.Data != null)
{ {
node.SetAttribute("every", this.Every); node.SetAttribute("data", this.Data);
} }
if (this.Data != null) if (this.Attachments != null)
{ {
node.SetAttribute("data", this.Data); node.SetAttribute("attachments", string.Join(",", this.Attachments));
}
if (this.Silent)
{
node.SetAttribute("silent", "1");
} }
if (action != null) if (action != null)
......
/*
* Apache 2.0 License
*
* Copyright (c) Sebastian Katzer 2017
*
* This file contains Original Code and/or Modifications of Original Code
* as defined in and that are subject to the Apache License
* Version 2.0 (the 'License'). You may not use this file except in
* compliance with the License. Please obtain a copy of the License at
* http://opensource.org/licenses/Apache-2.0/ and read it before using this
* file.
*
* The Original Code and all software distributed under the License are
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
* Please see the License for the specific language governing rights and
* limitations under the License.
*/
namespace LocalNotificationProxy.LocalNotification
{
public sealed class ProgressBar
{
/// <summary>
/// Gets or sets a value indicating whether the notification has a progress bar.
/// </summary>
public bool Enabled { get; set; } = false;
/// <summary>
/// Gets or sets the title.
/// </summary>
public string Title { get; set; } = string.Empty;
/// <summary>
/// Gets or sets the value.
/// </summary>
public double Value { get; set; } = 0;
/// <summary>
/// Gets or sets the status.
/// </summary>
public string Status { get; set; } = string.Empty;
/// <summary>
/// Gets or sets the description.
/// </summary>
public string Description { get; set; } = string.Empty;
}
}
/*
* Apache 2.0 License
*
* Copyright (c) Sebastian Katzer 2017
*
* This file contains Original Code and/or Modifications of Original Code
* as defined in and that are subject to the Apache License
* Version 2.0 (the 'License'). You may not use this file except in
* compliance with the License. Please obtain a copy of the License at
* http://opensource.org/licenses/Apache-2.0/ and read it before using this
* file.
*
* The Original Code and all software distributed under the License are
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
* Please see the License for the specific language governing rights and
* limitations under the License.
*/
namespace LocalNotificationProxy.LocalNotification
{
public sealed class Trigger
{
/// <summary>
/// Gets trigger type.
/// </summary>
public string Type { get; } = "calendar";
/// <summary>
/// Gets or sets trigger date.
/// </summary>
public long At { get; set; }
/// <summary>
/// Gets or sets trigger count.
/// </summary>
public int Count { get; set; } = 1;
/// <summary>
/// Gets trigger occurrence.
/// </summary>
public int Occurrence { get; internal set; } = 1;
/// <summary>
/// Gets or sets trigger interval.
/// </summary>
public string Every { get; set; }
}
}
...@@ -50,6 +50,15 @@ namespace LocalNotificationProxy ...@@ -50,6 +50,15 @@ namespace LocalNotificationProxy
} }
/// <summary> /// <summary>
/// Update notifications.
/// </summary>
/// <param name="notifications">List of key-value properties</param>
public void Update([ReadOnlyArray] Options[] notifications)
{
this.manager.Update(notifications);
}
/// <summary>
/// Clear the notifications specified by id. /// Clear the notifications specified by id.
/// </summary> /// </summary>
/// <param name="ids">The IDs of the notification to clear.</param> /// <param name="ids">The IDs of the notification to clear.</param>
......
...@@ -118,6 +118,8 @@ ...@@ -118,6 +118,8 @@
<Compile Include="LocalNotification\Input.cs" /> <Compile Include="LocalNotification\Input.cs" />
<Compile Include="LocalNotification\Manager.cs" /> <Compile Include="LocalNotification\Manager.cs" />
<Compile Include="LocalNotification\Options.cs" /> <Compile Include="LocalNotification\Options.cs" />
<Compile Include="LocalNotification\ProgressBar.cs" />
<Compile Include="LocalNotification\Trigger.cs" />
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
......
...@@ -1208,7 +1208,7 @@ ...@@ -1208,7 +1208,7 @@
</member> </member>
<member name="P:Microsoft.Toolkit.Uwp.Notifications.ToastActivationOptions.AfterActivationBehavior"> <member name="P:Microsoft.Toolkit.Uwp.Notifications.ToastActivationOptions.AfterActivationBehavior">
<summary> <summary>
Not supported on Windows: Specifies the behavior that the toast should use when the user invokes this action. Note that this option only works on <see cref="T:Microsoft.Toolkit.Uwp.Notifications.ToastButton"/> and <see cref="T:Microsoft.Toolkit.Uwp.Notifications.ToastContextMenuItem"/>. New in Fall Creators Update: Specifies the behavior that the toast should use when the user invokes this action. Note that this option only works on <see cref="T:Microsoft.Toolkit.Uwp.Notifications.ToastButton"/> and <see cref="T:Microsoft.Toolkit.Uwp.Notifications.ToastContextMenuItem"/>. Desktop-only, supported in builds 16251 or higher.
</summary> </summary>
</member> </member>
<member name="T:Microsoft.Toolkit.Uwp.Notifications.IToastBindingGenericChild"> <member name="T:Microsoft.Toolkit.Uwp.Notifications.IToastBindingGenericChild">
......
...@@ -1208,7 +1208,7 @@ ...@@ -1208,7 +1208,7 @@
</member> </member>
<member name="P:Microsoft.Toolkit.Uwp.Notifications.ToastActivationOptions.AfterActivationBehavior"> <member name="P:Microsoft.Toolkit.Uwp.Notifications.ToastActivationOptions.AfterActivationBehavior">
<summary> <summary>
Not supported on Windows: Specifies the behavior that the toast should use when the user invokes this action. Note that this option only works on <see cref="T:Microsoft.Toolkit.Uwp.Notifications.ToastButton"/> and <see cref="T:Microsoft.Toolkit.Uwp.Notifications.ToastContextMenuItem"/>. New in Fall Creators Update: Specifies the behavior that the toast should use when the user invokes this action. Note that this option only works on <see cref="T:Microsoft.Toolkit.Uwp.Notifications.ToastButton"/> and <see cref="T:Microsoft.Toolkit.Uwp.Notifications.ToastContextMenuItem"/>. Desktop-only, supported in builds 16251 or higher.
</summary> </summary>
</member> </member>
<member name="T:Microsoft.Toolkit.Uwp.Notifications.IToastBindingGenericChild"> <member name="T:Microsoft.Toolkit.Uwp.Notifications.IToastBindingGenericChild">
......
...@@ -1208,7 +1208,7 @@ ...@@ -1208,7 +1208,7 @@
</member> </member>
<member name="P:Microsoft.Toolkit.Uwp.Notifications.ToastActivationOptions.AfterActivationBehavior"> <member name="P:Microsoft.Toolkit.Uwp.Notifications.ToastActivationOptions.AfterActivationBehavior">
<summary> <summary>
Not supported on Windows: Specifies the behavior that the toast should use when the user invokes this action. Note that this option only works on <see cref="T:Microsoft.Toolkit.Uwp.Notifications.ToastButton"/> and <see cref="T:Microsoft.Toolkit.Uwp.Notifications.ToastContextMenuItem"/>. New in Fall Creators Update: Specifies the behavior that the toast should use when the user invokes this action. Note that this option only works on <see cref="T:Microsoft.Toolkit.Uwp.Notifications.ToastButton"/> and <see cref="T:Microsoft.Toolkit.Uwp.Notifications.ToastContextMenuItem"/>. Desktop-only, supported in builds 16251 or higher.
</summary> </summary>
</member> </member>
<member name="T:Microsoft.Toolkit.Uwp.Notifications.IToastBindingGenericChild"> <member name="T:Microsoft.Toolkit.Uwp.Notifications.IToastBindingGenericChild">
......
...@@ -1208,7 +1208,7 @@ ...@@ -1208,7 +1208,7 @@
</member> </member>
<member name="P:Microsoft.Toolkit.Uwp.Notifications.ToastActivationOptions.AfterActivationBehavior"> <member name="P:Microsoft.Toolkit.Uwp.Notifications.ToastActivationOptions.AfterActivationBehavior">
<summary> <summary>
Not supported on Windows: Specifies the behavior that the toast should use when the user invokes this action. Note that this option only works on <see cref="T:Microsoft.Toolkit.Uwp.Notifications.ToastButton"/> and <see cref="T:Microsoft.Toolkit.Uwp.Notifications.ToastContextMenuItem"/>. New in Fall Creators Update: Specifies the behavior that the toast should use when the user invokes this action. Note that this option only works on <see cref="T:Microsoft.Toolkit.Uwp.Notifications.ToastButton"/> and <see cref="T:Microsoft.Toolkit.Uwp.Notifications.ToastContextMenuItem"/>. Desktop-only, supported in builds 16251 or higher.
</summary> </summary>
</member> </member>
<member name="T:Microsoft.Toolkit.Uwp.Notifications.IToastBindingGenericChild"> <member name="T:Microsoft.Toolkit.Uwp.Notifications.IToastBindingGenericChild">
......
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\bin\ARM\Debug\LocalNotificationProxy.winmd Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\bin\ARM\Debug\LocalNotificationProxy.winmd
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\bin\ARM\Debug\LocalNotificationProxy.pdb Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\bin\ARM\Debug\LocalNotificationProxy.pdb
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\bin\ARM\Debug\LocalNotificationProxy.pri Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\bin\ARM\Debug\LocalNotificationProxy.pri
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\bin\ARM\Debug\Microsoft.Toolkit.Uwp.Notifications.dll
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\bin\ARM\Debug\Microsoft.Toolkit.Uwp.Notifications.pdb
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\bin\ARM\Debug\Microsoft.Toolkit.Uwp.Notifications.xml
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\bin\ARM\Debug\Microsoft.Toolkit.Uwp.Notifications.pri
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\ARM\Debug\LocalNotificationProxy.csprojResolveAssemblyReference.cache
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\ARM\Debug\LocalNotificationProxy.csproj.CoreCompileInputs.cache
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\ARM\Debug\LocalNotificationProxy.winmd Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\ARM\Debug\LocalNotificationProxy.winmd
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\ARM\Debug\LocalNotificationProxy.pdb Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\ARM\Debug\LocalNotificationProxy.pdb
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\ARM\Debug\LocalNotificationProxy.winmdobj Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\ARM\Debug\LocalNotificationProxy.winmdobj
...@@ -16,8 +22,3 @@ Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotifica ...@@ -16,8 +22,3 @@ Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotifica
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\ARM\Debug\qualifiers.txt Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\ARM\Debug\qualifiers.txt
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\ARM\Debug\qualifiers.txt.intermediate Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\ARM\Debug\qualifiers.txt.intermediate
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\ARM\Debug\MultipleQualifiersPerDimensionFound.txt Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\ARM\Debug\MultipleQualifiersPerDimensionFound.txt
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\bin\ARM\Debug\Microsoft.Toolkit.Uwp.Notifications.dll
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\bin\ARM\Debug\Microsoft.Toolkit.Uwp.Notifications.pdb
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\bin\ARM\Debug\Microsoft.Toolkit.Uwp.Notifications.xml
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\bin\ARM\Debug\Microsoft.Toolkit.Uwp.Notifications.pri
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\ARM\Debug\LocalNotificationProxy.csprojResolveAssemblyReference.cache
...@@ -21,3 +21,4 @@ Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotifica ...@@ -21,3 +21,4 @@ Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotifica
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\bin\ARM\Release\Microsoft.Toolkit.Uwp.Notifications.pdb Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\bin\ARM\Release\Microsoft.Toolkit.Uwp.Notifications.pdb
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\bin\ARM\Release\Microsoft.Toolkit.Uwp.Notifications.xml Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\bin\ARM\Release\Microsoft.Toolkit.Uwp.Notifications.xml
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\bin\ARM\Release\Microsoft.Toolkit.Uwp.Notifications.pri Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\bin\ARM\Release\Microsoft.Toolkit.Uwp.Notifications.pri
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\ARM\Release\LocalNotificationProxy.csproj.CoreCompileInputs.cache
{
"version": 1,
"dgSpecHash": "zpPhWrSe6JMx6cEgawFb/wVE/ePYBHdm7gVMIjo8WtH6SVEe68Dcmc1KjWh0cSYhPMv6saYj9H3iVQ/lNQ5jMA==",
"success": true
}
\ No newline at end of file
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">$(UserProfile)\.nuget\packages\</NuGetPackageRoot> <NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">$(UserProfile)\.nuget\packages\</NuGetPackageRoot>
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">C:\Users\katze\.nuget\packages\</NuGetPackageFolders> <NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">C:\Users\katze\.nuget\packages\</NuGetPackageFolders>
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle> <NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">4.2.0</NuGetToolVersion> <NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">4.3.1</NuGetToolVersion>
</PropertyGroup> </PropertyGroup>
<PropertyGroup> <PropertyGroup>
<MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects> <MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>
......
{ {
"version": 2, "version": 3,
"targets": { "targets": {
"UAP,Version=v10.0.15063": { "UAP,Version=v10.0.15063": {
"Microsoft.CSharp/4.0.0": { "Microsoft.CSharp/4.0.0": {
...@@ -2149,10 +2149,16 @@ ...@@ -2149,10 +2149,16 @@
}, },
"Microsoft.Toolkit.Uwp.Notifications.UWP/1.0.0": { "Microsoft.Toolkit.Uwp.Notifications.UWP/1.0.0": {
"type": "project", "type": "project",
"framework": "UAP,Version=v10.0", "framework": "UAP,Version=v10.0.10240",
"dependencies": { "dependencies": {
"Microsoft.NETCore.UniversalWindowsPlatform": "5.2.3", "Microsoft.NETCore.UniversalWindowsPlatform": "5.2.3",
"StyleCop.Analyzers": "1.0.0" "StyleCop.Analyzers": "1.0.0"
},
"compile": {
"bin/placeholder/Microsoft.Toolkit.Uwp.Notifications.UWP.dll": {}
},
"runtime": {
"bin/placeholder/Microsoft.Toolkit.Uwp.Notifications.UWP.dll": {}
} }
} }
}, },
...@@ -4398,10 +4404,16 @@ ...@@ -4398,10 +4404,16 @@
}, },
"Microsoft.Toolkit.Uwp.Notifications.UWP/1.0.0": { "Microsoft.Toolkit.Uwp.Notifications.UWP/1.0.0": {
"type": "project", "type": "project",
"framework": "UAP,Version=v10.0", "framework": "UAP,Version=v10.0.10240",
"dependencies": { "dependencies": {
"Microsoft.NETCore.UniversalWindowsPlatform": "5.2.3", "Microsoft.NETCore.UniversalWindowsPlatform": "5.2.3",
"StyleCop.Analyzers": "1.0.0" "StyleCop.Analyzers": "1.0.0"
},
"compile": {
"bin/placeholder/Microsoft.Toolkit.Uwp.Notifications.UWP.dll": {}
},
"runtime": {
"bin/placeholder/Microsoft.Toolkit.Uwp.Notifications.UWP.dll": {}
} }
} }
}, },
...@@ -6681,10 +6693,16 @@ ...@@ -6681,10 +6693,16 @@
}, },
"Microsoft.Toolkit.Uwp.Notifications.UWP/1.0.0": { "Microsoft.Toolkit.Uwp.Notifications.UWP/1.0.0": {
"type": "project", "type": "project",
"framework": "UAP,Version=v10.0", "framework": "UAP,Version=v10.0.10240",
"dependencies": { "dependencies": {
"Microsoft.NETCore.UniversalWindowsPlatform": "5.2.3", "Microsoft.NETCore.UniversalWindowsPlatform": "5.2.3",
"StyleCop.Analyzers": "1.0.0" "StyleCop.Analyzers": "1.0.0"
},
"compile": {
"bin/placeholder/Microsoft.Toolkit.Uwp.Notifications.UWP.dll": {}
},
"runtime": {
"bin/placeholder/Microsoft.Toolkit.Uwp.Notifications.UWP.dll": {}
} }
} }
}, },
...@@ -8939,10 +8957,16 @@ ...@@ -8939,10 +8957,16 @@
}, },
"Microsoft.Toolkit.Uwp.Notifications.UWP/1.0.0": { "Microsoft.Toolkit.Uwp.Notifications.UWP/1.0.0": {
"type": "project", "type": "project",
"framework": "UAP,Version=v10.0", "framework": "UAP,Version=v10.0.10240",
"dependencies": { "dependencies": {
"Microsoft.NETCore.UniversalWindowsPlatform": "5.2.3", "Microsoft.NETCore.UniversalWindowsPlatform": "5.2.3",
"StyleCop.Analyzers": "1.0.0" "StyleCop.Analyzers": "1.0.0"
},
"compile": {
"bin/placeholder/Microsoft.Toolkit.Uwp.Notifications.UWP.dll": {}
},
"runtime": {
"bin/placeholder/Microsoft.Toolkit.Uwp.Notifications.UWP.dll": {}
} }
} }
}, },
...@@ -11231,10 +11255,16 @@ ...@@ -11231,10 +11255,16 @@
}, },
"Microsoft.Toolkit.Uwp.Notifications.UWP/1.0.0": { "Microsoft.Toolkit.Uwp.Notifications.UWP/1.0.0": {
"type": "project", "type": "project",
"framework": "UAP,Version=v10.0", "framework": "UAP,Version=v10.0.10240",
"dependencies": { "dependencies": {
"Microsoft.NETCore.UniversalWindowsPlatform": "5.2.3", "Microsoft.NETCore.UniversalWindowsPlatform": "5.2.3",
"StyleCop.Analyzers": "1.0.0" "StyleCop.Analyzers": "1.0.0"
},
"compile": {
"bin/placeholder/Microsoft.Toolkit.Uwp.Notifications.UWP.dll": {}
},
"runtime": {
"bin/placeholder/Microsoft.Toolkit.Uwp.Notifications.UWP.dll": {}
} }
} }
}, },
...@@ -13489,10 +13519,16 @@ ...@@ -13489,10 +13519,16 @@
}, },
"Microsoft.Toolkit.Uwp.Notifications.UWP/1.0.0": { "Microsoft.Toolkit.Uwp.Notifications.UWP/1.0.0": {
"type": "project", "type": "project",
"framework": "UAP,Version=v10.0", "framework": "UAP,Version=v10.0.10240",
"dependencies": { "dependencies": {
"Microsoft.NETCore.UniversalWindowsPlatform": "5.2.3", "Microsoft.NETCore.UniversalWindowsPlatform": "5.2.3",
"StyleCop.Analyzers": "1.0.0" "StyleCop.Analyzers": "1.0.0"
},
"compile": {
"bin/placeholder/Microsoft.Toolkit.Uwp.Notifications.UWP.dll": {}
},
"runtime": {
"bin/placeholder/Microsoft.Toolkit.Uwp.Notifications.UWP.dll": {}
} }
} }
}, },
...@@ -15781,10 +15817,16 @@ ...@@ -15781,10 +15817,16 @@
}, },
"Microsoft.Toolkit.Uwp.Notifications.UWP/1.0.0": { "Microsoft.Toolkit.Uwp.Notifications.UWP/1.0.0": {
"type": "project", "type": "project",
"framework": "UAP,Version=v10.0", "framework": "UAP,Version=v10.0.10240",
"dependencies": { "dependencies": {
"Microsoft.NETCore.UniversalWindowsPlatform": "5.2.3", "Microsoft.NETCore.UniversalWindowsPlatform": "5.2.3",
"StyleCop.Analyzers": "1.0.0" "StyleCop.Analyzers": "1.0.0"
},
"compile": {
"bin/placeholder/Microsoft.Toolkit.Uwp.Notifications.UWP.dll": {}
},
"runtime": {
"bin/placeholder/Microsoft.Toolkit.Uwp.Notifications.UWP.dll": {}
} }
} }
} }
...@@ -21578,11 +21620,21 @@ ...@@ -21578,11 +21620,21 @@
"projectUniqueName": "Z:\\Documents\\github\\cordova-plugin-local-notifications\\src\\windows\\LocalNotificationProxy\\LocalNotificationProxy\\LocalNotificationProxy.csproj", "projectUniqueName": "Z:\\Documents\\github\\cordova-plugin-local-notifications\\src\\windows\\LocalNotificationProxy\\LocalNotificationProxy\\LocalNotificationProxy.csproj",
"projectName": "LocalNotificationProxy", "projectName": "LocalNotificationProxy",
"projectPath": "Z:\\Documents\\github\\cordova-plugin-local-notifications\\src\\windows\\LocalNotificationProxy\\LocalNotificationProxy\\LocalNotificationProxy.csproj", "projectPath": "Z:\\Documents\\github\\cordova-plugin-local-notifications\\src\\windows\\LocalNotificationProxy\\LocalNotificationProxy\\LocalNotificationProxy.csproj",
"packagesPath": "C:\\Users\\katze\\.nuget\\packages\\",
"outputPath": "Z:\\Documents\\github\\cordova-plugin-local-notifications\\src\\windows\\LocalNotificationProxy\\LocalNotificationProxy\\obj\\", "outputPath": "Z:\\Documents\\github\\cordova-plugin-local-notifications\\src\\windows\\LocalNotificationProxy\\LocalNotificationProxy\\obj\\",
"projectStyle": "PackageReference", "projectStyle": "PackageReference",
"skipContentFileWrite": true,
"configFilePaths": [
"C:\\Users\\katze\\AppData\\Roaming\\NuGet\\NuGet.Config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
],
"originalTargetFrameworks": [ "originalTargetFrameworks": [
"uap10.0.15063" "uap10.0.15063"
], ],
"sources": {
"C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
"https://api.nuget.org/v3/index.json": {}
},
"frameworks": { "frameworks": {
"uap10.0.15063": { "uap10.0.15063": {
"projectReferences": { "projectReferences": {
...@@ -21637,5 +21689,39 @@ ...@@ -21637,5 +21689,39 @@
"#import": [] "#import": []
} }
} }
} },
"logs": [
{
"code": "NU1605",
"level": "Warning",
"warningLevel": 1,
"message": "Ein Downgrade des Pakets \"Microsoft.NETCore\" von 5.0.2 auf 5.0.0 wurde festgestellt. Verweisen Sie direkt aus dem Projekt auf das Paket, um eine andere Version auszuwählen. \r\n LocalNotificationProxy (>= 1.0.0) -> Microsoft.Toolkit.Uwp.Notifications.UWP (>= 1.0.0) -> Microsoft.NETCore.UniversalWindowsPlatform (>= 5.2.3) -> Microsoft.NETCore (>= 5.0.2) \r\n LocalNotificationProxy (>= 1.0.0) -> Microsoft.NETCore (>= 5.0.0)",
"libraryId": "Microsoft.NETCore",
"targetGraphs": [
"UAP,Version=v10.0.15063",
"UAP,Version=v10.0.15063/win10-arm",
"UAP,Version=v10.0.15063/win10-arm-aot",
"UAP,Version=v10.0.15063/win10-x64",
"UAP,Version=v10.0.15063/win10-x64-aot",
"UAP,Version=v10.0.15063/win10-x86",
"UAP,Version=v10.0.15063/win10-x86-aot"
]
},
{
"code": "NU1605",
"level": "Warning",
"warningLevel": 1,
"message": "Ein Downgrade des Pakets \"Microsoft.NETCore.Portable.Compatibility\" von 1.0.2 auf 1.0.1 wurde festgestellt. Verweisen Sie direkt aus dem Projekt auf das Paket, um eine andere Version auszuwählen. \r\n LocalNotificationProxy (>= 1.0.0) -> Microsoft.Toolkit.Uwp.Notifications.UWP (>= 1.0.0) -> Microsoft.NETCore.UniversalWindowsPlatform (>= 5.2.3) -> Microsoft.NETCore.Portable.Compatibility (>= 1.0.2) \r\n LocalNotificationProxy (>= 1.0.0) -> Microsoft.NETCore.Portable.Compatibility (>= 1.0.1)",
"libraryId": "Microsoft.NETCore.Portable.Compatibility",
"targetGraphs": [
"UAP,Version=v10.0.15063",
"UAP,Version=v10.0.15063/win10-arm",
"UAP,Version=v10.0.15063/win10-arm-aot",
"UAP,Version=v10.0.15063/win10-x64",
"UAP,Version=v10.0.15063/win10-x64-aot",
"UAP,Version=v10.0.15063/win10-x86",
"UAP,Version=v10.0.15063/win10-x86-aot"
]
}
]
} }
\ No newline at end of file
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\bin\x64\Debug\LocalNotificationProxy.winmd
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\bin\x64\Debug\LocalNotificationProxy.pdb
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\bin\x64\Debug\LocalNotificationProxy.pri
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\bin\x64\Debug\Microsoft.Toolkit.Uwp.Notifications.dll
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\bin\x64\Debug\Microsoft.Toolkit.Uwp.Notifications.pdb
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\bin\x64\Debug\Microsoft.Toolkit.Uwp.Notifications.xml
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\bin\x64\Debug\Microsoft.Toolkit.Uwp.Notifications.pri
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x64\Debug\LocalNotificationProxy.csprojResolveAssemblyReference.cache
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x64\Debug\LocalNotificationProxy.csproj.CoreCompileInputs.cache
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x64\Debug\LocalNotificationProxy.winmd
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x64\Debug\LocalNotificationProxy.pdb
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x64\Debug\LocalNotificationProxy.winmdobj
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x64\Debug\LocalNotificationProxy.compile.pdb
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x64\Debug\priconfig.xml
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x64\Debug\priconfig.xml.intermediate
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x64\Debug\layout.resfiles
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x64\Debug\layout.resfiles.intermediate
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x64\Debug\resources.resfiles
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x64\Debug\resources.resfiles.intermediate
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x64\Debug\pri.resfiles
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x64\Debug\pri.resfiles.intermediate
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x64\Debug\qualifiers.txt
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x64\Debug\qualifiers.txt.intermediate
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x64\Debug\MultipleQualifiersPerDimensionFound.txt
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources targetOsVersion="10.0.0" majorVersion="1"> <resources targetOsVersion="10.0.0" majorVersion="1">
<index root="\" startIndexAt="obj\Publish\layout.resfiles"> <index root="\" startIndexAt="obj\x64\Debug\layout.resfiles">
<default> <default>
<qualifier name="Language" value="en-US" /> <qualifier name="Language" value="de-DE" />
<qualifier name="Contrast" value="standard" /> <qualifier name="Contrast" value="standard" />
<qualifier name="Scale" value="200" /> <qualifier name="Scale" value="200" />
<qualifier name="HomeRegion" value="001" /> <qualifier name="HomeRegion" value="001" />
...@@ -15,9 +15,9 @@ ...@@ -15,9 +15,9 @@
</default> </default>
<indexer-config type="RESFILES" qualifierDelimiter="." /> <indexer-config type="RESFILES" qualifierDelimiter="." />
</index> </index>
<index root="\" startIndexAt="obj\Publish\resources.resfiles"> <index root="\" startIndexAt="obj\x64\Debug\resources.resfiles">
<default> <default>
<qualifier name="Language" value="en-US" /> <qualifier name="Language" value="de-DE" />
<qualifier name="Contrast" value="standard" /> <qualifier name="Contrast" value="standard" />
<qualifier name="Scale" value="200" /> <qualifier name="Scale" value="200" />
<qualifier name="HomeRegion" value="001" /> <qualifier name="HomeRegion" value="001" />
...@@ -28,13 +28,13 @@ ...@@ -28,13 +28,13 @@
<qualifier name="AlternateForm" value="" /> <qualifier name="AlternateForm" value="" />
<qualifier name="Platform" value="UAP" /> <qualifier name="Platform" value="UAP" />
</default> </default>
<indexer-config type="RESW" convertDotsToSlashes="true" initialPath="Microsoft.Toolkit.Uwp.Notifications" /> <indexer-config type="RESW" convertDotsToSlashes="true" initialPath="LocalNotificationProxy" />
<indexer-config type="RESJSON" initialPath="Microsoft.Toolkit.Uwp.Notifications" /> <indexer-config type="RESJSON" initialPath="LocalNotificationProxy" />
<indexer-config type="RESFILES" qualifierDelimiter="." /> <indexer-config type="RESFILES" qualifierDelimiter="." />
</index> </index>
<index root="\" startIndexAt="obj\Publish\pri.resfiles"> <index root="\" startIndexAt="obj\x64\Debug\pri.resfiles">
<default> <default>
<qualifier name="Language" value="en-US" /> <qualifier name="Language" value="de-DE" />
<qualifier name="Contrast" value="standard" /> <qualifier name="Contrast" value="standard" />
<qualifier name="Scale" value="200" /> <qualifier name="Scale" value="200" />
<qualifier name="HomeRegion" value="001" /> <qualifier name="HomeRegion" value="001" />
...@@ -48,9 +48,9 @@ ...@@ -48,9 +48,9 @@
<indexer-config type="PRI" /> <indexer-config type="PRI" />
<indexer-config type="RESFILES" qualifierDelimiter="." /> <indexer-config type="RESFILES" qualifierDelimiter="." />
</index> </index>
<index root="obj\Publish" startIndexAt="embed.resfiles"> <index root="obj\x64\Debug" startIndexAt="embed.resfiles">
<default> <default>
<qualifier name="Language" value="en-US" /> <qualifier name="Language" value="de-DE" />
<qualifier name="Contrast" value="standard" /> <qualifier name="Contrast" value="standard" />
<qualifier name="Scale" value="200" /> <qualifier name="Scale" value="200" />
<qualifier name="HomeRegion" value="001" /> <qualifier name="HomeRegion" value="001" />
......
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources targetOsVersion="10.0.0" majorVersion="1"> <resources targetOsVersion="10.0.0" majorVersion="1">
<index root="\" startIndexAt="obj\Publish\layout.resfiles"> <index root="\" startIndexAt="obj\x64\Debug\layout.resfiles">
<default> <default>
<qualifier name="Language" value="en-US" /> <qualifier name="Language" value="de-DE" />
<qualifier name="Contrast" value="standard" /> <qualifier name="Contrast" value="standard" />
<qualifier name="Scale" value="200" /> <qualifier name="Scale" value="200" />
<qualifier name="HomeRegion" value="001" /> <qualifier name="HomeRegion" value="001" />
...@@ -15,9 +15,9 @@ ...@@ -15,9 +15,9 @@
</default> </default>
<indexer-config type="RESFILES" qualifierDelimiter="." /> <indexer-config type="RESFILES" qualifierDelimiter="." />
</index> </index>
<index root="\" startIndexAt="obj\Publish\resources.resfiles"> <index root="\" startIndexAt="obj\x64\Debug\resources.resfiles">
<default> <default>
<qualifier name="Language" value="en-US" /> <qualifier name="Language" value="de-DE" />
<qualifier name="Contrast" value="standard" /> <qualifier name="Contrast" value="standard" />
<qualifier name="Scale" value="200" /> <qualifier name="Scale" value="200" />
<qualifier name="HomeRegion" value="001" /> <qualifier name="HomeRegion" value="001" />
...@@ -28,13 +28,13 @@ ...@@ -28,13 +28,13 @@
<qualifier name="AlternateForm" value="" /> <qualifier name="AlternateForm" value="" />
<qualifier name="Platform" value="UAP" /> <qualifier name="Platform" value="UAP" />
</default> </default>
<indexer-config type="RESW" convertDotsToSlashes="true" initialPath="Microsoft.Toolkit.Uwp.Notifications" /> <indexer-config type="RESW" convertDotsToSlashes="true" initialPath="LocalNotificationProxy" />
<indexer-config type="RESJSON" initialPath="Microsoft.Toolkit.Uwp.Notifications" /> <indexer-config type="RESJSON" initialPath="LocalNotificationProxy" />
<indexer-config type="RESFILES" qualifierDelimiter="." /> <indexer-config type="RESFILES" qualifierDelimiter="." />
</index> </index>
<index root="\" startIndexAt="obj\Publish\pri.resfiles"> <index root="\" startIndexAt="obj\x64\Debug\pri.resfiles">
<default> <default>
<qualifier name="Language" value="en-US" /> <qualifier name="Language" value="de-DE" />
<qualifier name="Contrast" value="standard" /> <qualifier name="Contrast" value="standard" />
<qualifier name="Scale" value="200" /> <qualifier name="Scale" value="200" />
<qualifier name="HomeRegion" value="001" /> <qualifier name="HomeRegion" value="001" />
...@@ -48,9 +48,9 @@ ...@@ -48,9 +48,9 @@
<indexer-config type="PRI" /> <indexer-config type="PRI" />
<indexer-config type="RESFILES" qualifierDelimiter="." /> <indexer-config type="RESFILES" qualifierDelimiter="." />
</index> </index>
<index root="obj\Publish" startIndexAt="embed.resfiles"> <index root="obj\x64\Debug" startIndexAt="embed.resfiles">
<default> <default>
<qualifier name="Language" value="en-US" /> <qualifier name="Language" value="de-DE" />
<qualifier name="Contrast" value="standard" /> <qualifier name="Contrast" value="standard" />
<qualifier name="Scale" value="200" /> <qualifier name="Scale" value="200" />
<qualifier name="HomeRegion" value="001" /> <qualifier name="HomeRegion" value="001" />
......
...@@ -21,3 +21,4 @@ Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotifica ...@@ -21,3 +21,4 @@ Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotifica
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x64\Release\qualifiers.txt.intermediate Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x64\Release\qualifiers.txt.intermediate
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x64\Release\MultipleQualifiersPerDimensionFound.txt Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x64\Release\MultipleQualifiersPerDimensionFound.txt
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x64\Release\LocalNotificationProxy.csprojResolveAssemblyReference.cache Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x64\Release\LocalNotificationProxy.csprojResolveAssemblyReference.cache
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x64\Release\LocalNotificationProxy.csproj.CoreCompileInputs.cache
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\bin\x86\Debug\LocalNotificationProxy.winmd
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\bin\x86\Debug\LocalNotificationProxy.pdb
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\bin\x86\Debug\LocalNotificationProxy.pri
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\bin\x86\Debug\Microsoft.Toolkit.Uwp.Notifications.dll
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\bin\x86\Debug\Microsoft.Toolkit.Uwp.Notifications.pdb
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\bin\x86\Debug\Microsoft.Toolkit.Uwp.Notifications.xml
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\bin\x86\Debug\Microsoft.Toolkit.Uwp.Notifications.pri
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x86\Debug\LocalNotificationProxy.csprojResolveAssemblyReference.cache
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x86\Debug\LocalNotificationProxy.csproj.CoreCompileInputs.cache
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x86\Debug\LocalNotificationProxy.winmd
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x86\Debug\LocalNotificationProxy.pdb
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x86\Debug\LocalNotificationProxy.winmdobj
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x86\Debug\LocalNotificationProxy.compile.pdb
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x86\Debug\priconfig.xml
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x86\Debug\priconfig.xml.intermediate
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x86\Debug\layout.resfiles
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x86\Debug\layout.resfiles.intermediate
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x86\Debug\resources.resfiles
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x86\Debug\resources.resfiles.intermediate
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x86\Debug\pri.resfiles
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x86\Debug\pri.resfiles.intermediate
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x86\Debug\qualifiers.txt
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x86\Debug\qualifiers.txt.intermediate
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x86\Debug\MultipleQualifiersPerDimensionFound.txt
<?xml version="1.0" encoding="utf-8"?>
<resources targetOsVersion="10.0.0" majorVersion="1">
<index root="\" startIndexAt="obj\x86\Debug\layout.resfiles">
<default>
<qualifier name="Language" value="de-DE" />
<qualifier name="Contrast" value="standard" />
<qualifier name="Scale" value="200" />
<qualifier name="HomeRegion" value="001" />
<qualifier name="TargetSize" value="256" />
<qualifier name="LayoutDirection" value="LTR" />
<qualifier name="DXFeatureLevel" value="DX9" />
<qualifier name="Configuration" value="" />
<qualifier name="AlternateForm" value="" />
<qualifier name="Platform" value="UAP" />
</default>
<indexer-config type="RESFILES" qualifierDelimiter="." />
</index>
<index root="\" startIndexAt="obj\x86\Debug\resources.resfiles">
<default>
<qualifier name="Language" value="de-DE" />
<qualifier name="Contrast" value="standard" />
<qualifier name="Scale" value="200" />
<qualifier name="HomeRegion" value="001" />
<qualifier name="TargetSize" value="256" />
<qualifier name="LayoutDirection" value="LTR" />
<qualifier name="DXFeatureLevel" value="DX9" />
<qualifier name="Configuration" value="" />
<qualifier name="AlternateForm" value="" />
<qualifier name="Platform" value="UAP" />
</default>
<indexer-config type="RESW" convertDotsToSlashes="true" initialPath="LocalNotificationProxy" />
<indexer-config type="RESJSON" initialPath="LocalNotificationProxy" />
<indexer-config type="RESFILES" qualifierDelimiter="." />
</index>
<index root="\" startIndexAt="obj\x86\Debug\pri.resfiles">
<default>
<qualifier name="Language" value="de-DE" />
<qualifier name="Contrast" value="standard" />
<qualifier name="Scale" value="200" />
<qualifier name="HomeRegion" value="001" />
<qualifier name="TargetSize" value="256" />
<qualifier name="LayoutDirection" value="LTR" />
<qualifier name="DXFeatureLevel" value="DX9" />
<qualifier name="Configuration" value="" />
<qualifier name="AlternateForm" value="" />
<qualifier name="Platform" value="UAP" />
</default>
<indexer-config type="PRI" />
<indexer-config type="RESFILES" qualifierDelimiter="." />
</index>
<index root="obj\x86\Debug" startIndexAt="embed.resfiles">
<default>
<qualifier name="Language" value="de-DE" />
<qualifier name="Contrast" value="standard" />
<qualifier name="Scale" value="200" />
<qualifier name="HomeRegion" value="001" />
<qualifier name="TargetSize" value="256" />
<qualifier name="LayoutDirection" value="LTR" />
<qualifier name="DXFeatureLevel" value="DX9" />
<qualifier name="Configuration" value="" />
<qualifier name="AlternateForm" value="" />
<qualifier name="Platform" value="UAP" />
</default>
<indexer-config type="RESFILES" qualifierDelimiter="." />
<indexer-config type="EMBEDFILES" />
</index>
</resources>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<resources targetOsVersion="10.0.0" majorVersion="1">
<index root="\" startIndexAt="obj\x86\Debug\layout.resfiles">
<default>
<qualifier name="Language" value="de-DE" />
<qualifier name="Contrast" value="standard" />
<qualifier name="Scale" value="200" />
<qualifier name="HomeRegion" value="001" />
<qualifier name="TargetSize" value="256" />
<qualifier name="LayoutDirection" value="LTR" />
<qualifier name="DXFeatureLevel" value="DX9" />
<qualifier name="Configuration" value="" />
<qualifier name="AlternateForm" value="" />
<qualifier name="Platform" value="UAP" />
</default>
<indexer-config type="RESFILES" qualifierDelimiter="." />
</index>
<index root="\" startIndexAt="obj\x86\Debug\resources.resfiles">
<default>
<qualifier name="Language" value="de-DE" />
<qualifier name="Contrast" value="standard" />
<qualifier name="Scale" value="200" />
<qualifier name="HomeRegion" value="001" />
<qualifier name="TargetSize" value="256" />
<qualifier name="LayoutDirection" value="LTR" />
<qualifier name="DXFeatureLevel" value="DX9" />
<qualifier name="Configuration" value="" />
<qualifier name="AlternateForm" value="" />
<qualifier name="Platform" value="UAP" />
</default>
<indexer-config type="RESW" convertDotsToSlashes="true" initialPath="LocalNotificationProxy" />
<indexer-config type="RESJSON" initialPath="LocalNotificationProxy" />
<indexer-config type="RESFILES" qualifierDelimiter="." />
</index>
<index root="\" startIndexAt="obj\x86\Debug\pri.resfiles">
<default>
<qualifier name="Language" value="de-DE" />
<qualifier name="Contrast" value="standard" />
<qualifier name="Scale" value="200" />
<qualifier name="HomeRegion" value="001" />
<qualifier name="TargetSize" value="256" />
<qualifier name="LayoutDirection" value="LTR" />
<qualifier name="DXFeatureLevel" value="DX9" />
<qualifier name="Configuration" value="" />
<qualifier name="AlternateForm" value="" />
<qualifier name="Platform" value="UAP" />
</default>
<indexer-config type="PRI" />
<indexer-config type="RESFILES" qualifierDelimiter="." />
</index>
<index root="obj\x86\Debug" startIndexAt="embed.resfiles">
<default>
<qualifier name="Language" value="de-DE" />
<qualifier name="Contrast" value="standard" />
<qualifier name="Scale" value="200" />
<qualifier name="HomeRegion" value="001" />
<qualifier name="TargetSize" value="256" />
<qualifier name="LayoutDirection" value="LTR" />
<qualifier name="DXFeatureLevel" value="DX9" />
<qualifier name="Configuration" value="" />
<qualifier name="AlternateForm" value="" />
<qualifier name="Platform" value="UAP" />
</default>
<indexer-config type="RESFILES" qualifierDelimiter="." />
<indexer-config type="EMBEDFILES" />
</index>
</resources>
\ No newline at end of file
...@@ -21,3 +21,4 @@ Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotifica ...@@ -21,3 +21,4 @@ Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotifica
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x86\Release\qualifiers.txt.intermediate Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x86\Release\qualifiers.txt.intermediate
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x86\Release\MultipleQualifiersPerDimensionFound.txt Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x86\Release\MultipleQualifiersPerDimensionFound.txt
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x86\Release\LocalNotificationProxy.csprojResolveAssemblyReference.cache Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x86\Release\LocalNotificationProxy.csprojResolveAssemblyReference.cache
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\LocalNotificationProxy\LocalNotificationProxy\obj\x86\Release\LocalNotificationProxy.csproj.CoreCompileInputs.cache
...@@ -25,9 +25,8 @@ namespace Microsoft.Toolkit.Uwp.Notifications ...@@ -25,9 +25,8 @@ namespace Microsoft.Toolkit.Uwp.Notifications
public string ProtocolActivationTargetApplicationPfn { get; set; } public string ProtocolActivationTargetApplicationPfn { get; set; }
/// <summary> /// <summary>
/// Not supported on Windows: Specifies the behavior that the toast should use when the user invokes this action. Note that this option only works on <see cref="ToastButton"/> and <see cref="ToastContextMenuItem"/>. /// New in Fall Creators Update: Specifies the behavior that the toast should use when the user invokes this action. Note that this option only works on <see cref="ToastButton"/> and <see cref="ToastContextMenuItem"/>. Desktop-only, supported in builds 16251 or higher.
/// </summary> /// </summary>
[Obsolete("Windows does not support AfterActivationBehavior. If a future version of Windows supports this, we will undeprecate the property when support is added.")]
public ToastAfterActivationBehavior AfterActivationBehavior { get; set; } = ToastAfterActivationBehavior.Default; public ToastAfterActivationBehavior AfterActivationBehavior { get; set; } = ToastAfterActivationBehavior.Default;
internal void PopulateElement(IElement_ToastActivatable el) internal void PopulateElement(IElement_ToastActivatable el)
...@@ -39,9 +38,7 @@ namespace Microsoft.Toolkit.Uwp.Notifications ...@@ -39,9 +38,7 @@ namespace Microsoft.Toolkit.Uwp.Notifications
} }
el.ProtocolActivationTargetApplicationPfn = ProtocolActivationTargetApplicationPfn; el.ProtocolActivationTargetApplicationPfn = ProtocolActivationTargetApplicationPfn;
#pragma warning disable 618
el.AfterActivationBehavior = AfterActivationBehavior; el.AfterActivationBehavior = AfterActivationBehavior;
#pragma warning restore 618
} }
} }
} }
...@@ -102,9 +102,7 @@ namespace Microsoft.Toolkit.Uwp.Notifications ...@@ -102,9 +102,7 @@ namespace Microsoft.Toolkit.Uwp.Notifications
{ {
if (ActivationOptions != null) if (ActivationOptions != null)
{ {
#pragma warning disable 618
if (ActivationOptions.AfterActivationBehavior != ToastAfterActivationBehavior.Default) if (ActivationOptions.AfterActivationBehavior != ToastAfterActivationBehavior.Default)
#pragma warning restore 618
{ {
throw new InvalidOperationException("ToastContent does not support a custom AfterActivationBehavior. Please ensure ActivationOptions.AfterActivationBehavior is set to Default."); throw new InvalidOperationException("ToastContent does not support a custom AfterActivationBehavior. Please ensure ActivationOptions.AfterActivationBehavior is set to Default.");
} }
......
...@@ -101,9 +101,7 @@ namespace Microsoft.Toolkit.Uwp.Notifications ...@@ -101,9 +101,7 @@ namespace Microsoft.Toolkit.Uwp.Notifications
{ {
if (ActivationOptions != null) if (ActivationOptions != null)
{ {
#pragma warning disable 618
if (ActivationOptions.AfterActivationBehavior != ToastAfterActivationBehavior.Default) if (ActivationOptions.AfterActivationBehavior != ToastAfterActivationBehavior.Default)
#pragma warning restore 618
{ {
throw new InvalidOperationException("ToastHeader does not support a custom AfterActivationBehavior. Please ensure ActivationOptions.AfterActivationBehavior is set to Default."); throw new InvalidOperationException("ToastHeader does not support a custom AfterActivationBehavior. Please ensure ActivationOptions.AfterActivationBehavior is set to Default.");
} }
......
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup> <PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
......
...@@ -1208,7 +1208,7 @@ ...@@ -1208,7 +1208,7 @@
</member> </member>
<member name="P:Microsoft.Toolkit.Uwp.Notifications.ToastActivationOptions.AfterActivationBehavior"> <member name="P:Microsoft.Toolkit.Uwp.Notifications.ToastActivationOptions.AfterActivationBehavior">
<summary> <summary>
Not supported on Windows: Specifies the behavior that the toast should use when the user invokes this action. Note that this option only works on <see cref="T:Microsoft.Toolkit.Uwp.Notifications.ToastButton"/> and <see cref="T:Microsoft.Toolkit.Uwp.Notifications.ToastContextMenuItem"/>. New in Fall Creators Update: Specifies the behavior that the toast should use when the user invokes this action. Note that this option only works on <see cref="T:Microsoft.Toolkit.Uwp.Notifications.ToastButton"/> and <see cref="T:Microsoft.Toolkit.Uwp.Notifications.ToastContextMenuItem"/>. Desktop-only, supported in builds 16251 or higher.
</summary> </summary>
</member> </member>
<member name="T:Microsoft.Toolkit.Uwp.Notifications.IToastBindingGenericChild"> <member name="T:Microsoft.Toolkit.Uwp.Notifications.IToastBindingGenericChild">
......
...@@ -1208,7 +1208,7 @@ ...@@ -1208,7 +1208,7 @@
</member> </member>
<member name="P:Microsoft.Toolkit.Uwp.Notifications.ToastActivationOptions.AfterActivationBehavior"> <member name="P:Microsoft.Toolkit.Uwp.Notifications.ToastActivationOptions.AfterActivationBehavior">
<summary> <summary>
Not supported on Windows: Specifies the behavior that the toast should use when the user invokes this action. Note that this option only works on <see cref="T:Microsoft.Toolkit.Uwp.Notifications.ToastButton"/> and <see cref="T:Microsoft.Toolkit.Uwp.Notifications.ToastContextMenuItem"/>. New in Fall Creators Update: Specifies the behavior that the toast should use when the user invokes this action. Note that this option only works on <see cref="T:Microsoft.Toolkit.Uwp.Notifications.ToastButton"/> and <see cref="T:Microsoft.Toolkit.Uwp.Notifications.ToastContextMenuItem"/>. Desktop-only, supported in builds 16251 or higher.
</summary> </summary>
</member> </member>
<member name="T:Microsoft.Toolkit.Uwp.Notifications.IToastBindingGenericChild"> <member name="T:Microsoft.Toolkit.Uwp.Notifications.IToastBindingGenericChild">
......
...@@ -2,6 +2,7 @@ Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Too ...@@ -2,6 +2,7 @@ Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Too
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\bin\Debug\Microsoft.Toolkit.Uwp.Notifications.dll Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\bin\Debug\Microsoft.Toolkit.Uwp.Notifications.dll
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\bin\Debug\Microsoft.Toolkit.Uwp.Notifications.pdb Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\bin\Debug\Microsoft.Toolkit.Uwp.Notifications.pdb
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\bin\Debug\Microsoft.Toolkit.Uwp.Notifications.pri Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\bin\Debug\Microsoft.Toolkit.Uwp.Notifications.pri
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\obj\Debug\Microsoft.Toolkit.Uwp.Notifications.UWP.csproj.CoreCompileInputs.cache
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\obj\Debug\Microsoft.Toolkit.Uwp.Notifications.dll Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\obj\Debug\Microsoft.Toolkit.Uwp.Notifications.dll
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\obj\Debug\Microsoft.Toolkit.Uwp.Notifications.pdb Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\obj\Debug\Microsoft.Toolkit.Uwp.Notifications.pdb
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\obj\Debug\priconfig.xml Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\obj\Debug\priconfig.xml
...@@ -15,4 +16,3 @@ Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Too ...@@ -15,4 +16,3 @@ Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Too
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\obj\Debug\qualifiers.txt Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\obj\Debug\qualifiers.txt
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\obj\Debug\qualifiers.txt.intermediate Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\obj\Debug\qualifiers.txt.intermediate
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\obj\Debug\MultipleQualifiersPerDimensionFound.txt Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\obj\Debug\MultipleQualifiersPerDimensionFound.txt
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\obj\Debug\Microsoft.Toolkit.Uwp.Notifications.UWP.csprojResolveAssemblyReference.cache
{
"version": 1,
"dgSpecHash": "MPJhXYwejWeF5r2pRIM8qdwZAHqCAWLWc7K9z/4A1i0x2Sw8uWR4a0prTVhw8sAj5BtrpUC+y6F2+vdL2SiWgA==",
"success": true
}
\ No newline at end of file
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\bin\Publish\Microsoft.Toolkit.Uwp.Notifications.dll
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\bin\Publish\Microsoft.Toolkit.Uwp.Notifications.pdb
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\bin\Publish\Microsoft.Toolkit.Uwp.Notifications.xml
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\bin\Publish\Microsoft.Toolkit.Uwp.Notifications.pri
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\obj\Publish\Microsoft.Toolkit.Uwp.Notifications.UWP.csprojResolveAssemblyReference.cache
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\obj\Publish\Microsoft.Toolkit.Uwp.Notifications.dll
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\obj\Publish\Microsoft.Toolkit.Uwp.Notifications.pdb
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\obj\Publish\priconfig.xml
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\obj\Publish\priconfig.xml.intermediate
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\obj\Publish\layout.resfiles
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\obj\Publish\layout.resfiles.intermediate
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\obj\Publish\resources.resfiles
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\obj\Publish\resources.resfiles.intermediate
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\obj\Publish\pri.resfiles
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\obj\Publish\pri.resfiles.intermediate
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\obj\Publish\qualifiers.txt
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\obj\Publish\qualifiers.txt.intermediate
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\obj\Publish\MultipleQualifiersPerDimensionFound.txt
...@@ -2,6 +2,7 @@ Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Too ...@@ -2,6 +2,7 @@ Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Too
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\bin\Release\Microsoft.Toolkit.Uwp.Notifications.dll Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\bin\Release\Microsoft.Toolkit.Uwp.Notifications.dll
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\bin\Release\Microsoft.Toolkit.Uwp.Notifications.pdb Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\bin\Release\Microsoft.Toolkit.Uwp.Notifications.pdb
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\bin\Release\Microsoft.Toolkit.Uwp.Notifications.pri Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\bin\Release\Microsoft.Toolkit.Uwp.Notifications.pri
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\obj\Release\Microsoft.Toolkit.Uwp.Notifications.UWP.csproj.CoreCompileInputs.cache
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\obj\Release\Microsoft.Toolkit.Uwp.Notifications.dll Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\obj\Release\Microsoft.Toolkit.Uwp.Notifications.dll
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\obj\Release\Microsoft.Toolkit.Uwp.Notifications.pdb Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\obj\Release\Microsoft.Toolkit.Uwp.Notifications.pdb
Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\obj\Release\priconfig.xml Z:\Documents\github\cordova-plugin-local-notifications\src\windows\Microsoft.Toolkit.Uwp.Notifications.UWP\obj\Release\priconfig.xml
......
{ {
"version": 2, "version": 3,
"targets": { "targets": {
"UAP,Version=v10.0": { "UAP,Version=v10.0.10240": {
"Microsoft.CSharp/4.0.1": { "Microsoft.CSharp/4.0.1": {
"type": "package", "type": "package",
"dependencies": { "dependencies": {
...@@ -2173,7 +2173,7 @@ ...@@ -2173,7 +2173,7 @@
} }
} }
}, },
"UAP,Version=v10.0/win10-arm": { "UAP,Version=v10.0.10240/win10-arm": {
"Microsoft.CSharp/4.0.1": { "Microsoft.CSharp/4.0.1": {
"type": "package", "type": "package",
"dependencies": { "dependencies": {
...@@ -4428,7 +4428,7 @@ ...@@ -4428,7 +4428,7 @@
} }
} }
}, },
"UAP,Version=v10.0/win10-arm-aot": { "UAP,Version=v10.0.10240/win10-arm-aot": {
"Microsoft.CSharp/4.0.1": { "Microsoft.CSharp/4.0.1": {
"type": "package", "type": "package",
"dependencies": { "dependencies": {
...@@ -5006,9 +5006,6 @@ ...@@ -5006,9 +5006,6 @@
}, },
"runtime.win10-arm-aot.runtime.native.System.IO.Compression/4.0.1": { "runtime.win10-arm-aot.runtime.native.System.IO.Compression/4.0.1": {
"type": "package", "type": "package",
"compile": {
"runtimes/win10-arm-aot/lib/netcore50/_._": {}
},
"runtime": { "runtime": {
"runtimes/win10-arm-aot/lib/netcore50/clrcompression.dll": {} "runtimes/win10-arm-aot/lib/netcore50/clrcompression.dll": {}
} }
...@@ -6722,7 +6719,7 @@ ...@@ -6722,7 +6719,7 @@
} }
} }
}, },
"UAP,Version=v10.0/win10-x64": { "UAP,Version=v10.0.10240/win10-x64": {
"Microsoft.CSharp/4.0.1": { "Microsoft.CSharp/4.0.1": {
"type": "package", "type": "package",
"dependencies": { "dependencies": {
...@@ -8986,7 +8983,7 @@ ...@@ -8986,7 +8983,7 @@
} }
} }
}, },
"UAP,Version=v10.0/win10-x64-aot": { "UAP,Version=v10.0.10240/win10-x64-aot": {
"Microsoft.CSharp/4.0.1": { "Microsoft.CSharp/4.0.1": {
"type": "package", "type": "package",
"dependencies": { "dependencies": {
...@@ -9567,9 +9564,6 @@ ...@@ -9567,9 +9564,6 @@
}, },
"runtime.win10-x64-aot.runtime.native.System.IO.Compression/4.0.1": { "runtime.win10-x64-aot.runtime.native.System.IO.Compression/4.0.1": {
"type": "package", "type": "package",
"compile": {
"runtimes/win10-x64-aot/lib/netcore50/_._": {}
},
"runtime": { "runtime": {
"runtimes/win10-x64-aot/lib/netcore50/clrcompression.dll": {} "runtimes/win10-x64-aot/lib/netcore50/clrcompression.dll": {}
} }
...@@ -11289,7 +11283,7 @@ ...@@ -11289,7 +11283,7 @@
} }
} }
}, },
"UAP,Version=v10.0/win10-x86": { "UAP,Version=v10.0.10240/win10-x86": {
"Microsoft.CSharp/4.0.1": { "Microsoft.CSharp/4.0.1": {
"type": "package", "type": "package",
"dependencies": { "dependencies": {
...@@ -13553,7 +13547,7 @@ ...@@ -13553,7 +13547,7 @@
} }
} }
}, },
"UAP,Version=v10.0/win10-x86-aot": { "UAP,Version=v10.0.10240/win10-x86-aot": {
"Microsoft.CSharp/4.0.1": { "Microsoft.CSharp/4.0.1": {
"type": "package", "type": "package",
"dependencies": { "dependencies": {
...@@ -14134,9 +14128,6 @@ ...@@ -14134,9 +14128,6 @@
}, },
"runtime.win10-x86-aot.runtime.native.System.IO.Compression/4.0.1": { "runtime.win10-x86-aot.runtime.native.System.IO.Compression/4.0.1": {
"type": "package", "type": "package",
"compile": {
"runtimes/win10-x86-aot/lib/netcore50/_._": {}
},
"runtime": { "runtime": {
"runtimes/win10-x86-aot/lib/netcore50/clrcompression.dll": {} "runtimes/win10-x86-aot/lib/netcore50/clrcompression.dll": {}
} }
...@@ -22044,7 +22035,7 @@ ...@@ -22044,7 +22035,7 @@
"Microsoft.NETCore.UniversalWindowsPlatform >= 5.2.3", "Microsoft.NETCore.UniversalWindowsPlatform >= 5.2.3",
"StyleCop.Analyzers >= 1.0.0" "StyleCop.Analyzers >= 1.0.0"
], ],
"UAP,Version=v10.0": [] "UAP,Version=v10.0.10240": []
}, },
"packageFolders": { "packageFolders": {
"C:\\Users\\katze\\.nuget\\packages\\": {} "C:\\Users\\katze\\.nuget\\packages\\": {}
...@@ -22055,14 +22046,24 @@ ...@@ -22055,14 +22046,24 @@
"projectName": "Microsoft.Toolkit.Uwp.Notifications.UWP", "projectName": "Microsoft.Toolkit.Uwp.Notifications.UWP",
"projectPath": "Z:\\Documents\\github\\cordova-plugin-local-notifications\\src\\windows\\Microsoft.Toolkit.Uwp.Notifications.UWP\\Microsoft.Toolkit.Uwp.Notifications.UWP.csproj", "projectPath": "Z:\\Documents\\github\\cordova-plugin-local-notifications\\src\\windows\\Microsoft.Toolkit.Uwp.Notifications.UWP\\Microsoft.Toolkit.Uwp.Notifications.UWP.csproj",
"projectJsonPath": "Z:\\Documents\\github\\cordova-plugin-local-notifications\\src\\windows\\Microsoft.Toolkit.Uwp.Notifications.UWP\\project.json", "projectJsonPath": "Z:\\Documents\\github\\cordova-plugin-local-notifications\\src\\windows\\Microsoft.Toolkit.Uwp.Notifications.UWP\\project.json",
"projectStyle": "ProjectJson" "packagesPath": "C:\\Users\\katze\\.nuget\\packages\\",
"outputPath": "Z:\\Documents\\github\\cordova-plugin-local-notifications\\src\\windows\\Microsoft.Toolkit.Uwp.Notifications.UWP\\obj\\",
"projectStyle": "ProjectJson",
"configFilePaths": [
"C:\\Users\\katze\\AppData\\Roaming\\NuGet\\NuGet.Config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
],
"sources": {
"C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
"https://api.nuget.org/v3/index.json": {}
}
}, },
"dependencies": { "dependencies": {
"Microsoft.NETCore.UniversalWindowsPlatform": "5.2.3", "Microsoft.NETCore.UniversalWindowsPlatform": "5.2.3",
"StyleCop.Analyzers": "1.0.0" "StyleCop.Analyzers": "1.0.0"
}, },
"frameworks": { "frameworks": {
"uap10.0": {} "uap10.0.10240": {}
}, },
"runtimes": { "runtimes": {
"win10-arm": { "win10-arm": {
......
...@@ -83,41 +83,38 @@ exports.schedule = function (msgs, callback, scope, args) { ...@@ -83,41 +83,38 @@ exports.schedule = function (msgs, callback, scope, args) {
} }
}; };
// /** /**
// * Update existing notifications specified by IDs in options. * Schedule notifications.
// * *
// * @param {Object} notifications * @param [ Array ] notifications The notifications to schedule.
// * The notification properties to update * @param [ Function ] callback The function to be exec as the callback.
// * @param {Function} callback * @param [ Object ] scope The callback function's scope.
// * A function to be called after the notification has been updated * @param [ Object ] args Optional flags how to schedule.
// * @param {Object?} scope *
// * The scope for the callback function * @return [ Void ]
// * @param {Object?} args */
// * skipPermission:true schedules the notifications immediatly without exports.update = function (msgs, callback, scope, args) {
// * registering or checking for permission var fn = function(granted) {
// */
// exports.update = function (msgs, callback, scope, args) { if (!granted) return;
// var fn = function(granted) {
var notifications = Array.isArray(msgs) ? msgs : [msgs];
// if (!granted) return;
for (var i = 0; i < notifications.length; i++) {
// var notifications = Array.isArray(msgs) ? msgs : [msgs]; var notification = notifications[i];
// for (var i = 0; i < notifications.length; i++) { this.convertProperties(notification);
// var notification = notifications[i]; }
// this.convertProperties(notification); this.exec('update', notifications, callback, scope);
// } };
// this.exec('update', notifications, callback, scope); if (args && args.skipPermission) {
// }; fn.call(this, true);
} else {
// if (args && args.skipPermission) { this.requestPermission(fn, this);
// fn.call(this, true); }
// } else { };
// this.registerPermission(fn, this);
// }
// };
/** /**
* Clear the specified notifications by id. * Clear the specified notifications by id.
......
...@@ -28,14 +28,14 @@ exports._defaults = { ...@@ -28,14 +28,14 @@ exports._defaults = {
text: '', text: '',
title: '', title: '',
sound: 'res://platform_default', sound: 'res://platform_default',
trigger: 'date',
badge: undefined, badge: undefined,
data: undefined, data: undefined,
every: undefined, icon: undefined,
at: undefined, trigger: { type: 'calendar' },
actions: [], actions: [],
actionGroupId: undefined, actionGroupId: undefined,
attachments: [] attachments: [],
progressBar: false
}; };
// Listener // Listener
...@@ -58,12 +58,6 @@ exports.applyPlatformSpecificOptions = function () { ...@@ -58,12 +58,6 @@ exports.applyPlatformSpecificOptions = function () {
defaults.led = undefined; defaults.led = undefined;
defaults.color = undefined; defaults.color = undefined;
break; break;
case 'iOS':
defaults.region = undefined;
defaults.radius = undefined;
defaults.notifyOnEntry = true;
defaults.notifyOnExit = false;
break;
} }
}; };
...@@ -77,7 +71,6 @@ exports.applyPlatformSpecificOptions = function () { ...@@ -77,7 +71,6 @@ exports.applyPlatformSpecificOptions = function () {
exports.mergeWithDefaults = function (options) { exports.mergeWithDefaults = function (options) {
var defaults = this.getDefaults(); var defaults = this.getDefaults();
options.at = this.getValueFor(options, 'at', 'firstAt', 'date');
options.text = this.getValueFor(options, 'text', 'message'); options.text = this.getValueFor(options, 'text', 'message');
options.data = this.getValueFor(options, 'data', 'json'); options.data = this.getValueFor(options, 'data', 'json');
...@@ -89,10 +82,6 @@ exports.mergeWithDefaults = function (options) { ...@@ -89,10 +82,6 @@ exports.mergeWithDefaults = function (options) {
options.autoClear = false; options.autoClear = false;
} }
if (options.at === undefined || options.at === null) {
options.at = new Date();
}
for (var key in defaults) { for (var key in defaults) {
if (options[key] === null || options[key] === undefined) { if (options[key] === null || options[key] === undefined) {
if (options.hasOwnProperty(key) && ['data','sound'].indexOf(key) > -1) { if (options.hasOwnProperty(key) && ['data','sound'].indexOf(key) > -1) {
...@@ -105,7 +94,7 @@ exports.mergeWithDefaults = function (options) { ...@@ -105,7 +94,7 @@ exports.mergeWithDefaults = function (options) {
for (key in options) { for (key in options) {
if (!defaults.hasOwnProperty(key)) { if (!defaults.hasOwnProperty(key)) {
delete options[key]; // delete options[key];
console.warn('Unknown property: ' + key); console.warn('Unknown property: ' + key);
} }
} }
...@@ -148,21 +137,13 @@ exports.convertProperties = function (options) { ...@@ -148,21 +137,13 @@ exports.convertProperties = function (options) {
} }
} }
if (options.at) {
if (typeof options.at == 'object') {
options.at = options.at.getTime();
}
options.at = Math.round(options.at/1000);
}
if (typeof options.data == 'object') { if (typeof options.data == 'object') {
options.data = JSON.stringify(options.data); options.data = JSON.stringify(options.data);
} }
if (options.actions) { this.convertTrigger(options);
this.convertActions(options); this.convertActions(options);
} this.convertProgressBar(options);
return options; return options;
}; };
...@@ -198,6 +179,82 @@ exports.convertActions = function (options) { ...@@ -198,6 +179,82 @@ exports.convertActions = function (options) {
options.category = (options.category || 'DEFAULT_GROUP').toString(); options.category = (options.category || 'DEFAULT_GROUP').toString();
options.actions = actions; options.actions = actions;
return options;
};
/**
* Convert the passed values for the trigger to their required type.
*
* @param [ Map ] options Set of custom values.
*
* @return [ Map ] Interaction object with trigger spec.
*/
exports.convertTrigger = function (options) {
var cfg = options.trigger,
isDate = Date.prototype.isPrototypeOf(cfg),
isObject = Object.prototype.isPrototypeOf(cfg),
trigger = !isDate && isObject ? cfg : {},
date = this.getValueFor(trigger, 'at', 'firstAt', 'date');
if (!trigger.type) {
trigger.type = trigger.center ? 'location' : 'calendar';
}
var isCal = trigger.type == 'calendar';
if (isCal && !date) {
date = this.getValueFor(options, 'at', 'firstAt', 'date') || new Date();
}
if (isCal) {
date = typeof date == 'object' ? date.getTime() : date;
trigger.at = Math.round(date / 1000);
}
if (isCal && !trigger.every && options.every) {
trigger.every = options.every;
}
if (!trigger.count && device.platform == 'windows') {
trigger.count = trigger.every ? 5 : 1;
}
if (trigger.every && device.platform == 'windows') {
trigger.every = trigger.every.toString();
}
if (!isCal) {
trigger.notifyOnEntry = !!trigger.notifyOnEntry;
trigger.notifyOnExit = trigger.notifyOnExit === true;
trigger.radius = trigger.radius || 5;
}
delete options.every;
delete options.at;
delete options.firstAt;
delete options.date;
options.trigger = trigger;
return options;
};
/**
* Convert the passed values for the progressBar to their required type.
*
* @param [ Map ] options Set of custom values.
*
* @return [ Map ] Interaction object with trigger spec.
*/
exports.convertProgressBar = function (options) {
var cfg = options.progressBar;
if (typeof cfg === 'boolean') {
options.progressBar = { enabled: cfg };
}
return options;
}; };
/** /**
...@@ -305,13 +362,13 @@ exports.exec = function (action, args, callback, scope) { ...@@ -305,13 +362,13 @@ exports.exec = function (action, args, callback, scope) {
channel.deviceready.subscribe(function () { channel.deviceready.subscribe(function () {
// Device is ready now, the listeners are registered // Device is ready now, the listeners are registered
// and all queued events can be executed. // and all queued events can be executed.
exports.exec('deviceready'); exports.exec('ready');
}); });
// Called before 'deviceready' event // Called before 'deviceready' event
channel.onCordovaReady.subscribe(function () { channel.onCordovaReady.subscribe(function () {
// Set launchDetails object // Set launchDetails object
exports.exec('launchDetails'); exports.exec('launch');
// Device plugin is ready now // Device plugin is ready now
channel.onCordovaInfoReady.subscribe(function () { channel.onCordovaInfoReady.subscribe(function () {
// Merge platform specifics into defaults // Merge platform specifics into defaults
......
...@@ -57,22 +57,19 @@ exports.schedule = function (notifications, callback, scope, args) { ...@@ -57,22 +57,19 @@ exports.schedule = function (notifications, callback, scope, args) {
this.core.schedule(notifications, callback, scope, args); this.core.schedule(notifications, callback, scope, args);
}; };
// /** /**
// * Update existing notifications specified by IDs in options. * Update notifications.
// * *
// * @param {Object} notifications * @param [ Array ] notifications The notifications to schedule.
// * The notification properties to update * @param [ Function ] callback The function to be exec as the callback.
// * @param {Function} callback * @param [ Object ] scope The callback function's scope.
// * A function to be called after the notification has been updated * @param [ Object ] args Optional flags how to schedule.
// * @param {Object?} scope *
// * The scope for the callback function * @return [ Void ]
// * @param {Object?} args */
// * skipPermission:true schedules the notifications immediatly without exports.update = function (notifications, callback, scope, args) {
// * registering or checking for permission this.core.update(notifications, callback, scope, args);
// */ };
// exports.update = function (notifications, callback, scope, args) {
// this.core.update(notifications, callback, scope, args);
// };
/** /**
* Clear the specified notifications by id. * Clear the specified notifications by id.
......
...@@ -51,32 +51,34 @@ var app = { ...@@ -51,32 +51,34 @@ var app = {
}, },
// Initialize plugin // Initialize plugin
pluginInitialize: function() { pluginInitialize: function() {
document.getElementById('granted').onclick = app.hasPermission; document.getElementById('granted').onclick = app.hasPermission;
document.getElementById('request').onclick = app.askPermission; document.getElementById('request').onclick = app.askPermission;
document.getElementById('sched_single').onclick = app.scheduleSingle; document.getElementById('sched_single').onclick = app.scheduleSingle;
document.getElementById('sched_multi').onclick = app.scheduleMultiple; document.getElementById('sched_multi').onclick = app.scheduleMultiple;
document.getElementById('sched_delayed').onclick = app.scheduleDelayed; document.getElementById('sched_delayed').onclick = app.scheduleDelayed;
document.getElementById('sched_interval').onclick = app.scheduleInterval; document.getElementById('sched_interval').onclick = app.scheduleInterval;
document.getElementById('sched_actions').onclick = app.scheduleActions; document.getElementById('sched_actions').onclick = app.scheduleActions;
document.getElementById('clear_single').onclick = app.clearSingle; document.getElementById('update_text').onclick = app.update;
document.getElementById('clear_multi').onclick = app.clearMulti; document.getElementById('update_interval').onclick = app.updateInterval;
document.getElementById('clear_all').onclick = app.clearAll; document.getElementById('clear_single').onclick = app.clearSingle;
document.getElementById('cancel_single').onclick = app.cancelSingle; document.getElementById('clear_multi').onclick = app.clearMulti;
document.getElementById('cancel_multi').onclick = app.cancelMulti; document.getElementById('clear_all').onclick = app.clearAll;
document.getElementById('cancel_all').onclick = app.cancelAll; document.getElementById('cancel_single').onclick = app.cancelSingle;
document.getElementById('present?').onclick = app.isPresent; document.getElementById('cancel_multi').onclick = app.cancelMulti;
document.getElementById('scheduled?').onclick = app.isScheduled; document.getElementById('cancel_all').onclick = app.cancelAll;
document.getElementById('triggered?').onclick = app.isTriggered; document.getElementById('present?').onclick = app.isPresent;
document.getElementById('type').onclick = app.type; document.getElementById('scheduled?').onclick = app.isScheduled;
document.getElementById('ids').onclick = app.ids; document.getElementById('triggered?').onclick = app.isTriggered;
document.getElementById('scheduled_ids').onclick = app.scheduledIds; document.getElementById('type').onclick = app.type;
document.getElementById('triggered_ids').onclick = app.triggeredIds; document.getElementById('ids').onclick = app.ids;
document.getElementById('scheduled_nots').onclick = app.scheduledNots; document.getElementById('scheduled_ids').onclick = app.scheduledIds;
document.getElementById('triggered_nots').onclick = app.triggeredNots; document.getElementById('triggered_ids').onclick = app.triggeredIds;
document.getElementById('notification').onclick = app.notification; document.getElementById('scheduled_nots').onclick = app.scheduledNots;
document.getElementById('multiple_nots').onclick = app.multipleNots; document.getElementById('triggered_nots').onclick = app.triggeredNots;
document.getElementById('notifications').onclick = app.notifications; document.getElementById('notification').onclick = app.notification;
document.getElementById('defaults').onclick = app.setDefaultTitle; document.getElementById('multiple_nots').onclick = app.multipleNots;
document.getElementById('notifications').onclick = app.notifications;
document.getElementById('defaults').onclick = app.setDefaultTitle;
var details = cordova.plugins.notification.local.launchDetails; var details = cordova.plugins.notification.local.launchDetails;
...@@ -100,7 +102,8 @@ var app = { ...@@ -100,7 +102,8 @@ var app = {
scheduleSingle: function () { scheduleSingle: function () {
cordova.plugins.notification.local.schedule({ cordova.plugins.notification.local.schedule({
id: 1, id: 1,
text: 'Test Message 1', title: 'Test Message',
text: 'My first notification',
icon: 'http://3.bp.blogspot.com/-Qdsy-GpempY/UU_BN9LTqSI/AAAAAAAAAMA/LkwLW2yNBJ4/s1600/supersu.png', icon: 'http://3.bp.blogspot.com/-Qdsy-GpempY/UU_BN9LTqSI/AAAAAAAAAMA/LkwLW2yNBJ4/s1600/supersu.png',
smallIcon: 'res://cordova', smallIcon: 'res://cordova',
sound: null, sound: null,
...@@ -131,25 +134,25 @@ var app = { ...@@ -131,25 +134,25 @@ var app = {
var now = new Date().getTime(), var now = new Date().getTime(),
_5_sec_from_now = new Date(now + 5 * 1000); _5_sec_from_now = new Date(now + 5 * 1000);
var sound = device.platform == 'Android' ? 'file://sound.mp3' : 'file://beep.caf'; var sound = device.platform != 'iOS' ? 'file://sound.mp3' : 'file://beep.caf';
cordova.plugins.notification.local.schedule({ cordova.plugins.notification.local.schedule({
id: 1, id: 1,
title: 'Scheduled with delay', title: 'Scheduled with delay',
text: 'Test Message 1', text: 'Test Message 1',
at: _5_sec_from_now, trigger: _5_sec_from_now,
sound: sound, sound: sound,
badge: 12 badge: 12
}); });
}, },
// Schedule a repeating notification // Schedule a repeating notification
scheduleInterval: function () { scheduleInterval: function () {
var sound = device.platform == 'Android' ? 'file://sound.mp3' : 'file://beep.caf'; var sound = device.platform != 'iOS' ? 'file://sound.mp3' : 'file://beep.caf';
cordova.plugins.notification.local.schedule({ cordova.plugins.notification.local.schedule({
id: 1, id: 1,
text: 'Scheduled every minute', text: 'Scheduled every minute',
every: 'minute', trigger: { every: 'minute' },
sound: sound, sound: sound,
icon: 'res://icon', icon: 'res://icon',
smallIcon: 'res://ic_popup_sync' smallIcon: 'res://ic_popup_sync'
...@@ -160,6 +163,7 @@ var app = { ...@@ -160,6 +163,7 @@ var app = {
cordova.plugins.notification.local.schedule({ cordova.plugins.notification.local.schedule({
title: 'Local Notification Plugin', title: 'Local Notification Plugin',
text: 'Made by appPlant from Leipzig/Germany', text: 'Made by appPlant from Leipzig/Germany',
icon: 'file://img/avatar.jpg?crop=cirlce',
attachments: ['file://img/logo.png'], attachments: ['file://img/logo.png'],
actionGroupId: 'like-dislike', actionGroupId: 'like-dislike',
actions: [{ actions: [{
...@@ -181,6 +185,27 @@ var app = { ...@@ -181,6 +185,27 @@ var app = {
}] }]
}); });
}, },
// Update notification text
update: function () {
cordova.plugins.notification.local.update({
id: 1,
title: 'Updated Message 1',
text: 'New icon :)',
icon: 'res://icon',
color: 'FF0000',
attachments: ['file://img/logo.png'],
data: { updated: true }
});
},
// Update trigger interval
updateInterval: function () {
cordova.plugins.notification.local.update({
id: 1,
title: 'Updated Message 1',
text: 'Triggeres every minute',
every: 'minute'
});
},
// Clear a single notification // Clear a single notification
clearSingle: function () { clearSingle: function () {
cordova.plugins.notification.local.clear(1, app.ids); cordova.plugins.notification.local.clear(1, app.ids);
...@@ -298,7 +323,7 @@ var app = { ...@@ -298,7 +323,7 @@ var app = {
}); });
cordova.plugins.notification.local.on('update', function (obj) { cordova.plugins.notification.local.on('update', function (obj) {
console.log('update', arguments); console.log('update', arguments);
// showToast('updated: ' + obj.id); showToast('updated: ' + obj.id);
}); });
cordova.plugins.notification.local.on('trigger', function (obj) { cordova.plugins.notification.local.on('trigger', function (obj) {
console.log('trigger', arguments); console.log('trigger', arguments);
...@@ -371,7 +396,7 @@ showWinDialog = function (text) { ...@@ -371,7 +396,7 @@ showWinDialog = function (text) {
}; };
if (window.hasOwnProperty('Windows')) { if (window.hasOwnProperty('Windows')) {
alert = function (msg) { new Windows.UI.Popups.MessageDialog(msg).showAsync(); }; alert = showWinDialog;
} }
app.initialize(); app.initialize();
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment