mirror of
https://github.com/fHDHR/fHDHR_NextPVR.git
synced 2025-12-06 17:56:57 -05:00
Improve Tuner Grabbing and closing
This commit is contained in:
parent
1199489cc3
commit
5c66f2594e
@ -53,7 +53,7 @@ class Tuners():
|
|||||||
|
|
||||||
return tuner_number
|
return tuner_number
|
||||||
|
|
||||||
def first_available(self, channel_number):
|
def first_available(self, channel_number, dograb=True):
|
||||||
|
|
||||||
if not self.available_tuner_count():
|
if not self.available_tuner_count():
|
||||||
raise TunerError("805 - All Tuners In Use")
|
raise TunerError("805 - All Tuners In Use")
|
||||||
|
|||||||
@ -21,8 +21,8 @@ class Tuner():
|
|||||||
self.chanscan_url = "%s/api/channels?method=scan" % (self.fhdhr.api.base)
|
self.chanscan_url = "%s/api/channels?method=scan" % (self.fhdhr.api.base)
|
||||||
self.close_url = "%s/api/tuners?method=close&tuner=%s" % (self.fhdhr.api.base, str(self.number))
|
self.close_url = "%s/api/tuners?method=close&tuner=%s" % (self.fhdhr.api.base, str(self.number))
|
||||||
|
|
||||||
def channel_scan(self):
|
def channel_scan(self, grabbed=False):
|
||||||
if self.tuner_lock.locked():
|
if self.tuner_lock.locked() and not grabbed:
|
||||||
self.fhdhr.logger.error("Tuner #%s is not available." % str(self.number))
|
self.fhdhr.logger.error("Tuner #%s is not available." % str(self.number))
|
||||||
raise TunerError("804 - Tuner In Use")
|
raise TunerError("804 - Tuner In Use")
|
||||||
|
|
||||||
@ -30,7 +30,8 @@ class Tuner():
|
|||||||
self.fhdhr.logger.info("Channel Scan Already In Progress!")
|
self.fhdhr.logger.info("Channel Scan Already In Progress!")
|
||||||
else:
|
else:
|
||||||
|
|
||||||
self.tuner_lock.acquire()
|
if not grabbed:
|
||||||
|
self.tuner_lock.acquire()
|
||||||
self.status["status"] = "Scanning"
|
self.status["status"] = "Scanning"
|
||||||
self.fhdhr.logger.info("Tuner #%s Performing Channel Scan." % str(self.number))
|
self.fhdhr.logger.info("Tuner #%s Performing Channel Scan." % str(self.number))
|
||||||
|
|
||||||
@ -42,9 +43,10 @@ class Tuner():
|
|||||||
chanscan.start()
|
chanscan.start()
|
||||||
|
|
||||||
def runscan(self):
|
def runscan(self):
|
||||||
self.fhdhr.web.session.get(self.chanscan_url)
|
self.fhdhr.api.client.get(self.chanscan_url)
|
||||||
self.fhdhr.logger.info("Requested Channel Scan Complete.")
|
self.fhdhr.logger.info("Requested Channel Scan Complete.")
|
||||||
self.fhdhr.web.session.get(self.close_url)
|
self.close()
|
||||||
|
self.fhdhr.api.client.get(self.close_url)
|
||||||
|
|
||||||
def add_downloaded_size(self, bytes_count):
|
def add_downloaded_size(self, bytes_count):
|
||||||
if "downloaded" in list(self.status.keys()):
|
if "downloaded" in list(self.status.keys()):
|
||||||
@ -63,7 +65,7 @@ class Tuner():
|
|||||||
self.set_off_status()
|
self.set_off_status()
|
||||||
if self.tuner_lock.locked():
|
if self.tuner_lock.locked():
|
||||||
self.tuner_lock.release()
|
self.tuner_lock.release()
|
||||||
self.fhdhr.logger.info("Tuner #" + str(self.number) + " Released.")
|
self.fhdhr.logger.info("Tuner #" + str(self.number) + " Released.")
|
||||||
|
|
||||||
def get_status(self):
|
def get_status(self):
|
||||||
current_status = self.status.copy()
|
current_status = self.status.copy()
|
||||||
|
|||||||
@ -77,9 +77,19 @@ class fHDHR_HTTP_Server():
|
|||||||
|
|
||||||
session["deviceauth"] = self.detect_plexmediaserver(request)
|
session["deviceauth"] = self.detect_plexmediaserver(request)
|
||||||
|
|
||||||
|
session["tuner_used"] = None
|
||||||
|
|
||||||
self.fhdhr.logger.debug("Client %s requested %s Opening" % (request.method, request.path))
|
self.fhdhr.logger.debug("Client %s requested %s Opening" % (request.method, request.path))
|
||||||
|
|
||||||
def after_request(self, response):
|
def after_request(self, response):
|
||||||
|
|
||||||
|
# Close Tuner if it was in use, and did not close already
|
||||||
|
if session["tuner_used"] is not None:
|
||||||
|
tuner = self.fhdhr.device.tuners.tuners[str(session["tuner_used"])]
|
||||||
|
if tuner.tuner_lock.locked():
|
||||||
|
self.fhdhr.logger.info("Shutting down Tuner #" + str(self.number) + " after Request.")
|
||||||
|
tuner.close()
|
||||||
|
|
||||||
self.fhdhr.logger.debug("Client %s requested %s Closing" % (request.method, request.path))
|
self.fhdhr.logger.debug("Client %s requested %s Closing" % (request.method, request.path))
|
||||||
return response
|
return response
|
||||||
|
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
from flask import Response, request, redirect, abort, stream_with_context
|
from flask import Response, request, redirect, abort, stream_with_context, session
|
||||||
import urllib.parse
|
import urllib.parse
|
||||||
import uuid
|
import uuid
|
||||||
import json
|
import json
|
||||||
@ -80,6 +80,7 @@ class Tuners():
|
|||||||
response.headers["X-fHDHR-Error"] = str(e)
|
response.headers["X-fHDHR-Error"] = str(e)
|
||||||
self.fhdhr.logger.error(response.headers["X-fHDHR-Error"])
|
self.fhdhr.logger.error(response.headers["X-fHDHR-Error"])
|
||||||
abort(response)
|
abort(response)
|
||||||
|
|
||||||
tuner = self.fhdhr.device.tuners.tuners[str(tunernum)]
|
tuner = self.fhdhr.device.tuners.tuners[str(tunernum)]
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@ -95,6 +96,7 @@ class Tuners():
|
|||||||
|
|
||||||
self.fhdhr.logger.info("Tuner #" + str(tunernum) + " to be used for stream.")
|
self.fhdhr.logger.info("Tuner #" + str(tunernum) + " to be used for stream.")
|
||||||
tuner.set_status(stream_args)
|
tuner.set_status(stream_args)
|
||||||
|
session["tuner_used"] = tunernum
|
||||||
|
|
||||||
if stream_args["method"] == "direct":
|
if stream_args["method"] == "direct":
|
||||||
return Response(tuner.get_stream(stream_args, tuner), content_type=stream_args["content_type"], direct_passthrough=True)
|
return Response(tuner.get_stream(stream_args, tuner), content_type=stream_args["content_type"], direct_passthrough=True)
|
||||||
@ -106,16 +108,19 @@ class Tuners():
|
|||||||
if not tuner_number or str(tuner_number) not in list(self.fhdhr.device.tuners.tuners.keys()):
|
if not tuner_number or str(tuner_number) not in list(self.fhdhr.device.tuners.tuners.keys()):
|
||||||
return "%s Invalid tuner" % str(tuner_number)
|
return "%s Invalid tuner" % str(tuner_number)
|
||||||
|
|
||||||
|
session["tuner_used"] = tuner_number
|
||||||
|
|
||||||
tuner = self.fhdhr.device.tuners.tuners[str(tuner_number)]
|
tuner = self.fhdhr.device.tuners.tuners[str(tuner_number)]
|
||||||
tuner.close()
|
tuner.close()
|
||||||
|
|
||||||
elif method == "scan":
|
elif method == "scan":
|
||||||
|
|
||||||
if not tuner_number:
|
if not tuner_number:
|
||||||
self.fhdhr.device.tuners.tuner_scan()
|
tunernum = self.fhdhr.device.tuners.first_available(None)
|
||||||
else:
|
else:
|
||||||
tuner = self.fhdhr.device.tuners.tuners[str(tuner_number)]
|
tunernum = self.fhdhr.device.tuners.tuner_grab(tuner_number, None)
|
||||||
tuner.channel_scan()
|
tuner = self.fhdhr.device.tuners.tuners[str(tunernum)]
|
||||||
|
tuner.channel_scan(grabbed=True)
|
||||||
|
|
||||||
elif method == "status":
|
elif method == "status":
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user