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,60 +64,53 @@ def signal_handler(signal, frame):
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
def getAuthHeader():
app = App.get_running_app()
if not hasattr(app,'serverinfo'):
print('app serverinfo not found')
return {}
serverinfo = app.serverinfo
if hasattr(serverinfo,'authCode'):
return {
'authorization':serverinfo.authCode
}
print('serverinfo authCode not found')
return {}
def closeWorkers():
app = App.get_running_app()
app.workers.running = False
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):
config = getConfig()
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')
return {}
serverinfo = self.serverinfo
if hasattr(serverinfo,'authCode'):
return {
'authorization':serverinfo.authCode
}
print('serverinfo authCode not found')
return {}
def on_start(self):
print('on_start() called ...')
def build1(self,t):
root = PageContainer()
x = None
x = self.blocks.widgetBuild(self.config.root)
config = getConfig()
x = self.blocks.widgetBuild(config.root)
if x is None:
alert(str(self.config.root)+': cannt build widget')
return
self.root.add_widget(x)
return
return root
root.add_widget(x)
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.app import App
from kivy.clock import Clock
from kivy.logger import Logger
from kivy.properties import ObjectProperty, StringProperty, BooleanProperty, \
NumericProperty, DictProperty, OptionProperty
from pythonosc import dispatcher, osc_server
from ffpyplayer.tools import set_log_callback
from .utils import *
from .baseWidget import PressableImage
@ -26,12 +29,18 @@ desktopOSs=[
"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']
class BaseVPlayer(FloatLayout):
fullscreen = BooleanProperty(False)
def __init__(self,vfile=None):
super().__init__()
self.register_event_type('on_source_error')
Window.allow_screensaver = False
self._video = Video(allow_stretch=True,pos_hint={'x': 0, 'y': 0},size_hint=(1,1))
self.add_widget(self._video)
@ -44,7 +53,18 @@ class BaseVPlayer(FloatLayout):
self.play()
self._video.bind(eos=self.video_end)
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):
if self._video is None:
return