commit
cd4ce186ca
|
|
@ -21,9 +21,50 @@ jobs:
|
||||||
- name: "Run tests"
|
- name: "Run tests"
|
||||||
run: pytest -vvv
|
run: pytest -vvv
|
||||||
|
|
||||||
|
test:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: "Install dependencies"
|
||||||
|
run: |
|
||||||
|
pip install -r requirements.txt
|
||||||
|
sudo apt update && sudo apt install -y docker-compose
|
||||||
|
|
||||||
|
- name: "Checkout JellyPlex-Watched-CI"
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
repository: luigi311/JellyPlex-Watched-CI
|
||||||
|
path: JellyPlex-Watched-CI
|
||||||
|
|
||||||
|
- name: "Start containers"
|
||||||
|
run: |
|
||||||
|
export PGID=$(id -g)
|
||||||
|
export PUID=$(id -u)
|
||||||
|
|
||||||
|
sudo chown -R $PUID:$PGID JellyPlex-Watched-CI
|
||||||
|
|
||||||
|
docker-compose -f JellyPlex-Watched-CI/plex/docker-compose.yml up -d
|
||||||
|
docker-compose -f JellyPlex-Watched-CI/jellyfin/docker-compose.yml up -d
|
||||||
|
# Wait for containers to start
|
||||||
|
sleep 15
|
||||||
|
docker-compose -f JellyPlex-Watched-CI/plex/docker-compose.yml logs
|
||||||
|
docker-compose -f JellyPlex-Watched-CI/jellyfin/docker-compose.yml logs
|
||||||
|
|
||||||
|
- name: "Run tests"
|
||||||
|
run: |
|
||||||
|
# Move test/.env to root
|
||||||
|
mv test/ci.env .env
|
||||||
|
# Run script
|
||||||
|
python main.py
|
||||||
|
|
||||||
|
cat mark.log
|
||||||
|
|
||||||
docker:
|
docker:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
needs: pytest
|
needs:
|
||||||
|
- pytest
|
||||||
|
- test
|
||||||
env:
|
env:
|
||||||
DEFAULT_VARIANT: alpine
|
DEFAULT_VARIANT: alpine
|
||||||
strategy:
|
strategy:
|
||||||
|
|
|
||||||
|
|
@ -108,7 +108,11 @@ class Jellyfin:
|
||||||
'DeviceId="script", '
|
'DeviceId="script", '
|
||||||
'Version="0.0.0"'
|
'Version="0.0.0"'
|
||||||
)
|
)
|
||||||
headers = {"Accept": "application/json", "X-Emby-Token": self.token, "X-Emby-Authorization": authorization}
|
headers = {
|
||||||
|
"Accept": "application/json",
|
||||||
|
"X-Emby-Token": self.token,
|
||||||
|
"X-Emby-Authorization": authorization,
|
||||||
|
}
|
||||||
|
|
||||||
if query_type == "get":
|
if query_type == "get":
|
||||||
async with session.get(
|
async with session.get(
|
||||||
|
|
|
||||||
45
src/main.py
45
src/main.py
|
|
@ -83,17 +83,21 @@ def generate_server_connections():
|
||||||
)
|
)
|
||||||
|
|
||||||
for i, url in enumerate(plex_baseurl):
|
for i, url in enumerate(plex_baseurl):
|
||||||
|
server = Plex(
|
||||||
|
baseurl=url.strip(),
|
||||||
|
token=plex_token[i].strip(),
|
||||||
|
username=None,
|
||||||
|
password=None,
|
||||||
|
servername=None,
|
||||||
|
ssl_bypass=ssl_bypass,
|
||||||
|
)
|
||||||
|
|
||||||
|
logger(f"Plex Server {i} info: {server.info()}", 3)
|
||||||
|
|
||||||
servers.append(
|
servers.append(
|
||||||
(
|
(
|
||||||
"plex",
|
"plex",
|
||||||
Plex(
|
server,
|
||||||
baseurl=url.strip(),
|
|
||||||
token=plex_token[i].strip(),
|
|
||||||
username=None,
|
|
||||||
password=None,
|
|
||||||
servername=None,
|
|
||||||
ssl_bypass=ssl_bypass,
|
|
||||||
),
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -110,17 +114,20 @@ def generate_server_connections():
|
||||||
)
|
)
|
||||||
|
|
||||||
for i, username in enumerate(plex_username):
|
for i, username in enumerate(plex_username):
|
||||||
|
server = Plex(
|
||||||
|
baseurl=None,
|
||||||
|
token=None,
|
||||||
|
username=username.strip(),
|
||||||
|
password=plex_password[i].strip(),
|
||||||
|
servername=plex_servername[i].strip(),
|
||||||
|
ssl_bypass=ssl_bypass,
|
||||||
|
)
|
||||||
|
|
||||||
|
logger(f"Plex Server {i} info: {server.info()}", 3)
|
||||||
servers.append(
|
servers.append(
|
||||||
(
|
(
|
||||||
"plex",
|
"plex",
|
||||||
Plex(
|
server,
|
||||||
baseurl=None,
|
|
||||||
token=None,
|
|
||||||
username=username.strip(),
|
|
||||||
password=plex_password[i].strip(),
|
|
||||||
servername=plex_servername[i].strip(),
|
|
||||||
ssl_bypass=ssl_bypass,
|
|
||||||
),
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -140,10 +147,14 @@ def generate_server_connections():
|
||||||
baseurl = baseurl.strip()
|
baseurl = baseurl.strip()
|
||||||
if baseurl[-1] == "/":
|
if baseurl[-1] == "/":
|
||||||
baseurl = baseurl[:-1]
|
baseurl = baseurl[:-1]
|
||||||
|
|
||||||
|
server = Jellyfin(baseurl=baseurl, token=jellyfin_token[i].strip())
|
||||||
|
|
||||||
|
logger(f"Jellyfin Server {i} info: {server.info()}", 3)
|
||||||
servers.append(
|
servers.append(
|
||||||
(
|
(
|
||||||
"jellyfin",
|
"jellyfin",
|
||||||
Jellyfin(baseurl=baseurl, token=jellyfin_token[i].strip()),
|
server,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,86 @@
|
||||||
|
# Global Settings
|
||||||
|
|
||||||
|
## Do not mark any shows/movies as played and instead just output to log if they would of been marked.
|
||||||
|
DRYRUN = "False"
|
||||||
|
|
||||||
|
## Additional logging information
|
||||||
|
DEBUG = "True"
|
||||||
|
|
||||||
|
## Debugging level, "info" is default, "debug" is more verbose
|
||||||
|
DEBUG_LEVEL = "debug"
|
||||||
|
|
||||||
|
## If set to true then the script will only run once and then exit
|
||||||
|
RUN_ONLY_ONCE = "True"
|
||||||
|
|
||||||
|
## How often to run the script in seconds
|
||||||
|
SLEEP_DURATION = 10
|
||||||
|
|
||||||
|
## Log file where all output will be written to
|
||||||
|
LOG_FILE = "log.log"
|
||||||
|
|
||||||
|
## Mark file where all shows/movies that have been marked as played will be written to
|
||||||
|
MARK_FILE = "mark.log"
|
||||||
|
|
||||||
|
## Timeout for requests for jellyfin
|
||||||
|
REQUEST_TIMEOUT = 300
|
||||||
|
|
||||||
|
## Max threads for processing
|
||||||
|
MAX_THREADS = 2
|
||||||
|
|
||||||
|
## Map usernames between servers in the event that they are different, order does not matter
|
||||||
|
## Comma seperated for multiple options
|
||||||
|
USER_MAPPING = {"JellyUser":"jellyplex_watched"}
|
||||||
|
|
||||||
|
## Map libraries between servers in the even that they are different, order does not matter
|
||||||
|
## Comma seperated for multiple options
|
||||||
|
LIBRARY_MAPPING = { "Shows": "TV Shows" }
|
||||||
|
|
||||||
|
|
||||||
|
## Blacklisting/Whitelisting libraries, library types such as Movies/TV Shows, and users. Mappings apply so if the mapping for the user or library exist then both will be excluded.
|
||||||
|
## Comma seperated for multiple options
|
||||||
|
#BLACKLIST_LIBRARY = ""
|
||||||
|
#WHITELIST_LIBRARY = "Movies"
|
||||||
|
#BLACKLIST_LIBRARY_TYPE = "Series"
|
||||||
|
#WHITELIST_LIBRARY_TYPE = "Movies, movie"
|
||||||
|
#BLACKLIST_USERS = ""
|
||||||
|
WHITELIST_USERS = "jellyplex_watched"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Plex
|
||||||
|
|
||||||
|
## Recommended to use token as it is faster to connect as it is direct to the server instead of going through the plex servers
|
||||||
|
## URL of the plex server, use hostname or IP address if the hostname is not resolving correctly
|
||||||
|
## Comma seperated list for multiple servers
|
||||||
|
PLEX_BASEURL = "https://localhost:32400"
|
||||||
|
|
||||||
|
## Plex token https://support.plex.tv/articles/204059436-finding-an-authentication-token-x-plex-token/
|
||||||
|
## Comma seperated list for multiple servers
|
||||||
|
PLEX_TOKEN = "mVaCzSyd78uoWkCBzZ_Y"
|
||||||
|
|
||||||
|
## If not using plex token then use username and password of the server admin along with the servername
|
||||||
|
## Comma seperated for multiple options
|
||||||
|
#PLEX_USERNAME = "PlexUser, PlexUser2"
|
||||||
|
#PLEX_PASSWORD = "SuperSecret, SuperSecret2"
|
||||||
|
#PLEX_SERVERNAME = "Plex Server1, Plex Server2"
|
||||||
|
|
||||||
|
## Skip hostname validation for ssl certificates.
|
||||||
|
## Set to True if running into ssl certificate errors
|
||||||
|
SSL_BYPASS = "True"
|
||||||
|
|
||||||
|
## control the direction of syncing. e.g. SYNC_FROM_PLEX_TO_JELLYFIN set to true will cause the updates from plex
|
||||||
|
## to be updated in jellyfin. SYNC_FROM_PLEX_TO_PLEX set to true will sync updates between multiple plex servers
|
||||||
|
SYNC_FROM_PLEX_TO_JELLYFIN = "True"
|
||||||
|
SYNC_FROM_JELLYFIN_TO_PLEX = "True"
|
||||||
|
SYNC_FROM_PLEX_TO_PLEX = "True"
|
||||||
|
SYNC_FROM_JELLYFIN_TO_JELLYFIN = "True"
|
||||||
|
|
||||||
|
# Jellyfin
|
||||||
|
|
||||||
|
## Jellyfin server URL, use hostname or IP address if the hostname is not resolving correctly
|
||||||
|
## Comma seperated list for multiple servers
|
||||||
|
JELLYFIN_BASEURL = "http://localhost:8096"
|
||||||
|
|
||||||
|
## Jellyfin api token, created manually by logging in to the jellyfin server admin dashboard and creating an api key
|
||||||
|
## Comma seperated list for multiple servers
|
||||||
|
JELLYFIN_TOKEN = "d773c4db3ecc4b028fc0904d9694804c"
|
||||||
Loading…
Reference in New Issue