Compare commits
3 Commits
1f40e8dcd9
...
9614d03bef
Author | SHA1 | Date | |
---|---|---|---|
9614d03bef | |||
32a335c676 | |||
06e27fc1e0 |
@ -1,18 +0,0 @@
|
|||||||
* Command-line publishing of SSB messages.
|
|
||||||
* Minor SSB replication improvements.
|
|
||||||
* Disallow rich text paste on more browsers.
|
|
||||||
* The identity app lets you change the server account.
|
|
||||||
* Fix SSB profile icons stretching.
|
|
||||||
* Fixed the iPhone app missing data.
|
|
||||||
* Added a button to initiate sync.
|
|
||||||
* Fixed the AppImage.
|
|
||||||
* Android version compatibility fixes.
|
|
||||||
* Updates:
|
|
||||||
* CodeMirror
|
|
||||||
* CommonMark 0.31.2
|
|
||||||
* Lit 3.2.1
|
|
||||||
* OpenSSL 3.4.0
|
|
||||||
* c-ares 1.34.2
|
|
||||||
* libbacktrace
|
|
||||||
* libuv 1.49.2
|
|
||||||
* sqlite 3.47.0
|
|
19
metadata/en-US/changelogs/29.txt
Normal file
19
metadata/en-US/changelogs/29.txt
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
* Command-line publishing.
|
||||||
|
* SSB replication improvements.
|
||||||
|
* Disallow rich text paste more.
|
||||||
|
* identity app lets you change the server account.
|
||||||
|
* SSB profile icons stretching.
|
||||||
|
* Fixed iPhone app missing data.
|
||||||
|
* Added an initiate sync button.
|
||||||
|
* Fixed the AppImage.
|
||||||
|
* Flatpak WIP.
|
||||||
|
* Android compatibility fixes.
|
||||||
|
* Updates:
|
||||||
|
* CodeMirror
|
||||||
|
* CommonMark 0.31.2
|
||||||
|
* Lit 3.2.1
|
||||||
|
* OpenSSL 3.4.0
|
||||||
|
* c-ares 1.34.2
|
||||||
|
* libbacktrace
|
||||||
|
* libuv 1.49.2
|
||||||
|
* sqlite 3.47.0
|
32
src/ssb.c
32
src/ssb.c
@ -2450,6 +2450,20 @@ static void _tf_ssb_on_handle_close(uv_handle_t* handle)
|
|||||||
|
|
||||||
static void _tf_ssb_on_timer_close(uv_handle_t* handle)
|
static void _tf_ssb_on_timer_close(uv_handle_t* handle)
|
||||||
{
|
{
|
||||||
|
tf_ssb_timer_t* timer = handle->data;
|
||||||
|
for (int i = 0; i < timer->ssb->timers_count; i++)
|
||||||
|
{
|
||||||
|
if (timer->ssb->timers[i] == timer)
|
||||||
|
{
|
||||||
|
timer->ssb->timers[i] = timer->ssb->timers[--timer->ssb->timers_count];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (timer->ssb->shutting_down && !timer->ssb->timers_count)
|
||||||
|
{
|
||||||
|
tf_free(timer->ssb->timers);
|
||||||
|
timer->ssb->timers = NULL;
|
||||||
|
}
|
||||||
tf_free(handle->data);
|
tf_free(handle->data);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2503,14 +2517,11 @@ void tf_ssb_destroy(tf_ssb_t* ssb)
|
|||||||
{
|
{
|
||||||
uv_close((uv_handle_t*)&ssb->timers[i]->timer, _tf_ssb_on_timer_close);
|
uv_close((uv_handle_t*)&ssb->timers[i]->timer, _tf_ssb_on_timer_close);
|
||||||
}
|
}
|
||||||
ssb->timers_count = 0;
|
|
||||||
tf_free(ssb->timers);
|
|
||||||
ssb->timers = NULL;
|
|
||||||
|
|
||||||
tf_printf("Waiting for closes.\n");
|
tf_printf("Waiting for closes.\n");
|
||||||
|
|
||||||
while (ssb->broadcast_listener.data || ssb->broadcast_sender.data || ssb->broadcast_timer.data || ssb->broadcast_cleanup_timer.data || ssb->trace_timer.data ||
|
while (ssb->broadcast_listener.data || ssb->broadcast_sender.data || ssb->broadcast_timer.data || ssb->broadcast_cleanup_timer.data || ssb->trace_timer.data ||
|
||||||
ssb->server.data || ssb->ref_count || ssb->request_activity_timer.data)
|
ssb->server.data || ssb->ref_count || ssb->request_activity_timer.data || ssb->timers_count)
|
||||||
{
|
{
|
||||||
uv_run(ssb->loop, UV_RUN_ONCE);
|
uv_run(ssb->loop, UV_RUN_ONCE);
|
||||||
}
|
}
|
||||||
@ -4197,19 +4208,16 @@ static void _tf_ssb_scheduled_timer(uv_timer_t* handle)
|
|||||||
{
|
{
|
||||||
tf_ssb_timer_t* timer = handle->data;
|
tf_ssb_timer_t* timer = handle->data;
|
||||||
timer->callback(timer->ssb, timer->user_data);
|
timer->callback(timer->ssb, timer->user_data);
|
||||||
for (int i = 0; i < timer->ssb->timers_count; i++)
|
|
||||||
{
|
|
||||||
if (timer->ssb->timers[i] == timer)
|
|
||||||
{
|
|
||||||
timer->ssb->timers[i] = timer->ssb->timers[--timer->ssb->timers_count];
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
uv_close((uv_handle_t*)handle, _tf_ssb_on_timer_close);
|
uv_close((uv_handle_t*)handle, _tf_ssb_on_timer_close);
|
||||||
}
|
}
|
||||||
|
|
||||||
void tf_ssb_schedule_work(tf_ssb_t* ssb, int delay_ms, void (*callback)(tf_ssb_t* ssb, void* user_data), void* user_data)
|
void tf_ssb_schedule_work(tf_ssb_t* ssb, int delay_ms, void (*callback)(tf_ssb_t* ssb, void* user_data), void* user_data)
|
||||||
{
|
{
|
||||||
|
if (ssb->shutting_down)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
ssb->timers = tf_resize_vec(ssb->timers, sizeof(uv_timer_t*) * (ssb->timers_count + 1));
|
ssb->timers = tf_resize_vec(ssb->timers, sizeof(uv_timer_t*) * (ssb->timers_count + 1));
|
||||||
tf_ssb_timer_t* timer = tf_malloc(sizeof(tf_ssb_timer_t));
|
tf_ssb_timer_t* timer = tf_malloc(sizeof(tf_ssb_timer_t));
|
||||||
*timer = (tf_ssb_timer_t)
|
*timer = (tf_ssb_timer_t)
|
||||||
|
@ -205,7 +205,13 @@ try:
|
|||||||
|
|
||||||
wait.until(expected_conditions.presence_of_element_located((By.ID, 'content')))
|
wait.until(expected_conditions.presence_of_element_located((By.ID, 'content')))
|
||||||
driver.switch_to.frame(wait.until(expected_conditions.presence_of_element_located((By.ID, 'document'))))
|
driver.switch_to.frame(wait.until(expected_conditions.presence_of_element_located((By.ID, 'document'))))
|
||||||
wait.until(expected_conditions.presence_of_element_located((By.TAG_NAME, 'tf-app'))).shadow_root
|
# NoSuchShadowRootException
|
||||||
|
while True:
|
||||||
|
try:
|
||||||
|
tf_app = wait.until(expected_conditions.presence_of_element_located((By.TAG_NAME, 'tf-app'))).shadow_root
|
||||||
|
break
|
||||||
|
except:
|
||||||
|
pass
|
||||||
driver.switch_to.default_content()
|
driver.switch_to.default_content()
|
||||||
|
|
||||||
driver.find_element(By.TAG_NAME, 'tf-navigation').shadow_root.find_element(By.ID, 'logout').click()
|
driver.find_element(By.TAG_NAME, 'tf-navigation').shadow_root.find_element(By.ID, 'logout').click()
|
||||||
|
Loading…
Reference in New Issue
Block a user