core/homeassistant/components/dlna_dms/const.py

83 lines
3.2 KiB
Python

"""Constants for the DLNA MediaServer integration."""
from __future__ import annotations
from collections.abc import Mapping
import logging
from typing import Final
from homeassistant.components.media_player import MediaClass
LOGGER = logging.getLogger(__package__)
DOMAIN: Final = "dlna_dms"
DEFAULT_NAME: Final = "DLNA Media Server"
CONF_SOURCE_ID: Final = "source_id"
CONFIG_VERSION: Final = 1
SOURCE_SEP: Final = "/"
ROOT_OBJECT_ID: Final = "0"
PATH_SEP: Final = "/"
PATH_SEARCH_FLAG: Final = "?"
PATH_OBJECT_ID_FLAG: Final = ":"
# Only request the metadata needed to build a browse response
DLNA_BROWSE_FILTER: Final = [
"id",
"upnp:class",
"dc:title",
"res",
"@childCount",
"upnp:albumArtURI",
]
# Get all metadata when resolving, for the use of media_players
DLNA_RESOLVE_FILTER: Final = "*"
# Metadata needed to resolve a path
DLNA_PATH_FILTER: Final = ["id", "upnp:class", "dc:title"]
DLNA_SORT_CRITERIA: Final = ["+upnp:class", "+upnp:originalTrackNumber", "+dc:title"]
PROTOCOL_HTTP: Final = "http-get"
PROTOCOL_RTSP: Final = "rtsp-rtp-udp"
PROTOCOL_ANY: Final = "*"
STREAMABLE_PROTOCOLS: Final = [PROTOCOL_HTTP, PROTOCOL_RTSP, PROTOCOL_ANY]
# Map UPnP object class to media_player media class
MEDIA_CLASS_MAP: Mapping[str, MediaClass] = {
"object": MediaClass.URL,
"object.item": MediaClass.URL,
"object.item.imageItem": MediaClass.IMAGE,
"object.item.imageItem.photo": MediaClass.IMAGE,
"object.item.audioItem": MediaClass.MUSIC,
"object.item.audioItem.musicTrack": MediaClass.MUSIC,
"object.item.audioItem.audioBroadcast": MediaClass.MUSIC,
"object.item.audioItem.audioBook": MediaClass.PODCAST,
"object.item.videoItem": MediaClass.VIDEO,
"object.item.videoItem.movie": MediaClass.MOVIE,
"object.item.videoItem.videoBroadcast": MediaClass.TV_SHOW,
"object.item.videoItem.musicVideoClip": MediaClass.VIDEO,
"object.item.playlistItem": MediaClass.TRACK,
"object.item.textItem": MediaClass.URL,
"object.item.bookmarkItem": MediaClass.URL,
"object.item.epgItem": MediaClass.EPISODE,
"object.item.epgItem.audioProgram": MediaClass.MUSIC,
"object.item.epgItem.videoProgram": MediaClass.VIDEO,
"object.container": MediaClass.DIRECTORY,
"object.container.person": MediaClass.ARTIST,
"object.container.person.musicArtist": MediaClass.ARTIST,
"object.container.playlistContainer": MediaClass.PLAYLIST,
"object.container.album": MediaClass.ALBUM,
"object.container.album.musicAlbum": MediaClass.ALBUM,
"object.container.album.photoAlbum": MediaClass.ALBUM,
"object.container.genre": MediaClass.GENRE,
"object.container.genre.musicGenre": MediaClass.GENRE,
"object.container.genre.movieGenre": MediaClass.GENRE,
"object.container.channelGroup": MediaClass.CHANNEL,
"object.container.channelGroup.audioChannelGroup": MediaClass.CHANNEL,
"object.container.channelGroup.videoChannelGroup": MediaClass.CHANNEL,
"object.container.epgContainer": MediaClass.DIRECTORY,
"object.container.storageSystem": MediaClass.DIRECTORY,
"object.container.storageVolume": MediaClass.DIRECTORY,
"object.container.storageFolder": MediaClass.DIRECTORY,
"object.container.bookmarkFolder": MediaClass.DIRECTORY,
}