Compare commits
12 Commits
a25d08fd76
...
v0.0.31
Author | SHA1 | Date | |
---|---|---|---|
4a4bedfe2b | |||
051291f725 | |||
d2b338095f | |||
899827a8f2 | |||
5fcbe3d6a9 | |||
a0a40e6cb2 | |||
bb1190e3f8 | |||
0a3baed1da | |||
4931c489ed | |||
996f9abaa2 | |||
08c097e176 | |||
daa861a98b |
@ -18,7 +18,7 @@ MAKEFLAGS += --no-builtin-rules
|
|||||||
|
|
||||||
VERSION_CODE := 37
|
VERSION_CODE := 37
|
||||||
VERSION_CODE_IOS := 13
|
VERSION_CODE_IOS := 13
|
||||||
VERSION_NUMBER := 0.0.31-wip
|
VERSION_NUMBER := 0.0.31
|
||||||
VERSION_NAME := This program kills fascists.
|
VERSION_NAME := This program kills fascists.
|
||||||
|
|
||||||
IPHONEOS_VERSION_MIN=14.0
|
IPHONEOS_VERSION_MIN=14.0
|
||||||
|
@ -6,6 +6,8 @@
|
|||||||
<style>
|
<style>
|
||||||
.slide {
|
.slide {
|
||||||
display: none;
|
display: none;
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
}
|
}
|
||||||
.dot {
|
.dot {
|
||||||
width: 1em;
|
width: 1em;
|
||||||
@ -27,14 +29,23 @@
|
|||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
"
|
"
|
||||||
class="w3-flex w3-dark-gray w3-center"
|
class="w3-flex w3-dark-gray w3-center"
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
style="flex: 1 1 auto; overflow: auto; contain: content; padding: 64px"
|
style="
|
||||||
|
flex: 1 1 auto;
|
||||||
|
overflow: auto;
|
||||||
|
contain: content;
|
||||||
|
padding-top: 16px;
|
||||||
|
padding-bottom: 16px;
|
||||||
|
"
|
||||||
>
|
>
|
||||||
|
<div class="slide">
|
||||||
<div
|
<div
|
||||||
class="slide w3-content w3-xlarge w3-blue w3-card-4 w3-panel w3-padding-32 w3-round-xlarge"
|
class="w3-content w3-xlarge w3-card-4 w3-blue w3-panel w3-padding-32 w3-round-xlarge"
|
||||||
|
style="margin: 32px"
|
||||||
>
|
>
|
||||||
<div>
|
<div>
|
||||||
<div>Welcome to</div>
|
<div>Welcome to</div>
|
||||||
@ -44,11 +55,12 @@
|
|||||||
<button class="w3-button w3-yellow proceed">Next</button>
|
<button class="w3-button w3-yellow proceed">Next</button>
|
||||||
</footer>
|
</footer>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
<div class="slide w3-card-4 w3-gray" style="width: 90%">
|
<div class="slide w3-card-4 w3-gray" style="width: 90%">
|
||||||
<header class="w3-container w3-blue w3-xlarge">
|
<header class="w3-container w3-blue w3-xlarge">
|
||||||
<h1>This brief tutorial will introduce:</h1>
|
<h1>This brief tutorial will introduce:</h1>
|
||||||
</header>
|
</header>
|
||||||
<ul class="w3-xlarge w3-left-align">
|
<ul class="w3-large w3-left-align">
|
||||||
<li><b>Secure Scuttlebutt</b>, a decentralized social network.</li>
|
<li><b>Secure Scuttlebutt</b>, a decentralized social network.</li>
|
||||||
<li>
|
<li>
|
||||||
<b>Tilde Friends</b>, the application platform that you are using
|
<b>Tilde Friends</b>, the application platform that you are using
|
||||||
@ -65,27 +77,33 @@
|
|||||||
<div class="slide w3-gray" style="width: 90%">
|
<div class="slide w3-gray" style="width: 90%">
|
||||||
<div class="w3-card-4 w3-xlarge">
|
<div class="w3-card-4 w3-xlarge">
|
||||||
<header class="w3-container w3-blue">
|
<header class="w3-container w3-blue">
|
||||||
<h1>Secure Scuttlebutt in a nutshell:</h1>
|
<h1>💻Secure Scuttlebutt in a Nutshell🦀</h1>
|
||||||
</header>
|
</header>
|
||||||
<div class="w3-container w3-xlarge w3-left-align">
|
<div class="w3-container w3-large w3-left-align">
|
||||||
|
<p>
|
||||||
|
Secure Scuttlebutt is a social network whose technical operation
|
||||||
|
attempts to mirrors human social interaction.
|
||||||
|
</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>
|
<li>
|
||||||
You create your own account and post to your own feed. This is
|
You can create your own account and post to your own feed on
|
||||||
all <b>local</b> and happens <b>offline</b>. You are fully in
|
your own device. This is all <b>local</b> with no external
|
||||||
charge, and you can do most things with no reception whatsoever.
|
communication. This puts you fully in control of your own words
|
||||||
|
and actions.
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
To interact with others, <b>connect over the network</b>, either
|
Before you can interact with others, you need to
|
||||||
directly to your friends (ie, on coffee shop Wi-Fi), to
|
<b>connect over the network</b>, either directly to your friends
|
||||||
<i>rooms</i> (search the web for <i>#ssbroom</i>), or to
|
(i.e., peer-to-peer between your phones on coffee shop Wi-Fi) or
|
||||||
<i>pubs</i>.
|
to 🚪<i>rooms</i> and 🍻<i>pubs</i> (hint: search the web for
|
||||||
|
<i>#ssbroom</i>).
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
To start seeing content, you need to make some connections and
|
Who you choose to <b>follow</b> determines what you see, with
|
||||||
then <b>follow accounts</b>. By default you see your direct
|
most people choosing to see messages from friends and friends of
|
||||||
friends and friends of those friends. If you encounter content
|
those friends. If you encounter content you'd rather not see,
|
||||||
you'd rather not see, <b>block</b> the offending account to
|
<b>block</b> the offending account to improve the experience for
|
||||||
improve the experience for you and your followers.
|
you and your followers.
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
Your feed is an <b>immutable</b> log of your activity. Post with
|
Your feed is an <b>immutable</b> log of your activity. Post with
|
||||||
@ -110,20 +128,28 @@
|
|||||||
<header class="w3-container w3-blue w3-center">
|
<header class="w3-container w3-blue w3-center">
|
||||||
<h1>~😎 Let's Talk Tilde Friends ~😎</h1>
|
<h1>~😎 Let's Talk Tilde Friends ~😎</h1>
|
||||||
</header>
|
</header>
|
||||||
<div class="w3-container w3-xlarge w3-left-align">
|
<div class="w3-container w3-large w3-left-align">
|
||||||
|
<p>
|
||||||
Tilde Friends is an application platform that is an application of
|
Tilde Friends is an application platform that is an application of
|
||||||
its own.
|
its own.
|
||||||
|
</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>
|
<li>
|
||||||
This intro is a Tilde Friends app. You can click <b>edit</b> at
|
This intro is a Tilde Friends app. You can click <b>edit</b> at
|
||||||
the top to look under the hood and make changes if so inclined.
|
the top to look under the hood and make changes.
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
But it's also set up so that you can't just break an instance of
|
It is already possible to make and share new applications using
|
||||||
an app that everybody is using. There are <b>protections</b> in
|
only Tilde Friends and Secure Scuttlebutt without having to set
|
||||||
place like an operating system. The intent is also for it to be
|
up development environments, configure web servers, register
|
||||||
<b>safe</b>
|
domain names, or pay for hosting services.
|
||||||
to run strange apps without worrying about adverse effects.
|
</li>
|
||||||
|
<li>
|
||||||
|
But it's also set up so that you can't just break an app that
|
||||||
|
everybody is using or do malicious things with personal content.
|
||||||
|
There are <b>protections</b> in place like an operating system.
|
||||||
|
The intent is also for it to be <b>safe</b> to run strange apps
|
||||||
|
without worrying about adverse effects.
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
But this is all a big 🚧work in progress🚧 and
|
But this is all a big 🚧work in progress🚧 and
|
||||||
@ -132,9 +158,7 @@
|
|||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<footer class="w3-center w3-xlarge w3-padding">
|
<footer class="w3-center w3-xlarge w3-padding">
|
||||||
<button class="w3-button w3-yellow proceed"
|
<button class="w3-button w3-yellow proceed">Okay</button>
|
||||||
>Okay</button
|
|
||||||
>
|
|
||||||
</footer>
|
</footer>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -143,19 +167,23 @@
|
|||||||
<header class="w3-container w3-blue w3-center">
|
<header class="w3-container w3-blue w3-center">
|
||||||
<h1>🦀Let's Get this Tilde Friends Party Started🎉</h1>
|
<h1>🦀Let's Get this Tilde Friends Party Started🎉</h1>
|
||||||
</header>
|
</header>
|
||||||
<div class="w3-container w3-xlarge w3-left-align">
|
<div class="w3-container w3-large w3-left-align">
|
||||||
|
<p>The button below will take you to the Secure Scuttlebutt app.</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>
|
|
||||||
The button below will take you to the Secure Scuttlebutt app.
|
|
||||||
</li>
|
|
||||||
<li>
|
<li>
|
||||||
Remember:
|
Remember:
|
||||||
<ol>
|
<ol>
|
||||||
<li>You are in charge. This is all on your device.</li>
|
<li>You are in charge. This is all on your device.</li>
|
||||||
<li>Make network connections to replicate with others.</li>
|
|
||||||
<li>Follow more accounts to see more content.</li>
|
|
||||||
<li>
|
<li>
|
||||||
Post respectfully, and block those you'd rather not see.
|
Make network connections to exchange messages with others.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
Follow more accounts to see more content, and block those
|
||||||
|
posting content you'd rather not see.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
Be respectful, and consider the consequences of what you
|
||||||
|
post.
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
This is all under active development. Exercise patience, and
|
This is all under active development. Exercise patience, and
|
||||||
@ -177,7 +205,13 @@
|
|||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
class="w3-text-white w3-xlarge w3-center w3-flex"
|
class="w3-text-white w3-xlarge w3-center w3-flex"
|
||||||
style="width: 100%; flex: 0 1; flex-direction: row; align-items: center"
|
style="
|
||||||
|
width: 100%;
|
||||||
|
flex: 0 1;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
gap: 8px;
|
||||||
|
"
|
||||||
>
|
>
|
||||||
<div class="w3-jumbo" id="left" style="flex: 1 0; cursor: pointer">
|
<div class="w3-jumbo" id="left" style="flex: 1 0; cursor: pointer">
|
||||||
❮
|
❮
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"type": "tildefriends-app",
|
"type": "tildefriends-app",
|
||||||
"emoji": "🦀",
|
"emoji": "🦀",
|
||||||
"previous": "&nd1gmPKrvLdkxW9D4Zct/0hD+iwLWjkF1gxaebFQ5I8=.sha256"
|
"previous": "&0Lxm4IgS3mpvSccP3bg7wNPACtLKMTbie51ea/vJbeg=.sha256"
|
||||||
}
|
}
|
||||||
|
@ -11,6 +11,7 @@ class TfElement extends LitElement {
|
|||||||
broadcasts: {type: Array},
|
broadcasts: {type: Array},
|
||||||
connections: {type: Array},
|
connections: {type: Array},
|
||||||
loading: {type: Boolean},
|
loading: {type: Boolean},
|
||||||
|
loading_about: {type: Number},
|
||||||
loaded: {type: Boolean},
|
loaded: {type: Boolean},
|
||||||
following: {type: Array},
|
following: {type: Array},
|
||||||
users: {type: Object},
|
users: {type: Object},
|
||||||
@ -37,6 +38,7 @@ class TfElement extends LitElement {
|
|||||||
this.following = [];
|
this.following = [];
|
||||||
this.users = {};
|
this.users = {};
|
||||||
this.loaded = false;
|
this.loaded = false;
|
||||||
|
this.loading_about = 0;
|
||||||
this.channels = [];
|
this.channels = [];
|
||||||
this.channels_unread = {};
|
this.channels_unread = {};
|
||||||
this.channels_latest = {};
|
this.channels_latest = {};
|
||||||
@ -151,6 +153,7 @@ class TfElement extends LitElement {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async fetch_about(following, users) {
|
async fetch_about(following, users) {
|
||||||
|
this.loading_about++;
|
||||||
let ids = Object.keys(following).sort();
|
let ids = Object.keys(following).sort();
|
||||||
const k_cache_version = 3;
|
const k_cache_version = 3;
|
||||||
let cache = await tfrpc.rpc.databaseGet('about');
|
let cache = await tfrpc.rpc.databaseGet('about');
|
||||||
@ -230,6 +233,8 @@ class TfElement extends LitElement {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.loading_about--;
|
||||||
|
|
||||||
let new_cache = JSON.stringify(cache);
|
let new_cache = JSON.stringify(cache);
|
||||||
if (new_cache != original_cache) {
|
if (new_cache != original_cache) {
|
||||||
let start_time = new Date();
|
let start_time = new Date();
|
||||||
@ -416,13 +421,10 @@ class TfElement extends LitElement {
|
|||||||
[JSON.stringify(Object.keys(users))]
|
[JSON.stringify(Object.keys(users))]
|
||||||
);
|
);
|
||||||
for (let row of info) {
|
for (let row of info) {
|
||||||
users[row.author] = Object.assign(
|
users[row.author] = Object.assign(users[row.author], {
|
||||||
{
|
|
||||||
seq: row.max_sequence,
|
seq: row.max_sequence,
|
||||||
ts: row.max_ts,
|
ts: row.max_ts,
|
||||||
},
|
});
|
||||||
users[row.author]
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
return users;
|
return users;
|
||||||
}
|
}
|
||||||
@ -545,7 +547,7 @@ class TfElement extends LitElement {
|
|||||||
whoami=${this.whoami}
|
whoami=${this.whoami}
|
||||||
.users=${this.users}
|
.users=${this.users}
|
||||||
hash=${this.hash}
|
hash=${this.hash}
|
||||||
?loading=${this.loading}
|
?loading=${this.loading || this.loading_about != 0}
|
||||||
.channels=${this.channels}
|
.channels=${this.channels}
|
||||||
.channels_latest=${this.channels_latest}
|
.channels_latest=${this.channels_latest}
|
||||||
.channels_unread=${this.channels_unread}
|
.channels_unread=${this.channels_unread}
|
||||||
|
@ -277,7 +277,7 @@ class TfTabConnectionsElement extends LitElement {
|
|||||||
class="w3-button w3-block w3-theme-d1"
|
class="w3-button w3-block w3-theme-d1"
|
||||||
@click=${() => self.toggle_accordian('broadcasts')}
|
@click=${() => self.toggle_accordian('broadcasts')}
|
||||||
>
|
>
|
||||||
Broadcasts (${this.valid_broadcasts().length})
|
Discovery (${this.valid_broadcasts().length})
|
||||||
</h2>
|
</h2>
|
||||||
<ul class="w3-ul w3-border w3-hide" id="broadcasts">
|
<ul class="w3-ul w3-border w3-hide" id="broadcasts">
|
||||||
${this.valid_broadcasts().map((x) => self.render_broadcast(x))}
|
${this.valid_broadcasts().map((x) => self.render_broadcast(x))}
|
||||||
|
172
deps/codemirror_src/package-lock.json
generated
vendored
172
deps/codemirror_src/package-lock.json
generated
vendored
@ -344,9 +344,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-android-arm-eabi": {
|
"node_modules/@rollup/rollup-android-arm-eabi": {
|
||||||
"version": "4.41.0",
|
"version": "4.41.1",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.41.0.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.41.1.tgz",
|
||||||
"integrity": "sha512-KxN+zCjOYHGwCl4UCtSfZ6jrq/qi88JDUtiEFk8LELEHq2Egfc/FgW+jItZiOLRuQfb/3xJSgFuNPC9jzggX+A==",
|
"integrity": "sha512-NELNvyEWZ6R9QMkiytB4/L4zSEaBC03KIXEghptLGLZWJ6VPrL63ooZQCOnlx36aQPGhzuOMwDerC1Eb2VmrLw==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm"
|
"arm"
|
||||||
],
|
],
|
||||||
@ -356,9 +356,9 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-android-arm64": {
|
"node_modules/@rollup/rollup-android-arm64": {
|
||||||
"version": "4.41.0",
|
"version": "4.41.1",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.41.0.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.41.1.tgz",
|
||||||
"integrity": "sha512-yDvqx3lWlcugozax3DItKJI5j05B0d4Kvnjx+5mwiUpWramVvmAByYigMplaoAQ3pvdprGCTCE03eduqE/8mPQ==",
|
"integrity": "sha512-DXdQe1BJ6TK47ukAoZLehRHhfKnKg9BjnQYUu9gzhI8Mwa1d2fzxA1aw2JixHVl403bwp1+/o/NhhHtxWJBgEA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@ -368,9 +368,9 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-darwin-arm64": {
|
"node_modules/@rollup/rollup-darwin-arm64": {
|
||||||
"version": "4.41.0",
|
"version": "4.41.1",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.41.0.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.41.1.tgz",
|
||||||
"integrity": "sha512-2KOU574vD3gzcPSjxO0eyR5iWlnxxtmW1F5CkNOHmMlueKNCQkxR6+ekgWyVnz6zaZihpUNkGxjsYrkTJKhkaw==",
|
"integrity": "sha512-5afxvwszzdulsU2w8JKWwY8/sJOLPzf0e1bFuvcW5h9zsEg+RQAojdW0ux2zyYAz7R8HvvzKCjLNJhVq965U7w==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@ -380,9 +380,9 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-darwin-x64": {
|
"node_modules/@rollup/rollup-darwin-x64": {
|
||||||
"version": "4.41.0",
|
"version": "4.41.1",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.41.0.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.41.1.tgz",
|
||||||
"integrity": "sha512-gE5ACNSxHcEZyP2BA9TuTakfZvULEW4YAOtxl/A/YDbIir/wPKukde0BNPlnBiP88ecaN4BJI2TtAd+HKuZPQQ==",
|
"integrity": "sha512-egpJACny8QOdHNNMZKf8xY0Is6gIMz+tuqXlusxquWu3F833DcMwmGM7WlvCO9sB3OsPjdC4U0wHw5FabzCGZg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@ -392,9 +392,9 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-freebsd-arm64": {
|
"node_modules/@rollup/rollup-freebsd-arm64": {
|
||||||
"version": "4.41.0",
|
"version": "4.41.1",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.41.0.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.41.1.tgz",
|
||||||
"integrity": "sha512-GSxU6r5HnWij7FoSo7cZg3l5GPg4HFLkzsFFh0N/b16q5buW1NAWuCJ+HMtIdUEi6XF0qH+hN0TEd78laRp7Dg==",
|
"integrity": "sha512-DBVMZH5vbjgRk3r0OzgjS38z+atlupJ7xfKIDJdZZL6sM6wjfDNo64aowcLPKIx7LMQi8vybB56uh1Ftck/Atg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@ -404,9 +404,9 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-freebsd-x64": {
|
"node_modules/@rollup/rollup-freebsd-x64": {
|
||||||
"version": "4.41.0",
|
"version": "4.41.1",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.41.0.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.41.1.tgz",
|
||||||
"integrity": "sha512-KGiGKGDg8qLRyOWmk6IeiHJzsN/OYxO6nSbT0Vj4MwjS2XQy/5emsmtoqLAabqrohbgLWJ5GV3s/ljdrIr8Qjg==",
|
"integrity": "sha512-3FkydeohozEskBxNWEIbPfOE0aqQgB6ttTkJ159uWOFn42VLyfAiyD9UK5mhu+ItWzft60DycIN1Xdgiy8o/SA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@ -416,9 +416,9 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-linux-arm-gnueabihf": {
|
"node_modules/@rollup/rollup-linux-arm-gnueabihf": {
|
||||||
"version": "4.41.0",
|
"version": "4.41.1",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.41.0.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.41.1.tgz",
|
||||||
"integrity": "sha512-46OzWeqEVQyX3N2/QdiU/CMXYDH/lSHpgfBkuhl3igpZiaB3ZIfSjKuOnybFVBQzjsLwkus2mjaESy8H41SzvA==",
|
"integrity": "sha512-wC53ZNDgt0pqx5xCAgNunkTzFE8GTgdZ9EwYGVcg+jEjJdZGtq9xPjDnFgfFozQI/Xm1mh+D9YlYtl+ueswNEg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm"
|
"arm"
|
||||||
],
|
],
|
||||||
@ -428,9 +428,9 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-linux-arm-musleabihf": {
|
"node_modules/@rollup/rollup-linux-arm-musleabihf": {
|
||||||
"version": "4.41.0",
|
"version": "4.41.1",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.41.0.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.41.1.tgz",
|
||||||
"integrity": "sha512-lfgW3KtQP4YauqdPpcUZHPcqQXmTmH4nYU0cplNeW583CMkAGjtImw4PKli09NFi2iQgChk4e9erkwlfYem6Lg==",
|
"integrity": "sha512-jwKCca1gbZkZLhLRtsrka5N8sFAaxrGz/7wRJ8Wwvq3jug7toO21vWlViihG85ei7uJTpzbXZRcORotE+xyrLA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm"
|
"arm"
|
||||||
],
|
],
|
||||||
@ -440,9 +440,9 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-linux-arm64-gnu": {
|
"node_modules/@rollup/rollup-linux-arm64-gnu": {
|
||||||
"version": "4.41.0",
|
"version": "4.41.1",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.41.0.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.41.1.tgz",
|
||||||
"integrity": "sha512-nn8mEyzMbdEJzT7cwxgObuwviMx6kPRxzYiOl6o/o+ChQq23gfdlZcUNnt89lPhhz3BYsZ72rp0rxNqBSfqlqw==",
|
"integrity": "sha512-g0UBcNknsmmNQ8V2d/zD2P7WWfJKU0F1nu0k5pW4rvdb+BIqMm8ToluW/eeRmxCared5dD76lS04uL4UaNgpNA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@ -452,9 +452,9 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-linux-arm64-musl": {
|
"node_modules/@rollup/rollup-linux-arm64-musl": {
|
||||||
"version": "4.41.0",
|
"version": "4.41.1",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.41.0.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.41.1.tgz",
|
||||||
"integrity": "sha512-l+QK99je2zUKGd31Gh+45c4pGDAqZSuWQiuRFCdHYC2CSiO47qUWsCcenrI6p22hvHZrDje9QjwSMAFL3iwXwQ==",
|
"integrity": "sha512-XZpeGB5TKEZWzIrj7sXr+BEaSgo/ma/kCgrZgL0oo5qdB1JlTzIYQKel/RmhT6vMAvOdM2teYlAaOGJpJ9lahg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@ -464,9 +464,9 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-linux-loongarch64-gnu": {
|
"node_modules/@rollup/rollup-linux-loongarch64-gnu": {
|
||||||
"version": "4.41.0",
|
"version": "4.41.1",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.41.0.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.41.1.tgz",
|
||||||
"integrity": "sha512-WbnJaxPv1gPIm6S8O/Wg+wfE/OzGSXlBMbOe4ie+zMyykMOeqmgD1BhPxZQuDqwUN+0T/xOFtL2RUWBspnZj3w==",
|
"integrity": "sha512-bkCfDJ4qzWfFRCNt5RVV4DOw6KEgFTUZi2r2RuYhGWC8WhCA8lCAJhDeAmrM/fdiAH54m0mA0Vk2FGRPyzI+tw==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"loong64"
|
"loong64"
|
||||||
],
|
],
|
||||||
@ -476,9 +476,9 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
|
"node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
|
||||||
"version": "4.41.0",
|
"version": "4.41.1",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.41.0.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.41.1.tgz",
|
||||||
"integrity": "sha512-eRDWR5t67/b2g8Q/S8XPi0YdbKcCs4WQ8vklNnUYLaSWF+Cbv2axZsp4jni6/j7eKvMLYCYdcsv8dcU+a6QNFg==",
|
"integrity": "sha512-3mr3Xm+gvMX+/8EKogIZSIEF0WUu0HL9di+YWlJpO8CQBnoLAEL/roTCxuLncEdgcfJcvA4UMOf+2dnjl4Ut1A==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"ppc64"
|
"ppc64"
|
||||||
],
|
],
|
||||||
@ -488,9 +488,9 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-linux-riscv64-gnu": {
|
"node_modules/@rollup/rollup-linux-riscv64-gnu": {
|
||||||
"version": "4.41.0",
|
"version": "4.41.1",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.41.0.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.41.1.tgz",
|
||||||
"integrity": "sha512-TWrZb6GF5jsEKG7T1IHwlLMDRy2f3DPqYldmIhnA2DVqvvhY2Ai184vZGgahRrg8k9UBWoSlHv+suRfTN7Ua4A==",
|
"integrity": "sha512-3rwCIh6MQ1LGrvKJitQjZFuQnT2wxfU+ivhNBzmxXTXPllewOF7JR1s2vMX/tWtUYFgphygxjqMl76q4aMotGw==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"riscv64"
|
"riscv64"
|
||||||
],
|
],
|
||||||
@ -500,9 +500,9 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-linux-riscv64-musl": {
|
"node_modules/@rollup/rollup-linux-riscv64-musl": {
|
||||||
"version": "4.41.0",
|
"version": "4.41.1",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.41.0.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.41.1.tgz",
|
||||||
"integrity": "sha512-ieQljaZKuJpmWvd8gW87ZmSFwid6AxMDk5bhONJ57U8zT77zpZ/TPKkU9HpnnFrM4zsgr4kiGuzbIbZTGi7u9A==",
|
"integrity": "sha512-LdIUOb3gvfmpkgFZuccNa2uYiqtgZAz3PTzjuM5bH3nvuy9ty6RGc/Q0+HDFrHrizJGVpjnTZ1yS5TNNjFlklw==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"riscv64"
|
"riscv64"
|
||||||
],
|
],
|
||||||
@ -512,9 +512,9 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-linux-s390x-gnu": {
|
"node_modules/@rollup/rollup-linux-s390x-gnu": {
|
||||||
"version": "4.41.0",
|
"version": "4.41.1",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.41.0.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.41.1.tgz",
|
||||||
"integrity": "sha512-/L3pW48SxrWAlVsKCN0dGLB2bi8Nv8pr5S5ocSM+S0XCn5RCVCXqi8GVtHFsOBBCSeR+u9brV2zno5+mg3S4Aw==",
|
"integrity": "sha512-oIE6M8WC9ma6xYqjvPhzZYk6NbobIURvP/lEbh7FWplcMO6gn7MM2yHKA1eC/GvYwzNKK/1LYgqzdkZ8YFxR8g==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"s390x"
|
"s390x"
|
||||||
],
|
],
|
||||||
@ -524,9 +524,9 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-linux-x64-gnu": {
|
"node_modules/@rollup/rollup-linux-x64-gnu": {
|
||||||
"version": "4.41.0",
|
"version": "4.41.1",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.41.0.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.41.1.tgz",
|
||||||
"integrity": "sha512-XMLeKjyH8NsEDCRptf6LO8lJk23o9wvB+dJwcXMaH6ZQbbkHu2dbGIUindbMtRN6ux1xKi16iXWu6q9mu7gDhQ==",
|
"integrity": "sha512-cWBOvayNvA+SyeQMp79BHPK8ws6sHSsYnK5zDcsC3Hsxr1dgTABKjMnMslPq1DvZIp6uO7kIWhiGwaTdR4Og9A==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@ -536,9 +536,9 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-linux-x64-musl": {
|
"node_modules/@rollup/rollup-linux-x64-musl": {
|
||||||
"version": "4.41.0",
|
"version": "4.41.1",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.41.0.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.41.1.tgz",
|
||||||
"integrity": "sha512-m/P7LycHZTvSQeXhFmgmdqEiTqSV80zn6xHaQ1JSqwCtD1YGtwEK515Qmy9DcB2HK4dOUVypQxvhVSy06cJPEg==",
|
"integrity": "sha512-y5CbN44M+pUCdGDlZFzGGBSKCA4A/J2ZH4edTYSSxFg7ce1Xt3GtydbVKWLlzL+INfFIZAEg1ZV6hh9+QQf9YQ==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@ -548,9 +548,9 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-win32-arm64-msvc": {
|
"node_modules/@rollup/rollup-win32-arm64-msvc": {
|
||||||
"version": "4.41.0",
|
"version": "4.41.1",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.41.0.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.41.1.tgz",
|
||||||
"integrity": "sha512-4yodtcOrFHpbomJGVEqZ8fzD4kfBeCbpsUy5Pqk4RluXOdsWdjLnjhiKy2w3qzcASWd04fp52Xz7JKarVJ5BTg==",
|
"integrity": "sha512-lZkCxIrjlJlMt1dLO/FbpZbzt6J/A8p4DnqzSa4PWqPEUUUnzXLeki/iyPLfV0BmHItlYgHUqJe+3KiyydmiNQ==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@ -560,9 +560,9 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-win32-ia32-msvc": {
|
"node_modules/@rollup/rollup-win32-ia32-msvc": {
|
||||||
"version": "4.41.0",
|
"version": "4.41.1",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.41.0.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.41.1.tgz",
|
||||||
"integrity": "sha512-tmazCrAsKzdkXssEc65zIE1oC6xPHwfy9d5Ta25SRCDOZS+I6RypVVShWALNuU9bxIfGA0aqrmzlzoM5wO5SPQ==",
|
"integrity": "sha512-+psFT9+pIh2iuGsxFYYa/LhS5MFKmuivRsx9iPJWNSGbh2XVEjk90fmpUEjCnILPEPJnikAU6SFDiEUyOv90Pg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"ia32"
|
"ia32"
|
||||||
],
|
],
|
||||||
@ -572,9 +572,9 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-win32-x64-msvc": {
|
"node_modules/@rollup/rollup-win32-x64-msvc": {
|
||||||
"version": "4.41.0",
|
"version": "4.41.1",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.41.0.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.41.1.tgz",
|
||||||
"integrity": "sha512-h1J+Yzjo/X+0EAvR2kIXJDuTuyT7drc+t2ALY0nIcGPbTatNOf0VWdhEA2Z4AAjv6X1NJV7SYo5oCTYRJhSlVA==",
|
"integrity": "sha512-Wq2zpapRYLfi4aKxf2Xff0tN+7slj2d4R87WEzqw7ZLsVvO5zwYCIuEGSZYiK41+GlwUo1HiR+GdkLEJnCKTCw==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@ -745,9 +745,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/rollup": {
|
"node_modules/rollup": {
|
||||||
"version": "4.41.0",
|
"version": "4.41.1",
|
||||||
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.41.0.tgz",
|
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.41.1.tgz",
|
||||||
"integrity": "sha512-HqMFpUbWlf/tvcxBFNKnJyzc7Lk+XO3FGc3pbNBLqEbOz0gPLRgcrlS3UF4MfUrVlstOaP/q0kM6GVvi+LrLRg==",
|
"integrity": "sha512-cPmwD3FnFv8rKMBc1MxWCwVQFxwf1JEmSX3iQXrRVVG15zerAIXRjMFVWnd5Q5QvgKF7Aj+5ykXFhUl+QGnyOw==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/estree": "1.0.7"
|
"@types/estree": "1.0.7"
|
||||||
},
|
},
|
||||||
@ -759,26 +759,26 @@
|
|||||||
"npm": ">=8.0.0"
|
"npm": ">=8.0.0"
|
||||||
},
|
},
|
||||||
"optionalDependencies": {
|
"optionalDependencies": {
|
||||||
"@rollup/rollup-android-arm-eabi": "4.41.0",
|
"@rollup/rollup-android-arm-eabi": "4.41.1",
|
||||||
"@rollup/rollup-android-arm64": "4.41.0",
|
"@rollup/rollup-android-arm64": "4.41.1",
|
||||||
"@rollup/rollup-darwin-arm64": "4.41.0",
|
"@rollup/rollup-darwin-arm64": "4.41.1",
|
||||||
"@rollup/rollup-darwin-x64": "4.41.0",
|
"@rollup/rollup-darwin-x64": "4.41.1",
|
||||||
"@rollup/rollup-freebsd-arm64": "4.41.0",
|
"@rollup/rollup-freebsd-arm64": "4.41.1",
|
||||||
"@rollup/rollup-freebsd-x64": "4.41.0",
|
"@rollup/rollup-freebsd-x64": "4.41.1",
|
||||||
"@rollup/rollup-linux-arm-gnueabihf": "4.41.0",
|
"@rollup/rollup-linux-arm-gnueabihf": "4.41.1",
|
||||||
"@rollup/rollup-linux-arm-musleabihf": "4.41.0",
|
"@rollup/rollup-linux-arm-musleabihf": "4.41.1",
|
||||||
"@rollup/rollup-linux-arm64-gnu": "4.41.0",
|
"@rollup/rollup-linux-arm64-gnu": "4.41.1",
|
||||||
"@rollup/rollup-linux-arm64-musl": "4.41.0",
|
"@rollup/rollup-linux-arm64-musl": "4.41.1",
|
||||||
"@rollup/rollup-linux-loongarch64-gnu": "4.41.0",
|
"@rollup/rollup-linux-loongarch64-gnu": "4.41.1",
|
||||||
"@rollup/rollup-linux-powerpc64le-gnu": "4.41.0",
|
"@rollup/rollup-linux-powerpc64le-gnu": "4.41.1",
|
||||||
"@rollup/rollup-linux-riscv64-gnu": "4.41.0",
|
"@rollup/rollup-linux-riscv64-gnu": "4.41.1",
|
||||||
"@rollup/rollup-linux-riscv64-musl": "4.41.0",
|
"@rollup/rollup-linux-riscv64-musl": "4.41.1",
|
||||||
"@rollup/rollup-linux-s390x-gnu": "4.41.0",
|
"@rollup/rollup-linux-s390x-gnu": "4.41.1",
|
||||||
"@rollup/rollup-linux-x64-gnu": "4.41.0",
|
"@rollup/rollup-linux-x64-gnu": "4.41.1",
|
||||||
"@rollup/rollup-linux-x64-musl": "4.41.0",
|
"@rollup/rollup-linux-x64-musl": "4.41.1",
|
||||||
"@rollup/rollup-win32-arm64-msvc": "4.41.0",
|
"@rollup/rollup-win32-arm64-msvc": "4.41.1",
|
||||||
"@rollup/rollup-win32-ia32-msvc": "4.41.0",
|
"@rollup/rollup-win32-ia32-msvc": "4.41.1",
|
||||||
"@rollup/rollup-win32-x64-msvc": "4.41.0",
|
"@rollup/rollup-win32-x64-msvc": "4.41.1",
|
||||||
"fsevents": "~2.3.2"
|
"fsevents": "~2.3.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -853,9 +853,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/terser": {
|
"node_modules/terser": {
|
||||||
"version": "5.39.2",
|
"version": "5.40.0",
|
||||||
"resolved": "https://registry.npmjs.org/terser/-/terser-5.39.2.tgz",
|
"resolved": "https://registry.npmjs.org/terser/-/terser-5.40.0.tgz",
|
||||||
"integrity": "sha512-yEPUmWve+VA78bI71BW70Dh0TuV4HHd+I5SHOAfS1+QBOmvmCiiffgjR8ryyEd3KIfvPGFqoADt8LdQ6XpXIvg==",
|
"integrity": "sha512-cfeKl/jjwSR5ar7d0FGmave9hFGJT8obyo0z+CrQOylLDbk7X81nPU6vq9VORa5jU30SkDnT2FXjLbR8HLP+xA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@jridgewell/source-map": "^0.3.3",
|
"@jridgewell/source-map": "^0.3.3",
|
||||||
|
13
metadata/en-US/changelogs/37.txt
Normal file
13
metadata/en-US/changelogs/37.txt
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
* Faster loads.
|
||||||
|
* Minor UI tweaks.
|
||||||
|
* Added an intro app as part of the initial flow for first-time users.
|
||||||
|
* Fixed more shutdown issues.
|
||||||
|
* Fixed a longstanding potential database issue.
|
||||||
|
* Added a blob export command.
|
||||||
|
* Refresh blob wants for blobs that are requested over the web.
|
||||||
|
* Updates:
|
||||||
|
* CodeMirror
|
||||||
|
* QuickJS 2025-04-26
|
||||||
|
* libuv 1.51.0
|
||||||
|
* sqlite 3.49.2
|
||||||
|
* w3.css 5.02
|
@ -2,7 +2,7 @@
|
|||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
package="com.unprompted.tildefriends"
|
package="com.unprompted.tildefriends"
|
||||||
android:versionCode="37"
|
android:versionCode="37"
|
||||||
android:versionName="0.0.31-wip">
|
android:versionName="0.0.31">
|
||||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
|
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
|
||||||
<uses-permission android:name="android.permission.INTERNET"/>
|
<uses-permission android:name="android.permission.INTERNET"/>
|
||||||
<application
|
<application
|
||||||
|
@ -1116,6 +1116,7 @@ typedef struct _view_t
|
|||||||
void* data;
|
void* data;
|
||||||
size_t size;
|
size_t size;
|
||||||
char etag[256];
|
char etag[256];
|
||||||
|
char notify_want_blob_id[k_blob_id_len];
|
||||||
bool not_modified;
|
bool not_modified;
|
||||||
} view_t;
|
} view_t;
|
||||||
|
|
||||||
@ -1175,6 +1176,7 @@ static void _httpd_endpoint_view_work(tf_ssb_t* ssb, void* user_data)
|
|||||||
sqlite3* db = tf_ssb_acquire_db_writer(ssb);
|
sqlite3* db = tf_ssb_acquire_db_writer(ssb);
|
||||||
tf_ssb_db_add_blob_wants(db, blob_id);
|
tf_ssb_db_add_blob_wants(db, blob_id);
|
||||||
tf_ssb_release_db_writer(ssb, db);
|
tf_ssb_release_db_writer(ssb, db);
|
||||||
|
snprintf(view->notify_want_blob_id, sizeof(view->notify_want_blob_id), "%s", blob_id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1218,6 +1220,12 @@ static void _httpd_endpoint_view_after_work(tf_ssb_t* ssb, int status, void* use
|
|||||||
const char* k_payload = tf_http_status_text(404);
|
const char* k_payload = tf_http_status_text(404);
|
||||||
tf_http_respond(view->request, 404, NULL, 0, k_payload, strlen(k_payload));
|
tf_http_respond(view->request, 404, NULL, 0, k_payload, strlen(k_payload));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (*view->notify_want_blob_id)
|
||||||
|
{
|
||||||
|
tf_ssb_notify_blob_want_added(ssb, view->notify_want_blob_id);
|
||||||
|
}
|
||||||
|
|
||||||
tf_free(view->form_data);
|
tf_free(view->form_data);
|
||||||
tf_http_request_unref(view->request);
|
tf_http_request_unref(view->request);
|
||||||
tf_free(view);
|
tf_free(view);
|
||||||
|
109
src/main.c
109
src/main.c
@ -148,6 +148,7 @@ static int _tf_command_private(const char* file, int argc, char* argv[]);
|
|||||||
static int _tf_command_run(const char* file, int argc, char* argv[]);
|
static int _tf_command_run(const char* file, int argc, char* argv[]);
|
||||||
static int _tf_command_sandbox(const char* file, int argc, char* argv[]);
|
static int _tf_command_sandbox(const char* file, int argc, char* argv[]);
|
||||||
static int _tf_command_has_blob(const char* file, int argc, char* argv[]);
|
static int _tf_command_has_blob(const char* file, int argc, char* argv[]);
|
||||||
|
static int _tf_command_get_blob(const char* file, int argc, char* argv[]);
|
||||||
static int _tf_command_store_blob(const char* file, int argc, char* argv[]);
|
static int _tf_command_store_blob(const char* file, int argc, char* argv[]);
|
||||||
static int _tf_command_create_invite(const char* file, int argc, char* argv[]);
|
static int _tf_command_create_invite(const char* file, int argc, char* argv[]);
|
||||||
static int _tf_command_get_sequence(const char* file, int argc, char* argv[]);
|
static int _tf_command_get_sequence(const char* file, int argc, char* argv[]);
|
||||||
@ -178,6 +179,7 @@ const command_t k_commands[] = {
|
|||||||
{ "get_profile", _tf_command_get_profile, "Get profile information for the given identity." },
|
{ "get_profile", _tf_command_get_profile, "Get profile information for the given identity." },
|
||||||
{ "get_contacts", _tf_command_get_contacts, "Get information about followed, blocked, and friend identities." },
|
{ "get_contacts", _tf_command_get_contacts, "Get information about followed, blocked, and friend identities." },
|
||||||
{ "has_blob", _tf_command_has_blob, "Check whether a blob is in the blob store." },
|
{ "has_blob", _tf_command_has_blob, "Check whether a blob is in the blob store." },
|
||||||
|
{ "get_blob", _tf_command_get_blob, "Read a file from the blob store." },
|
||||||
{ "store_blob", _tf_command_store_blob, "Write a file to the blob store." },
|
{ "store_blob", _tf_command_store_blob, "Write a file to the blob store." },
|
||||||
{ "verify", _tf_command_verify, "Verify a feed." },
|
{ "verify", _tf_command_verify, "Verify a feed." },
|
||||||
{ "test", _tf_command_test, "Test SSB." },
|
{ "test", _tf_command_test, "Test SSB." },
|
||||||
@ -779,6 +781,113 @@ static int _tf_command_store_blob(const char* file, int argc, char* argv[])
|
|||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int _tf_command_get_blob(const char* file, int argc, char* argv[])
|
||||||
|
{
|
||||||
|
const char* default_db_path = _get_db_path();
|
||||||
|
const char* db_path = default_db_path;
|
||||||
|
const char* output = NULL;
|
||||||
|
const char* blob_id = NULL;
|
||||||
|
bool show_usage = false;
|
||||||
|
|
||||||
|
while (!show_usage)
|
||||||
|
{
|
||||||
|
static const struct option k_options[] = {
|
||||||
|
{ "db-path", required_argument, NULL, 'd' },
|
||||||
|
{ "blob", required_argument, NULL, 'b' },
|
||||||
|
{ "output", required_argument, NULL, 'o' },
|
||||||
|
{ "help", no_argument, NULL, 'h' },
|
||||||
|
{ 0 },
|
||||||
|
};
|
||||||
|
int c = getopt_long(argc, argv, "d:b:o:h", k_options, NULL);
|
||||||
|
if (c == -1)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (c)
|
||||||
|
{
|
||||||
|
case '?':
|
||||||
|
case 'h':
|
||||||
|
default:
|
||||||
|
show_usage = true;
|
||||||
|
break;
|
||||||
|
case 'd':
|
||||||
|
db_path = optarg;
|
||||||
|
break;
|
||||||
|
case 'b':
|
||||||
|
blob_id = optarg;
|
||||||
|
break;
|
||||||
|
case 'o':
|
||||||
|
output = optarg;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (show_usage || !blob_id)
|
||||||
|
{
|
||||||
|
tf_printf("\n%s store_blob [options]\n\n", file);
|
||||||
|
tf_printf("options:\n");
|
||||||
|
tf_printf(" -d, --db-path db_path SQLite database path (default: %s).\n", default_db_path);
|
||||||
|
tf_printf(" -b, --blob blob_id Blob identifier to retrieve.\n");
|
||||||
|
tf_printf(" -o, --output file_path Location to write the retrieved blob.\n");
|
||||||
|
tf_printf(" -h, --help Show this usage information.\n");
|
||||||
|
tf_free((void*)default_db_path);
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t* blob = NULL;
|
||||||
|
size_t size = 0;
|
||||||
|
|
||||||
|
_create_directories_for_file(db_path, 0700);
|
||||||
|
tf_ssb_t* ssb = tf_ssb_create(NULL, NULL, db_path, NULL);
|
||||||
|
tf_ssb_set_quiet(ssb, true);
|
||||||
|
bool fetched = tf_ssb_db_blob_get(ssb, blob_id, &blob, &size);
|
||||||
|
tf_ssb_destroy(ssb);
|
||||||
|
|
||||||
|
if (!fetched)
|
||||||
|
{
|
||||||
|
tf_printf("Failed to fetch blob: %s.\n", blob_id);
|
||||||
|
tf_free((void*)default_db_path);
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (output)
|
||||||
|
{
|
||||||
|
FILE* blob_file = fopen(output, "wb");
|
||||||
|
if (!blob_file)
|
||||||
|
{
|
||||||
|
tf_printf("Failed to open %s: %s.\n", output, strerror(errno));
|
||||||
|
tf_free((void*)default_db_path);
|
||||||
|
tf_free(blob);
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fwrite(blob, 1, size, blob_file) != size)
|
||||||
|
{
|
||||||
|
tf_printf("Failed to write %s: %s\n", output, strerror(errno));
|
||||||
|
tf_free(blob);
|
||||||
|
tf_free((void*)default_db_path);
|
||||||
|
fclose(blob_file);
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose(blob_file);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (fwrite(blob, 1, size, stdout) != size)
|
||||||
|
{
|
||||||
|
tf_free(blob);
|
||||||
|
tf_free((void*)default_db_path);
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tf_free(blob);
|
||||||
|
tf_free((void*)default_db_path);
|
||||||
|
return EXIT_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
static int _tf_command_has_blob(const char* file, int argc, char* argv[])
|
static int _tf_command_has_blob(const char* file, int argc, char* argv[])
|
||||||
{
|
{
|
||||||
const char* default_db_path = _get_db_path();
|
const char* default_db_path = _get_db_path();
|
||||||
|
@ -1,2 +1,2 @@
|
|||||||
#define VERSION_NUMBER "0.0.31-wip"
|
#define VERSION_NUMBER "0.0.31"
|
||||||
#define VERSION_NAME "This program kills fascists."
|
#define VERSION_NAME "This program kills fascists."
|
||||||
|
@ -80,6 +80,15 @@ try:
|
|||||||
select(driver, ['tf-auth', 'shadow_root', '#loginButton'], ('click',))
|
select(driver, ['tf-auth', 'shadow_root', '#loginButton'], ('click',))
|
||||||
select(driver, ['#document', 'frame', '=identity'])
|
select(driver, ['#document', 'frame', '=identity'])
|
||||||
|
|
||||||
|
driver.get('http://localhost:8888/')
|
||||||
|
select(driver, ['#document', 'frame', '//button[text()="Next"]'], ('click',))
|
||||||
|
select(driver, ['#document', 'frame', '//button[text()="Onward"]'], ('click',))
|
||||||
|
select(driver, ['#document', 'frame', '//button[text()="Got It"]'], ('click',))
|
||||||
|
select(driver, ['#document', 'frame', '//button[text()="Okay"]'], ('click',))
|
||||||
|
select(driver, ['#document', 'frame', '//button[text()="Let\'s Go!"]'], ('click',))
|
||||||
|
select(driver, ['//button[text()="✅ Allow"]'], ('click',))
|
||||||
|
select(driver, ['#document', 'frame', 'tf-app', 'shadow_root', '#tf-tab-news', 'shadow_root', '#tf-compose', 'shadow_root', '#edit'], ('send_keys', 'We made it to the ssb app.'))
|
||||||
|
|
||||||
driver.get('http://localhost:8888/~core/admin/')
|
driver.get('http://localhost:8888/~core/admin/')
|
||||||
select(driver, ['#document', 'frame', '#gs_room_name'], ('send_keys', 'test room'))
|
select(driver, ['#document', 'frame', '#gs_room_name'], ('send_keys', 'test room'))
|
||||||
select(driver, ['#document', 'frame', '//*[@id="gs_room_name"]/following-sibling::button'], ('click',))
|
select(driver, ['#document', 'frame', '//*[@id="gs_room_name"]/following-sibling::button'], ('click',))
|
||||||
|
Reference in New Issue
Block a user