diff --git a/CHANGELOG.md b/CHANGELOG.md index 7bf4018..e98bb69 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,12 @@ ## [Unreleased] +## 0.4.0 - 2022-05-19 + +### Added + +- Support for Nextcloud 24 + ## 0.3.2 - 2022-03-23 ### Fixed diff --git a/pyproject.toml b/pyproject.toml index def734c..219aea5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "talked" -version = "0.3.2" +version = "0.4.0" description = "Call recording for Nextcloud Talk" authors = ["Magnus Walbeck "] license = "AGPL-3.0-or-later" diff --git a/talked/__init__.py b/talked/__init__.py index 39d9222..26e7a8c 100644 --- a/talked/__init__.py +++ b/talked/__init__.py @@ -5,7 +5,7 @@ from tomlkit import parse -__version__ = "0.3.2" +__version__ = "0.4.0" LOG_LEVELS = { "critical": logging.CRITICAL, diff --git a/talked/recorder.py b/talked/recorder.py index aac2090..d6baed3 100644 --- a/talked/recorder.py +++ b/talked/recorder.py @@ -129,7 +129,7 @@ def launch_browser( is_valid_talk_room(driver, msg_queue) # Change the name of the recording user - change_name_of_user(driver) + change_name_of_user(driver, nextcloud_version) join_call(driver, msg_queue, nextcloud_version) @@ -188,13 +188,22 @@ def is_valid_talk_room(driver: WebDriver, msg_queue: Queue) -> None: graceful_shutdown(driver) -def change_name_of_user(driver: WebDriver) -> None: +def change_name_of_user(driver: WebDriver, nextcloud_version: int) -> None: logging.info("Changing name of recording user") - edit_name = WebDriverWait(driver, 10).until( - EC.visibility_of_element_located( - (By.CSS_SELECTOR, ".username-form button.icon-rename") + + if nextcloud_version >= 24: + edit_name = WebDriverWait(driver, 10).until( + EC.visibility_of_element_located( + (By.CSS_SELECTOR, ".username-form button .pencil-icon") + ) ) - ) + else: + edit_name = WebDriverWait(driver, 10).until( + EC.visibility_of_element_located( + (By.CSS_SELECTOR, ".username-form button.icon-rename") + ) + ) + edit_name.click() driver.find_element_by_css_selector("input.username-form__input").send_keys( "Talked" + Keys.ENTER @@ -204,10 +213,18 @@ def change_name_of_user(driver: WebDriver) -> None: def join_call(driver: WebDriver, msg_queue: Queue, nextcloud_version: int) -> None: # Wait for the green Join Call button to appear then click it logging.info("Waiting for join call button to appear") + + if nextcloud_version >= 24: + join_call_button_css_selector = ( + "#call_button.button-vue--vue-success:not(:disabled)" + ) + else: + join_call_button_css_selector = "button.top-bar__button.success:not(:disabled)" + try: join_call_button = WebDriverWait(driver, 10).until( EC.presence_of_element_located( - (By.CSS_SELECTOR, "button.top-bar__button.success:not(:disabled)") + (By.CSS_SELECTOR, join_call_button_css_selector) ) ) except TimeoutException: @@ -223,12 +240,22 @@ def join_call(driver: WebDriver, msg_queue: Queue, nextcloud_version: int) -> No logging.info("Joining call") join_call_button.click() - if nextcloud_version == 23: + if nextcloud_version >= 23: logging.info("Handling device checker screen") + + if nextcloud_version >= 24: + device_checker_join_call_button_css_selector = ( + ".device-checker #call_button.button-vue--vue-success:not(:disabled)" + ) + else: + device_checker_join_call_button_css_selector = ( + ".device-checker #call_button.success" + ) + try: device_checker_join_call_button = WebDriverWait(driver, 10).until( EC.presence_of_element_located( - (By.CSS_SELECTOR, ".device-checker #call_button.success") + (By.CSS_SELECTOR, device_checker_join_call_button_css_selector) ) ) except TimeoutException: @@ -271,7 +298,7 @@ def switch_to_speaker_view(driver: WebDriver, nextcloud_version: int) -> None: # Switch to speaker view logging.info("Switching to speaker view") - if nextcloud_version == 23: + if nextcloud_version >= 23: driver.find_element_by_css_selector( ".local-media-controls button.action-item__menutoggle" ).click() @@ -321,7 +348,7 @@ def close_sidebar(driver: WebDriver) -> None: EC.visibility_of_element_located( ( By.CSS_SELECTOR, - ".top-bar.in-call button.top-bar__button .icon-leave-call", + ".top-bar.in-call .top-bar__button .icon-leave-call", ) ) )