First implementation of notifications #43

pull/56/merge
morpheus65535 6 years ago
parent 58e40d3c96
commit 8069302986

@ -86,6 +86,7 @@ from list_subtitles import *
from get_subtitle import *
from utils import *
from scheduler import *
from notifier import send_notifications
# Reset restart required warning on start
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()
c.execute("SELECT * FROM table_settings_sonarr")
settings_sonarr = c.fetchone()
c.execute("SELECT * FROM table_settings_notifier")
settings_notifier = c.fetchall()
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')
def save_settings():
@ -430,7 +433,152 @@ def save_settings():
c.execute("UPDATE table_settings_languages SET enabled = 0")
for item in settings_subliminal_languages:
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()
c.close()
@ -619,6 +767,7 @@ def get_subtitle():
result = download_subtitle(episodePath, language, hi, providers_list, providers_auth)
if result is not None:
history_log(1, sonarrSeriesId, sonarrEpisodeId, result)
send_notifications(sonarrSeriesId, sonarrEpisodeId, result)
store_subtitles(episodePath)
list_missing_subtitles(sonarrSeriesId)
redirect(ref)

@ -8,6 +8,7 @@ from pycountry import *
from get_general_settings import *
from list_subtitles import *
from utils import *
from notifier import send_notifications
# configure the cache
region.configure('dogpile.cache.memory')
@ -44,7 +45,7 @@ def download_subtitle(path, language, hi, providers, providers_auth):
downloaded_provider = str(result[0]).strip('<>').split(' ')[0][:-8]
downloaded_language = pycountry.languages.lookup(str(str(result[0]).strip('<>').split(' ')[2].strip('[]'))).name
message = downloaded_language + " subtitles downloaded from " + downloaded_provider + "."
return message
def series_download_subtitles(no):
@ -78,6 +79,7 @@ def series_download_subtitles(no):
if message is not None:
store_subtitles(path_replace(episode[0]))
history_log(1, no, episode[2], message)
send_notifications(no, episode[2], message)
list_missing_subtitles(no)
def wanted_download_subtitles(path):
@ -111,6 +113,7 @@ def wanted_download_subtitles(path):
store_subtitles(path_replace(episode[0]))
list_missing_subtitles(episode[3])
history_log(1, episode[3], episode[2], message)
send_notifications(episode[3], episode[2], message)
def wanted_search_missing_subtitles():
db = sqlite3.connect(os.path.join(os.path.dirname(__file__), 'data/db/bazarr.db'), timeout=30)

@ -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:
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
db.commit()

@ -7,5 +7,10 @@ except SystemExit as e:
try:
pip.main(['install', '--user', 'langdetect'])
except SystemExit as e:
pass
try:
pip.main(['install', '--user', 'apprise'])
except SystemExit as e:
pass

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save