mirror of
https://github.com/mofeng-git/One-KVM.git
synced 2026-01-29 09:01:54 +08:00
simplified AioNotifier()
This commit is contained in:
@@ -218,7 +218,7 @@ class MsdFileReader(BaseMsdReader): # pylint: disable=too-many-instance-attribu
|
||||
now = time.monotonic()
|
||||
if self.__tick + 1 < now or self.__readed == self.__file_size:
|
||||
self.__tick = now
|
||||
await self.__notifier.notify()
|
||||
self.__notifier.notify()
|
||||
|
||||
yield chunk
|
||||
|
||||
@@ -277,7 +277,7 @@ class MsdFileWriter(BaseMsdWriter): # pylint: disable=too-many-instance-attribu
|
||||
now = time.monotonic()
|
||||
if self.__tick + 1 < now:
|
||||
self.__tick = now
|
||||
await self.__notifier.notify()
|
||||
self.__notifier.notify()
|
||||
|
||||
return self.__written
|
||||
|
||||
|
||||
@@ -121,13 +121,13 @@ class _State:
|
||||
async def busy(self, check_online: bool=True) -> AsyncGenerator[None, None]:
|
||||
async with self._region:
|
||||
async with self._lock:
|
||||
await self.__notifier.notify()
|
||||
self.__notifier.notify()
|
||||
if check_online:
|
||||
if self.vd is None:
|
||||
raise MsdOfflineError()
|
||||
assert self.storage
|
||||
yield
|
||||
await self.__notifier.notify()
|
||||
self.__notifier.notify()
|
||||
|
||||
def is_busy(self) -> bool:
|
||||
return self._region.is_busy()
|
||||
@@ -173,7 +173,7 @@ class Plugin(BaseMsd): # pylint: disable=too-many-instance-attributes
|
||||
|
||||
logger = get_logger(0)
|
||||
logger.info("Using OTG gadget %r as MSD", gadget)
|
||||
aiotools.run_sync(self.__reload_state())
|
||||
aiotools.run_sync(self.__reload_state(notify=False))
|
||||
|
||||
@classmethod
|
||||
def get_plugin_options(cls) -> Dict:
|
||||
@@ -334,7 +334,7 @@ class Plugin(BaseMsd): # pylint: disable=too-many-instance-attributes
|
||||
async with self.__state._region: # pylint: disable=protected-access
|
||||
try:
|
||||
async with self.__state._lock: # pylint: disable=protected-access
|
||||
await self.__notifier.notify()
|
||||
self.__notifier.notify()
|
||||
assert self.__state.storage
|
||||
assert self.__state.vd
|
||||
|
||||
@@ -361,10 +361,7 @@ class Plugin(BaseMsd): # pylint: disable=too-many-instance-attributes
|
||||
except asyncio.CancelledError:
|
||||
pass
|
||||
finally:
|
||||
try:
|
||||
await asyncio.shield(self.__notifier.notify())
|
||||
except asyncio.CancelledError:
|
||||
pass
|
||||
self.__notifier.notify()
|
||||
|
||||
@contextlib.asynccontextmanager
|
||||
async def write_image(self, name: str, size: int, remove_incomplete: Optional[bool]) -> AsyncGenerator[MsdFileWriter, None]:
|
||||
@@ -373,7 +370,7 @@ class Plugin(BaseMsd): # pylint: disable=too-many-instance-attributes
|
||||
path: str = ""
|
||||
try:
|
||||
async with self.__state._lock: # pylint: disable=protected-access
|
||||
await self.__notifier.notify()
|
||||
self.__notifier.notify()
|
||||
assert self.__state.storage
|
||||
assert self.__state.vd
|
||||
|
||||
@@ -395,7 +392,7 @@ class Plugin(BaseMsd): # pylint: disable=too-many-instance-attributes
|
||||
chunk_size=self.__write_chunk_size,
|
||||
).open()
|
||||
|
||||
await self.__notifier.notify()
|
||||
self.__notifier.notify()
|
||||
yield self.__writer
|
||||
self.__set_image_complete(name, self.__writer.is_complete())
|
||||
|
||||
@@ -421,10 +418,6 @@ class Plugin(BaseMsd): # pylint: disable=too-many-instance-attributes
|
||||
await asyncio.shield(self.__reload_state())
|
||||
except asyncio.CancelledError:
|
||||
pass
|
||||
try:
|
||||
await asyncio.shield(self.__notifier.notify())
|
||||
except asyncio.CancelledError:
|
||||
pass
|
||||
|
||||
@aiotools.atomic
|
||||
async def remove(self, name: str) -> None:
|
||||
@@ -470,7 +463,6 @@ class Plugin(BaseMsd): # pylint: disable=too-many-instance-attributes
|
||||
while True:
|
||||
# Активно ждем, пока не будут на месте все каталоги.
|
||||
await self.__reload_state()
|
||||
await self.__notifier.notify()
|
||||
if self.__state.vd:
|
||||
break
|
||||
await asyncio.sleep(5)
|
||||
@@ -483,7 +475,6 @@ class Plugin(BaseMsd): # pylint: disable=too-many-instance-attributes
|
||||
|
||||
# После установки вотчеров еще раз проверяем стейт, чтобы ничего не потерять
|
||||
await self.__reload_state()
|
||||
await self.__notifier.notify()
|
||||
|
||||
while self.__state.vd: # Если живы после предыдущей проверки
|
||||
need_restart = False
|
||||
@@ -499,12 +490,11 @@ class Plugin(BaseMsd): # pylint: disable=too-many-instance-attributes
|
||||
break
|
||||
if need_reload_state:
|
||||
await self.__reload_state()
|
||||
await self.__notifier.notify()
|
||||
except Exception:
|
||||
logger.exception("Unexpected MSD watcher error")
|
||||
time.sleep(1)
|
||||
|
||||
async def __reload_state(self) -> None:
|
||||
async def __reload_state(self, notify: bool=True) -> None:
|
||||
logger = get_logger(0)
|
||||
async with self.__state._lock: # pylint: disable=protected-access
|
||||
try:
|
||||
@@ -541,6 +531,8 @@ class Plugin(BaseMsd): # pylint: disable=too-many-instance-attributes
|
||||
self.__state.vd.image = None
|
||||
|
||||
self.__state.vd.connected = False
|
||||
if notify:
|
||||
self.__notifier.notify()
|
||||
|
||||
async def __setup_initial(self) -> None:
|
||||
if self.__initial_image:
|
||||
|
||||
@@ -245,7 +245,7 @@ class Plugin(BaseMsd): # pylint: disable=too-many-instance-attributes
|
||||
).open()
|
||||
|
||||
await self.__write_image_info(False)
|
||||
await self.__notifier.notify()
|
||||
self.__notifier.notify()
|
||||
yield self.__device_writer
|
||||
await self.__write_image_info(True)
|
||||
finally:
|
||||
|
||||
@@ -101,7 +101,7 @@ class Plugin(BaseUserGpioDriver): # pylint: disable=too-many-instance-attribute
|
||||
(got, channel) = await aiomulti.queue_get_last(self.__channel_queue, 1)
|
||||
if got and self.__channel != channel:
|
||||
self.__channel = channel
|
||||
await self._notifier.notify()
|
||||
self._notifier.notify()
|
||||
|
||||
async def cleanup(self) -> None:
|
||||
if self.__proc is not None:
|
||||
|
||||
@@ -109,7 +109,7 @@ class Plugin(BaseUserGpioDriver):
|
||||
except Exception:
|
||||
raw = -1
|
||||
if raw != prev_raw:
|
||||
await self._notifier.notify()
|
||||
self._notifier.notify()
|
||||
prev_raw = raw
|
||||
await asyncio.sleep(self.__state_poll)
|
||||
|
||||
|
||||
@@ -122,7 +122,7 @@ class Plugin(BaseUserGpioDriver): # pylint: disable=too-many-instance-attribute
|
||||
get_logger().error("Failed Hue bulk GET request: %s", tools.efmt(err))
|
||||
self.__state = dict.fromkeys(self.__state, None)
|
||||
if self.__state != prev_state:
|
||||
await self._notifier.notify()
|
||||
self._notifier.notify()
|
||||
prev_state = self.__state
|
||||
await self.__update_notifier.wait(self.__state_poll)
|
||||
|
||||
@@ -148,7 +148,7 @@ class Plugin(BaseUserGpioDriver): # pylint: disable=too-many-instance-attribute
|
||||
get_logger().error("Failed Hue PUT request to pin %s: %s", pin, tools.efmt(err))
|
||||
raise GpioDriverOfflineError(self)
|
||||
else:
|
||||
await self.__update_notifier.notify()
|
||||
self.__update_notifier.notify()
|
||||
|
||||
def __ensure_http_session(self) -> aiohttp.ClientSession:
|
||||
if not self.__http_session:
|
||||
|
||||
@@ -135,7 +135,7 @@ class Plugin(BaseUserGpioDriver): # pylint: disable=too-many-instance-attribute
|
||||
await self.__update_power()
|
||||
new = (self.__online, self.__power)
|
||||
if new != prev:
|
||||
await self._notifier.notify()
|
||||
self._notifier.notify()
|
||||
prev = new
|
||||
await asyncio.sleep(self.__state_poll)
|
||||
|
||||
|
||||
@@ -76,7 +76,7 @@ class Plugin(BaseUserGpioDriver):
|
||||
while True:
|
||||
try:
|
||||
while True:
|
||||
await self._notifier.notify()
|
||||
self._notifier.notify()
|
||||
if os.path.isfile(self.__udc_path):
|
||||
break
|
||||
await asyncio.sleep(5)
|
||||
@@ -84,7 +84,7 @@ class Plugin(BaseUserGpioDriver):
|
||||
with Inotify() as inotify:
|
||||
inotify.watch(os.path.dirname(self.__udc_path), InotifyMask.ALL_MODIFY_EVENTS)
|
||||
inotify.watch(self.__profile_path, InotifyMask.ALL_MODIFY_EVENTS)
|
||||
await self._notifier.notify()
|
||||
self._notifier.notify()
|
||||
while True:
|
||||
need_restart = False
|
||||
need_notify = False
|
||||
@@ -97,7 +97,7 @@ class Plugin(BaseUserGpioDriver):
|
||||
if need_restart:
|
||||
break
|
||||
if need_notify:
|
||||
await self._notifier.notify()
|
||||
self._notifier.notify()
|
||||
except Exception:
|
||||
logger.exception("Unexpected OTG-bind watcher error")
|
||||
await asyncio.sleep(1)
|
||||
|
||||
@@ -103,7 +103,7 @@ class Plugin(BaseUserGpioDriver): # pylint: disable=too-many-instance-attribute
|
||||
(got, channel) = await aiomulti.queue_get_last(self.__channel_queue, 1)
|
||||
if got and self.__channel != channel:
|
||||
self.__channel = channel
|
||||
await self._notifier.notify()
|
||||
self._notifier.notify()
|
||||
|
||||
async def cleanup(self) -> None:
|
||||
if self.__proc is not None:
|
||||
|
||||
@@ -111,7 +111,7 @@ class Plugin(BaseUserGpioDriver): # pylint: disable=too-many-instance-attribute
|
||||
except Exception:
|
||||
pass
|
||||
if self.__active != prev_active:
|
||||
await self._notifier.notify()
|
||||
self._notifier.notify()
|
||||
prev_active = self.__active
|
||||
await self.__update_notifier.wait(self.__state_poll)
|
||||
|
||||
@@ -127,7 +127,7 @@ class Plugin(BaseUserGpioDriver): # pylint: disable=too-many-instance-attribute
|
||||
assert 1 <= channel <= 16
|
||||
if state:
|
||||
await self.__send_command("{:c}{:c}".format(1, channel).encode())
|
||||
await self.__update_notifier.notify()
|
||||
self.__update_notifier.notify()
|
||||
await asyncio.sleep(self.__switch_delay) # Slowdown
|
||||
|
||||
# =====
|
||||
|
||||
@@ -99,7 +99,7 @@ class Plugin(BaseUserGpioDriver): # pylint: disable=too-many-instance-attribute
|
||||
(got, channel) = await aiomulti.queue_get_last(self.__channel_queue, 1)
|
||||
if got and self.__channel != channel:
|
||||
self.__channel = channel
|
||||
await self._notifier.notify()
|
||||
self._notifier.notify()
|
||||
|
||||
async def cleanup(self) -> None:
|
||||
if self.__proc is not None:
|
||||
|
||||
Reference in New Issue
Block a user