Skip to content

Commit

Permalink
Rename more legacy "WebApp" and "MarkerManager" leftovers
Browse files Browse the repository at this point in the history
Notably:
 - in `webAccess`: `supportWebApp` -> `canHaveWebAccessSupport`
 - in `webAppLib`: `playWebAppSound` -> `playWebAccessSound`
 - in `webAppScheduler`: `event_webApp` -> `event_webModule`
 - in `webAppScheduler`: `event_markerManagerUpdated` -> `event_ruleManagerUpdated`
 - in `WebModule`: `event_webApp_gainFocus` -> `event_webModule_gainFocus`
 - in `WebModule`: `event_webApp_loseFocus` -> `event_webModule_loseFocus`

The latter two are currently dead code but will likely be revived for issue #17.
  • Loading branch information
JulienCochuyt committed Aug 26, 2024
1 parent 2fecaf8 commit c92ad15
Show file tree
Hide file tree
Showing 8 changed files with 96 additions and 85 deletions.
73 changes: 32 additions & 41 deletions addon/globalPlugins/webAccess/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,58 +57,49 @@

import os
import re
import core
import wx

from NVDAObjects.IAccessible import IAccessible
from NVDAObjects.IAccessible.MSHTML import MSHTML
from NVDAObjects.IAccessible.ia2Web import Ia2Web
from NVDAObjects.IAccessible.mozilla import Mozilla
from scriptHandler import script
import addonHandler
import api
import baseObject
from buildVersion import version_detailed as NVDA_VERSION
import controlTypes
import core
import eventHandler
import globalPluginHandler
import gui
from logHandler import log
import scriptHandler
import speech
from scriptHandler import script
import ui
import virtualBuffers

from . import nodeHandler
from . import overlay
from . import webAppLib
from .webAppLib import *
from .webAppScheduler import WebAppScheduler
from . import webModuleHandler
from .webAppLib import playWebAccessSound, sleep
from .webAppScheduler import WebAppScheduler


addonHandler.initTranslation()


TRACE = lambda *args, **kwargs: None # @UnusedVariable
#TRACE = log.info

SCRIPT_CATEGORY = "WebAccess"

#
# defines sound directory
#

SOUND_DIRECTORY = os.path.join(os.path.abspath(os.path.dirname(__file__)), "..", "..", "sounds")
SUPPORTED_HOSTS = ['brave', 'firefox', 'chrome', 'java', 'iexplore', 'microsoftedgecp', 'msedge']
TRACE = lambda *args, **kwargs: None # @UnusedVariable
#TRACE = log.info


# Currently dead code, but will likely be revived for issue #17.
activeWebModule = None

supportedWebAppHosts = ['brave', 'firefox', 'chrome', 'java', 'iexplore', 'microsoftedgecp', 'msedge']

activeWebApp = None
webAccessEnabled = True
scheduler = None


class DefaultBrowserScripts(baseObject.ScriptableObject):

def __init__(self, warningMessage):
Expand All @@ -119,7 +110,7 @@ def __init__(self, warningMessage):
self.__class__.__gestures["kb:control+shift+%s" % character] = "notAssigned"

def script_notAssigned(self, gesture): # @UnusedVariable
playWebAppSound("keyError")
playWebAccessSound("keyError")
sleep(0.2)
ui.message(self.warningMessage)

Expand Down Expand Up @@ -225,7 +216,7 @@ def showWebAccessGui(self):
# Translators: Error message when attempting to show the Web Access GUI.
ui.message(_("The current object does not support Web Access."))
return
if not supportWebApp(obj):
if not canHaveWebAccessSupport(obj):
# Translators: Error message when attempting to show the Web Access GUI.
ui.message(_("You must be in a web browser to use Web Access."))
return
Expand Down Expand Up @@ -306,23 +297,23 @@ def script_toggleWebAccessSupport(self, gesture): # @UnusedVariable
ui.message(_("Web Access support enabled.")) # FR: u"Support Web Access activé."


def getActiveWebApp():
global activeWebApp
return activeWebApp
def getActiveWebModule():
global activeWebModule
return activeWebModule


def webAppLoseFocus(obj):
global activeWebApp
if activeWebApp is not None:
sendWebAppEvent('webApp_loseFocus', obj, activeWebApp)
activeWebApp = None
#log.info("Losing webApp focus for object:\n%s\n" % ("\n".join(obj.devInfo)))
def webModuleLoseFocus(obj):
global activeWebModule
if activeWebModule is not None:
sendWebModuleEvent('webModule_loseFocus', obj, activeWebModule)
activeWebModule = None
#log.info("Losing webModule focus for object:\n%s\n" % ("\n".join(obj.devInfo)))


def supportWebApp(obj):
def canHaveWebAccessSupport(obj):
if obj is None or obj.appModule is None:
return None
return obj.appModule.appName in supportedWebAppHosts
return False
return obj.appModule.appName in SUPPORTED_HOSTS


