Merge remote-tracking branch 'origin/main'
# Conflicts: # docs/index.md
This commit is contained in:
commit
5768f49f4a
|
@ -0,0 +1,21 @@
|
|||
# Security Policy
|
||||
|
||||
## Supported Versions
|
||||
|
||||
Use this section to tell people about which versions of your project are
|
||||
currently being supported with security updates.
|
||||
|
||||
| Version | Supported |
|
||||
| ------- | ------------------ |
|
||||
| 5.1.x | :white_check_mark: |
|
||||
| 5.0.x | :x: |
|
||||
| 4.0.x | :white_check_mark: |
|
||||
| < 4.0 | :x: |
|
||||
|
||||
## Reporting a Vulnerability
|
||||
|
||||
Use this section to tell people how to report a vulnerability.
|
||||
|
||||
Tell them where to go, how often they can expect to get an update on a
|
||||
reported vulnerability, what to expect if the vulnerability is accepted or
|
||||
declined, etc.
|
|
@ -2,27 +2,32 @@
|
|||
![](https://img.shields.io/github/stars/kokarare1212/librespot-python.svg)
|
||||
![](https://img.shields.io/github/forks/kokarare1212/librespot-python.svg)
|
||||
[![](https://deepsource.io/gh/kokarare1212/librespot-python.svg/?label=active+issues&show_trend=true)](https://deepsource.io/gh/kokarare1212/librespot-python/?ref=repository-badge)
|
||||
|
||||
# Get Started
|
||||
|
||||
## Contents
|
||||
|
||||
* [Get Started](index.md)
|
||||
* [Supported Futures](supported.md)
|
||||
* [API Reference](api.md)
|
||||
|
||||
## What's librespot-python?
|
||||
|
||||
librespot-python is a python port of Spotify's open source client library [librespot](https://github.com/librespot-org/librespot).
|
||||
librespot-python is a python port of Spotify's open source client library [librespot](https://github.com/librespot-org/librespot).
|
||||
|
||||
It was created to play Spotify on various platforms and devices.
|
||||
|
||||
## What do you need?
|
||||
|
||||
In order to develop with this library, you need to use Python.
|
||||
In order to develop with this library, you need to use Python.
|
||||
|
||||
Python can be downloaded from [the official website here](https://python.org/).
|
||||
|
||||
## Disclaimer
|
||||
|
||||
Please keep in mind that this library is not like Spotify approved.
|
||||
Please keep in mind that this library is not like Spotify approved.
|
||||
|
||||
Therefore, the worst that can happen is that you will be banned from Spotify.
|
||||
Therefore, the worst that can happen is that you will be banned from Spotify.
|
||||
|
||||
Also, please keep in mind that this library is in alpha and may behave in unintended ways.
|
||||
|
||||
|
|
|
@ -1,8 +1,15 @@
|
|||
## Supported Futures
|
||||
| Futures | Supported |
|
||||
|
||||
| Futures | Supported |
|
||||
|
||||
| --- | --- |
|
||||
|
||||
| Get Metadata | 〇 |
|
||||
|
||||
| Play Music | △*1 |
|
||||
|
||||
| Spotify Connect | ×*2 |
|
||||
*1 It is currently possible to retrieve the music stream, but it requires separate software for decoding.
|
||||
|
||||
*1 It is currently possible to retrieve the music stream, but it requires separate software for decoding.
|
||||
|
||||
*2 This feature will be added in the future.
|
|
@ -1,13 +1,16 @@
|
|||
from __future__ import annotations
|
||||
from librespot.common import Utils
|
||||
from librespot.core import Session
|
||||
from librespot.crypto import DiffieHellman
|
||||
from librespot.standard import Closeable, Runnable
|
||||
from librespot.proto import Connect
|
||||
|
||||
import concurrent.futures
|
||||
import random
|
||||
import socket
|
||||
|
||||
from librespot.common import Utils
|
||||
from librespot.core import Session
|
||||
from librespot.crypto import DiffieHellman
|
||||
from librespot.proto import Connect
|
||||
from librespot.standard import Closeable
|
||||
from librespot.standard import Runnable
|
||||
|
||||
|
||||
class ZeroconfServer(Closeable):
|
||||
__MAX_PORT = 65536
|
||||
|
@ -16,7 +19,8 @@ class ZeroconfServer(Closeable):
|
|||
__keys: DiffieHellman
|
||||
__inner: ZeroconfServer.Inner
|
||||
|
||||
def __init__(self, inner: ZeroconfServer.Inner, listen_port: int, listen_all: bool):
|
||||
def __init__(self, inner: ZeroconfServer.Inner, listen_port: int,
|
||||
listen_all: bool):
|
||||
self.__inner = inner
|
||||
self.__keys = DiffieHellman()
|
||||
|
||||
|
@ -39,7 +43,17 @@ class ZeroconfServer(Closeable):
|
|||
return self
|
||||
|
||||
def create(self) -> ZeroconfServer:
|
||||
return ZeroconfServer(ZeroconfServer.Inner(self.device_type, self.device_name, self.preferred_locale, self.conf, self.device_id), self.__listenPort, self.__listenAll)
|
||||
return ZeroconfServer(
|
||||
ZeroconfServer.Inner(
|
||||
self.device_type,
|
||||
self.device_name,
|
||||
self.preferred_locale,
|
||||
self.conf,
|
||||
self.device_id,
|
||||
),
|
||||
self.__listenPort,
|
||||
self.__listenAll,
|
||||
)
|
||||
|
||||
class Inner:
|
||||
device_type: Connect.DeviceType = None
|
||||
|
@ -48,22 +62,25 @@ class ZeroconfServer(Closeable):
|
|||
preferred_locale: str = None
|
||||
conf = None
|
||||
|
||||
def __init__(self,
|
||||
device_type: Connect.DeviceType,
|
||||
device_name: str,
|
||||
preferred_locale: str,
|
||||
conf: Session.Configuration,
|
||||
device_id: str = None):
|
||||
def __init__(
|
||||
self,
|
||||
device_type: Connect.DeviceType,
|
||||
device_name: str,
|
||||
preferred_locale: str,
|
||||
conf: Session.Configuration,
|
||||
device_id: str = None,
|
||||
):
|
||||
self.preferred_locale = preferred_locale
|
||||
self.conf = conf
|
||||
self.device_type = device_type
|
||||
self.device_name = device_name
|
||||
self.device_id = device_id if device_id is not None else Utils.random_hex_string(
|
||||
40)
|
||||
self.device_id = (device_id if device_id is not None else
|
||||
Utils.random_hex_string(40))
|
||||
|
||||
class HttpRunner(Runnable, Closeable):
|
||||
__sock: socket
|
||||
__executorService: concurrent.futures.ThreadPoolExecutor = concurrent.futures.ThreadPoolExecutor()
|
||||
__executorService: concurrent.futures.ThreadPoolExecutor = (
|
||||
concurrent.futures.ThreadPoolExecutor())
|
||||
__shouldStop: bool = False
|
||||
|
||||
def __init__(self, port: int):
|
||||
|
@ -86,4 +103,3 @@ class ZeroconfServer(Closeable):
|
|||
|
||||
def close(self) -> None:
|
||||
super().close()
|
||||
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
from __future__ import annotations
|
||||
|
||||
import re
|
||||
|
||||
from librespot.common import Base62
|
||||
from librespot.common import Utils
|
||||
from librespot.proto.ContextTrack import ContextTrack
|
||||
import re
|
||||
|
||||
|
||||
class SpotifyId:
|
||||
|
@ -47,9 +49,9 @@ class PlayableId:
|
|||
|
||||
@staticmethod
|
||||
def is_supported(uri: str):
|
||||
return not uri.startswith("spotify:local:") and \
|
||||
not uri == "spotify:delimiter" and \
|
||||
not uri == "spotify:meta:delimiter"
|
||||
return (not uri.startswith("spotify:local:")
|
||||
and not uri == "spotify:delimiter"
|
||||
and not uri == "spotify:meta:delimiter")
|
||||
|
||||
@staticmethod
|
||||
def should_play(track: ContextTrack):
|
||||
|
@ -260,5 +262,3 @@ class TrackId(PlayableId, SpotifyId):
|
|||
|
||||
def get_gid(self) -> bytes:
|
||||
return Utils.hex_to_bytes(self._hexId)
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue