Segunda revisión completa: fixes críticos aplicados

- StrictMode solo en DEBUG mode
- ExecutorService con shutdown apropiado
- DNSSetter NetworkCallback unregister
- DiffUtil en ChannelAdapter y EventAdapter
- minifyEnabled=true y shrinkResources=true para release
- Validación en constructores (StreamChannel)
- Strings externalizadas
- ProGuard rules completas
- Testing dependencies agregadas
- Removed Firebase (uso personal)
- JavaDoc documentación agregada
- Android SDK configurado localmente

Compilado exitosamente: StreamPlayer v9.4.2 debug APK (11MB)
This commit is contained in:
renato97
2026-01-11 19:24:28 -03:00
commit 0a1d6f295f
2006 changed files with 159128 additions and 0 deletions

15
dashboard/node_modules/touch/LICENSE generated vendored Normal file
View File

@@ -0,0 +1,15 @@
The ISC License
Copyright (c) Isaac Z. Schlueter
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

52
dashboard/node_modules/touch/README.md generated vendored Normal file
View File

@@ -0,0 +1,52 @@
# node-touch
For all your node touching needs.
## Installing
```bash
npm install touch
```
## CLI Usage:
See `man touch`
This package exports a binary called `nodetouch` that works mostly
like the unix builtin `touch(1)`.
## API Usage:
```javascript
var touch = require("touch")
```
Gives you the following functions:
* `touch(filename, options, cb)`
* `touch.sync(filename, options)`
* `touch.ftouch(fd, options, cb)`
* `touch.ftouchSync(fd, options)`
All the `options` objects are optional.
All the async functions return a Promise. If a callback function is
provided, then it's attached to the Promise.
## Options
* `force` like `touch -f` Boolean
* `time` like `touch -t <date>` Can be a Date object, or any parseable
Date string, or epoch ms number.
* `atime` like `touch -a` Can be either a Boolean, or a Date.
* `mtime` like `touch -m` Can be either a Boolean, or a Date.
* `ref` like `touch -r <file>` Must be path to a file.
* `nocreate` like `touch -c` Boolean
If neither `atime` nor `mtime` are set, then both values are set. If
one of them is set, then the other is not.
## cli
This package creates a `nodetouch` command line executable that works
very much like the unix builtin `touch(1)`

224
dashboard/node_modules/touch/index.js generated vendored Normal file
View File