def VirtualBuffer_changeNotify(cls, rootDocHandle, rootID):
Expand All @@ -337,10 +328,10 @@ def virtualBuffer_loadBufferDone(self, success=True):
virtualBuffer_loadBufferDone.super.__get__(self)(success=success)


def sendWebAppEvent(eventName, obj, webApp=None):
if webApp is None:
def sendWebModuleEvent(eventName, obj, webModule=None):
if webModule is None:
return
scheduler.send(eventName="webApp", name=eventName, obj=obj, webApp=webApp)
scheduler.send(eventName="webModule", name=eventName, obj=obj, webModule=webModule)


def eventExecuter_gen(self, eventName, obj):
Expand All @@ -355,18 +346,18 @@ def eventExecuter_gen(self, eventName, obj):
yield func, (obj, self.next)

# webApp level
if not supportWebApp(obj) and eventName in ["gainFocus"] and activeWebApp is not None:
if not canHaveWebAccessSupport(obj) and eventName in ["gainFocus"] and activeWebModule is not None:
# log.info("Received event %s on a non-hosted object" % eventName)
webAppLoseFocus(obj)
else:
webApp = obj.webAccess.webModule if isinstance(obj, overlay.WebAccessObject) else None
if webApp is None:
if activeWebApp is not None and obj.hasFocus:
webModule = obj.webAccess.webModule if isinstance(obj, overlay.WebAccessObject) else None
if webModule is None:
if activeWebModule is not None and obj.hasFocus:
#log.info("Disabling active webApp event %s" % eventName)
webAppLoseFocus(obj)
else:
# log.info("Getting method %s -> %s" %(webApp.name, funcName))
func = getattr(webApp, funcName, None)
func = getattr(webModule, funcName, None)
if func:
yield func,(obj, self.next)

Expand Down
18 changes: 12 additions & 6 deletions addon/globalPlugins/webAccess/gui/webModulesManager.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,12 @@
# See the file COPYING.txt at the root of this distribution for more details.


__version__ = "2024.07.25"
__author__ = "Julien Cochuyt <[email protected]>"
__version__ = "2024.08.21"
__authors__ = (
"Julien Cochuyt <[email protected]>",
"André-Abush Clause <[email protected]>",
"Gatien Bouyssou <[email protected]>",
)


import os
Expand Down Expand Up @@ -229,9 +233,11 @@ def onModulesListItemSelected(self, evt):
self.moduleEditButton.Enable(item is not None)
self.rulesManagerButton.Enable(
item is not None
and hasattr(item, "markerManager")
and item.markerManager.isReady
)
# FIXME: This test never succeeds as a live WebModule is not
# taken from the context.
# TODO: Remove this restriction for issue #42
and item.ruleManager.isReady
)
self.moduleDeleteButton.Enable(item is not None)

def onRulesManager(self, evt=None):
Expand Down Expand Up @@ -290,4 +296,4 @@ def Show(self, context):
self.Fit()
self.modulesList.SetFocus()
self.CentreOnScreen()
return super().Show()
return super().Show()
6 changes: 3 additions & 3 deletions addon/globalPlugins/webAccess/nodeHandler.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
#
# See the file COPYING.txt at the root of this distribution for more details.

