mirror of
https://github.com/morpheus65535/bazarr
synced 2024-12-25 17:17:12 +00:00
First implementation of notifications #43
This commit is contained in:
parent
58e40d3c96
commit
8069302986
6 changed files with 861 additions and 591 deletions
151
bazarr.py
151
bazarr.py
|
@ -86,6 +86,7 @@ from list_subtitles import *
|
||||||
from get_subtitle import *
|
from get_subtitle import *
|
||||||
from utils import *
|
from utils import *
|
||||||
from scheduler import *
|
from scheduler import *
|
||||||
|
from notifier import send_notifications
|
||||||
|
|
||||||
# Reset restart required warning on start
|
# Reset restart required warning on start
|
||||||
conn = sqlite3.connect(os.path.join(os.path.dirname(__file__), 'data/db/bazarr.db'), timeout=30)
|
conn = sqlite3.connect(os.path.join(os.path.dirname(__file__), 'data/db/bazarr.db'), timeout=30)
|
||||||
|
@ -362,8 +363,10 @@ def settings():
|
||||||
settings_providers = c.fetchall()
|
settings_providers = c.fetchall()
|
||||||
c.execute("SELECT * FROM table_settings_sonarr")
|
c.execute("SELECT * FROM table_settings_sonarr")
|
||||||
settings_sonarr = c.fetchone()
|
settings_sonarr = c.fetchone()
|
||||||
|
c.execute("SELECT * FROM table_settings_notifier")
|
||||||
|
settings_notifier = c.fetchall()
|
||||||
c.close()
|
c.close()
|
||||||
return template('settings', __file__=__file__, bazarr_version=bazarr_version, settings_general=settings_general, settings_languages=settings_languages, settings_providers=settings_providers, settings_sonarr=settings_sonarr, base_url=base_url)
|
return template('settings', __file__=__file__, bazarr_version=bazarr_version, settings_general=settings_general, settings_languages=settings_languages, settings_providers=settings_providers, settings_sonarr=settings_sonarr, settings_notifier=settings_notifier, base_url=base_url)
|
||||||
|
|
||||||
@route(base_url + 'save_settings', method='POST')
|
@route(base_url + 'save_settings', method='POST')
|
||||||
def save_settings():
|
def save_settings():
|
||||||
|
@ -431,6 +434,151 @@ def save_settings():
|
||||||
for item in settings_subliminal_languages:
|
for item in settings_subliminal_languages:
|
||||||
c.execute("UPDATE table_settings_languages SET enabled = '1' WHERE code2 = ?", (item,))
|
c.execute("UPDATE table_settings_languages SET enabled = '1' WHERE code2 = ?", (item,))
|
||||||
|
|
||||||
|
settings_notifier_Boxcar_enabled = request.forms.get('settings_notifier_Boxcar_enabled')
|
||||||
|
if settings_notifier_Boxcar_enabled == 'on':
|
||||||
|
settings_notifier_Boxcar_enabled = 1
|
||||||
|
else:
|
||||||
|
settings_notifier_Boxcar_enabled = 0
|
||||||
|
settings_notifier_Boxcar_url = request.forms.get('settings_notifier_Boxcar_url')
|
||||||
|
c.execute("UPDATE table_settings_notifier SET enabled = ?, url = ? WHERE name = 'Boxcar'", (settings_notifier_Boxcar_enabled, settings_notifier_Boxcar_url))
|
||||||
|
|
||||||
|
settings_notifier_Faast_enabled = request.forms.get('settings_notifier_Faast_enabled')
|
||||||
|
if settings_notifier_Faast_enabled == 'on':
|
||||||
|
settings_notifier_Faast_enabled = 1
|
||||||
|
else:
|
||||||
|
settings_notifier_Faast_enabled = 0
|
||||||
|
settings_notifier_Faast_url = request.forms.get('settings_notifier_Faast_url')
|
||||||
|
c.execute("UPDATE table_settings_notifier SET enabled = ?, url = ? WHERE name = 'Faast'", (settings_notifier_Faast_enabled, settings_notifier_Faast_url))
|
||||||
|
|
||||||
|
settings_notifier_Growl_enabled = request.forms.get('settings_notifier_Growl_enabled')
|
||||||
|
if settings_notifier_Growl_enabled == 'on':
|
||||||
|
settings_notifier_Growl_enabled = 1
|
||||||
|
else:
|
||||||
|
settings_notifier_Growl_enabled = 0
|
||||||
|
settings_notifier_Growl_url = request.forms.get('settings_notifier_Growl_url')
|
||||||
|
c.execute("UPDATE table_settings_notifier SET enabled = ?, url = ? WHERE name = 'Growl'", (settings_notifier_Growl_enabled, settings_notifier_Growl_url))
|
||||||
|
|
||||||
|
settings_notifier_Join_enabled = request.forms.get('settings_notifier_Join_enabled')
|
||||||
|
if settings_notifier_Join_enabled == 'on':
|
||||||
|
settings_notifier_Join_enabled = 1
|
||||||
|
else:
|
||||||
|
settings_notifier_Join_enabled = 0
|
||||||
|
settings_notifier_Join_url = request.forms.get('settings_notifier_Join_url')
|
||||||
|
c.execute("UPDATE table_settings_notifier SET enabled = ?, url = ? WHERE name = 'Join'", (settings_notifier_Join_enabled, settings_notifier_Join_url))
|
||||||
|
|
||||||
|
settings_notifier_KODI_enabled = request.forms.get('settings_notifier_KODI_enabled')
|
||||||
|
if settings_notifier_KODI_enabled == 'on':
|
||||||
|
settings_notifier_KODI_enabled = 1
|
||||||
|
else:
|
||||||
|
settings_notifier_KODI_enabled = 0
|
||||||
|
settings_notifier_KODI_url = request.forms.get('settings_notifier_KODI_url')
|
||||||
|
c.execute("UPDATE table_settings_notifier SET enabled = ?, url = ? WHERE name = 'KODI'", (settings_notifier_KODI_enabled, settings_notifier_KODI_url))
|
||||||
|
|
||||||
|
settings_notifier_Mattermost_enabled = request.forms.get('settings_notifier_Mattermost_enabled')
|
||||||
|
if settings_notifier_Mattermost_enabled == 'on':
|
||||||
|
settings_notifier_Mattermost_enabled = 1
|
||||||
|
else:
|
||||||
|
settings_notifier_Mattermost_enabled = 0
|
||||||
|
settings_notifier_Mattermost_url = request.forms.get('settings_notifier_Mattermost_url')
|
||||||
|
c.execute("UPDATE table_settings_notifier SET enabled = ?, url = ? WHERE name = 'Mattermost'", (settings_notifier_Mattermost_enabled, settings_notifier_Mattermost_url))
|
||||||
|
|
||||||
|
settings_notifier_NMA_enabled = request.forms.get('settings_notifier_Notify My Android_enabled')
|
||||||
|
if settings_notifier_NMA_enabled == 'on':
|
||||||
|
settings_notifier_NMA_enabled = 1
|
||||||
|
else:
|
||||||
|
settings_notifier_NMA_enabled = 0
|
||||||
|
settings_notifier_NMA_url = request.forms.get('settings_notifier_Notify My Android_url')
|
||||||
|
c.execute("UPDATE table_settings_notifier SET enabled = ?, url = ? WHERE name = 'Notify My Android'", (settings_notifier_NMA_enabled, settings_notifier_NMA_url))
|
||||||
|
|
||||||
|
settings_notifier_Prowl_enabled = request.forms.get('settings_notifier_Prowl_enabled')
|
||||||
|
if settings_notifier_Prowl_enabled == 'on':
|
||||||
|
settings_notifier_Prowl_enabled = 1
|
||||||
|
else:
|
||||||
|
settings_notifier_Prowl_enabled = 0
|
||||||
|
settings_notifier_Prowl_url = request.forms.get('settings_notifier_Prowl_url')
|
||||||
|
c.execute("UPDATE table_settings_notifier SET enabled = ?, url = ? WHERE name = 'Prowl'", (settings_notifier_Prowl_enabled, settings_notifier_Prowl_url))
|
||||||
|
|
||||||
|
settings_notifier_Pushalot_enabled = request.forms.get('settings_notifier_Pushalot_enabled')
|
||||||
|
if settings_notifier_Pushalot_enabled == 'on':
|
||||||
|
settings_notifier_Pushalot_enabled = 1
|
||||||
|
else:
|
||||||
|
settings_notifier_Pushalot_enabled = 0
|
||||||
|
settings_notifier_Pushalot_url = request.forms.get('settings_notifier_Pushalot_url')
|
||||||
|
c.execute("UPDATE table_settings_notifier SET enabled = ?, url = ? WHERE name = 'Pushalot'", (settings_notifier_Pushalot_enabled, settings_notifier_Pushalot_url))
|
||||||
|
|
||||||
|
settings_notifier_PushBullet_enabled = request.forms.get('settings_notifier_PushBullet_enabled')
|
||||||
|
if settings_notifier_PushBullet_enabled == 'on':
|
||||||
|
settings_notifier_PushBullet_enabled = 1
|
||||||
|
else:
|
||||||
|
settings_notifier_PushBullet_enabled = 0
|
||||||
|
settings_notifier_PushBullet_url = request.forms.get('settings_notifier_PushBullet_url')
|
||||||
|
c.execute("UPDATE table_settings_notifier SET enabled = ?, url = ? WHERE name = 'PushBullet'", (settings_notifier_PushBullet_enabled, settings_notifier_PushBullet_url))
|
||||||
|
|
||||||
|
settings_notifier_Pushjet_enabled = request.forms.get('settings_notifier_Pushjet_enabled')
|
||||||
|
if settings_notifier_Pushjet_enabled == 'on':
|
||||||
|
settings_notifier_Pushjet_enabled = 1
|
||||||
|
else:
|
||||||
|
settings_notifier_Pushjet_enabled = 0
|
||||||
|
settings_notifier_Pushjet_url = request.forms.get('settings_notifier_Pushjet_url')
|
||||||
|
c.execute("UPDATE table_settings_notifier SET enabled = ?, url = ? WHERE name = 'Pushjet'", (settings_notifier_Pushjet_enabled, settings_notifier_Pushjet_url))
|
||||||
|
|
||||||
|
settings_notifier_Pushover_enabled = request.forms.get('settings_notifier_Pushover_enabled')
|
||||||
|
if settings_notifier_Pushover_enabled == 'on':
|
||||||
|
settings_notifier_Pushover_enabled = 1
|
||||||
|
else:
|
||||||
|
settings_notifier_Pushover_enabled = 0
|
||||||
|
settings_notifier_Pushover_url = request.forms.get('settings_notifier_Pushover_url')
|
||||||
|
c.execute("UPDATE table_settings_notifier SET enabled = ?, url = ? WHERE name = 'Pushover'", (settings_notifier_Pushover_enabled, settings_notifier_Pushover_url))
|
||||||
|
|
||||||
|
settings_notifier_RocketChat_enabled = request.forms.get('settings_notifier_Rocket.Chat_enabled')
|
||||||
|
if settings_notifier_RocketChat_enabled == 'on':
|
||||||
|
settings_notifier_RocketChat_enabled = 1
|
||||||
|
else:
|
||||||
|
settings_notifier_RocketChat_enabled = 0
|
||||||
|
settings_notifier_RocketChat_url = request.forms.get('settings_notifier_Rocket.Chat_url')
|
||||||
|
c.execute("UPDATE table_settings_notifier SET enabled = ?, url = ? WHERE name = 'Rocket.Chat'", (settings_notifier_RocketChat_enabled, settings_notifier_RocketChat_url))
|
||||||
|
|
||||||
|
settings_notifier_Slack_enabled = request.forms.get('settings_notifier_Slack_enabled')
|
||||||
|
if settings_notifier_Slack_enabled == 'on':
|
||||||
|
settings_notifier_Slack_enabled = 1
|
||||||
|
else:
|
||||||
|
settings_notifier_Slack_enabled = 0
|
||||||
|
settings_notifier_Slack_url = request.forms.get('settings_notifier_Slack_url')
|
||||||
|
c.execute("UPDATE table_settings_notifier SET enabled = ?, url = ? WHERE name = 'Slack'", (settings_notifier_Slack_enabled, settings_notifier_Slack_url))
|
||||||
|
|
||||||
|
settings_notifier_SuperToasty_enabled = request.forms.get('settings_notifier_Super Toasty_enabled')
|
||||||
|
if settings_notifier_SuperToasty_enabled == 'on':
|
||||||
|
settings_notifier_SuperToasty_enabled = 1
|
||||||
|
else:
|
||||||
|
settings_notifier_SuperToasty_enabled = 0
|
||||||
|
settings_notifier_SuperToasty_url = request.forms.get('settings_notifier_Super Toasty_url')
|
||||||
|
c.execute("UPDATE table_settings_notifier SET enabled = ?, url = ? WHERE name = 'Super Toasty'", (settings_notifier_SuperToasty_enabled, settings_notifier_SuperToasty_url))
|
||||||
|
|
||||||
|
settings_notifier_Telegram_enabled = request.forms.get('settings_notifier_Telegram_enabled')
|
||||||
|
if settings_notifier_Telegram_enabled == 'on':
|
||||||
|
settings_notifier_Telegram_enabled = 1
|
||||||
|
else:
|
||||||
|
settings_notifier_Telegram_enabled = 0
|
||||||
|
settings_notifier_Telegram_url = request.forms.get('settings_notifier_Telegram_url')
|
||||||
|
c.execute("UPDATE table_settings_notifier SET enabled = ?, url = ? WHERE name = 'Telegram'", (settings_notifier_Telegram_enabled, settings_notifier_Telegram_url))
|
||||||
|
|
||||||
|
settings_notifier_Twitter_enabled = request.forms.get('settings_notifier_Twitter_enabled')
|
||||||
|
if settings_notifier_Twitter_enabled == 'on':
|
||||||
|
settings_notifier_Twitter_enabled = 1
|
||||||
|
else:
|
||||||
|
settings_notifier_Twitter_enabled = 0
|
||||||
|
settings_notifier_Twitter_url = request.forms.get('settings_notifier_Twitter_url')
|
||||||
|
c.execute("UPDATE table_settings_notifier SET enabled = ?, url = ? WHERE name = 'Twitter'", (settings_notifier_Twitter_enabled, settings_notifier_Twitter_url))
|
||||||
|
|
||||||
|
settings_notifier_XBMC_enabled = request.forms.get('settings_notifier_XBMC_enabled')
|
||||||
|
if settings_notifier_XBMC_enabled == 'on':
|
||||||
|
settings_notifier_XBMC_enabled = 1
|
||||||
|
else:
|
||||||
|
settings_notifier_XBMC_enabled = 0
|
||||||
|
settings_notifier_XBMC_url = request.forms.get('settings_notifier_XBMC_url')
|
||||||
|
c.execute("UPDATE table_settings_notifier SET enabled = ?, url = ? WHERE name = 'XBMC'", (settings_notifier_XBMC_enabled, settings_notifier_XBMC_url))
|
||||||
|
|
||||||
|
|
||||||
conn.commit()
|
conn.commit()
|
||||||
c.close()
|
c.close()
|
||||||
|
|
||||||
|
@ -619,6 +767,7 @@ def get_subtitle():
|
||||||
result = download_subtitle(episodePath, language, hi, providers_list, providers_auth)
|
result = download_subtitle(episodePath, language, hi, providers_list, providers_auth)
|
||||||
if result is not None:
|
if result is not None:
|
||||||
history_log(1, sonarrSeriesId, sonarrEpisodeId, result)
|
history_log(1, sonarrSeriesId, sonarrEpisodeId, result)
|
||||||
|
send_notifications(sonarrSeriesId, sonarrEpisodeId, result)
|
||||||
store_subtitles(episodePath)
|
store_subtitles(episodePath)
|
||||||
list_missing_subtitles(sonarrSeriesId)
|
list_missing_subtitles(sonarrSeriesId)
|
||||||
redirect(ref)
|
redirect(ref)
|
||||||
|
|
|
@ -8,6 +8,7 @@ from pycountry import *
|
||||||
from get_general_settings import *
|
from get_general_settings import *
|
||||||
from list_subtitles import *
|
from list_subtitles import *
|
||||||
from utils import *
|
from utils import *
|
||||||
|
from notifier import send_notifications
|
||||||
|
|
||||||
# configure the cache
|
# configure the cache
|
||||||
region.configure('dogpile.cache.memory')
|
region.configure('dogpile.cache.memory')
|
||||||
|
@ -78,6 +79,7 @@ def series_download_subtitles(no):
|
||||||
if message is not None:
|
if message is not None:
|
||||||
store_subtitles(path_replace(episode[0]))
|
store_subtitles(path_replace(episode[0]))
|
||||||
history_log(1, no, episode[2], message)
|
history_log(1, no, episode[2], message)
|
||||||
|
send_notifications(no, episode[2], message)
|
||||||
list_missing_subtitles(no)
|
list_missing_subtitles(no)
|
||||||
|
|
||||||
def wanted_download_subtitles(path):
|
def wanted_download_subtitles(path):
|
||||||
|
@ -111,6 +113,7 @@ def wanted_download_subtitles(path):
|
||||||
store_subtitles(path_replace(episode[0]))
|
store_subtitles(path_replace(episode[0]))
|
||||||
list_missing_subtitles(episode[3])
|
list_missing_subtitles(episode[3])
|
||||||
history_log(1, episode[3], episode[2], message)
|
history_log(1, episode[3], episode[2], message)
|
||||||
|
send_notifications(episode[3], episode[2], message)
|
||||||
|
|
||||||
def wanted_search_missing_subtitles():
|
def wanted_search_missing_subtitles():
|
||||||
db = sqlite3.connect(os.path.join(os.path.dirname(__file__), 'data/db/bazarr.db'), timeout=30)
|
db = sqlite3.connect(os.path.join(os.path.dirname(__file__), 'data/db/bazarr.db'), timeout=30)
|
||||||
|
|
43
notifier.py
Normal file
43
notifier.py
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
import apprise
|
||||||
|
import os
|
||||||
|
import sqlite3
|
||||||
|
|
||||||
|
def get_notifier_providers():
|
||||||
|
conn_db = sqlite3.connect(os.path.join(os.path.dirname(__file__), 'data/db/bazarr.db'), timeout=30)
|
||||||
|
c_db = conn_db.cursor()
|
||||||
|
providers = c_db.execute('SELECT name, url FROM table_settings_notifier WHERE enabled = 1').fetchall()
|
||||||
|
c_db.close()
|
||||||
|
|
||||||
|
return providers
|
||||||
|
|
||||||
|
def get_series_name(sonarrSeriesId):
|
||||||
|
conn_db = sqlite3.connect(os.path.join(os.path.dirname(__file__), 'data/db/bazarr.db'), timeout=30)
|
||||||
|
c_db = conn_db.cursor()
|
||||||
|
data = c_db.execute('SELECT title FROM table_shows WHERE sonarrSeriesId = ?', (sonarrSeriesId,)).fetchone()
|
||||||
|
c_db.close()
|
||||||
|
|
||||||
|
return data[0]
|
||||||
|
|
||||||
|
def get_episode_name(sonarrEpisodeId):
|
||||||
|
conn_db = sqlite3.connect(os.path.join(os.path.dirname(__file__), 'data/db/bazarr.db'), timeout=30)
|
||||||
|
c_db = conn_db.cursor()
|
||||||
|
data = c_db.execute('SELECT title FROM table_episodes WHERE sonarrEpisodeId = ?', (sonarrEpisodeId,)).fetchone()
|
||||||
|
c_db.close()
|
||||||
|
|
||||||
|
return data[0]
|
||||||
|
|
||||||
|
def send_notifications(sonarrSeriesId, sonarrEpisodeId, message):
|
||||||
|
providers = get_notifier_providers()
|
||||||
|
series = get_series_name(sonarrSeriesId)
|
||||||
|
episode = get_episode_name(sonarrEpisodeId)
|
||||||
|
|
||||||
|
apobj = apprise.Apprise()
|
||||||
|
|
||||||
|
for provider in providers:
|
||||||
|
if provider[1] is not None:
|
||||||
|
apobj.add(provider[1])
|
||||||
|
|
||||||
|
apobj.notify(
|
||||||
|
title='Bazarr notification',
|
||||||
|
body=series + ' - ' + episode + ' : ' + message,
|
||||||
|
)
|
|
@ -40,6 +40,15 @@ if os.path.exists(os.path.join(os.path.dirname(__file__), 'data/db/bazarr.db'))
|
||||||
else:
|
else:
|
||||||
c.execute('UPDATE table_settings_general SET single_language="False"')
|
c.execute('UPDATE table_settings_general SET single_language="False"')
|
||||||
|
|
||||||
|
try:
|
||||||
|
c.execute('CREATE TABLE `table_settings_notifier` (`name` TEXT, `url` TEXT, `enabled` INTEGER);')
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
providers = ['Boxcar','Faast','Growl','Join','KODI','Mattermost','Notify My Android','Prowl','Pushalot','PushBullet','Pushjet','Pushover','Rocket.Chat','Slack','Super Toasty','Telegram','Twitter','XBMC']
|
||||||
|
for provider in providers:
|
||||||
|
c.execute('INSERT INTO `table_settings_notifier` (name, enabled) VALUES (?, ?);', (provider,'0'))
|
||||||
|
|
||||||
# Commit change to db
|
# Commit change to db
|
||||||
db.commit()
|
db.commit()
|
||||||
|
|
||||||
|
|
|
@ -9,3 +9,8 @@ try:
|
||||||
pip.main(['install', '--user', 'langdetect'])
|
pip.main(['install', '--user', 'langdetect'])
|
||||||
except SystemExit as e:
|
except SystemExit as e:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
try:
|
||||||
|
pip.main(['install', '--user', 'apprise'])
|
||||||
|
except SystemExit as e:
|
||||||
|
pass
|
1215
views/settings.tpl
1215
views/settings.tpl
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue