Compare commits
2 Commits
c1f3116c9d
...
00fd208a2c
| Author | SHA1 | Date | |
|---|---|---|---|
| 00fd208a2c | |||
| e574d03716 |
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"type": "tildefriends-app",
|
"type": "tildefriends-app",
|
||||||
"emoji": "🦀",
|
"emoji": "🦀",
|
||||||
"previous": "&x37oguxC9LPiOHrvaPmRGa2HNRDNB8QbulsKzdEefnE=.sha256"
|
"previous": "&qtvUpu0Uh5EakeVlPgz9PZhDc9FY0TjWf5sAi1rX8SE=.sha256"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -76,6 +76,9 @@ tfrpc.register(function setHash(hash) {
|
|||||||
core.register('onMessage', async function (id) {
|
core.register('onMessage', async function (id) {
|
||||||
await tfrpc.rpc.notifyNewMessage(id);
|
await tfrpc.rpc.notifyNewMessage(id);
|
||||||
});
|
});
|
||||||
|
core.register('onBlob', async function (id) {
|
||||||
|
await tfrpc.rpc.notifyNewBlob(id);
|
||||||
|
});
|
||||||
tfrpc.register(async function store_blob(blob) {
|
tfrpc.register(async function store_blob(blob) {
|
||||||
if (Array.isArray(blob)) {
|
if (Array.isArray(blob)) {
|
||||||
blob = Uint8Array.from(blob);
|
blob = Uint8Array.from(blob);
|
||||||
|
|||||||
@@ -65,6 +65,17 @@ class TfElement extends LitElement {
|
|||||||
tfrpc.register(async function notifyNewMessage(id) {
|
tfrpc.register(async function notifyNewMessage(id) {
|
||||||
await self.fetch_new_message(id);
|
await self.fetch_new_message(id);
|
||||||
});
|
});
|
||||||
|
tfrpc.register(async function notifyNewBlob(id) {
|
||||||
|
window.dispatchEvent(
|
||||||
|
new CustomEvent('blob-stored', {
|
||||||
|
bubbles: true,
|
||||||
|
composed: true,
|
||||||
|
detail: {
|
||||||
|
id: id,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
);
|
||||||
|
});
|
||||||
tfrpc.register(function set(name, value) {
|
tfrpc.register(function set(name, value) {
|
||||||
if (name === 'broadcasts') {
|
if (name === 'broadcasts') {
|
||||||
self.broadcasts = value;
|
self.broadcasts = value;
|
||||||
|
|||||||
@@ -45,11 +45,14 @@ class TfMessageElement extends LitElement {
|
|||||||
connectedCallback() {
|
connectedCallback() {
|
||||||
super.connectedCallback();
|
super.connectedCallback();
|
||||||
this._click_callback = this.document_click.bind(this);
|
this._click_callback = this.document_click.bind(this);
|
||||||
|
this._blob_stored = this.blob_stored.bind(this);
|
||||||
document.body.addEventListener('mouseup', this._click_callback);
|
document.body.addEventListener('mouseup', this._click_callback);
|
||||||
|
window.addEventListener('blob-stored', this._blob_stored);
|
||||||
}
|
}
|
||||||
|
|
||||||
disconnectedCallback() {
|
disconnectedCallback() {
|
||||||
super.disconnectedCallback();
|
super.disconnectedCallback();
|
||||||
|
window.removeEventListener('blob-stored', this._blob_stored);
|
||||||
document.body.removeEventListener('mouseup', this._click_callback);
|
document.body.removeEventListener('mouseup', this._click_callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -61,6 +64,16 @@ class TfMessageElement extends LitElement {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
blob_stored(event) {
|
||||||
|
let search = `/${event.detail.id}/view`;
|
||||||
|
for (let img of this.shadowRoot.querySelectorAll('img')) {
|
||||||
|
if (img.src.indexOf(search) != -1) {
|
||||||
|
let src = img.src.split('?')[0];
|
||||||
|
img.src = `${src}?${new Date().valueOf()}`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
show_reply() {
|
show_reply() {
|
||||||
let event = new CustomEvent('tf-draft', {
|
let event = new CustomEvent('tf-draft', {
|
||||||
bubbles: true,
|
bubbles: true,
|
||||||
|
|||||||
@@ -693,6 +693,10 @@ ssb.addEventListener('message', function () {
|
|||||||
broadcastEvent('onMessage', [...arguments]);
|
broadcastEvent('onMessage', [...arguments]);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
ssb.addEventListener('blob', function () {
|
||||||
|
broadcastEvent('onBlob', [...arguments]);
|
||||||
|
});
|
||||||
|
|
||||||
ssb.addEventListener('broadcasts', function () {
|
ssb.addEventListener('broadcasts', function () {
|
||||||
broadcastEvent('onBroadcastsChanged', []);
|
broadcastEvent('onBroadcastsChanged', []);
|
||||||
});
|
});
|
||||||
|
|||||||
18
src/main.c
18
src/main.c
@@ -1578,28 +1578,28 @@ static void _shed_privileges()
|
|||||||
if (setrlimit(RLIMIT_FSIZE, &zeroLimit) != 0)
|
if (setrlimit(RLIMIT_FSIZE, &zeroLimit) != 0)
|
||||||
{
|
{
|
||||||
perror("setrlimit(RLIMIT_FSIZE, {0, 0})");
|
perror("setrlimit(RLIMIT_FSIZE, {0, 0})");
|
||||||
exit(-1);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
if (setrlimit(RLIMIT_NOFILE, &zeroLimit) != 0)
|
if (setrlimit(RLIMIT_NOFILE, &zeroLimit) != 0)
|
||||||
{
|
{
|
||||||
perror("setrlimit(RLIMIT_NOFILE, {0, 0})");
|
perror("setrlimit(RLIMIT_NOFILE, {0, 0})");
|
||||||
exit(-1);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
if (setrlimit(RLIMIT_NPROC, &zeroLimit) != 0)
|
if (setrlimit(RLIMIT_NPROC, &zeroLimit) != 0)
|
||||||
{
|
{
|
||||||
perror("setrlimit(RLIMIT_NPROC, {0, 0})");
|
perror("setrlimit(RLIMIT_NPROC, {0, 0})");
|
||||||
exit(-1);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
#if !defined(__MACH__) && !defined(__OpenBSD__)
|
#if !defined(__MACH__) && !defined(__OpenBSD__)
|
||||||
if (setrlimit(RLIMIT_LOCKS, &zeroLimit) != 0)
|
if (setrlimit(RLIMIT_LOCKS, &zeroLimit) != 0)
|
||||||
{
|
{
|
||||||
perror("setrlimit(RLIMIT_LOCKS, {0, 0})");
|
perror("setrlimit(RLIMIT_LOCKS, {0, 0})");
|
||||||
exit(-1);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
if (setrlimit(RLIMIT_MSGQUEUE, &zeroLimit) != 0)
|
if (setrlimit(RLIMIT_MSGQUEUE, &zeroLimit) != 0)
|
||||||
{
|
{
|
||||||
perror("setrlimit(RLIMIT_MSGQUEUE, {0, 0})");
|
perror("setrlimit(RLIMIT_MSGQUEUE, {0, 0})");
|
||||||
exit(-1);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
@@ -1609,12 +1609,12 @@ static void _shed_privileges()
|
|||||||
if (unveil("/dev/null", "r") || unveil(NULL, NULL))
|
if (unveil("/dev/null", "r") || unveil(NULL, NULL))
|
||||||
{
|
{
|
||||||
perror("unveil");
|
perror("unveil");
|
||||||
exit(-1);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
if (pledge("stdio unveil", NULL))
|
if (pledge("stdio unveil", NULL))
|
||||||
{
|
{
|
||||||
perror("pledge");
|
perror("pledge");
|
||||||
exit(-1);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@@ -1831,7 +1831,7 @@ static void _error_handler(int sig)
|
|||||||
const char* stack = tf_util_backtrace_string();
|
const char* stack = tf_util_backtrace_string();
|
||||||
tf_printf("ERROR:\n%s\n", stack);
|
tf_printf("ERROR:\n%s\n", stack);
|
||||||
tf_free((void*)stack);
|
tf_free((void*)stack);
|
||||||
_exit(1);
|
_exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(_WIN32)
|
#if defined(_WIN32)
|
||||||
@@ -1843,7 +1843,7 @@ static LONG WINAPI _win32_exception_handler(EXCEPTION_POINTERS* info)
|
|||||||
const char* stack = tf_util_backtrace_string();
|
const char* stack = tf_util_backtrace_string();
|
||||||
tf_printf("ERROR:\n%s\n", stack);
|
tf_printf("ERROR:\n%s\n", stack);
|
||||||
tf_free((void*)stack);
|
tf_free((void*)stack);
|
||||||
_exit(1);
|
_exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
return EXCEPTION_CONTINUE_SEARCH;
|
return EXCEPTION_CONTINUE_SEARCH;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -976,7 +976,7 @@ static void _tf_ssb_db_blob_store_work(tf_ssb_t* ssb, void* user_data)
|
|||||||
static void _tf_ssb_db_blob_store_after_work(tf_ssb_t* ssb, int status, void* user_data)
|
static void _tf_ssb_db_blob_store_after_work(tf_ssb_t* ssb, int status, void* user_data)
|
||||||
{
|
{
|
||||||
blob_store_work_t* blob_work = user_data;
|
blob_store_work_t* blob_work = user_data;
|
||||||
if (status == 0 && *blob_work->id)
|
if (status == 0 && *blob_work->id && blob_work->is_new)
|
||||||
{
|
{
|
||||||
tf_ssb_notify_blob_stored(ssb, blob_work->id);
|
tf_ssb_notify_blob_stored(ssb, blob_work->id);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1101,7 +1101,7 @@ void tf_task_on_receive_packet(int packetType, const char* begin, size_t length,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
exit(1);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case kSetImports:
|
case kSetImports:
|
||||||
@@ -1699,7 +1699,7 @@ void tf_task_activate(tf_task_t* task)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
tf_printf("Assignment missing '=': %s.\n", assignment);
|
tf_printf("Assignment missing '=': %s.\n", assignment);
|
||||||
exit(1);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
tf_free(copy);
|
tf_free(copy);
|
||||||
|
|||||||
Reference in New Issue
Block a user