@@ -0,0 +1,224 @@
'use strict'
const EE = require('events').EventEmitter
const cons = require('constants')
const fs = require('fs')
module.exports = (f, options, cb) => {
if (typeof options === 'function')
cb = options, options = {}
const p = new Promise((res, rej) => {
new Touch(validOpts(options, f, null))
.on('done', res).on('error', rej)
})
return cb ? p.then(res => cb(null, res), cb) : p
}
module.exports.sync = module.exports.touchSync = (f, options) =>
(new TouchSync(validOpts(options, f, null)), undefined)
module.exports.ftouch = (fd, options, cb) => {
if (typeof options === 'function')
cb = options, options = {}
const p = new Promise((res, rej) => {
new Touch(validOpts(options, null, fd))
.on('done', res).on('error', rej)
})
return cb ? p.then(res => cb(null, res), cb) : p
}
module.exports.ftouchSync = (fd, opt) =>
(new TouchSync(validOpts(opt, null, fd)), undefined)
const validOpts = (options, path, fd) => {
options = Object.create(options || {})
options.fd = fd
options.path = path
// {mtime: true}, {ctime: true}
// If set to something else, then treat as epoch ms value
const now = new Date(options.time || Date.now()).getTime() / 1000
if (!options.atime && !options.mtime)
options.atime = options.mtime = now
else {
if (true === options.atime)
options.atime = now
if (true === options.mtime)
options.mtime = now
}
let oflags = 0
if (!options.force)
oflags = oflags | cons.O_RDWR
if (!options.nocreate)
oflags = oflags | cons.O_CREAT
options.oflags = oflags
return options
}
class Touch extends EE {
constructor (options) {
super(options)
this.fd = options.fd
this.path = options.path
this.atime = options.atime
this.mtime = options.mtime
this.ref = options.ref
this.nocreate = !!options.nocreate
this.force = !!options.force
this.closeAfter = options.closeAfter
this.oflags = options.oflags
this.options = options
if (typeof this.fd !== 'number') {
this.closeAfter = true
this.open()
} else
this.onopen(null, this.fd)
}
emit (ev, data) {
// we only emit when either done or erroring
// in both cases, need to close
this.close()
return super.emit(ev, data)
}
close () {
if (typeof this.fd === 'number' && this.closeAfter)
fs.close(this.fd, () => {})
}
open () {
fs.open(this.path, this.oflags, (er, fd) => this.onopen(er, fd))
}
onopen (er, fd) {
if (er) {
if (er.code === 'EISDIR')
this.onopen(null, null)
else if (er.code === 'ENOENT' && this.nocreate)
this.emit('done')
else
this.emit('error', er)
} else {
this.fd = fd
if (this.ref)
this.statref()
else if (!this.atime || !this.mtime)
this.fstat()
else
this.futimes()
}
}
statref () {
fs.stat(this.ref, (er, st) => {
if (er)
this.emit('error', er)
else
this.onstatref(st)
})
}
onstatref (st) {
this.atime = this.atime && st.atime.getTime()/1000
this.mtime = this.mtime && st.mtime.getTime()/1000
if (!this.atime || !this.mtime)
this.fstat()
else
this.futimes()
}
fstat () {
const stat = this.fd ? 'fstat' : 'stat'
const target = this.fd || this.path
fs[stat](target, (er, st) => {
if (er)
this.emit('error', er)
else
this.onfstat(st)
})
}
onfstat (st) {
if (typeof this.atime !== 'number')
this.atime = st.atime.getTime()/1000
if (typeof this.mtime !== 'number')
this.mtime = st.mtime.getTime()/1000
this.futimes()
}
futimes () {
const utimes = this.fd ? 'futimes' : 'utimes'
const target = this.fd || this.path
fs[utimes](target, ''+this.atime, ''+this.mtime, er => {
if (er)
this.emit('error', er)
else
this.emit('done')
})
}
}
class TouchSync extends Touch {
open () {
try {
this.onopen(null, fs.openSync(this.path, this.oflags))
} catch (er) {
this.onopen(er)
}
}
statref () {
let threw = true
try {
this.onstatref(fs.statSync(this.ref))
threw = false
} finally {
if (threw)
this.close()
}
}
fstat () {
let threw = true
const stat = this.fd ? 'fstatSync' : 'statSync'
const target = this.fd || this.path
try {
this.onfstat(fs[stat](target))
threw = false
} finally {
if (threw)
this.close()
}
}
futimes () {
let threw = true
const utimes = this.fd ? 'futimesSync' : 'utimesSync'
const target = this.fd || this.path
try {
fs[utimes](target, this.atime, this.mtime)
threw = false
} finally {
if (threw)
this.close()
}
this.emit('done')
}
close () {
if (typeof this.fd === 'number' && this.closeAfter)
try { fs.closeSync(this.fd) } catch (er) {}
}
}

25
dashboard/node_modules/touch/package.json generated vendored Normal file
View File

@@ -0,0 +1,25 @@
{
"author": "Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me/)",
"name": "touch",
"description": "like touch(1) in node",
"version": "3.1.1",
"repository": "git://github.com/isaacs/node-touch.git",
"bin": {
"nodetouch": "./bin/nodetouch.js"
},
"license": "ISC",
"scripts": {
"test": "tap test/*.js --100 -J",
"preversion": "npm test",
"postversion": "npm publish",
"postpublish": "git push origin --all; git push origin --tags"
},
"devDependencies": {
"mutate-fs": "^1.1.0",
"tap": "^10.7.0"
},
"files": [
"index.js",
"bin/nodetouch.js"
]
}