Compare commits

..

2 Commits

Author SHA1 Message Date
mngshm
0591a22eeb don't show edit icon if user in list is admin 2025-02-21 13:29:13 +05:30
mngshm
b2d9305f7f allow admin to see storage Limit on dashboard 2025-02-21 09:32:58 +05:30
557 changed files with 12600 additions and 18239 deletions

View File

@@ -40,7 +40,7 @@ jobs:
- name: Build PlayStore AAB
run: |
flutter build appbundle --dart-define=cronetHttpNoPlay=true --release --flavor playstore
flutter build appbundle --release --flavor playstore --dart-define=app.flavor=playstore
env:
SIGNING_KEY_PATH: "/home/runner/work/_temp/keystore/ente_auth_key.jks"
SIGNING_KEY_ALIAS: ${{ secrets.SIGNING_KEY_ALIAS }}

View File

@@ -68,7 +68,7 @@ jobs:
- name: Build independent APK
run: |
flutter build apk --dart-define=cronetHttpNoPlay=true --release --flavor independent
flutter build apk --release --flavor independent --dart-define=app.flavor=independent
mv build/app/outputs/flutter-apk/app-independent-release.apk artifacts/ente-${{ github.ref_name }}.apk
env:
SIGNING_KEY_PATH: "/home/runner/work/_temp/keystore/ente_auth_key.jks"

View File

@@ -749,8 +749,7 @@
{
"title": "nintendo",
"altNames": [
"任天堂",
"Nintendo Account"
"任天堂"
]
},
{
@@ -767,15 +766,6 @@
{
"title": "Notesnook"
},
{
"title": "NoIp",
"slug": "noip",
"altNames": [
"No IP",
"No-IP",
"noip.com"
]
},
{
"title": "Notion"
},
@@ -861,13 +851,6 @@
"PostScanMail"
]
},
{
"title": "Prey Project",
"slug": "prey_project",
"altNames": [
"PreyProject"
]
},
{
"title": "Privacy Guides",
"slug": "privacyguides"
@@ -1201,9 +1184,6 @@
{
"title": "Wolvesville"
},
{
"title": "Workflowy"
},
{
"title": "WorkOS",
"altNames": [
@@ -1245,12 +1225,6 @@
},
{
"title": "Zoom"
},
{
"title": "BingX"
},
{
"title": "CoinSpot"
}
]
}

View File