__version__ = "2024.08.19"
__version__ = "2024.08.21"
__authors__ = (
"Frédéric Brugnot <[email protected]>",
"Julien Cochuyt <[email protected]>",
Expand Down Expand Up @@ -274,7 +274,7 @@ def update(self):
self.identifier = time.time()
# logTime ("Update node manager %d nodes" % len(fields), t)
self.updating = False
# playWebAppSound ("tick")
# playWebAccessSound("tick")
self._curNode = self.caretNode = self.getCaretNode()
try:
info = self.treeInterceptor.makeTextInfo(textInfos.POSITION_LAST)
Expand Down Expand Up @@ -550,7 +550,7 @@ def isReady(self):

def checkNodeManager(self):
if self.nodeManager is None or not self.nodeManager.isReady:
playWebAppSound("keyError")
playWebAccessSound("keyError")
return False
else:
return True
Expand Down
10 changes: 7 additions & 3 deletions addon/globalPlugins/webAccess/overlay.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,11 @@
"""

__version__ = "2024.07.24"
__author__ = "Julien Cochuyt <[email protected]>"
__authors__ = (
"Julien Cochuyt <[email protected]>",
"André-Abush Clause <[email protected]>",
"Gatien Bouyssou <[email protected]>",
)


import weakref
Expand Down Expand Up @@ -193,7 +197,7 @@ def treeInterceptor(self):

@property
def webModule(self):
from . import supportWebApp, webAccessEnabled
from . import canHaveWebAccessSupport, webAccessEnabled
if not webAccessEnabled:
return None
ti = self.treeInterceptor
Expand All @@ -203,7 +207,7 @@ def webModule(self):
webModule = self._webModule
if not webModule:
obj = ti.rootNVDAObject
if not supportWebApp(obj):
if not canHaveWebAccessSupport(obj):
return None
from . import webModuleHandler
try:
Expand Down
25 changes: 15 additions & 10 deletions addon/globalPlugins/webAccess/ruleHandler/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@
from ..webAppLib import (
html,
logTimeStart,
playWebAppSound,
playWebAccessSound,
)
from .. import webAppScheduler
from . import ruleTypes
Expand Down Expand Up @@ -101,7 +101,7 @@ def showManager(context):
webModule = context["webModule"]
mgr = webModule.ruleManager
if not mgr.isReady:
playWebAppSound("keyError")
playWebAccessSound("keyError")
time.sleep(0.2)
speech.cancelSpeech()
ui.message(_("Not ready"))
Expand All @@ -123,7 +123,7 @@ def __init__(self, warningMessage):
self.__class__.__gestures["kb:control+shift+%s" % character] = "notAssigned"

def script_notAssigned(self, gesture):
playWebAppSound("keyError")
playWebAccessSound("keyError")
callLater(200, ui.message, self.warningMessage)

__gestures = {}
Expand Down Expand Up @@ -391,7 +391,7 @@ def update(self, nodeManager=None, force=False):
self.zone = None
#logTime("update marker", t)
if self.isReady:
webAppScheduler.scheduler.send(eventName="markerManagerUpdated", markerManager=self)
webAppScheduler.scheduler.send(eventName="ruleManagerUpdated", ruleManager=self)
self.timerCheckAutoAction = threading.Timer(
1, # Accepts floating point number for sub-second precision
self.checkAutoAction
Expand All @@ -410,7 +410,12 @@ def checkPageTitle(self):
webModule = self.webModule
if title != webModule.activePageTitle:
webModule.activePageTitle = title
webAppScheduler.scheduler.send(eventName="webApp", name="webApp_pageChanged", obj=title, webApp=webModule)
webAppScheduler.scheduler.send(
eventName="webModule",
name="webModule_pageChanged",
obj=title,
webModule=webModule
)
return True
return False

Expand All @@ -435,7 +440,7 @@ def checkAutoAction(self):
if (lastText is None or text != lastText):
self.triggeredIdentifiers[controlIdentifier] = text
if autoActionName == "speak":
playWebAppSound("errorMessage")
playWebAccessSound("errorMessage")
elif autoActionName == "moveto":
if lastText is None:
# only if it's a new identifier
Expand Down Expand Up @@ -642,7 +647,7 @@ def quickNav(
quiet=False,
):
if not self.isReady:
playWebAppSound("keyError")
playWebAccessSound("keyError")
ui.message(_("Not ready"))
return None

Expand All @@ -651,7 +656,7 @@ def quickNav(
position = html.getCaretInfo()

if position is None:
playWebAppSound("keyError")
playWebAccessSound("keyError")
ui.message(_("Not ready"))
return None

Expand All @@ -669,11 +674,11 @@ def quickNav(
)
if result:
if not relative:
playWebAppSound("loop")
playWebAccessSound("loop")
time.sleep(0.2)
break
else:
playWebAppSound("keyError")
playWebAccessSound("keyError")
time.sleep(0.2)
if quiet:
return False
Expand Down
16 changes: 10 additions & 6 deletions addon/globalPlugins/webAccess/webAppLib/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
# -*- coding: utf-8 -*-

# This file is part of Web Access for NVDA.
# Copyright (C) 2015-2019 Accessolutions (http://accessolutions.fr)
# Copyright (C) 2015-2024 Accessolutions (http://accessolutions.fr)
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
Expand All @@ -22,8 +22,12 @@
# Get ready for Python 3


__version__ = "2019.07.17"
__author__ = "Frédéric Brugnot <[email protected]>"
__version__ = "2024.08.21"
__authors__ = (
"Frédéric Brugnot <[email protected]>",
"Julien Cochuyt <[email protected]>",
"André-Abush Clause <[email protected]>",
)


import os
Expand Down Expand Up @@ -63,12 +67,12 @@ def speechOn(delay=0):
api.processPendingEvents ()
speech.setSpeechMode(speech.SpeechMode.talk)

def playWebAppSound (name):
def playWebAccessSound(name):
from ... import webAccess
try:
playSound(os.path.join(webAccess.SOUND_DIRECTORY, "%s.wav" % name))
except:
pass
except Exception:
log.exception()

def playSound(sound):
sound = os.path.abspath(os.path.join(os.path.dirname(__file__), sound))
Expand Down
Loading

0 comments on commit c92ad15

Please sign in to comment.