mirror of
https://github.com/morpheus65535/bazarr
synced 2024-12-24 16:52:06 +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
153
bazarr.py
153
bazarr.py
|
@ -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)
|
||||
|
|
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:
|
||||
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
|
1237
views/settings.tpl
1237
views/settings.tpl
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue