This commit is contained in:
yumoqing 2020-03-15 00:51:44 +08:00
parent 1ee4a4adaa
commit 8b537c8cdc
2 changed files with 64 additions and 51 deletions

View File

@ -64,30 +64,19 @@ def signal_handler(signal, frame):
signal.signal(signal.SIGINT, signal_handler) signal.signal(signal.SIGINT, signal_handler)
def on_close(o,v=None):
"""
catch the "x" button's event of window
"""
app = App.get_running_app()
app.workers.running = False
class BlocksApp(App): def getAuthHeader():
def build(self): app = App.get_running_app()
config = getConfig() if not hasattr(app,'serverinfo'):
self.config = config
# self.theme_cls = ThemeManager()
self.serverinfo = ServerInfo()
self.title = 'Test Title'
self.blocks = Blocks()
self.workers = Workers(maxworkers=config.maxworkers or 80)
Window.bind(on_request_close=self.on_close)
self.workers.start()
self.hc = HttpClient()
WindowBase.softinput_mode='below_target'
x = PageContainer()
Clock.schedule_once(self.build1)
print('build() called......')
return x
def getAuthHeader(self):
if not hasattr(self,'serverinfo'):
print('app serverinfo not found') print('app serverinfo not found')
return {} return {}
serverinfo = self.serverinfo serverinfo = app.serverinfo
if hasattr(serverinfo,'authCode'): if hasattr(serverinfo,'authCode'):
return { return {
'authorization':serverinfo.authCode 'authorization':serverinfo.authCode
@ -95,29 +84,33 @@ class BlocksApp(App):
print('serverinfo authCode not found') print('serverinfo authCode not found')
return {} return {}
def on_start(self): def closeWorkers():
print('on_start() called ...') app = App.get_running_app()
app.workers.running = False
def build1(self,t): def appBlocksHack(app):
config = getConfig()
app.on_close = on_close
app.getAuthHeader = getAuthHeader
app.__del__ = closeWorkers
Window.bind(on_request_close=app.on_close)
app.serverinfo = ServerInfo()
app.title = 'Test Title'
app.blocks = Blocks()
app.workers = Workers(maxworkers=config.maxworkers or 80)
app.workers.start()
app.hc = HttpClient()
WindowBase.softinput_mode='below_target'
class BlocksApp(App):
def build(self):
root = PageContainer()
x = None x = None
x = self.blocks.widgetBuild(self.config.root) config = getConfig()
x = self.blocks.widgetBuild(config.root)
if x is None: if x is None:
alert(str(self.config.root)+': cannt build widget') alert(str(self.config.root)+': cannt build widget')
return return root
self.root.add_widget(x) root.add_widget(x)
return return root
def on_close(self,o,v=None):
"""
catch the "x" button's event of window
"""
self.workers.running = False
def on_pause(self,o,v=None):
"""
to avoid app start from beginening when user exit and reenter this app
"""
return True
def __del__(self):
self.workers.running = False

View File

@ -14,9 +14,12 @@ from kivy.uix.filechooser import FileChooserListView
from kivy.uix.label import Label from kivy.uix.label import Label
from kivy.app import App from kivy.app import App
from kivy.clock import Clock from kivy.clock import Clock
from kivy.logger import Logger
from kivy.properties import ObjectProperty, StringProperty, BooleanProperty, \ from kivy.properties import ObjectProperty, StringProperty, BooleanProperty, \
NumericProperty, DictProperty, OptionProperty NumericProperty, DictProperty, OptionProperty
from pythonosc import dispatcher, osc_server from pythonosc import dispatcher, osc_server
from ffpyplayer.tools import set_log_callback
from .utils import * from .utils import *
from .baseWidget import PressableImage from .baseWidget import PressableImage
@ -26,12 +29,18 @@ desktopOSs=[
"macosx" "macosx"
] ]
logger_func = {'quiet': Logger.critical, 'panic': Logger.critical,
'fatal': Logger.critical, 'error': Logger.error,
'warning': Logger.warning, 'info': Logger.info,
'verbose': Logger.debug, 'debug': Logger.debug}
othersplatforms=['ios','android'] othersplatforms=['ios','android']
class BaseVPlayer(FloatLayout): class BaseVPlayer(FloatLayout):
fullscreen = BooleanProperty(False) fullscreen = BooleanProperty(False)
def __init__(self,vfile=None): def __init__(self,vfile=None):
super().__init__() super().__init__()
self.register_event_type('on_source_error')
Window.allow_screensaver = False Window.allow_screensaver = False
self._video = Video(allow_stretch=True,pos_hint={'x': 0, 'y': 0},size_hint=(1,1)) self._video = Video(allow_stretch=True,pos_hint={'x': 0, 'y': 0},size_hint=(1,1))
self.add_widget(self._video) self.add_widget(self._video)
@ -44,6 +53,17 @@ class BaseVPlayer(FloatLayout):
self.play() self.play()
self._video.bind(eos=self.video_end) self._video.bind(eos=self.video_end)
self._video.bind(state=self.on_state) self._video.bind(state=self.on_state)
set_log_callback(self.ffplayerLog)
def on_source_error(self,o,v):
Logger.info('safecorner: {} error'.format(v))
def ffplayerLog(self, msg, level):
msg = msg.strip()
if msg:
logger_func[level]('yffpyplayer: {}'.format(msg))
if level == 'error' and self._video.source in msg:
self.dispatch('on_source_error',self,self._video.source)
def __del__(self): def __del__(self):
if self._video is None: if self._video is None: