mirror of
https://github.com/iptv-org/database.git
synced 2024-11-23 11:24:10 -05:00
Merge branch 'iptv-org:master' into master
This commit is contained in:
commit
cc0b06f353
3 changed files with 288 additions and 247 deletions
|
@ -34,7 +34,7 @@
|
||||||
| owners | List of channel owners separated by `;`. May contain any characters except `,` and `"`. | Optional | `China Central Television` |
|
| owners | List of channel owners separated by `;`. May contain any characters except `,` and `"`. | Optional | `China Central Television` |
|
||||||
| country | Country code from which the channel is transmitted. A list of all supported countries and their codes can be found in [data/countries.csv](data/countries.csv) | Required | `CN` |
|
| country | Country code from which the channel is transmitted. A list of all supported countries and their codes can be found in [data/countries.csv](data/countries.csv) | Required | `CN` |
|
||||||
| subdivision | Code of the subdivision (e.g., provinces or states) from which the broadcast is transmitted. A list of all supported subdivisions and their codes can be found in [data/subdivisions.csv](data/subdivisions.csv). | Optional | `CN-AH` |
|
| subdivision | Code of the subdivision (e.g., provinces or states) from which the broadcast is transmitted. A list of all supported subdivisions and their codes can be found in [data/subdivisions.csv](data/subdivisions.csv). | Optional | `CN-AH` |
|
||||||
| city | Name of the city from which the channel is transmitted. May only contain `a-z`, `à-ÿ`, `0-9`, `space`, `-`, `'`. | Optional | `Hefei` |
|
| city | The name of the city in English from which the channel is broadcast. May contain any characters except `,` and `"`. | Optional | `Hefei` |
|
||||||
| broadcast_area | List of codes describing the broadcasting area of the channel. Any combination of `r/<region_code>`, `c/<country_code>`, `s/<subdivision_code>`. | Required | `s/CN-AH` |
|
| broadcast_area | List of codes describing the broadcasting area of the channel. Any combination of `r/<region_code>`, `c/<country_code>`, `s/<subdivision_code>`. | Required | `s/CN-AH` |
|
||||||
| languages | List of languages in which the channel is broadcast separated by `;`. A list of all supported languages and their codes can be found in [data/languages.csv](data/languages.csv). | Required | `zho` |
|
| languages | List of languages in which the channel is broadcast separated by `;`. A list of all supported languages and their codes can be found in [data/languages.csv](data/languages.csv). | Required | `zho` |
|
||||||
| categories | List of categories to which this channel belongs separated by `;`. A list of all supported categories can be found in [data/categories.csv](data/categories.csv). | Optional | `general` |
|
| categories | List of categories to which this channel belongs separated by `;`. A list of all supported categories can be found in [data/categories.csv](data/categories.csv). | Optional | `general` |
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -2,63 +2,63 @@ const Joi = require('joi').extend(require('@joi/date'))
|
||||||
const path = require('path')
|
const path = require('path')
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
id: Joi.string()
|
id: Joi.string()
|
||||||
.regex(/^[A-Za-z0-9]+\.[a-z]{2}$/)
|
.regex(/^[A-Za-z0-9]+\.[a-z]{2}$/)
|
||||||
.required(),
|
.required(),
|
||||||
name: Joi.string()
|
name: Joi.string()
|
||||||
.regex(/^[a-z0-9-!:&.+'/»#%°$@?\s]+$/i)
|
.regex(/^[a-z0-9-!:&.+'/»#%°$@?\s]+$/i)
|
||||||
.required(),
|
.required(),
|
||||||
alt_names: Joi.array().items(
|
alt_names: Joi.array().items(
|
||||||
Joi.string()
|
Joi.string()
|
||||||
.regex(/^[^",]+$/)
|
.regex(/^[^",]+$/)
|
||||||
.invalid(Joi.ref('name'))
|
.invalid(Joi.ref('name'))
|
||||||
),
|
),
|
||||||
network: Joi.string()
|
network: Joi.string()
|
||||||
.regex(/^[^",]+$/)
|
.regex(/^[^",]+$/)
|
||||||
.allow(null),
|
.allow(null),
|
||||||
owners: Joi.array().items(Joi.string().regex(/^[^",]+$/)),
|
owners: Joi.array().items(Joi.string().regex(/^[^",]+$/)),
|
||||||
country: Joi.string()
|
country: Joi.string()
|
||||||
.regex(/^[A-Z]{2}$/)
|
.regex(/^[A-Z]{2}$/)
|
||||||
.required(),
|
.required(),
|
||||||
subdivision: Joi.string()
|
subdivision: Joi.string()
|
||||||
.regex(/^[A-Z]{2}-[A-Z0-9]{1,3}$/)
|
.regex(/^[A-Z]{2}-[A-Z0-9]{1,3}$/)
|
||||||
.allow(null),
|
.allow(null),
|
||||||
city: Joi.string()
|
city: Joi.string()
|
||||||
.regex(/^[\sa-zA-Z\u00C0-\u00FF0-9'-]+$/)
|
.regex(/^[^",]+$/)
|
||||||
.allow(null),
|
.allow(null),
|
||||||
broadcast_area: Joi.array().items(
|
broadcast_area: Joi.array().items(
|
||||||
Joi.string()
|
Joi.string()
|
||||||
.regex(/^(s\/[A-Z]{2}-[A-Z0-9]{1,3}|c\/[A-Z]{2}|r\/[A-Z0-9]{3,7})$/)
|
.regex(/^(s\/[A-Z]{2}-[A-Z0-9]{1,3}|c\/[A-Z]{2}|r\/[A-Z0-9]{3,7})$/)
|
||||||
.required()
|
.required()
|
||||||
),
|
),
|
||||||
languages: Joi.array().items(
|
languages: Joi.array().items(
|
||||||
Joi.string()
|
Joi.string()
|
||||||
.regex(/^[a-z]{3}$/)
|
.regex(/^[a-z]{3}$/)
|
||||||
.required()
|
.required()
|
||||||
),
|
),
|
||||||
categories: Joi.array().items(Joi.string().regex(/^[a-z]+$/)),
|
categories: Joi.array().items(Joi.string().regex(/^[a-z]+$/)),
|
||||||
is_nsfw: Joi.boolean().strict().required(),
|
is_nsfw: Joi.boolean().strict().required(),
|
||||||
launched: Joi.date().format('YYYY-MM-DD').raw().allow(null),
|
launched: Joi.date().format('YYYY-MM-DD').raw().allow(null),
|
||||||
closed: Joi.date().format('YYYY-MM-DD').raw().allow(null).greater(Joi.ref('launched')),
|
closed: Joi.date().format('YYYY-MM-DD').raw().allow(null).greater(Joi.ref('launched')),
|
||||||
replaced_by: Joi.string()
|
replaced_by: Joi.string()
|
||||||
.regex(/^[A-Za-z0-9]+\.[a-z]{2}$/)
|
.regex(/^[A-Za-z0-9]+\.[a-z]{2}$/)
|
||||||
.allow(null),
|
.allow(null),
|
||||||
website: Joi.string()
|
website: Joi.string()
|
||||||
.uri({
|
.uri({
|
||||||
scheme: ['http', 'https']
|
scheme: ['http', 'https']
|
||||||
})
|
})
|
||||||
.allow(null),
|
.allow(null),
|
||||||
logo: Joi.string()
|
logo: Joi.string()
|
||||||
.uri({
|
.uri({
|
||||||
scheme: ['https']
|
scheme: ['https']
|
||||||
})
|
})
|
||||||
.custom((value, helper) => {
|
.custom((value, helper) => {
|
||||||
const ext = path.extname(value)
|
const ext = path.extname(value)
|
||||||
if (!ext || /(\.png|\.jpeg|\.jpg)/i.test(ext)) {
|
if (!ext || /(\.png|\.jpeg|\.jpg)/i.test(ext)) {
|
||||||
return true
|
return true
|
||||||
} else {
|
} else {
|
||||||
return helper.message(`"logo" has an invalid file extension "${ext}"`)
|
return helper.message(`"logo" has an invalid file extension "${ext}"`)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.required()
|
.required()
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue