Merge branch 'main' into internal-15_06_2025
34
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
@@ -1,24 +1,21 @@
|
||||
name: Report a bug
|
||||
description: Let us know if something's not working the way you expected.
|
||||
description: For regressions only (things that were working earlier)
|
||||
labels: []
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Before opening a new bug report, please ensure
|
||||
1. you are on the latest version (it might've already been fixed),
|
||||
2. you've searched for existing issues (please add your observations as a comment there instead of creating a duplicate).
|
||||
|
||||
If you are self hosting, please create a community [Q&A](https://github.com/ente-io/ente/discussions/categories/q-a) instead.
|
||||
Before opening a new issue, **please** ensure
|
||||
1. You are on the latest version,
|
||||
2. You've searched for existing issues,
|
||||
3. It was working earlier (otherwise use [this](https://github.com/ente-io/ente/discussions/categories/enhancements))
|
||||
4. It is not about self hosting (otherwise use [this](https://github.com/ente-io/ente/discussions/categories/q-a))
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Description
|
||||
description: >
|
||||
Please describe the bug. If possible, also include the steps to
|
||||
reproduce the behaviour, and the expected behaviour (sometimes
|
||||
bugs are just expectation mismatches, in which case this would be
|
||||
a good fit for
|
||||
[enhancements](https://github.com/ente-io/ente/discussions/categories/enhancements)).
|
||||
Describe the bug and steps to reproduce the behaviour, and how it
|
||||
differs from the previously working behaviour.
|
||||
validations:
|
||||
required: true
|
||||
- type: input
|
||||
@@ -30,15 +27,12 @@ body:
|
||||
attributes:
|
||||
label: Last working version
|
||||
description: >
|
||||
The version where the feature was last known to be working. It is
|
||||
fine if you don't remember the exact version (mention roughly
|
||||
then), but if there just isn't a last known working version, then
|
||||
it is likely that what is being reported is not an issue
|
||||
(regression) but an enhancement. The difference between the two
|
||||
categories is not just semantic - **enhancements use GitHub
|
||||
discussions and so can be [upvoted by the
|
||||
community](https://github.com/ente-io/ente/discussions/categories/enhancements)**
|
||||
(while issues cannot be).
|
||||
The version where things were last known to be working. It is fine
|
||||
if you don't remember the exact version (mention roughly then),
|
||||
but **if there just isn't a last working version, then please file
|
||||
it as an
|
||||
[enhancement](https://github.com/ente-io/ente/discussions/categories/enhancements))**
|
||||
(where the community upvotes can be used to help prioritize).
|
||||
placeholder: e.g. v1.2.3
|
||||
- type: dropdown
|
||||
attributes:
|
||||
|
||||
32
.github/workflows/docs-lint.yml
vendored
Normal file
@@ -0,0 +1,32 @@
|
||||
name: "Lint (docs)"
|
||||
|
||||
on:
|
||||
# Run on every pull request (open or push to it) that changes docs/
|
||||
pull_request:
|
||||
paths:
|
||||
- "docs/**"
|
||||
- ".github/workflows/docs-lint.yml"
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
lint:
|
||||
runs-on: ubuntu-latest
|
||||
defaults:
|
||||
run:
|
||||
working-directory: docs
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup node and enable yarn caching
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 22
|
||||
cache: "yarn"
|
||||
cache-dependency-path: "web/yarn.lock"
|
||||
|
||||
- run: yarn install
|
||||
|
||||
- run: yarn pretty:check
|
||||
@@ -739,8 +739,8 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Mercado Livre",
|
||||
"slug": "mercado_livre",
|
||||
"title": "Mercado Libre",
|
||||
"slug": "mercado_libre",
|
||||
"altNames": [
|
||||
"Mercado Libre",
|
||||
"MercadoLibre",
|
||||
@@ -1020,6 +1020,14 @@
|
||||
"qiniu"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "R10.net",
|
||||
"slug": "r10",
|
||||
"altNames": [
|
||||
"R10",
|
||||
"r10.net"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Raindrop.io",
|
||||
"slug": "raindrop_io",
|
||||
@@ -1399,6 +1407,25 @@
|
||||
},
|
||||
{
|
||||
"title": "CoinSpot"
|
||||
},
|
||||
{
|
||||
"title": "Aternos",
|
||||
"slug": "aternos"
|
||||
},
|
||||
{
|
||||
"title": "Toshl Finance",
|
||||
"slug": "toshl_finance",
|
||||
"altNames": [
|
||||
"Toshl"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "xAI",
|
||||
"slug": "xai"
|
||||
},
|
||||
{
|
||||
"title": "Cronometer",
|
||||
"slug": "cronometer"
|
||||
}
|
||||
]
|
||||
}
|
||||
13
auth/assets/custom-icons/icons/aternos.svg
Normal file
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||
<svg version="1.0" shape-rendering="geometricPrecision" text-rendering="geometricPrecision" image-rendering="optimizeQuality" fill-rule="evenodd" xml:space="preserve"
|
||||
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="300mm" height="300mm" viewBox="0 0 16000 16000" preserveAspectRatio="xMidYMid meet">
|
||||
<g>
|
||||
<path fill="#2b87d3" d="M0 8000 l0 -8000 8000 0 8000 0 0 8000 0 8000 -8000 0 -8000 0 0 -8000z m13990 0 l0 -5990 -5990 0 -5990 0 0 5990 0 5990 5990 0 5990 0 0 -5990z"/>
|
||||
<path fill="#2b87d3" d="M2995 12998 c-3 -7 -4 -911 -3 -2008 l3 -1995 1005 0 1005 0 3 997 2 998 998 2 997 3 0 1005 0 1005 -2003 3 c-1597 2 -2004 0 -2007 -10z"/>
|
||||
<path fill="#2b87d3" d="M8995 12998 c-3 -7 -4 -461 -3 -1008 l3 -995 997 -3 998 -2 2 -998 3 -997 1005 0 1005 0 0 2005 0 2005 -2003 3 c-1597 2 -2004 0 -2007 -10z"/>
|
||||
<path fill="#2b87d3" d="M5995 9998 c-3 -7 -4 -911 -3 -2008 l3 -1995 2005 0 2005 0 0 2005 0 2005 -2003 3 c-1597 2 -2004 0 -2007 -10z"/>
|
||||
<path fill="#2b87d3" d="M2995 6998 c-3 -7 -4 -911 -3 -2008 l3 -1995 2005 0 2005 0 0 1005 0 1005 -997 3 -998 2 -2 998 -3 997 -1003 3 c-797 2 -1004 0 -1007 -10z"/>
|
||||
<path fill="#2b87d3" d="M10997 7003 c-4 -3 -7 -453 -7 -1000 l0 -993 -997 -2 -998 -3 0 -1005 0 -1005 2005 0 2005 0 0 2005 0 2005 -1001 3 c-550 1 -1004 -1 -1007 -5z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.4 KiB |
25
auth/assets/custom-icons/icons/cronometer.svg
Normal file
@@ -0,0 +1,25 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="107.51429"
|
||||
height="102.75398"
|
||||
viewBox="0 0 107.51429 102.75398"
|
||||
fill="none"
|
||||
version="1.1"
|
||||
id="svg12"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs12" />
|
||||
<g
|
||||
id="g12"
|
||||
transform="translate(34.950067,-215.99315)">
|
||||
<path
|
||||
d="m 57.85843,271.77769 c -0.774,-0.1257 -1.5665,0.0595 -2.2048,0.5152 -0.6382,0.4557 -1.0704,1.145 -1.2028,1.9179 -0.1447,0.8786 -0.3109,1.7775 -0.496,2.6697 -1.7799,8.5172 -5.1174,16.6325 -9.8446,23.9376 -5.0162,7.5169 -10.8489,12.0047 -15.6015,12.0047 -2.2725,0.0492 -4.5367,-0.2938 -6.6926,-1.0138 -5.6912,-1.775 -11.7884,-1.7717 -17.4777,0.009 -2.1479,0.7139 -4.4023,1.0536 -6.6652,1.0044 -4.7486,0 -10.58,-4.4851 -15.5963,-11.9979 -4.727,-7.3046 -8.0652,-15.4188 -9.84715,-23.935 -1.97756,-9.485 -1.60717,-17.8346 1.06924,-24.1485 1.09829,-2.7795 2.74951,-5.307 4.85381,-7.4292 2.1042,-2.1223 4.6176,-3.7952 7.3876,-4.9171 2.77,-1.122 5.7387,-1.6698 8.7268,-1.6101 2.988,0.0597 5.9328,0.7255 8.6558,1.9572 l 0.1663,0.0635 c 3.1372,1.3741 6.5201,2.0997 9.9449,2.1331 h 0.127 c 3.4272,-0.0346 6.8117,-0.763 9.9498,-2.1412 l 0.1502,-0.0581 c 2.981,-1.3116 6.2053,-1.979 9.462,-1.9586 1.8593,0.0219 3.7051,0.317 5.4785,0.8759 1.02,0.3144 2.0172,0.6982 2.9846,1.1489 0.7121,0.333 1.5269,0.3705 2.2665,0.1042 0.7397,-0.2662 1.3439,-0.8144 1.6805,-1.5248 0.1645,-0.3511 0.2583,-0.7312 0.2755,-1.1185 0.0172,-0.3873 -0.0421,-0.7742 -0.1749,-1.1385 -0.1328,-0.3643 -0.3362,-0.6987 -0.5986,-0.9841 -0.2625,-0.2854 -0.5788,-0.5161 -0.9307,-0.6789 -1.2159,-0.5667 -2.4693,-1.0495 -3.7512,-1.445 -2.3402,-0.7366 -4.7769,-1.1202 -7.2302,-1.1381 -3.9898,-0.0245 -7.9413,0.7777 -11.6058,2.356 l -0.1514,0.0581 c -1.5551,0.6563 -3.1723,1.1544 -4.8271,1.4869 -0.2018,-1.6639 -0.5606,-3.305 -1.0719,-4.9013 11.4383,-2.0749 11.0342,-15.88816 11.0342,-15.88816 -9.3133,1.40309 -13.3294,4.93919 -14.9623,8.33877 -1.5519,-2.01717 -3.4478,-3.74459 -5.6002,-5.10275 -0.3906,-0.24958 -0.8265,-0.41979 -1.2828,-0.50093 -0.4563,-0.0811 -0.9238,-0.0716 -1.3765,0.0281 -0.4526,0.0997 -0.8812,0.28749 -1.2613,0.55278 -0.38,0.26529 -0.7041,0.60283 -0.9537,0.99335 -0.2496,0.39052 -0.4198,0.82638 -0.5009,1.28269 -0.0812,0.45631 -0.0717,0.92412 0.028,1.37675 0.0997,0.45262 0.2875,0.88118 0.5528,1.2612 0.2653,0.38003 0.6028,0.70409 0.9933,0.95367 1.9269,1.29176 3.5632,2.97116 4.8046,4.93076 1.2415,1.9597 2.0607,4.1567 2.4055,6.4507 -1.2634,-0.3369 -2.5038,-0.7536 -3.7143,-1.2476 l -0.1759,-0.0676 c -3.6617,-1.5742 -7.6092,-2.3745 -11.5949,-2.3506 -9.0309,0 -20.73562,6.0327 -25.63155,17.5723 -3.97541,9.3756 -2.962867,20.2042 -1.41244,27.6387 1.94038,9.2532 5.57254,18.0686 10.71379,26.003 6.3017,9.4378 13.5982,14.6369 20.5461,14.6369 2.8438,0.049 5.6759,-0.375 8.3806,-1.255 4.5889,-1.454 9.515,-1.454 14.1039,0 2.6964,0.878 5.5198,1.3 8.3549,1.251 6.8478,0 14.3376,-5.3384 20.5461,-14.645 5.1404,-7.9344 8.7713,-16.75 10.7098,-26.0031 0.2041,-0.9746 0.3851,-1.9559 0.5406,-2.917 0.062,-0.3835 0.0481,-0.7755 -0.0416,-1.1535 -0.0897,-0.3779 -0.2534,-0.7345 -0.4812,-1.0492 -0.2278,-0.3147 -0.5154,-0.5813 -0.8464,-0.7846 -0.3311,-0.2033 -0.6991,-0.3393 -1.0828,-0.4001"
|
||||
fill="#ff6733"
|
||||
id="path11" />
|
||||
<path
|
||||
d="m 71.33493,256.39499 v 0.0121 l -8.2649,-5.8475 -0.4271,-0.2298 0.0512,-0.5177 0.2393,-10.0798 h 0.0095 c 0.0046,-0.5208 -0.1263,-1.0339 -0.3802,-1.4887 -0.2538,-0.4548 -0.6219,-0.8357 -1.0675,-1.1053 -0.4471,-0.2723 -0.9569,-0.4242 -1.4801,-0.441 -0.5233,-0.0169 -1.0422,0.102 -1.5059,0.3451 l -8.7538,4.3593 c -1.2619,0.6789 -2.3372,1.6578 -3.1318,2.8502 -0.7946,1.1925 -1.2839,2.5621 -1.4247,3.9881 l -0.7408,7.7913 -6.3059,3.3658 c -2.4638,-3.7027 -5.7171,-6.8136 -9.5264,-9.1092 -3.8093,-2.2956 -8.0799,-3.7189 -12.5047,-4.1675 -4.4249,-0.4486 -8.894,0.0886 -13.0866,1.573 -4.1925,1.4843 -8.0041,3.879 -11.1609,7.0119 -2.7859,2.7623 -4.9974,6.0489 -6.5065,9.6702 -1.509,3.6213 -2.286,7.5057 -2.286,11.4288 0,3.9232 0.777,7.8075 2.286,11.4288 1.5091,3.6214 3.7206,6.908 6.5065,9.6702 4.197,4.1711 9.5317,7.0104 15.3356,8.1623 5.8039,1.1518 11.8188,0.5648 17.2905,-1.6873 5.4718,-2.2522 10.157,-6.0694 13.4684,-10.9731 3.3114,-4.9037 5.1017,-10.6758 5.1465,-16.5928 0.0013,-3.8327 -0.7435,-7.6291 -2.1926,-11.1774 l 6.2181,-3.3117 -0.0109,0.0311 6.7206,4.0741 c 1.2315,0.7427 2.6257,1.1736 4.0615,1.2554 1.4357,0.0817 2.8695,-0.1882 4.1772,-0.7863 l 8.7534,-4.3593 c 0.472,-0.2216 0.877,-0.5622 1.177,-0.9882 0.3,-0.426 0.483,-0.9228 0.532,-1.4413 0.049,-0.5185 -0.038,-1.0409 -0.252,-1.5156 -0.214,-0.4747 -0.548,-0.8853 -0.97,-1.1915 m -34.1485,19.4107 c -0.0347,4.7475 -1.47,9.3791 -4.1262,13.3141 -2.6561,3.9351 -6.4148,6.9984 -10.8048,8.806 -4.39,1.8076 -9.2158,2.2789 -13.8727,1.355 -4.6568,-0.924 -8.9373,-3.2021 -12.3047,-6.5488 -2.2347,-2.2161 -4.0086,-4.8527 -5.2191,-7.7579 -1.2105,-2.9051 -1.8335,-6.0211 -1.8335,-9.1684 0,-3.1472 0.623,-6.2632 1.8335,-9.1684 1.2105,-2.9051 2.9844,-5.5417 5.2191,-7.7578 2.5007,-2.4815 5.514,-4.3861 8.8284,-5.5801 3.3145,-1.194 6.85,-1.6486 10.3587,-1.3319 3.5087,0.3167 6.9057,1.397 9.9528,3.1652 3.0471,1.7682 5.6703,4.1815 7.6862,7.0707 l -8.1614,4.3552 c -1.3138,-1.6306 -2.9557,-2.9671 -4.8188,-3.9229 -1.8632,-0.9559 -3.9062,-1.5098 -5.997,-1.6259 -2.0908,-0.1161 -4.1826,0.2082 -6.1401,0.952 -1.9576,0.7437 -3.7372,1.8903 -5.2234,3.3654 -1.3826,1.3719 -2.4797,3.0038 -3.2285,4.8018 -0.7489,1.798 -1.1343,3.7264 -1.1343,5.674 0,1.9477 0.3854,3.8761 1.1343,5.6741 0.7488,1.7979 1.8459,3.4299 3.2285,4.8018 2.317,2.3457 5.3482,3.8548 8.6165,4.2898 3.2684,0.4351 6.5886,-0.2286 9.4386,-1.8865 2.85,-1.6579 5.0682,-4.2161 6.3055,-7.2723 1.2374,-3.0562 1.4238,-6.437 0.53,-9.6107 l 8.2064,-4.3687 c 1.0104,2.6766 1.5273,5.5142 1.526,8.3752 z m -26.0801,1.2734 c 0.3553,0.6991 0.9725,1.2295 1.7171,1.4759 0.7445,0.2463 1.5564,0.1885 2.2586,-0.1607 l 6.9193,-3.6848 c 0.2696,2.1001 -0.213,4.2278 -1.3623,6.006 -1.1493,1.7782 -2.891,3.0921 -4.9165,3.7087 -2.0255,0.6167 -4.2042,0.4963 -6.1494,-0.3399 -1.9452,-0.8361 -3.5316,-2.334 -4.4779,-4.228 -0.9463,-1.8941 -1.1912,-4.0621 -0.6917,-6.1196 0.4995,-2.0576 1.7111,-3.8718 3.4205,-5.1212 1.7094,-1.2494 3.806,-1.8532 5.9181,-1.7044 2.1121,0.1487 4.1034,1.0405 5.6207,2.5172 l -6.9345,3.6997 c -0.3472,0.1714 -0.6571,0.4099 -0.9118,0.7018 -0.2546,0.2918 -0.449,0.6311 -0.5719,0.9984 -0.1229,0.3673 -0.172,0.7553 -0.1442,1.1416 0.0278,0.3863 0.1317,0.7633 0.3059,1.1093 z m 39.7718,-27.0764 c 0.219,-1.157 0.3879,-2.1708 1.4557,-2.7467 l 4.5109,-2.2438 -0.6085,5.5191 -5.7029,2.8386 z m 8.0467,10.3339 c -0.5151,0.173 -1.0642,0.2192 -1.6009,0.1347 -0.5367,-0.0845 -1.0453,-0.2971 -1.4824,-0.6199 l -2.9222,-1.7424 5.7042,-2.8386 4.8109,2.8224 z"
|
||||
fill="#ff6733"
|
||||
id="path12" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 6.6 KiB |
|
Before Width: | Height: | Size: 8.0 KiB After Width: | Height: | Size: 8.0 KiB |
96
auth/assets/custom-icons/icons/r10.svg
Normal file
@@ -0,0 +1,96 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 25.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 280.6 100" style="enable-background:new 0 0 280.6 100;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{enable-background:new ;}
|
||||
.st1{fill:#FFFFFF;}
|
||||
.st2{fill:#3F4257;}
|
||||
.st3{fill-rule:evenodd;clip-rule:evenodd;fill:#3F4257;}
|
||||
.st4{fill-rule:evenodd;clip-rule:evenodd;fill:#EA4335;}
|
||||
.st5{fill:#EA4335;}
|
||||
.st6{fill:#FBBC05;}
|
||||
.st7{fill:#4285F4;}
|
||||
.st8{fill:#34A853;}
|
||||
</style>
|
||||
<g>
|
||||
<g class="st0">
|
||||
<path class="st1" d="M114.5,57.9h-6.3L97.9,46.2h-7.2v11.7h-5.4V24.1c5.3,0,10.5,0,15.8,0c7.8,0,12,5.4,12,11
|
||||
c0,4.8-2.5,9.5-9.2,10.5L114,57L114.5,57.9z M90.7,29.1v12.2H101c4.5,0,6.5-2.8,6.5-6c0-3-2-6.2-6.4-6.2H90.7z"/>
|
||||
<polygon class="st1" points="124.5,57.9 129.9,57.9 129.9,24.2 118.7,27.7 118.7,32.4 124.5,30.8 "/>
|
||||
<path class="st1" d="M139.7,38.1c0-19.6,28.4-19.5,28.4,0V44c0,19.5-28.4,19.6-28.4,0V38.1z M145.2,44c0,12.8,17.5,12.8,17.5,0
|
||||
v-5.9c0-12.6-17.5-12.8-17.5,0V44z"/>
|
||||
</g>
|
||||
<g class="st0">
|
||||
<path class="st1" d="M188.8,24.2l22.8,27.9V24.2h2.6v33.8h-1L190.3,30v27.9h-2.6V24.2H188.8z"/>
|
||||
<path class="st1" d="M226.3,39.7h19.8v2.4h-19.8v13.3h21.4v2.5h-24V24.2h23.4v2.5h-20.8V39.7z"/>
|
||||
<path class="st1" d="M263.3,26.5h-12.2v-2.3h27.1v2.3h-12.2v31.4h-2.6V26.5z"/>
|
||||
</g>
|
||||
<g id="Group_174_3_" transform="translate(-5071.999 -1624)">
|
||||
<path class="st1" d="M5106.8,1722c-5.8,0-11.4-1.2-16.4-3.6c-4.9-2.3-9.1-5.7-12-9.8c-5-7.1-6.1-16-3-25l0-0.1
|
||||
c7.8-22.5,13-25.7,18.7-27.4l0.5-0.1l0,0.2l0.8-0.1c0.5,0,0.9-0.1,1.4-0.1c0.6,0,1.2,0,1.8,0.1l0.8,0.1l0.4,0.1
|
||||
c1.9,0.3,3.8,0.8,5.7,1.5l0,0l0,0c0.4,0.1,0.9,0.2,1.3,0.2c0,0,0,0,0,0c5.2,0,12.8-10.1,18.8-28.9c-0.3,1.7-1.1,6.5-1.4,8.1
|
||||
c-1.2,6.5-2.3,12.7-3.2,17.7l-0.1,0.5l0.5,0.2c2.8,1.2,5,3.8,6.5,7.6l0.1,0.3l0.3,0.1c5.2,1.9,9.3,4.6,12.1,8
|
||||
c2.5,3,4.2,6.5,4.8,10.5c0.9,5.3,0,11.6-2.5,17.6c-2.2,5.2-5.3,9.8-8.5,12.3C5126,1718.6,5116.6,1722,5106.8,1722L5106.8,1722z
|
||||
M5094.2,1635.7l0.5,2.5l-0.2,16.8L5094.2,1635.7z M5099.2,1654.4c-0.2-8.7,5.1-17.6,12.8-21.7c-0.7,0.9-1.4,1.8-2,2.7
|
||||
C5103.8,1639,5100.3,1645.3,5099.2,1654.4z"/>
|
||||
<g>
|
||||
<path class="st1" d="M5128.3,1663.1c-1.7-4.1-4-6.7-6.9-8c1.5-8.3,3.6-20,5.7-31.1c-0.4,1.7-1.1,3.4-1.7,5
|
||||
c-1.7,9.3-4.2,20.4-5.5,27.4c3.2,1.5,5.6,4.2,6.9,7.6c27.3,9.9,16.5,38.3,6.9,46.1c-28,22.7-67.7,4-57.3-26.9
|
||||
c6.8-20.3,12.9-24.2,18.7-26v0c2.6-0.5,6.9,0.4,9.2,0.9c1.4,0.4,2.2,0.5,2.5,0.5c8,0.5,15.6-18.5,18.5-29.8
|
||||
c-2.1,5.3-11.8,30.7-19.9,28.3c-1.9-0.7-3.8-1.2-5.8-1.6c0.8-8.8,4-15.8,10.7-19.6c1.2-1.8,2.7-3.6,4.2-5.1
|
||||
c-9.9,3.5-16.8,14.4-16.1,24.6c-1.1-0.1-2.2-0.1-3.3,0l0.2-17.2l-2.1-9.6l0.5,26.8c-6.3,1.9-11.6,5.9-19.1,27.8l0,0
|
||||
c-7.8,22.6,10.4,39.4,32.1,39.4c9.2,0,19-3.1,27.7-10C5144.6,1704.6,5157.1,1673.7,5128.3,1663.1z"/>
|
||||
<polygon class="st2" points="5114.7,1630.8 5114.7,1630.8 5114.7,1630.8 "/>
|
||||
</g>
|
||||
<g id="Group_1_3_" transform="translate(5072 1624)">
|
||||
<path id="Path_839_2_" class="st3" d="M33.1,41.9c1.8-4.6,5.7-7.7,10.2-7.7c6.2,0,11.3,6.1,11.3,13.6s-5.1,13.6-11.3,13.6
|
||||
c-4.5,0-8.4-3.2-10.2-7.8c0.1-0.2,0.2-0.3,0.3-0.5c1.7,4.2,5.2,7.2,9.4,7.2c5.7,0,10.4-5.6,10.4-12.4s-4.6-12.4-10.4-12.4
|
||||
c-4.1,0-7.7,2.9-9.4,7.1C33.3,42.2,33.2,42.1,33.1,41.9z M25.1,36.4c2.9,0,5.5,1.9,7.1,4.8c-1.2-2.3-3.6-3.7-6.2-3.8
|
||||
c-4.4,0-7.9,4.6-7.9,10.3S22.5,58,26,58s4.7-1.9,6.1-4.2c-1.6,2.8-3.2,5.1-7,5.1c-3.8,0-8.7-5-8.7-11.2
|
||||
C16.4,41.5,20.3,36.4,25.1,36.4L25.1,36.4z"/>
|
||||
<path id="Path_840_2_" class="st3" d="M27.8,45.5c0.9,0,1.6-0.7,1.6-1.5c0-0.9-0.7-1.6-1.5-1.6c-0.9,0-1.6,0.7-1.6,1.5
|
||||
c0,0,0,0,0,0C26.3,44.8,27,45.4,27.8,45.5z"/>
|
||||
<path id="Path_842_2_" class="st3" d="M46.9,46.4c0.9,0,1.6-0.6,1.6-1.5c0-0.9-0.6-1.6-1.5-1.6s-1.6,0.6-1.6,1.5c0,0,0,0,0,0.1
|
||||
C45.4,45.7,46.1,46.4,46.9,46.4z"/>
|
||||
<path id="Path_843_2_" class="st3" d="M26.1,62.8l0.6,0.1l-2.3,23.4l-0.6-0.1L26.1,62.8z"/>
|
||||
<path id="Path_844_2_" class="st3" d="M38.6,65.3l0.6,0l1.5,23.5l-0.6,0L38.6,65.3z"/>
|
||||
<path id="Path_845_2_" class="st3" d="M51.6,64.2l0.5-0.1l3.1,19.7L54.6,84L51.6,64.2z"/>
|
||||
<g>
|
||||
<polygon class="st2" points="8.1,57.5 8.1,57.5 8.1,57.5 8.1,57.5 "/>
|
||||
<path class="st2" d="M8.1,57.5c-4.3,39.6,64.1,47.3,56.7-0.1c0,0,0,0,0,0c0,0,0,0,0,0s0,0,0,0c-0.3,0.2-0.6,0.4-0.9,0.6
|
||||
c-0.3,0.2-0.6,0.5-1,0.7c-0.9,0.6-2.2,1.2-3.8,1.9C41.4,66.9,17.2,62.2,8.1,57.5 M9.3,58.9c7.6,7,37.3,10.1,53,2.1
|
||||
c0,0,0.3-0.1,0.5-0.3C67.3,101.9,5.8,94.4,9.3,58.9z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<circle class="st1" cx="177.1" cy="53.6" r="4"/>
|
||||
<path id="Forma_1_3_" class="st4" d="M153,74.7c-1,0-2.1,0.3-2.9,1c-0.7,0.6-1.3,1.3-1.7,2c-0.4-0.8-1-1.5-1.7-2
|
||||
c-0.8-0.7-1.8-1-2.9-1c-2.9,0-5.2,2.4-5.2,5.6c0,3.5,2.8,5.8,7,9.4c0.7,0.6,1.5,1.3,2.4,2c0.2,0.2,0.6,0.2,0.8,0
|
||||
c0.8-0.7,1.6-1.4,2.4-2c4.2-3.6,7-6,7-9.4C158.1,77.1,155.9,74.7,153,74.7z"/>
|
||||
<g>
|
||||
<path class="st1" d="M86.6,71.9l5.2,15.7l5.3-15.7h1.5l5.3,15.7l5.2-15.7h2.7l-6.6,19h-2.4l-4.9-14.2L93,90.9h-2.4l-6.6-19H86.6z"
|
||||
/>
|
||||
<path class="st1" d="M125.1,88.7c-1.4,1.6-3.7,2.4-5.8,2.4c-4.1,0-7-2.7-7-7c0-4,2.9-6.9,6.9-6.9c4.1,0,7.2,2.5,6.7,7.9h-11.4
|
||||
c0.2,2.5,2.3,4,4.9,4c1.5,0,3.4-0.6,4.3-1.7L125.1,88.7L125.1,88.7z M123.8,83.2c-0.1-2.6-1.9-4-4.5-4c-2.3,0-4.4,1.4-4.7,4
|
||||
L123.8,83.2L123.8,83.2z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st5" d="M214.6,84.2c0,4.8-3.7,8.3-8.3,8.3s-8.3-3.5-8.3-8.3c0-4.8,3.7-8.3,8.3-8.3S214.6,79.4,214.6,84.2z M211,84.2
|
||||
c0-3-2.2-5-4.7-5s-4.7,2-4.7,5c0,3,2.2,5,4.7,5S211,87.2,211,84.2z"/>
|
||||
<path class="st6" d="M232.6,84.2c0,4.8-3.7,8.3-8.3,8.3s-8.3-3.5-8.3-8.3c0-4.8,3.7-8.3,8.3-8.3S232.6,79.4,232.6,84.2z M229,84.2
|
||||
c0-3-2.2-5-4.7-5s-4.7,2-4.7,5c0,3,2.2,5,4.7,5S229,87.2,229,84.2z"/>
|
||||
<path class="st7" d="M249.9,76.4v14.9c0,6.1-3.6,8.7-7.9,8.7c-4,0-6.5-2.7-7.4-4.9l3.2-1.3c0.6,1.4,2,3,4.2,3
|
||||
c2.7,0,4.4-1.7,4.4-4.9v-1.2h-0.1c-0.8,1-2.4,1.9-4.4,1.9c-4.2,0-8-3.6-8-8.3c0-4.7,3.8-8.3,8-8.3c2,0,3.6,0.9,4.4,1.9h0.1v-1.4
|
||||
L249.9,76.4L249.9,76.4z M246.7,84.3c0-2.9-2-5.1-4.4-5.1c-2.5,0-4.6,2.1-4.6,5.1c0,2.9,2.1,5,4.6,5
|
||||
C244.7,89.3,246.7,87.2,246.7,84.3z"/>
|
||||
<path class="st8" d="M255.6,67.7V92H252V67.7H255.6z"/>
|
||||
<path class="st5" d="M269.5,87l2.8,1.9c-0.9,1.4-3.1,3.7-6.9,3.7c-4.7,0-8.3-3.7-8.3-8.3c0-4.9,3.6-8.3,7.8-8.3
|
||||
c4.3,0,6.4,3.4,7.1,5.3l0.4,0.9l-11.1,4.6c0.9,1.7,2.2,2.5,4,2.5C267.3,89.3,268.6,88.4,269.5,87L269.5,87z M260.8,84l7.4-3.1
|
||||
c-0.4-1-1.6-1.8-3.1-1.8C263.3,79.1,260.7,80.8,260.8,84z"/>
|
||||
<path class="st7" d="M184.5,82.1v-3.5h11.9c0.1,0.6,0.2,1.3,0.2,2.1c0,2.6-0.7,5.9-3.1,8.3c-2.3,2.4-5.2,3.6-9,3.6
|
||||
c-7.1,0-13.1-5.8-13.1-12.9c0-7.1,6-12.9,13.1-12.9c3.9,0,6.7,1.5,8.9,3.6l-2.5,2.5c-1.5-1.4-3.6-2.5-6.4-2.5
|
||||
c-5.2,0-9.3,4.2-9.3,9.4c0,5.2,4.1,9.4,9.3,9.4c3.4,0,5.3-1.4,6.5-2.6c1-1,1.7-2.4,1.9-4.4L184.5,82.1z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 6.8 KiB |
103
auth/assets/custom-icons/icons/toshl_finance.svg
Normal file
|
After Width: | Height: | Size: 16 KiB |
35
auth/assets/custom-icons/icons/xai.svg
Normal file
@@ -0,0 +1,35 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Generator: Adobe Illustrator 27.5.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
|
||||
<svg
|
||||
version="1.1"
|
||||
id="katman_1"
|
||||
x="0px"
|
||||
y="0px"
|
||||
viewBox="0 0 841.89 595.28"
|
||||
style="enable-background:new 0 0 841.89 595.28;"
|
||||
xml:space="preserve"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs id="defs4" />
|
||||
<g
|
||||
id="g4"
|
||||
style="fill:currentColor">
|
||||
<polygon
|
||||
points="557.09,211.99 565.4,538.36 631.96,538.36 640.28,93.18"
|
||||
id="polygon1"
|
||||
style="fill:currentColor" />
|
||||
<polygon
|
||||
points="640.28,56.91 538.72,56.91 379.35,284.53 430.13,357.05"
|
||||
id="polygon2"
|
||||
style="fill:currentColor" />
|
||||
<polygon
|
||||
points="201.61,538.36 303.17,538.36 353.96,465.84 303.17,393.31"
|
||||
id="polygon3"
|
||||
style="fill:currentColor" />
|
||||
<polygon
|
||||
points="201.61,211.99 430.13,538.36 531.69,538.36 303.17,211.99"
|
||||
id="polygon4"
|
||||
style="fill:currentColor" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
@@ -39,25 +39,25 @@
|
||||
"next-electron-server": "^1.0.0",
|
||||
"node-stream-zip": "^1.15.0",
|
||||
"onnxruntime-node": "^1.20.1",
|
||||
"zod": "^3.25.23"
|
||||
"zod": "^3.25.51"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@eslint/js": "^9.27.0",
|
||||
"@eslint/js": "^9.28.0",
|
||||
"@tsconfig/node22": "^22.0.2",
|
||||
"@types/auto-launch": "^5.0.5",
|
||||
"@types/ffmpeg-static": "^3.0.3",
|
||||
"ajv": "^8.17.1",
|
||||
"concurrently": "^9.1.2",
|
||||
"cross-env": "^7.0.3",
|
||||
"electron": "^36.3.2",
|
||||
"electron": "^36.4.0",
|
||||
"electron-builder": "^26.0.14",
|
||||
"eslint": "^9",
|
||||
"prettier": "3.5.3",
|
||||
"prettier-plugin-organize-imports": "^4.1.0",
|
||||
"prettier-plugin-packagejson": "^2.5.14",
|
||||
"prettier-plugin-packagejson": "^2.5.15",
|
||||
"shx": "^0.4.0",
|
||||
"typescript": "^5.8.3",
|
||||
"typescript-eslint": "^8.32.1"
|
||||
"typescript-eslint": "^8.33.1"
|
||||
},
|
||||
"packageManager": "yarn@1.22.22",
|
||||
"productName": "ente"
|
||||
|
||||
@@ -12,7 +12,7 @@ import fs_ from "node:fs";
|
||||
import fs from "node:fs/promises";
|
||||
import path from "node:path";
|
||||
import { Readable } from "node:stream";
|
||||
import { z } from "zod";
|
||||
import { z } from "zod/v4";
|
||||
import type { FFmpegCommand } from "../../types/ipc";
|
||||
import log from "../log-worker";
|
||||
import { messagePortMainEndpoint } from "../utils/comlink";
|
||||
|
||||
@@ -15,7 +15,7 @@ import { existsSync } from "fs";
|
||||
import fs from "node:fs/promises";
|
||||
import path from "node:path";
|
||||
import * as ort from "onnxruntime-node";
|
||||
import { z } from "zod";
|
||||
import { z } from "zod/v4";
|
||||
import log from "../log-worker";
|
||||
import { messagePortMainEndpoint } from "../utils/comlink";
|
||||
import { wait } from "../utils/common";
|
||||
|
||||
@@ -28,6 +28,13 @@ export const createWatcher = (mainWindow: BrowserWindow) => {
|
||||
// Ask the watcher to wait for a the file size to stabilize before
|
||||
// telling us about a new file. By default, it waits for 2 seconds.
|
||||
awaitWriteFinish: true,
|
||||
// On macOS we start getting "EMFILE: too many open files" when watching
|
||||
// large folders. This is a known regression in Chokidar v4:
|
||||
// https://github.com/paulmillr/chokidar/issues/1385
|
||||
//
|
||||
// The recommended workaround for now is to enable usePolling. Since it
|
||||
// comes at a performance cost, we only do it where needed (macOS).
|
||||
...(process.platform == "darwin" ? { usePolling: true } : {}),
|
||||
});
|
||||
|
||||
watcher
|
||||
|
||||
@@ -184,10 +184,10 @@
|
||||
resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.9.1.tgz#4a97e85e982099d6c7ee8410aacb55adaa576f06"
|
||||
integrity sha512-xIDQRsfg5hNBqHz04H1R3scSVwmI+KUbqjsQKHKQ1DAUSaUjYPReZZmS/5PNiKu1fUvzDd6H7DEDKACSEhu+TQ==
|
||||
|
||||
"@eslint/js@^9.27.0":
|
||||
version "9.27.0"
|
||||
resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.27.0.tgz#181a23460877c484f6dd03890f4e3fa2fdeb8ff0"
|
||||
integrity sha512-G5JD9Tu5HJEu4z2Uo4aHY2sLV64B7CDMXxFzqzjl3NKd6RVzSXNoE80jk7Y0lJkTTkjiIhBAqmlYwjuBY3tvpA==
|
||||
"@eslint/js@^9.28.0":
|
||||
version "9.28.0"
|
||||
resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.28.0.tgz#7822ccc2f8cae7c3cd4f902377d520e9ae03f844"
|
||||
integrity sha512-fnqSjGWd/CoIp4EXIxWVK/sHA6DOHN4+8Ix2cX5ycOY7LG0UY8nHCU5pIp2eaE1Mc7Qd8kHspYNzYXT2ojPLzg==
|
||||
|
||||
"@eslint/object-schema@^2.1.4":
|
||||
version "2.1.4"
|
||||
@@ -392,62 +392,78 @@
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
|
||||
"@typescript-eslint/eslint-plugin@8.32.1":
|
||||
version "8.32.1"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.32.1.tgz#9185b3eaa3b083d8318910e12d56c68b3c4f45b4"
|
||||
integrity sha512-6u6Plg9nP/J1GRpe/vcjjabo6Uc5YQPAMxsgQyGC/I0RuukiG1wIe3+Vtg3IrSCVJDmqK3j8adrtzXSENRtFgg==
|
||||
"@typescript-eslint/eslint-plugin@8.33.1":
|
||||
version "8.33.1"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.33.1.tgz#532641b416ed2afd5be893cddb2a58e9cd1f7a3e"
|
||||
integrity sha512-TDCXj+YxLgtvxvFlAvpoRv9MAncDLBV2oT9Bd7YBGC/b/sEURoOYuIwLI99rjWOfY3QtDzO+mk0n4AmdFExW8A==
|
||||
dependencies:
|
||||
"@eslint-community/regexpp" "^4.10.0"
|
||||
"@typescript-eslint/scope-manager" "8.32.1"
|
||||
"@typescript-eslint/type-utils" "8.32.1"
|
||||
"@typescript-eslint/utils" "8.32.1"
|
||||
"@typescript-eslint/visitor-keys" "8.32.1"
|
||||
"@typescript-eslint/scope-manager" "8.33.1"
|
||||
"@typescript-eslint/type-utils" "8.33.1"
|
||||
"@typescript-eslint/utils" "8.33.1"
|
||||
"@typescript-eslint/visitor-keys" "8.33.1"
|
||||
graphemer "^1.4.0"
|
||||
ignore "^7.0.0"
|
||||
natural-compare "^1.4.0"
|
||||
ts-api-utils "^2.1.0"
|
||||
|
||||
"@typescript-eslint/parser@8.32.1":
|
||||
version "8.32.1"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.32.1.tgz#18b0e53315e0bc22b2619d398ae49a968370935e"
|
||||
integrity sha512-LKMrmwCPoLhM45Z00O1ulb6jwyVr2kr3XJp+G+tSEZcbauNnScewcQwtJqXDhXeYPDEjZ8C1SjXm015CirEmGg==
|
||||
"@typescript-eslint/parser@8.33.1":
|
||||
version "8.33.1"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.33.1.tgz#ef9a5ee6aa37a6b4f46cc36d08a14f828238afe2"
|
||||
integrity sha512-qwxv6dq682yVvgKKp2qWwLgRbscDAYktPptK4JPojCwwi3R9cwrvIxS4lvBpzmcqzR4bdn54Z0IG1uHFskW4dA==
|
||||
dependencies:
|
||||
"@typescript-eslint/scope-manager" "8.32.1"
|
||||
"@typescript-eslint/types" "8.32.1"
|
||||
"@typescript-eslint/typescript-estree" "8.32.1"
|
||||
"@typescript-eslint/visitor-keys" "8.32.1"
|
||||
"@typescript-eslint/scope-manager" "8.33.1"
|
||||
"@typescript-eslint/types" "8.33.1"
|
||||
"@typescript-eslint/typescript-estree" "8.33.1"
|
||||
"@typescript-eslint/visitor-keys" "8.33.1"
|
||||
debug "^4.3.4"
|
||||
|
||||
"@typescript-eslint/scope-manager@8.32.1":
|
||||
version "8.32.1"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.32.1.tgz#9a6bf5fb2c5380e14fe9d38ccac6e4bbe17e8afc"
|
||||
integrity sha512-7IsIaIDeZn7kffk7qXC3o6Z4UblZJKV3UBpkvRNpr5NSyLji7tvTcvmnMNYuYLyh26mN8W723xpo3i4MlD33vA==
|
||||
"@typescript-eslint/project-service@8.33.1":
|
||||
version "8.33.1"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.33.1.tgz#c85e7d9a44d6a11fe64e73ac1ed47de55dc2bf9f"
|
||||
integrity sha512-DZR0efeNklDIHHGRpMpR5gJITQpu6tLr9lDJnKdONTC7vvzOlLAG/wcfxcdxEWrbiZApcoBCzXqU/Z458Za5Iw==
|
||||
dependencies:
|
||||
"@typescript-eslint/types" "8.32.1"
|
||||
"@typescript-eslint/visitor-keys" "8.32.1"
|
||||
"@typescript-eslint/tsconfig-utils" "^8.33.1"
|
||||
"@typescript-eslint/types" "^8.33.1"
|
||||
debug "^4.3.4"
|
||||
|
||||
"@typescript-eslint/type-utils@8.32.1":
|
||||
version "8.32.1"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.32.1.tgz#b9292a45f69ecdb7db74d1696e57d1a89514d21e"
|
||||
integrity sha512-mv9YpQGA8iIsl5KyUPi+FGLm7+bA4fgXaeRcFKRDRwDMu4iwrSHeDPipwueNXhdIIZltwCJv+NkxftECbIZWfA==
|
||||
"@typescript-eslint/scope-manager@8.33.1":
|
||||
version "8.33.1"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.33.1.tgz#d1e0efb296da5097d054bc9972e69878a2afea73"
|
||||
integrity sha512-dM4UBtgmzHR9bS0Rv09JST0RcHYearoEoo3pG5B6GoTR9XcyeqX87FEhPo+5kTvVfKCvfHaHrcgeJQc6mrDKrA==
|
||||
dependencies:
|
||||
"@typescript-eslint/typescript-estree" "8.32.1"
|
||||
"@typescript-eslint/utils" "8.32.1"
|
||||
"@typescript-eslint/types" "8.33.1"
|
||||
"@typescript-eslint/visitor-keys" "8.33.1"
|
||||
|
||||
"@typescript-eslint/tsconfig-utils@8.33.1", "@typescript-eslint/tsconfig-utils@^8.33.1":
|
||||
version "8.33.1"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.33.1.tgz#7836afcc097a4657a5ed56670851a450d8b70ab8"
|
||||
integrity sha512-STAQsGYbHCF0/e+ShUQ4EatXQ7ceh3fBCXkNU7/MZVKulrlq1usH7t2FhxvCpuCi5O5oi1vmVaAjrGeL71OK1g==
|
||||
|
||||
"@typescript-eslint/type-utils@8.33.1":
|
||||
version "8.33.1"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.33.1.tgz#d73ee1a29d8a0abe60d4abbff4f1d040f0de15fa"
|
||||
integrity sha512-1cG37d9xOkhlykom55WVwG2QRNC7YXlxMaMzqw2uPeJixBFfKWZgaP/hjAObqMN/u3fr5BrTwTnc31/L9jQ2ww==
|
||||
dependencies:
|
||||
"@typescript-eslint/typescript-estree" "8.33.1"
|
||||
"@typescript-eslint/utils" "8.33.1"
|
||||
debug "^4.3.4"
|
||||
ts-api-utils "^2.1.0"
|
||||
|
||||
"@typescript-eslint/types@8.32.1":
|
||||
version "8.32.1"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.32.1.tgz#b19fe4ac0dc08317bae0ce9ec1168123576c1d4b"
|
||||
integrity sha512-YmybwXUJcgGqgAp6bEsgpPXEg6dcCyPyCSr0CAAueacR/CCBi25G3V8gGQ2kRzQRBNol7VQknxMs9HvVa9Rvfg==
|
||||
"@typescript-eslint/types@8.33.1", "@typescript-eslint/types@^8.33.1":
|
||||
version "8.33.1"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.33.1.tgz#b693111bc2180f8098b68e9958cf63761657a55f"
|
||||
integrity sha512-xid1WfizGhy/TKMTwhtVOgalHwPtV8T32MS9MaH50Cwvz6x6YqRIPdD2WvW0XaqOzTV9p5xdLY0h/ZusU5Lokg==
|
||||
|
||||
"@typescript-eslint/typescript-estree@8.32.1":
|
||||
version "8.32.1"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.32.1.tgz#9023720ca4ecf4f59c275a05b5fed69b1276face"
|
||||
integrity sha512-Y3AP9EIfYwBb4kWGb+simvPaqQoT5oJuzzj9m0i6FCY6SPvlomY2Ei4UEMm7+FXtlNJbor80ximyslzaQF6xhg==
|
||||
"@typescript-eslint/typescript-estree@8.33.1":
|
||||
version "8.33.1"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.33.1.tgz#d271beed470bc915b8764e22365d4925c2ea265d"
|
||||
integrity sha512-+s9LYcT8LWjdYWu7IWs7FvUxpQ/DGkdjZeE/GGulHvv8rvYwQvVaUZ6DE+j5x/prADUgSbbCWZ2nPI3usuVeOA==
|
||||
dependencies:
|
||||
"@typescript-eslint/types" "8.32.1"
|
||||
"@typescript-eslint/visitor-keys" "8.32.1"
|
||||
"@typescript-eslint/project-service" "8.33.1"
|
||||
"@typescript-eslint/tsconfig-utils" "8.33.1"
|
||||
"@typescript-eslint/types" "8.33.1"
|
||||
"@typescript-eslint/visitor-keys" "8.33.1"
|
||||
debug "^4.3.4"
|
||||
fast-glob "^3.3.2"
|
||||
is-glob "^4.0.3"
|
||||
@@ -455,22 +471,22 @@
|
||||
semver "^7.6.0"
|
||||
ts-api-utils "^2.1.0"
|
||||
|
||||
"@typescript-eslint/utils@8.32.1":
|
||||
version "8.32.1"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.32.1.tgz#4d6d5d29b9e519e9a85e9a74e9f7bdb58abe9704"
|
||||
integrity sha512-DsSFNIgLSrc89gpq1LJB7Hm1YpuhK086DRDJSNrewcGvYloWW1vZLHBTIvarKZDcAORIy/uWNx8Gad+4oMpkSA==
|
||||
"@typescript-eslint/utils@8.33.1":
|
||||
version "8.33.1"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.33.1.tgz#ea22f40d3553da090f928cf17907e963643d4b96"
|
||||
integrity sha512-52HaBiEQUaRYqAXpfzWSR2U3gxk92Kw006+xZpElaPMg3C4PgM+A5LqwoQI1f9E5aZ/qlxAZxzm42WX+vn92SQ==
|
||||
dependencies:
|
||||
"@eslint-community/eslint-utils" "^4.7.0"
|
||||
"@typescript-eslint/scope-manager" "8.32.1"
|
||||
"@typescript-eslint/types" "8.32.1"
|
||||
"@typescript-eslint/typescript-estree" "8.32.1"
|
||||
"@typescript-eslint/scope-manager" "8.33.1"
|
||||
"@typescript-eslint/types" "8.33.1"
|
||||
"@typescript-eslint/typescript-estree" "8.33.1"
|
||||
|
||||
"@typescript-eslint/visitor-keys@8.32.1":
|
||||
version "8.32.1"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.32.1.tgz#4321395cc55c2eb46036cbbb03e101994d11ddca"
|
||||
integrity sha512-ar0tjQfObzhSaW3C3QNmTc5ofj0hDoNQ5XWrCy6zDyabdr0TWhCkClp+rywGNj/odAFBVzzJrK4tEq5M4Hmu4w==
|
||||
"@typescript-eslint/visitor-keys@8.33.1":
|
||||
version "8.33.1"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.33.1.tgz#6c6e002c24d13211df3df851767f24dfdb4f42bc"
|
||||
integrity sha512-3i8NrFcZeeDHJ+7ZUuDkGT+UHq+XoFGsymNK2jZCOHcfEzRQ0BdpRtdpSx/Iyf3MHLWIcLS0COuOPibKQboIiQ==
|
||||
dependencies:
|
||||
"@typescript-eslint/types" "8.32.1"
|
||||
"@typescript-eslint/types" "8.33.1"
|
||||
eslint-visitor-keys "^4.2.0"
|
||||
|
||||
"@xmldom/xmldom@^0.8.8":
|
||||
@@ -1234,10 +1250,10 @@ electron-updater@^6.6.3:
|
||||
semver "^7.6.3"
|
||||
tiny-typed-emitter "^2.1.0"
|
||||
|
||||
electron@^36.3.2:
|
||||
version "36.3.2"
|
||||
resolved "https://registry.yarnpkg.com/electron/-/electron-36.3.2.tgz#4a60f95e8d3858d01570c03b58dc2fb2f17ee8b6"
|
||||
integrity sha512-v0/j7n22CL3OYv9BIhq6JJz2+e1HmY9H4bjTk8/WzVT9JwVX/T/21YNdR7xuQ6XDSEo9gP5JnqmjOamE+CUY8Q==
|
||||
electron@^36.4.0:
|
||||
version "36.4.0"
|
||||
resolved "https://registry.yarnpkg.com/electron/-/electron-36.4.0.tgz#9463bf5fa7565ae7be3a274f7f6a46359bcfe74d"
|
||||
integrity sha512-LLOOZEuW5oqvnjC7HBQhIqjIIJAZCIFjQxltQGLfEC7XFsBoZgQ3u3iFj+Kzw68Xj97u1n57Jdt7P98qLvUibQ==
|
||||
dependencies:
|
||||
"@electron/get" "^2.0.0"
|
||||
"@types/node" "^22.7.7"
|
||||
@@ -2664,13 +2680,13 @@ prettier-plugin-organize-imports@^4.1.0:
|
||||
resolved "https://registry.yarnpkg.com/prettier-plugin-organize-imports/-/prettier-plugin-organize-imports-4.1.0.tgz#f3d3764046a8e7ba6491431158b9be6ffd83b90f"
|
||||
integrity sha512-5aWRdCgv645xaa58X8lOxzZoiHAldAPChljr/MT0crXVOWTZ+Svl4hIWlz+niYSlO6ikE5UXkN1JrRvIP2ut0A==
|
||||
|
||||
prettier-plugin-packagejson@^2.5.14:
|
||||
version "2.5.14"
|
||||
resolved "https://registry.yarnpkg.com/prettier-plugin-packagejson/-/prettier-plugin-packagejson-2.5.14.tgz#8ada09114ff60c7f42c3f8755ffb2f8152f3624f"
|
||||
integrity sha512-h+3tSpr2nVpp+YOK1MDIYtYhHVXr8/0V59UUbJpIJFaqi3w4fvUokJo6eV8W+vELrUXIZzJ+DKm5G7lYzrMcKQ==
|
||||
prettier-plugin-packagejson@^2.5.15:
|
||||
version "2.5.15"
|
||||
resolved "https://registry.yarnpkg.com/prettier-plugin-packagejson/-/prettier-plugin-packagejson-2.5.15.tgz#7ea880d4bb1681b5331ea7044efd3d653776f469"
|
||||
integrity sha512-2QSx6y4IT6LTwXtCvXAopENW5IP/aujC8fobEM2pDbs0IGkiVjW/ipPuYAHuXigbNe64aGWF7vIetukuzM3CBw==
|
||||
dependencies:
|
||||
sort-package-json "3.2.1"
|
||||
synckit "0.11.6"
|
||||
synckit "0.11.8"
|
||||
|
||||
prettier@3.5.3:
|
||||
version "3.5.3"
|
||||
@@ -3108,10 +3124,10 @@ supports-preserve-symlinks-flag@^1.0.0:
|
||||
resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
|
||||
integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
|
||||
|
||||
synckit@0.11.6:
|
||||
version "0.11.6"
|
||||
resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.11.6.tgz#e742a0c27bbc1fbc96f2010770521015cca7ed5c"
|
||||
integrity sha512-2pR2ubZSV64f/vqm9eLPz/KOvR9Dm+Co/5ChLgeHl0yEDRc6h5hXHoxEQH8Y5Ljycozd3p1k5TTSVdzYGkPvLw==
|
||||
synckit@0.11.8:
|
||||
version "0.11.8"
|
||||
resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.11.8.tgz#b2aaae998a4ef47ded60773ad06e7cb821f55457"
|
||||
integrity sha512-+XZ+r1XGIJGeQk3VvXhT6xx/VpbHsRzsTkGgF6E5RX9TTXD0118l87puaEBZ566FhqblC6U0d4XnubznJDm30A==
|
||||
dependencies:
|
||||
"@pkgr/core" "^0.2.4"
|
||||
|
||||
@@ -3235,14 +3251,14 @@ typedarray@^0.0.6:
|
||||
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
|
||||
integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==
|
||||
|
||||
typescript-eslint@^8.32.1:
|
||||
version "8.32.1"
|
||||
resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.32.1.tgz#1784335c781491be528ff84ab666e2f0f7591fd1"
|
||||
integrity sha512-D7el+eaDHAmXvrZBy1zpzSNIRqnCOrkwTgZxTu3MUqRWk8k0q9m9Ho4+vPf7iHtgUfrK/o8IZaEApsxPlHTFCg==
|
||||
typescript-eslint@^8.33.1:
|
||||
version "8.33.1"
|
||||
resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.33.1.tgz#d2d59c9b24afe1f903a855b02145802e4ae930ff"
|
||||
integrity sha512-AgRnV4sKkWOiZ0Kjbnf5ytTJXMUZQ0qhSVdQtDNYLPLnjsATEYhaO94GlRQwi4t4gO8FfjM6NnikHeKjUm8D7A==
|
||||
dependencies:
|
||||
"@typescript-eslint/eslint-plugin" "8.32.1"
|
||||
"@typescript-eslint/parser" "8.32.1"
|
||||
"@typescript-eslint/utils" "8.32.1"
|
||||
"@typescript-eslint/eslint-plugin" "8.33.1"
|
||||
"@typescript-eslint/parser" "8.33.1"
|
||||
"@typescript-eslint/utils" "8.33.1"
|
||||
|
||||
typescript@^5.4.3, typescript@^5.8.3:
|
||||
version "5.8.3"
|
||||
@@ -3405,7 +3421,7 @@ yocto-queue@^0.1.0:
|
||||
resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
|
||||
integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
|
||||
|
||||
zod@^3.25.23:
|
||||
version "3.25.23"
|
||||
resolved "https://registry.yarnpkg.com/zod/-/zod-3.25.23.tgz#128fb02f3619a8bca6bbbf6b07b457236cf33391"
|
||||
integrity sha512-Od2bdMosahjSrSgJtakrwjMDb1zM1A3VIHCPGveZt/3/wlrTWBya2lmEh2OYe4OIu8mPTmmr0gnLHIWQXdtWBg==
|
||||
zod@^3.25.51:
|
||||
version "3.25.51"
|
||||
resolved "https://registry.yarnpkg.com/zod/-/zod-3.25.51.tgz#aa2cf648e54f6f060f139cf77b694819f63c9f3a"
|
||||
integrity sha512-TQSnBldh+XSGL+opiSIq0575wvDPqu09AqWe1F7JhUMKY+M91/aGlK4MhpVNO7MgYfHcVCB1ffwAUTJzllKJqg==
|
||||
|
||||
@@ -9,11 +9,11 @@ export default defineConfig({
|
||||
cleanUrls: true,
|
||||
ignoreDeadLinks: "localhostLinks",
|
||||
vite: {
|
||||
build: {
|
||||
rollupOptions: {
|
||||
external: ['client-museum-s3.png'] // Added to handle static asset import
|
||||
}
|
||||
}
|
||||
build: {
|
||||
rollupOptions: {
|
||||
external: ["client-museum-s3.png"], // Added to handle static asset import
|
||||
},
|
||||
},
|
||||
},
|
||||
themeConfig: {
|
||||
// We use the default theme (with some CSS color overrides). This
|
||||
|
||||
@@ -2,6 +2,27 @@
|
||||
// appropriate place here.
|
||||
|
||||
export const sidebar = [
|
||||
{
|
||||
text: "Overview",
|
||||
items: [
|
||||
{
|
||||
text: "Introduction",
|
||||
link: "/overview/",
|
||||
},
|
||||
{
|
||||
text: "Community",
|
||||
link: "/overview/community",
|
||||
},
|
||||
{
|
||||
text: "Contributing",
|
||||
link: "/overview/contribute",
|
||||
},
|
||||
{
|
||||
text: "Help",
|
||||
link: "/overview/help",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "Photos",
|
||||
items: [
|
||||
@@ -292,7 +313,7 @@ export const sidebar = [
|
||||
},
|
||||
{
|
||||
text: "Bucket CORS",
|
||||
link: '/self-hosting/troubleshooting/bucket-cors'
|
||||
link: "/self-hosting/troubleshooting/bucket-cors",
|
||||
},
|
||||
{
|
||||
text: "Uploads",
|
||||
@@ -311,7 +332,7 @@ export const sidebar = [
|
||||
{
|
||||
text: "Community Guides",
|
||||
collapsed: true,
|
||||
items :[
|
||||
items: [
|
||||
{
|
||||
text: "Ente via Tailscale",
|
||||
link: "/self-hosting/guides/Tailscale",
|
||||
@@ -319,8 +340,8 @@ export const sidebar = [
|
||||
{
|
||||
text: "Ente with External S3",
|
||||
link: "/self-hosting/guides/external-s3",
|
||||
}
|
||||
]
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "FAQ",
|
||||
@@ -347,12 +368,4 @@ export const sidebar = [
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "About",
|
||||
link: "/about/",
|
||||
},
|
||||
{
|
||||
text: "Contribute",
|
||||
link: "/about/contribute",
|
||||
},
|
||||
];
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
---
|
||||
title: Contribute
|
||||
description: Details about how to contribute to Ente's docs
|
||||
---
|
||||
|
||||
# Contributing
|
||||
|
||||
To contribute to these docs, you can use the "Edit this page" button at the
|
||||
bottom of each page. This will allow you to directly edit the markdown file that
|
||||
is used to generate this documentation and open a quick pull request directly
|
||||
from GitHub's UI.
|
||||
|
||||
If you're more comfortable in contributing with your text editor, see the
|
||||
`docs/` folder of our GitHub repository,
|
||||
[github.com/ente-io/ente](https://github.com/ente-io/ente).
|
||||
@@ -10,8 +10,9 @@ A guide written by Green, an ente.io lover
|
||||
> [!WARNING]
|
||||
>
|
||||
> Authy has dropped all support for its desktop apps. It is no longer possible
|
||||
> to export data from Authy using methods 1 and 2. You will need either an iOS device
|
||||
> and computer (method 4) or a rooted Android phone (method 3) to follow this guide.
|
||||
> to export data from Authy using methods 1 and 2. You will need either an iOS
|
||||
> device and computer (method 4) or a rooted Android phone (method 3) to follow
|
||||
> this guide.
|
||||
|
||||
---
|
||||
|
||||
@@ -204,11 +205,24 @@ This uses the tool [Aegis Authenticator](https://getaegis.app/) from
|
||||
|
||||
## Method 4: Authy-iOS-MiTM
|
||||
|
||||
**Who should use this?** Technical iOS users of Authy that cannot export their tokens with methods 1 or 2 (due to those methods being patched) or method 3 (due to that method requiring a rooted Android device).
|
||||
**Who should use this?** Technical iOS users of Authy that cannot export their
|
||||
tokens with methods 1 or 2 (due to those methods being patched) or method 3 (due
|
||||
to that method requiring a rooted Android device).
|
||||
|
||||
This method works by intercepting the data the Authy app receives while logging in for the first time, which contains your encrypted authenticator tokens. After the encrypted authenticator tokens are dumped, you can decrypt them using your backup password and convert them to an Ente token file.
|
||||
This method works by intercepting the data the Authy app receives while logging
|
||||
in for the first time, which contains your encrypted authenticator tokens. After
|
||||
the encrypted authenticator tokens are dumped, you can decrypt them using your
|
||||
backup password and convert them to an Ente token file.
|
||||
|
||||
For an up-to-date guide of how to retrieve the encrypted authenticator tokens and decrypt them, please see [Authy-iOS-MiTM](https://github.com/AlexTech01/Authy-iOS-MiTM). To convert the `decrypted_tokens.json` file from that guide into a format Ente Authenticator can recognize, use [this](https://gist.github.com/gboudreau/94bb0c11a6209c82418d01a59d958c93?permalink_comment_id=5317087#gistcomment-5317087) Python script. Once you have the `ente_auth_import.plain` file from that script, transfer it to your device and follow the instructions below to import it into Ente Authenticator.
|
||||
For an up-to-date guide of how to retrieve the encrypted authenticator tokens
|
||||
and decrypt them, please see
|
||||
[Authy-iOS-MiTM](https://github.com/AlexTech01/Authy-iOS-MiTM). To convert the
|
||||
`decrypted_tokens.json` file from that guide into a format Ente Authenticator
|
||||
can recognize, use
|
||||
[this](https://gist.github.com/gboudreau/94bb0c11a6209c82418d01a59d958c93?permalink_comment_id=5317087#gistcomment-5317087)
|
||||
Python script. Once you have the `ente_auth_import.plain` file from that script,
|
||||
transfer it to your device and follow the instructions below to import it into
|
||||
Ente Authenticator.
|
||||
|
||||
## Importing to Ente Authenticator (Method 1, method 2.1, method 4)
|
||||
|
||||
|
||||
@@ -10,4 +10,4 @@ Ende-zu-Ende-verschlüsselte Authenticator-App für jedermann. Wir sind froh, da
|
||||
du hier bist!
|
||||
|
||||
**Please note that this German translation is currently just a placeholder.**
|
||||
Know German? [Help us fill this in!](/about/contribute).
|
||||
Know German? [Help us fill this in!](/overview/contribute).
|
||||
|
||||
@@ -11,5 +11,5 @@ Use the **sidebar** menu to navigate to information about the product (Photos or
|
||||
Auth) you'd like to know more about. Or use the **search** at the top to try and
|
||||
jump directly to page that might contain the information you need.
|
||||
|
||||
To know more about Ente, see [about](/about/) or visit our website
|
||||
To know more about Ente, see [overview](/overview/) or visit our website
|
||||
[ente.io](https://ente.io).
|
||||
|
||||
21
docs/docs/overview/community.md
Normal file
@@ -0,0 +1,21 @@
|
||||
---
|
||||
title: Community
|
||||
description: >
|
||||
Information regarding Ente's community channels
|
||||
---
|
||||
|
||||
# Community
|
||||
|
||||
We are building Ente in the open with our community on
|
||||
[GitHub](https://github.com/ente-io/ente) and [Discord](https://ente.io/discord)
|
||||
|
||||
## Blog
|
||||
|
||||
To stay up to date with new product launches, and behind the scenes details of
|
||||
how we're building Ente, you can read our [blog](https://ente.io/blog) (or
|
||||
subscribe to it via [RSS](https://ente.io/blog/rss.xml))
|
||||
|
||||
## Socials
|
||||
|
||||
You can also follow us on [Twitter](https://twitter.com/enteio) or toot to us on
|
||||
[Mastodon](https://mstdn.social/@ente)
|
||||
29
docs/docs/overview/contribute.md
Normal file
@@ -0,0 +1,29 @@
|
||||
---
|
||||
title: Contribute
|
||||
description: Details about how to contribute to Ente
|
||||
---
|
||||
|
||||
# Contributing
|
||||
|
||||
There are many ways to contribute to Ente. By spreading the word, engaging with
|
||||
our community, helping us with translations or documentation.
|
||||
|
||||
You can find our contribution guidelines
|
||||
[here](https://github.com/ente-io/ente/blob/main/CONTRIBUTING.md).
|
||||
|
||||
## Suggesting features
|
||||
|
||||
To suggest new features and/or offer your perspective on how we should design
|
||||
(planned and upcoming features), use our
|
||||
[GitHub discussions](https://github.com/ente-io/ente/discussions)
|
||||
|
||||
## Documentation
|
||||
|
||||
To contribute to these docs, you can use the "Edit this page" button at the
|
||||
bottom of each page. This will allow you to directly edit the markdown file that
|
||||
is used to generate this documentation and open a quick pull request directly
|
||||
from GitHub's UI.
|
||||
|
||||
If you're more comfortable in contributing with your text editor, see the
|
||||
`docs/` folder of our GitHub repository,
|
||||
[github.com/ente-io/ente](https://github.com/ente-io/ente).
|
||||
|
Before Width: | Height: | Size: 87 KiB After Width: | Height: | Size: 87 KiB |
13
docs/docs/overview/help.md
Normal file
@@ -0,0 +1,13 @@
|
||||
---
|
||||
title: Help
|
||||
description: Get help from Ente via customer support and community
|
||||
---
|
||||
|
||||
# Help
|
||||
|
||||
If you encounter any issues with any of the products that's not answered by our
|
||||
[docs](/), please reach out to our team by sending an email to
|
||||
[support@ente.io](mailto:support@ente.io)
|
||||
|
||||
For community support, please post your queries on
|
||||
[Discord](https://discord.gg/z2YVKkycX3)
|
||||
@@ -1,5 +1,5 @@
|
||||
---
|
||||
title: About Ente
|
||||
title: Introduction
|
||||
description: >
|
||||
An overview of Ente: the company, and the people behind it, and the products
|
||||
that we make.
|
||||
@@ -7,17 +7,17 @@ description: >
|
||||
|
||||
# About
|
||||
|
||||
Ente is a end-to-end encrypted platform for privately, reliably, and securely
|
||||
storing your data on the cloud. On top of this platform, Ente offers two
|
||||
products:
|
||||
Ente (pronounced en-_tay_. Like ca<i>fe</i>) is a end-to-end encrypted platform
|
||||
for privately, reliably, and securely storing your data on the cloud. On top of
|
||||
this platform, Ente offers two products:
|
||||
|
||||
- **Ente Photos** - An alternative to Google Photos and Apple Photos
|
||||
|
||||
- **Ente Auth** - A free 2FA alternative to Authy
|
||||
|
||||
Both these apps are available for all desktop (Linux, Mac, Windows) and mobile
|
||||
(Android, iOS and F-Droid) platforms. They also work directly in your web
|
||||
browser without you needing to install anything.
|
||||
(Android and iOS) platforms. They also work directly in your web browser without
|
||||
you needing to install anything.
|
||||
|
||||
More products are in the pipeline.
|
||||
|
||||
@@ -48,25 +48,3 @@ the name, and also led to the adoption of "Ducky", Ente's mascot:
|
||||
|
||||
For the full origin story of Ducky you can check out
|
||||
[this blog post](https://ente.io/blog/ducky/).
|
||||
|
||||
### How do I pronounce Ente?
|
||||
|
||||
en-_tay_. Like ca<i>fe</i>.
|
||||
|
||||
## Get in touch
|
||||
|
||||
If you have a support query that is not answered by these docs, please reach out
|
||||
to our Customer Support by sending an email to support@ente.io
|
||||
|
||||
To stay up to date with new product launches, and behind the scenes details of
|
||||
how we're building Ente, you can read our [blog](https://ente.io/blog) (or
|
||||
subscribe to it via [RSS](https://ente.io/blog/rss.xml))
|
||||
|
||||
To suggest new features and/or offer your perspective on how we should design
|
||||
planned and upcoming features, use our
|
||||
[GitHub discussions](https://github.com/ente-io/ente/discussions)
|
||||
|
||||
Or if you'd just like to hang out, join our
|
||||
[Discord](https://discord.gg/z2YVKkycX3), follow us on
|
||||
[Twitter](https://twitter.com/enteio) or give us a shout out on
|
||||
[Mastodon](https://mstdn.social/@ente)
|
||||
@@ -1,6 +1,7 @@
|
||||
---
|
||||
title: Desktop app FAQ
|
||||
description: An assortment of frequently asked questions about Ente Photos desktop app
|
||||
description:
|
||||
An assortment of frequently asked questions about Ente Photos desktop app
|
||||
---
|
||||
|
||||
# Desktop app FAQ
|
||||
@@ -15,7 +16,8 @@ to manually update the software.
|
||||
|
||||
### Upload errors
|
||||
|
||||
**How do I identify which files experienced upload issues within the desktop app?**
|
||||
**How do I identify which files experienced upload issues within the desktop
|
||||
app?**
|
||||
|
||||
Check the sections within the upload progress bar for "Failed Uploads," "Ignored
|
||||
Uploads," and "Unsuccessful Uploads."
|
||||
@@ -33,6 +35,5 @@ be specific to your distro (e.g. `xdg-desktop-menu forceupdate`).
|
||||
|
||||
> [!NOTE]
|
||||
>
|
||||
> If you're using an AppImage and not seeing the icon, you'll need to [enable
|
||||
> AppImage desktop
|
||||
> integration](/photos/troubleshooting/desktop-install/#appimage-desktop-integration).
|
||||
> If you're using an AppImage and not seeing the icon, you'll need to
|
||||
> [enable AppImage desktop integration](/photos/troubleshooting/desktop-install/#appimage-desktop-integration).
|
||||
|
||||
@@ -7,9 +7,10 @@ description: Frequently asked questions about keeping extra backups of your data
|
||||
|
||||
## How can I backup my data in a local drive outside Ente?
|
||||
|
||||
You can use our CLI tool or our desktop app to set up exports of your data
|
||||
to your local drive. This way, you can use Ente in your day to day use, with an additional guarantee that a copy of your original photos and videos are
|
||||
always available on your machine.
|
||||
You can use our CLI tool or our desktop app to set up exports of your data to
|
||||
your local drive. This way, you can use Ente in your day to day use, with an
|
||||
additional guarantee that a copy of your original photos and videos are always
|
||||
available on your machine.
|
||||
|
||||
- You can use [Ente's CLI](https://github.com/ente-io/ente/tree/main/cli#export)
|
||||
to export your data in a cron job to a location of your choice. The exports
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
title: Face recognition
|
||||
description:
|
||||
Frequently asked questions about Ente's face recognition
|
||||
description: Frequently asked questions about Ente's face recognition
|
||||
---
|
||||
|
||||
# Face recognition
|
||||
|
||||
@@ -26,7 +26,6 @@ unsupported file format and we will do our best to help you out.
|
||||
|
||||
Yes, we currently do not support files larger than 4 GB.
|
||||
|
||||
|
||||
## Does Ente support videos?
|
||||
|
||||
Ente supports backing up and downloading of videos in their original format and
|
||||
@@ -101,29 +100,53 @@ clicking on "Your map" under "Locations" on the search screen.
|
||||
|
||||
## How to reset my password if I lost it?
|
||||
|
||||
On the login page, enter your email and click on Forgot Password. Then, enter your recovery key and create a new password.
|
||||
On the login page, enter your email and click on Forgot Password. Then, enter
|
||||
your recovery key and create a new password.
|
||||
|
||||
# iOS Album Backup and Organization in Ente
|
||||
## Can I search for photos using the descriptions I’ve added?
|
||||
|
||||
### How does Ente handle photos that are part of multiple iOS albums?
|
||||
When you select multiple albums for backup, Ente prioritizes uploading each photo to the album with the fewest photos. This means a photo will only be uploaded once, even if it exists in multiple albums on your device. If you create new albums on your device after the initial backup, those photos may not appear in the corresponding Ente album if they were already uploaded to a different album.
|
||||
Yes, descriptions are searchable, making it easier to find specific photos
|
||||
later. To do this, open the photo, tap the (i) button, and enter your
|
||||
description.
|
||||
|
||||
## How does the deduplication feature work on the desktop app?
|
||||
|
||||
### Why don’t all photos from a new iOS album appear in the corresponding Ente album?
|
||||
If you create a new album on your device after the initial backup, the photos in that album may have already been uploaded to another album in Ente. To fix this, go to the "On Device" album in Ente, select all photos, and manually add them to the corresponding album in Ente.
|
||||
If the app finds exact duplicates, it will show them in the deduplication. When
|
||||
you delete a duplicate, the app keeps one copy and creates a symlink for the
|
||||
other duplicate. This helps save storage space.
|
||||
|
||||
### What happens if I reorganize my photos in the iOS Photos app after backing up?
|
||||
Reorganizing photos in the iOS Photos app (e.g., moving photos to new albums) won’t automatically reflect in Ente. You’ll need to manually add those photos to the corresponding albums in Ente to maintain consistency.
|
||||
## What happens if I lose access to my email address? Can I use my recovery key to bypass email verification?
|
||||
|
||||
### Can I search for photos using the descriptions I’ve added?
|
||||
Yes, descriptions are searchable, making it easier to find specific photos later.
|
||||
To do this, open the photo, tap the (i) button, and enter your description.
|
||||
|
||||
### How does the deduplication feature work on the desktop app?
|
||||
If the app finds exact duplicates, it will show them in the deduplication. When you delete a duplicate, the app keeps one copy and creates a symlink for the other duplicate. This helps save storage space.
|
||||
|
||||
### What happens if I lose access to my email address? Can I use my recovery key to bypass email verification?
|
||||
No, the recovery key does not bypass email verification. For security reasons, we do not disable or bypass email verification unless the account owner reaches out to us and successfully verifies their identity by providing details about their account.
|
||||
No, the recovery key does not bypass email verification. For security reasons,
|
||||
we do not disable or bypass email verification unless the account owner reaches
|
||||
out to us and successfully verifies their identity by providing details about
|
||||
their account.
|
||||
|
||||
If you lose access to your email, please contact our support team at
|
||||
support@ente.io
|
||||
|
||||
---
|
||||
|
||||
# iOS Album Backup and Organization in Ente
|
||||
|
||||
## How does Ente handle photos that are part of multiple iOS albums?
|
||||
|
||||
When you select multiple albums for backup, Ente prioritizes uploading each
|
||||
photo to the album with the fewest photos. This means a photo will only be
|
||||
uploaded once, even if it exists in multiple albums on your device. If you
|
||||
create new albums on your device after the initial backup, those photos may not
|
||||
appear in the corresponding Ente album if they were already uploaded to a
|
||||
different album.
|
||||
|
||||
## Why don’t all photos from a new iOS album appear in the corresponding Ente album?
|
||||
|
||||
If you create a new album on your device after the initial backup, the photos in
|
||||
that album may have already been uploaded to another album in Ente. To fix this,
|
||||
go to the "On Device" album in Ente, select all photos, and manually add them to
|
||||
the corresponding album in Ente.
|
||||
|
||||
## What happens if I reorganize my photos in the iOS Photos app after backing up?
|
||||
|
||||
Reorganizing photos in the iOS Photos app (e.g., moving photos to new albums)
|
||||
won’t automatically reflect in Ente. You’ll need to manually add those photos to
|
||||
the corresponding albums in Ente to maintain consistency.
|
||||
|
||||
@@ -62,6 +62,7 @@ the upload time as the photo's creation time.
|
||||
## Modifications
|
||||
|
||||
Ente supports modifications to the following metadata:
|
||||
|
||||
- File name
|
||||
- Date & time
|
||||
- Location
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
title: Video streaming FAQ
|
||||
description:
|
||||
Frequently asked questions about Ente's video streaming feature
|
||||
description: Frequently asked questions about Ente's video streaming feature
|
||||
---
|
||||
|
||||
# Video streaming
|
||||
@@ -78,6 +77,7 @@ generated stream.
|
||||
While this feature is in beta, we will not count the storage consumed by your
|
||||
streams against your storage quota. This may change in the future. If it does,
|
||||
we will provide an option to opt-in to one of the following:
|
||||
|
||||
1. Original videos only
|
||||
2. Compressed streams only
|
||||
3. Both
|
||||
|
||||
@@ -43,8 +43,8 @@ need to disable this "Optimize battery usage" mode in the system settings for
|
||||
Ente if you wish for Ente to automatically back up your photos in the
|
||||
background.
|
||||
|
||||
On Android versions 15 and later, if an app is in private space and the private
|
||||
space is locked, Android doesn’t allow the app to run any background processes.
|
||||
On Android versions 15 and later, if an app is in private space and the private
|
||||
space is locked, Android doesn’t allow the app to run any background processes.
|
||||
As a result, background sync will not work.
|
||||
|
||||
### Desktop
|
||||
|
||||
@@ -52,6 +52,11 @@ Ente also provides a tool for manual de-duplication in _Settings → Backup →
|
||||
Remove duplicates_. This is useful if you have an existing library with
|
||||
duplicates across different albums, but wish to keep only one copy.
|
||||
|
||||
During this operation, Ente will discard duplicates across all albums, retain a
|
||||
single copy, and add symlinks to this copy within all existing albums. So your
|
||||
existing album structure remains unchanged, while the space consumed by the
|
||||
duplicate data is freed up.
|
||||
|
||||
## Adding to Ente album creates symlinks
|
||||
|
||||
Note that once a file is in Ente, adding it to another Ente album will create a
|
||||
|
||||
@@ -24,19 +24,19 @@ In brief,
|
||||
|
||||
## Storage Limits
|
||||
|
||||
If you're an admin of a family, you will be able to set storage limits for the
|
||||
If you're an admin of a family, you will be able to set storage limits for the
|
||||
members in your family plan.
|
||||
|
||||
In brief,
|
||||
In brief,
|
||||
|
||||
- For example, once you set a limit of 10GB for a member, their Storage
|
||||
quota for uploading photos will be limited to 10GB.
|
||||
- For example, once you set a limit of 10GB for a member, their Storage quota
|
||||
for uploading photos will be limited to 10GB.
|
||||
|
||||
- Once the invited member accepts the Family invite, you will be able to see
|
||||
an edit icon in the Members List. Click on it to setup a family limit.
|
||||
- Once the invited member accepts the Family invite, you will be able to see an
|
||||
edit icon in the Members List. Click on it to setup a family limit.
|
||||
|
||||
- If the admin has set a limit for any user, that limit value will be prefilled
|
||||
in the input box.
|
||||
in the input box.
|
||||
|
||||
- If you want to remove any storage limit from a members account, you
|
||||
can click on the "Remove Limit" and they can upload photos without any limit.
|
||||
- If you want to remove any storage limit from a members account, you can click
|
||||
on the "Remove Limit" and they can upload photos without any limit.
|
||||
|
||||
@@ -3,7 +3,7 @@ title: Creating accounts
|
||||
description: Creating accounts on your deployment
|
||||
---
|
||||
|
||||
# Creating accounts
|
||||
# Creating accounts
|
||||
|
||||
Once Ente is up and running, the Ente Photos web app will be accessible on
|
||||
`http://localhost:3000`. Open this URL in your browser and proceed with creating
|
||||
@@ -20,7 +20,7 @@ This code can be found in the server logs, which should already be shown in your
|
||||
quickstart terminal. Alternatively, you can open the server logs with the
|
||||
following command from inside the `my-ente` folder:
|
||||
|
||||
```sh
|
||||
```sh
|
||||
sudo docker compose logs
|
||||
```
|
||||
|
||||
|
||||
@@ -1,10 +1,14 @@
|
||||
---
|
||||
title: "Environment Variables and Ports"
|
||||
description: "Information about all the Environment Variables needed to run Ente"
|
||||
description:
|
||||
"Information about all the Environment Variables needed to run Ente"
|
||||
---
|
||||
|
||||
# Environment variables and ports
|
||||
A self-hosted Ente instance requires specific endpoints in both Museum (the server) and web apps. This document outlines the essential environment variables and port mappings of the web apps.
|
||||
|
||||
A self-hosted Ente instance requires specific endpoints in both Museum (the
|
||||
server) and web apps. This document outlines the essential environment variables
|
||||
and port mappings of the web apps.
|
||||
|
||||
Here's the list of important variables that a self hoster should know about:
|
||||
|
||||
@@ -12,34 +16,33 @@ Here's the list of important variables that a self hoster should know about:
|
||||
|
||||
1. `NEXT_PUBLIC_ENTE_ENDPOINT`
|
||||
|
||||
The above environment variable is used to configure Museums endpoint. Where Museum is
|
||||
running and which port it is listening on. This endpoint should be configured for
|
||||
all the apps to connect to your self hosted endpoint.
|
||||
The above environment variable is used to configure Museums endpoint. Where
|
||||
Museum is running and which port it is listening on. This endpoint should be
|
||||
configured for all the apps to connect to your self hosted endpoint.
|
||||
|
||||
All the apps (regardless of platform) by default connect to api.ente.io - which is
|
||||
our production instance of Museum.
|
||||
All the apps (regardless of platform) by default connect to api.ente.io - which
|
||||
is our production instance of Museum.
|
||||
|
||||
### Web Apps
|
||||
|
||||
> [!IMPORTANT]
|
||||
> Web apps don't need to be configured with the below endpoints. Web app environment
|
||||
> variables are being documented here just so that the users know everything in detail.
|
||||
> Checkout [Configuring your Server](/self-hosting/museum) to configure endpoints for
|
||||
> [!IMPORTANT] Web apps don't need to be configured with the below endpoints.
|
||||
> Web app environment variables are being documented here just so that the users
|
||||
> know everything in detail. Checkout
|
||||
> [Configuring your Server](/self-hosting/museum) to configure endpoints for
|
||||
> particular app.
|
||||
|
||||
In Ente, all the web apps are separate NextJS applications. Therefore, they are all
|
||||
configured via environment variables. The photos app (Ente Photos) has information
|
||||
about and connects to other web apps like albums, cast, etc.
|
||||
|
||||
In Ente, all the web apps are separate NextJS applications. Therefore, they are
|
||||
all configured via environment variables. The photos app (Ente Photos) has
|
||||
information about and connects to other web apps like albums, cast, etc.
|
||||
|
||||
1. `NEXT_PUBLIC_ENTE_ALBUMS_ENDPOINT`
|
||||
|
||||
This environment variable is used to configure and declare the endpoint for the Albums
|
||||
web app.
|
||||
This environment variable is used to configure and declare the endpoint for the
|
||||
Albums web app.
|
||||
|
||||
## Ports
|
||||
|
||||
The below format is according to how ports are mapped in Docker.
|
||||
The below format is according to how ports are mapped in Docker.
|
||||
Typically,`<host>:<container-port>`
|
||||
|
||||
1. `8080:8080`: Museum (Ente's server)
|
||||
|
||||
@@ -2,39 +2,63 @@
|
||||
title: Self Hosting with Tailscale (Community)
|
||||
description: Guides for self-hosting Ente Photos and/or Ente Auth with Tailscale
|
||||
---
|
||||
|
||||
# Guide
|
||||
|
||||
This guide aims to achieve self-hosting Ente photos or Ente-Auth with tailscale (TSDPROXY) without exposing any port OR if someone is behind CGNAT and cannot open any port on the internet but want to run their own selfhosted service for themselves, friends and family only.
|
||||
This guide aims to achieve self-hosting Ente photos or Ente-Auth with tailscale
|
||||
(TSDPROXY) without exposing any port OR if someone is behind CGNAT and cannot
|
||||
open any port on the internet but want to run their own selfhosted service for
|
||||
themselves, friends and family only.
|
||||
|
||||
Before getting start keep the following NOTE in mind.
|
||||
|
||||
> [!NOTE]
|
||||
> If someone is behind double or triple CGNAT; must install tailscale system wide by running `curl -fsSL https://tailscale.com/install.sh | sh` in your linux terminal and `sudo tailscale up` otherwise dns resolver will fail and uploading will not work. This is not necessary for those who are not behing CGNAT.
|
||||
> This guide also work on docker rootless and normal.
|
||||
> [!NOTE] If someone is behind double or triple CGNAT; must install tailscale
|
||||
> system wide by running `curl -fsSL https://tailscale.com/install.sh | sh` in
|
||||
> your linux terminal and `sudo tailscale up` otherwise dns resolver will fail
|
||||
> and uploading will not work. This is not necessary for those who are not
|
||||
> behing CGNAT. This guide also work on docker rootless and normal.
|
||||
|
||||
> [!CAUTION]
|
||||
Remember that current docker update 28.0.0 has some bug and cannot connect to external network. Make sure to install docker-ce 27.5.0, docker-ce-rootless-extras 27.5.0 and docker-ce-cli 27.5.0. Hopefully docker 28.1.0 will resolve this issue in next week. Refrence links are [Moby Github Repo Issues 49511](https://github.com/moby/moby/issues/49511) and [Moby Github Repo Issues 49519](https://github.com/moby/moby/issues/49519)
|
||||
> [!CAUTION] Remember that current docker update 28.0.0 has some bug and cannot
|
||||
> connect to external network. Make sure to install docker-ce 27.5.0,
|
||||
> docker-ce-rootless-extras 27.5.0 and docker-ce-cli 27.5.0. Hopefully docker
|
||||
> 28.1.0 will resolve this issue in next week. Refrence links are
|
||||
> [Moby Github Repo Issues 49511](https://github.com/moby/moby/issues/49511) and
|
||||
> [Moby Github Repo Issues 49519](https://github.com/moby/moby/issues/49519)
|
||||
|
||||
> [!IMPORTANT]
|
||||
> For Docker rootless, the user must have local permissions for all directories required by the Ente-photos self-hosted server. This can be achieved by running `sudo chown -R 1000:1000 /home/ubuntu/docker/ente`. In the Linux terminal, you can check the UID with `id -u` or simply `id`. The first user typically has UID 1000.
|
||||
> To allow listening and pinging on any port without root privileges, create a file called `/etc/sysctl.d/99-rootless.conf` with the following content:
|
||||
> [!IMPORTANT] For Docker rootless, the user must have local permissions for all
|
||||
> directories required by the Ente-photos self-hosted server. This can be
|
||||
> achieved by running `sudo chown -R 1000:1000 /home/ubuntu/docker/ente`. In the
|
||||
> Linux terminal, you can check the UID with `id -u` or simply `id`. The first
|
||||
> user typically has UID 1000. To allow listening and pinging on any port
|
||||
> without root privileges, create a file called `/etc/sysctl.d/99-rootless.conf`
|
||||
> with the following content:
|
||||
>
|
||||
> ```
|
||||
> net.ipv4.ip_unprivileged_port_start=0
|
||||
> net.ipv4.ping_group_range = 0 2147483647
|
||||
> ```
|
||||
> than run `sudo sysctl --system`.
|
||||
> Create `~/.config/systemd/user/docker.service.d/override.conf` with the following content:
|
||||
>
|
||||
> than run `sudo sysctl --system`. Create
|
||||
> `~/.config/systemd/user/docker.service.d/override.conf` with the following
|
||||
> content:
|
||||
>
|
||||
> ```
|
||||
> [Service]
|
||||
> Environment="DOCKERD_ROOTLESS_ROOTLESSKIT_NET=slirp4netns"
|
||||
> Environment="DOCKERD_ROOTLESS_ROOTLESSKIT_PORT_DRIVER=slirp4netns"
|
||||
> ```
|
||||
> and Restart the docker daemon
|
||||
> `systemctl --user restart docker`
|
||||
> Instead of `--volume /var/run/docker.sock:/var/run/docker.sock` in TSDPROXY compose.yaml, use `--volume $XDG_RUNTIME_DIR/docker.sock:/var/run/docker.sock`
|
||||
>
|
||||
> and Restart the docker daemon `systemctl --user restart docker` Instead of
|
||||
> `--volume /var/run/docker.sock:/var/run/docker.sock` in TSDPROXY compose.yaml,
|
||||
> use `--volume $XDG_RUNTIME_DIR/docker.sock:/var/run/docker.sock`
|
||||
|
||||
## GETTING START WITH SETUP
|
||||
|
||||
First of all create a directory
|
||||
`sudo mkdir -p /home/ubuntu/docker/tsdproxy/config` than `cd docker/tsdproxy`
|
||||
and create compose.yaml file by running `sudo nano compose.yaml`. Populate it
|
||||
with the following:
|
||||
|
||||
## GETTING START WITH SETUP ##
|
||||
First of all create a directory `sudo mkdir -p /home/ubuntu/docker/tsdproxy/config` than `cd docker/tsdproxy` and create compose.yaml file by running `sudo nano compose.yaml`. Populate it with the following:
|
||||
```
|
||||
services:
|
||||
tsdproxy:
|
||||
@@ -62,9 +86,18 @@ networks:
|
||||
proxy:
|
||||
name: proxy
|
||||
```
|
||||
Now login into your tailscale account admin counsle > settings > keys > Generate authkey. Give any description and must select resuable, because the key get purged if not selected after rebooting machine. It is advisable to create **Tags** in **ACLs settings** `tag: tsdproxy` `tag: ente` `tag: minio` as well. This will create a tag nodes with no key expirory. One is safe to reboot restart docker or machine.
|
||||
> Copy the generated authkey as it is shown only once.
|
||||
Make tsdproxy.yaml file in `cd docker/tsdproxy/config` by running `sudo nano tsdproxy.yaml` and pupolate it with the following contant:
|
||||
|
||||
Now login into your tailscale account admin counsle > settings > keys > Generate
|
||||
authkey. Give any description and must select resuable, because the key get
|
||||
purged if not selected after rebooting machine. It is advisable to create
|
||||
**Tags** in **ACLs settings** `tag: tsdproxy` `tag: ente` `tag: minio` as well.
|
||||
This will create a tag nodes with no key expirory. One is safe to reboot restart
|
||||
docker or machine.
|
||||
|
||||
> Copy the generated authkey as it is shown only once. Make tsdproxy.yaml file
|
||||
> in `cd docker/tsdproxy/config` by running `sudo nano tsdproxy.yaml` and
|
||||
> pupolate it with the following contant:
|
||||
|
||||
```
|
||||
defaultproxyprovider: default
|
||||
docker:
|
||||
@@ -87,12 +120,20 @@ log:
|
||||
json: false
|
||||
proxyaccesslog: true
|
||||
```
|
||||
In the same directory run `sudo nano authkey` and paste the authkey just copied earlier from tailscale admin counsel.
|
||||
> Here Tailscale (TSDPROXY) setup is complet in all respect. Just run `docker compose up -d`. Check your tailscale amdin counsel and you will see tsdproxy node up and running. Make sure that **HTTPS** is enabled in tailscale DNS settings.
|
||||
> You can visit the TSDPROXY web GUI by https://tsdproxy.xyz.ts.net. (xyz is change value for everyone)
|
||||
|
||||
## ente Part ##
|
||||
In the same directory run `sudo nano authkey` and paste the authkey just copied
|
||||
earlier from tailscale admin counsel.
|
||||
|
||||
> Here Tailscale (TSDPROXY) setup is complet in all respect. Just run
|
||||
> `docker compose up -d`. Check your tailscale amdin counsel and you will see
|
||||
> tsdproxy node up and running. Make sure that **HTTPS** is enabled in tailscale
|
||||
> DNS settings. You can visit the TSDPROXY web GUI by
|
||||
> https://tsdproxy.xyz.ts.net. (xyz is change value for everyone)
|
||||
|
||||
## ente Part
|
||||
|
||||
First make the following necessary files/directories:
|
||||
|
||||
```
|
||||
sudo mkdir -p /home/ubuntu/docker/ente/custom-logs
|
||||
sudo mkdir -p /home/ubuntu/docker/ente/data
|
||||
@@ -100,9 +141,14 @@ sudo mkdir -p /home/ubuntu/docker/ente/minio-data
|
||||
sudo mkdir -p /home/ubuntu/docker/ente/postgres-data
|
||||
sudo mkdir -p /home/ubuntu/docker/ente/scripts/compose
|
||||
```
|
||||
Than give user permission for each of the above directory. `sudo chown -R 1000:1000 /home/ubuntu/docker/ente/custom-logs` etc etc. Make sure not to skip `/home/ubuntu/docker/tsdproxy/config`
|
||||
|
||||
`cd docker/ente/script/compose` and run `sudo nano credentials.yaml` than populate it with the following:
|
||||
Than give user permission for each of the above directory.
|
||||
`sudo chown -R 1000:1000 /home/ubuntu/docker/ente/custom-logs` etc etc. Make
|
||||
sure not to skip `/home/ubuntu/docker/tsdproxy/config`
|
||||
|
||||
`cd docker/ente/script/compose` and run `sudo nano credentials.yaml` than
|
||||
populate it with the following:
|
||||
|
||||
```
|
||||
db:
|
||||
host: postgres
|
||||
@@ -134,7 +180,9 @@ s3:
|
||||
bucket: scw-eu-fr-v3
|
||||
```
|
||||
|
||||
In the same directory run `sudo nano minio-provision.sh` and populate it with the following contant:
|
||||
In the same directory run `sudo nano minio-provision.sh` and populate it with
|
||||
the following contant:
|
||||
|
||||
```
|
||||
#!/bin/sh
|
||||
|
||||
@@ -154,7 +202,9 @@ mc mb -p wasabi-eu-central-2-v3
|
||||
mc mb -p scw-eu-fr-v3
|
||||
```
|
||||
|
||||
Now `cd docker/ente` and run `sudo nano docker-compose.yaml` and populate it with the following:
|
||||
Now `cd docker/ente` and run `sudo nano docker-compose.yaml` and populate it
|
||||
with the following:
|
||||
|
||||
```
|
||||
services:
|
||||
museum:
|
||||
@@ -255,32 +305,52 @@ services:
|
||||
networks:
|
||||
ente:
|
||||
name: ente
|
||||
|
||||
|
||||
proxy:
|
||||
external: true
|
||||
```
|
||||
|
||||
> Thats it. Run `docker compose up -d`. Wait till every container become healthy. Open web browser. Make sure tailscale is installed on the machine. Visit https://ente.xyz.ts.net/ping. It will pong. All good if you see it. First time it will take minute or two to get SSL cert. Downnload Desktop or mobile app. Tap 7 time on the screen, which will prompt developer mode. Add https://ente.xyz.ts.net. Add new user. When asked for OTP. Just go to linux terminal and run `docker logs ente-museum-1`. Search for userauth. Feed the six digit and Done.
|
||||
> Thats it. Run `docker compose up -d`. Wait till every container become
|
||||
> healthy. Open web browser. Make sure tailscale is installed on the machine.
|
||||
> Visit https://ente.xyz.ts.net/ping. It will pong. All good if you see it.
|
||||
> First time it will take minute or two to get SSL cert. Downnload Desktop or
|
||||
> mobile app. Tap 7 time on the screen, which will prompt developer mode. Add
|
||||
> https://ente.xyz.ts.net. Add new user. When asked for OTP. Just go to linux
|
||||
> terminal and run `docker logs ente-museum-1`. Search for userauth. Feed the
|
||||
> six digit and Done.
|
||||
|
||||
> For getting 100TB (limitless) storage. Just Install ente-cli for windows.
|
||||
> Extract it and add folder. Name it **export**. Add config.yaml file along and
|
||||
> populate it with the following:
|
||||
|
||||
> For getting 100TB (limitless) storage. Just Install ente-cli for windows. Extract it and add folder. Name it **export**. Add config.yaml file along and populate it with the following:
|
||||
```
|
||||
endpoint:
|
||||
api: "https://ente.xyz.ts.net"
|
||||
accounts: "http://localhost:3001"
|
||||
|
||||
|
||||
log: false
|
||||
```
|
||||
Right-Click in the directory where you have extracted ente-cli. Select `open in terminal`. Run
|
||||
|
||||
Right-Click in the directory where you have extracted ente-cli. Select
|
||||
`open in terminal`. Run
|
||||
|
||||
```
|
||||
.\ente.exe account bob # change bob to yours
|
||||
```
|
||||
Hit Enter twice.
|
||||
For export directory, just write export. As already created **export** folder earlier.
|
||||
**Write email. The one which is already used befor when creating ente account in ente desktop app.**
|
||||
Type the same Password used before for the account.Run
|
||||
|
||||
Hit Enter twice. For export directory, just write export. As already created
|
||||
**export** folder earlier. **Write email. The one which is already used befor
|
||||
when creating ente account in ente desktop app.** Type the same Password used
|
||||
before for the account.Run
|
||||
|
||||
```
|
||||
.\ente.ext account list
|
||||
```
|
||||
|
||||
This will list all account details. Copy Acount ID.
|
||||
> Navigate to museum.yaml file. `cd docker/ente`. Run `sudo nano museum.yaml` and add the account ID under Admins. Delete any previous entries.
|
||||
Restart ente-museum-1 container from linux terminal. Run `docker restart ente-museum-1`. All well, now you will have 100TB storage. Repeat if for any other accounts you want to give unlimited storage access.
|
||||
|
||||
> Navigate to museum.yaml file. `cd docker/ente`. Run `sudo nano museum.yaml`
|
||||
> and add the account ID under Admins. Delete any previous entries. Restart
|
||||
> ente-museum-1 container from linux terminal. Run
|
||||
> `docker restart ente-museum-1`. All well, now you will have 100TB storage.
|
||||
> Repeat if for any other accounts you want to give unlimited storage access.
|
||||
|
||||
@@ -14,7 +14,7 @@ explicit whitelist of admins.
|
||||
|
||||
> [!NOTE]
|
||||
>
|
||||
> The first user is only treated as the admin if the list of admins in the
|
||||
> The first user is only treated as the admin if the list of admins in the
|
||||
> configuration is empty.
|
||||
>
|
||||
> Also, if at some point you delete the first user, then you will need to define
|
||||
@@ -54,11 +54,10 @@ command to find the user id of any account.
|
||||
|
||||
# Administering your custom server
|
||||
|
||||
> [!NOTE]
|
||||
> For the first user (admin) to perform administrative actions using the CLI, their
|
||||
> userID must be whitelisted in the `museum.yaml` configuration file under
|
||||
> `internal.admins`. While the first user is automatically granted admin privileges
|
||||
> on the server, this additional step is required for CLI operations.
|
||||
> [!NOTE] For the first user (admin) to perform administrative actions using the
|
||||
> CLI, their userID must be whitelisted in the `museum.yaml` configuration file
|
||||
> under `internal.admins`. While the first user is automatically granted admin
|
||||
> privileges on the server, this additional step is required for CLI operations.
|
||||
|
||||
You can use
|
||||
[Ente's CLI](https://github.com/ente-io/ente/releases?q=tag%3Acli-v0) to
|
||||
|
||||
@@ -29,7 +29,7 @@ A file upload flows as follows:
|
||||
The upshot of this is that _both_ the client and museum should be able to reach
|
||||
your S3 bucket.
|
||||
|
||||
## Configuring S3
|
||||
## Configuring S3
|
||||
|
||||
The URL for the S3 bucket is configured in
|
||||
[scripts/compose/credentials.yaml](https://github.com/ente-io/ente/blob/main/server/scripts/compose/credentials.yaml#L10).
|
||||
@@ -38,9 +38,8 @@ You can edit this file directly while testing, though it is more robust to
|
||||
create a `museum.yaml` (in the same folder as the Docker compose file) and to
|
||||
setup your custom configuration there.
|
||||
|
||||
> [!TIP]
|
||||
> For more details about these configuration objects, see the documentation for
|
||||
> the `s3` object in
|
||||
> [!TIP] For more details about these configuration objects, see the
|
||||
> documentation for the `s3` object in
|
||||
> [configurations/local.yaml](https://github.com/ente-io/ente/blob/main/server/configurations/local.yaml).
|
||||
|
||||
By default, you only need to configure the endpoint for the first bucket.
|
||||
@@ -56,13 +55,14 @@ components of the setup to communicate with each other seamlessly.
|
||||
|
||||
The same principle applies if you're deploying to your custom domain.
|
||||
|
||||
## Replication
|
||||
## Replication
|
||||
|
||||

|
||||
|
||||
<p align="center">Community contributed diagram of Ente's replication process</p>
|
||||
|
||||
> [!IMPORTANT]
|
||||
>
|
||||
>
|
||||
> As of now, replication works only if all the 3 storage type needs are
|
||||
> fulfilled (1 hot, 1 cold and 1 glacier storage).
|
||||
>
|
||||
@@ -72,10 +72,10 @@ If you're wondering why there are 3 buckets on the MinIO UI - that's because our
|
||||
production instance uses these to perform
|
||||
[replication](https://ente.io/reliability/).
|
||||
|
||||
If you're also wondering about why the bucket names are specifically what they are,
|
||||
it's because that is exactly what we are using on our production instance.
|
||||
We use `b2-eu-cen` as hot, `wasabi-eu-central-2-v3` as cold (also the secondary hot)
|
||||
and `scw-eu-fr-v3` as glacier storage. As of now, all of this is hardcoded.
|
||||
If you're also wondering about why the bucket names are specifically what they
|
||||
are, it's because that is exactly what we are using on our production instance.
|
||||
We use `b2-eu-cen` as hot, `wasabi-eu-central-2-v3` as cold (also the secondary
|
||||
hot) and `scw-eu-fr-v3` as glacier storage. As of now, all of this is hardcoded.
|
||||
Hence, the same hardcoded configuration is applied when you self host Ente.
|
||||
|
||||
In a self hosted Ente instance replication is turned off by default. When
|
||||
@@ -84,16 +84,15 @@ other two are ignored. Only the names here are specifically fixed, but in the
|
||||
configuration body you can put any other keys. It does not have any relation
|
||||
with `b2`, `wasabi` or even `scaleway`.
|
||||
|
||||
Use the `s3.hot_storage.primary` option if you'd like to set one of the other
|
||||
Use the `s3.hot_storage.primary` option if you'd like to set one of the other
|
||||
predefined buckets as the primary bucket.
|
||||
|
||||
## SSL Configuration
|
||||
## SSL Configuration
|
||||
|
||||
> [!NOTE]
|
||||
>
|
||||
> If you need to configure SSL, you'll need to turn off `s3.are_local_buckets`
|
||||
> (which disables SSL in the default starter compose template).
|
||||
>
|
||||
|
||||
Disabling `s3.are_local_buckets` also switches to the subdomain style URLs for
|
||||
the buckets. However, not all S3 providers support these. In particular, MinIO
|
||||
@@ -121,4 +120,4 @@ s3:
|
||||
endpoint: http://<YOUR-WIFI-IP>:3200
|
||||
region: eu-central-2
|
||||
bucket: b2-eu-cen
|
||||
```
|
||||
```
|
||||
|
||||
@@ -111,5 +111,5 @@ network, you need to use the public IP or hostname.
|
||||
> [!TIP]
|
||||
>
|
||||
> If you're having trouble uploading from your mobile app, it is likely that
|
||||
> museum is not able to connect to your S3 storage. See the [Configuring
|
||||
> S3](/self-hosting/guides/configuring-s3) guide for more details.
|
||||
> museum is not able to connect to your S3 storage. See the
|
||||
> [Configuring S3](/self-hosting/guides/configuring-s3) guide for more details.
|
||||
|
||||
@@ -3,13 +3,12 @@ title: Ente from Source
|
||||
description: Getting started self hosting Ente Photos and/or Ente Auth
|
||||
---
|
||||
|
||||
|
||||
# Ente from Source
|
||||
|
||||
> [!WARNING] NOTE
|
||||
> The below documentation will cover instructions about self-hosting the web app manually. If you
|
||||
> want to deploy Ente hassle free, use the [one line](https://ente.io/blog/self-hosting-quickstart/)
|
||||
> command to setup Ente. This guide might be deprecated in the near future.
|
||||
> [!WARNING] NOTE The below documentation will cover instructions about
|
||||
> self-hosting the web app manually. If you want to deploy Ente hassle free, use
|
||||
> the [one line](https://ente.io/blog/self-hosting-quickstart/) command to setup
|
||||
> Ente. This guide might be deprecated in the near future.
|
||||
|
||||
## Installing Docker
|
||||
|
||||
@@ -63,8 +62,9 @@ apps and configure them to use your
|
||||
|
||||
## Web app with Docker and Compose
|
||||
|
||||
The instructoins in previous section were just a temporary way to run the web app locally.
|
||||
To run the web apps as services, the user has to build a docker image manually.
|
||||
The instructoins in previous section were just a temporary way to run the web
|
||||
app locally. To run the web apps as services, the user has to build a docker
|
||||
image manually.
|
||||
|
||||
> [!IMPORTANT]
|
||||
>
|
||||
@@ -144,7 +144,7 @@ docker build -t <image-name>:<tag> --no-cache --progress plain .
|
||||
You can always edit the Dockerfile and remove the steps for apps which you do
|
||||
not intend to install on your system (like auth or cast) and opt out of those.
|
||||
|
||||
Regarding Albums App, take a note that they are not apps with navigable pages,
|
||||
Regarding Albums App, take a note that they are not apps with navigable pages,
|
||||
if accessed on the web-browser they will simply redirect to ente.web.io.
|
||||
|
||||
## compose.yaml
|
||||
@@ -175,17 +175,17 @@ docker compose up -d # --build
|
||||
docker compose logs <container-name>
|
||||
```
|
||||
|
||||
## Configure App Endpoints
|
||||
## Configure App Endpoints
|
||||
|
||||
> [!NOTE]
|
||||
> Previously, this was dependent on the env variables `NEXT_ENTE_PUBLIC_ACCOUNTS_ENDPOINT`
|
||||
> and etc. Please check the below documentation to update your setup configurations
|
||||
> [!NOTE] Previously, this was dependent on the env variables
|
||||
> `NEXT_ENTE_PUBLIC_ACCOUNTS_ENDPOINT` and etc. Please check the below
|
||||
> documentation to update your setup configurations
|
||||
|
||||
You can configure the web endpoints for the other apps including Accounts, Albums
|
||||
Family and Cast in your `museum.yaml` configuration file. Checkout
|
||||
You can configure the web endpoints for the other apps including Accounts,
|
||||
Albums Family and Cast in your `museum.yaml` configuration file. Checkout
|
||||
[`local.yaml`](https://github.com/ente-io/ente/blob/543411254b2bb55bd00a0e515dcafa12d12d3b35/server/configurations/local.yaml#L76-L89)
|
||||
to configure the endpoints. Make sure to setup up your DNS Records accordingly to the
|
||||
similar URL's you set up in `museum.yaml`.
|
||||
to configure the endpoints. Make sure to setup up your DNS Records accordingly
|
||||
to the similar URL's you set up in `museum.yaml`.
|
||||
|
||||
Next part is to configure the web server.
|
||||
|
||||
|
||||
@@ -5,22 +5,20 @@ description:
|
||||
server
|
||||
---
|
||||
|
||||
|
||||
> [!WARNING] NOTE
|
||||
> This page covers documentation around self-hosting the web app manually. If you
|
||||
> want to deploy Ente hassle free, please use the [one line](https://ente.io/blog/self-hosting-quickstart/)
|
||||
> command to setup Ente. This guide might be deprecated in the near future.
|
||||
> [!WARNING] NOTE This page covers documentation around self-hosting the web app
|
||||
> manually. If you want to deploy Ente hassle free, please use the
|
||||
> [one line](https://ente.io/blog/self-hosting-quickstart/) command to setup
|
||||
> Ente. This guide might be deprecated in the near future.
|
||||
|
||||
# Web app
|
||||
|
||||
The getting started instructions mention using `yarn dev` (which is an alias of
|
||||
`yarn dev:photos`) to serve your web app.
|
||||
|
||||
>[!IMPORTANT]
|
||||
> Please note that Ente's Web App supports the Yarn version 1.22.xx or 1.22.22 specifically.
|
||||
> Make sure to install the right version or modify your yarn installation to meet the requirements.
|
||||
> The user might end up into unknown version and dependency related errors if yarn
|
||||
> is on different version.
|
||||
> [!IMPORTANT] Please note that Ente's Web App supports the Yarn version 1.22.xx
|
||||
> or 1.22.22 specifically. Make sure to install the right version or modify your
|
||||
> yarn installation to meet the requirements. The user might end up into unknown
|
||||
> version and dependency related errors if yarn is on different version.
|
||||
|
||||
```sh
|
||||
cd ente/web
|
||||
@@ -146,15 +144,15 @@ docker compose logs <container-name>
|
||||
|
||||
## Configure App Endpoints
|
||||
|
||||
> [!NOTE]
|
||||
> Previously, this was dependent on the env variables `NEXT_ENTE_PUBLIC_ACCOUNTS_ENDPOINT`
|
||||
> and etc. Please check the below documentation to update your setup configurations
|
||||
> [!NOTE] Previously, this was dependent on the env variables
|
||||
> `NEXT_ENTE_PUBLIC_ACCOUNTS_ENDPOINT` and etc. Please check the below
|
||||
> documentation to update your setup configurations
|
||||
|
||||
You can configure the web endpoints for the other apps including Accounts, Albums
|
||||
Family and Cast in your `museum.yaml` configuration file. Checkout
|
||||
You can configure the web endpoints for the other apps including Accounts,
|
||||
Albums Family and Cast in your `museum.yaml` configuration file. Checkout
|
||||
[`local.yaml`](https://github.com/ente-io/ente/blob/543411254b2bb55bd00a0e515dcafa12d12d3b35/server/configurations/local.yaml#L76-L89)
|
||||
to configure the endpoints. Make sure to setup up your DNS Records accordingly to the
|
||||
similar URL's you set up in `museum.yaml`.
|
||||
to configure the endpoints. Make sure to setup up your DNS Records accordingly
|
||||
to the similar URL's you set up in `museum.yaml`.
|
||||
|
||||
Next part is to configure the web server.
|
||||
|
||||
|
||||
@@ -16,10 +16,10 @@ If you used our quickstart script, your `my-ente` directory will include a
|
||||
PostgreSQL and MinIO.
|
||||
|
||||
> [!TIP]
|
||||
>
|
||||
>
|
||||
> Always do `docker compose down` inside your `my-ente` directory. If you've
|
||||
> made changes to `museum.yaml`, restart the containers with `docker compose up
|
||||
> -d ` to see your changes in action.
|
||||
> made changes to `museum.yaml`, restart the containers with
|
||||
> `docker compose up -d ` to see your changes in action.
|
||||
|
||||
## S3 buckets
|
||||
|
||||
@@ -33,19 +33,20 @@ Check out [Configuring S3](/self-hosting/guides/configuring-s3.md) to understand
|
||||
more about configuring S3 buckets.
|
||||
|
||||
MinIO uses the port `3200` for API Endpoints and their web app runs over
|
||||
`:3201`. You can login to MinIO Web Console by opening `localhost:3201` in your browser.
|
||||
`:3201`. You can login to MinIO Web Console by opening `localhost:3201` in your
|
||||
browser.
|
||||
|
||||
If you face any issues related to uploads then checkout [Troubleshooting bucket
|
||||
CORS](/self-hosting/troubleshooting/bucket-cors) and [Frequently encountered S3
|
||||
errors](/self-hosting/guides/configuring-s3#frequently-encountered-errors).
|
||||
If you face any issues related to uploads then checkout
|
||||
[Troubleshooting bucket CORS](/self-hosting/troubleshooting/bucket-cors) and
|
||||
[Frequently encountered S3 errors](/self-hosting/guides/configuring-s3#frequently-encountered-errors).
|
||||
|
||||
## Web apps
|
||||
|
||||
The web apps for Ente Photos is divided into multiple sub-apps like albums,
|
||||
cast, auth, etc. These endpoints are configurable in the museum.yaml under the
|
||||
cast, auth, etc. These endpoints are configurable in `museum.yaml` under the
|
||||
`apps.*` section.
|
||||
|
||||
For example,
|
||||
For example,
|
||||
|
||||
```yaml
|
||||
apps:
|
||||
@@ -55,17 +56,16 @@ apps:
|
||||
family: https://family.myente.xyz
|
||||
```
|
||||
|
||||
>[!IMPORTANT]
|
||||
>By default, all the values redirect to our publicly hosted production services.
|
||||
>For example, if `public-albums` is not configured your shared album will
|
||||
>use the `albums.ente.io` URL.
|
||||
> [!IMPORTANT] By default, all the values redirect to our publicly hosted
|
||||
> production services. For example, if `public-albums` is not configured your
|
||||
> shared album will use the `albums.ente.io` URL.
|
||||
|
||||
After you are done with filling the values, restart museum and the app will
|
||||
start utilizing those endpoints instead of Ente's production instances.
|
||||
|
||||
Once you have configured all the necessary endpoints, `cd` into `my-ente` and
|
||||
stop all the Docker containers with `docker compose down` and restart them with
|
||||
`docker compose up -d`.
|
||||
`docker compose up -d`.
|
||||
|
||||
Similarly, you can use the default
|
||||
[`local.yaml`](https://github.com/ente-io/ente/tree/main/server/configurations/local.yaml)
|
||||
|
||||
@@ -22,28 +22,25 @@ server on your machine.
|
||||
|
||||
Setting up a reverse proxy with Caddy is easy and straightforward.
|
||||
|
||||
Firstly, install Caddy on your server.
|
||||
Firstly, install Caddy on your server.
|
||||
|
||||
```sh
|
||||
sudo apt install caddy
|
||||
```
|
||||
```
|
||||
|
||||
After the installation is complete, a `Caddyfile` is created on the path
|
||||
`/etc/caddy/`. This file is used to configure reverse proxies among other
|
||||
things.
|
||||
|
||||
```yaml
|
||||
```yaml
|
||||
# Caddyfile - myente.xyz is just an example.
|
||||
api.myente.xyz {
|
||||
reverse_proxy http://localhost:8080
|
||||
}
|
||||
ente.myente.xyz {
|
||||
reverse_proxy http://localhost:3000
|
||||
}
|
||||
api.myente.xyz { reverse_proxy http://localhost:8080 } ente.myente.xyz {
|
||||
reverse_proxy http://localhost:3000 }
|
||||
#...and so on for other endpoints
|
||||
```
|
||||
|
||||
After a hard-reload, the Ente Photos web app should be up on https://ente.myente.xyz.
|
||||
After a hard-reload, the Ente Photos web app should be up on
|
||||
https://ente.myente.xyz.
|
||||
|
||||
If you are using a different tool for reverse proxy (like nginx), please check
|
||||
out their documentation.
|
||||
|
||||
@@ -37,13 +37,21 @@ aws s3api put-bucket-cors --bucket YOUR_S3_BUCKET --cors-configuration /path/to/
|
||||
|
||||
## For Self-hosted Minio Instance
|
||||
|
||||
> Important: MinIO does not take JSON CORS file as the input, instead you will
|
||||
> have to build a CORS.xml file or just convert the above `cors.json` to XML.
|
||||
::: warning
|
||||
|
||||
- MinIO does not support bucket CORS in the community edition which is used by
|
||||
default. For more information, check
|
||||
[this discussion](https://github.com/minio/minio/discussions/20841). However,
|
||||
global CORS configuration is possible.
|
||||
- MinIO does not take JSON CORS file as the input, instead you will have to
|
||||
build a CORS.xml file or just convert the above `cors.json` to XML.
|
||||
|
||||
:::
|
||||
|
||||
A minor requirement here is the tool `mc` for managing buckets via command line
|
||||
interface. Checkout the `mc set alias` document to configure alias for your
|
||||
instance and bucket. After this you will be prompted for your AccessKey and
|
||||
Secret, which is your username and password, go ahead and enter that.
|
||||
Secret, which is your username and password.
|
||||
|
||||
```sh
|
||||
mc cors set <your-minio>/<your-bucket-name /path/to/cors.xml
|
||||
@@ -59,4 +67,4 @@ mc admin config set <your-minio>/<your-bucket-name> api cors_allow_origin="*"
|
||||
You can create also `.csv` file and dump the list of origins you would like to
|
||||
allow and replace the `*` with `path` to the CSV file.
|
||||
|
||||
Now, uploads should be working fine.
|
||||
Now, uploads should be working fine.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
---
|
||||
title: Docker errors
|
||||
title: Docker Errors
|
||||
description: Fixing docker related errors when trying to self host Ente
|
||||
---
|
||||
|
||||
@@ -34,30 +34,30 @@ perform the same configuration by removing the "post_start" hook, and adding a
|
||||
new service definition:
|
||||
|
||||
```yaml
|
||||
minio-provision:
|
||||
minio-provision:
|
||||
image: minio/mc
|
||||
depends_on:
|
||||
- minio
|
||||
- minio
|
||||
volumes:
|
||||
- minio-data:/data
|
||||
- minio-data:/data
|
||||
networks:
|
||||
- internal
|
||||
- internal
|
||||
entrypoint: |
|
||||
sh -c '
|
||||
#!/bin/sh
|
||||
sh -c '
|
||||
#!/bin/sh
|
||||
|
||||
while ! mc config host add h0 http://minio:3200 changeme changeme1234
|
||||
do
|
||||
echo "waiting for minio..."
|
||||
sleep 0.5
|
||||
done
|
||||
while ! mc config host add h0 http://minio:3200 changeme changeme1234
|
||||
do
|
||||
echo "waiting for minio..."
|
||||
sleep 0.5
|
||||
done
|
||||
|
||||
cd /data
|
||||
cd /data
|
||||
|
||||
mc mb -p b2-eu-cen
|
||||
mc mb -p wasabi-eu-central-2-v3
|
||||
mc mb -p scw-eu-fr-v3
|
||||
'
|
||||
mc mb -p b2-eu-cen
|
||||
mc mb -p wasabi-eu-central-2-v3
|
||||
mc mb -p scw-eu-fr-v3
|
||||
'
|
||||
```
|
||||
|
||||
## start_interval
|
||||
@@ -114,7 +114,7 @@ volumes.
|
||||
|
||||
If you're sure of what you're doing, the volumes can be deleted by
|
||||
|
||||
```
|
||||
```sh
|
||||
docker volume ls
|
||||
```
|
||||
|
||||
@@ -124,6 +124,13 @@ to list them, and then delete the ones that begin with `my-ente` using
|
||||
that'll delete all volumes (Ente or otherwise) on your machine that are not
|
||||
currently in use by a running docker container.
|
||||
|
||||
An alternative way is to delete the volumes along with removal of cluster's
|
||||
containers using `docker compose` inside `my-ente` directory.
|
||||
|
||||
```sh
|
||||
docker compose down --volumes
|
||||
```
|
||||
|
||||
If you're unsure about removing volumes, another alternative is to rename your
|
||||
`my-ente` folder. Docker uses the folder name to determine the volume name
|
||||
prefix, so giving it a different name will cause Docker to create a volume
|
||||
|
||||
@@ -5,8 +5,8 @@ description: A quick hotfix for keyring errors while running Ente CLI.
|
||||
|
||||
# Ente CLI Secrets
|
||||
|
||||
Ente CLI makes use of keyring for storing sensitive information like your
|
||||
passwords. And running the cli straight out of the box might give you some
|
||||
Ente CLI makes use of system keyring for storing sensitive information like your
|
||||
passwords. And running the CLI straight out of the box might give you some
|
||||
errors related to keyrings in some case.
|
||||
|
||||
Follow the below steps to run Ente CLI and also avoid keyrings errors.
|
||||
|
||||
@@ -3,14 +3,14 @@ title: General troubleshooting cases
|
||||
description: Fixing various errors when trying to self host Ente
|
||||
---
|
||||
|
||||
## Functionality not working on self hosted
|
||||
## Functionality not working on self hosted instance
|
||||
|
||||
If some specific functionality (e.g. album listing, video playback) does not
|
||||
work on your self hosted instance, it is possible that you have set _some_, but
|
||||
not _all_ needed CSP headers (by default, CSP is not enabled).
|
||||
|
||||
To expand on it - by default, currently the generated build does not enable CSP
|
||||
headers. The generated build includes a _headers file that Cloudflare will use
|
||||
headers. The generated build includes a \_headers file that Cloudflare will use
|
||||
to set HTTP response headers, but even these do not enable CSP, it is set to a
|
||||
report only mode.
|
||||
|
||||
@@ -18,7 +18,7 @@ However, your web server might be setting some CSP policy. If so, then you will
|
||||
need to ensure that all necessary CSP headers are set.
|
||||
|
||||
You can see the current
|
||||
[_headers](https://github.com/ente-io/ente/blob/main/web/apps/photos/public/_headers)
|
||||
[\_headers](https://github.com/ente-io/ente/blob/main/web/apps/photos/public/_headers)
|
||||
file contents to use a template for your CSP policy. The
|
||||
`Content-Security-Policy-Report-Only` value will show you the CSP headers in
|
||||
"dry run" report-only mode we're setting - you can use that as a template,
|
||||
@@ -28,8 +28,8 @@ How do you know if this is the problem you're facing? The browser console
|
||||
_might_ be giving you errors when you try to open the page and perform the
|
||||
corresponding function.
|
||||
|
||||
> Refused to load https://subdomain.example.org/... because it does not appear
|
||||
> in the script-src directive of the Content Security Policy.
|
||||
> Refused to load https://subdomain.example.org/... because it does not appear
|
||||
> in the script-src directive of the Content Security Policy.
|
||||
|
||||
This is not guaranteed, each browsers handles CSP errors differently, and some
|
||||
may silently swallow it.
|
||||
|
||||
@@ -10,27 +10,27 @@ context and potential fixes.
|
||||
|
||||
Fundamentally in most situations, the problem is because of minor mistakes or
|
||||
misconfiguration. Please make sure to reverse proxy museum and MinIO API
|
||||
endpoint to a domain and check your S3 credentials and whole configuration
|
||||
file for any minor misconfigurations.
|
||||
endpoint to a domain and check your S3 credentials and whole configuration file
|
||||
for any minor misconfigurations.
|
||||
|
||||
It is also suggested that the user setups bucket CORS on MinIO or any external
|
||||
S3 service provider they are connecting to. To setup bucket CORS, please [read
|
||||
this](/self-hosting/troubleshooting/bucket-cors).
|
||||
It is also suggested that the user setups bucket CORS or global CORS on MinIO or
|
||||
any external S3 service provider they are connecting to. To setup bucket CORS,
|
||||
please [read this](/self-hosting/troubleshooting/bucket-cors).
|
||||
|
||||
## What is S3 and how is it incorporated in Ente ?
|
||||
|
||||
S3 is an cloud storage protocol made by Amazon (specifically AWS). S3 is designed to store
|
||||
files and data as objects inside Buckets and it is mostly used for Online
|
||||
Backups and storing different types of files.
|
||||
S3 is an cloud storage protocol made by Amazon (specifically AWS). S3 is
|
||||
designed to store files and data as objects inside buckets and it is mostly used
|
||||
for online backups and storing different types of files.
|
||||
|
||||
Ente's Docker setup is shipped with [MinIO](https://min.io/) as its default S3 provider.
|
||||
MinIO supports the Amazon S3 protocol and leverages your disk storage to
|
||||
dump all the uploaded files as encrypted object blobs.
|
||||
Ente's Docker setup is shipped with [MinIO](https://min.io/) as its default S3
|
||||
provider. MinIO supports the Amazon S3 protocol and leverages your disk storage
|
||||
to dump all the uploaded files as encrypted object blobs.
|
||||
|
||||
## 403 Forbidden
|
||||
|
||||
If museum is able to make a network connection to your S3 bucket but
|
||||
uploads are still failing, it could be a credentials or permissions issue.
|
||||
If museum is able to make a network connection to your S3 bucket but uploads are
|
||||
still failing, it could be a credentials or permissions issue.
|
||||
|
||||
A telltale sign of this is that in the museum logs you can see `403 Forbidden`
|
||||
errors about it not able to find the size of a file even though the
|
||||
@@ -41,14 +41,15 @@ This could be because
|
||||
1. The bucket CORS rules do not allow museum to access these objects. For
|
||||
uploading files from the browser, you will need to set `allowedOrigins` to
|
||||
`*`, and allow the `X-Auth-Token`, `X-Client-Package`, `X-Client-Version`
|
||||
headers configuration too. [Here is an example of a working
|
||||
configuration](https://github.com/ente-io/ente/discussions/1764#discussioncomment-9478204).
|
||||
headers configuration too.
|
||||
[Here is an example of a working configuration](https://github.com/ente-io/ente/discussions/1764#discussioncomment-9478204).
|
||||
|
||||
2. The credentials are not being picked up (you might be setting the correct
|
||||
credentials, but not in the place where museum reads them from).
|
||||
|
||||
## Mismatch in file size
|
||||
|
||||
The "Mismatch in file size" error mostly occurs in a situation where the client is re-uploading a file which is already in the bucket with a different
|
||||
file size. The reason for re-upload could be anything including network issue,
|
||||
sudden killing of app before the upload is complete and etc.
|
||||
The "Mismatch in file size" error mostly occurs in a situation where the client
|
||||
is re-uploading a file which is already in the bucket with a different file
|
||||
size. The reason for re-upload could be anything including network issue, sudden
|
||||
killing of app before the upload is complete and etc.
|
||||
|
||||
@@ -5,8 +5,8 @@ description: Fixing yarn install errors when trying to self host Ente
|
||||
|
||||
# Yarn
|
||||
|
||||
If your `yarn install` is failing, make sure you are using Yarn v1 (also known
|
||||
as "Yarn Classic"):
|
||||
If `yarn install` is failing, make sure you are using Yarn v1 (also known as
|
||||
"Yarn Classic"):
|
||||
|
||||
- https://classic.yarnpkg.com/lang/en/docs/install
|
||||
|
||||
|
||||
@@ -5,7 +5,8 @@
|
||||
"dev": "vitepress dev docs",
|
||||
"build": "vitepress build docs",
|
||||
"preview": "vitepress preview docs",
|
||||
"pretty": "prettier --write ."
|
||||
"pretty": "prettier --write .",
|
||||
"pretty:check": "prettier -c ."
|
||||
},
|
||||
"devDependencies": {
|
||||
"prettier": "^3.3.4",
|
||||
|
||||
@@ -22,7 +22,8 @@ const handleOPTIONS = (request: Request) => {
|
||||
"Access-Control-Allow-Origin": "*",
|
||||
"Access-Control-Allow-Methods": "GET, OPTIONS",
|
||||
"Access-Control-Max-Age": "86400",
|
||||
"Access-Control-Allow-Headers": "X-Cast-Access-Token",
|
||||
"Access-Control-Allow-Headers":
|
||||
"X-Cast-Access-Token, X-Client-Package, X-Client-Version",
|
||||
},
|
||||
});
|
||||
};
|
||||
@@ -60,8 +61,15 @@ const handleGET = async (request: Request) => {
|
||||
const pathname = url.pathname;
|
||||
const params = new URLSearchParams({ castToken });
|
||||
|
||||
const headers = {
|
||||
"X-Client-Package": request.headers.get("X-Client-Package") ?? "",
|
||||
"X-Client-Version": request.headers.get("X-Client-Version") ?? "",
|
||||
"User-Agent": request.headers.get("User-Agent") ?? "",
|
||||
};
|
||||
|
||||
let response = await fetch(
|
||||
`https://api.ente.io/cast/files${pathname}${fileID}?${params.toString()}`,
|
||||
{ headers },
|
||||
);
|
||||
|
||||
if (!response.ok) console.log("Upstream error", response.status);
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
name = "cast-albums"
|
||||
main = "src/index.ts"
|
||||
compatibility_date = "2024-06-14"
|
||||
compatibility_date = "2025-06-03"
|
||||
|
||||
routes = [
|
||||
{ pattern = "cast-albums.ente.io", custom_domain = true }
|
||||
|
||||
@@ -21,7 +21,8 @@ const handleOPTIONS = (request: Request) => {
|
||||
headers: {
|
||||
"Access-Control-Allow-Origin": "*",
|
||||
"Access-Control-Allow-Methods": "GET, OPTIONS",
|
||||
"Access-Control-Allow-Headers": "X-Auth-Token, X-Client-Package, X-Client-Version",
|
||||
"Access-Control-Allow-Headers":
|
||||
"X-Auth-Token, X-Client-Package, X-Client-Version, Range",
|
||||
"Access-Control-Max-Age": "86400",
|
||||
},
|
||||
});
|
||||
@@ -71,13 +72,16 @@ const handleGET = async (request: Request) => {
|
||||
const params = new URLSearchParams();
|
||||
if (token) params.set("token", token);
|
||||
|
||||
const headers = {
|
||||
"X-Client-Package": request.headers.get("X-Client-Package") ?? "",
|
||||
"X-Client-Version": request.headers.get("X-Client-Version") ?? "",
|
||||
"User-Agent": request.headers.get("User-Agent") ?? "",
|
||||
"Range": request.headers.get("Range") ?? "",
|
||||
};
|
||||
|
||||
let response = await fetch(
|
||||
`https://api.ente.io/files/download/${fileID}?${params.toString()}`,
|
||||
{
|
||||
headers: {
|
||||
"User-Agent": request.headers.get("User-Agent") ?? "",
|
||||
},
|
||||
},
|
||||
{ headers },
|
||||
);
|
||||
|
||||
if (!response.ok) console.log("Upstream error", response.status);
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
name = "files"
|
||||
main = "src/index.ts"
|
||||
compatibility_date = "2024-06-14"
|
||||
compatibility_date = "2025-06-03"
|
||||
|
||||
routes = [
|
||||
{ pattern = "files.ente.io", custom_domain = true }
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
"name": "workers",
|
||||
"private": true,
|
||||
"devDependencies": {
|
||||
"@cloudflare/workers-types": "^4.20250519.0",
|
||||
"@cloudflare/workers-types": "^4.20250603.0",
|
||||
"typescript": "^5.8.3",
|
||||
"wrangler": "^4.15.2",
|
||||
"wrangler": "^4.18.0",
|
||||
"prettier": "^3.5.3"
|
||||
},
|
||||
"workspaces": [
|
||||
|
||||
@@ -70,8 +70,15 @@ const handleGET = async (request: Request) => {
|
||||
if (accessToken) params.set("accessToken", accessToken);
|
||||
if (accessTokenJWT) params.set("accessTokenJWT", accessTokenJWT);
|
||||
|
||||
const headers = {
|
||||
"X-Client-Package": request.headers.get("X-Client-Package") ?? "",
|
||||
"X-Client-Version": request.headers.get("X-Client-Version") ?? "",
|
||||
"User-Agent": request.headers.get("User-Agent") ?? "",
|
||||
};
|
||||
|
||||
let response = await fetch(
|
||||
`https://api.ente.io/public-collection/files${pathname}${fileID}?${params.toString()}`,
|
||||
{ headers },
|
||||
);
|
||||
|
||||
if (!response.ok) console.log("Upstream error", response.status);
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
name = "public-albums"
|
||||
main = "src/index.ts"
|
||||
compatibility_date = "2024-06-14"
|
||||
compatibility_date = "2025-06-03"
|
||||
|
||||
routes = [
|
||||
{ pattern = "public-albums.ente.io", custom_domain = true }
|
||||
|
||||
@@ -21,7 +21,8 @@ const handleOPTIONS = (request: Request) => {
|
||||
headers: {
|
||||
"Access-Control-Allow-Origin": "*",
|
||||
"Access-Control-Allow-Methods": "GET, OPTIONS",
|
||||
"Access-Control-Allow-Headers": "X-Auth-Token, X-Client-Package, X-Client-Version",
|
||||
"Access-Control-Allow-Headers":
|
||||
"X-Auth-Token, X-Client-Package, X-Client-Version",
|
||||
"Access-Control-Max-Age": "86400",
|
||||
},
|
||||
});
|
||||
@@ -64,8 +65,15 @@ const handleGET = async (request: Request) => {
|
||||
const params = new URLSearchParams();
|
||||
if (token) params.set("token", token);
|
||||
|
||||
const headers = {
|
||||
"X-Client-Package": request.headers.get("X-Client-Package") ?? "",
|
||||
"X-Client-Version": request.headers.get("X-Client-Version") ?? "",
|
||||
"User-Agent": request.headers.get("User-Agent") ?? "",
|
||||
};
|
||||
|
||||
let response = await fetch(
|
||||
`https://api.ente.io/files/preview/${fileID}?${params.toString()}`,
|
||||
{ headers },
|
||||
);
|
||||
|
||||
if (!response.ok) console.log("Upstream error", response.status);
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
name = "thumbnails"
|
||||
main = "src/index.ts"
|
||||
compatibility_date = "2024-06-14"
|
||||
compatibility_date = "2025-06-03"
|
||||
|
||||
routes = [
|
||||
{ pattern = "thumbnails.ente.io", custom_domain = true }
|
||||
|
||||
36
mobile/fastlane/metadata/android/sr/full_description.txt
Normal file
@@ -0,0 +1,36 @@
|
||||
ente is a simple app to backup and share your photos and videos.
|
||||
|
||||
If you've been looking for a privacy-friendly alternative to Google Photos, you've come to the right place. With ente, they are stored end-to-end encrypted (e2ee). This means that only you can view them.
|
||||
|
||||
We have open-source apps across Android, iOS, web and desktop, and your photos will seamlessly sync between all of them in an end-to-end encrypted (e2ee) manner.
|
||||
|
||||
ente also makes it simple to share your albums with your loved ones, even if they aren't on ente. You can share publicly viewable links, where they can view your album and collaborate by adding photos to it, even without an account or app.
|
||||
|
||||
Your encrypted data is replicated to 3 different locations, including a fall-out shelter in Paris. We take posterity seriously and make it easy to ensure that your memories outlive you.
|
||||
|
||||
We are here to make the safest photos app ever, come join our journey!
|
||||
|
||||
FEATURES
|
||||
- Original quality backups, because every pixel is important
|
||||
- Family plans, so you can share storage with your family
|
||||
- Collaborative albums, so you can pool together photos after a trip
|
||||
- Shared folders, in case you want your partner to enjoy your "Camera" clicks
|
||||
- Album links, that can be protected with a password
|
||||
- Ability to free up space, by removing files that have been safely backed up
|
||||
- Human support, because you're worth it
|
||||
- Descriptions, so you can caption your memories and find them easily
|
||||
- Image editor, to add finishing touches
|
||||
- Favorite, hide and relive your memories, for they are precious
|
||||
- One-click import from Google, Apple, your hard drive and more
|
||||
- Dark theme, because your photos look good in it
|
||||
- 2FA, 3FA, biometric auth
|
||||
- and a LOT more!
|
||||
|
||||
PERMISSIONS
|
||||
ente requests for certain permissions to serve the purpose of a photo storage provider, which can be reviewed here: https://github.com/ente-io/ente/blob/f-droid/mobile/android/permissions.md
|
||||
|
||||
PRICING
|
||||
We don't offer forever free plans, because it is important to us that we remain sustainable and withstand the test of time. Instead we offer affordable plans that you can freely share with your family. You can find more information at ente.io.
|
||||
|
||||
SUPPORT
|
||||
We take pride in offering human support. If you are our paid customer, you can reach out to team@ente.io and expect a response from our team within 24 hours.
|
||||
@@ -0,0 +1 @@
|
||||
ente is an end-to-end encrypted photo storage app
|
||||
1
mobile/fastlane/metadata/android/sr/title.txt
Normal file
@@ -0,0 +1 @@
|
||||
ente - encrypted photo storage
|
||||
33
mobile/fastlane/metadata/ios/sr/description.txt
Normal file
@@ -0,0 +1,33 @@
|
||||
Ente is a simple app to automatically backup and organize your photos and videos.
|
||||
|
||||
If you've been looking for a privacy-friendly alternative to preserve your memories, you've come to the right place. With Ente, they are stored end-to-end encrypted (e2ee). This means that only you can view them.
|
||||
|
||||
We have apps across all platforms, and your photos will seamlessly sync between all your devices in an end-to-end encrypted (e2ee) manner.
|
||||
|
||||
Ente also makes it simple to share your albums with your loved ones. You can either share them directly with other Ente users, end-to-end encrypted; or with publicly viewable links.
|
||||
|
||||
Your encrypted data is stored across multiple locations, including a fall-out shelter in Paris. We take posterity seriously and make it easy to ensure that your memories outlive you.
|
||||
|
||||
We are here to make the safest photos app ever, come join our journey!
|
||||
|
||||
FEATURES
|
||||
- Original quality backups, because every pixel is important
|
||||
- Family plans, so you can share storage with your family
|
||||
- Shared folders, in case you want your partner to enjoy your "Camera" clicks
|
||||
- Album links, that can be protected with a password and set to expire
|
||||
- Ability to free up space, by removing files that have been safely backed up
|
||||
- Image editor, to add finishing touches
|
||||
- Favorite, hide and relive your memories, for they are precious
|
||||
- One-click import from all major storage providers
|
||||
- Dark theme, because your photos look good in it
|
||||
- 2FA, 3FA, biometric auth
|
||||
- and a LOT more!
|
||||
|
||||
PRICING
|
||||
We don't offer forever free plans, because it is important to us that we remain sustainable and withstand the test of time. Instead we offer affordable plans that you can freely share with your family. You can find more information at ente.io.
|
||||
|
||||
SUPPORT
|
||||
We take pride in offering human support. If you are our paid customer, you can reach out to team@ente.io and expect a response from our team within 24 hours.
|
||||
|
||||
TERMS
|
||||
https://ente.io/terms
|
||||
1
mobile/fastlane/metadata/ios/sr/keywords.txt
Normal file
@@ -0,0 +1 @@
|
||||
photos,photography,family,privacy,cloud,backup,videos,photo,encryption,storage,album,alternative
|
||||
1
mobile/fastlane/metadata/ios/sr/name.txt
Normal file
@@ -0,0 +1 @@
|
||||
Ente Photos
|
||||
1
mobile/fastlane/metadata/ios/sr/subtitle.txt
Normal file
@@ -0,0 +1 @@
|
||||
Encrypted photo storage
|
||||
30
mobile/fastlane/metadata/playstore/sr/full_description.txt
Normal file
@@ -0,0 +1,30 @@
|
||||
Ente is a simple app to automatically backup and organize your photos and videos.
|
||||
|
||||
If you've been looking for a privacy-friendly alternative to preserve your memories, you've come to the right place. With Ente, they are stored end-to-end encrypted (e2ee). This means that only you can view them.
|
||||
|
||||
We have apps across Android, iOS, web and Desktop, and your photos will seamlessly sync between all your devices in an end-to-end encrypted (e2ee) manner.
|
||||
|
||||
Ente also makes it simple to share your albums with your loved ones. You can either share them directly with other Ente users, end-to-end encrypted; or with publicly viewable links.
|
||||
|
||||
Your encrypted data is stored across multiple locations, including a fall-out shelter in Paris. We take posterity seriously and make it easy to ensure that your memories outlive you.
|
||||
|
||||
We are here to make the safest photos app ever, come join our journey!
|
||||
|
||||
✨ FEATURES
|
||||
- Original quality backups, because every pixel is important
|
||||
- Family plans, so you can share storage with your family
|
||||
- Shared folders, in case you want your partner to enjoy your "Camera" clicks
|
||||
- Album links, that can be protected with a password and set to expire
|
||||
- Ability to free up space, by removing files that have been safely backed up
|
||||
- Image editor, to add finishing touches
|
||||
- Favorite, hide and relive your memories, for they are precious
|
||||
- One-click import from Google, Apple, your hard drive and more
|
||||
- Dark theme, because your photos look good in it
|
||||
- 2FA, 3FA, biometric auth
|
||||
- and a LOT more!
|
||||
|
||||
💲 PRICING
|
||||
We don't offer forever free plans, because it is important to us that we remain sustainable and withstand the test of time. Instead we offer affordable plans that you can freely share with your family. You can find more information at ente.io.
|
||||
|
||||
🙋 SUPPORT
|
||||
We take pride in offering human support. If you are our paid customer, you can reach out to team@ente.io and expect a response from our team within 24 hours.
|
||||
@@ -0,0 +1 @@
|
||||
Encrypted photo storage - backup, organize and share your photos and videos
|
||||
1
mobile/fastlane/metadata/playstore/sr/title.txt
Normal file
@@ -0,0 +1 @@
|
||||
Ente Photos
|
||||
BIN
mobile/ios/EnteAlbumWidget/Assets.xcassets/AlbumsWidgetDefault.imageset/AlbumsWidgetDefault.png
vendored
Normal file
|
After Width: | Height: | Size: 20 KiB |
21
mobile/ios/EnteAlbumWidget/Assets.xcassets/AlbumsWidgetDefault.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "AlbumsWidgetDefault.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
BIN
mobile/ios/EnteAlbumWidget/Assets.xcassets/AlbumsWidgetPreview.imageset/AlbumsWidgetPreview.png
vendored
Normal file
|
After Width: | Height: | Size: 186 KiB |
21
mobile/ios/EnteAlbumWidget/Assets.xcassets/AlbumsWidgetPreview.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "AlbumsWidgetPreview.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
@@ -1,11 +1,6 @@
|
||||
{
|
||||
"colors" : [
|
||||
{
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
"info": {
|
||||
"author": "xcode",
|
||||
"version": 1
|
||||
}
|
||||
}
|
||||
}
|
||||
21
mobile/ios/EnteMemoryWidget/Assets.xcassets/MemoriesWidgetDefault.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "MemoriesWidgetDefault.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
BIN
mobile/ios/EnteMemoryWidget/Assets.xcassets/MemoriesWidgetDefault.imageset/MemoriesWidgetDefault.png
vendored
Normal file
|
After Width: | Height: | Size: 20 KiB |
21
mobile/ios/EnteMemoryWidget/Assets.xcassets/MemoriesWidgetPreview.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "MemoriesWidgetPreview.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
BIN
mobile/ios/EnteMemoryWidget/Assets.xcassets/MemoriesWidgetPreview.imageset/MemoriesWidgetPreview.png
vendored
Normal file
|
After Width: | Height: | Size: 132 KiB |
21
mobile/ios/EntePeopleWidget/Assets.xcassets/PeopleWidgetDefault.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "PeopleWidgetDefault.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
BIN
mobile/ios/EntePeopleWidget/Assets.xcassets/PeopleWidgetDefault.imageset/PeopleWidgetDefault.png
vendored
Normal file
|
After Width: | Height: | Size: 27 KiB |
21
mobile/ios/EntePeopleWidget/Assets.xcassets/PeopleWidgetPreview.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "PeopleWidgetPreview.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
BIN
mobile/ios/EntePeopleWidget/Assets.xcassets/PeopleWidgetPreview.imageset/PeopleWidgetPreview.png
vendored
Normal file
|
After Width: | Height: | Size: 157 KiB |
@@ -226,6 +226,8 @@ PODS:
|
||||
- sqlite3/rtree
|
||||
- system_info_plus (0.0.1):
|
||||
- Flutter
|
||||
- thermal (0.0.1):
|
||||
- Flutter
|
||||
- ua_client_hints (1.4.1):
|
||||
- Flutter
|
||||
- url_launcher_ios (0.0.1):
|
||||
@@ -293,6 +295,7 @@ DEPENDENCIES:
|
||||
- sqflite_darwin (from `.symlinks/plugins/sqflite_darwin/darwin`)
|
||||
- sqlite3_flutter_libs (from `.symlinks/plugins/sqlite3_flutter_libs/darwin`)
|
||||
- system_info_plus (from `.symlinks/plugins/system_info_plus/ios`)
|
||||
- thermal (from `.symlinks/plugins/thermal/ios`)
|
||||
- ua_client_hints (from `.symlinks/plugins/ua_client_hints/ios`)
|
||||
- url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)
|
||||
- video_player_avfoundation (from `.symlinks/plugins/video_player_avfoundation/darwin`)
|
||||
@@ -426,6 +429,8 @@ EXTERNAL SOURCES:
|
||||
:path: ".symlinks/plugins/sqlite3_flutter_libs/darwin"
|
||||
system_info_plus:
|
||||
:path: ".symlinks/plugins/system_info_plus/ios"
|
||||
thermal:
|
||||
:path: ".symlinks/plugins/thermal/ios"
|
||||
ua_client_hints:
|
||||
:path: ".symlinks/plugins/ua_client_hints/ios"
|
||||
url_launcher_ios:
|
||||
@@ -510,6 +515,7 @@ SPEC CHECKSUMS:
|
||||
sqlite3: fc1400008a9b3525f5914ed715a5d1af0b8f4983
|
||||
sqlite3_flutter_libs: 069c435986dd4b63461aecd68f4b30be4a9e9daa
|
||||
system_info_plus: 5393c8da281d899950d751713575fbf91c7709aa
|
||||
thermal: a9261044101ae8f532fa29cab4e8270b51b3f55c
|
||||
ua_client_hints: aeabd123262c087f0ce151ef96fa3ab77bfc8b38
|
||||
url_launcher_ios: 5334b05cef931de560670eeae103fd3e431ac3fe
|
||||
video_player_avfoundation: 7c6c11d8470e1675df7397027218274b6d2360b3
|
||||
|
||||
@@ -574,6 +574,7 @@
|
||||
"${BUILT_PRODUCTS_DIR}/sqlite3/sqlite3.framework",
|
||||
"${BUILT_PRODUCTS_DIR}/sqlite3_flutter_libs/sqlite3_flutter_libs.framework",
|
||||
"${BUILT_PRODUCTS_DIR}/system_info_plus/system_info_plus.framework",
|
||||
"${BUILT_PRODUCTS_DIR}/thermal/thermal.framework",
|
||||
"${BUILT_PRODUCTS_DIR}/ua_client_hints/ua_client_hints.framework",
|
||||
"${BUILT_PRODUCTS_DIR}/url_launcher_ios/url_launcher_ios.framework",
|
||||
"${BUILT_PRODUCTS_DIR}/video_player_avfoundation/video_player_avfoundation.framework",
|
||||
@@ -669,6 +670,7 @@
|
||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/sqlite3.framework",
|
||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/sqlite3_flutter_libs.framework",
|
||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/system_info_plus.framework",
|
||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/thermal.framework",
|
||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ua_client_hints.framework",
|
||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/url_launcher_ios.framework",
|
||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/video_player_avfoundation.framework",
|
||||
|
||||
@@ -25,6 +25,7 @@ import 'package:photos/services/sync/sync_service.dart';
|
||||
import 'package:photos/ui/tabs/home_widget.dart';
|
||||
import "package:photos/ui/viewer/actions/file_viewer.dart";
|
||||
import "package:photos/utils/intent_util.dart";
|
||||
import "package:photos/utils/standalone/debouncer.dart";
|
||||
|
||||
class EnteApp extends StatefulWidget {
|
||||
final Future<void> Function(String) runBackgroundTask;
|
||||
@@ -54,6 +55,7 @@ class _EnteAppState extends State<EnteApp> with WidgetsBindingObserver {
|
||||
late Locale? locale;
|
||||
late StreamSubscription<MemoriesChangedEvent> _memoriesChangedSubscription;
|
||||
late StreamSubscription<PeopleChangedEvent> _peopleChangedSubscription;
|
||||
late Debouncer _changeCallbackDebouncer;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
@@ -72,9 +74,13 @@ class _EnteAppState extends State<EnteApp> with WidgetsBindingObserver {
|
||||
await MemoryHomeWidgetService.instance.memoryChanged();
|
||||
},
|
||||
);
|
||||
_changeCallbackDebouncer = Debouncer(const Duration(milliseconds: 1500));
|
||||
_peopleChangedSubscription = Bus.instance.on<PeopleChangedEvent>().listen(
|
||||
(event) async {
|
||||
await PeopleHomeWidgetService.instance.peopleChanged();
|
||||
_changeCallbackDebouncer.run(
|
||||
() async =>
|
||||
unawaited(PeopleHomeWidgetService.instance.peopleChanged()),
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
@@ -115,7 +121,7 @@ class _EnteAppState extends State<EnteApp> with WidgetsBindingObserver {
|
||||
if (Platform.isAndroid || kDebugMode) {
|
||||
return Listener(
|
||||
onPointerDown: (event) {
|
||||
machineLearningController.onUserInteraction();
|
||||
computeController.onUserInteraction();
|
||||
},
|
||||
child: AdaptiveTheme(
|
||||
light: lightThemeData,
|
||||
@@ -150,7 +156,7 @@ class _EnteAppState extends State<EnteApp> with WidgetsBindingObserver {
|
||||
} else {
|
||||
return Listener(
|
||||
onPointerDown: (event) {
|
||||
machineLearningController.onUserInteraction();
|
||||
computeController.onUserInteraction();
|
||||
},
|
||||
child: MaterialApp(
|
||||
title: "ente",
|
||||
|
||||
4
mobile/lib/generated/intl/messages_all.dart
generated
@@ -52,6 +52,7 @@ import 'messages_pt_PT.dart' as messages_pt_pt;
|
||||
import 'messages_ro.dart' as messages_ro;
|
||||
import 'messages_ru.dart' as messages_ru;
|
||||
import 'messages_sl.dart' as messages_sl;
|
||||
import 'messages_sr.dart' as messages_sr;
|
||||
import 'messages_sv.dart' as messages_sv;
|
||||
import 'messages_ta.dart' as messages_ta;
|
||||
import 'messages_te.dart' as messages_te;
|
||||
@@ -100,6 +101,7 @@ Map<String, LibraryLoader> _deferredLibraries = {
|
||||
'ro': () => new SynchronousFuture(null),
|
||||
'ru': () => new SynchronousFuture(null),
|
||||
'sl': () => new SynchronousFuture(null),
|
||||
'sr': () => new SynchronousFuture(null),
|
||||
'sv': () => new SynchronousFuture(null),
|
||||
'ta': () => new SynchronousFuture(null),
|
||||
'te': () => new SynchronousFuture(null),
|
||||
@@ -185,6 +187,8 @@ MessageLookupByLibrary? _findExact(String localeName) {
|
||||
return messages_ru.messages;
|
||||
case 'sl':
|
||||
return messages_sl.messages;
|
||||
case 'sr':
|
||||
return messages_sr.messages;
|
||||
case 'sv':
|
||||
return messages_sv.messages;
|
||||
case 'ta':
|
||||
|
||||
85
mobile/lib/generated/intl/messages_ar.dart
generated
@@ -41,7 +41,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
static String m7(name) => "الإعجاب بـ ${name}";
|
||||
|
||||
static String m8(count) =>
|
||||
"${Intl.plural(count, zero: 'لا يوجد مشاركون', one: 'مشارك واحد', two: 'مشاركان', few: '${count} مشاركين', many: '${count} مشاركًا', other: '${count} مشارك')}";
|
||||
"${Intl.plural(count, zero: 'لا يوجد مُشاركون', one: 'مُشارك واحد', other: '${count} مُشاركين')}";
|
||||
|
||||
static String m9(versionValue) => "الإصدار: ${versionValue}";
|
||||
|
||||
@@ -89,7 +89,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"سيؤدي هذا إلى إزالة الرابط العام للوصول إلى \"${albumName}\".";
|
||||
|
||||
static String m24(supportEmail) =>
|
||||
"يرجى إرسال بريد إلكتروني إلى ${supportEmail} من عنوان بريدك الإلكتروني المسجل.";
|
||||
"يرجى إرسال بريد إلكتروني إلى ${supportEmail} من عنوان بريدك الإلكتروني المسجل";
|
||||
|
||||
static String m25(count, storageSaved) =>
|
||||
"لقد قمت بتنظيف ${Intl.plural(count, one: 'ملف مكرر واحد', two: 'ملفين مكررين', few: '${count} ملفات مكررة', many: '${count} ملفًا مكررًا', other: '${count} ملفًا مكررًا')}، مما وفر ${storageSaved}!";
|
||||
@@ -234,13 +234,13 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"إليك معرّف التحقق الخاص بي لـ ente.io: ${verificationID}";
|
||||
|
||||
static String m82(verificationID) =>
|
||||
"مرحبًا، هل يمكنك تأكيد أن هذا هو معرّف التحقق الخاص بك على ente.io: ${verificationID}؟";
|
||||
"مرحبًا، هل يمكنك تأكيد أن هذا هو معرّف التحقق الخاص بك على ente.io: ${verificationID}";
|
||||
|
||||
static String m83(referralCode, referralStorageInGB) =>
|
||||
"رمز إحالة Ente الخاص بي: ${referralCode}\n\nطبقه في الإعدادات ← عام ← الإحالات للحصول على ${referralStorageInGB} جيجابايت مجانًا بعد الاشتراك في خطة مدفوعة.\n\nhttps://ente.io";
|
||||
|
||||
static String m84(numberOfPeople) =>
|
||||
"${Intl.plural(numberOfPeople, zero: 'مشاركة مع أشخاص محددين', one: 'تمت المشاركة مع شخص واحد', two: 'تمت المشاركة مع شخصين', few: 'تمت المشاركة مع ${numberOfPeople} أشخاص', many: 'تمت المشاركة مع ${numberOfPeople} شخصًا', other: 'تمت المشاركة مع ${numberOfPeople} شخصًا')}";
|
||||
"${Intl.plural(numberOfPeople, zero: 'مشاركة مع أشخاص مُحددين', one: 'مُشارَك مع شخص واحد', other: 'مُشارَك مع ${numberOfPeople} أشخاص')}";
|
||||
|
||||
static String m85(emailIDs) => "تمت المشاركة مع ${emailIDs}";
|
||||
|
||||
@@ -467,28 +467,28 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage("في ملجأ للطوارئ"),
|
||||
"authToChangeEmailVerificationSetting":
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"يرجى المصادقة لتغيير إعداد التحقق من البريد الإلكتروني."),
|
||||
"يرجى المصادقة لتغيير إعداد التحقق من البريد الإلكتروني"),
|
||||
"authToChangeLockscreenSetting": MessageLookupByLibrary.simpleMessage(
|
||||
"يرجى المصادقة لتغيير إعدادات شاشة القفل."),
|
||||
"authToChangeYourEmail": MessageLookupByLibrary.simpleMessage(
|
||||
"يرجى المصادقة لتغيير بريدك الإلكتروني."),
|
||||
"يرجى المصادقة لتغيير بريدك الإلكتروني"),
|
||||
"authToChangeYourPassword": MessageLookupByLibrary.simpleMessage(
|
||||
"يرجى المصادقة لتغيير كلمة المرور الخاصة بك."),
|
||||
"يرجى المصادقة لتغيير كلمة المرور الخاصة بك"),
|
||||
"authToConfigureTwofactorAuthentication":
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"يرجى المصادقة لإعداد المصادقة الثنائية."),
|
||||
"authToInitiateAccountDeletion": MessageLookupByLibrary.simpleMessage(
|
||||
"يرجى المصادقة لبدء عملية حذف الحساب."),
|
||||
"يرجى المصادقة لبدء عملية حذف الحساب"),
|
||||
"authToManageLegacy": MessageLookupByLibrary.simpleMessage(
|
||||
"يرجى المصادقة لإدارة جهات الاتصال الموثوقة الخاصة بك."),
|
||||
"authToViewPasskey": MessageLookupByLibrary.simpleMessage(
|
||||
"يرجى المصادقة لعرض مفتاح المرور الخاص بك."),
|
||||
"authToViewTrashedFiles": MessageLookupByLibrary.simpleMessage(
|
||||
"يرجى المصادقة لعرض ملفاتك المحذوفة."),
|
||||
"يرجى المصادقة لعرض ملفاتك المحذوفة"),
|
||||
"authToViewYourActiveSessions": MessageLookupByLibrary.simpleMessage(
|
||||
"يرجى المصادقة لعرض جلساتك النشطة."),
|
||||
"authToViewYourHiddenFiles": MessageLookupByLibrary.simpleMessage(
|
||||
"يرجى المصادقة للوصول إلى ملفاتك المخفية."),
|
||||
"يرجى المصادقة للوصول إلى ملفاتك المخفية"),
|
||||
"authToViewYourMemories":
|
||||
MessageLookupByLibrary.simpleMessage("يرجى المصادقة لعرض ذكرياتك."),
|
||||
"authToViewYourRecoveryKey": MessageLookupByLibrary.simpleMessage(
|
||||
@@ -533,6 +533,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"النسخ الاحتياطي لمقاطع الفيديو"),
|
||||
"beach": MessageLookupByLibrary.simpleMessage("رمال وبحر"),
|
||||
"birthday": MessageLookupByLibrary.simpleMessage("تاريخ الميلاد"),
|
||||
"birthdays": MessageLookupByLibrary.simpleMessage("Birthdays"),
|
||||
"blackFridaySale":
|
||||
MessageLookupByLibrary.simpleMessage("تخفيضات الجمعة السوداء"),
|
||||
"blog": MessageLookupByLibrary.simpleMessage("المدونة"),
|
||||
@@ -560,7 +561,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage("إلغاء الاشتراك"),
|
||||
"cannotAddMorePhotosAfterBecomingViewer": m13,
|
||||
"cannotDeleteSharedFiles": MessageLookupByLibrary.simpleMessage(
|
||||
"لا يمكن حذف الملفات المشتركة."),
|
||||
"لا يمكن حذف الملفات المشتركة"),
|
||||
"castAlbum": MessageLookupByLibrary.simpleMessage("بث الألبوم"),
|
||||
"castIPMismatchBody": MessageLookupByLibrary.simpleMessage(
|
||||
"يرجى التأكد من أنك متصل بنفس الشبكة المتصل بها التلفزيون."),
|
||||
@@ -606,6 +607,8 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"click": MessageLookupByLibrary.simpleMessage("• انقر على"),
|
||||
"clickOnTheOverflowMenu": MessageLookupByLibrary.simpleMessage(
|
||||
"• انقر على قائمة الخيارات الإضافية"),
|
||||
"clickToInstallOurBestVersionYet": MessageLookupByLibrary.simpleMessage(
|
||||
"Click to install our best version yet"),
|
||||
"close": MessageLookupByLibrary.simpleMessage("إغلاق"),
|
||||
"clubByCaptureTime":
|
||||
MessageLookupByLibrary.simpleMessage("التجميع حسب وقت الالتقاط"),
|
||||
@@ -622,7 +625,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"codeUsedByYou":
|
||||
MessageLookupByLibrary.simpleMessage("الرمز المستخدم من قبلك"),
|
||||
"collabLinkSectionDescription": MessageLookupByLibrary.simpleMessage(
|
||||
"أنشئ رابطًا يسمح للأشخاص بإضافة الصور ومشاهدتها في ألبومك المشترك دون الحاجة إلى تطبيق Ente أو حساب. خيار مثالي لجمع صور الفعاليات بسهولة."),
|
||||
"أنشئ رابطًا يسمح للأشخاص بإضافة الصور ومشاهدتها في ألبومك المشترك دون الحاجة إلى تطبيق أو حساب Ente. خيار مثالي لجمع صور الفعاليات بسهولة."),
|
||||
"collaborativeLink":
|
||||
MessageLookupByLibrary.simpleMessage("رابط تعاوني"),
|
||||
"collaborativeLinkCreatedFor": m15,
|
||||
@@ -706,7 +709,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"crop": MessageLookupByLibrary.simpleMessage("اقتصاص"),
|
||||
"curatedMemories": MessageLookupByLibrary.simpleMessage("ذكريات منسقة"),
|
||||
"currentUsageIs":
|
||||
MessageLookupByLibrary.simpleMessage("استخدامك الحالي هو"),
|
||||
MessageLookupByLibrary.simpleMessage("استخدامك الحالي هو "),
|
||||
"currentlyRunning":
|
||||
MessageLookupByLibrary.simpleMessage("قيد التشغيل حاليًا"),
|
||||
"custom": MessageLookupByLibrary.simpleMessage("مخصص"),
|
||||
@@ -746,7 +749,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage("الحذف من كليهما"),
|
||||
"deleteFromDevice":
|
||||
MessageLookupByLibrary.simpleMessage("الحذف من الجهاز"),
|
||||
"deleteFromEnte": MessageLookupByLibrary.simpleMessage("الحذف من Ente"),
|
||||
"deleteFromEnte": MessageLookupByLibrary.simpleMessage("حذف من Ente"),
|
||||
"deleteItemCount": m21,
|
||||
"deleteLocation": MessageLookupByLibrary.simpleMessage("حذف الموقع"),
|
||||
"deletePhotos": MessageLookupByLibrary.simpleMessage("حذف الصور"),
|
||||
@@ -784,7 +787,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"disableAutoLock":
|
||||
MessageLookupByLibrary.simpleMessage("تعطيل القفل التلقائي"),
|
||||
"disableDownloadWarningBody": MessageLookupByLibrary.simpleMessage(
|
||||
"لا يزال بإمكان المشاهدين التقاط لقطات شاشة أو حفظ نسخة من صورك باستخدام أدوات خارجية."),
|
||||
"لا يزال بإمكان المشاهدين التقاط لقطات شاشة أو حفظ نسخة من صورك باستخدام أدوات خارجية"),
|
||||
"disableDownloadWarningTitle":
|
||||
MessageLookupByLibrary.simpleMessage("يرجى الملاحظة"),
|
||||
"disableLinkMessage": m23,
|
||||
@@ -883,7 +886,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"تشفير من طرف إلى طرف بشكل افتراضي"),
|
||||
"enteCanEncryptAndPreserveFilesOnlyIfYouGrant":
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"يمكن لـ Ente تشفير وحفظ الملفات فقط إذا منحت الإذن بالوصول إليها."),
|
||||
"يمكن لـ Ente تشفير وحفظ الملفات فقط إذا منحت الإذن بالوصول إليها"),
|
||||
"entePhotosPerm": MessageLookupByLibrary.simpleMessage(
|
||||
"Ente <i>بحاجة إلى إذن</i> لحفظ صورك"),
|
||||
"enteSubscriptionPitch": MessageLookupByLibrary.simpleMessage(
|
||||
@@ -894,7 +897,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage("أدخل اسم الألبوم"),
|
||||
"enterCode": MessageLookupByLibrary.simpleMessage("أدخل الرمز"),
|
||||
"enterCodeDescription": MessageLookupByLibrary.simpleMessage(
|
||||
"أدخل الرمز المقدم من صديقك للمطالبة بمساحة تخزين مجانية لكما."),
|
||||
"أدخل الرمز المقدم من صديقك للمطالبة بمساحة تخزين مجانية لكما"),
|
||||
"enterDateOfBirth":
|
||||
MessageLookupByLibrary.simpleMessage("تاريخ الميلاد (اختياري)"),
|
||||
"enterEmail":
|
||||
@@ -919,6 +922,8 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"يرجى إدخال عنوان بريد إلكتروني صالح."),
|
||||
"enterYourEmailAddress":
|
||||
MessageLookupByLibrary.simpleMessage("أدخل عنوان بريدك الإلكتروني"),
|
||||
"enterYourNewEmailAddress": MessageLookupByLibrary.simpleMessage(
|
||||
"أدخل عنوان بريدك الإلكتروني الجديد"),
|
||||
"enterYourPassword":
|
||||
MessageLookupByLibrary.simpleMessage("أدخل كلمة المرور"),
|
||||
"enterYourRecoveryKey":
|
||||
@@ -995,7 +1000,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"food": MessageLookupByLibrary.simpleMessage("متعة الطهي"),
|
||||
"forYourMemories": MessageLookupByLibrary.simpleMessage("لذكرياتك"),
|
||||
"forgotPassword":
|
||||
MessageLookupByLibrary.simpleMessage("نسيت كلمة المرور؟"),
|
||||
MessageLookupByLibrary.simpleMessage("نسيت كلمة المرور"),
|
||||
"foundFaces":
|
||||
MessageLookupByLibrary.simpleMessage("الوجوه التي تم العثور عليها"),
|
||||
"freeStorageClaimed": MessageLookupByLibrary.simpleMessage(
|
||||
@@ -1025,7 +1030,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"googlePlayId":
|
||||
MessageLookupByLibrary.simpleMessage("معرّف Google Play"),
|
||||
"grantFullAccessPrompt": MessageLookupByLibrary.simpleMessage(
|
||||
"يرجى السماح بالوصول إلى جميع الصور في تطبيق الإعدادات."),
|
||||
"الرجاء السماح بالوصول إلى جميع الصور في تطبيق الإعدادات"),
|
||||
"grantPermission": MessageLookupByLibrary.simpleMessage("منح الإذن"),
|
||||
"greenery": MessageLookupByLibrary.simpleMessage("الحياة الخضراء"),
|
||||
"groupNearbyPhotos":
|
||||
@@ -1033,6 +1038,8 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"guestView": MessageLookupByLibrary.simpleMessage("عرض الضيف"),
|
||||
"guestViewEnablePreSteps": MessageLookupByLibrary.simpleMessage(
|
||||
"لتمكين عرض الضيف، يرجى إعداد رمز مرور الجهاز أو قفل الشاشة في إعدادات النظام."),
|
||||
"happyBirthday":
|
||||
MessageLookupByLibrary.simpleMessage("Happy birthday! 🥳"),
|
||||
"hearUsExplanation": MessageLookupByLibrary.simpleMessage(
|
||||
"نحن لا نتتبع عمليات تثبيت التطبيق. سيساعدنا إذا أخبرتنا أين وجدتنا!"),
|
||||
"hearUsWhereTitle":
|
||||
@@ -1171,7 +1178,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"loadMessage1": MessageLookupByLibrary.simpleMessage(
|
||||
"يمكنك مشاركة اشتراكك مع عائلتك."),
|
||||
"loadMessage2": MessageLookupByLibrary.simpleMessage(
|
||||
"لقد حفظنا أكثر من 200 مليون ذكرى حتى الآن."),
|
||||
"لقد حفظنا أكثر من 200 مليون ذكرى حتى الآن"),
|
||||
"loadMessage3": MessageLookupByLibrary.simpleMessage(
|
||||
"نحتفظ بـ 3 نسخ من بياناتك، إحداها في ملجأ للطوارئ تحت الأرض."),
|
||||
"loadMessage4": MessageLookupByLibrary.simpleMessage(
|
||||
@@ -1228,6 +1235,8 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"longpressOnAnItemToViewInFullscreen":
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"اضغط مطولاً على عنصر لعرضه في وضع ملء الشاشة."),
|
||||
"lookBackOnYourMemories": MessageLookupByLibrary.simpleMessage(
|
||||
"Look back on your memories 🌄"),
|
||||
"loopVideoOff":
|
||||
MessageLookupByLibrary.simpleMessage("إيقاف تكرار الفيديو"),
|
||||
"loopVideoOn":
|
||||
@@ -1308,6 +1317,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"newAlbum": MessageLookupByLibrary.simpleMessage("ألبوم جديد"),
|
||||
"newLocation": MessageLookupByLibrary.simpleMessage("موقع جديد"),
|
||||
"newPerson": MessageLookupByLibrary.simpleMessage("شخص جديد"),
|
||||
"newPhotosEmoji": MessageLookupByLibrary.simpleMessage(" new 📸"),
|
||||
"newRange": MessageLookupByLibrary.simpleMessage("نطاق جديد"),
|
||||
"newToEnte": MessageLookupByLibrary.simpleMessage("جديد في Ente"),
|
||||
"newest": MessageLookupByLibrary.simpleMessage("الأحدث"),
|
||||
@@ -1319,7 +1329,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage("لم يتم العثور على جهاز."),
|
||||
"noDeviceLimit": MessageLookupByLibrary.simpleMessage("لا شيء"),
|
||||
"noDeviceThatCanBeDeleted": MessageLookupByLibrary.simpleMessage(
|
||||
"لا توجد ملفات على هذا الجهاز يمكن حذفها."),
|
||||
"لا توجد ملفات على هذا الجهاز يمكن حذفها"),
|
||||
"noDuplicates":
|
||||
MessageLookupByLibrary.simpleMessage("✨ لا توجد ملفات مكررة"),
|
||||
"noEnteAccountExclamation":
|
||||
@@ -1336,7 +1346,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage("لا يوجد اتصال بالإنترنت"),
|
||||
"noPhotosAreBeingBackedUpRightNow":
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"لا يتم نسخ أي صور احتياطيًا في الوقت الحالي."),
|
||||
"لا يتم نسخ أي صور احتياطيًا في الوقت الحالي"),
|
||||
"noPhotosFoundHere":
|
||||
MessageLookupByLibrary.simpleMessage("لم يتم العثور على صور هنا"),
|
||||
"noQuickLinksSelected":
|
||||
@@ -1364,6 +1374,9 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"على <branding>Ente</branding>"),
|
||||
"onTheRoad":
|
||||
MessageLookupByLibrary.simpleMessage("على الطريق مرة أخرى"),
|
||||
"onThisDay": MessageLookupByLibrary.simpleMessage("On this day"),
|
||||
"onThisDayNotificationExplanation": MessageLookupByLibrary.simpleMessage(
|
||||
"Receive reminders about memories from this day in previous years."),
|
||||
"onlyFamilyAdminCanChangeCode": m54,
|
||||
"onlyThem": MessageLookupByLibrary.simpleMessage("هم فقط"),
|
||||
"oops": MessageLookupByLibrary.simpleMessage("عفوًا"),
|
||||
@@ -1464,9 +1477,9 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"يرجى الاتصال بالدعم إذا استمرت المشكلة."),
|
||||
"pleaseEmailUsAt": m63,
|
||||
"pleaseGrantPermissions":
|
||||
MessageLookupByLibrary.simpleMessage("يرجى منح الأذونات."),
|
||||
MessageLookupByLibrary.simpleMessage("يرجى منح الأذونات"),
|
||||
"pleaseLoginAgain":
|
||||
MessageLookupByLibrary.simpleMessage("يرجى تسجيل الدخول مرة أخرى."),
|
||||
MessageLookupByLibrary.simpleMessage("يرجى تسجيل الدخول مرة أخرى"),
|
||||
"pleaseSelectQuickLinksToRemove": MessageLookupByLibrary.simpleMessage(
|
||||
"يرجى تحديد الروابط السريعة للإزالة."),
|
||||
"pleaseSendTheLogsTo": m64,
|
||||
@@ -1480,7 +1493,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"يرجى الانتظار، جارٍ حذف الألبوم"),
|
||||
"pleaseWaitForSometimeBeforeRetrying":
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"يرجى الانتظار لبعض الوقت قبل إعادة المحاولة."),
|
||||
"يرجى الانتظار لبعض الوقت قبل إعادة المحاولة"),
|
||||
"pleaseWaitThisWillTakeAWhile": MessageLookupByLibrary.simpleMessage(
|
||||
"يرجى الانتظار، قد يستغرق هذا بعض الوقت."),
|
||||
"posingWithThem": m65,
|
||||
@@ -1520,6 +1533,8 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"reassignedToName": m68,
|
||||
"reassigningLoading":
|
||||
MessageLookupByLibrary.simpleMessage("جارٍ إعادة التعيين..."),
|
||||
"receiveRemindersOnBirthdays": MessageLookupByLibrary.simpleMessage(
|
||||
"Receive reminders when it\'s someone\'s birthday. Tapping on the notification will take you to photos of the birthday person."),
|
||||
"recover": MessageLookupByLibrary.simpleMessage("استعادة"),
|
||||
"recoverAccount":
|
||||
MessageLookupByLibrary.simpleMessage("استعادة الحساب"),
|
||||
@@ -1539,7 +1554,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"recoveryKeySuccessBody": MessageLookupByLibrary.simpleMessage(
|
||||
"مفتاح الاسترداد الخاص بك صالح. شكرًا على التحقق.\n\nيرجى تذكر الاحتفاظ بنسخة احتياطية آمنة من مفتاح الاسترداد."),
|
||||
"recoveryKeyVerified": MessageLookupByLibrary.simpleMessage(
|
||||
"تم التحقق من مفتاح الاسترداد."),
|
||||
"تم التحقق من مفتاح الاسترداد"),
|
||||
"recoveryKeyVerifyReason": MessageLookupByLibrary.simpleMessage(
|
||||
"مفتاح الاسترداد هو الطريقة الوحيدة لاستعادة صورك إذا نسيت كلمة المرور. يمكنك العثور عليه في الإعدادات > الحساب.\n\nالرجاء إدخال مفتاح الاسترداد هنا للتحقق من أنك حفظته بشكل صحيح."),
|
||||
"recoveryReady": m70,
|
||||
@@ -1569,7 +1584,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage("الإحالات متوقفة مؤقتًا"),
|
||||
"rejectRecovery": MessageLookupByLibrary.simpleMessage("رفض الاسترداد"),
|
||||
"remindToEmptyDeviceTrash": MessageLookupByLibrary.simpleMessage(
|
||||
"تذكر أيضًا إفراغ \"المحذوفة مؤخرًا\" من \"الإعدادات\" -> \"التخزين\" لاستعادة المساحة المحررة."),
|
||||
"تذكر أيضًا إفراغ \"المحذوفة مؤخرًا\" من \"الإعدادات\" -> \"التخزين\" لاستعادة المساحة المحررة"),
|
||||
"remindToEmptyEnteTrash": MessageLookupByLibrary.simpleMessage(
|
||||
"تذكر أيضًا إفراغ \"سلة المهملات\" لاستعادة المساحة المحررة."),
|
||||
"remoteImages": MessageLookupByLibrary.simpleMessage("الصور عن بعد"),
|
||||
@@ -1653,7 +1668,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"savePerson": MessageLookupByLibrary.simpleMessage("حفظ الشخص"),
|
||||
"saveYourRecoveryKeyIfYouHaventAlready":
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"احفظ مفتاح الاسترداد إذا لم تكن قد فعلت ذلك بالفعل."),
|
||||
"احفظ مفتاح الاسترداد إذا لم تكن قد فعلت ذلك"),
|
||||
"saving": MessageLookupByLibrary.simpleMessage("جارٍ الحفظ..."),
|
||||
"savingEdits":
|
||||
MessageLookupByLibrary.simpleMessage("جارٍ حفظ التعديلات..."),
|
||||
@@ -1846,6 +1861,8 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"sorryWeCouldNotGenerateSecureKeysOnThisDevicennplease":
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"عذرًا، لم نتمكن من إنشاء مفاتيح آمنة على هذا الجهاز.\n\nيرجى التسجيل من جهاز مختلف."),
|
||||
"sorryWeHadToPauseYourBackups": MessageLookupByLibrary.simpleMessage(
|
||||
"Sorry, we had to pause your backups"),
|
||||
"sort": MessageLookupByLibrary.simpleMessage("فرز"),
|
||||
"sortAlbumsBy": MessageLookupByLibrary.simpleMessage("فرز حسب"),
|
||||
"sortNewestFirst": MessageLookupByLibrary.simpleMessage("الأحدث أولاً"),
|
||||
@@ -1868,7 +1885,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"storageBreakupYou": MessageLookupByLibrary.simpleMessage("أنت"),
|
||||
"storageInGB": m91,
|
||||
"storageLimitExceeded":
|
||||
MessageLookupByLibrary.simpleMessage("تم تجاوز حد التخزين."),
|
||||
MessageLookupByLibrary.simpleMessage("تم تجاوز حد التخزين"),
|
||||
"storageUsageInfo": m92,
|
||||
"streamDetails": MessageLookupByLibrary.simpleMessage("تفاصيل البث"),
|
||||
"strongStrength": MessageLookupByLibrary.simpleMessage("قوية"),
|
||||
@@ -1912,7 +1929,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"thankYouForSubscribing":
|
||||
MessageLookupByLibrary.simpleMessage("شكرًا لاشتراكك!"),
|
||||
"theDownloadCouldNotBeCompleted":
|
||||
MessageLookupByLibrary.simpleMessage("تعذر إكمال التنزيل."),
|
||||
MessageLookupByLibrary.simpleMessage("تعذر إكمال التنزيل"),
|
||||
"theLinkYouAreTryingToAccessHasExpired":
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"انتهت صلاحية الرابط الذي تحاول الوصول إليه."),
|
||||
@@ -1933,7 +1950,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"هذا الألبوم لديه رابط تعاوني بالفعل."),
|
||||
"thisCanBeUsedToRecoverYourAccountIfYou":
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"يمكن استخدام هذا المفتاح لاستعادة حسابك إذا فقدت جهاز المصادقة الثنائية."),
|
||||
"يمكن استخدام هذا المفتاح لاستعادة حسابك إذا فقدت العامل الثاني للمصادقة"),
|
||||
"thisDevice": MessageLookupByLibrary.simpleMessage("هذا الجهاز"),
|
||||
"thisEmailIsAlreadyInUse": MessageLookupByLibrary.simpleMessage(
|
||||
"هذا البريد الإلكتروني مستخدم بالفعل."),
|
||||
@@ -1950,7 +1967,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"سيؤدي هذا إلى تسجيل خروجك من الجهاز التالي:"),
|
||||
"thisWillLogYouOutOfThisDevice": MessageLookupByLibrary.simpleMessage(
|
||||
"سيؤدي هذا إلى تسجيل خروجك من هذا الجهاز."),
|
||||
"سيؤدي هذا إلى تسجيل خروجك من هذا الجهاز!"),
|
||||
"thisWillMakeTheDateAndTimeOfAllSelected":
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"سيجعل هذا تاريخ ووقت جميع الصور المحددة متماثلاً."),
|
||||
@@ -2144,14 +2161,14 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"تعذر جلب تفاصيل التخزين الخاصة بك."),
|
||||
"yourSubscriptionHasExpired":
|
||||
MessageLookupByLibrary.simpleMessage("انتهت صلاحية اشتراكك."),
|
||||
MessageLookupByLibrary.simpleMessage("انتهت صلاحية اشتراكك"),
|
||||
"yourSubscriptionWasUpdatedSuccessfully":
|
||||
MessageLookupByLibrary.simpleMessage("تم تحديث اشتراكك بنجاح."),
|
||||
"yourVerificationCodeHasExpired": MessageLookupByLibrary.simpleMessage(
|
||||
"انتهت صلاحية رمز التحقق الخاص بك."),
|
||||
"youveNoDuplicateFilesThatCanBeCleared":
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"لا توجد لديك أي ملفات مكررة يمكن مسحها."),
|
||||
"لا توجد لديك أي ملفات مكررة يمكن مسحها"),
|
||||
"youveNoFilesInThisAlbumThatCanBeDeleted":
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"لا توجد لديك ملفات في هذا الألبوم يمكن حذفها."),
|
||||
|
||||
15
mobile/lib/generated/intl/messages_be.dart
generated
@@ -49,6 +49,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"askDeleteReason": MessageLookupByLibrary.simpleMessage(
|
||||
"Якая асноўная прычына выдалення вашага ўліковага запісу?"),
|
||||
"backup": MessageLookupByLibrary.simpleMessage("Рэзервовая копія"),
|
||||
"birthdays": MessageLookupByLibrary.simpleMessage("Birthdays"),
|
||||
"cancel": MessageLookupByLibrary.simpleMessage("Скасаваць"),
|
||||
"change": MessageLookupByLibrary.simpleMessage("Змяніць"),
|
||||
"changeEmail": MessageLookupByLibrary.simpleMessage(
|
||||
@@ -57,6 +58,8 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage("Змяніць пароль"),
|
||||
"checkInboxAndSpamFolder": MessageLookupByLibrary.simpleMessage(
|
||||
"Праверце свае ўваходныя лісты (і спам) для завяршэння праверкі"),
|
||||
"clickToInstallOurBestVersionYet": MessageLookupByLibrary.simpleMessage(
|
||||
"Click to install our best version yet"),
|
||||
"codeAppliedPageTitle":
|
||||
MessageLookupByLibrary.simpleMessage("Код ужыты"),
|
||||
"confirm": MessageLookupByLibrary.simpleMessage("Пацвердзіць"),
|
||||
@@ -141,6 +144,8 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"general": MessageLookupByLibrary.simpleMessage("Асноўныя"),
|
||||
"generatingEncryptionKeys": MessageLookupByLibrary.simpleMessage(
|
||||
"Генерацыя ключоў шыфравання..."),
|
||||
"happyBirthday":
|
||||
MessageLookupByLibrary.simpleMessage("Happy birthday! 🥳"),
|
||||
"howItWorks": MessageLookupByLibrary.simpleMessage("Як гэта працуе"),
|
||||
"ignoreUpdate": MessageLookupByLibrary.simpleMessage("Iгнараваць"),
|
||||
"incorrectPasswordTitle":
|
||||
@@ -167,12 +172,15 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"loginTerms": MessageLookupByLibrary.simpleMessage(
|
||||
"Націскаючы ўвайсці, я пагаджаюся з <u-terms>умовамі абслугоўвання</u-terms> і <u-policy>палітыкай прыватнасці</u-policy>"),
|
||||
"logout": MessageLookupByLibrary.simpleMessage("Выйсці"),
|
||||
"lookBackOnYourMemories": MessageLookupByLibrary.simpleMessage(
|
||||
"Look back on your memories 🌄"),
|
||||
"lostDevice": MessageLookupByLibrary.simpleMessage("Згубілі прыладу?"),
|
||||
"magicSearch": MessageLookupByLibrary.simpleMessage("Магічны пошук"),
|
||||
"manage": MessageLookupByLibrary.simpleMessage("Кіраванне"),
|
||||
"manageParticipants": MessageLookupByLibrary.simpleMessage("Кіраванне"),
|
||||
"moderateStrength": MessageLookupByLibrary.simpleMessage("Умераны"),
|
||||
"never": MessageLookupByLibrary.simpleMessage("Ніколі"),
|
||||
"newPhotosEmoji": MessageLookupByLibrary.simpleMessage(" new 📸"),
|
||||
"noDuplicates":
|
||||
MessageLookupByLibrary.simpleMessage("✨ Няма дублікатаў"),
|
||||
"noRecoveryKey":
|
||||
@@ -181,6 +189,9 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"Вашы даныя не могуць быць расшыфраваны без пароля або ключа аднаўлення па прычыне архітэктуры наша пратакола скразнога шыфравання"),
|
||||
"notifications": MessageLookupByLibrary.simpleMessage("Апавяшчэнні"),
|
||||
"ok": MessageLookupByLibrary.simpleMessage("Добра"),
|
||||
"onThisDay": MessageLookupByLibrary.simpleMessage("On this day"),
|
||||
"onThisDayNotificationExplanation": MessageLookupByLibrary.simpleMessage(
|
||||
"Receive reminders about memories from this day in previous years."),
|
||||
"oops": MessageLookupByLibrary.simpleMessage("Вой"),
|
||||
"oopsSomethingWentWrong":
|
||||
MessageLookupByLibrary.simpleMessage("Штосьці пайшло не так"),
|
||||
@@ -197,6 +208,8 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"privacyPolicyTitle":
|
||||
MessageLookupByLibrary.simpleMessage("Палітыка прыватнасці"),
|
||||
"rateUs": MessageLookupByLibrary.simpleMessage("Ацаніце нас"),
|
||||
"receiveRemindersOnBirthdays": MessageLookupByLibrary.simpleMessage(
|
||||
"Receive reminders when it\'s someone\'s birthday. Tapping on the notification will take you to photos of the birthday person."),
|
||||
"recover": MessageLookupByLibrary.simpleMessage("Аднавіць"),
|
||||
"recoverAccount":
|
||||
MessageLookupByLibrary.simpleMessage("Аднавіць уліковы запіс"),
|
||||
@@ -248,6 +261,8 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"sorryWeCouldNotGenerateSecureKeysOnThisDevicennplease":
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"Немагчыма згенерыраваць ключы бяспекі на гэтай прыладзе.\n\nЗарэгіструйцеся з іншай прылады."),
|
||||
"sorryWeHadToPauseYourBackups": MessageLookupByLibrary.simpleMessage(
|
||||
"Sorry, we had to pause your backups"),
|
||||
"status": MessageLookupByLibrary.simpleMessage("Стан"),
|
||||
"storageInGB": m91,
|
||||
"strongStrength": MessageLookupByLibrary.simpleMessage("Надзейны"),
|
||||
|
||||
18
mobile/lib/generated/intl/messages_bg.dart
generated
@@ -21,5 +21,21 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
String get localeName => 'bg';
|
||||
|
||||
final messages = _notInlinedMessages(_notInlinedMessages);
|
||||
static Map<String, Function> _notInlinedMessages(_) => <String, Function>{};
|
||||
static Map<String, Function> _notInlinedMessages(_) => <String, Function>{
|
||||
"birthdays": MessageLookupByLibrary.simpleMessage("Birthdays"),
|
||||
"clickToInstallOurBestVersionYet": MessageLookupByLibrary.simpleMessage(
|
||||
"Click to install our best version yet"),
|
||||
"happyBirthday":
|
||||
MessageLookupByLibrary.simpleMessage("Happy birthday! 🥳"),
|
||||
"lookBackOnYourMemories": MessageLookupByLibrary.simpleMessage(
|
||||
"Look back on your memories 🌄"),
|
||||
"newPhotosEmoji": MessageLookupByLibrary.simpleMessage(" new 📸"),
|
||||
"onThisDay": MessageLookupByLibrary.simpleMessage("On this day"),
|
||||
"onThisDayNotificationExplanation": MessageLookupByLibrary.simpleMessage(
|
||||
"Receive reminders about memories from this day in previous years."),
|
||||
"receiveRemindersOnBirthdays": MessageLookupByLibrary.simpleMessage(
|
||||
"Receive reminders when it\'s someone\'s birthday. Tapping on the notification will take you to photos of the birthday person."),
|
||||
"sorryWeHadToPauseYourBackups": MessageLookupByLibrary.simpleMessage(
|
||||
"Sorry, we had to pause your backups")
|
||||
};
|
||||
}
|
||||
|
||||
18
mobile/lib/generated/intl/messages_ca.dart
generated
@@ -21,5 +21,21 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
String get localeName => 'ca';
|
||||
|
||||
final messages = _notInlinedMessages(_notInlinedMessages);
|
||||
static Map<String, Function> _notInlinedMessages(_) => <String, Function>{};
|
||||
static Map<String, Function> _notInlinedMessages(_) => <String, Function>{
|
||||
"birthdays": MessageLookupByLibrary.simpleMessage("Birthdays"),
|
||||
"clickToInstallOurBestVersionYet": MessageLookupByLibrary.simpleMessage(
|
||||
"Click to install our best version yet"),
|
||||
"happyBirthday":
|
||||
MessageLookupByLibrary.simpleMessage("Happy birthday! 🥳"),
|
||||
"lookBackOnYourMemories": MessageLookupByLibrary.simpleMessage(
|
||||
"Look back on your memories 🌄"),
|
||||
"newPhotosEmoji": MessageLookupByLibrary.simpleMessage(" new 📸"),
|
||||
"onThisDay": MessageLookupByLibrary.simpleMessage("On this day"),
|
||||
"onThisDayNotificationExplanation": MessageLookupByLibrary.simpleMessage(
|
||||
"Receive reminders about memories from this day in previous years."),
|
||||
"receiveRemindersOnBirthdays": MessageLookupByLibrary.simpleMessage(
|
||||
"Receive reminders when it\'s someone\'s birthday. Tapping on the notification will take you to photos of the birthday person."),
|
||||
"sorryWeHadToPauseYourBackups": MessageLookupByLibrary.simpleMessage(
|
||||
"Sorry, we had to pause your backups")
|
||||
};
|
||||
}
|
||||
|
||||
15
mobile/lib/generated/intl/messages_cs.dart
generated
@@ -90,6 +90,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"backupFile": MessageLookupByLibrary.simpleMessage("Zálohovat soubor"),
|
||||
"backupStatus": MessageLookupByLibrary.simpleMessage("Stav zálohování"),
|
||||
"birthday": MessageLookupByLibrary.simpleMessage("Narozeniny"),
|
||||
"birthdays": MessageLookupByLibrary.simpleMessage("Birthdays"),
|
||||
"blog": MessageLookupByLibrary.simpleMessage("Blog"),
|
||||
"cachedData":
|
||||
MessageLookupByLibrary.simpleMessage("Data uložená v mezipaměti"),
|
||||
@@ -112,6 +113,8 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"clearCaches":
|
||||
MessageLookupByLibrary.simpleMessage("Vymazat mezipaměť"),
|
||||
"clearIndexes": MessageLookupByLibrary.simpleMessage("Smazat indexy"),
|
||||
"clickToInstallOurBestVersionYet": MessageLookupByLibrary.simpleMessage(
|
||||
"Click to install our best version yet"),
|
||||
"close": MessageLookupByLibrary.simpleMessage("Zavřít"),
|
||||
"codeAppliedPageTitle":
|
||||
MessageLookupByLibrary.simpleMessage("Kód byl použit"),
|
||||
@@ -259,6 +262,8 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"Generování šifrovacích klíčů..."),
|
||||
"goToSettings":
|
||||
MessageLookupByLibrary.simpleMessage("Jít do nastavení"),
|
||||
"happyBirthday":
|
||||
MessageLookupByLibrary.simpleMessage("Happy birthday! 🥳"),
|
||||
"hidden": MessageLookupByLibrary.simpleMessage("Skryté"),
|
||||
"hide": MessageLookupByLibrary.simpleMessage("Skrýt"),
|
||||
"howItWorks": MessageLookupByLibrary.simpleMessage("Jak to funguje"),
|
||||
@@ -305,6 +310,8 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"loginWithTOTP":
|
||||
MessageLookupByLibrary.simpleMessage("Přihlášení pomocí TOTP"),
|
||||
"logout": MessageLookupByLibrary.simpleMessage("Odhlásit se"),
|
||||
"lookBackOnYourMemories": MessageLookupByLibrary.simpleMessage(
|
||||
"Look back on your memories 🌄"),
|
||||
"lostDevice":
|
||||
MessageLookupByLibrary.simpleMessage("Ztratili jste zařízení?"),
|
||||
"manage": MessageLookupByLibrary.simpleMessage("Spravovat"),
|
||||
@@ -330,6 +337,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"never": MessageLookupByLibrary.simpleMessage("Nikdy"),
|
||||
"newAlbum": MessageLookupByLibrary.simpleMessage("Nové album"),
|
||||
"newPerson": MessageLookupByLibrary.simpleMessage("Nová osoba"),
|
||||
"newPhotosEmoji": MessageLookupByLibrary.simpleMessage(" new 📸"),
|
||||
"newRange": MessageLookupByLibrary.simpleMessage("Nový rozsah"),
|
||||
"newest": MessageLookupByLibrary.simpleMessage("Nejnovější"),
|
||||
"next": MessageLookupByLibrary.simpleMessage("Další"),
|
||||
@@ -351,6 +359,9 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"onDevice": MessageLookupByLibrary.simpleMessage("V zařízení"),
|
||||
"onEnte": MessageLookupByLibrary.simpleMessage(
|
||||
"Na <branding>ente</branding>"),
|
||||
"onThisDay": MessageLookupByLibrary.simpleMessage("On this day"),
|
||||
"onThisDayNotificationExplanation": MessageLookupByLibrary.simpleMessage(
|
||||
"Receive reminders about memories from this day in previous years."),
|
||||
"oops": MessageLookupByLibrary.simpleMessage("Jejda"),
|
||||
"oopsSomethingWentWrong":
|
||||
MessageLookupByLibrary.simpleMessage("Jejda, něco se pokazilo"),
|
||||
@@ -386,6 +397,8 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"radius": MessageLookupByLibrary.simpleMessage("Rádius"),
|
||||
"rateUs": MessageLookupByLibrary.simpleMessage("Ohodnoť nás"),
|
||||
"rateUsOnStore": m67,
|
||||
"receiveRemindersOnBirthdays": MessageLookupByLibrary.simpleMessage(
|
||||
"Receive reminders when it\'s someone\'s birthday. Tapping on the notification will take you to photos of the birthday person."),
|
||||
"recoverButton": MessageLookupByLibrary.simpleMessage("Obnovit"),
|
||||
"recoveryKeyVerified":
|
||||
MessageLookupByLibrary.simpleMessage("Obnovovací klíč byl ověřen"),
|
||||
@@ -477,6 +490,8 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"sharing": MessageLookupByLibrary.simpleMessage("Sdílení..."),
|
||||
"skip": MessageLookupByLibrary.simpleMessage("Přeskočit"),
|
||||
"sorry": MessageLookupByLibrary.simpleMessage("Omlouváme se"),
|
||||
"sorryWeHadToPauseYourBackups": MessageLookupByLibrary.simpleMessage(
|
||||
"Sorry, we had to pause your backups"),
|
||||
"sort": MessageLookupByLibrary.simpleMessage("Seřadit"),
|
||||
"sortAlbumsBy": MessageLookupByLibrary.simpleMessage("Seřadit podle"),
|
||||
"sortNewestFirst":
|
||||
|
||||
15
mobile/lib/generated/intl/messages_da.dart
generated
@@ -90,6 +90,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage("Sikkerhedskopierede mapper"),
|
||||
"backupStatusDescription": MessageLookupByLibrary.simpleMessage(
|
||||
"Elementer, der er blevet sikkerhedskopieret, vil blive vist her"),
|
||||
"birthdays": MessageLookupByLibrary.simpleMessage("Birthdays"),
|
||||
"canNotOpenBody": MessageLookupByLibrary.simpleMessage(
|
||||
"Beklager, dette album kan ikke åbnes i appen."),
|
||||
"canOnlyRemoveFilesOwnedByYou": MessageLookupByLibrary.simpleMessage(
|
||||
@@ -107,6 +108,8 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"checkInboxAndSpamFolder": MessageLookupByLibrary.simpleMessage(
|
||||
"Tjek venligst din indbakke (og spam) for at færdiggøre verificeringen"),
|
||||
"clearIndexes": MessageLookupByLibrary.simpleMessage("Ryd indekser"),
|
||||
"clickToInstallOurBestVersionYet": MessageLookupByLibrary.simpleMessage(
|
||||
"Click to install our best version yet"),
|
||||
"codeCopiedToClipboard": MessageLookupByLibrary.simpleMessage(
|
||||
"Kode kopieret til udklipsholder"),
|
||||
"collabLinkSectionDescription": MessageLookupByLibrary.simpleMessage(
|
||||
@@ -226,6 +229,8 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"Spar plads på din enhed ved at rydde filer, der allerede er sikkerhedskopieret."),
|
||||
"generatingEncryptionKeys": MessageLookupByLibrary.simpleMessage(
|
||||
"Genererer krypteringsnøgler..."),
|
||||
"happyBirthday":
|
||||
MessageLookupByLibrary.simpleMessage("Happy birthday! 🥳"),
|
||||
"help": MessageLookupByLibrary.simpleMessage("Hjælp"),
|
||||
"howItWorks":
|
||||
MessageLookupByLibrary.simpleMessage("Sådan fungerer det"),
|
||||
@@ -268,6 +273,8 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"longPressAnEmailToVerifyEndToEndEncryption":
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"Langt tryk på en e-mail for at bekræfte slutningen af krypteringen."),
|
||||
"lookBackOnYourMemories": MessageLookupByLibrary.simpleMessage(
|
||||
"Look back on your memories 🌄"),
|
||||
"lostDevice":
|
||||
MessageLookupByLibrary.simpleMessage("Har du mistet enhed?"),
|
||||
"machineLearning": MessageLookupByLibrary.simpleMessage("Maskinlæring"),
|
||||
@@ -289,11 +296,15 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"moments": MessageLookupByLibrary.simpleMessage("Øjeblikke"),
|
||||
"never": MessageLookupByLibrary.simpleMessage("Aldrig"),
|
||||
"newAlbum": MessageLookupByLibrary.simpleMessage("Nyt album"),
|
||||
"newPhotosEmoji": MessageLookupByLibrary.simpleMessage(" new 📸"),
|
||||
"next": MessageLookupByLibrary.simpleMessage("Næste"),
|
||||
"noDeviceLimit": MessageLookupByLibrary.simpleMessage("Ingen"),
|
||||
"noRecoveryKey":
|
||||
MessageLookupByLibrary.simpleMessage("Ingen gendannelsesnøgle?"),
|
||||
"ok": MessageLookupByLibrary.simpleMessage("Ok"),
|
||||
"onThisDay": MessageLookupByLibrary.simpleMessage("On this day"),
|
||||
"onThisDayNotificationExplanation": MessageLookupByLibrary.simpleMessage(
|
||||
"Receive reminders about memories from this day in previous years."),
|
||||
"oops": MessageLookupByLibrary.simpleMessage("Ups"),
|
||||
"oopsSomethingWentWrong":
|
||||
MessageLookupByLibrary.simpleMessage("Ups, noget gik galt"),
|
||||
@@ -320,6 +331,8 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage("Privatlivspolitik"),
|
||||
"publicLinkEnabled":
|
||||
MessageLookupByLibrary.simpleMessage("Offentligt link aktiveret"),
|
||||
"receiveRemindersOnBirthdays": MessageLookupByLibrary.simpleMessage(
|
||||
"Receive reminders when it\'s someone\'s birthday. Tapping on the notification will take you to photos of the birthday person."),
|
||||
"recover": MessageLookupByLibrary.simpleMessage("Gendan"),
|
||||
"recoverAccount": MessageLookupByLibrary.simpleMessage("Gendan konto"),
|
||||
"recoverButton": MessageLookupByLibrary.simpleMessage("Gendan"),
|
||||
@@ -402,6 +415,8 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"sorryWeCouldNotGenerateSecureKeysOnThisDevicennplease":
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"Beklager, vi kunne ikke generere sikre krypteringsnøgler på denne enhed.\n\nForsøg venligst at oprette en konto fra en anden enhed."),
|
||||
"sorryWeHadToPauseYourBackups": MessageLookupByLibrary.simpleMessage(
|
||||
"Sorry, we had to pause your backups"),
|
||||
"status": MessageLookupByLibrary.simpleMessage("Status"),
|
||||
"storageInGB": m91,
|
||||
"strongStrength": MessageLookupByLibrary.simpleMessage("Stærkt"),
|
||||
|
||||
28
mobile/lib/generated/intl/messages_de.dart
generated
@@ -84,9 +84,6 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
static String m21(count) =>
|
||||
"${Intl.plural(count, one: 'Lösche ${count} Element', other: 'Lösche ${count} Elemente')}";
|
||||
|
||||
static String m116(count) =>
|
||||
"Sollen die Fotos (und Videos) aus diesen ${count} Alben auch aus <bold>allen</bold> anderen Alben gelöscht werden, in denen sie enthalten sind?";
|
||||
|
||||
static String m22(currentlyDeleting, totalCount) =>
|
||||
"Lösche ${currentlyDeleting} / ${totalCount}";
|
||||
|
||||
@@ -229,8 +226,6 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
static String m77(snapshotLength, searchLength) =>
|
||||
"Abschnittslänge stimmt nicht überein: ${snapshotLength} != ${searchLength}";
|
||||
|
||||
static String m117(count) => "${count} ausgewählt";
|
||||
|
||||
static String m78(count) => "${count} ausgewählt";
|
||||
|
||||
static String m79(count, yourCount) =>
|
||||
@@ -345,9 +340,6 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage("Willkommen zurück!"),
|
||||
"ackPasswordLostWarning": MessageLookupByLibrary.simpleMessage(
|
||||
"Ich verstehe, dass ich meine Daten verlieren kann, wenn ich mein Passwort vergesse, da meine Daten <underline>Ende-zu-Ende-verschlüsselt</underline> sind."),
|
||||
"actionNotSupportedOnFavouritesAlbum":
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"Aktion für das Favoritenalbum nicht unterstützt"),
|
||||
"activeSessions":
|
||||
MessageLookupByLibrary.simpleMessage("Aktive Sitzungen"),
|
||||
"add": MessageLookupByLibrary.simpleMessage("Hinzufügen"),
|
||||
@@ -375,8 +367,6 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage("Details der Add-ons"),
|
||||
"addOnValidTill": m3,
|
||||
"addOns": MessageLookupByLibrary.simpleMessage("Add-ons"),
|
||||
"addParticipants":
|
||||
MessageLookupByLibrary.simpleMessage("Teilnehmer hinzufügen"),
|
||||
"addPhotos": MessageLookupByLibrary.simpleMessage("Fotos hinzufügen"),
|
||||
"addSelected":
|
||||
MessageLookupByLibrary.simpleMessage("Auswahl hinzufügen"),
|
||||
@@ -561,6 +551,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"backupVideos": MessageLookupByLibrary.simpleMessage("Videos sichern"),
|
||||
"beach": MessageLookupByLibrary.simpleMessage("Am Strand"),
|
||||
"birthday": MessageLookupByLibrary.simpleMessage("Geburtstag"),
|
||||
"birthdays": MessageLookupByLibrary.simpleMessage("Birthdays"),
|
||||
"blackFridaySale":
|
||||
MessageLookupByLibrary.simpleMessage("Black-Friday-Aktion"),
|
||||
"blog": MessageLookupByLibrary.simpleMessage("Blog"),
|
||||
@@ -635,6 +626,8 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"click": MessageLookupByLibrary.simpleMessage("• Klick"),
|
||||
"clickOnTheOverflowMenu": MessageLookupByLibrary.simpleMessage(
|
||||
"• Klicken Sie auf das Überlaufmenü"),
|
||||
"clickToInstallOurBestVersionYet": MessageLookupByLibrary.simpleMessage(
|
||||
"Click to install our best version yet"),
|
||||
"close": MessageLookupByLibrary.simpleMessage("Schließen"),
|
||||
"clubByCaptureTime": MessageLookupByLibrary.simpleMessage(
|
||||
"Nach Aufnahmezeit gruppieren"),
|
||||
@@ -783,7 +776,6 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"deleteItemCount": m21,
|
||||
"deleteLocation":
|
||||
MessageLookupByLibrary.simpleMessage("Standort löschen"),
|
||||
"deleteMultipleAlbumDialog": m116,
|
||||
"deletePhotos": MessageLookupByLibrary.simpleMessage("Fotos löschen"),
|
||||
"deleteProgress": m22,
|
||||
"deleteReason1": MessageLookupByLibrary.simpleMessage(
|
||||
@@ -1084,6 +1076,8 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"guestView": MessageLookupByLibrary.simpleMessage("Gastansicht"),
|
||||
"guestViewEnablePreSteps": MessageLookupByLibrary.simpleMessage(
|
||||
"Bitte richte einen Gerätepasscode oder eine Bildschirmsperre ein, um die Gastansicht zu nutzen."),
|
||||
"happyBirthday":
|
||||
MessageLookupByLibrary.simpleMessage("Happy birthday! 🥳"),
|
||||
"hearUsExplanation": MessageLookupByLibrary.simpleMessage(
|
||||
"Wir tracken keine App-Installationen. Es würde uns jedoch helfen, wenn du uns mitteilst, wie du von uns erfahren hast!"),
|
||||
"hearUsWhereTitle": MessageLookupByLibrary.simpleMessage(
|
||||
@@ -1282,6 +1276,8 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"Lange auf eine E-Mail drücken, um die Ende-zu-Ende-Verschlüsselung zu überprüfen."),
|
||||
"longpressOnAnItemToViewInFullscreen": MessageLookupByLibrary.simpleMessage(
|
||||
"Drücken Sie lange auf ein Element, um es im Vollbildmodus anzuzeigen"),
|
||||
"lookBackOnYourMemories": MessageLookupByLibrary.simpleMessage(
|
||||
"Look back on your memories 🌄"),
|
||||
"loopVideoOff":
|
||||
MessageLookupByLibrary.simpleMessage("Videoschleife aus"),
|
||||
"loopVideoOn": MessageLookupByLibrary.simpleMessage("Videoschleife an"),
|
||||
@@ -1363,6 +1359,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"newAlbum": MessageLookupByLibrary.simpleMessage("Neues Album"),
|
||||
"newLocation": MessageLookupByLibrary.simpleMessage("Neuer Ort"),
|
||||
"newPerson": MessageLookupByLibrary.simpleMessage("Neue Person"),
|
||||
"newPhotosEmoji": MessageLookupByLibrary.simpleMessage(" new 📸"),
|
||||
"newRange": MessageLookupByLibrary.simpleMessage("Neue Auswahl"),
|
||||
"newToEnte": MessageLookupByLibrary.simpleMessage("Neu bei Ente"),
|
||||
"newest": MessageLookupByLibrary.simpleMessage("Zuletzt"),
|
||||
@@ -1419,7 +1416,9 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"onEnte": MessageLookupByLibrary.simpleMessage(
|
||||
"Auf <branding>ente</branding>"),
|
||||
"onTheRoad": MessageLookupByLibrary.simpleMessage("Wieder unterwegs"),
|
||||
"onThisDay": MessageLookupByLibrary.simpleMessage("An diesem Tag"),
|
||||
"onThisDay": MessageLookupByLibrary.simpleMessage("On this day"),
|
||||
"onThisDayNotificationExplanation": MessageLookupByLibrary.simpleMessage(
|
||||
"Receive reminders about memories from this day in previous years."),
|
||||
"onlyFamilyAdminCanChangeCode": m54,
|
||||
"onlyThem": MessageLookupByLibrary.simpleMessage("Nur diese"),
|
||||
"oops": MessageLookupByLibrary.simpleMessage("Hoppla"),
|
||||
@@ -1584,6 +1583,8 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"reassignedToName": m68,
|
||||
"reassigningLoading":
|
||||
MessageLookupByLibrary.simpleMessage("Ordne neu zu..."),
|
||||
"receiveRemindersOnBirthdays": MessageLookupByLibrary.simpleMessage(
|
||||
"Receive reminders when it\'s someone\'s birthday. Tapping on the notification will take you to photos of the birthday person."),
|
||||
"recover": MessageLookupByLibrary.simpleMessage("Wiederherstellen"),
|
||||
"recoverAccount":
|
||||
MessageLookupByLibrary.simpleMessage("Konto wiederherstellen"),
|
||||
@@ -1803,7 +1804,6 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage("Wähle dein Gesicht"),
|
||||
"selectYourPlan":
|
||||
MessageLookupByLibrary.simpleMessage("Wähle dein Abo aus"),
|
||||
"selectedAlbums": m117,
|
||||
"selectedFilesAreNotOnEnte": MessageLookupByLibrary.simpleMessage(
|
||||
"Ausgewählte Dateien sind nicht auf Ente"),
|
||||
"selectedFoldersWillBeEncryptedAndBackedUp":
|
||||
@@ -1920,6 +1920,8 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"sorryWeCouldNotGenerateSecureKeysOnThisDevicennplease":
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"Es tut uns leid, wir konnten keine sicheren Schlüssel auf diesem Gerät generieren.\n\nBitte starte die Registrierung auf einem anderen Gerät."),
|
||||
"sorryWeHadToPauseYourBackups": MessageLookupByLibrary.simpleMessage(
|
||||
"Sorry, we had to pause your backups"),
|
||||
"sort": MessageLookupByLibrary.simpleMessage("Sortierung"),
|
||||
"sortAlbumsBy": MessageLookupByLibrary.simpleMessage("Sortieren nach"),
|
||||
"sortNewestFirst":
|
||||
|
||||
17
mobile/lib/generated/intl/messages_el.dart
generated
@@ -22,7 +22,22 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
|
||||
final messages = _notInlinedMessages(_notInlinedMessages);
|
||||
static Map<String, Function> _notInlinedMessages(_) => <String, Function>{
|
||||
"birthdays": MessageLookupByLibrary.simpleMessage("Birthdays"),
|
||||
"clickToInstallOurBestVersionYet": MessageLookupByLibrary.simpleMessage(
|
||||
"Click to install our best version yet"),
|
||||
"enterYourEmailAddress": MessageLookupByLibrary.simpleMessage(
|
||||
"Εισάγετε την διεύθυνση ηλ. ταχυδρομείου σας")
|
||||
"Εισάγετε την διεύθυνση ηλ. ταχυδρομείου σας"),
|
||||
"happyBirthday":
|
||||
MessageLookupByLibrary.simpleMessage("Happy birthday! 🥳"),
|
||||
"lookBackOnYourMemories": MessageLookupByLibrary.simpleMessage(
|
||||
"Look back on your memories 🌄"),
|
||||
"newPhotosEmoji": MessageLookupByLibrary.simpleMessage(" new 📸"),
|
||||
"onThisDay": MessageLookupByLibrary.simpleMessage("On this day"),
|
||||
"onThisDayNotificationExplanation": MessageLookupByLibrary.simpleMessage(
|
||||
"Receive reminders about memories from this day in previous years."),
|
||||
"receiveRemindersOnBirthdays": MessageLookupByLibrary.simpleMessage(
|
||||
"Receive reminders when it\'s someone\'s birthday. Tapping on the notification will take you to photos of the birthday person."),
|
||||
"sorryWeHadToPauseYourBackups": MessageLookupByLibrary.simpleMessage(
|
||||
"Sorry, we had to pause your backups")
|
||||
};
|
||||
}
|
||||
|
||||
14
mobile/lib/generated/intl/messages_en.dart
generated
@@ -137,6 +137,8 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
static String m41(currentlyProcessing, totalCount) =>
|
||||
"Processing ${currentlyProcessing} / ${totalCount}";
|
||||
|
||||
static String m117(name) => "Happy birthday to ${name}! 🎉";
|
||||
|
||||
static String m42(name) => "Hiking with ${name}";
|
||||
|
||||
static String m43(count) =>
|
||||
@@ -226,7 +228,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
static String m77(snapshotLength, searchLength) =>
|
||||
"Sections length mismatch: ${snapshotLength} != ${searchLength}";
|
||||
|
||||
static String m117(count) => "${count} selected";
|
||||
static String m118(count) => "${count} selected";
|
||||
|
||||
static String m78(count) => "${count} selected";
|
||||
|
||||
@@ -552,6 +554,9 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"backupVideos": MessageLookupByLibrary.simpleMessage("Backup videos"),
|
||||
"beach": MessageLookupByLibrary.simpleMessage("Sand and sea"),
|
||||
"birthday": MessageLookupByLibrary.simpleMessage("Birthday"),
|
||||
"birthdayNotifications":
|
||||
MessageLookupByLibrary.simpleMessage("Birthday notifications"),
|
||||
"birthdays": MessageLookupByLibrary.simpleMessage("Birthdays"),
|
||||
"blackFridaySale":
|
||||
MessageLookupByLibrary.simpleMessage("Black Friday Sale"),
|
||||
"blog": MessageLookupByLibrary.simpleMessage("Blog"),
|
||||
@@ -1058,6 +1063,9 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"guestView": MessageLookupByLibrary.simpleMessage("Guest view"),
|
||||
"guestViewEnablePreSteps": MessageLookupByLibrary.simpleMessage(
|
||||
"To enable guest view, please setup device passcode or screen lock in your system settings."),
|
||||
"happyBirthday":
|
||||
MessageLookupByLibrary.simpleMessage("Happy birthday! 🥳"),
|
||||
"happyBirthdayToPerson": m117,
|
||||
"hearUsExplanation": MessageLookupByLibrary.simpleMessage(
|
||||
"We don\'t track app installs. It\'d help if you told us where you found us!"),
|
||||
"hearUsWhereTitle": MessageLookupByLibrary.simpleMessage(
|
||||
@@ -1546,6 +1554,8 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"reassignedToName": m68,
|
||||
"reassigningLoading":
|
||||
MessageLookupByLibrary.simpleMessage("Reassigning..."),
|
||||
"receiveRemindersOnBirthdays": MessageLookupByLibrary.simpleMessage(
|
||||
"Receive reminders when it\'s someone\'s birthday. Tapping on the notification will take you to photos of the birthday person."),
|
||||
"recover": MessageLookupByLibrary.simpleMessage("Recover"),
|
||||
"recoverAccount":
|
||||
MessageLookupByLibrary.simpleMessage("Recover account"),
|
||||
@@ -1755,7 +1765,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage("Select your face"),
|
||||
"selectYourPlan":
|
||||
MessageLookupByLibrary.simpleMessage("Select your plan"),
|
||||
"selectedAlbums": m117,
|
||||
"selectedAlbums": m118,
|
||||
"selectedFilesAreNotOnEnte": MessageLookupByLibrary.simpleMessage(
|
||||
"Selected files are not on Ente"),
|
||||
"selectedFoldersWillBeEncryptedAndBackedUp":
|
||||
|
||||
15
mobile/lib/generated/intl/messages_es.dart
generated
@@ -549,6 +549,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"Copia de seguridad de vídeos"),
|
||||
"beach": MessageLookupByLibrary.simpleMessage("Arena y mar "),
|
||||
"birthday": MessageLookupByLibrary.simpleMessage("Cumpleaños"),
|
||||
"birthdays": MessageLookupByLibrary.simpleMessage("Birthdays"),
|
||||
"blackFridaySale":
|
||||
MessageLookupByLibrary.simpleMessage("Oferta del Black Friday"),
|
||||
"blog": MessageLookupByLibrary.simpleMessage("Blog"),
|
||||
@@ -622,6 +623,8 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"click": MessageLookupByLibrary.simpleMessage("• Clic"),
|
||||
"clickOnTheOverflowMenu": MessageLookupByLibrary.simpleMessage(
|
||||
"• Haga clic en el menú desbordante"),
|
||||
"clickToInstallOurBestVersionYet": MessageLookupByLibrary.simpleMessage(
|
||||
"Click to install our best version yet"),
|
||||
"close": MessageLookupByLibrary.simpleMessage("Cerrar"),
|
||||
"clubByCaptureTime": MessageLookupByLibrary.simpleMessage(
|
||||
"Agrupar por tiempo de captura"),
|
||||
@@ -1071,6 +1074,8 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"guestView": MessageLookupByLibrary.simpleMessage("Vista de invitado"),
|
||||
"guestViewEnablePreSteps": MessageLookupByLibrary.simpleMessage(
|
||||
"Para habilitar la vista de invitados, por favor configure el código de acceso del dispositivo o el bloqueo de pantalla en los ajustes de su sistema."),
|
||||
"happyBirthday":
|
||||
MessageLookupByLibrary.simpleMessage("Happy birthday! 🥳"),
|
||||
"hearUsExplanation": MessageLookupByLibrary.simpleMessage(
|
||||
"No rastreamos las aplicaciones instaladas. ¡Nos ayudarías si nos dijeras dónde nos encontraste!"),
|
||||
"hearUsWhereTitle": MessageLookupByLibrary.simpleMessage(
|
||||
@@ -1268,6 +1273,8 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"longpressOnAnItemToViewInFullscreen":
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"Manten presionado un elemento para ver en pantalla completa"),
|
||||
"lookBackOnYourMemories": MessageLookupByLibrary.simpleMessage(
|
||||
"Look back on your memories 🌄"),
|
||||
"loopVideoOff":
|
||||
MessageLookupByLibrary.simpleMessage("Vídeo en bucle desactivado"),
|
||||
"loopVideoOn":
|
||||
@@ -1353,6 +1360,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"newLocation":
|
||||
MessageLookupByLibrary.simpleMessage("Nueva localización"),
|
||||
"newPerson": MessageLookupByLibrary.simpleMessage("Nueva persona"),
|
||||
"newPhotosEmoji": MessageLookupByLibrary.simpleMessage(" new 📸"),
|
||||
"newRange": MessageLookupByLibrary.simpleMessage("Nuevo rango"),
|
||||
"newToEnte": MessageLookupByLibrary.simpleMessage("Nuevo en Ente"),
|
||||
"newest": MessageLookupByLibrary.simpleMessage("Más reciente"),
|
||||
@@ -1408,6 +1416,9 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"En <branding>ente</branding>"),
|
||||
"onTheRoad":
|
||||
MessageLookupByLibrary.simpleMessage("De nuevo en la carretera"),
|
||||
"onThisDay": MessageLookupByLibrary.simpleMessage("On this day"),
|
||||
"onThisDayNotificationExplanation": MessageLookupByLibrary.simpleMessage(
|
||||
"Receive reminders about memories from this day in previous years."),
|
||||
"onlyFamilyAdminCanChangeCode": m54,
|
||||
"onlyThem": MessageLookupByLibrary.simpleMessage("Solo ellos"),
|
||||
"oops": MessageLookupByLibrary.simpleMessage("Ups"),
|
||||
@@ -1575,6 +1586,8 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"reassignedToName": m68,
|
||||
"reassigningLoading":
|
||||
MessageLookupByLibrary.simpleMessage("Reasignando..."),
|
||||
"receiveRemindersOnBirthdays": MessageLookupByLibrary.simpleMessage(
|
||||
"Receive reminders when it\'s someone\'s birthday. Tapping on the notification will take you to photos of the birthday person."),
|
||||
"recover": MessageLookupByLibrary.simpleMessage("Recuperar"),
|
||||
"recoverAccount":
|
||||
MessageLookupByLibrary.simpleMessage("Recuperar cuenta"),
|
||||
@@ -1914,6 +1927,8 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"sorryWeCouldNotGenerateSecureKeysOnThisDevicennplease":
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"Lo sentimos, no hemos podido generar claves seguras en este dispositivo.\n\nPor favor, regístrate desde un dispositivo diferente."),
|
||||
"sorryWeHadToPauseYourBackups": MessageLookupByLibrary.simpleMessage(
|
||||
"Sorry, we had to pause your backups"),
|
||||
"sort": MessageLookupByLibrary.simpleMessage("Ordenar"),
|
||||
"sortAlbumsBy": MessageLookupByLibrary.simpleMessage("Ordenar por"),
|
||||
"sortNewestFirst":
|
||||
|
||||