@@ -1 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?><svg id="a" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 150 150"><defs><style>.e{fill:#2a54ff;}.f{fill:url(#d);}.g{fill:none;}</style><linearGradient id="d" x1="17.68" y1="116.45" x2="132.14" y2="32.11" gradientTransform="matrix(1, 0, 0, 1, 0, 0)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#2a54ff"/><stop offset=".52" stop-color="#2143cb"/><stop offset="1" stop-color="#2a54ff"/></linearGradient></defs><g id="b"><path id="c" class="g" d="M0,0H150V150H0V0Z"/></g><path class="f" d="M140.2,22.33c-25.18-.09-49.79,10.83-66.63,29.47-6.06,6.27-10.1,13.95-14.96,21.06-11.64,15.93-29.81,25.14-49.5,25.13h0v28.65h0c25.17,.1,49.78-10.86,66.63-29.5,6.03-6.27,10.13-13.94,14.96-21.06,11.64-15.91,29.81-25.12,49.5-25.11V22.33h0Z"/><path class="e" d="M140.2,97.99c-19.68,0-37.86-9.2-49.5-25.11-4.81-7.12-8.92-14.78-14.94-21.06C58.95,33.18,34.3,22.24,9.13,22.35h0v28.65h0c21.8-.11,42.05,11.62,53.01,30.46,3.22,5.62,7.06,10.9,11.45,15.74,16.83,18.63,41.46,29.59,66.63,29.5l-.02-28.7h0Z"/></svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -1,130 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 27.0.0, 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 30 30" style="enable-background:new 0 0 30 30;" xml:space="preserve">
<style type="text/css">
.st0{fill:#C5C8CA;}
.st1{fill:#9DA4A8;}
.st2{fill:#B7BBBD;}
.st3{fill:#CBCFD1;}
.st4{fill:#BBBFC2;}
.st5{fill:#CACDCE;}
.st6{fill:#BFC3C5;}
.st7{fill:#BCC0C2;}
.st8{fill:#BDC1C4;}
.st9{fill:#C7CACC;}
.st10{fill:url(#SVGID_1_);}
.st11{fill:#FFFFFF;}
.st12{fill:#B8BCBF;}
.st13{fill:#C4C7C9;}
.st14{fill:#C1C5C7;}
.st15{fill:url(#SVGID_00000003093454306001190100000011813141018663887528_);}
.st16{fill:url(#SVGID_00000017503418065689336600000007511615486600436881_);}
.st17{fill:url(#SVGID_00000057845154053127761930000017803385842445649033_);}
.st18{fill:url(#SVGID_00000156571711195124538550000006687723982713171592_);}
.st19{fill:#DF3030;}
.st20{fill:url(#SVGID_00000001636660173574603980000008731795684331757470_);}
.st21{fill:#17181C;}
.st22{fill:url(#SVGID_00000180343933242210086490000003762167186865041053_);}
.st23{fill:url(#SVGID_00000015338415700440354440000005681408021599925436_);}
</style>
<g>
<path class="st0" d="M14.4,29.5c0.1,0,0.1,0,0.2,0c0.1,0,0.2,0,0.2,0H14.4z"/>
<path class="st1" d="M15.3,29.5h0.1c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0L15.3,29.5
C15.2,29.5,15.3,29.5,15.3,29.5z"/>
<path class="st2" d="M15.3,29.5L15.3,29.5l-0.2,0C15.2,29.5,15.2,29.5,15.3,29.5z"/>
<path class="st3" d="M15.5,29.5L15.5,29.5L15.5,29.5L15.5,29.5L15.5,29.5z"/>
<path class="st0" d="M14.1,29.5c0.1,0,0.1,0,0.2,0H14.1z"/>
<path class="st4" d="M13.9,29.5C13.9,29.5,14,29.5,13.9,29.5c0.1,0,0.1,0,0.2,0H13.9z"/>
<path class="st5" d="M13.6,29.5C13.6,29.5,13.6,29.5,13.6,29.5c0.1,0,0.1,0,0.1,0H13.6z"/>
<path class="st6" d="M13.7,29.5C13.8,29.5,13.8,29.5,13.7,29.5c0.1,0,0.1,0,0.1,0H13.7z"/>
<path class="st7" d="M13.3,29.4C13.3,29.4,13.3,29.4,13.3,29.4C13.4,29.4,13.4,29.4,13.3,29.4L13.3,29.4z"/>
<path class="st8" d="M13.4,29.5C13.4,29.4,13.5,29.4,13.4,29.5C13.5,29.4,13.5,29.4,13.4,29.5L13.4,29.5z"/>
<path class="st8" d="M13.1,29.4C13.1,29.4,13.1,29.4,13.1,29.4C13.1,29.4,13.1,29.4,13.1,29.4L13.1,29.4z"/>
<path class="st9" d="M13.2,29.4C13.2,29.4,13.2,29.4,13.2,29.4C13.2,29.4,13.2,29.4,13.2,29.4C13.2,29.4,13.2,29.4,13.2,29.4
C13.3,29.4,13.3,29.4,13.2,29.4L13.2,29.4z"/>
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="21.8812" y1="-88.078" x2="8.2545" y2="-104.6955" gradientTransform="matrix(1 0 0 -1 0 -81.48)">
<stop offset="0" style="stop-color:#020037"/>
<stop offset="1" style="stop-color:#050F62"/>
</linearGradient>
<path class="st10" d="M15,0.4C11.1,0.4,7.5,2,4.7,4.7C2,7.4,0.5,11.1,0.5,15c0,1.7,0.3,3.4,0.9,5.1c0.3,0,0.5,0,0.8,0
c2.9,0,5.8,0.9,8.2,2.6c2.4,1.7,4.2,4.1,5.1,6.9c3.8-0.1,7.4-1.7,10-4.4c2.6-2.7,4.1-6.4,4.1-10.1c0-3.9-1.5-7.6-4.3-10.3
C22.6,2,18.9,0.4,15,0.4"/>
<path class="st11" d="M20.7,22.5C20.7,22.5,20.7,22.5,20.7,22.5L20.7,22.5c0,0.4,0.1,0.8,0.3,1c0.2,0.2,0.6,0.3,1,0.3c0,0,0,0,0,0
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0l0,0c-0.4,0-0.7,0.1-1,0.3c-0.2,0.2-0.3,0.6-0.3,1c0,0,0,0,0,0c0,0,0,0,0,0
c0,0,0,0,0,0c0,0,0,0,0,0h0l0,0c0-0.4-0.1-0.7-0.3-1c-0.2-0.2-0.6-0.3-1-0.3c0,0,0,0,0,0l0,0c0,0,0,0,0,0s0,0,0,0c0,0,0,0,0,0
c0,0,0,0,0,0c0.4,0,0.7-0.1,1-0.3S20.7,22.9,20.7,22.5C20.7,22.5,20.7,22.5,20.7,22.5C20.7,22.5,20.7,22.5,20.7,22.5z"/>
<path class="st11" d="M6.9,15.5C6.9,15.5,6.9,15.5,6.9,15.5L6.9,15.5c0,0.4,0.1,0.8,0.3,1c0.2,0.2,0.6,0.3,1,0.3c0,0,0,0,0,0
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0l0,0c-0.4,0-0.7,0.1-1,0.3c-0.2,0.2-0.3,0.6-0.3,1c0,0,0,0,0,0c0,0,0,0,0,0
c0,0,0,0,0,0c0,0,0,0,0,0h0l0,0c0-0.4-0.1-0.7-0.3-1c-0.2-0.2-0.6-0.3-1-0.3c0,0,0,0,0,0l0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
c0,0,0,0,0,0c0.4,0,0.7-0.1,1-0.3C6.8,16.2,6.9,15.9,6.9,15.5C6.9,15.5,6.9,15.5,6.9,15.5C6.9,15.5,6.9,15.5,6.9,15.5z"/>
<path class="st11" d="M10.6,4.1L10.6,4.1C10.7,4.1,10.7,4.1,10.6,4.1c0,0.3,0.1,0.5,0.3,0.7c0.2,0.2,0.4,0.3,0.7,0.2h0v0l0,0l0,0
l0,0l0,0c-0.3,0-0.5,0.1-0.7,0.2c-0.2,0.2-0.3,0.4-0.2,0.7l0,0l0,0l0,0l0,0h0v0c0-0.3-0.1-0.5-0.2-0.7C10.2,5.1,10,5,9.7,5.1h0v0v0
h0C10,5,10.2,5,10.4,4.8C10.6,4.6,10.7,4.3,10.6,4.1C10.6,4.1,10.6,4.1,10.6,4.1C10.6,4.1,10.6,4.1,10.6,4.1z"/>
<path class="st12" d="M12.8,29.4C12.8,29.4,12.8,29.4,12.8,29.4C12.8,29.4,12.8,29.4,12.8,29.4C12.8,29.4,12.8,29.4,12.8,29.4
C12.8,29.4,12.8,29.4,12.8,29.4L12.8,29.4z"/>
<path class="st13" d="M13,29.4C13,29.4,13,29.4,13,29.4C13,29.4,13,29.4,13,29.4L13,29.4z"/>
<path class="st14" d="M12.9,29.4C12.9,29.4,12.9,29.4,12.9,29.4C12.9,29.4,12.9,29.4,12.9,29.4L12.9,29.4z"/>
<linearGradient id="SVGID_00000173122186048074043340000017421439166240502921_" gradientUnits="userSpaceOnUse" x1="19.2457" y1="-89.3156" x2="22.9553" y2="-91.7188" gradientTransform="matrix(1 0 0 -1 0 -81.48)">
<stop offset="0" style="stop-color:#E5E5E5"/>
<stop offset="1" style="stop-color:#B7B8C1"/>
</linearGradient>
<path style="fill:url(#SVGID_00000173122186048074043340000017421439166240502921_);" d="M21.8,1.2c-1.4,0.7-3,1.9-4.4,4.2
c-2.5,3.9-3.2,7.4-3.2,7.4L16,14l0.3,0.2l1.9,1.2c0,0,2.9-2,5.4-5.9c1.5-2.3,2-4.3,2-5.8c-0.8-0.1-1.5-0.4-2.2-0.8
C22.8,2.5,22.2,1.9,21.8,1.2z"/>
<linearGradient id="SVGID_00000127763695479642710240000017533313096818365313_" gradientUnits="userSpaceOnUse" x1="21.2378" y1="-99.9826" x2="19.0472" y2="-97.8815" gradientTransform="matrix(1 0 0 -1 0 -81.48)">
<stop offset="0" style="stop-color:#EC4F4F"/>
<stop offset="1" style="stop-color:#A91919"/>
</linearGradient>
<path style="fill:url(#SVGID_00000127763695479642710240000017533313096818365313_);" d="M20.8,16.8c0.9-1.4,0.3-3.2,0-3.8
c-0.7,0.8-1.5,1.5-2.3,2.1c0.1,0.4,0.3,0.8,0.3,1.2c0,0.1,0,0.2-0.1,0.3c-0.4,0.6-0.8,1.3-1.1,2c-0.1,0.1-0.1,0.2-0.1,0.3
c-0.1,0.2-0.1,0.3,0,0.5c0,0.3,0.2,0.5,0.3,0.8c0,0,0.1,0.1,0.1,0.1c0.1,0,0.1,0.1,0.2,0.1s0.1,0,0.2-0.1c0.1-0.1,0.3-0.2,0.4-0.4
C19.5,19,19.8,18.5,20.8,16.8z"/>
<linearGradient id="SVGID_00000060717637781723915790000002744012061535479481_" gradientUnits="userSpaceOnUse" x1="11.3158" y1="-99.2586" x2="14.8122" y2="-101.5237" gradientTransform="matrix(1 0 0 -1 0 -81.48)">
<stop offset="0" style="stop-color:#F2A518"/>
<stop offset="1" style="stop-color:#F4E23E"/>
</linearGradient>
<path style="fill:url(#SVGID_00000060717637781723915790000002744012061535479481_);" d="M15.1,15.7l-1.7-1.1c-2,3.1-3.3,7-2.4,7.5
c0.9,0.6,3.9-2.2,5.9-5.3L15.1,15.7z"/>
<linearGradient id="SVGID_00000070084874335106853820000008402293642909580433_" gradientUnits="userSpaceOnUse" x1="-4386.2534" y1="747.6443" x2="-4497.9517" y2="769.0099" gradientTransform="matrix(1 0 0 -1 0 -81.48)">
<stop offset="0" style="stop-color:#EC4F4F"/>
<stop offset="1" style="stop-color:#A91919"/>
</linearGradient>
<path style="fill:url(#SVGID_00000070084874335106853820000008402293642909580433_);" d="M15.2,9.5c-0.7-0.1-2.5,0.1-3.4,1.5
c-1.1,1.6-1.5,2.1-2,3.2c-0.1,0.2-0.1,0.3-0.2,0.5c0,0.1,0,0.1,0,0.2C9.6,15,9.7,15,9.7,15c0,0,0.1,0,0.2,0.1c0.3,0.1,0.6,0,0.8,0
c0.2,0,0.3-0.1,0.4-0.2c0.1-0.1,0.2-0.2,0.3-0.3c0.5-0.6,0.9-1.2,1.3-1.8c0.1-0.1,0.2-0.2,0.3-0.2c0.4-0.1,0.8-0.1,1.2-0.2l0,0
C14.5,11.4,14.8,10.4,15.2,9.5z"/>
<path class="st19" d="M25,0.6c-0.2-0.1-1.5-0.2-3.2,0.7c0.4,0.7,1,1.2,1.6,1.7c0.7,0.4,1.4,0.7,2.2,0.8C25.7,1.9,25.1,0.7,25,0.6z"
/>
<path class="st19" d="M18.4,15.5L14,12.7c-0.1,0-0.1,0-0.2,0l-0.9,1.4c0,0.1,0,0.1,0,0.2l4.4,2.8c0.1,0,0.1,0,0.2,0l0.9-1.4
C18.4,15.6,18.4,15.6,18.4,15.5z"/>
<linearGradient id="SVGID_00000044894753735506851200000013592864944465274029_" gradientUnits="userSpaceOnUse" x1="14.9436" y1="-95.9217" x2="16.3716" y2="-96.8468" gradientTransform="matrix(1 0 0 -1 0 -81.48)">
<stop offset="0" style="stop-color:#B71E1E"/>
<stop offset="0.44" style="stop-color:#DF3030"/>
<stop offset="1" style="stop-color:#C51D1D"/>
</linearGradient>
<path style="fill:url(#SVGID_00000044894753735506851200000013592864944465274029_);" d="M17.8,11.6c-0.4-0.2-2.1,1.6-3.2,3.3
c-0.8,1.2-1.4,3-1.1,3.2c0.4,0.2,1.7-1,2.5-2.3C17.1,14.2,18.1,11.9,17.8,11.6z"/>
<path class="st21" d="M21.2,8.6c1.3,0,2.3-1,2.3-2.3s-1-2.3-2.3-2.3c-1.3,0-2.3,1-2.3,2.3S20,8.6,21.2,8.6z"/>
<linearGradient id="SVGID_00000090987122570624474440000002432161440392897685_" gradientUnits="userSpaceOnUse" x1="20.068" y1="-87.0655" x2="22.3556" y2="-88.5473" gradientTransform="matrix(1 0 0 -1 0 -81.48)">
<stop offset="0" style="stop-color:#CED1EC"/>
<stop offset="1" style="stop-color:#FFFFFF"/>
</linearGradient>
<path style="fill:url(#SVGID_00000090987122570624474440000002432161440392897685_);" d="M21.2,7.7c0.8,0,1.4-0.6,1.4-1.4
S22,5,21.2,5c-0.8,0-1.4,0.6-1.4,1.4S20.5,7.7,21.2,7.7z"/>
<linearGradient id="SVGID_00000044151119195171880090000016489263670362291109_" gradientUnits="userSpaceOnUse" x1="14.4192" y1="-110.4727" x2="2.0973" y2="-101.7197" gradientTransform="matrix(1 0 0 -1 0 -81.48)">
<stop offset="0" style="stop-color:#B7B7BD"/>
<stop offset="0.68" style="stop-color:#EFEFEF"/>
</linearGradient>
<path style="fill:url(#SVGID_00000044151119195171880090000016489263670362291109_);" d="M2.1,20c-0.3,0-0.5,0-0.8,0
c1,2.8,2.9,5.2,5.3,6.9s5.3,2.6,8.3,2.6c0.1,0,0.3,0,0.4,0c-0.9-2.8-2.7-5.2-5.1-6.9C7.9,20.9,5.1,20,2.1,20z"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 9.2 KiB

View File

@@ -1,22 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Layer_1" x="0px" y="0px" width="100%" viewBox="0 0 200 200" enable-background="new 0 0 200 200" xml:space="preserve">
<path fill="#E9EAE8" opacity="1.000000" stroke="none" d=" M1.000001,121.000000 C1.000000,107.979103 1.000000,94.958214 1.330396,81.781845 C2.105629,80.808945 2.781408,80.039177 2.961370,79.167091 C6.970184,59.740398 16.508305,43.142090 30.377947,29.382053 C43.761433,16.104332 59.986267,7.182058 78.573097,2.942371 C79.482437,2.734949 80.195526,1.667158 81.000000,1.000001 C94.020897,1.000000 107.041786,1.000000 120.216652,1.335631 C126.713715,3.778750 133.179947,5.577904 139.376389,8.052591 C156.703827,14.972685 171.012131,25.956200 181.986893,41.089684 C190.099167,52.275986 196.134094,64.470306 199.117294,78.069069 C199.211044,78.496483 200.348892,78.694855 201.000000,79.000000 C201.000000,93.354225 201.000000,107.708458 200.669632,122.218155 C199.894424,123.189087 199.220856,123.956680 199.038727,124.827095 C195.802597,140.292557 188.666824,153.987869 178.511795,165.781891 C164.123367,182.492554 146.476486,194.499832 124.422401,199.082748 C123.840591,199.203659 123.469414,200.338181 123.000000,201.000000 C108.645775,201.000000 94.291542,201.000000 79.781174,200.674042 C78.977226,199.905136 78.385597,199.219894 77.673386,199.054794 C61.298405,195.258774 46.725803,187.667160 34.294682,176.602264 C18.003170,162.101318 7.102591,144.135208 2.914476,122.432388 C2.802733,121.853340 1.661271,121.473000 1.000001,121.000000 M162.957382,65.141830 C157.650208,70.691360 152.343033,76.240898 146.301605,81.755386 C145.732269,82.047028 145.042847,82.218056 144.611099,82.647896 C132.762451,94.444138 120.925987,106.252800 109.147583,118.119026 C108.427895,118.844093 108.202583,120.059868 107.093681,121.126122 C94.730469,133.412537 82.367249,145.698959 69.317253,158.025375 C62.966175,164.528809 56.615101,171.032227 49.973309,177.833344 C51.968117,178.908905 53.966496,179.986389 56.373127,181.619629 C60.931099,183.466125 65.489067,185.312622 70.530418,187.664200 C78.728378,189.429962 86.926338,191.195740 96.041878,193.048172 C135.589554,194.037872 165.346161,177.209564 183.339188,142.206635 C198.044006,113.600494 197.050034,84.312935 180.956207,55.283768 C179.868546,53.520458 178.780869,51.757149 177.222046,49.229988 C172.345459,54.885849 167.967255,59.963684 162.957382,65.141830 M108.466240,57.866222 C108.959000,57.471405 109.451752,57.076591 110.380226,56.193321 C112.081604,54.903320 113.950760,53.783173 115.456879,52.295490 C124.572472,43.291451 133.611420,34.209698 142.658142,25.136135 C143.883804,23.906826 145.009445,22.577780 146.408920,21.045849 C134.481003,14.180294 122.154709,10.443705 109.110474,9.413567 C92.088882,8.069327 75.690033,10.494845 59.889217,19.071775 C52.575058,24.411427 45.260902,29.751078 37.284908,35.186230 C4.630878,65.629463 1.719374,115.370926 21.645718,146.481766 C27.512495,140.245255 33.273243,134.121445 39.623917,127.697594 C47.726917,119.475052 55.829922,111.252510 64.624794,103.006409 C66.467079,100.992920 68.309372,98.979439 70.717163,96.651299 C82.356544,85.062904 94.022423,73.500809 105.590721,61.841888 C106.646294,60.778049 107.076263,59.093464 107.883652,57.776287 C107.883652,57.776287 107.786400,57.842323 108.466240,57.866222 z"/>
<path fill="#ffffff" opacity="1.000000" stroke="none" d=" M80.531342,1.000001 C80.195526,1.667158 79.482437,2.734949 78.573097,2.942371 C59.986267,7.182058 43.761433,16.104332 30.377947,29.382053 C16.508305,43.142090 6.970184,59.740398 2.961370,79.167091 C2.781408,80.039177 2.105629,80.808945 1.330396,81.313187 C1.000000,54.406445 1.000000,27.812887 1.000000,1.000000 C27.353823,1.000000 53.708252,1.000000 80.531342,1.000001 z"/>
<path fill="#ffffff" opacity="1.000000" stroke="none" d=" M201.000000,78.531342 C200.348892,78.694855 199.211044,78.496483 199.117294,78.069069 C196.134094,64.470306 190.099167,52.275986 181.986893,41.089684 C171.012131,25.956200 156.703827,14.972685 139.376389,8.052591 C133.179947,5.577904 126.713715,3.778750 120.685310,1.335631 C147.592621,1.000000 174.185257,1.000000 201.000000,1.000000 C201.000000,26.687134 201.000000,52.374908 201.000000,78.531342 z"/>
<path fill="#ffffff" opacity="1.000000" stroke="none" d=" M1.000001,121.468658 C1.661271,121.473000 2.802733,121.853340 2.914476,122.432388 C7.102591,144.135208 18.003170,162.101318 34.294682,176.602264 C46.725803,187.667160 61.298405,195.258774 77.673386,199.054794 C78.385597,199.219894 78.977226,199.905136 79.312515,200.674042 C53.072189,201.000000 27.144375,201.000000 1.000000,201.000000 C1.000000,174.646164 1.000000,148.291748 1.000001,121.468658 z"/>
<path fill="#ffffff" opacity="1.000000" stroke="none" d=" M123.468658,201.000000 C123.469414,200.338181 123.840591,199.203659 124.422401,199.082748 C146.476486,194.499832 164.123367,182.492554 178.511795,165.781891 C188.666824,153.987869 195.802597,140.292557 199.038727,124.827095 C199.220856,123.956680 199.894424,123.189087 200.669632,122.686813 C201.000000,148.926880 201.000000,174.853760 201.000000,201.000000 C175.312851,201.000000 149.625092,201.000000 123.468658,201.000000 z"/>
<path fill="#90BF02" opacity="1.000000" stroke="none" d=" M70.151657,96.965950 C68.309372,98.979439 66.467079,100.992920 64.276588,102.547241 C63.928383,86.369431 63.928383,70.650787 63.928383,54.871948 C55.257160,54.871948 47.224957,54.871948 39.033997,54.871948 C39.033997,79.516510 39.033997,103.757080 39.033997,127.997643 C33.273243,134.121445 27.512495,140.245255 21.645718,146.481766 C1.719374,115.370926 4.630878,65.629463 37.719608,35.462364 C39.135883,36.852516 39.984581,38.130096 41.121098,39.053391 C47.414471,44.166069 58.368134,43.270470 63.330196,37.318970 C67.946770,31.781837 66.780022,24.056263 60.570244,19.044075 C75.690033,10.494845 92.088882,8.069327 109.110474,9.413567 C122.154709,10.443705 134.481003,14.180294 146.408920,21.045849 C145.009445,22.577780 143.883804,23.906826 142.658142,25.136135 C133.611420,34.209698 124.572472,43.291451 115.456879,52.295490 C113.950760,53.783173 112.081604,54.903320 109.848991,56.507885 C108.807304,57.162407 108.296852,57.502369 107.786400,57.842323 C107.786400,57.842323 107.883652,57.776287 107.499512,57.814442 C103.123413,60.609695 99.131447,63.366795 95.061790,66.177551 C94.532784,62.603703 94.002762,59.023003 93.451675,55.299969 C85.547775,55.299969 77.881607,55.299969 70.151657,55.299969 C70.151657,69.433502 70.151657,83.199722 70.151657,96.965950 z"/>
<path fill="#90BE02" opacity="1.000000" stroke="none" d=" M181.064896,55.965897 C197.050034,84.312935 198.044006,113.600494 183.339188,142.206635 C165.346161,177.209564 135.589554,194.037872 95.558487,192.539490 C95.011642,175.365601 94.948189,158.700363 94.957329,141.656860 C95.029930,139.761459 95.029930,138.244339 95.029930,136.217133 C96.400269,137.088867 97.162216,137.573578 98.053833,138.371689 C101.904762,140.815338 105.425377,143.476242 109.385910,144.973618 C120.098732,149.023911 131.263062,149.217529 142.344849,146.892456 C159.790939,143.232071 172.455902,133.383316 177.684326,116.021088 C182.850937,98.864090 180.467819,82.760155 167.840240,68.827202 C167.809296,68.599007 167.711411,68.148964 168.030243,67.993683 C172.587692,63.880894 176.826294,59.923397 181.064896,55.965897 z"/>
<path fill="#FFFFFF" opacity="1.000000" stroke="none" d=" M39.328957,127.847618 C39.033997,103.757080 39.033997,79.516510 39.033997,54.871948 C47.224957,54.871948 55.257160,54.871948 63.928383,54.871948 C63.928383,70.650787 63.928383,86.369431 63.930653,102.559021 C55.829922,111.252510 47.726917,119.475052 39.328957,127.847618 z"/>
<path fill="#FFFFFF" opacity="1.000000" stroke="none" d=" M94.884727,142.035141 C94.948189,158.700363 95.011642,175.365601 95.099701,192.496170 C86.926338,191.195740 78.728378,189.429962 70.271156,186.931229 C69.954536,179.802521 69.897171,173.406799 69.921326,166.764832 C70.056465,166.354218 70.110100,166.189819 70.436935,165.848373 C78.768333,157.792603 86.826530,149.913879 94.884727,142.035141 z"/>
<path fill="#FFFFFE" opacity="1.000000" stroke="none" d=" M70.434410,96.808624 C70.151657,83.199722 70.151657,69.433502 70.151657,55.299969 C77.881607,55.299969 85.547775,55.299969 93.451675,55.299969 C94.002762,59.023003 94.532784,62.603703 95.061790,66.177551 C99.131447,63.366795 103.123413,60.609695 107.456062,57.774864 C107.076263,59.093464 106.646294,60.778049 105.590721,61.841888 C94.022423,73.500809 82.356544,85.062904 70.434410,96.808624 z"/>
<path fill="#FEFEFD" opacity="1.000000" stroke="none" d=" M60.229729,19.057926 C66.780022,24.056263 67.946770,31.781837 63.330196,37.318970 C58.368134,43.270470 47.414471,44.166069 41.121098,39.053391 C39.984581,38.130096 39.135883,36.852516 38.050526,35.414612 C45.260902,29.751078 52.575058,24.411427 60.229729,19.057926 z"/>
<path fill="#E5E5E4" opacity="1.000000" stroke="none" d=" M94.957329,141.656860 C86.826530,149.913879 78.768333,157.792603 70.368210,165.406586 C70.018867,162.756363 70.011452,160.370865 70.004036,157.985382 C82.367249,145.698959 94.730469,133.412537 107.756348,121.164223 C109.639374,121.798706 110.859749,122.395088 112.115219,123.158279 C112.150314,123.325104 112.155739,123.666389 112.012955,123.992271 C107.221497,128.898193 102.572823,133.478241 97.924149,138.058289 C97.162216,137.573578 96.400269,137.088867 95.029930,136.217133 C95.029930,138.244339 95.029930,139.761459 94.957329,141.656860 z"/>
<path fill="#81AB00" opacity="1.000000" stroke="none" d=" M112.080116,122.991463 C110.859749,122.395088 109.639374,121.798706 108.083130,121.124825 C108.202583,120.059868 108.427895,118.844093 109.147583,118.119026 C120.925987,106.252800 132.762451,94.444138 144.611099,82.647896 C145.042847,82.218056 145.732269,82.047028 146.827606,82.054634 C148.247528,83.549278 149.141449,84.744675 149.880432,86.239487 C138.292679,98.049911 126.875618,109.576714 115.395844,121.040718 C114.517334,121.918007 113.195747,122.351624 112.080116,122.991463 z"/>
<path fill="#90BE03" opacity="1.000000" stroke="none" d=" M69.839813,167.011063 C69.897171,173.406799 69.954536,179.802521 70.029465,186.678680 C65.489067,185.312622 60.931099,183.466125 56.322063,181.041183 C60.793938,175.978851 65.316872,171.494949 69.839813,167.011063 z"/>
<path fill="#82AC01" opacity="1.000000" stroke="none" d=" M69.921326,166.764832 C65.316872,171.494949 60.793938,175.978851 56.117935,180.763306 C53.966496,179.986389 51.968117,178.908905 49.973309,177.833344 C56.615101,171.032227 62.966175,164.528809 69.660645,158.005371 C70.011452,160.370865 70.018867,162.756363 70.095001,165.583633 C70.110100,166.189819 70.056465,166.354218 69.921326,166.764832 z"/>
<path fill="#E3E4E0" opacity="1.000000" stroke="none" d=" M150.035370,85.940079 C149.141449,84.744675 148.247528,83.549278 147.194733,82.072159 C152.343033,76.240898 157.650208,70.691360 163.580933,65.209869 C165.373459,66.234924 166.542435,67.191940 167.711411,68.148964 C167.711411,68.148964 167.809296,68.599007 167.557053,68.983429 C161.830566,74.973953 156.356323,80.580055 150.670471,86.124481 C150.458832,86.062805 150.035370,85.940079 150.035370,85.940079 z"/>
<path fill="#82AC02" opacity="1.000000" stroke="none" d=" M168.030243,67.993683 C166.542435,67.191940 165.373459,66.234924 163.896759,65.159714 C167.967255,59.963684 172.345459,54.885849 177.222046,49.229988 C178.780869,51.757149 179.868546,53.520458 181.010559,55.624832 C176.826294,59.923397 172.587692,63.880894 168.030243,67.993683 z"/>
<path fill="#FFFFFE" opacity="1.000000" stroke="none" d=" M108.126320,57.854275 C108.296852,57.502369 108.807304,57.162407 109.631134,56.752113 C109.451752,57.076591 108.959000,57.471405 108.126320,57.854275 z"/>
<path fill="#FEFEFC" opacity="1.000000" stroke="none" d=" M150.882095,86.186157 C156.356323,80.580055 161.830566,74.973953 167.587982,69.211624 C180.467819,82.760155 182.850937,98.864090 177.684326,116.021088 C172.455902,133.383316 159.790939,143.232071 142.344849,146.892456 C131.263062,149.217529 120.098732,149.023911 109.385910,144.973618 C105.425377,143.476242 101.904762,140.815338 98.053833,138.371689 C102.572823,133.478241 107.221497,128.898193 112.397583,124.067833 C114.508804,124.310890 116.064545,124.938728 117.680908,125.276192 C129.675720,127.780441 140.746811,126.206741 149.044968,116.391853 C156.985992,106.999374 156.451813,96.634232 150.882095,86.186157 z"/>
<path fill="#90BF02" opacity="1.000000" stroke="none" d=" M150.670471,86.124481 C156.451813,96.634232 156.985992,106.999374 149.044968,116.391853 C140.746811,126.206741 129.675720,127.780441 117.680908,125.276192 C116.064545,124.938728 114.508804,124.310890 112.540359,123.741951 C112.155739,123.666389 112.150314,123.325104 112.115219,123.158279 C113.195747,122.351624 114.517334,121.918007 115.395844,121.040718 C126.875618,109.576714 138.292679,98.049911 149.880432,86.239487 C150.035370,85.940079 150.458832,86.062805 150.670471,86.124481 z"/>
</svg>

Before

Width:  |  Height:  |  Size: 13 KiB

View File

@@ -1 +0,0 @@
<svg enable-background="new 0 0 512 512" height="512" viewBox="0 0 512 512" width="512" xmlns="http://www.w3.org/2000/svg"><path d="m256.024 29.736-80.851 46.679 53.892 31.112 26.887-15.556 27.017 15.548 53.881-31.119z" fill="#3c77b9"/><path d="m256.036 512 202.079-116.681-.006-124.454-53.912 31.115.019 62.224-148.204 85.569-148.221-85.586-.005-62.221-53.871-31.102v124.442z" fill="#3c77b9"/><path d="m215.607 301.986-53.91 31.117 94.318 54.433 94.288-54.443-53.879-31.118 188.657-108.927-.041-62.184 26.96-15.564-.021-77.759-229.045 132.233-26.929-15.554-26.949 15.554-229.056-132.222v77.789l26.98 15.574-.01 62.153z" fill="#1f2938"/></svg>

Before

Width:  |  Height:  |  Size: 643 B

View File

@@ -1,8 +0,0 @@
<svg width="34" height="34" viewBox="0 0 34 34" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M6.625 2.77295H30.3256C31.8396 2.77295 33.0669 3.99814 33.0669 5.5095C33.0669 7.02087 31.8396 8.24604 30.3256 8.24604H6.625V2.77295Z" fill="#B2CADB"/>
<path d="M12.4502 14.5747H30.3256C31.8396 14.5747 33.0669 15.7999 33.0669 17.3113C33.0669 18.8226 31.8396 20.0478 30.3256 20.0478H12.4502V14.5747Z" fill="#B2CADB"/>
<path d="M6.625 26.376H30.3256C31.8396 26.376 33.0669 27.6012 33.0669 29.1125C33.0669 30.6239 31.8396 31.8491 30.3256 31.8491H6.625V26.376Z" fill="#B2CADB"/>
<path d="M4.74009 10.2417C7.35797 10.2417 9.48018 8.12317 9.48018 5.50979C9.48018 2.8964 7.35797 0.777832 4.74009 0.777832C2.12221 0.777832 0 2.8964 0 5.50979C0 8.12317 2.12221 10.2417 4.74009 10.2417Z" fill="#47525B"/>
<path d="M13.4208 22.043C16.0387 22.043 18.1609 19.9244 18.1609 17.3111C18.1609 14.6977 16.0387 12.5791 13.4208 12.5791C10.8029 12.5791 8.68066 14.6977 8.68066 17.3111C8.68066 19.9244 10.8029 22.043 13.4208 22.043Z" fill="#47525B"/>
<path d="M4.74009 33.8448C7.35797 33.8448 9.48018 31.7262 9.48018 29.1128C9.48018 26.4994 7.35797 24.3809 4.74009 24.3809C2.12221 24.3809 0 26.4994 0 29.1128C0 31.7262 2.12221 33.8448 4.74009 33.8448Z" fill="#47525B"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

View File

@@ -8,7 +8,6 @@ import 'package:ente_auth/utils/package_info_util.dart';
import 'package:ente_auth/utils/platform_util.dart';
import 'package:fk_user_agent/fk_user_agent.dart';
import 'package:flutter/foundation.dart';
import 'package:native_dio_adapter/native_dio_adapter.dart';
import 'package:uuid/uuid.dart';
int kConnectTimeout = 15000;
@@ -51,10 +50,6 @@ class Network {
},
),
);
_dio.httpClientAdapter = NativeAdapter();
_enteDio.httpClientAdapter = NativeAdapter();
_setupInterceptors(endpoint);
Bus.instance.on<EndpointUpdatedEvent>().listen((event) {

View File

@@ -482,6 +482,7 @@
"importFailureDescNew": "تعذر إعراب الملف المنتقى.",
"duplicateCodes": "رموز مكررة",
"noDuplicates": "✨ لا تكرارات",
"youveNoDuplicateCodesThatCanBeCleared": "ليس لديك رموز مكررة يمكن مسحها",
"deselectAll": "ألغِ تحديد الكل",
"selectAll": "حدد الكل",
"deleteDuplicates": "احذف التكرار"

View File

@@ -499,11 +499,10 @@
"appLockOfflineModeWarning": "Избрахте да продължите без резервни копия. Ако забравите паролата на приложението си, ще бъдете заключени от достъп до вашите данни.",
"duplicateCodes": "Повтарящи се кодове",
"noDuplicates": "✨ Няма дубликати",
"youveNoDuplicateCodesThatCanBeCleared": "Нямате повтарящи се кодове, които могат да бъдат изчистени",
"deduplicateCodes": "Премахване на повтарящи се кодове",
"deselectAll": "Демаркиране на всички",
"selectAll": "Избиране на всички",
"deleteDuplicates": "Изтриване на дубликатите",
"plainHTML": "Обикновен HTML",
"tellUsWhatYouThink": "Кажете ни какво мислите",
"freeStorageOfferDescription": "Използвайте промокод „AUTH“, за да получите 10% отстъпка през първата година"
"plainHTML": "Обикновен HTML"
}

View File

@@ -499,6 +499,7 @@
"appLockOfflineModeWarning": "Has triat procedir sense còpies de seguretat. Si oblides el bloqueig de l'aplicació, no podràs accedir a les teves dades.",
"duplicateCodes": "Codis duplicats",
"noDuplicates": "✨ Sense duplicats",
"youveNoDuplicateCodesThatCanBeCleared": "No teniu codis duplicats que es puguin esborrar",
"deduplicateCodes": "Desduplica codis",
"deselectAll": "Desselecciona-ho tot",
"selectAll": "Seleccionar-ho tot",

View File

@@ -495,6 +495,7 @@
"appLockOfflineModeWarning": "Zvolili jste si pokračování bez zálohování. Pokud zapomenete heslo do aplikace, přístup k datům bude uzamčen.",
"duplicateCodes": "Duplikovat kódy",
"noDuplicates": "✨ Žádné duplikáty",
"youveNoDuplicateCodesThatCanBeCleared": "Nemáte žádné duplicitní kódy k odstranění",
"deduplicateCodes": "Deduplikovat kódy",
"deselectAll": "Zrušit výběr všech položek",
"selectAll": "Vybrat vše",

View File

@@ -147,7 +147,6 @@
"leaveFamily": "Familie verlassen",
"leaveFamilyMessage": "Sind Sie sicher, dass Sie den Familien-Plan verlassen wollen?",
"inFamilyPlanMessage": "Sie haben einen Familien-Plan!",
"hintForDesktop": "Klicken Sie mit der rechten Maustaste auf einen Code zum Bearbeiten oder Entfernen.",
"scan": "Scannen",
"scanACode": "Scan einen Code",
"verify": "Überprüfen Sie",
@@ -157,7 +156,6 @@
"twoFactorAuthTitle": "Zwei-Faktor-Authentifizierung",
"passkeyAuthTitle": "Passkey Authentifizierung",
"verifyPasskey": "Passkey verifizieren",
"loginWithTOTP": "Mit TOTP anmelden",
"recoverAccount": "Konto wiederherstellen",
"enterRecoveryKeyHint": "Geben Sie Ihren Wiederherstellungsschlüssel ein",
"recover": "Wiederherstellen",
@@ -260,8 +258,6 @@
"yesLogout": "Ja ausloggen",
"exit": "Schließen",
"theme": "Theme",
"lightTheme": "Hell",
"darkTheme": "Dunkel",
"systemTheme": "System",
"verifyingRecoveryKey": "Verifiziere Wiederherstellungsschlüssel...",
"recoveryKeyVerified": "Wiederherstellungsschlüssel verifiziert",
@@ -334,9 +330,6 @@
}
},
"manualSort": "Benutzerdefiniert",
"editOrder": "Reihenfolge bearbeiten",
"mostFrequentlyUsed": "Häufig verwendet",
"mostRecentlyUsed": "Zuletzt verwendet",
"activeSessions": "Aktive Sitzungen",
"somethingWentWrongPleaseTryAgain": "Ein Fehler ist aufgetreten, bitte versuche es erneut",
"thisWillLogYouOutOfThisDevice": "Dadurch wirst du von diesem Gerät abgemeldet!",
@@ -456,7 +449,6 @@
"customEndpoint": "Mit {endpoint} verbunden",
"pinText": "Anpinnen",
"unpinText": "Lösen",
"pinned": "Angeheftet",
"tags": "Tags",
"createNewTag": "Neuen Tag erstellen",
"tag": "Tag",
@@ -492,15 +484,8 @@
"importFailureDescNew": "Die ausgewählte Datei konnte nicht verarbeitet werden.",
"appLockNotEnabled": "App-Sperre nicht aktiviert",
"appLockNotEnabledDescription": "Bitte aktivieren Sie die App-Sperre über Security > App-Sperre",
"authToViewPasskey": "Bitte authentifizieren, um deinen Passkey zu sehen",
"duplicateCodes": "Doppelte Codes",
"noDuplicates": "✨ Keine Duplikate",
"deselectAll": "Alle abwählen",
"selectAll": "Alles auswählen",
"deleteDuplicates": "Duplikate löschen",
"plainHTML": "Reines HTML",
"tellUsWhatYouThink": "Sagen Sie uns, was Sie denken",
"dropReview": "Eine Bewertung im App/Play Store ablegen",
"giveUsAStarOnGithub": "Gib uns einen Stern auf Github",
"loginWithAuthAccount": "Mit Ihrem Auth Account anmelden"
"selectAll": "Alles auswählen"
}

View File

@@ -499,7 +499,7 @@
"appLockOfflineModeWarning": "You have chosen to proceed without backups. If you forget your applock, you will be locked out from accessing your data.",
"duplicateCodes": "Duplicate codes",
"noDuplicates": "✨ No duplicates",
"youveNoDuplicateCodesThatCanBeCleared": "You don't have any duplicate codes that can be cleared",
"youveNoDuplicateCodesThatCanBeCleared": "You've no duplicate codes that can be cleared",
"deduplicateCodes": "Deduplicate codes",
"deselectAll": "Deselect all",
"selectAll": "Select all",

View File

@@ -499,6 +499,7 @@
"appLockOfflineModeWarning": "Has elegido proceder sin copia de seguridad. Si olvidas el código de desbloqueo de la aplicación, se bloqueará el acceso a sus datos.",
"duplicateCodes": "Duplicar códigos",
"noDuplicates": "✨ No hay duplicados",
"youveNoDuplicateCodesThatCanBeCleared": "No tienes códigos duplicados que se puedan borrar",
"deduplicateCodes": "Desduplicar códigos",
"deselectAll": "Deseleccionar todo",
"selectAll": "Seleccionar todo",

View File

@@ -499,6 +499,7 @@
"appLockOfflineModeWarning": "Vous avez choisi de fonctionner sans sauvegardes. Si vous oubliez votre outil Applock, vous serez bloqué dans l'accès à vos données.",
"duplicateCodes": "Codes dupliqués",
"noDuplicates": "✨ Pas de doublons",
"youveNoDuplicateCodesThatCanBeCleared": "Vous n'avez aucun code en doublon pouvant être supprimé",
"deduplicateCodes": "Codes dédupliqués",
"deselectAll": "Tout désélectionner",
"selectAll": "Tout sélectionner",

View File

@@ -6,15 +6,12 @@
"@counterAppBarTitle": {
"description": "Text shown in the AppBar of the Counter Page"
},
"onBoardingBody": "अपने 2FA कोड का सुरक्षित रूप से बैकअप लें",
"onBoardingGetStarted": "प्रारंभ करें",
"setupFirstAccount": "अपना पहला अकाउंट सेटअप करें",
"importScanQrCode": "एक QR कोड स्कैन करें",
"qrCode": "QR कोड",
"importEnterSetupKey": "",
"importAccountPageTitle": "अकाउंट विवरण डालें",
"secretCanNotBeEmpty": "सीक्रेट खाली नहीं हो सकता है",
"bothIssuerAndAccountCanNotBeEmpty": "दोनों इश्यूअर और अकाउंट ख़ाली नहीं हो सकते है",
"incorrectDetails": "ग़लत विवरण",
"pleaseVerifyDetails": "कृपया विवरण सत्यापित करें और पुनः प्रयास करें",
"codeIssuerHint": "ज़ारीकर्ता",
@@ -35,24 +32,18 @@
},
"codeAccountHint": "अकाउंट (you@domain.com)",
"codeTagHint": "टैग",
"accountKeyType": "की का प्रकार",
"sessionExpired": "सत्र की अवधि समाप्त",
"@sessionExpired": {
"description": "Title of the dialog when the users current session is invalid/expired"
},
"pleaseLoginAgain": "कृपया फिर से लॉगिन करें",
"loggingOut": "लॉग आउट हो रहा है...",
"timeBasedKeyType": "समय आधारित (TOTP)",
"counterBasedKeyType": "काउंटर आधारित (HOTP)",
"saveAction": "सेव करें",
"nextTotpTitle": "अगला",
"deleteCodeTitle": "कोड डिलीट करें?",
"deleteCodeMessage": "क्या आप वाकई इस कोड को हटाना चाहते हैं? इस क्रिया को वापस नहीं किया जा सकता",
"trashCode": "?",
"trashCodeMessage": "क्या आप वाकई {account} के लिए कोड नष्ट करना चाहते हैं?",
"trash": "नष्ट करें",
"viewLogsAction": "लॉग देखें",
"sendLogsDescription": "यह आपकी समस्या को सुलझाने में हमारी सहायता के लिए लॉग भेजेगा। हालाँकि हम यह सुनिश्चित करने के लिए सावधानी बरतते हैं कि संवेदनशील जानकारी लॉग न हो, हम आपको इन लॉग को साझा करने से पहले देखने के लिए प्रोत्साहित करते हैं।",
"preparingLogsTitle": "लॉग तैयार किये जा रहे हैं...",
"emailLogsTitle": "लॉग ईमेल करें",
"emailLogsMessage": "कृपया {email} पर लॉग ईमेल करें",
@@ -66,7 +57,6 @@
"copyEmailAction": "ईमेल कॉपी करें",
"exportLogsAction": "लॉग एक्सपोर्ट करें",
"reportABug": "बग रिपोर्ट करें",
"crashAndErrorReporting": "क्रैश एवं त्रुटि रिपोर्टिंग",
"reportBug": "बग रिपोर्ट करें",
"emailUsMessage": "कृपया हमें {email} पर ईमेल करें",
"@emailUsMessage": {
@@ -79,37 +69,14 @@
"contactSupport": "सपोर्ट टीम से संपर्क करें",
"rateUsOnStore": "हमें {storeName} पर रेट करें",
"blog": "ब्लॉग",
"merchandise": "मर्चेंडाइज़",
"verifyPassword": "पासवर्ड सत्यापित करें",
"pleaseWait": "कृपया प्रतीक्षा करें...",
"generatingEncryptionKeysTitle": "एन्क्रिप्शन कुंजियाँ उत्पन्न हो रही हैं...",
"recreatePassword": "पासवर्ड दोबारा बनाएं",
"recreatePasswordMessage": "वर्तमान डिवाइस आपके पासवर्ड को सत्यापित करने के लिए पर्याप्त शक्तिशाली नहीं है, इसलिए हमें इसे सभी डिवाइसों के साथ काम करने वाले तरीके से एक बार पुन: उत्पन्न करने की आवश्यकता है। \n\nकृपया अपनी पुनर्प्राप्ति कुंजी का उपयोग करके लॉगिन करें और अपना पासवर्ड पुनः बनाएं (यदि आप चाहें तो उसी का दोबारा उपयोग कर सकते हैं)।",
"useRecoveryKey": "रिकवरी कुंजी का उपयोग करें",
"incorrectPasswordTitle": "ग़लत पासवर्ड",
"welcomeBack": "आपका पुनः स्वागत है!",
"emailAlreadyRegistered": "ईमेल पहले से ही पंजीकृत है।",
"emailNotRegistered": "ईमेल पंजीकृत नहीं है।",
"madeWithLoveAtPrefix": " ❤️ से बनाया गया ",
"supportDevs": "हमें समर्थन देने के लिए <bold-green>ente</bold-green> की सदस्यता लें",
"supportDiscount": "पहले साल 10% छूट पाने के लिए कूपन कोड \"AUTH\" का उपयोग करें",
"changeEmail": "ईमेल बदलें",
"changePassword": "पासवर्ड बदलें",
"data": "डेटा",
"importCodes": "कोड आयात करें",
"importTypePlainText": "साधारण टेक्स्ट",
"importTypeEnteEncrypted": "Ente द्वारा एनक्रिप्टेड टेक्स्ट",
"passwordForDecryptingExport": "डीक्रिप्ट करने के लिए पासवर्ड",
"passwordEmptyError": "पासवर्ड रिक्त नहीं हो सकता है",
"importFromApp": "{appName} से कोड इंपोर्ट करें",
"importGoogleAuthGuide": "ट्रांसफर अकाउंट्स\" विकल्प का उपयोग करके अपने खातों को Google प्रमाणक से एक क्यूआर कोड में निर्यात करें। फिर किसी अन्य डिवाइस का उपयोग करके QR कोड को स्कैन करें।\n\nटिप: क्यूआर कोड की तस्वीर लेने के लिए आप अपने लैपटॉप के वेबकैम का उपयोग कर सकते हैं।",
"importSelectJsonFile": "JSON फाइल चुनें",
"importSelectAppExport": "{appName} की निर्यात फ़ाइल का चयन करें",
"importEnteEncGuide": "Ente से निर्यात की गई एन्क्रिप्टेड JSON फ़ाइल का चयन करें",
"importRaivoGuide": "Raivo की सेटिंग्स में \"एक्सपोर्ट ओटीपी टू जिप आर्काइव\" विकल्प का उपयोग करें।\n\nज़िप फ़ाइल निकालें और JSON फ़ाइल आयात करें।",
"importBitwardenGuide": "बिटवर्डन टूल्स के भीतर \"एक्सपोर्ट वॉल्ट\" विकल्प का उपयोग करें और अनएन्क्रिप्टेड JSON फ़ाइल आयात करें।",
"importAegisGuide": "Aegis की सेटिंग्स में \"एक्सपोर्ट द वॉल्ट\" विकल्प का उपयोग करें।\n\nयदि आपकी वॉल्ट एन्क्रिप्टेड है, तो आपको वॉल्ट को डिक्रिप्ट करने के लिए वॉल्ट पासवर्ड दर्ज करना होगा।",
"import2FasGuide": "2FAS में \"सेटिंग्स->बैकअप-एक्सपोर्ट\" विकल्प का उपयोग करें।\n\nयदि आपका बैकअप एन्क्रिप्टेड है, तो आपको बैकअप को डिक्रिप्ट करने के लिए पासवर्ड दर्ज करना होगा",
"importLabel": "इंपोर्ट",
"selectFile": "फ़ाइल का चयन करें",
"emailVerificationToggle": "ईमेल सत्यापन",

View File

@@ -499,6 +499,7 @@
"appLockOfflineModeWarning": "Úgy döntött, hogy biztonsági mentés nélkül folytatja. Ha elfelejti az alkalmazászárat, akkor nem férhet hozzá adataihoz.",
"duplicateCodes": "Ismétlődő kódok",
"noDuplicates": "✨Nincs ismétlődés",
"youveNoDuplicateCodesThatCanBeCleared": "Nincsenek ismétlődő kódjai, amelyeket törölni lehetne",
"deduplicateCodes": "Ismétlődő kódok",
"deselectAll": "Összes kijelölés megszüntetése",
"selectAll": "Összes kijelölése",

View File

@@ -497,6 +497,7 @@
"appLockOfflineModeWarning": "Anda telah memilih untuk mengunci aplikasi tanpa cadangan apa pun. Jika Anda lupa kode Pengunci Apl Anda, Anda tidak akan dapat mengakses data-data Anda.",
"duplicateCodes": "Kode duplikat",
"noDuplicates": "✨ Tak ada duplikat",
"youveNoDuplicateCodesThatCanBeCleared": "Kamu tidak memiliki kode duplikat yang dapat dihapus",
"deduplicateCodes": "Hapus kode duplikat",
"deselectAll": "Batalkan semua pilihan",
"selectAll": "Pilih semua",

View File

@@ -499,6 +499,7 @@
"appLockOfflineModeWarning": "Hai scelto di procedere senza backup. Se dimentichi il tuo codice di blocco dell'app, non potrai più accedere ai tuoi dati.",
"duplicateCodes": "Codici duplicati",
"noDuplicates": "✨ Nessun doppione",
"youveNoDuplicateCodesThatCanBeCleared": "Non ci sono codici duplicati che possono essere cancellati",
"deduplicateCodes": "Codici deduplicati",
"deselectAll": "Deselezionare tutti",
"selectAll": "Seleziona tutti",

View File

@@ -499,6 +499,7 @@
"appLockOfflineModeWarning": "バックアップなしで進むことを選択しました。アプリロックを忘れると、データにアクセスできなくなります。",
"duplicateCodes": "重複コード",
"noDuplicates": "✨ 重複なし",
"youveNoDuplicateCodesThatCanBeCleared": "削除できる重複コードはありません",
"deduplicateCodes": "重複コード",
"deselectAll": "すべての選択を解除",
"selectAll": "すべて選択",

View File

@@ -499,6 +499,7 @@
"appLockOfflineModeWarning": "백업 없이 진행하는 것을 선택하셨습니다. App 잠금 방법을 잊어버리신 경우, 데이터에 접근하실 수 없게 됩니다.",
"duplicateCodes": "중복된 코드",
"noDuplicates": "✨ 중복 없음",
"youveNoDuplicateCodesThatCanBeCleared": "지울 수 있는 중복 코드가 없습니다",
"deduplicateCodes": "중복된 코드 제거",
"deselectAll": "모두 선택 해제",
"selectAll": "모두 선택",

View File

@@ -499,15 +499,11 @@
"appLockOfflineModeWarning": "Pasirinkote tęsti be atsarginių kopijų. Jei pamiršite programos užraktą, jums bus užrakinta prieiga prie duomenų.",
"duplicateCodes": "Dubliuoti kodus",
"noDuplicates": "✨ Dublikatų nėra",
"youveNoDuplicateCodesThatCanBeCleared": "Neturite dubliuotų kodų, kuriuos būtų galima išvalyti.",
"deduplicateCodes": "Atdubliuoti kodus",
"deselectAll": "Naikinti visų pasirinkimą",
"selectAll": "Pasirinkti viską",
"deleteDuplicates": "Ištrinti dublikatus",
"plainHTML": "Grynasis HTML",
"tellUsWhatYouThink": "Pasakykite mums, ką manote",
"giveUsAStarOnGithub": "Suteikite mums žvaigždutę platformoje „Github“",
"free5GB": "5 GB nemokami programai „<bold-green>ente</bold-green>“ nuotraukos",
"loginWithAuthAccount": "Prisijungti su jūsų „Auth“ paskyra",
"freeStorageOffer": "10 % nuolaida programai „<bold-green>ente</bold-green>“ nuotraukos",
"freeStorageOfferDescription": "Naudokite kodą „AUTH“, kad gautumėte 10 % nuolaida pirmiesiems metams. "
}

View File

@@ -499,6 +499,7 @@
"appLockOfflineModeWarning": "Je hebt ervoor gekozen om verder te gaan zonder backups. Als je jouw applock vergeet, wordt je uitgesloten van toegang tot je gegevens.",
"duplicateCodes": "Dubbele codes",
"noDuplicates": "✨ Geen dubbele",
"youveNoDuplicateCodesThatCanBeCleared": "Je hebt geen dubbele codes die kunnen worden gewist",
"deduplicateCodes": "Dubbele codes",
"deselectAll": "Alles deselecteren",
"selectAll": "Alles selecteren",

View File

@@ -499,7 +499,7 @@
"appLockOfflineModeWarning": "Wybrano kontynuowanie bez kopii zapasowych. Jeśli zapomnisz blokady aplikacji, utracisz dostęp do swoich danych.",
"duplicateCodes": "Zduplikowane kody",
"noDuplicates": "✨ Brak duplikatów",
"youveNoDuplicateCodesThatCanBeCleared": "Nie masz żadnych duplikatów kodów do usunięcia",
"youveNoDuplicateCodesThatCanBeCleared": "Nie masz duplikatów kodów, które mogą być wyczyszczone",
"deduplicateCodes": "Deduplikuj kody",
"deselectAll": "Odznacz wszystko",
"selectAll": "Zaznacz wszystko",

View File

@@ -499,7 +499,7 @@
"appLockOfflineModeWarning": "Você prosseguiu sem cópias de segurança. Caso, se esqueça de seu aplicativo de bloqueio, você não poderá mais acessar seus dados.",
"duplicateCodes": "Duplicar códigos",
"noDuplicates": "✨ Sem duplicados",
"youveNoDuplicateCodesThatCanBeCleared": "Você não possui códigos duplicados que possam ser excluídos",
"youveNoDuplicateCodesThatCanBeCleared": "Você não possui códigos duplicados para limpar",
"deduplicateCodes": "Desduplicar códigos",
"deselectAll": "Deselecionar tudo",
"selectAll": "Selecionar tudo",

View File

@@ -451,6 +451,7 @@
"appLockOfflineModeWarning": "Du har valt att fortsätta utan säkerhetskopior. Om du glömmer ditt applås, kommer du att bli utelåst från att komma åt dina data.",
"duplicateCodes": "Dubblettkoder",
"noDuplicates": "✨ Inga dubbletter",
"youveNoDuplicateCodesThatCanBeCleared": "Du har inga dubblettkoder som kan rensas bort",
"deduplicateCodes": "Deduplicera koder",
"deselectAll": "Avmarkera alla",
"selectAll": "Markera alla",

View File

@@ -499,6 +499,7 @@
"appLockOfflineModeWarning": "Yedekleme olmadan devam etmeyi seçtiniz. Eğer uygulama parolanızı unutursanız, verilerinize erişiminiz engellenir.",
"duplicateCodes": "Yinelenen kodlar",
"noDuplicates": "✨ Yinelenen yok",
"youveNoDuplicateCodesThatCanBeCleared": "Temizlenebilecek yinelenen kodunuz yok",
"deduplicateCodes": "Kodları tekilleştir",
"deselectAll": "Tümünün seçimini kaldır",
"selectAll": "Tümünü seç",

View File

@@ -497,6 +497,7 @@
"appLockOfflineModeWarning": "Ви обрали продовжити без резервних копій. Якщо ви забудете свій пароль, доступ до ваших даних буде заблоковано.",
"duplicateCodes": "Дублікати кодів",
"noDuplicates": "✨ Немає дублікатів",
"youveNoDuplicateCodesThatCanBeCleared": "У вас немає дублікатів кодів, які можна очистити",
"deduplicateCodes": "Дедуплікувати коди",
"deselectAll": "Зняти виділення",
"selectAll": "Вибрати все",

View File

@@ -499,6 +499,7 @@
"appLockOfflineModeWarning": "Bạn đã chọn tiếp tục mà không có bản sao lưu. Nếu bạn quên khóa ứng dụng, bạn sẽ bị khóa khỏi việc truy cập dữ liệu của mình.",
"duplicateCodes": "Mã trùng lặp",
"noDuplicates": "✨ Không có trùng lặp",
"youveNoDuplicateCodesThatCanBeCleared": "Bạn không có mã trùng lặp nào có thể được xóa",
"deduplicateCodes": "Loại bỏ mã trùng lặp",
"deselectAll": "Bỏ chọn tất cả",
"selectAll": "Chọn tất cả",

View File

@@ -499,6 +499,7 @@
"appLockOfflineModeWarning": "您已选择继续而不备份。如果您忘记了应用锁,您将无法访问数据。",
"duplicateCodes": "重复代码",
"noDuplicates": "✨ 没有重复",
"youveNoDuplicateCodesThatCanBeCleared": "您没有可清除的重复代码",
"deduplicateCodes": "删除重复代码",
"deselectAll": "取消全选",
"selectAll": "全选",

View File

@@ -113,7 +113,7 @@ class _LoginPasswordVerificationPageState
);
} else {
_logger.severe('API failure during SRP login', e, s);
if (e.type == DioExceptionType.connectionError) {
if (e.type == DioExceptionType.unknown) {
await _showContactSupportDialog(
context,
context.l10n.noInternetConnection,

View File

@@ -113,12 +113,12 @@ String parseErrorForUI(
if (dioError.response?.data["code"] != null) {
errorInfo = "Reason: ${dioError.response!.data["code"]}";
} else {
errorInfo = "Reason: ${dioError.response!.data.toString()}";
errorInfo = "Reason: ${dioError.response!.data}";
}
} else if (dioError.type == DioExceptionType.badCertificate) {
errorInfo = "Reason: ${dioError.error.toString()}";
} else if (dioError.type == DioExceptionType.unknown) {
errorInfo = "Reason: $dioError.error";
} else {
errorInfo = "Reason: ${dioError.type.toString()}";
errorInfo = "Reason: $dioError.type";
}
} else {
if (kDebugMode) {

View File

@@ -250,10 +250,10 @@ packages:
dependency: "direct main"
description:
name: collection
sha256: a1ace0a119f20aabc852d165077c036cd864315bd99b7eaa10a60100341941bf
sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a
url: "https://pub.dev"
source: hosted
version: "1.19.0"
version: "1.18.0"
confetti:
dependency: "direct main"
description:
@@ -286,14 +286,6 @@ packages:
url: "https://pub.dev"
source: hosted
version: "3.1.1"
cronet_http:
dependency: transitive
description:
name: cronet_http
sha256: "3af9c4d57bf07ef4b307e77b22be4ad61bea19ee6ff65e62184863f3a09f1415"
url: "https://pub.dev"
source: hosted
version: "1.3.2"
cross_file:
dependency: transitive
description:
@@ -318,14 +310,6 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.0.0"
cupertino_http:
dependency: transitive
description:
name: cupertino_http
sha256: "6fcf79586ad872ddcd6004d55c8c2aab3cdf0337436e8f99837b1b6c30665d0c"
url: "https://pub.dev"
source: hosted
version: "2.0.2"
dart_style:
dependency: transitive
description:
@@ -362,10 +346,10 @@ packages:
dependency: "direct main"
description:
name: dio
sha256: "253a18bbd4851fecba42f7343a1df3a9a4c1d31a2c1b37e221086b4fa8c8dbc9"
sha256: "5598aa796bbf4699afd5c67c0f5f6e2ed542afc956884b9cd58c306966efc260"
url: "https://pub.dev"
source: hosted
version: "5.8.0+1"
version: "5.7.0"
dio_web_adapter:
dependency: transitive
description:
@@ -877,14 +861,6 @@ packages:
url: "https://pub.dev"
source: hosted
version: "4.0.2"
http_profile:
dependency: transitive
description:
name: http_profile
sha256: "7e679e355b09aaee2ab5010915c932cce3f2d1c11c3b2dc177891687014ffa78"
url: "https://pub.dev"
source: hosted
version: "0.1.0"
image:
dependency: transitive
description:
@@ -909,14 +885,6 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.0.4"
jni:
dependency: transitive
description:
name: jni
sha256: f377c585ea9c08d48b427dc2e03780af2889d1bb094440da853c6883c1acba4b
url: "https://pub.dev"
source: hosted
version: "0.10.1"
js:
dependency: transitive
description:
@@ -1093,14 +1061,6 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.0.2"
native_dio_adapter:
dependency: "direct main"
description:
name: native_dio_adapter
sha256: "7420bc9517b2abe09810199a19924617b45690a44ecfb0616ac9babc11875c03"
url: "https://pub.dev"
source: hosted
version: "1.4.0"
nested:
dependency: transitive
description:
@@ -1117,14 +1077,6 @@ packages:
url: "https://pub.dev"
source: hosted
version: "0.5.0"
objective_c:
dependency: transitive
description:
name: objective_c
sha256: "62e79ab8c3ed6f6a340ea50dd48d65898f5d70425d404f0d99411f6e56e04584"
url: "https://pub.dev"
source: hosted
version: "4.1.0"
otp:
dependency: "direct main"
description:

View File

@@ -21,7 +21,7 @@ dependencies:
connectivity_plus: ^6.0.5
convert: ^3.1.1
device_info_plus: ^9.1.1
dio: ^5.8.0+1
dio: ^5.4.0
dotted_border: ^2.0.0+2
dropdown_button2: ^2.3.9
email_validator: ^3.0.0
@@ -72,7 +72,6 @@ dependencies:
logging: ^1.0.1
modal_bottom_sheet: ^3.0.0
move_to_background: ^1.0.2
native_dio_adapter: ^1.4.0
otp: ^3.1.1
package_info_plus: ^8.0.2
password_strength: ^0.2.0

View File

@@ -1,15 +1,9 @@
# CHANGELOG
## v1.7.11 (Unreleased)
## v1.7.10 (Unreleased)
- .
## v1.7.10
- Speed up selection for large libraries.
- Support Japanese translations.
- Fix video thumbnail generation on drag and drop.
## v1.7.9
- Light mode.

View File

@@ -1,6 +1,6 @@
{
"name": "ente",
"version": "1.7.11-beta",
"version": "1.7.10-beta",
"private": true,
"description": "Desktop client for Ente Photos",
"repository": "github:ente-io/photos-desktop",

View File

@@ -41,7 +41,6 @@ import {
fsRm,
fsRmdir,
fsWriteFile,
fsWriteFileViaBackup,
} from "./services/fs";
import { convertToJPEG, generateImageThumbnail } from "./services/image";
import { logout } from "./services/logout";
@@ -155,12 +154,6 @@ export const attachIPCHandlers = () => {
fsWriteFile(path, contents),
);
ipcMain.handle(
"fsWriteFileViaBackup",
(_, path: string, contents: string) =>
fsWriteFileViaBackup(path, contents),
);
ipcMain.handle("fsIsDir", (_, dirPath: string) => fsIsDir(dirPath));
ipcMain.handle("fsFindFiles", (_, folderPath: string) =>

View File

@@ -24,12 +24,6 @@ export const fsReadTextFile = async (filePath: string) =>
export const fsWriteFile = (path: string, contents: string) =>
fs.writeFile(path, contents, { flush: true });
export const fsWriteFileViaBackup = async (path: string, contents: string) => {
const backupPath = path + ".backup";
await fs.writeFile(backupPath, contents, { flush: true });
return fs.rename(backupPath, path);
};
export const fsIsDir = async (dirPath: string) => {
if (!existsSync(dirPath)) return false;
const stat = await fs.stat(dirPath);

View File

@@ -178,9 +178,6 @@ const fsReadTextFile = (path: string) =>
const fsWriteFile = (path: string, contents: string) =>
ipcRenderer.invoke("fsWriteFile", path, contents);
const fsWriteFileViaBackup = (path: string, contents: string) =>
ipcRenderer.invoke("fsWriteFileViaBackup", path, contents);
const fsIsDir = (dirPath: string) => ipcRenderer.invoke("fsIsDir", dirPath);
// - Conversion
@@ -376,7 +373,6 @@ contextBridge.exposeInMainWorld("electron", {
rm: fsRm,
readTextFile: fsReadTextFile,
writeFile: fsWriteFile,
writeFileViaBackup: fsWriteFileViaBackup,
isDir: fsIsDir,
findFiles: fsFindFiles,
},

View File

@@ -135,11 +135,11 @@ export const sidebar = [
link: "/photos/faq/hidden-and-archive",
},
{
text: "Face recognition",
link: "/photos/faq/face-recognition",
text: "Machine Learning",
link: "/photos/faq/machine-learning",
},
{
text: "Video streaming",
text: "Video Streaming",
link: "/photos/faq/video-streaming",
},
],
@@ -267,10 +267,6 @@ export const sidebar = [
text: "Hosting Ente without Docker",
link: "/self-hosting/guides/standalone-ente",
},
{
text: "Ente via Tailscale (Community)",
link: "/self-hosting/guides/Tailscale.md",
},
{
text: "Configure CLI for Self Hosted Instance",
link: "/self-hosting/guides/selfhost-cli",

View File

@@ -112,7 +112,3 @@ https://github.com/ente-io/ente/tree/main/cli#readme.
Currently, the Ente mobile app allows you to see a map view of all the albums by
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.

View File

@@ -19,6 +19,9 @@ Keep in mind that hidden items will still show up in the "On device" albums
within Ente as long as they are present in your native gallery. But once you
remove them from your device, they'll stop showing up here.
Hiding is currently only supported in the Ente mobile app, and items hidden from
the mobile app will not be visible in the web and desktop app.
For more details, see [features/hide](/photos/features/hide).
### Archive

View File

@@ -1,10 +1,10 @@
---
title: Face recognition
title: Machine Learning FAQ
description:
Frequently asked questions about Ente's face recognition
Frequently asked questions about several features of Ente's ML suite
---
# Face recognition
# Machine Learning
## Can I merge or de-merge persons recognized by the app?
@@ -19,7 +19,7 @@ instead of typing the name again, tap on the already given name that should now
be listed.
De-merging a certain grouping can be done by going to the person, pressing
`Review suggestions` and then the top right `History icon`. Now press on the
`review suggestions` and then the top right `history icon`. Now press on the
`minus icon` beside the group you want to de-merge.
### Desktop
@@ -29,16 +29,6 @@ selecting an existing person, and use the "Review suggestions" sheet to de-merge
previously merged persons (click the top right history icon on the suggestion
sheet to see the previous merges, and if necessary, undo them).
## How can I remove an incorrectly grouped face from a person?
On our mobile app, open up the person from the People section, click on the
three dots to open up overflow menu, and click on Edit. Now you will be
presented with the list of all photos that were merged to create this person.
You can click on the merged photos and select the photos you think are
incorrectly grouped (by long-pressing on them) and select "Remove" from the
action bar that pops up to remove any incorrect faces.
## How do I change the cover for a recognized person?
### Mobile

View File

@@ -1,11 +1,12 @@
---
title: Metadata
description: Handling of metadata in Ente Photos
description: Handling of metadata, in particular creation dates, in Ente Photos
---
# Metadata
This document describes Ente's handling of metadata
This document describes Ente's handling of metadata, in particular photo
creation dates.
## Import
@@ -45,7 +46,7 @@ importing that folder into Ente**. This way, we will be able to always correctly
map, for example, `flower.jpeg` and `flower.json` and show the same date for
`flower.jpeg` that you would've seen within Google Photos.
### File name
### Screenshots
In case the photo does not have a date in the Exif data (and it is not a Google
takeout), for example, for screenshots or Whatsapp forwards, Ente will still try
@@ -56,28 +57,6 @@ and deduce the correct date for the file from the name of the file.
> This process works great most of the time, but it is inherently based on
> heuristics and is not exact.
If we are unable to decipher the creation time from these 3 sources, we will set
the upload time as the photo's creation time.
## Modifications
Ente supports modifications to the following metadata:
- File name
- Date & time
- Location
The first two options are available on both mobile and desktop, while the
ability to update location is only available within our mobile apps.
### Bulk modifications
You can bulk-edit creation time of photos from our desktop app, by
multi-selecting items and selecting the "Fix time" option from the action bar.
You can bulk-edit location coordinates of photos from our mobile app, by
multi-selecting items and selecting the "Edit location" option from the action
bar.
## Export
Ente guarantees that you will get back the _exact_ same original photos and

View File

@@ -47,9 +47,6 @@ availability and durability. Our
[reliability document](https://ente.io/reliability) provides in-depth
information about our storage infrastructure and data replication strategies.
In short, we store 3 copies of your data, across 3 different providers, in 3
different countries. One of them is in an underground fall-out shelter in Paris.
### How does Ente's encryption compare to industry standards?
Our encryption model goes beyond industry standards. While many services use
@@ -58,17 +55,14 @@ in the unlikely event of a server breach, your data remains protected.
## Account Security
### What happens if I forget my password? {#account-recovery}
### What happens if I forget my password?
If you are logged into Ente on any of your existing devices, you can use that
device to reset your password and use your new password to log in.
You can reset your password using your recovery key that was provided to you
during account creation. Please store this key securely, as it's your lifeline
if you forget your password.
If you are logged out of Ente on all your devices, you can reset your password
using your recovery key that was provided to you during account creation.
If you are logged out of Ente on all your devices and you have lost both your
password and recovery key, we cannot recover your account or data due to our
end-to-end encrypted architecture.
If you lose both your password and recovery key, we cannot recover your account
or data due to our end-to-end encrypted architecture.
If you wish to delete your account in such scenarios, please reach out to
support@ente.io and we will help you out.

View File

@@ -157,21 +157,6 @@ The same applies to monthly plans.
If you prefer to have this credit refunded to your original payment method,
please contact support@ente.io, and we'll assist you.
## How can I update my payment method?
You can view and manage your payment method by clicking on the green
subscription card within the Ente app, and selecting the "Manage payment method"
button.
You will be able to see all of your previous invoices, with details regarding
their payment status. In case of failed payments, you will also have an option
to retry those charges.
## How can I cancel my subscription?
You can cancel your subscription by clicking on the green subscription card
within the Ente app, and selecting the "Cancel subscription" button.
## Is there an x GB plan?
We have experimented quite a bit and have found it hard to design a single

View File

@@ -1,10 +1,10 @@
---
title: Video streaming FAQ
title: Video Streaming FAQ
description:
Frequently asked questions about Ente's video streaming feature
Frequently asked questions about Ente's Video Streaming feature
---
# Video streaming
# Video Streaming
> [!NOTE]
>
@@ -31,8 +31,8 @@ You can open these videos by tapping on them.
Processed videos will show a `Play stream` button, clicking which will load and
play the stream.
Clicking on the `Info` icon within the original video will show details about
the generated stream.
Clicking on the `Info` icon within the original video will show details
about the generated stream.
### What is a stream?

View File

@@ -50,5 +50,5 @@ end-to-end encrypted security that we use for syncing your photos.
Note that the desktop app does not currently support modifying the face
groupings, that is only supported by the mobile app.
For more information on how to use Machine Learning for face recognition please
check out [the FAQ](../faq/face-recognition).
For more information on how to use Machine Learning please check out
[the FAQ](../faq/machine-learning).

View File

@@ -59,6 +59,3 @@ then select the "Recover two-factor" option in the error message that gets
shown. This will take you to a place where you can enter your Ente recovery key
and login into your account. Now you can go to the _Passkey_ page to delete the
lost passkey and/or add a new one.
If you have lost access to both your passkey and recovery key, please reach out
to [support@ente.io](mailto:support@ente.io) for help.

View File

@@ -10,9 +10,3 @@ automatically deleted from Trash after 30 days. You can manaully select photos
to permanently delete or completely empty the trash if you wish.
Items in trash are included in your used storage calculation.
## Recovery
If you have deleted items accidentally, you can recover them from Trash by
selecting these items, and clicking the "Restore" button on the action bar that
pops up.

View File

@@ -1,286 +0,0 @@
---
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.
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.
> [!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:
> ```
> 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:
> ```
> [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`
## 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:
image: almeidapaulopt/tsdproxy
container_name: tsdproxy
restart: unless-stopped
environment:
TZ: Asia/Singapur # change me
volumes:
- $XDG_RUNTIME_DIR/docker.sock:/var/run/docker.sock # for docker rootless otherwise /var/run/docker.sock:/var/run/docker.sock
- tsdproxy_data:/data
- /home/lee/docker/tsdproxy/config:/config
networks:
- proxy
labels: # giving the labels here will create tsdproxy instance in tailscale admin counsle and GUI can be accessable through tailscale if device is connected
- tsdproxy.enable=true
- tsdproxy.name=tsdproxy
- tsdproxy.ephemeral=false # this is optional but useful
volumes:
tsdproxy_data:
name: tsdproxy_data
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:
```
defaultproxyprovider: default
docker:
local:
host: unix:///var/run/docker.sock
defaultproxyprovider: default
files: {}
tailscale:
providers:
default:
authkey: ""
authkeyfile: "/config/authkey"
controlurl: https://controlplane.tailscale.com
datadir: /data/
http:
hostname: 0.0.0.0
port: 8080
log:
level: info
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 ##
First make the following necessary files/directories:
```
sudo mkdir -p /home/ubuntu/docker/ente/custom-logs
sudo mkdir -p /home/ubuntu/docker/ente/data
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:
```
db:
host: postgres
port: 5432
name: ente_db
user: pguser # change me
password: pgpass #change me
s3:
are_local_buckets: true
b2-eu-cen:
key: test # change me
secret: testtest # change me
endpoint: https://minio.xyz.ts.net
region: eu-central-2
bucket: b2-eu-cen
wasabi-eu-central-2-v3:
key: test # change me
secret: testtest # change me
endpoint: localhost:3200
region: eu-central-2
bucket: wasabi-eu-central-2-v3
compliance: false
scw-eu-fr-v3:
key: test # change me
secret: testtest # change me
endpoint: localhost:3200
region: eu-central-2
bucket: scw-eu-fr-v3
```
In the same directory run `sudo nano minio-provision.sh` and populate it with the following contant:
```
#!/bin/sh
# Script used to prepare the minio instance that runs as part of the development
# Docker compose cluster.
while ! mc config host add h0 http://minio:3200 test testtest #(change me)
do
echo "waiting for minio..."
sleep 0.5
done
cd /data
mc mb -p b2-eu-cen
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:
```
services:
museum:
image: ghcr.io/ente-io/server
ports:
- 9080:8080 # 9080 because tsdproxy is running on 8080:8080
# - 2112:2112 # Prometheus metrics
depends_on:
postgres:
condition: service_healthy
environment:
# Pass-in the config to connect to the DB and MinIO
ENTE_CREDENTIALS_FILE: /credentials.yaml
# ENTE_CLI_SECRETS_PATH: /cli-data/secret.txt
# ENTE_CLI_CONFIG_PATH: /cli-data/
volumes:
- /home/ubuntu/docker/ente/custom-logs:/var/logs
- /home/ubuntu/docker/ente/museum.yaml:/museum.yaml:ro
- /home/ubuntu/docker/ente/scripts/compose/credentials.yaml:/credentials.yaml:ro
#- /home/ubuntu/docker/ente/cli-data:/cli-data
#- /home/ubuntu/docker/ente/exports/ente-photos:/exports
- /home/ubuntu/docker/ente/data:/data:ro
networks:
- ente
- proxy
labels:
tsdproxy.enable: "true"
tsdproxy.name: "ente"
# # Resolve "localhost:3200" in the museum container to the minio container.
socat:
image: alpine/socat
network_mode: service:museum
depends_on:
- museum
command: "TCP-LISTEN:3200,fork,reuseaddr TCP:minio:3200"
postgres:
image: postgres:15
ports:
- 5432:5432
environment:
POSTGRES_USER: pguser # change me
POSTGRES_PASSWORD: pgpass # change me
POSTGRES_DB: ente_db
# Wait for postgres to be accept connections before starting museum.
healthcheck:
test:
[
"CMD",
"pg_isready",
"-q",
"-d",
"ente_db",
"-U",
"pguser" # change it accouding to the POSTGRES_USER: pguser
]
start_period: 40s
start_interval: 1s
volumes:
- /home/ubuntu/docker/ente/postgres-data:/var/lib/postgresql/data
networks:
- ente
minio:
image: minio/minio
# Use different ports than the minio defaults to avoid conflicting
# with the ports used by Prometheus.
ports:
- 3200:3200 # API
- 3201:3201 # Console
environment:
MINIO_ROOT_USER: test # change me
MINIO_ROOT_PASSWORD: testtest # change me
MINIO_SERVER_URL: https://minio.xyz.ts.net
command: server /data --address ":3200" --console-address ":3201"
volumes:
- /home/ubuntu/docker/ente/minio-data:/data
networks:
- ente
- proxy
labels:
tsdproxy.enable: "true"
tsdproxy.name: "minio"
minio-provision:
image: minio/mc
depends_on:
- minio
volumes:
- /home/ubuntu/docker/ente/scripts/compose/minio-provision.sh:/provision.sh:ro
- /home/ubuntu/docker/ente/minio-data:/data
networks:
- ente
entrypoint: sh /provision.sh
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.
> 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
```
.\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
```
.\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.

View File

@@ -54,30 +54,20 @@ The same principle applies if you're deploying to your custom domain.
## Replication
If you're wondering why there are 3 buckets on MinIO UI - that's because our
production instance uses these to perform [replication](https://ente.io/reliability/).
In a self hosted Ente Instance replication is turned off by default.
When replication is turned off, only the first bucket (`b2-eu-cen`) is used,
and you can ignore the other two. Use the `s3.hot_storage.primary` option
if you'd like to set one of the other predefined buckets as the primary bucket.
> [!IMPORTANT]
> As of now, Replication works only if all the 3 storage type
> needs are fulfilled (1 Hot, 1 Cold and 1 Glacier Storage).
>
> [Reference](https://github.com/ente-io/ente/discussions/3167#discussioncomment-10585970)
If you're wondering why there are 3 buckets on 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.
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 replication is turned off, only the first bucket (`b2-eu-cen`) is used,
and the 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
predefined buckets as the primary bucket.
## SSL Configuration
> [!NOTE]

View File

@@ -1,37 +0,0 @@
# Grafana
Grafana data is stored in a persistent Docker volume named `grafana-storage`. To
create a backup of this, use
```sh
docker run --rm \
--mount source=grafana-storage,target=/g \
-v $(pwd):/backup \
busybox \
tar -cvzf /backup/grafana-storage.backup.tar.gz /g
```
## Installation
Restore the volume:
```sh
docker run --rm \
--mount source=grafana-storage,target=/g \
-v $(pwd):/backup \
busybox \
tar -xvzf /backup/grafana-storage.backup.tar.gz -C /
```
Add the Grafana nginx config
```sh
sudo mv grafana.nginx.conf /root/nginx/conf.d
```
and reload the nginx service before starting Grafana for the first time.
```sh
sudo systemctl reload nginx
sudo systemctl start grafana
```

View File

@@ -1,24 +0,0 @@
# Needed for web sockets
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
ssl_certificate /etc/ssl/certs/cert.pem;
ssl_certificate_key /etc/ssl/private/key.pem;
server_name grafana.ente.io;
location / {
proxy_pass http://host.docker.internal:3001;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
}

View File

@@ -1,14 +0,0 @@
[Unit]
Documentation=https://grafana.com/docs/grafana/latest/setup-grafana/configure-docker/
Requires=docker.service
After=docker.service
[Service]
ExecStartPre=docker pull grafana/grafana-oss
ExecStartPre=-docker stop grafana
ExecStartPre=-docker rm grafana
ExecStart=docker run --name grafana \
-p 3001:3001 \
-v grafana-storage:/var/lib/grafana \
-e "GF_SERVER_HTTP_PORT=3001" \
grafana/grafana-oss

View File

@@ -1,3 +1,4 @@
import ModeIcon from "@mui/icons-material/Mode";
import {
Button,
CircularProgress,
@@ -14,12 +15,14 @@ import { useEffect, useState } from "react";
import { getEmail, getToken } from "../App";
import { apiOrigin } from "../services/support";
import CloseFamily from "./CloseFamily";
import EditDialog from "./EditStorage";
interface FamilyMember {
id: string;
email: string;
status: string;
usage: number;
storageLimit: number;
}
interface UserData {
@@ -33,8 +36,11 @@ interface UserData {
const FamilyTableComponent: React.FC = () => {
const [familyMembers, setFamilyMembers] = useState<FamilyMember[]>([]);
const [closeFamilyOpen, setCloseFamilyOpen] = useState(false);
const [open, setOpen] = useState(false);
const [loading, setLoading] = useState<boolean>(true);
const [error, setError] = useState<string | null>(null);
const [editDialog, setEditDialog] = useState(false);
const [memID, selectedMemID] = useState<string>("");
useEffect(() => {
const fetchData = async () => {
@@ -53,9 +59,7 @@ const FamilyTableComponent: React.FC = () => {
throw new Error("Network response was not ok");
}
const userData = (await response.json()) as UserData; // Typecast to UserData interface
const members: FamilyMember[] =
userData.details.familyData.members;
setFamilyMembers(members);
setFamilyMembers(userData.details.familyData.members);
} catch (error) {
console.error("Error fetching family data:", error);
setError("No family data");
@@ -69,9 +73,9 @@ const FamilyTableComponent: React.FC = () => {
);
}, []);
const formatUsageToGB = (usage: number): string => {
const usageInGB = (usage / (1024 * 1024 * 1024)).toFixed(2);
return `${usageInGB} GB`;
const formatBytesToGB = (bytesValue: number): string => {
const valueInGB = (bytesValue / (1024 * 1024 * 1024)).toFixed(2);
return `${valueInGB} GB`;
};
const handleOpenCloseFamily = () => {
@@ -87,6 +91,13 @@ const FamilyTableComponent: React.FC = () => {
handleOpenCloseFamily();
};
const handleEditDialog = () => {
familyMembers.forEach((member) => {
selectedMemID(member.id);
});
setOpen(true);
setEditDialog(true);
};
if (loading) {
return <CircularProgress />;
}
@@ -111,6 +122,9 @@ const FamilyTableComponent: React.FC = () => {
<Table aria-label="family-table">
<TableHead>
<TableRow>
<TableCell>
<b>ID</b>
</TableCell>
<TableCell>
<b>User</b>
</TableCell>
@@ -121,13 +135,17 @@ const FamilyTableComponent: React.FC = () => {
<b>Usage</b>
</TableCell>
<TableCell>
<b>ID</b>
<b>Storage Limit</b>
</TableCell>
<TableCell>
<b> </b>
</TableCell>
</TableRow>
</TableHead>
<TableBody>
{familyMembers.map((member) => (
<TableRow key={member.id}>
<TableCell>{member.id}</TableCell>
<TableCell>{member.email}</TableCell>
<TableCell>
<span
@@ -150,9 +168,29 @@ const FamilyTableComponent: React.FC = () => {
</span>
</TableCell>
<TableCell>
{formatUsageToGB(member.usage)}
{formatBytesToGB(member.usage)}
</TableCell>
<TableCell>{member.id}</TableCell>
<TableCell>
{formatBytesToGB(member.storageLimit)}
</TableCell>
{(member.status === "ADMIN" || member.status === "SELF" ) ? (
<span></span>
) : <TableCell>
<div
onClick={handleEditDialog}
style={{
marginLeft: "8px",
cursor: "pointer",
}}
>
<ModeIcon />
<EditDialog
open={editDialog}
setOpen={setEditDialog}
memberID={member.id}
></EditDialog>
</div>
</TableCell>}
</TableRow>
))}
</TableBody>

View File

@@ -4,7 +4,7 @@
# This file should be version controlled and should not be manually edited.
version:
revision: "2663184aa79047d0a33a14a3b607954f8fdd8730"
channel: "stable"
revision: 0b8abb4724aa590dd0f429683339b1e045a1594d
channel: stable
project_type: app

View File

@@ -5,9 +5,3 @@ gradle-wrapper.jar
/gradlew.bat
/local.properties
GeneratedPluginRegistrant.java
# Remember to never publicly share your keystore.
# See https://flutter.dev/to/reference-keystore
key.properties
**/*.keystore
**/*.jks

View File

@@ -28,23 +28,13 @@ if (keystorePropertiesFile.exists()) {
}
android {
namespace = "io.ente.photos"
compileSdk = 35
ndkVersion = flutter.ndkVersion
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = JavaVersion.VERSION_1_8
}
compileSdkVersion 34
ndkVersion "26.0.10792818"
sourceSets {
main.java.srcDirs += 'src/main/kotlin'
}
lintOptions {
disable 'InvalidPackage'
warningsAsErrors false
@@ -52,11 +42,11 @@ android {
}
defaultConfig {
applicationId = "io.ente.photos"
minSdk = 26
targetSdk = flutter.targetSdkVersion
versionCode = flutter.versionCode
versionName = flutter.versionName
applicationId "io.ente.photos"
minSdkVersion 26
targetSdkVersion 34
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
multiDexEnabled true
consumerProguardFiles 'proguard-rules.pro'
@@ -125,14 +115,14 @@ rootProject.allprojects {
if (details.requested.group == 'com.github.bumptech.glide'
&& details.requested.name.contains('glide')) {
details.useVersion "4.15.1"
}
}
}
}
}
}
flutter {
source = "../.."
source '../..'
}
dependencies {

View File

@@ -4,4 +4,3 @@
-keepattributes LineNumberTable,SourceFile
-keep class org.chromium.net.** { *; }
-keep class org.xmlpull.v1.** { *; }

View File

@@ -12,15 +12,18 @@ allprojects {
url "${project(':background_fetch').projectDir}/libs"
}
}
ext {
compileSdkVersion = 34
targetSdkVersion = 34
appCompatVersion = "1.7.0"
}
}
rootProject.buildDir = "../build"
rootProject.buildDir = '../build'
subprojects {
project.buildDir = "${rootProject.buildDir}/${project.name}"
}
subprojects {
project.evaluationDependsOn(":app")
project.evaluationDependsOn(':app')
}
tasks.register("clean", Delete) {

View File

@@ -1,3 +1,3 @@
org.gradle.jvmargs=-Xmx4608m
android.useAndroidX=true
android.enableJetifier=true
android.enableJetifier=true

View File

@@ -1,5 +1,7 @@
#Fri Jun 23 08:50:38 CEST 2017
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-all.zip
distributionSha256Sum=a8da5b02437a60819cad23e10fc7e9cf32bcb57029d9cb277e26eeff76ce014b

View File

@@ -18,8 +18,8 @@ pluginManagement {
plugins {
id "dev.flutter.flutter-plugin-loader" version "1.0.0"
id "com.android.application" version "8.1.0" apply false
id "org.jetbrains.kotlin.android" version "1.8.22" apply false
id "com.android.application" version "7.1.2" apply false
id "org.jetbrains.kotlin.android" version "1.8.21" apply false
}
include ":app"
include ":app"

View File

@@ -1,6 +1,6 @@
ente, fotoğraflarınızı ve videolarınızı yedekleyip paylaşmanızı sağlayan kullanimi kolay bir uygulamadır.
ente, fotoğraflarınızı ve videolarınızı yedeklemek ve paylaşmak için basit bir uygulamadır.
Anılarınızı saklamak için gizlilik dostu bir alternatif arıyorsanız, doğru yere geldiniz. Ente ile uçtan uca şifrelenmiş olarak (e2ee) saklanırlar. Bu, onları yalnızca sizin görebileceğiniz anlamına gelir.
Google Fotoğraflar'a gizlilik dostu bir alternatif arıyorsanız doğru yere geldiniz. Ente ile uçtan uca şifrelenmiş olarak (e2ee) saklanırlar. Bu, onları yalnızca sizin görebileceğiniz anlamına gelir.
Android, iOS, web ve masaüstünde açık kaynaklı uygulamalarımız var ve fotoğraflarınız bunların tümü arasında uçtan uca şifrelenmiş (e2ee) şekilde sorunsuz bir şekilde senkronize edilecek.

View File

@@ -1 +1 @@
Ente Fotoğraflar
ente fotoğraf uygulaması

View File

@@ -1 +1 @@
Ente - şifrelenmiş depolama sistemi
Şifrelenmiş depolama sistemi

View File

@@ -5,6 +5,7 @@ PODS:
- Flutter
- connectivity_plus (0.0.1):
- Flutter
- FlutterMacOS
- cupertino_http (0.0.1):
- Flutter
- FlutterMacOS
@@ -21,31 +22,31 @@ PODS:
- Flutter
- file_saver (0.0.1):
- Flutter
- Firebase/CoreOnly (11.8.0):
- FirebaseCore (~> 11.8.0)
- Firebase/Messaging (11.8.0):
- Firebase/CoreOnly (11.2.0):
- FirebaseCore (= 11.2.0)
- Firebase/Messaging (11.2.0):
- Firebase/CoreOnly
- FirebaseMessaging (~> 11.8.0)
- firebase_core (3.12.0):
- Firebase/CoreOnly (= 11.8.0)
- FirebaseMessaging (~> 11.2.0)
- firebase_core (3.6.0):
- Firebase/CoreOnly (= 11.2.0)
- Flutter
- firebase_messaging (15.2.3):
- Firebase/Messaging (= 11.8.0)
- firebase_messaging (15.1.3):
- Firebase/Messaging (= 11.2.0)
- firebase_core
- Flutter
- FirebaseCore (11.8.1):
- FirebaseCoreInternal (~> 11.8.0)
- FirebaseCore (11.2.0):
- FirebaseCoreInternal (~> 11.0)
- GoogleUtilities/Environment (~> 8.0)
- GoogleUtilities/Logger (~> 8.0)
- FirebaseCoreInternal (11.8.0):
- FirebaseCoreInternal (11.6.0):
- "GoogleUtilities/NSData+zlib (~> 8.0)"
- FirebaseInstallations (11.8.0):
- FirebaseCore (~> 11.8.0)
- FirebaseInstallations (11.4.0):
- FirebaseCore (~> 11.0)
- GoogleUtilities/Environment (~> 8.0)
- GoogleUtilities/UserDefaults (~> 8.0)
- PromisesObjC (~> 2.4)
- FirebaseMessaging (11.8.0):
- FirebaseCore (~> 11.8.0)
- FirebaseMessaging (11.2.0):
- FirebaseCore (~> 11.0)
- FirebaseInstallations (~> 11.0)
- GoogleDataTransport (~> 10.0)
- GoogleUtilities/AppDelegateSwizzler (~> 8.0)
@@ -56,7 +57,7 @@ PODS:
- Flutter (1.0.0)
- flutter_email_sender (0.0.1):
- Flutter
- flutter_image_compress_common (1.0.0):
- flutter_image_compress (1.0.0):
- Flutter
- Mantle
- SDWebImage
@@ -70,7 +71,7 @@ PODS:
- OrderedSet (~> 6.0.3)
- flutter_local_notifications (0.0.1):
- Flutter
- flutter_native_splash (2.4.3):
- flutter_native_splash (0.0.1):
- Flutter
- flutter_secure_storage (6.0.0):
- Flutter
@@ -78,6 +79,7 @@ PODS:
- Flutter
- fluttertoast (0.0.2):
- Flutter
- Toast
- GoogleDataTransport (10.1.0):
- nanopb (~> 3.30910.0)
- PromisesObjC (~> 2.4)
@@ -116,17 +118,17 @@ PODS:
- FlutterMacOS
- integration_test (0.0.1):
- Flutter
- libwebp (1.5.0):
- libwebp/demux (= 1.5.0)
- libwebp/mux (= 1.5.0)
- libwebp/sharpyuv (= 1.5.0)
- libwebp/webp (= 1.5.0)
- libwebp/demux (1.5.0):
- libwebp (1.3.2):
- libwebp/demux (= 1.3.2)
- libwebp/mux (= 1.3.2)
- libwebp/sharpyuv (= 1.3.2)
- libwebp/webp (= 1.3.2)
- libwebp/demux (1.3.2):
- libwebp/webp
- libwebp/mux (1.5.0):
- libwebp/mux (1.3.2):
- libwebp/demux
- libwebp/sharpyuv (1.5.0)
- libwebp/webp (1.5.0):
- libwebp/sharpyuv (1.3.2)
- libwebp/webp (1.3.2):
- libwebp/sharpyuv
- local_auth_darwin (0.0.1):
- Flutter
@@ -142,6 +144,8 @@ PODS:
- Flutter
- media_kit_libs_ios_video (1.0.4):
- Flutter
- media_kit_native_event_loop (1.0.0):
- Flutter
- media_kit_video (0.0.1):
- Flutter
- motion_sensors (0.0.1):
@@ -183,19 +187,21 @@ PODS:
- privacy_screen (0.0.1):
- Flutter
- PromisesObjC (2.4.0)
- receive_sharing_intent (1.8.1):
- receive_sharing_intent (1.8.0):
- Flutter
- SDWebImage (5.21.0):
- SDWebImage/Core (= 5.21.0)
- SDWebImage/Core (5.21.0)
- screen_brightness_ios (0.1.0):
- Flutter
- SDWebImage (5.20.0):
- SDWebImage/Core (= 5.20.0)
- SDWebImage/Core (5.20.0)
- SDWebImageWebPCoder (0.14.6):
- libwebp (~> 1.0)
- SDWebImage/Core (~> 5.17)
- Sentry/HybridSDK (8.44.0)
- sentry_flutter (8.13.2):
- Sentry/HybridSDK (8.36.0)
- sentry_flutter (8.9.0):
- Flutter
- FlutterMacOS
- Sentry/HybridSDK (= 8.44.0)
- Sentry/HybridSDK (= 8.36.0)
- share_plus (0.0.1):
- Flutter
- shared_preferences_foundation (0.0.1):
@@ -204,28 +210,28 @@ PODS:
- sqflite_darwin (0.0.4):
- Flutter
- FlutterMacOS
- sqlite3 (3.49.1):
- sqlite3/common (= 3.49.1)
- sqlite3/common (3.49.1)
- sqlite3/dbstatvtab (3.49.1):
- "sqlite3 (3.46.1+1)":
- "sqlite3/common (= 3.46.1+1)"
- "sqlite3/common (3.46.1+1)"
- "sqlite3/dbstatvtab (3.46.1+1)":
- sqlite3/common
- sqlite3/fts5 (3.49.1):
- "sqlite3/fts5 (3.46.1+1)":
- sqlite3/common
- sqlite3/perf-threadsafe (3.49.1):
- "sqlite3/perf-threadsafe (3.46.1+1)":
- sqlite3/common
- sqlite3/rtree (3.49.1):
- "sqlite3/rtree (3.46.1+1)":
- sqlite3/common
- sqlite3_flutter_libs (0.0.1):
- Flutter
- FlutterMacOS
- sqlite3 (~> 3.49.0)
- "sqlite3 (~> 3.46.0+1)"
- sqlite3/dbstatvtab
- sqlite3/fts5
- sqlite3/perf-threadsafe
- sqlite3/rtree
- system_info_plus (0.0.1):
- Flutter
- ua_client_hints (1.4.1):
- Toast (4.1.1)
- ua_client_hints (1.4.0):
- Flutter
- uni_links (0.0.1):
- Flutter
@@ -245,7 +251,7 @@ PODS:
DEPENDENCIES:
- background_fetch (from `.symlinks/plugins/background_fetch/ios`)
- battery_info (from `.symlinks/plugins/battery_info/ios`)
- connectivity_plus (from `.symlinks/plugins/connectivity_plus/ios`)
- connectivity_plus (from `.symlinks/plugins/connectivity_plus/darwin`)
- cupertino_http (from `.symlinks/plugins/cupertino_http/darwin`)
- dart_ui_isolate (from `.symlinks/plugins/dart_ui_isolate/ios`)
- device_info_plus (from `.symlinks/plugins/device_info_plus/ios`)
@@ -255,7 +261,7 @@ DEPENDENCIES:
- firebase_messaging (from `.symlinks/plugins/firebase_messaging/ios`)
- Flutter (from `Flutter`)
- flutter_email_sender (from `.symlinks/plugins/flutter_email_sender/ios`)
- flutter_image_compress_common (from `.symlinks/plugins/flutter_image_compress_common/ios`)
- flutter_image_compress (from `.symlinks/plugins/flutter_image_compress/ios`)
- flutter_inappwebview_ios (from `.symlinks/plugins/flutter_inappwebview_ios/ios`)
- flutter_local_notifications (from `.symlinks/plugins/flutter_local_notifications/ios`)
- flutter_native_splash (from `.symlinks/plugins/flutter_native_splash/ios`)
@@ -272,6 +278,7 @@ DEPENDENCIES:
- maps_launcher (from `.symlinks/plugins/maps_launcher/ios`)
- media_extension (from `.symlinks/plugins/media_extension/ios`)
- media_kit_libs_ios_video (from `.symlinks/plugins/media_kit_libs_ios_video/ios`)
- media_kit_native_event_loop (from `.symlinks/plugins/media_kit_native_event_loop/ios`)
- media_kit_video (from `.symlinks/plugins/media_kit_video/ios`)
- motion_sensors (from `.symlinks/plugins/motion_sensors/ios`)
- motionphoto (from `.symlinks/plugins/motionphoto/ios`)
@@ -286,11 +293,12 @@ DEPENDENCIES:
- photo_manager (from `.symlinks/plugins/photo_manager/ios`)
- privacy_screen (from `.symlinks/plugins/privacy_screen/ios`)
- receive_sharing_intent (from `.symlinks/plugins/receive_sharing_intent/ios`)
- screen_brightness_ios (from `.symlinks/plugins/screen_brightness_ios/ios`)
- sentry_flutter (from `.symlinks/plugins/sentry_flutter/ios`)
- share_plus (from `.symlinks/plugins/share_plus/ios`)
- shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`)
- sqflite_darwin (from `.symlinks/plugins/sqflite_darwin/darwin`)
- sqlite3_flutter_libs (from `.symlinks/plugins/sqlite3_flutter_libs/darwin`)
- sqlite3_flutter_libs (from `.symlinks/plugins/sqlite3_flutter_libs/ios`)
- system_info_plus (from `.symlinks/plugins/system_info_plus/ios`)
- ua_client_hints (from `.symlinks/plugins/ua_client_hints/ios`)
- uni_links (from `.symlinks/plugins/uni_links/ios`)
@@ -321,6 +329,7 @@ SPEC REPOS:
- SDWebImageWebPCoder
- Sentry
- sqlite3
- Toast
EXTERNAL SOURCES:
background_fetch:
@@ -328,7 +337,7 @@ EXTERNAL SOURCES:
battery_info:
:path: ".symlinks/plugins/battery_info/ios"
connectivity_plus:
:path: ".symlinks/plugins/connectivity_plus/ios"
:path: ".symlinks/plugins/connectivity_plus/darwin"
cupertino_http:
:path: ".symlinks/plugins/cupertino_http/darwin"
dart_ui_isolate:
@@ -347,8 +356,8 @@ EXTERNAL SOURCES:
:path: Flutter
flutter_email_sender:
:path: ".symlinks/plugins/flutter_email_sender/ios"
flutter_image_compress_common:
:path: ".symlinks/plugins/flutter_image_compress_common/ios"
flutter_image_compress:
:path: ".symlinks/plugins/flutter_image_compress/ios"
flutter_inappwebview_ios:
:path: ".symlinks/plugins/flutter_inappwebview_ios/ios"
flutter_local_notifications:
@@ -381,6 +390,8 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/media_extension/ios"
media_kit_libs_ios_video:
:path: ".symlinks/plugins/media_kit_libs_ios_video/ios"
media_kit_native_event_loop:
:path: ".symlinks/plugins/media_kit_native_event_loop/ios"
media_kit_video:
:path: ".symlinks/plugins/media_kit_video/ios"
motion_sensors:
@@ -409,6 +420,8 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/privacy_screen/ios"
receive_sharing_intent:
:path: ".symlinks/plugins/receive_sharing_intent/ios"
screen_brightness_ios:
:path: ".symlinks/plugins/screen_brightness_ios/ios"
sentry_flutter:
:path: ".symlinks/plugins/sentry_flutter/ios"
share_plus:
@@ -418,7 +431,7 @@ EXTERNAL SOURCES:
sqflite_darwin:
:path: ".symlinks/plugins/sqflite_darwin/darwin"
sqlite3_flutter_libs:
:path: ".symlinks/plugins/sqlite3_flutter_libs/darwin"
:path: ".symlinks/plugins/sqlite3_flutter_libs/ios"
system_info_plus:
:path: ".symlinks/plugins/system_info_plus/ios"
ua_client_hints:
@@ -438,55 +451,56 @@ EXTERNAL SOURCES:
SPEC CHECKSUMS:
background_fetch: 94b36ee293e82972852dba8ede1fbcd3bd3d9d57
battery_info: 83f3aae7be2fccefab1d2bf06b8aa96f11c8bcdd
connectivity_plus: cb623214f4e1f6ef8fe7403d580fdad517d2f7dd
battery_info: a06b00c06a39bc94c92beebf600f1810cb6c8c87
connectivity_plus: 3f6c9057f4cd64198dc826edfb0542892f825343
cupertino_http: 94ac07f5ff090b8effa6c5e2c47871d48ab7c86c
dart_ui_isolate: 46f6714abe6891313267153ef6f9748d8ecfcab1
device_info_plus: 335f3ce08d2e174b9fdc3db3db0f4e3b1f66bd89
ffmpeg-kit-ios-full-gpl: 80adc341962e55ef709e36baa8ed9a70cf4ea62b
ffmpeg_kit_flutter_full_gpl: ce18b888487c05c46ed252cd2e7956812f2e3bd1
file_saver: 6cdbcddd690cb02b0c1a0c225b37cd805c2bf8b6
Firebase: d80354ed7f6df5f9aca55e9eb47cc4b634735eaf
firebase_core: 6cbed78b4f298ed103a9fd034e6dbc846320480f
firebase_messaging: 5e0adf2eb18b0ee59aa0c109314c091a0497ecac
FirebaseCore: 99fe0c4b44a39f37d99e6404e02009d2db5d718d
FirebaseCoreInternal: df24ce5af28864660ecbd13596fc8dd3a8c34629
FirebaseInstallations: 6c963bd2a86aca0481eef4f48f5a4df783ae5917
FirebaseMessaging: 487b634ccdf6f7b7ff180fdcb2a9935490f764e8
Firebase: 98e6bf5278170668a7983e12971a66b2cd57fc8c
firebase_core: 085320ddfaacb80d1a96eac3a87857afcc150db1
firebase_messaging: d398edc15fe825f832836e74f6ac61e8cd2f3ad3
FirebaseCore: a282032ae9295c795714ded2ec9c522fc237f8da
FirebaseCoreInternal: d98ab91e2d80a56d7b246856a8885443b302c0c2
FirebaseInstallations: 6ef4a1c7eb2a61ee1f74727d7f6ce2e72acf1414
FirebaseMessaging: c9ec7b90c399c7a6100297e9d16f8a27fc7f7152
Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7
flutter_email_sender: aa1e9772696691d02cd91fea829856c11efb8e58
flutter_image_compress_common: 1697a328fd72bfb335507c6bca1a65fa5ad87df1
flutter_email_sender: cd533cdc7ea5eda6fabb2c7f78521c71207778a4
flutter_image_compress: 4b058288a81f76e5e80340af37c709abafff34c4
flutter_inappwebview_ios: b89ba3482b96fb25e00c967aae065701b66e9b99
flutter_local_notifications: ad39620c743ea4c15127860f4b5641649a988100
flutter_native_splash: 6cad9122ea0fad137d23137dd14b937f3e90b145
flutter_secure_storage: 1ed9476fba7e7a782b22888f956cce43e2c62f13
flutter_sodium: 7e4621538491834eba53bd524547854bcbbd6987
fluttertoast: 2c67e14dce98bbdb200df9e1acf610d7a6264ea1
flutter_native_splash: 35ddbc7228eafcb3969dcc5f1fbbe27c1145a4f0
flutter_secure_storage: 2c2ff13db9e0a5647389bff88b0ecac56e3f3418
flutter_sodium: 152647449ba89a157fd48d7e293dcd6d29c6ab0e
fluttertoast: 76fea30fcf04176325f6864c87306927bd7d2038
GoogleDataTransport: aae35b7ea0c09004c3797d53c8c41f66f219d6a7
GoogleUtilities: 26a3abef001b6533cf678d3eb38fd3f614b7872d
home_widget: f169fc41fd807b4d46ab6615dc44d62adbf9f64f
image_editor_common: 3de87e7c4804f4ae24c8f8a998362b98c105cac1
image_picker_ios: 7fe1ff8e34c1790d6fff70a32484959f563a928a
in_app_purchase_storekit: d1a48cb0f8b29dbf5f85f782f5dd79b21b90a5e6
in_app_purchase_storekit: e126ef1b89e4a9fdf07e28f005f82632b4609437
integration_test: 4a889634ef21a45d28d50d622cf412dc6d9f586e
libwebp: 02b23773aedb6ff1fd38cec7a77b81414c6842a8
libwebp: 1786c9f4ff8a279e4dac1e8f385004d5fc253009
local_auth_darwin: 553ce4f9b16d3fdfeafce9cf042e7c9f77c1c391
local_auth_ios: f7a1841beef3151d140a967c2e46f30637cdf451
Mantle: c5aa8794a29a022dfbbfc9799af95f477a69b62d
maps_launcher: edf829809ba9e894d70e569bab11c16352dedb45
media_extension: 671e2567880d96c95c65c9a82ccceed8f2e309fd
media_extension: a1fec16ee9c8241a6aef9613578ebf097d6c5e64
media_kit_libs_ios_video: 5a18affdb97d1f5d466dc79988b13eff6c5e2854
media_kit_native_event_loop: 5fba1a849a6c87a34985f1e178a0de5bd444a0cf
media_kit_video: 1746e198cb697d1ffb734b1d05ec429d1fcd1474
motion_sensors: 741e702c17467b9569a92165dda8d4d88c6167f1
motionphoto: 23e2aeb5c6380112f69468d71f970fa7438e5ed1
move_to_background: 7e3467dd2a1d1013e98c9c1cb93fd53cd7ef9d84
motionphoto: 584b43031ead3060225cdff08fa49818879801d2
move_to_background: 155f7bfbd34d43ad847cb630d2d2d87c17199710
nanopb: fad817b59e0457d11a5dfbde799381cd727c1275
native_video_player: e363dd14f6a498ad8a8f7e6486a0db046ad19f13
native_video_player: b65c58951ede2f93d103a25366bdebca95081265
objective_c: 89e720c30d716b036faf9c9684022048eee1eee2
onnxruntime: f9b296392c96c42882be020a59dbeac6310d81b2
onnxruntime-c: a909204639a1f035f575127ac406f781ac797c9c
onnxruntime-objc: b6fab0f1787aa6f7190c2013f03037df4718bd8b
open_mail_app: 7314a609e88eed22d53671279e189af7a0ab0f11
open_mail_app: 06d5a4162866388a92b1df3deb96e56be20cf45c
OrderedSet: e539b66b644ff081c73a262d24ad552a69be3a94
package_info_plus: af8e2ca6888548050f16fa2f1938db7b5a5df499
path_provider_foundation: 080d55be775b7414fd5a5ef3ac137b97b097e564
@@ -494,23 +508,25 @@ SPEC CHECKSUMS:
photo_manager: d2fbcc0f2d82458700ee6256a15018210a81d413
privacy_screen: 3159a541f5d3a31bea916cfd4e58f9dc722b3fd4
PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47
receive_sharing_intent: 222384f00ffe7e952bbfabaa9e3967cb87e5fe00
SDWebImage: f84b0feeb08d2d11e6a9b843cb06d75ebf5b8868
receive_sharing_intent: f6a12b7e8f7ed745f61c982de8a65de88db44a44
screen_brightness_ios: 5ed898fa50fa82a26171c086ca5e28228f932576
SDWebImage: 73c6079366fea25fa4bb9640d5fb58f0893facd8
SDWebImageWebPCoder: e38c0a70396191361d60c092933e22c20d5b1380
Sentry: 0f9bc9adfc0b960e7f3bb5ec67e9a3d8193f3bdb
sentry_flutter: f4a0466dc8855998ffd59378ec33507c7dc32d7b
share_plus: 50da8cb520a8f0f65671c6c6a99b3617ed10a58a
Sentry: f8374b5415bc38dfb5645941b3ae31230fbeae57
sentry_flutter: 0a211008f52553ba5dd81ceb71f48d78f0f1f6ab
share_plus: 011d6fb4f9d2576b83179a3a5c5e323202cdabcf
shared_preferences_foundation: 9e1978ff2562383bd5676f64ec4e9aa8fa06a6f7
sqflite_darwin: 20b2a3a3b70e43edae938624ce550a3cbf66a3d0
sqlite3: fc1400008a9b3525f5914ed715a5d1af0b8f4983
sqlite3_flutter_libs: 3c323550ef3b928bc0aa9513c841e45a7d242832
sqflite_darwin: 44bb54cc302bff1fbe5752293aba1820b157cf1c
sqlite3: 0bb0e6389d824e40296f531b858a2a0b71c0d2fb
sqlite3_flutter_libs: 9379996d65aa23dcda7585a5b58766cebe0aa042
system_info_plus: 555ce7047fbbf29154726db942ae785c29211740
ua_client_hints: 92fe0d139619b73ec9fcb46cc7e079a26178f586
uni_links: f191d616c4db8750f74c72c988e79a83dd297fac
Toast: 1f5ea13423a1e6674c4abdac5be53587ae481c4e
ua_client_hints: 0b48eae1134283f5b131ee0871fa878377f07a01
uni_links: ed8c961e47ed9ce42b6d91e1de8049e38a4b3152
url_launcher_ios: 694010445543906933d732453a59da0a173ae33d
video_player_avfoundation: 2cef49524dd1f16c5300b9cd6efd9611ce03639b
video_thumbnail: 584ccfa55d8fd2f3d5507218b0a18d84c839c620
volume_controller: 3657a1f65bedb98fa41ff7dc5793537919f31b12
video_thumbnail: b637e0ad5f588ca9945f6e2c927f73a69a661140
volume_controller: ca1cde542ee70fad77d388f82e9616488110942b
wakelock_plus: 04623e3f525556020ebd4034310f20fe7fda8b49
PODFILE CHECKSUM: 20e086e6008977d43a3d40260f3f9bffcac748dd

View File

@@ -288,6 +288,7 @@
"${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework",
"${BUILT_PRODUCTS_DIR}/SDWebImageWebPCoder/SDWebImageWebPCoder.framework",
"${BUILT_PRODUCTS_DIR}/Sentry/Sentry.framework",
"${BUILT_PRODUCTS_DIR}/Toast/Toast.framework",
"${BUILT_PRODUCTS_DIR}/background_fetch/background_fetch.framework",
"${BUILT_PRODUCTS_DIR}/battery_info/battery_info.framework",
"${BUILT_PRODUCTS_DIR}/connectivity_plus/connectivity_plus.framework",
@@ -296,7 +297,7 @@
"${BUILT_PRODUCTS_DIR}/device_info_plus/device_info_plus.framework",
"${BUILT_PRODUCTS_DIR}/file_saver/file_saver.framework",
"${BUILT_PRODUCTS_DIR}/flutter_email_sender/flutter_email_sender.framework",
"${BUILT_PRODUCTS_DIR}/flutter_image_compress_common/flutter_image_compress_common.framework",
"${BUILT_PRODUCTS_DIR}/flutter_image_compress/flutter_image_compress.framework",
"${BUILT_PRODUCTS_DIR}/flutter_inappwebview_ios/flutter_inappwebview_ios.framework",
"${BUILT_PRODUCTS_DIR}/flutter_local_notifications/flutter_local_notifications.framework",
"${BUILT_PRODUCTS_DIR}/flutter_native_splash/flutter_native_splash.framework",
@@ -314,6 +315,7 @@
"${BUILT_PRODUCTS_DIR}/maps_launcher/maps_launcher.framework",
"${BUILT_PRODUCTS_DIR}/media_extension/media_extension.framework",
"${BUILT_PRODUCTS_DIR}/media_kit_libs_ios_video/media_kit_libs_ios_video.framework",
"${BUILT_PRODUCTS_DIR}/media_kit_native_event_loop/media_kit_native_event_loop.framework",
"${BUILT_PRODUCTS_DIR}/media_kit_video/media_kit_video.framework",
"${BUILT_PRODUCTS_DIR}/motion_sensors/motion_sensors.framework",
"${BUILT_PRODUCTS_DIR}/motionphoto/motionphoto.framework",
@@ -327,6 +329,7 @@
"${BUILT_PRODUCTS_DIR}/photo_manager/photo_manager.framework",
"${BUILT_PRODUCTS_DIR}/privacy_screen/privacy_screen.framework",
"${BUILT_PRODUCTS_DIR}/receive_sharing_intent/receive_sharing_intent.framework",
"${BUILT_PRODUCTS_DIR}/screen_brightness_ios/screen_brightness_ios.framework",
"${BUILT_PRODUCTS_DIR}/sentry_flutter/sentry_flutter.framework",
"${BUILT_PRODUCTS_DIR}/share_plus/share_plus.framework",
"${BUILT_PRODUCTS_DIR}/shared_preferences_foundation/shared_preferences_foundation.framework",
@@ -382,6 +385,7 @@
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImageWebPCoder.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Sentry.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Toast.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/background_fetch.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/battery_info.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/connectivity_plus.framework",
@@ -390,7 +394,7 @@
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/device_info_plus.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/file_saver.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_email_sender.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_image_compress_common.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_image_compress.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_inappwebview_ios.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_local_notifications.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_native_splash.framework",
@@ -408,6 +412,7 @@
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/maps_launcher.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/media_extension.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/media_kit_libs_ios_video.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/media_kit_native_event_loop.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/media_kit_video.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/motion_sensors.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/motionphoto.framework",
@@ -421,6 +426,7 @@
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/photo_manager.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/privacy_screen.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/receive_sharing_intent.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/screen_brightness_ios.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/sentry_flutter.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/share_plus.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/shared_preferences_foundation.framework",

View File

@@ -16,7 +16,7 @@ import "package:photos/l10n/l10n.dart";
import "package:photos/service_locator.dart";
import 'package:photos/services/app_lifecycle_service.dart';
import "package:photos/services/home_widget_service.dart";
import 'package:photos/services/sync/sync_service.dart';
import 'package:photos/services/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";

View File

@@ -13,7 +13,7 @@ import 'package:photos/core/error-reporting/super_logging.dart';
import 'package:photos/core/event_bus.dart';
import 'package:photos/db/collections_db.dart';
import 'package:photos/db/files_db.dart';
import "package:photos/db/memories_db.dart";
import 'package:photos/db/memories_db.dart';
import "package:photos/db/ml/db.dart";
import 'package:photos/db/trash_db.dart';
import 'package:photos/db/upload_locks_db.dart';
@@ -30,7 +30,7 @@ import 'package:photos/services/ignored_files_service.dart';
import "package:photos/services/machine_learning/face_ml/person/person_service.dart";
import 'package:photos/services/memories_service.dart';
import 'package:photos/services/search_service.dart';
import 'package:photos/services/sync/sync_service.dart';
import 'package:photos/services/sync_service.dart';
import 'package:photos/utils/file_uploader.dart';
import "package:photos/utils/lock_screen_settings.dart";
import 'package:photos/utils/validator_util.dart';

View File

@@ -113,5 +113,3 @@ final tempDirCleanUpInterval = kDebugMode
const kFilterChipHeight = 32.0;
const kMaxAppbarFilters = 14;
const kLivePhotoHashSeparator = ':';

View File

@@ -58,8 +58,6 @@ bool isHandledSyncError(Object errObj) {
class LockAlreadyAcquiredError extends Error {}
class LockFreedError extends Error{}
class UnauthorizedError extends Error {}
class RequestCancelledError extends Error {}

View File

@@ -1,4 +1,4 @@
import 'package:photos/utils/standalone/date_time.dart';
import 'package:photos/utils/date_time_util.dart';
class YearsData {
final List<YearData> yearsData = [];

View File

@@ -14,6 +14,7 @@ class FileUpdationDB {
static const tableName = 're_upload_tracker';
static const columnLocalID = 'local_id';
static const columnReason = 'reason';
static const livePhotoCheck = 'livePhotoCheck';
static const androidMissingGPS = 'androidMissingGPS';
static const modificationTimeUpdated = 'modificationTimeUpdated';

View File

@@ -6,7 +6,6 @@ import 'package:flutter/foundation.dart';
import 'package:logging/logging.dart';
import 'package:path/path.dart';
import 'package:path_provider/path_provider.dart';
import "package:photos/db/enum/conflict_algo.dart";
import "package:photos/extensions/stop_watch.dart";
import 'package:photos/models/backup_status.dart';
import 'package:photos/models/file/file.dart';
@@ -16,6 +15,8 @@ import 'package:photos/models/location/location.dart';
import "package:photos/models/metadata/common_keys.dart";
import "package:photos/services/filter/db_filters.dart";
import 'package:photos/utils/file_uploader_util.dart';
import "package:photos/utils/primitive_wrapper.dart";
import "package:photos/utils/sqlite_util.dart";
import 'package:sqlite_async/sqlite_async.dart';
class FilesDB {
@@ -467,61 +468,72 @@ class FilesDB {
final startTime = DateTime.now();
final db = await sqliteAsyncDB;
final withIdParams = <List<Object?>>[];
const withIdColumnNames = _columnNames;
final withoutIdParams = <List<Object?>>[];
final withoutIdColumns =
_columnNames.where((column) => column != columnGeneratedID).toList();
///Strong batch counter in an object so that it gets passed by reference
///Primitives are passed by value
final genIdNotNullbatchCounter = PrimitiveWrapper(0);
final genIdNullbatchCounter = PrimitiveWrapper(0);
final genIdNullParameterSets = <List<Object?>>[];
final genIdNotNullParameterSets = <List<Object?>>[];
// Sort files into appropriate parameter sets
for (final file in files) {
if (file.generatedID == null) {
withoutIdParams.add(_getParameterSetForFile(file));
final genIdNullcolumnNames =
_columnNames.where((element) => element != columnGeneratedID);
if (withoutIdParams.length == 400) {
await _insertBatch(
conflictAlgorithm,
withoutIdColumns,
db,
withoutIdParams,
);
withoutIdParams.clear();
}
for (EnteFile file in files) {
final fileGenIdIsNull = file.generatedID == null;
if (!fileGenIdIsNull) {
await _batchAndInsertFile(
file,
conflictAlgorithm,
db,
genIdNotNullParameterSets,
genIdNotNullbatchCounter,
isGenIdNull: fileGenIdIsNull,
);
} else {
withIdParams.add(_getParameterSetForFile(file));
if (withIdParams.length == 400) {
await _insertBatch(
conflictAlgorithm,
withIdColumnNames,
db,
withIdParams,
);
withIdParams.clear();
}
await _batchAndInsertFile(
file,
conflictAlgorithm,
db,
genIdNullParameterSets,
genIdNullbatchCounter,
isGenIdNull: fileGenIdIsNull,
);
}
}
// Insert any remaining files
if (withIdParams.isNotEmpty) {
if (genIdNotNullbatchCounter.value > 0) {
await _insertBatch(
conflictAlgorithm,
withIdColumnNames,
_columnNames,
db,
withIdParams,
genIdNotNullParameterSets,
);
genIdNotNullbatchCounter.value = 0;
genIdNotNullParameterSets.clear();
}
if (genIdNullbatchCounter.value > 0) {
await _insertBatch(
conflictAlgorithm,
genIdNullcolumnNames,
db,
genIdNullParameterSets,
);
genIdNullbatchCounter.value = 0;
genIdNullParameterSets.clear();
}
if (withoutIdParams.isNotEmpty) {
await _insertBatch(
conflictAlgorithm,
withoutIdColumns,
db,
withoutIdParams,
);
}
final duration = DateTime.now().difference(startTime);
final endTime = DateTime.now();
final duration = Duration(
microseconds:
endTime.microsecondsSinceEpoch - startTime.microsecondsSinceEpoch,
);
_logger.info(
"Batch insert of ${files.length} took ${duration.inMilliseconds}ms.",
"Batch insert of " +
files.length.toString() +
" took " +
duration.inMilliseconds.toString() +
"ms.",
);
}
@@ -1260,26 +1272,15 @@ class FilesDB {
);
}
Future<List<EnteFile>> getLocalFiles(
List<String> localIDs, {
bool dedupeByLocalID = false,
}) async {
late final String query;
Future<List<EnteFile>> getLocalFiles(List<String> localIDs) async {
final inParam = localIDs.map((id) => "'$id'").join(',');
final db = await instance.sqliteAsyncDB;
if (dedupeByLocalID) {
query = '''
SELECT * FROM $filesTable
WHERE $columnLocalID IN ($inParam)
GROUP BY $columnLocalID;
''';
} else {
query = '''
final results = await db.getAll(
'''
SELECT * FROM $filesTable
WHERE $columnLocalID IN ($inParam);
''';
}
final results = await db.getAll(query);
''',
);
return convertToFiles(results);
}
@@ -1942,6 +1943,28 @@ class FilesDB {
return values;
}
Future<void> _batchAndInsertFile(
EnteFile file,
SqliteAsyncConflictAlgorithm conflictAlgorithm,
SqliteDatabase db,
List<List<Object?>> parameterSets,
PrimitiveWrapper batchCounter, {
required bool isGenIdNull,
}) async {
parameterSets.add(_getParameterSetForFile(file));
batchCounter.value++;
final columnNames = isGenIdNull
? _columnNames.where((column) => column != columnGeneratedID)
: _columnNames;
if (batchCounter.value == 400) {
_logger.info("Inserting batch with genIdNull: $isGenIdNull");
await _insertBatch(conflictAlgorithm, columnNames, db, parameterSets);
batchCounter.value = 0;
parameterSets.clear();
}
}
Future<void> _insertBatch(
SqliteAsyncConflictAlgorithm conflictAlgorithm,
Iterable<String> columnNames,

View File

@@ -3,7 +3,7 @@ import 'dart:io';
import 'package:path/path.dart';
import 'package:path_provider/path_provider.dart';
import 'package:photos/models/memories/memory.dart';
import 'package:photos/models/memory.dart';
import 'package:sqflite/sqflite.dart';
class MemoriesDB {

View File

@@ -108,6 +108,9 @@ abstract class IMLDataDB<T> {
Future<List<EmbeddingVector>> getAllClipVectors();
Future<Map<int, int>> clipIndexedFileWithVersion();
Future<Map<int, EmbeddingVector>> getClipVectorsForFileIDs(
Iterable<int> fileIDs,
);
Future<int> getClipIndexedFileCount({int minimumMlVersion});
Future<void> putClip(List<ClipEmbedding> embeddings);
Future<void> deleteClipEmbeddings(List<T> fileIDs);

View File

@@ -1196,6 +1196,22 @@ class MLDataDB extends IMLDataDB<int> {
return _convertToVectors(results);
}
@override
Future<Map<int, EmbeddingVector>> getClipVectorsForFileIDs(
Iterable<int> fileIDs,
) async {
final db = await MLDataDB.instance.asyncDB;
final results = await db.getAll(
'SELECT * FROM $clipTable WHERE $fileIDColumn IN (${fileIDs.join(", ")})',
);
final Map<int, EmbeddingVector> embeddings = {};
for (final result in results) {
final embedding = _getVectorFromRow(result);
embeddings[embedding.fileID] = embedding;
}
return embeddings;
}
// Get indexed FileIDs
@override
Future<Map<int, int>> clipIndexedFileWithVersion() async {

View File

@@ -101,6 +101,20 @@ class TrashDB {
await db.delete(tableName);
}
// getRecentlyTrashedFile returns the file which was trashed recently
Future<TrashFile?> getRecentlyTrashedFile() async {
final db = await instance.database;
final rows = await db.query(
tableName,
orderBy: '$columnTrashDeleteBy DESC',
limit: 1,
);
if (rows.isEmpty) {
return null;
}
return _getTrashFromRow(rows[0]);
}
Future<int> count() async {
final db = await instance.database;
final count = Sqflite.firstIntValue(
@@ -142,6 +156,15 @@ class TrashDB {
);
}
Future<int> insert(TrashFile trash) async {
final db = await instance.database;
return db.insert(
tableName,
_getRowForTrash(trash),
conflictAlgorithm: ConflictAlgorithm.replace,
);
}
Future<int> delete(List<int> uploadedFileIDs) async {
final db = await instance.database;
return db.delete(

View File

@@ -45,14 +45,6 @@ class UploadLocksDB {
columnPartStatus: "part_status",
);
static const _streamUploadErrorTable = (
table: "stream_upload_error",
columnUploadedFileID: "uploaded_file_id",
columnErrorMessage: "error_message",
columnLastAttemptedAt: "last_attempted_at",
columnCreatedAt: "created_at",
);
static final initializationScript = [
..._createUploadLocksTable(),
];
@@ -126,14 +118,6 @@ class UploadLocksDB {
PRIMARY KEY (${_partsTable.columnObjectKey}, ${_partsTable.columnPartNumber})
)
''',
'''
CREATE TABLE IF NOT EXISTS ${_streamUploadErrorTable.table} (
${_streamUploadErrorTable.columnUploadedFileID} INTEGER PRIMARY KEY,
${_streamUploadErrorTable.columnErrorMessage} TEXT NOT NULL,
${_streamUploadErrorTable.columnLastAttemptedAt} INTEGER NOT NULL,
${_streamUploadErrorTable.columnCreatedAt} INTEGER DEFAULT CURRENT_TIMESTAMP NOT NULL
)
''',
];
}
@@ -307,68 +291,6 @@ class UploadLocksDB {
);
}
Future<void> appendStreamEntry(
int uploadedFileID,
String errorMessage,
) async {
final db = await UploadLocksDB.instance.database;
await db.insert(
_streamUploadErrorTable.table,
{
_streamUploadErrorTable.columnUploadedFileID: uploadedFileID,
_streamUploadErrorTable.columnErrorMessage: errorMessage,
_streamUploadErrorTable.columnLastAttemptedAt:
DateTime.now().millisecondsSinceEpoch,
},
conflictAlgorithm: ConflictAlgorithm.replace,
);
}
Future<void> updateStreamStatus(
int uploadedFileID,
String errorMessage,
) async {
final db = await instance.database;
await db.update(
_streamUploadErrorTable.table,
{
_streamUploadErrorTable.columnErrorMessage: errorMessage,
_streamUploadErrorTable.columnLastAttemptedAt:
DateTime.now().millisecondsSinceEpoch,
},
where: '${_streamUploadErrorTable.columnUploadedFileID} = ?',
whereArgs: [uploadedFileID],
);
}
Future<int> deleteStreamUploadErrorEntry(int uploadedFileID) async {
final db = await instance.database;
return await db.delete(
_streamUploadErrorTable.table,
where: '${_streamUploadErrorTable.columnUploadedFileID} = ?',
whereArgs: [uploadedFileID],
);
}
Future<Map<int, String>> getStreamUploadError() {
return instance.database.then((db) async {
final rows = await db.query(
_streamUploadErrorTable.table,
columns: [
_streamUploadErrorTable.columnUploadedFileID,
_streamUploadErrorTable.columnErrorMessage,
],
);
final map = <int, String>{};
for (final row in rows) {
map[row[_streamUploadErrorTable.columnUploadedFileID] as int] =
row[_streamUploadErrorTable.columnErrorMessage] as String;
}
return map;
});
}
Future<void> createTrackUploadsEntry(
String localId,
String fileHash,

View File

@@ -23,9 +23,9 @@ import "package:photos/ui/components/models/button_type.dart";
import "package:photos/ui/components/notification_widget.dart";
import 'package:photos/ui/components/title_bar_title_widget.dart';
import 'package:photos/ui/components/title_bar_widget.dart';
import "package:photos/ui/notification/toast.dart";
import "package:photos/ui/sharing/user_avator_widget.dart";
import "package:photos/utils/navigation_util.dart";
import "package:photos/utils/toast_util.dart";
class EmergencyPage extends StatefulWidget {
const EmergencyPage({

View File

@@ -13,7 +13,7 @@ import "package:photos/generated/l10n.dart";
import "package:photos/models/api/user/key_attributes.dart";
import "package:photos/models/api/user/set_keys_request.dart";
import "package:photos/models/api/user/srp.dart";
import "package:photos/services/account/user_service.dart";
import "package:photos/services/user_service.dart";
import "package:photos/ui/common/user_dialogs.dart";
import "package:photos/utils/dialog_util.dart";
import "package:photos/utils/email_util.dart";

View File

@@ -17,9 +17,9 @@ import "package:photos/ui/components/menu_item_widget/menu_item_widget.dart";
import "package:photos/ui/components/menu_section_title.dart";
import "package:photos/ui/components/models/button_type.dart";
import "package:photos/ui/components/title_bar_title_widget.dart";
import "package:photos/utils/date_time_util.dart";
import "package:photos/utils/dialog_util.dart";
import "package:photos/utils/navigation_util.dart";
import "package:photos/utils/standalone/date_time.dart";
// OtherContactPage is used to start recovery process for other user's account
// Based on the state of the contact & recovery session, it will show

View File

@@ -11,8 +11,8 @@ import "package:photos/generated/l10n.dart";
import "package:photos/models/api/user/key_attributes.dart";
import "package:photos/models/api/user/set_keys_request.dart";
import 'package:photos/ui/common/dynamic_fab.dart';
import 'package:photos/ui/notification/toast.dart';
import 'package:photos/utils/dialog_util.dart';
import 'package:photos/utils/toast_util.dart';
class RecoverOthersAccount extends StatefulWidget {
final String recoveryKey;

View File

@@ -6,8 +6,8 @@ import "package:photos/emergency/emergency_service.dart";
import "package:photos/emergency/model.dart";
import "package:photos/generated/l10n.dart";
import "package:photos/models/api/collection/user.dart";
import "package:photos/services/account/user_service.dart";
import 'package:photos/services/collections_service.dart';
import "package:photos/services/user_service.dart";
import 'package:photos/theme/ente_theme.dart';
import 'package:photos/ui/actions/collection/collection_sharing_actions.dart';
import 'package:photos/ui/components/buttons/button_widget.dart';

View File

@@ -1,7 +0,0 @@
import "package:photos/events/event.dart";
class SeekbarTriggeredEvent extends Event {
final int position;
SeekbarTriggeredEvent({required this.position});
}

View File

@@ -1,10 +0,0 @@
import "package:photos/events/event.dart";
class StreamSwitchedEvent extends Event {
final bool selectedPreview;
final PlayerType type;
StreamSwitchedEvent(this.selectedPreview, this.type);
}
enum PlayerType { mediaKit, nativeVideoPlayer }

View File

@@ -45,6 +45,8 @@ class MessageLookup extends MessageLookupByLibrary {
MessageLookupByLibrary.simpleMessage("ما من مفتاح استرداد؟"),
"noRecoveryKeyNoDecryption": MessageLookupByLibrary.simpleMessage(
"لا يمكن فك تشفير بياناتك دون كلمة المرور أو مفتاح الاسترداد بسبب طبيعة بروتوكول التشفير الخاص بنا من النهاية إلى النهاية"),
"orPickFromYourContacts":
MessageLookupByLibrary.simpleMessage("or pick from your contacts"),
"recoverButton": MessageLookupByLibrary.simpleMessage("استرداد"),
"recoverySuccessful":
MessageLookupByLibrary.simpleMessage("نجح الاسترداد!"),

View File

@@ -175,6 +175,8 @@ class MessageLookup extends MessageLookupByLibrary {
"notifications": MessageLookupByLibrary.simpleMessage("Апавяшчэнні"),
"ok": MessageLookupByLibrary.simpleMessage("Добра"),
"oops": MessageLookupByLibrary.simpleMessage("Вой"),
"orPickFromYourContacts":
MessageLookupByLibrary.simpleMessage("or pick from your contacts"),
"password": MessageLookupByLibrary.simpleMessage("Пароль"),
"passwordChangedSuccessfully":
MessageLookupByLibrary.simpleMessage("Пароль паспяхова зменены"),

View File

@@ -21,5 +21,8 @@ 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>{
"orPickFromYourContacts":
MessageLookupByLibrary.simpleMessage("or pick from your contacts")
};
}

View File

@@ -21,5 +21,8 @@ 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>{
"orPickFromYourContacts":
MessageLookupByLibrary.simpleMessage("or pick from your contacts")
};
}

View File

@@ -26,6 +26,8 @@ class MessageLookup extends MessageLookupByLibrary {
"Jaký je váš hlavní důvod, proč mažete svůj účet?"),
"checkInboxAndSpamFolder": MessageLookupByLibrary.simpleMessage(
"Zkontrolujte prosím svou doručenou poštu (a spam) pro dokončení ověření"),
"incorrectRecoveryKeyBody": MessageLookupByLibrary.simpleMessage("")
"incorrectRecoveryKeyBody": MessageLookupByLibrary.simpleMessage(""),
"orPickFromYourContacts":
MessageLookupByLibrary.simpleMessage("or pick from your contacts")
};
}

View File

@@ -241,6 +241,8 @@ class MessageLookup extends MessageLookupByLibrary {
"oops": MessageLookupByLibrary.simpleMessage("Ups"),
"oopsSomethingWentWrong":
MessageLookupByLibrary.simpleMessage("Ups, noget gik galt"),
"orPickFromYourContacts":
MessageLookupByLibrary.simpleMessage("or pick from your contacts"),
"password": MessageLookupByLibrary.simpleMessage("Adgangskode"),
"passwordChangedSuccessfully": MessageLookupByLibrary.simpleMessage(
"Adgangskoden er blevet ændret"),

File diff suppressed because it is too large Load Diff

View File

@@ -23,6 +23,8 @@ class MessageLookup extends MessageLookupByLibrary {
final messages = _notInlinedMessages(_notInlinedMessages);
static Map<String, Function> _notInlinedMessages(_) => <String, Function>{
"enterYourEmailAddress": MessageLookupByLibrary.simpleMessage(
"Εισάγετε την διεύθυνση ηλ. ταχυδρομείου σας")
"Εισάγετε την διεύθυνση ηλ. ταχυδρομείου σας"),
"orPickFromYourContacts":
MessageLookupByLibrary.simpleMessage("or pick from your contacts")
};
}

View File

@@ -20,258 +20,258 @@ typedef String MessageIfAbsent(String messageStr, List<dynamic> args);
class MessageLookup extends MessageLookupByLibrary {
String get localeName => 'en';
static String m9(title) => "${title} (Me)";
static String m89(title) => "${title} (Me)";
static String m10(count) =>
static String m9(count) =>
"${Intl.plural(count, zero: 'Add collaborator', one: 'Add collaborator', other: 'Add collaborators')}";
static String m11(count) =>
static String m10(count) =>
"${Intl.plural(count, one: 'Add item', other: 'Add items')}";
static String m12(storageAmount, endDate) =>
static String m11(storageAmount, endDate) =>
"Your ${storageAmount} add-on is valid till ${endDate}";
static String m13(count) =>
static String m12(count) =>
"${Intl.plural(count, zero: 'Add viewer', one: 'Add viewer', other: 'Add viewers')}";
static String m14(emailOrName) => "Added by ${emailOrName}";
static String m13(emailOrName) => "Added by ${emailOrName}";
static String m15(albumName) => "Added successfully to ${albumName}";
static String m14(albumName) => "Added successfully to ${albumName}";
static String m16(count) =>
static String m15(count) =>
"${Intl.plural(count, zero: 'No Participants', one: '1 Participant', other: '${count} Participants')}";
static String m17(versionValue) => "Version: ${versionValue}";
static String m16(versionValue) => "Version: ${versionValue}";
static String m18(freeAmount, storageUnit) =>
static String m17(freeAmount, storageUnit) =>
"${freeAmount} ${storageUnit} free";
static String m19(paymentProvider) =>
static String m18(paymentProvider) =>
"Please cancel your existing subscription from ${paymentProvider} first";
static String m3(user) =>
"${user} will not be able to add more photos to this album\n\nThey will still be able to remove existing photos added by them";
static String m20(isFamilyMember, storageAmountInGb) =>
static String m19(isFamilyMember, storageAmountInGb) =>
"${Intl.select(isFamilyMember, {
'true': 'Your family has claimed ${storageAmountInGb} GB so far',
'false': 'You have claimed ${storageAmountInGb} GB so far',
'other': 'You have claimed ${storageAmountInGb} GB so far!',
})}";
static String m21(albumName) => "Collaborative link created for ${albumName}";
static String m20(albumName) => "Collaborative link created for ${albumName}";
static String m22(count) =>
static String m21(count) =>
"${Intl.plural(count, zero: 'Added 0 collaborator', one: 'Added 1 collaborator', other: 'Added ${count} collaborators')}";
static String m23(email, numOfDays) =>
static String m22(email, numOfDays) =>
"You are about to add ${email} as a trusted contact. They will be able to recover your account if you are absent for ${numOfDays} days.";
static String m24(familyAdminEmail) =>
static String m23(familyAdminEmail) =>
"Please contact <green>${familyAdminEmail}</green> to manage your subscription";
static String m25(provider) =>
static String m24(provider) =>
"Please contact us at support@ente.io to manage your ${provider} subscription.";
static String m26(endpoint) => "Connected to ${endpoint}";
static String m25(endpoint) => "Connected to ${endpoint}";
static String m27(count) =>
static String m26(count) =>
"${Intl.plural(count, one: 'Delete ${count} item', other: 'Delete ${count} items')}";
static String m28(currentlyDeleting, totalCount) =>
static String m27(currentlyDeleting, totalCount) =>
"Deleting ${currentlyDeleting} / ${totalCount}";
static String m29(albumName) =>
static String m28(albumName) =>
"This will remove the public link for accessing \"${albumName}\".";
static String m30(supportEmail) =>
static String m29(supportEmail) =>
"Please drop an email to ${supportEmail} from your registered email address";
static String m31(count, storageSaved) =>
static String m30(count, storageSaved) =>
"You have cleaned up ${Intl.plural(count, one: '${count} duplicate file', other: '${count} duplicate files')}, saving (${storageSaved}!)";
static String m32(count, formattedSize) =>
static String m31(count, formattedSize) =>
"${count} files, ${formattedSize} each";
static String m33(newEmail) => "Email changed to ${newEmail}";
static String m32(newEmail) => "Email changed to ${newEmail}";
static String m34(email) => "${email} does not have an Ente account.";
static String m90(email) => "${email} does not have an Ente account.";
static String m35(email) =>
static String m33(email) =>
"${email} does not have an Ente account.\n\nSend them an invite to share photos.";
static String m36(text) => "Extra photos found for ${text}";
static String m34(text) => "Extra photos found for ${text}";
static String m37(count, formattedNumber) =>
static String m35(count, formattedNumber) =>
"${Intl.plural(count, one: '1 file', other: '${formattedNumber} files')} on this device have been backed up safely";
static String m38(count, formattedNumber) =>
static String m36(count, formattedNumber) =>
"${Intl.plural(count, one: '1 file', other: '${formattedNumber} files')} in this album has been backed up safely";
static String m4(storageAmountInGB) =>
"${storageAmountInGB} GB each time someone signs up for a paid plan and applies your code";
static String m39(endDate) => "Free trial valid till ${endDate}";
static String m37(endDate) => "Free trial valid till ${endDate}";
static String m40(count) =>
static String m38(count) =>
"You can still access ${Intl.plural(count, one: 'it', other: 'them')} on Ente as long as you have an active subscription";
static String m41(sizeInMBorGB) => "Free up ${sizeInMBorGB}";
static String m39(sizeInMBorGB) => "Free up ${sizeInMBorGB}";
static String m42(count, formattedSize) =>
static String m40(count, formattedSize) =>
"${Intl.plural(count, one: 'It can be deleted from the device to free up ${formattedSize}', other: 'They can be deleted from the device to free up ${formattedSize}')}";
static String m43(currentlyProcessing, totalCount) =>
static String m41(currentlyProcessing, totalCount) =>
"Processing ${currentlyProcessing} / ${totalCount}";
static String m44(count) =>
static String m42(count) =>
"${Intl.plural(count, one: '${count} item', other: '${count} items')}";
static String m45(email) =>
static String m43(email) =>
"${email} has invited you to be a trusted contact";
static String m46(expiryTime) => "Link will expire on ${expiryTime}";
static String m44(expiryTime) => "Link will expire on ${expiryTime}";
static String m47(email) => "Link person to ${email}";
static String m91(email) => "Link person to ${email}";
static String m48(personName, email) =>
static String m92(personName, email) =>
"This will link ${personName} to ${email}";
static String m5(count, formattedCount) =>
"${Intl.plural(count, zero: 'no memories', one: '${formattedCount} memory', other: '${formattedCount} memories')}";
static String m49(count) =>
static String m45(count) =>
"${Intl.plural(count, one: 'Move item', other: 'Move items')}";
static String m50(albumName) => "Moved successfully to ${albumName}";
static String m46(albumName) => "Moved successfully to ${albumName}";
static String m51(personName) => "No suggestions for ${personName}";
static String m47(personName) => "No suggestions for ${personName}";
static String m52(name) => "Not ${name}?";
static String m48(name) => "Not ${name}?";
static String m53(familyAdminEmail) =>
static String m49(familyAdminEmail) =>
"Please contact ${familyAdminEmail} to change your code.";
static String m0(passwordStrengthValue) =>
"Password strength: ${passwordStrengthValue}";
static String m54(providerName) =>
static String m50(providerName) =>
"Please talk to ${providerName} support if you were charged";
static String m55(count) =>
static String m51(count) =>
"${Intl.plural(count, zero: '0 photo', one: '1 photo', other: '${count} photos')}";
static String m56(endDate) =>
static String m52(endDate) =>
"Free trial valid till ${endDate}.\nYou can choose a paid plan afterwards.";
static String m57(toEmail) => "Please email us at ${toEmail}";
static String m53(toEmail) => "Please email us at ${toEmail}";
static String m58(toEmail) => "Please send the logs to \n${toEmail}";
static String m54(toEmail) => "Please send the logs to \n${toEmail}";
static String m59(folderName) => "Processing ${folderName}...";
static String m55(folderName) => "Processing ${folderName}...";
static String m60(storeName) => "Rate us on ${storeName}";
static String m56(storeName) => "Rate us on ${storeName}";
static String m61(name) => "Reassigned you to ${name}";
static String m93(name) => "Reassigned you to ${name}";
static String m62(days, email) =>
static String m57(days, email) =>
"You can access the account after ${days} days. A notification will be sent to ${email}.";
static String m63(email) =>
static String m58(email) =>
"You can now recover ${email}\'s account by setting a new password.";
static String m64(email) => "${email} is trying to recover your account.";
static String m59(email) => "${email} is trying to recover your account.";
static String m65(storageInGB) =>
static String m60(storageInGB) =>
"3. Both of you get ${storageInGB} GB* free";
static String m66(userEmail) =>
static String m61(userEmail) =>
"${userEmail} will be removed from this shared album\n\nAny photos added by them will also be removed from the album";
static String m67(endDate) => "Subscription renews on ${endDate}";
static String m62(endDate) => "Subscription renews on ${endDate}";
static String m68(count) =>
static String m63(count) =>
"${Intl.plural(count, one: '${count} result found', other: '${count} results found')}";
static String m69(snapshotLength, searchLength) =>
static String m64(snapshotLength, searchLength) =>
"Sections length mismatch: ${snapshotLength} != ${searchLength}";
static String m6(count) => "${count} selected";
static String m70(count, yourCount) =>
static String m65(count, yourCount) =>
"${count} selected (${yourCount} yours)";
static String m71(verificationID) =>
static String m66(verificationID) =>
"Here\'s my verification ID: ${verificationID} for ente.io.";
static String m7(verificationID) =>
"Hey, can you confirm that this is your ente.io verification ID: ${verificationID}";
static String m72(referralCode, referralStorageInGB) =>
static String m67(referralCode, referralStorageInGB) =>
"Ente referral code: ${referralCode} \n\nApply it in Settings → General → Referrals to get ${referralStorageInGB} GB free after you signup for a paid plan\n\nhttps://ente.io";
static String m73(numberOfPeople) =>
static String m68(numberOfPeople) =>
"${Intl.plural(numberOfPeople, zero: 'Share with specific people', one: 'Shared with 1 person', other: 'Shared with ${numberOfPeople} people')}";
static String m74(emailIDs) => "Shared with ${emailIDs}";
static String m69(emailIDs) => "Shared with ${emailIDs}";
static String m75(fileType) =>
static String m70(fileType) =>
"This ${fileType} will be deleted from your device.";
static String m76(fileType) =>
static String m71(fileType) =>
"This ${fileType} is in both Ente and your device.";
static String m77(fileType) => "This ${fileType} will be deleted from Ente.";
static String m72(fileType) => "This ${fileType} will be deleted from Ente.";
static String m1(storageAmountInGB) => "${storageAmountInGB} GB";
static String m78(
static String m73(
usedAmount, usedStorageUnit, totalAmount, totalStorageUnit) =>
"${usedAmount} ${usedStorageUnit} of ${totalAmount} ${totalStorageUnit} used";
static String m79(id) =>
static String m74(id) =>
"Your ${id} is already linked to another Ente account.\nIf you would like to use your ${id} with this account, please contact our support\'\'";
static String m80(endDate) =>
static String m75(endDate) =>
"Your subscription will be cancelled on ${endDate}";
static String m81(completed, total) =>
static String m76(completed, total) =>
"${completed}/${total} memories preserved";
static String m82(ignoreReason) =>
static String m77(ignoreReason) =>
"Tap to upload, upload is currently ignored due to ${ignoreReason}";
static String m8(storageAmountInGB) =>
"They also get ${storageAmountInGB} GB";
static String m83(email) => "This is ${email}\'s Verification ID";
static String m78(email) => "This is ${email}\'s Verification ID";
static String m84(count) =>
static String m79(count) =>
"${Intl.plural(count, zero: 'Soon', one: '1 day', other: '${count} days')}";
static String m85(email) =>
static String m80(email) =>
"You have been invited to be a legacy contact by ${email}.";
static String m86(galleryType) =>
static String m81(galleryType) =>
"Type of gallery ${galleryType} is not supported for rename";
static String m87(ignoreReason) => "Upload is ignored due to ${ignoreReason}";
static String m82(ignoreReason) => "Upload is ignored due to ${ignoreReason}";
static String m88(count) => "Preserving ${count} memories...";
static String m83(count) => "Preserving ${count} memories...";
static String m89(endDate) => "Valid till ${endDate}";
static String m84(endDate) => "Valid till ${endDate}";
static String m90(email) => "Verify ${email}";
static String m85(email) => "Verify ${email}";
static String m91(count) =>
static String m86(count) =>
"${Intl.plural(count, zero: 'Added 0 viewer', one: 'Added 1 viewer', other: 'Added ${count} viewers')}";
static String m2(email) => "We have sent a mail to <green>${email}</green>";
static String m92(count) =>
static String m87(count) =>
"${Intl.plural(count, one: '${count} year ago', other: '${count} years ago')}";
static String m93(storageSaved) =>
static String m88(storageSaved) =>
"You have successfully freed up ${storageSaved}!";
final messages = _notInlinedMessages(_notInlinedMessages);
@@ -284,7 +284,7 @@ class MessageLookup extends MessageLookupByLibrary {
"account": MessageLookupByLibrary.simpleMessage("Account"),
"accountIsAlreadyConfigured": MessageLookupByLibrary.simpleMessage(
"Account is already configured."),
"accountOwnerPersonAppbarTitle": m9,
"accountOwnerPersonAppbarTitle": m89,
"accountWelcomeBack":
MessageLookupByLibrary.simpleMessage("Welcome back!"),
"ackPasswordLostWarning": MessageLookupByLibrary.simpleMessage(
@@ -296,11 +296,11 @@ class MessageLookup extends MessageLookupByLibrary {
"addANewEmail": MessageLookupByLibrary.simpleMessage("Add a new email"),
"addCollaborator":
MessageLookupByLibrary.simpleMessage("Add collaborator"),
"addCollaborators": m10,
"addCollaborators": m9,
"addFiles": MessageLookupByLibrary.simpleMessage("Add Files"),
"addFromDevice":
MessageLookupByLibrary.simpleMessage("Add from device"),
"addItem": m11,
"addItem": m10,
"addLocation": MessageLookupByLibrary.simpleMessage("Add location"),
"addLocationButton": MessageLookupByLibrary.simpleMessage("Add"),
"addMore": MessageLookupByLibrary.simpleMessage("Add more"),
@@ -311,7 +311,7 @@ class MessageLookup extends MessageLookupByLibrary {
"addNewPerson": MessageLookupByLibrary.simpleMessage("Add new person"),
"addOnPageSubtitle":
MessageLookupByLibrary.simpleMessage("Details of add-ons"),
"addOnValidTill": m12,
"addOnValidTill": m11,
"addOns": MessageLookupByLibrary.simpleMessage("Add-ons"),
"addPhotos": MessageLookupByLibrary.simpleMessage("Add photos"),
"addSelected": MessageLookupByLibrary.simpleMessage("Add selected"),
@@ -322,12 +322,12 @@ class MessageLookup extends MessageLookupByLibrary {
"addTrustedContact":
MessageLookupByLibrary.simpleMessage("Add Trusted Contact"),
"addViewer": MessageLookupByLibrary.simpleMessage("Add viewer"),
"addViewers": m13,
"addViewers": m12,
"addYourPhotosNow":
MessageLookupByLibrary.simpleMessage("Add your photos now"),
"addedAs": MessageLookupByLibrary.simpleMessage("Added as"),
"addedBy": m14,
"addedSuccessfullyTo": m15,
"addedBy": m13,
"addedSuccessfullyTo": m14,
"addingToFavorites":
MessageLookupByLibrary.simpleMessage("Adding to favorites..."),
"advanced": MessageLookupByLibrary.simpleMessage("Advanced"),
@@ -338,7 +338,7 @@ class MessageLookup extends MessageLookupByLibrary {
"after1Week": MessageLookupByLibrary.simpleMessage("After 1 week"),
"after1Year": MessageLookupByLibrary.simpleMessage("After 1 year"),
"albumOwner": MessageLookupByLibrary.simpleMessage("Owner"),
"albumParticipantsCount": m16,
"albumParticipantsCount": m15,
"albumTitle": MessageLookupByLibrary.simpleMessage("Album title"),
"albumUpdated": MessageLookupByLibrary.simpleMessage("Album updated"),
"albums": MessageLookupByLibrary.simpleMessage("Albums"),
@@ -384,7 +384,7 @@ class MessageLookup extends MessageLookupByLibrary {
"appLock": MessageLookupByLibrary.simpleMessage("App lock"),
"appLockDescriptions": MessageLookupByLibrary.simpleMessage(
"Choose between your device\'s default lock screen and a custom lock screen with a PIN or password."),
"appVersion": m17,
"appVersion": m16,
"appleId": MessageLookupByLibrary.simpleMessage("Apple ID"),
"apply": MessageLookupByLibrary.simpleMessage("Apply"),
"applyCodeTitle": MessageLookupByLibrary.simpleMessage("Apply code"),
@@ -466,7 +466,7 @@ class MessageLookup extends MessageLookupByLibrary {
"autoPairDesc": MessageLookupByLibrary.simpleMessage(
"Auto pair works only with devices that support Chromecast."),
"available": MessageLookupByLibrary.simpleMessage("Available"),
"availableStorageSpace": m18,
"availableStorageSpace": m17,
"backedUpFolders":
MessageLookupByLibrary.simpleMessage("Backed up folders"),
"backup": MessageLookupByLibrary.simpleMessage("Backup"),
@@ -503,7 +503,7 @@ class MessageLookup extends MessageLookupByLibrary {
MessageLookupByLibrary.simpleMessage("Cancel recovery"),
"cancelAccountRecoveryBody": MessageLookupByLibrary.simpleMessage(
"Are you sure you want to cancel recovery?"),
"cancelOtherSubscription": m19,
"cancelOtherSubscription": m18,
"cancelSubscription":
MessageLookupByLibrary.simpleMessage("Cancel subscription"),
"cannotAddMorePhotosAfterBecomingViewer": m3,
@@ -554,7 +554,7 @@ class MessageLookup extends MessageLookupByLibrary {
MessageLookupByLibrary.simpleMessage("Claim free storage"),
"claimMore": MessageLookupByLibrary.simpleMessage("Claim more!"),
"claimed": MessageLookupByLibrary.simpleMessage("Claimed"),
"claimedStorageSoFar": m20,
"claimedStorageSoFar": m19,
"cleanUncategorized":
MessageLookupByLibrary.simpleMessage("Clean Uncategorized"),
"cleanUncategorizedDescription": MessageLookupByLibrary.simpleMessage(
@@ -583,12 +583,12 @@ class MessageLookup extends MessageLookupByLibrary {
"Create a link to allow people to add and view photos in your shared album without needing an Ente app or account. Great for collecting event photos."),
"collaborativeLink":
MessageLookupByLibrary.simpleMessage("Collaborative link"),
"collaborativeLinkCreatedFor": m21,
"collaborativeLinkCreatedFor": m20,
"collaborator": MessageLookupByLibrary.simpleMessage("Collaborator"),
"collaboratorsCanAddPhotosAndVideosToTheSharedAlbum":
MessageLookupByLibrary.simpleMessage(
"Collaborators can add photos and videos to the shared album."),
"collaboratorsSuccessfullyAdded": m22,
"collaboratorsSuccessfullyAdded": m21,
"collageLayout": MessageLookupByLibrary.simpleMessage("Layout"),
"collageSaved":
MessageLookupByLibrary.simpleMessage("Collage saved to gallery"),
@@ -605,7 +605,7 @@ class MessageLookup extends MessageLookupByLibrary {
"Are you sure you want to disable two-factor authentication?"),
"confirmAccountDeletion":
MessageLookupByLibrary.simpleMessage("Confirm Account Deletion"),
"confirmAddingTrustedContact": m23,
"confirmAddingTrustedContact": m22,
"confirmDeletePrompt": MessageLookupByLibrary.simpleMessage(
"Yes, I want to permanently delete this account and its data across all apps."),
"confirmPassword":
@@ -618,10 +618,10 @@ class MessageLookup extends MessageLookupByLibrary {
MessageLookupByLibrary.simpleMessage("Confirm your recovery key"),
"connectToDevice":
MessageLookupByLibrary.simpleMessage("Connect to device"),
"contactFamilyAdmin": m24,
"contactFamilyAdmin": m23,
"contactSupport":
MessageLookupByLibrary.simpleMessage("Contact support"),
"contactToManageSubscription": m25,
"contactToManageSubscription": m24,
"contacts": MessageLookupByLibrary.simpleMessage("Contacts"),
"contents": MessageLookupByLibrary.simpleMessage("Contents"),
"continueLabel": MessageLookupByLibrary.simpleMessage("Continue"),
@@ -667,7 +667,7 @@ class MessageLookup extends MessageLookupByLibrary {
"currentlyRunning":
MessageLookupByLibrary.simpleMessage("currently running"),
"custom": MessageLookupByLibrary.simpleMessage("Custom"),
"customEndpoint": m26,
"customEndpoint": m25,
"darkTheme": MessageLookupByLibrary.simpleMessage("Dark"),
"dayToday": MessageLookupByLibrary.simpleMessage("Today"),
"dayYesterday": MessageLookupByLibrary.simpleMessage("Yesterday"),
@@ -704,11 +704,11 @@ class MessageLookup extends MessageLookupByLibrary {
MessageLookupByLibrary.simpleMessage("Delete from device"),
"deleteFromEnte":
MessageLookupByLibrary.simpleMessage("Delete from Ente"),
"deleteItemCount": m27,
"deleteItemCount": m26,
"deleteLocation":
MessageLookupByLibrary.simpleMessage("Delete location"),
"deletePhotos": MessageLookupByLibrary.simpleMessage("Delete photos"),
"deleteProgress": m28,
"deleteProgress": m27,
"deleteReason1": MessageLookupByLibrary.simpleMessage(
"Its missing a key feature that I need"),
"deleteReason2": MessageLookupByLibrary.simpleMessage(
@@ -747,7 +747,7 @@ class MessageLookup extends MessageLookupByLibrary {
"Viewers can still take screenshots or save a copy of your photos using external tools"),
"disableDownloadWarningTitle":
MessageLookupByLibrary.simpleMessage("Please note"),
"disableLinkMessage": m29,
"disableLinkMessage": m28,
"disableTwofactor":
MessageLookupByLibrary.simpleMessage("Disable two-factor"),
"disablingTwofactorAuthentication":
@@ -789,9 +789,9 @@ class MessageLookup extends MessageLookupByLibrary {
"downloadFailed":
MessageLookupByLibrary.simpleMessage("Download failed"),
"downloading": MessageLookupByLibrary.simpleMessage("Downloading..."),
"dropSupportEmail": m30,
"duplicateFileCountWithStorageSaved": m31,
"duplicateItemsGroup": m32,
"dropSupportEmail": m29,
"duplicateFileCountWithStorageSaved": m30,
"duplicateItemsGroup": m31,
"edit": MessageLookupByLibrary.simpleMessage("Edit"),
"editLocation": MessageLookupByLibrary.simpleMessage("Edit location"),
"editLocationTagTitle":
@@ -805,9 +805,9 @@ class MessageLookup extends MessageLookupByLibrary {
"email": MessageLookupByLibrary.simpleMessage("Email"),
"emailAlreadyRegistered":
MessageLookupByLibrary.simpleMessage("Email already registered."),
"emailChangedTo": m33,
"emailDoesNotHaveEnteAccount": m34,
"emailNoEnteAccount": m35,
"emailChangedTo": m32,
"emailDoesNotHaveEnteAccount": m90,
"emailNoEnteAccount": m33,
"emailNotRegistered":
MessageLookupByLibrary.simpleMessage("Email not registered."),
"emailVerificationToggle":
@@ -888,7 +888,7 @@ class MessageLookup extends MessageLookupByLibrary {
MessageLookupByLibrary.simpleMessage("Export your data"),
"extraPhotosFound":
MessageLookupByLibrary.simpleMessage("Extra photos found"),
"extraPhotosFoundFor": m36,
"extraPhotosFoundFor": m34,
"faceNotClusteredYet": MessageLookupByLibrary.simpleMessage(
"Face not clustered yet, please come back later"),
"faceRecognition":
@@ -938,8 +938,8 @@ class MessageLookup extends MessageLookupByLibrary {
"fileTypes": MessageLookupByLibrary.simpleMessage("File types"),
"fileTypesAndNames":
MessageLookupByLibrary.simpleMessage("File types and names"),
"filesBackedUpFromDevice": m37,
"filesBackedUpInAlbum": m38,
"filesBackedUpFromDevice": m35,
"filesBackedUpInAlbum": m36,
"filesDeleted": MessageLookupByLibrary.simpleMessage("Files deleted"),
"filesSavedToGallery":
MessageLookupByLibrary.simpleMessage("Files saved to gallery"),
@@ -959,22 +959,22 @@ class MessageLookup extends MessageLookupByLibrary {
"freeStorageUsable":
MessageLookupByLibrary.simpleMessage("Free storage usable"),
"freeTrial": MessageLookupByLibrary.simpleMessage("Free trial"),
"freeTrialValidTill": m39,
"freeUpAccessPostDelete": m40,
"freeUpAmount": m41,
"freeTrialValidTill": m37,
"freeUpAccessPostDelete": m38,
"freeUpAmount": m39,
"freeUpDeviceSpace":
MessageLookupByLibrary.simpleMessage("Free up device space"),
"freeUpDeviceSpaceDesc": MessageLookupByLibrary.simpleMessage(
"Save space on your device by clearing files that have been already backed up."),
"freeUpSpace": MessageLookupByLibrary.simpleMessage("Free up space"),
"freeUpSpaceSaving": m42,
"freeUpSpaceSaving": m40,
"gallery": MessageLookupByLibrary.simpleMessage("Gallery"),
"galleryMemoryLimitInfo": MessageLookupByLibrary.simpleMessage(
"Up to 1000 memories shown in gallery"),
"general": MessageLookupByLibrary.simpleMessage("General"),
"generatingEncryptionKeys": MessageLookupByLibrary.simpleMessage(
"Generating encryption keys..."),
"genericProgress": m43,
"genericProgress": m41,
"goToSettings": MessageLookupByLibrary.simpleMessage("Go to settings"),
"googlePlayId": MessageLookupByLibrary.simpleMessage("Google Play ID"),
"grantFullAccessPrompt": MessageLookupByLibrary.simpleMessage(
@@ -1055,7 +1055,7 @@ class MessageLookup extends MessageLookupByLibrary {
"itLooksLikeSomethingWentWrongPleaseRetryAfterSome":
MessageLookupByLibrary.simpleMessage(
"It looks like something went wrong. Please retry after some time. If the error persists, please contact our support team."),
"itemCount": m44,
"itemCount": m42,
"itemsShowTheNumberOfDaysRemainingBeforePermanentDeletion":
MessageLookupByLibrary.simpleMessage(
"Items show the number of days remaining before permanent deletion"),
@@ -1085,7 +1085,7 @@ class MessageLookup extends MessageLookupByLibrary {
"legacy": MessageLookupByLibrary.simpleMessage("Legacy"),
"legacyAccounts":
MessageLookupByLibrary.simpleMessage("Legacy accounts"),
"legacyInvite": m45,
"legacyInvite": m43,
"legacyPageDesc": MessageLookupByLibrary.simpleMessage(
"Legacy allows trusted contacts to access your account in your absence."),
"legacyPageDesc2": MessageLookupByLibrary.simpleMessage(
@@ -1101,7 +1101,7 @@ class MessageLookup extends MessageLookupByLibrary {
MessageLookupByLibrary.simpleMessage("for faster sharing"),
"linkEnabled": MessageLookupByLibrary.simpleMessage("Enabled"),
"linkExpired": MessageLookupByLibrary.simpleMessage("Expired"),
"linkExpiresOn": m46,
"linkExpiresOn": m44,
"linkExpiry": MessageLookupByLibrary.simpleMessage("Link expiry"),
"linkHasExpired":
MessageLookupByLibrary.simpleMessage("Link has expired"),
@@ -1109,8 +1109,8 @@ class MessageLookup extends MessageLookupByLibrary {
"linkPerson": MessageLookupByLibrary.simpleMessage("Link person"),
"linkPersonCaption": MessageLookupByLibrary.simpleMessage(
"for better sharing experience"),
"linkPersonToEmail": m47,
"linkPersonToEmailConfirmation": m48,
"linkPersonToEmail": m91,
"linkPersonToEmailConfirmation": m92,
"livePhotos": MessageLookupByLibrary.simpleMessage("Live Photos"),
"loadMessage1": MessageLookupByLibrary.simpleMessage(
"You can share your subscription with your family"),
@@ -1224,11 +1224,11 @@ class MessageLookup extends MessageLookupByLibrary {
"moreDetails": MessageLookupByLibrary.simpleMessage("More details"),
"mostRecent": MessageLookupByLibrary.simpleMessage("Most recent"),
"mostRelevant": MessageLookupByLibrary.simpleMessage("Most relevant"),
"moveItem": m49,
"moveItem": m45,
"moveToAlbum": MessageLookupByLibrary.simpleMessage("Move to album"),
"moveToHiddenAlbum":
MessageLookupByLibrary.simpleMessage("Move to hidden album"),
"movedSuccessfullyTo": m50,
"movedSuccessfullyTo": m46,
"movedToTrash": MessageLookupByLibrary.simpleMessage("Moved to trash"),
"movingFilesToAlbum":
MessageLookupByLibrary.simpleMessage("Moving files to album..."),
@@ -1278,10 +1278,10 @@ class MessageLookup extends MessageLookupByLibrary {
"noResults": MessageLookupByLibrary.simpleMessage("No results"),
"noResultsFound":
MessageLookupByLibrary.simpleMessage("No results found"),
"noSuggestionsForPerson": m51,
"noSuggestionsForPerson": m47,
"noSystemLockFound":
MessageLookupByLibrary.simpleMessage("No system lock found"),
"notPersonLabel": m52,
"notPersonLabel": m48,
"nothingSharedWithYouYet":
MessageLookupByLibrary.simpleMessage("Nothing shared with you yet"),
"nothingToSeeHere":
@@ -1291,7 +1291,7 @@ class MessageLookup extends MessageLookupByLibrary {
"onDevice": MessageLookupByLibrary.simpleMessage("On device"),
"onEnte": MessageLookupByLibrary.simpleMessage(
"On <branding>ente</branding>"),
"onlyFamilyAdminCanChangeCode": m53,
"onlyFamilyAdminCanChangeCode": m49,
"onlyThem": MessageLookupByLibrary.simpleMessage("Only them"),
"oops": MessageLookupByLibrary.simpleMessage("Oops"),
"oopsCouldNotSaveEdits":
@@ -1339,7 +1339,7 @@ class MessageLookup extends MessageLookupByLibrary {
"paymentFailed": MessageLookupByLibrary.simpleMessage("Payment failed"),
"paymentFailedMessage": MessageLookupByLibrary.simpleMessage(
"Unfortunately your payment failed. Please contact support and we\'ll help you out!"),
"paymentFailedTalkToProvider": m54,
"paymentFailedTalkToProvider": m50,
"pendingItems": MessageLookupByLibrary.simpleMessage("Pending items"),
"pendingSync": MessageLookupByLibrary.simpleMessage("Pending sync"),
"people": MessageLookupByLibrary.simpleMessage("People"),
@@ -1361,14 +1361,14 @@ class MessageLookup extends MessageLookupByLibrary {
"photosAddedByYouWillBeRemovedFromTheAlbum":
MessageLookupByLibrary.simpleMessage(
"Photos added by you will be removed from the album"),
"photosCount": m55,
"photosCount": m51,
"pickCenterPoint":
MessageLookupByLibrary.simpleMessage("Pick center point"),
"pinAlbum": MessageLookupByLibrary.simpleMessage("Pin album"),
"pinLock": MessageLookupByLibrary.simpleMessage("PIN lock"),
"playOnTv": MessageLookupByLibrary.simpleMessage("Play album on TV"),
"playOriginal": MessageLookupByLibrary.simpleMessage("Play original"),
"playStoreFreeTrialValidTill": m56,
"playStoreFreeTrialValidTill": m52,
"playStream": MessageLookupByLibrary.simpleMessage("Play stream"),
"playstoreSubscription":
MessageLookupByLibrary.simpleMessage("PlayStore subscription"),
@@ -1381,14 +1381,14 @@ class MessageLookup extends MessageLookupByLibrary {
"pleaseContactSupportIfTheProblemPersists":
MessageLookupByLibrary.simpleMessage(
"Please contact support if the problem persists"),
"pleaseEmailUsAt": m57,
"pleaseEmailUsAt": m53,
"pleaseGrantPermissions":
MessageLookupByLibrary.simpleMessage("Please grant permissions"),
"pleaseLoginAgain":
MessageLookupByLibrary.simpleMessage("Please login again"),
"pleaseSelectQuickLinksToRemove": MessageLookupByLibrary.simpleMessage(
"Please select quick links to remove"),
"pleaseSendTheLogsTo": m58,
"pleaseSendTheLogsTo": m54,
"pleaseTryAgain":
MessageLookupByLibrary.simpleMessage("Please try again"),
"pleaseVerifyTheCodeYouHaveEntered":
@@ -1400,8 +1400,6 @@ class MessageLookup extends MessageLookupByLibrary {
"pleaseWaitForSometimeBeforeRetrying":
MessageLookupByLibrary.simpleMessage(
"Please wait for sometime before retrying"),
"pleaseWaitThisWillTakeAWhile": MessageLookupByLibrary.simpleMessage(
"Please wait, this will take a while."),
"preparingLogs":
MessageLookupByLibrary.simpleMessage("Preparing logs..."),
"preserveMore": MessageLookupByLibrary.simpleMessage("Preserve more"),
@@ -1419,7 +1417,7 @@ class MessageLookup extends MessageLookupByLibrary {
"proceed": MessageLookupByLibrary.simpleMessage("Proceed"),
"processed": MessageLookupByLibrary.simpleMessage("Processed"),
"processing": MessageLookupByLibrary.simpleMessage("Processing"),
"processingImport": m59,
"processingImport": m55,
"processingVideos":
MessageLookupByLibrary.simpleMessage("Processing videos"),
"publicLinkCreated":
@@ -1432,9 +1430,9 @@ class MessageLookup extends MessageLookupByLibrary {
"raiseTicket": MessageLookupByLibrary.simpleMessage("Raise ticket"),
"rateTheApp": MessageLookupByLibrary.simpleMessage("Rate the app"),
"rateUs": MessageLookupByLibrary.simpleMessage("Rate us"),
"rateUsOnStore": m60,
"rateUsOnStore": m56,
"reassignMe": MessageLookupByLibrary.simpleMessage("Reassign \"Me\""),
"reassignedToName": m61,
"reassignedToName": m93,
"reassigningLoading":
MessageLookupByLibrary.simpleMessage("Reassigning..."),
"recover": MessageLookupByLibrary.simpleMessage("Recover"),
@@ -1445,7 +1443,7 @@ class MessageLookup extends MessageLookupByLibrary {
MessageLookupByLibrary.simpleMessage("Recover account"),
"recoveryInitiated":
MessageLookupByLibrary.simpleMessage("Recovery initiated"),
"recoveryInitiatedDesc": m62,
"recoveryInitiatedDesc": m57,
"recoveryKey": MessageLookupByLibrary.simpleMessage("Recovery key"),
"recoveryKeyCopiedToClipboard": MessageLookupByLibrary.simpleMessage(
"Recovery key copied to clipboard"),
@@ -1459,12 +1457,12 @@ class MessageLookup extends MessageLookupByLibrary {
MessageLookupByLibrary.simpleMessage("Recovery key verified"),
"recoveryKeyVerifyReason": MessageLookupByLibrary.simpleMessage(
"Your recovery key is the only way to recover your photos if you forget your password. You can find your recovery key in Settings > Account.\n\nPlease enter your recovery key here to verify that you have saved it correctly."),
"recoveryReady": m63,
"recoveryReady": m58,
"recoverySuccessful":
MessageLookupByLibrary.simpleMessage("Recovery successful!"),
"recoveryWarning": MessageLookupByLibrary.simpleMessage(
"A trusted contact is trying to access your account"),
"recoveryWarningBody": m64,
"recoveryWarningBody": m59,
"recreatePasswordBody": MessageLookupByLibrary.simpleMessage(
"The current device is not powerful enough to verify your password, but we can regenerate in a way that works with all devices.\n\nPlease login using your recovery key and regenerate your password (you can use the same one again if you wish)."),
"recreatePasswordTitle":
@@ -1479,7 +1477,7 @@ class MessageLookup extends MessageLookupByLibrary {
"1. Give this code to your friends"),
"referralStep2": MessageLookupByLibrary.simpleMessage(
"2. They sign up for a paid plan"),
"referralStep3": m65,
"referralStep3": m60,
"referrals": MessageLookupByLibrary.simpleMessage("Referrals"),
"referralsAreCurrentlyPaused": MessageLookupByLibrary.simpleMessage(
"Referrals are currently paused"),
@@ -1508,7 +1506,7 @@ class MessageLookup extends MessageLookupByLibrary {
"removeLink": MessageLookupByLibrary.simpleMessage("Remove link"),
"removeParticipant":
MessageLookupByLibrary.simpleMessage("Remove participant"),
"removeParticipantBody": m66,
"removeParticipantBody": m61,
"removePersonLabel":
MessageLookupByLibrary.simpleMessage("Remove person label"),
"removePublicLink":
@@ -1528,7 +1526,7 @@ class MessageLookup extends MessageLookupByLibrary {
"renameFile": MessageLookupByLibrary.simpleMessage("Rename file"),
"renewSubscription":
MessageLookupByLibrary.simpleMessage("Renew subscription"),
"renewsOn": m67,
"renewsOn": m62,
"reportABug": MessageLookupByLibrary.simpleMessage("Report a bug"),
"reportBug": MessageLookupByLibrary.simpleMessage("Report bug"),
"resendEmail": MessageLookupByLibrary.simpleMessage("Resend email"),
@@ -1606,8 +1604,8 @@ class MessageLookup extends MessageLookupByLibrary {
"Invite people, and you\'ll see all photos shared by them here"),
"searchPersonsEmptySection": MessageLookupByLibrary.simpleMessage(
"People will be shown here once processing and syncing is complete"),
"searchResultCount": m68,
"searchSectionsLengthMismatch": m69,
"searchResultCount": m63,
"searchSectionsLengthMismatch": m64,
"security": MessageLookupByLibrary.simpleMessage("Security"),
"seePublicAlbumLinksInApp": MessageLookupByLibrary.simpleMessage(
"See public album links in app"),
@@ -1646,7 +1644,7 @@ class MessageLookup extends MessageLookupByLibrary {
MessageLookupByLibrary.simpleMessage(
"Selected items will be deleted from all albums and moved to trash."),
"selectedPhotos": m6,
"selectedPhotosWithYours": m70,
"selectedPhotosWithYours": m65,
"send": MessageLookupByLibrary.simpleMessage("Send"),
"sendEmail": MessageLookupByLibrary.simpleMessage("Send email"),
"sendInvite": MessageLookupByLibrary.simpleMessage("Send invite"),
@@ -1675,16 +1673,16 @@ class MessageLookup extends MessageLookupByLibrary {
"shareAnAlbumNow":
MessageLookupByLibrary.simpleMessage("Share an album now"),
"shareLink": MessageLookupByLibrary.simpleMessage("Share link"),
"shareMyVerificationID": m71,
"shareMyVerificationID": m66,
"shareOnlyWithThePeopleYouWant": MessageLookupByLibrary.simpleMessage(
"Share only with the people you want"),
"shareTextConfirmOthersVerificationID": m7,
"shareTextRecommendUsingEnte": MessageLookupByLibrary.simpleMessage(
"Download Ente so we can easily share original quality photos and videos\n\nhttps://ente.io"),
"shareTextReferralCode": m72,
"shareTextReferralCode": m67,
"shareWithNonenteUsers":
MessageLookupByLibrary.simpleMessage("Share with non-Ente users"),
"shareWithPeopleSectionTitle": m73,
"shareWithPeopleSectionTitle": m68,
"shareYourFirstAlbum":
MessageLookupByLibrary.simpleMessage("Share your first album"),
"sharedAlbumSectionDescription": MessageLookupByLibrary.simpleMessage(
@@ -1695,7 +1693,7 @@ class MessageLookup extends MessageLookupByLibrary {
MessageLookupByLibrary.simpleMessage("New shared photos"),
"sharedPhotoNotificationsExplanation": MessageLookupByLibrary.simpleMessage(
"Receive notifications when someone adds a photo to a shared album that you\'re a part of"),
"sharedWith": m74,
"sharedWith": m69,
"sharedWithMe": MessageLookupByLibrary.simpleMessage("Shared with me"),
"sharedWithYou":
MessageLookupByLibrary.simpleMessage("Shared with you"),
@@ -1710,11 +1708,11 @@ class MessageLookup extends MessageLookupByLibrary {
MessageLookupByLibrary.simpleMessage("Sign out other devices"),
"signUpTerms": MessageLookupByLibrary.simpleMessage(
"I agree to the <u-terms>terms of service</u-terms> and <u-policy>privacy policy</u-policy>"),
"singleFileDeleteFromDevice": m75,
"singleFileDeleteFromDevice": m70,
"singleFileDeleteHighlight": MessageLookupByLibrary.simpleMessage(
"It will be deleted from all albums."),
"singleFileInBothLocalAndRemote": m76,
"singleFileInRemoteOnly": m77,
"singleFileInBothLocalAndRemote": m71,
"singleFileInRemoteOnly": m72,
"skip": MessageLookupByLibrary.simpleMessage("Skip"),
"social": MessageLookupByLibrary.simpleMessage("Social"),
"someItemsAreInBothEnteAndYourDevice":
@@ -1762,11 +1760,11 @@ class MessageLookup extends MessageLookupByLibrary {
"storageInGB": m1,
"storageLimitExceeded":
MessageLookupByLibrary.simpleMessage("Storage limit exceeded"),
"storageUsageInfo": m78,
"storageUsageInfo": m73,
"streamDetails": MessageLookupByLibrary.simpleMessage("Stream details"),
"strongStrength": MessageLookupByLibrary.simpleMessage("Strong"),
"subAlreadyLinkedErrMessage": m79,
"subWillBeCancelledOn": m80,
"subAlreadyLinkedErrMessage": m74,
"subWillBeCancelledOn": m75,
"subscribe": MessageLookupByLibrary.simpleMessage("Subscribe"),
"subscribeToEnableSharing": MessageLookupByLibrary.simpleMessage(
"You need an active paid subscription to enable sharing."),
@@ -1783,7 +1781,7 @@ class MessageLookup extends MessageLookupByLibrary {
"suggestFeatures":
MessageLookupByLibrary.simpleMessage("Suggest features"),
"support": MessageLookupByLibrary.simpleMessage("Support"),
"syncProgress": m81,
"syncProgress": m76,
"syncStopped": MessageLookupByLibrary.simpleMessage("Sync stopped"),
"syncing": MessageLookupByLibrary.simpleMessage("Syncing..."),
"systemTheme": MessageLookupByLibrary.simpleMessage("System"),
@@ -1792,7 +1790,7 @@ class MessageLookup extends MessageLookupByLibrary {
MessageLookupByLibrary.simpleMessage("Tap to enter code"),
"tapToUnlock": MessageLookupByLibrary.simpleMessage("Tap to unlock"),
"tapToUpload": MessageLookupByLibrary.simpleMessage("Tap to upload"),
"tapToUploadIsIgnoredDue": m82,
"tapToUploadIsIgnoredDue": m77,
"tempErrorContactSupportIfPersists": MessageLookupByLibrary.simpleMessage(
"It looks like something went wrong. Please retry after some time. If the error persists, please contact our support team."),
"terminate": MessageLookupByLibrary.simpleMessage("Terminate"),
@@ -1833,7 +1831,7 @@ class MessageLookup extends MessageLookupByLibrary {
MessageLookupByLibrary.simpleMessage("This image has no exif data"),
"thisIsMeExclamation":
MessageLookupByLibrary.simpleMessage("This is me!"),
"thisIsPersonVerificationId": m83,
"thisIsPersonVerificationId": m78,
"thisIsYourVerificationId": MessageLookupByLibrary.simpleMessage(
"This is your Verification ID"),
"thisWillLogYouOutOfTheFollowingDevice":
@@ -1857,11 +1855,11 @@ class MessageLookup extends MessageLookupByLibrary {
"total": MessageLookupByLibrary.simpleMessage("total"),
"totalSize": MessageLookupByLibrary.simpleMessage("Total size"),
"trash": MessageLookupByLibrary.simpleMessage("Trash"),
"trashDaysLeft": m84,
"trashDaysLeft": m79,
"trim": MessageLookupByLibrary.simpleMessage("Trim"),
"trustedContacts":
MessageLookupByLibrary.simpleMessage("Trusted contacts"),
"trustedInviteBody": m85,
"trustedInviteBody": m80,
"tryAgain": MessageLookupByLibrary.simpleMessage("Try again"),
"turnOnBackupForAutoUpload": MessageLookupByLibrary.simpleMessage(
"Turn on backup to automatically upload files added to this device folder to Ente."),
@@ -1879,7 +1877,7 @@ class MessageLookup extends MessageLookupByLibrary {
"Two-factor authentication successfully reset"),
"twofactorSetup":
MessageLookupByLibrary.simpleMessage("Two-factor setup"),
"typeOfGallerGallerytypeIsNotSupportedForRename": m86,
"typeOfGallerGallerytypeIsNotSupportedForRename": m81,
"unarchive": MessageLookupByLibrary.simpleMessage("Unarchive"),
"unarchiveAlbum":
MessageLookupByLibrary.simpleMessage("Unarchive album"),
@@ -1902,10 +1900,10 @@ class MessageLookup extends MessageLookupByLibrary {
"updatingFolderSelection": MessageLookupByLibrary.simpleMessage(
"Updating folder selection..."),
"upgrade": MessageLookupByLibrary.simpleMessage("Upgrade"),
"uploadIsIgnoredDueToIgnorereason": m87,
"uploadIsIgnoredDueToIgnorereason": m82,
"uploadingFilesToAlbum":
MessageLookupByLibrary.simpleMessage("Uploading files to album..."),
"uploadingMultipleMemories": m88,
"uploadingMultipleMemories": m83,
"uploadingSingleMemory":
MessageLookupByLibrary.simpleMessage("Preserving 1 memory..."),
"upto50OffUntil4thDec": MessageLookupByLibrary.simpleMessage(
@@ -1923,7 +1921,7 @@ class MessageLookup extends MessageLookupByLibrary {
"useSelectedPhoto":
MessageLookupByLibrary.simpleMessage("Use selected photo"),
"usedSpace": MessageLookupByLibrary.simpleMessage("Used space"),
"validTill": m89,
"validTill": m84,
"verificationFailedPleaseTryAgain":
MessageLookupByLibrary.simpleMessage(
"Verification failed, please try again"),
@@ -1931,7 +1929,7 @@ class MessageLookup extends MessageLookupByLibrary {
MessageLookupByLibrary.simpleMessage("Verification ID"),
"verify": MessageLookupByLibrary.simpleMessage("Verify"),
"verifyEmail": MessageLookupByLibrary.simpleMessage("Verify email"),
"verifyEmailID": m90,
"verifyEmailID": m85,
"verifyIDLabel": MessageLookupByLibrary.simpleMessage("Verify"),
"verifyPasskey": MessageLookupByLibrary.simpleMessage("Verify passkey"),
"verifyPassword":
@@ -1957,7 +1955,7 @@ class MessageLookup extends MessageLookupByLibrary {
"viewRecoveryKey":
MessageLookupByLibrary.simpleMessage("View recovery key"),
"viewer": MessageLookupByLibrary.simpleMessage("Viewer"),
"viewersSuccessfullyAdded": m91,
"viewersSuccessfullyAdded": m86,
"visitWebToManage": MessageLookupByLibrary.simpleMessage(
"Please visit web.ente.io to manage your subscription"),
"waitingForVerification":
@@ -1978,7 +1976,7 @@ class MessageLookup extends MessageLookupByLibrary {
"Trusted contact can help in recovering your data."),
"yearShort": MessageLookupByLibrary.simpleMessage("yr"),
"yearly": MessageLookupByLibrary.simpleMessage("Yearly"),
"yearsAgo": m92,
"yearsAgo": m87,
"yes": MessageLookupByLibrary.simpleMessage("Yes"),
"yesCancel": MessageLookupByLibrary.simpleMessage("Yes, cancel"),
"yesConvertToViewer":
@@ -2010,7 +2008,7 @@ class MessageLookup extends MessageLookupByLibrary {
"You cannot share with yourself"),
"youDontHaveAnyArchivedItems": MessageLookupByLibrary.simpleMessage(
"You don\'t have any archived items."),
"youHaveSuccessfullyFreedUp": m93,
"youHaveSuccessfullyFreedUp": m88,
"yourAccountHasBeenDeleted": MessageLookupByLibrary.simpleMessage(
"Your account has been deleted"),
"yourMap": MessageLookupByLibrary.simpleMessage("Your map"),
@@ -2033,7 +2031,7 @@ class MessageLookup extends MessageLookupByLibrary {
"Your verification code has expired"),
"youveNoDuplicateFilesThatCanBeCleared":
MessageLookupByLibrary.simpleMessage(
"You don\'t have any duplicate files that can be cleared"),
"You\'ve no duplicate files that can be cleared"),
"youveNoFilesInThisAlbumThatCanBeDeleted":
MessageLookupByLibrary.simpleMessage(
"You\'ve no files in this album that can be deleted"),

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More