Merge branch 'main' into f-droid

This commit is contained in:
ashilkn
2024-10-16 17:06:01 +05:30
43 changed files with 298 additions and 160 deletions

View File

@@ -1,6 +1,8 @@
<svg width="126" height="45" viewBox="0 0 126 45" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M6.76597 0.337891H4.59152C1.87715 0.337891 0.5 1.14359 0.5 2.73083V42.0032C0.5 43.5914 1.87715 44.3961 4.59152 44.3961H6.76597C9.4814 44.3961 10.8575 43.5904 10.8575 42.0032V2.73083C10.8585 1.14359 9.4814 0.337891 6.76597 0.337891Z" fill="white"/>
<path d="M45.1179 39.5856C45.1179 34.9006 48.2073 30.9351 52.4743 29.5706C52.9617 27.3867 53.2075 24.978 53.2117 22.3445C53.2117 8.14862 45.9908 0.330078 32.878 0.330078H18.8996C16.9468 0.330078 16.0371 1.23137 16.0371 3.16736V41.5216C16.0371 43.4576 16.9468 44.3589 18.8985 44.3589H32.877C37.8761 44.3589 42.0159 43.2191 45.2282 41.0268C45.1578 40.5499 45.1211 40.0678 45.1169 39.5856M32.8759 35.5298H26.4398V9.15916H32.8759C40.9287 9.15916 42.6199 16.3296 42.6199 22.3445C42.6199 28.3594 40.9287 35.5298 32.8759 35.5298Z" fill="white"/>
<path d="M55.7368 34.7764C58.4165 34.7764 60.5889 36.9298 60.5889 39.5864C60.5889 42.243 58.4165 44.3964 55.7368 44.3964C53.0571 44.3964 50.8848 42.243 50.8848 39.5864C50.8848 36.9298 53.0571 34.7764 55.7368 34.7764Z" fill="#2EA76D"/>
<path d="M124.735 32.8363C124.593 32.7754 124.441 32.7417 124.286 32.7365C123.623 32.7144 123.171 32.9728 122.772 33.6126C122.536 33.996 122.303 34.3857 122.072 34.7754C121.192 36.2618 120.283 37.7965 118.962 38.8974C117.168 40.3912 114.57 41.0897 112.342 40.6842C111.017 40.4437 110.071 39.493 109.51 38.7388C108.482 37.3522 107.981 35.4855 108.061 33.3342C111.341 33.06 121.224 31.6114 122.01 24.1847C122.163 22.7446 121.749 21.4399 120.814 20.4104C119.629 19.1058 117.736 18.3862 115.487 18.3862C108.895 18.3862 102.389 25.2215 101.564 33.0138C101.338 35.1515 101.607 37.1253 102.364 38.8848C101.884 39.3449 101.335 39.7283 100.74 40.0224C100.187 40.283 99.7092 40.3365 99.3584 40.1769C98.9245 39.9773 98.7481 39.4741 98.6787 39.0886C98.4193 37.6621 98.7544 36.0223 99.1514 34.3279C99.3846 33.3342 99.6777 32.2995 99.9351 31.3856C100.732 28.5672 101.557 25.6533 101.282 22.7088C101.032 20.0134 99.1231 18.3389 96.3016 18.3389C92.3455 18.3389 89.7404 21.1374 88.0544 23.5366C88.0187 21.7487 87.5891 20.4504 86.7466 19.5827C85.9451 18.757 84.7676 18.3379 83.2486 18.3379C79.3682 18.3379 76.7956 21.026 75.1139 23.379C75.1359 23.1626 75.159 22.942 75.1832 22.7214C75.2893 21.713 75.3366 20.2676 74.5246 19.3747C74.0414 18.8432 73.3144 18.5732 72.3638 18.5732C71.7104 18.5532 71.057 18.6037 70.4152 18.7255C70.4057 18.7266 69.5339 18.8957 69.2019 19.1982C68.621 19.7266 68.8059 20.4556 68.912 20.8716C68.9256 20.9241 68.9382 20.9724 68.9445 21.0134C69.0107 21.4746 69.0307 21.941 69.0055 22.4063C68.8836 25.2362 68.3542 28.0651 67.851 30.4591C67.5789 31.7491 67.2733 33.0611 66.9707 34.3563C66.2985 37.2303 65.6051 40.2 65.249 43.1875C65.1703 43.7684 65.5757 44.3031 66.1566 44.3818C66.2092 44.3892 66.2627 44.3923 66.3163 44.3913L66.5253 44.3934C68.6578 44.4218 70.7534 44.3346 71.2461 43.1286C71.7913 41.7988 72.0928 40.1811 72.3596 38.7503L72.4772 38.1159C73.1096 34.8258 73.6621 32.4686 74.7756 29.4381C75.3492 27.876 76.3975 26.4695 77.2452 25.4169C78.2715 24.1427 79.3787 22.8958 80.6277 22.8643C81.1445 22.838 81.4817 22.9904 81.7359 23.3255C82.9492 24.9306 81.4387 30.1103 80.7937 32.3226C80.654 32.8006 80.5363 33.205 80.4617 33.5012L80.0174 35.2103C79.363 37.702 78.6865 40.2777 78.3398 42.8839C78.3052 43.1507 78.2726 43.4186 78.2453 43.6896L78.2159 44.053L78.489 44.261C79.0394 44.6844 82.9702 44.0919 83.0017 44.0825C84.4514 43.5971 84.7665 42.2452 84.8705 41.8009C85.1405 40.6517 85.3789 39.4773 85.609 38.3428L85.6258 38.2587C86.0586 36.1211 86.5061 33.9098 87.1752 31.7764C88.482 27.625 90.2236 24.7929 92.3539 23.358C93.2647 22.7425 94.2007 22.6742 94.624 23.1941C95.3604 24.0912 94.8939 26.5199 94.6944 27.5567C94.4191 28.9958 94.0662 30.4591 93.7258 31.8751L93.708 31.9476C93.4895 32.8499 93.2731 33.7512 93.0714 34.6557C92.4485 37.4583 91.9369 40.9332 93.5284 42.9385C94.3383 43.9606 95.5914 44.4785 97.2533 44.4785C99.0159 44.4785 100.674 43.8955 102.471 42.6444C102.966 42.2967 103.466 41.8923 104.05 41.4111C106.073 43.6906 108.37 44.6676 111.687 44.6676C119.185 44.6676 122.71 39.7283 124.71 36.0129C124.976 35.537 125.211 35.0443 125.412 34.538C125.66 33.8542 125.362 33.1062 124.734 32.8373M115.539 23.4557C115.549 23.5713 115.559 23.6868 115.56 23.8034C115.56 23.9778 115.551 24.1522 115.533 24.3265C115.477 24.9043 115.363 25.4757 115.194 26.0314C114.124 29.4717 111.112 30.0809 108.506 30.1681C108.849 28.6996 109.358 27.2741 110.021 25.919C111.288 23.358 112.881 21.7676 114.175 21.7666C114.295 21.7666 114.414 21.7844 114.528 21.817C114.588 21.838 114.646 21.8632 114.701 21.8937L114.756 21.9178C114.778 21.9262 114.799 21.9368 114.819 21.9494C114.876 21.9872 114.928 22.0313 114.977 22.0786L115.021 22.1195C115.039 22.1342 115.054 22.15 115.07 22.1668C115.105 22.2078 115.137 22.2519 115.166 22.2981L115.204 22.3559C115.233 22.3958 115.259 22.4378 115.282 22.4809C115.296 22.5082 115.307 22.5387 115.342 22.6185C115.379 22.7036 115.41 22.7908 115.438 22.879L115.462 22.9862C115.491 23.0986 115.513 23.212 115.528 23.3265L115.539 23.4557Z" fill="white"/>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<svg viewBox="0 0 180 180" xmlns="http://www.w3.org/2000/svg">
<ellipse style="" cx="90" cy="90" rx="90" ry="90" transform="matrix(1, 0, 0, 1, 0, -1.7763568394002505e-15)"/>
<path d="M 37.753 62.604 L 35.578 62.604 C 32.864 62.604 31.487 63.41 31.487 64.997 L 31.487 104.269 C 31.487 105.858 32.864 106.662 35.578 106.662 L 37.753 106.662 C 40.468 106.662 41.844 105.857 41.844 104.269 L 41.844 64.997 C 41.845 63.41 40.468 62.604 37.753 62.604 Z" fill="white" style="transform-origin: 90px 90px;"/>
<path d="M 76.105 101.852 C 76.105 97.167 79.194 93.201 83.461 91.837 C 83.949 89.653 84.194 87.244 84.199 84.611 C 84.199 70.415 76.978 62.596 63.865 62.596 L 49.886 62.596 C 47.934 62.596 47.024 63.498 47.024 65.434 L 47.024 103.788 C 47.024 105.724 47.934 106.625 49.885 106.625 L 63.864 106.625 C 68.863 106.625 73.003 105.485 76.215 103.293 C 76.145 102.816 76.108 102.334 76.104 101.852 M 63.863 97.796 L 57.427 97.796 L 57.427 71.425 L 63.863 71.425 C 71.916 71.425 73.607 78.596 73.607 84.611 C 73.607 90.626 71.916 97.796 63.863 97.796 Z" fill="white" style="transform-origin: 90px 90px;"/>
<path d="M 86.724 97.043 C 89.403 97.043 91.576 99.196 91.576 101.853 C 91.576 104.509 89.403 106.663 86.724 106.663 C 84.044 106.663 81.872 104.509 81.872 101.853 C 81.872 99.196 84.044 97.043 86.724 97.043 Z" fill="#2EA76D" style="transform-origin: 90px 90px;"/>
<path d="M 155.722 95.102 C 155.58 95.042 155.428 95.008 155.273 95.003 C 154.61 94.981 154.158 95.239 153.759 95.879 C 153.523 96.262 153.29 96.652 153.059 97.042 C 152.179 98.528 151.27 100.063 149.949 101.164 C 148.155 102.657 145.557 103.356 143.329 102.95 C 142.004 102.71 141.058 101.759 140.497 101.005 C 139.469 99.618 138.968 97.752 139.048 95.6 C 142.328 95.326 152.211 93.878 152.997 86.451 C 153.15 85.011 152.736 83.706 151.801 82.677 C 150.616 81.372 148.723 80.652 146.474 80.652 C 139.882 80.652 133.376 87.488 132.551 95.28 C 132.325 97.418 132.594 99.391 133.351 101.151 C 132.871 101.611 132.322 101.994 131.727 102.289 C 131.174 102.549 130.696 102.603 130.345 102.443 C 129.911 102.243 129.735 101.74 129.666 101.355 C 129.406 99.928 129.741 98.288 130.138 96.594 C 130.371 95.6 130.665 94.566 130.922 93.652 C 131.719 90.833 132.544 87.919 132.269 84.975 C 132.019 82.28 130.11 80.605 127.288 80.605 C 123.332 80.605 120.727 83.404 119.041 85.803 C 119.006 84.015 118.576 82.717 117.733 81.849 C 116.932 81.023 115.754 80.604 114.235 80.604 C 110.355 80.604 107.782 83.292 106.101 85.645 C 106.123 85.429 106.146 85.208 106.17 84.988 C 106.276 83.979 106.323 82.534 105.511 81.641 C 105.028 81.109 104.301 80.839 103.351 80.839 C 102.697 80.819 102.044 80.87 101.402 80.992 C 101.393 80.993 100.521 81.162 100.189 81.464 C 99.608 81.993 99.793 82.722 99.899 83.138 C 99.912 83.19 99.925 83.239 99.931 83.28 C 99.998 83.741 100.018 84.207 99.992 84.672 C 99.87 87.502 99.341 90.331 98.838 92.725 C 98.566 94.015 98.26 95.327 97.958 96.622 C 97.285 99.496 96.592 102.466 96.236 105.454 C 96.157 106.035 96.563 106.569 97.143 106.648 C 97.196 106.655 97.25 106.658 97.303 106.657 L 97.512 106.66 C 99.645 106.688 101.74 106.601 102.233 105.395 C 102.778 104.065 103.08 102.447 103.346 101.016 L 103.464 100.382 C 104.096 97.092 104.649 94.735 105.762 91.704 C 106.336 90.142 107.384 88.736 108.232 87.683 C 109.258 86.409 110.366 85.162 111.615 85.13 C 112.131 85.104 112.469 85.257 112.723 85.592 C 113.936 87.197 112.426 92.376 111.781 94.589 C 111.641 95.067 111.523 95.471 111.449 95.767 L 111.004 97.476 C 110.35 99.968 109.673 102.544 109.327 105.15 C 109.292 105.417 109.259 105.685 109.232 105.956 L 109.203 106.319 L 109.476 106.527 C 110.026 106.951 113.957 106.358 113.989 106.349 C 115.438 105.863 115.753 104.511 115.857 104.067 C 116.127 102.918 116.366 101.743 116.596 100.609 L 116.613 100.525 C 117.045 98.387 117.493 96.176 118.162 94.043 C 119.469 89.891 121.21 87.059 123.341 85.624 C 124.252 85.009 125.188 84.94 125.611 85.46 C 126.347 86.357 125.881 88.786 125.681 89.823 C 125.406 91.262 125.053 92.725 124.713 94.141 L 124.695 94.214 C 124.476 95.116 124.26 96.017 124.058 96.922 C 123.435 99.724 122.924 103.199 124.515 105.205 C 125.325 106.227 126.578 106.745 128.24 106.745 C 130.003 106.745 131.661 106.162 133.458 104.911 C 133.953 104.563 134.453 104.158 135.037 103.677 C 137.06 105.957 139.357 106.934 142.674 106.934 C 150.172 106.934 153.697 101.994 155.697 98.279 C 155.963 97.803 156.198 97.31 156.399 96.804 C 156.647 96.12 156.349 95.372 155.721 95.103 M 146.526 85.722 C 146.536 85.837 146.546 85.953 146.547 86.07 C 146.547 86.244 146.538 86.418 146.52 86.593 C 146.464 87.17 146.35 87.742 146.181 88.298 C 145.111 91.738 142.099 92.347 139.493 92.434 C 139.836 90.966 140.345 89.54 141.008 88.185 C 142.275 85.624 143.868 84.034 145.162 84.033 C 145.282 84.033 145.401 84.051 145.515 84.083 C 145.575 84.104 145.633 84.129 145.688 84.16 L 145.743 84.184 C 145.765 84.192 145.786 84.203 145.806 84.216 C 145.863 84.253 145.915 84.297 145.964 84.345 L 146.008 84.386 C 146.026 84.4 146.041 84.416 146.057 84.433 C 146.092 84.474 146.124 84.518 146.153 84.564 L 146.191 84.622 C 146.22 84.662 146.246 84.704 146.269 84.747 C 146.283 84.774 146.294 84.805 146.329 84.885 C 146.366 84.97 146.397 85.057 146.425 85.145 L 146.449 85.252 C 146.478 85.365 146.5 85.478 146.515 85.593 L 146.526 85.722 Z" fill="white" style="transform-origin: 90px 90px;"/>
</svg>

Before

Width:  |  Height:  |  Size: 5.0 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB

View File

@@ -2,13 +2,9 @@
<!-- Generator: Adobe Illustrator 26.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.0" id="katman_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 800 600" style="enable-background:new 0 0 800 600;" xml:space="preserve">
<style type="text/css">
.st0{fill:#0052FF;}
.st1{fill:#FFFFFF;}
</style>
<path class="st0" d="M399.8,69.1L399.8,69.1c127.3,0,230.5,103.2,230.5,230.5l0,0c0,127.3-103.2,230.5-230.5,230.5l0,0
c-127.3,0-230.5-103.2-230.5-230.5l0,0C169.3,172.3,272.5,69.1,399.8,69.1z"/>
<path class="st1" d="M399.9,380.6c-44.8,0-81-36.3-81-81s36.3-81,81-81c40.1,0,73.4,29.2,79.8,67.5h81.6
<path d="M399.8,69.1L399.8,69.1c127.3,0,230.5,103.2,230.5,230.5l0,0c0,127.3-103.2,230.5-230.5,230.5l0,0
c-127.3,0-230.5-103.2-230.5-230.5l0,0C169.3,172.3,272.5,69.1,399.8,69.1z" style="fill:#0052FF;"/>
<path d="M399.9,380.6c-44.8,0-81-36.3-81-81s36.3-81,81-81c40.1,0,73.4,29.2,79.8,67.5h81.6
c-6.9-83.2-76.5-148.6-161.5-148.6c-89.5,0-162.1,72.6-162.1,162.1s72.6,162.1,162.1,162.1c85,0,154.6-65.4,161.5-148.6h-81.7
C473.2,351.4,440,380.6,399.9,380.6z"/>
C473.2,351.4,440,380.6,399.9,380.6z" style="fill:#FFFFFF;"/>
</svg>

Before

Width:  |  Height:  |  Size: 904 B

After

Width:  |  Height:  |  Size: 845 B

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 7.6 KiB

After

Width:  |  Height:  |  Size: 7.7 KiB

View File

@@ -1 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 400 400"><path fill="#150A45" d="M0 0h400v400H0z"/><path fill="#fff" d="M234.117 91.106C225.896 77.188 211.92 69 192.19 69 155.196 69 133 98.475 133 139.413c0 40.937 22.196 70.412 59.19 70.412 6.577 0 13.976-.819 19.73-3.275 6.577-2.456 12.332-6.55 16.442-11.463v19.65c0 13.1-7.399 29.475-29.595 29.475-17.264 0-25.485-9.825-28.773-19.65L139.577 239.3c8.221 18.012 26.306 34.388 61.656 34.388 51.792 0 65.767-35.207 65.767-65.5V70.638h-32.061l-.822 20.468Zm-33.706 86.788c-18.908 0-29.595-14.738-29.595-38.481 0-23.744 10.687-38.482 29.595-38.482s29.595 14.738 29.595 38.482c0 22.925-10.687 38.481-29.595 38.481ZM267 284.332V331H133.822v-27.837h106.049v-18.831H267Z"/></svg>
<?xml version="1.0" encoding="utf-8"?>
<svg viewBox="0 0 400 400" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M 399.262 200.003 C 399.262 255.201 376.96 305.199 340.838 341.349 C 304.762 377.548 254.87 399.898 199.787 399.898 C 144.704 399.898 94.813 377.549 58.737 341.35 C 22.615 305.2 0.312 255.201 0.312 200.003 C 0.312 144.805 22.614 94.807 58.736 58.657 C 94.812 22.458 144.704 0.10800000000000001 199.787 0.10800000000000001 C 254.87 0.10800000000000001 304.762 22.458 340.838 58.657 C 376.96 94.807 399.262 144.805 399.262 200.003" style="fill: rgb(21, 10, 69);" transform="matrix(1, 0, 0, 1, 0, -3.552713678800501e-15)"/>
<path fill="#fff" d="M234.117 91.106C225.896 77.188 211.92 69 192.19 69 155.196 69 133 98.475 133 139.413c0 40.937 22.196 70.412 59.19 70.412 6.577 0 13.976-.819 19.73-3.275 6.577-2.456 12.332-6.55 16.442-11.463v19.65c0 13.1-7.399 29.475-29.595 29.475-17.264 0-25.485-9.825-28.773-19.65L139.577 239.3c8.221 18.012 26.306 34.388 61.656 34.388 51.792 0 65.767-35.207 65.767-65.5V70.638h-32.061l-.822 20.468Zm-33.706 86.788c-18.908 0-29.595-14.738-29.595-38.481 0-23.744 10.687-38.482 29.595-38.482s29.595 14.738 29.595 38.482c0 22.925-10.687 38.481-29.595 38.481ZM267 284.332V331H133.822v-27.837h106.049v-18.831H267Z" style="" transform="matrix(1, 0, 0, 1, 0, -3.552713678800501e-15)"/>
</svg>

Before

Width:  |  Height:  |  Size: 739 B

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -1,9 +1,5 @@
<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 333.8 127" style="enable-background:new 0 0 333.8 127;" xml:space="preserve">
<style type="text/css">
.st0{fill:#F45D48;}
</style>
<g>
<path class="st0" d="M296.4,18.6c-20.6,0-37.4,16.8-37.4,37.6c0,20.7,16.8,37.6,37.4,37.6c20.6,0,37.4-16.9,37.4-37.6
<path d="M296.4,18.6c-20.6,0-37.4,16.8-37.4,37.6c0,20.7,16.8,37.6,37.4,37.6c20.6,0,37.4-16.9,37.4-37.6
C333.8,35.4,317,18.6,296.4,18.6L296.4,18.6z M296.4,75.9c-10.9,0-19.7-8.9-19.7-19.8c0-10.9,8.8-19.8,19.7-19.8
c10.8,0,19.7,8.9,19.7,19.8C316.1,67,307.2,75.9,296.4,75.9L296.4,75.9z M186.2,48.5l-6.5-3.3c-2.8-1.4-4.6-2.5-5.3-3.3
c-0.7-0.7-1.1-1.7-1.1-2.6c0-1.3,0.6-2.3,1.7-3.2c1.1-0.9,2.7-1.3,4.7-1.3c3.7,0,7.7,2.2,12.2,6.7l11-11.1
@@ -17,7 +13,6 @@
c0,5.1,0,13.8-3.7,17.6c-1.8,1.8-3.7,3.4-7.8,3.4c-4.1,0-6.1-1.6-7.9-3.4c-3.7-3.7-3.7-12.5-3.7-17.6V20H87.2v35.6
c-0.1,7.4-0.1,21,8.8,30c5.2,5.3,11.5,8,20.5,8c9,0,15.3-2.7,20.5-8c8.9-9,8.9-22.7,8.8-30L145.9,20z M247,72.7
c-1.4,1.1-4.9,3.5-8.8,3c-3.2-0.4-5.8-2.8-6.2-10.7V35.3h21V20h-21V0h-17.8v3.9h0v58.7c0,9.3,2.3,31,24,31
c10.9-0.2,17.6-6.1,20.4-8.5l0.4-0.3l-10.7-13.2C248.2,71.8,247.5,72.4,247,72.7L247,72.7z M247,72.7">
c10.9-0.2,17.6-6.1,20.4-8.5l0.4-0.3l-10.7-13.2C248.2,71.8,247.5,72.4,247,72.7L247,72.7z M247,72.7" style="fill:#F45D48;">
</path>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@@ -1 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 90 90"><path fill="#FFF" d="M0 0h90v90H0z"/><path fill="#FFF" d="M33.258 25.45h26.027v33.51H33.258z"/><path d="m39.22 53.522 2.194-12.578a6.684 6.684 0 0 1-2.21-7.444 6.645 6.645 0 0 1 6.311-4.495v-13.96H28.567c-3.627 0-6.567 2.952-6.567 6.593v32.324c-.005.61.13 1.213.394 1.762C23.816 58.61 29.43 67.876 45.5 75V54.038a36.635 36.635 0 0 1-6.28-.516Z" fill="#E21D3E"/><path d="M62.417 15H45.5v13.96a6.644 6.644 0 0 1 6.302 4.458 6.684 6.684 0 0 1-2.14 7.435l2.193 12.638c-2.098.367-4.225.55-6.355.547V74.97c16.055-7.094 21.684-16.39 23.106-19.276.264-.55.399-1.153.394-1.762v-32.31a6.606 6.606 0 0 0-1.918-4.686A6.555 6.555 0 0 0 62.417 15Z" fill="#B51E23"/></svg>
<?xml version="1.0" encoding="utf-8"?>
<svg viewBox="0 0 90 90" xmlns="http://www.w3.org/2000/svg">
<path fill="#FFF" d="M33.258 25.45h26.027v33.51H33.258z"/>
<path d="m39.22 53.522 2.194-12.578a6.684 6.684 0 0 1-2.21-7.444 6.645 6.645 0 0 1 6.311-4.495v-13.96H28.567c-3.627 0-6.567 2.952-6.567 6.593v32.324c-.005.61.13 1.213.394 1.762C23.816 58.61 29.43 67.876 45.5 75V54.038a36.635 36.635 0 0 1-6.28-.516Z" fill="#E21D3E"/>
<path d="M62.417 15H45.5v13.96a6.644 6.644 0 0 1 6.302 4.458 6.684 6.684 0 0 1-2.14 7.435l2.193 12.638c-2.098.367-4.225.55-6.355.547V74.97c16.055-7.094 21.684-16.39 23.106-19.276.264-.55.399-1.153.394-1.762v-32.31a6.606 6.606 0 0 0-1.918-4.686A6.555 6.555 0 0 0 62.417 15Z" fill="#B51E23"/>
</svg>

Before

Width:  |  Height:  |  Size: 717 B

After

Width:  |  Height:  |  Size: 729 B

View File

@@ -1 +1,17 @@
<svg viewBox="0 0 90 90" xmlns="http://www.w3.org/2000/svg"><g fill="none"><path d="M0 0h90v90H0z" fill="#E20074"/><g fill="#FFF"><path d="M18.692 55.385V42.404h12.981v12.98zm39.635 0V42.404h12.981v12.98z"/><path d="M70.615 12.98h-51.23l-.693 22.674 3.462.52c.692-6.75 2.423-11.597 5.192-14.886 2.942-3.288 7.096-5.192 12.462-5.365v47.25c0 4.154-.52 6.75-1.731 7.962-1.039 1.038-2.77 1.73-5.192 1.903-.693 0-1.904.174-3.635.174v3.634h31.673v-3.634c-1.73 0-2.942 0-3.635-.174-2.423-.173-4.153-.865-5.192-1.903-1.211-1.212-1.73-3.981-1.73-7.962V16.096c5.365.173 9.519 1.904 12.46 5.366 2.943 3.288 4.674 8.134 5.193 14.884l3.462-.52-.866-22.845Z"/></g></g></svg>
<?xml version="1.0" encoding="utf-8"?>
<svg viewBox="0 0 720 720" style="enable-background:new 0 0 720 720;" xmlns="http://www.w3.org/2000/svg">
<defs>
<style type="text/css">
.st0{fill:#E20074;}
</style>
</defs>
<g>
<g>
<g>
<polygon class="st0" points="96.62,469.28 223.57,469.28 223.57,342.31 96.62,342.31 96.62,469.28 &#9;&#9;&#9;"/>
<path class="st0" d="M402.16,82.88c103.43,1.82,165.08,70.76,174.17,196.81l33.57-5.44l-6.41-221.3H102.88l-6.31,221.3&#10;&#9;&#9;&#9;&#9;l33.53,5.44c9.09-126.05,69.86-194.99,174.17-196.81v463.44c0,84.34-14.53,97.97-105.21,98.87v35.35h308.34v-35.35&#10;&#9;&#9;&#9;&#9;c-90.68-0.9-105.23-14.53-105.23-98.87V82.88L402.16,82.88z"/>
<polygon class="st0" points="481.85,469.28 608.78,469.28 608.78,342.31 481.85,342.31 481.85,469.28 &#9;&#9;&#9;"/>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 660 B

After

Width:  |  Height:  |  Size: 858 B

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

@@ -3,6 +3,7 @@
## v1.7.6 (Unreleased)
- Parse description from metadata JSON.
- Support Italian and Lithuanian translations.
- .
## v1.7.5

View File

@@ -16,7 +16,11 @@ the same code we use for our own cloud service.
## Getting started
Start the server
#### Installing Docker
Refer to [How to install Docker from the APT repository](https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository) for detailed instructions.
#### Start the server
```sh
git clone https://github.com/ente-io/ente
@@ -29,6 +33,16 @@ docker compose up --build
> You can also use a pre-built Docker image from `ghcr.io/ente-io/server`
> ([More info](https://github.com/ente-io/ente/blob/main/server/docs/docker.md))
Install the necessary dependencies for running the web client
```sh
# installing npm and yarn
sudo apt update
sudo apt install nodejs npm
sudo npm install -g yarn // to install yarn globally
```
Then in a separate terminal, you can run (e.g) the web client
```sh

View File

@@ -164,12 +164,12 @@ PODS:
- Flutter
- onnxruntime (0.0.1):
- Flutter
- onnxruntime-objc (= 1.15.1)
- onnxruntime-c (1.15.1)
- onnxruntime-objc (1.15.1):
- onnxruntime-objc/Core (= 1.15.1)
- onnxruntime-objc/Core (1.15.1):
- onnxruntime-c (= 1.15.1)
- onnxruntime-objc (= 1.18.0)
- onnxruntime-c (1.18.0)
- onnxruntime-objc (1.18.0):
- onnxruntime-objc/Core (= 1.18.0)
- onnxruntime-objc/Core (1.18.0):
- onnxruntime-c (= 1.18.0)
- open_mail_app (0.0.1):
- Flutter
- OrderedSet (6.0.3)
@@ -206,7 +206,7 @@ PODS:
- shared_preferences_foundation (0.0.1):
- Flutter
- FlutterMacOS
- sqflite (0.0.3):
- sqflite_darwin (0.0.4):
- Flutter
- FlutterMacOS
- "sqlite3 (3.46.1+1)":
@@ -292,7 +292,7 @@ DEPENDENCIES:
- 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 (from `.symlinks/plugins/sqflite/darwin`)
- sqflite_darwin (from `.symlinks/plugins/sqflite_darwin/darwin`)
- sqlite3_flutter_libs (from `.symlinks/plugins/sqlite3_flutter_libs/ios`)
- uni_links (from `.symlinks/plugins/uni_links/ios`)
- url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)
@@ -421,8 +421,8 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/share_plus/ios"
shared_preferences_foundation:
:path: ".symlinks/plugins/shared_preferences_foundation/darwin"
sqflite:
:path: ".symlinks/plugins/sqflite/darwin"
sqflite_darwin:
:path: ".symlinks/plugins/sqflite_darwin/darwin"
sqlite3_flutter_libs:
:path: ".symlinks/plugins/sqlite3_flutter_libs/ios"
uni_links:
@@ -486,9 +486,9 @@ SPEC CHECKSUMS:
move_to_background: 39a5b79b26d577b0372cbe8a8c55e7aa9fcd3a2d
nanopb: fad817b59e0457d11a5dfbde799381cd727c1275
native_video_player: d12af78a1a4a8cf09775a5177d5b392def6fd23c
onnxruntime: e9346181d75b8dea8733bdae512a22c298962e00
onnxruntime-c: ebdcfd8650bcbd10121c125262f99dea681b92a3
onnxruntime-objc: ae7acec7a3d03eaf072d340afed7a35635c1c2a6
onnxruntime: e7c2ae44385191eaad5ae64c935a72debaddc997
onnxruntime-c: a909204639a1f035f575127ac406f781ac797c9c
onnxruntime-objc: b6fab0f1787aa6f7190c2013f03037df4718bd8b
open_mail_app: 794172f6a22cd16319d3ddaf45e945b2f74952b0
OrderedSet: e539b66b644ff081c73a262d24ad552a69be3a94
package_info_plus: 115f4ad11e0698c8c1c5d8a689390df880f47e85
@@ -505,7 +505,7 @@ SPEC CHECKSUMS:
sentry_flutter: 0eb93e5279eb41e2392212afe1ccd2fecb4f8cbe
share_plus: 8875f4f2500512ea181eef553c3e27dba5135aad
shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78
sqflite: 673a0e54cc04b7d6dba8d24fb8095b31c3a99eec
sqflite_darwin: a553b1fd6fe66f53bbb0fe5b4f5bab93f08d7a13
sqlite3: 0bb0e6389d824e40296f531b858a2a0b71c0d2fb
sqlite3_flutter_libs: c00457ebd31e59fa6bb830380ddba24d44fbcd3b
Toast: 1f5ea13423a1e6674c4abdac5be53587ae481c4e

View File

@@ -333,7 +333,7 @@
"${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",
"${BUILT_PRODUCTS_DIR}/sqflite/sqflite.framework",
"${BUILT_PRODUCTS_DIR}/sqflite_darwin/sqflite_darwin.framework",
"${BUILT_PRODUCTS_DIR}/sqlite3/sqlite3.framework",
"${BUILT_PRODUCTS_DIR}/sqlite3_flutter_libs/sqlite3_flutter_libs.framework",
"${BUILT_PRODUCTS_DIR}/uni_links/uni_links.framework",
@@ -428,7 +428,7 @@
"${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",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/sqflite.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/sqflite_darwin.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/sqlite3.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/sqlite3_flutter_libs.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/uni_links.framework",

View File

@@ -227,7 +227,7 @@ Future<void> _init(bool isBackground, {String via = ''}) async {
CryptoUtil.init();
_logger.info("Lockscreen init");
LockScreenSettings.instance.init(preferences);
unawaited(LockScreenSettings.instance.init(preferences));
_logger.info("Configuration init");
await Configuration.instance.init();

View File

@@ -347,6 +347,7 @@ class _DeleteAccountPageState extends State<DeleteAccountPage> {
// ignore: unawaited_futures
showDialog(
useRootNavigator: false,
context: context,
builder: (BuildContext context) {
return alert;

View File

@@ -209,6 +209,7 @@ class _SessionsPageState extends State<SessionsPage> {
);
showDialog(
useRootNavigator: false,
context: context,
builder: (BuildContext context) {
return alert;

View File

@@ -695,6 +695,7 @@ class CollectionActions {
);
return showDialog(
useRootNavigator: false,
context: context,
builder: (BuildContext context) {
return alert;

View File

@@ -153,6 +153,7 @@ class ProgressDialog {
context: _context!,
barrierDismissible: _barrierDismissible,
barrierColor: _barrierColor,
useRootNavigator: false,
builder: (BuildContext context) {
_dismissingContext = context;
return PopScope(

View File

@@ -25,11 +25,12 @@ Future<ButtonResult?> showActionSheet({
Widget? bodyWidget,
String? body,
String? bodyHighlight,
bool useRootNavigator = false,
}) {
return showMaterialModalBottomSheet(
backgroundColor: Colors.transparent,
barrierColor: backdropFaintDark,
useRootNavigator: true,
useRootNavigator: useRootNavigator,
context: context,
isDismissible: isDismissible,
enableDrag: enableDrag,

View File

@@ -22,11 +22,13 @@ Future<ButtonResult?> showDialogWidget({
required List<ButtonWidget> buttons,
IconData? icon,
bool isDismissible = true,
bool useRootNavigator = false,
}) {
return showDialog(
barrierDismissible: isDismissible,
barrierColor: backdropFaintDark,
context: context,
useRootNavigator: useRootNavigator,
builder: (context) {
final widthOfScreen = MediaQuery.of(context).size.width;
final isMobileSmall = widthOfScreen <= mobileSmallThreshold;

View File

@@ -138,6 +138,7 @@ class _GrantPermissionsWidgetState extends State<GrantPermissionsWidget> {
);
// ignore: unawaited_futures
showDialog(
useRootNavigator: false,
context: context,
builder: (BuildContext context) {
return alert;

View File

@@ -143,6 +143,7 @@ class _PaymentWebPageState extends State<PaymentWebPage> {
// show dialog to handle accidental back press.
Future<bool> _buildPageExitWidget(BuildContext context) async {
final result = await showDialog(
useRootNavigator: false,
context: context,
builder: (context) => AlertDialog(
title: Text(S.of(context).areYouSureYouWantToExit),
@@ -199,6 +200,7 @@ class _PaymentWebPageState extends State<PaymentWebPage> {
Future<void> _handlePaymentFailure(String reason) async {
await showDialog(
useRootNavigator: false,
context: context,
barrierDismissible: false,
builder: (context) => AlertDialog(
@@ -251,6 +253,7 @@ class _PaymentWebPageState extends State<PaymentWebPage> {
// warn the user to wait for sometime before trying another payment
Future<dynamic> _showExitPageDialog({String? title, String? content}) {
return showDialog(
useRootNavigator: false,
context: context,
barrierDismissible: false,
builder: (context) => AlertDialog(

View File

@@ -71,6 +71,7 @@ class AboutSectionWidget extends StatelessWidget {
if (shouldUpdate) {
// ignore: unawaited_futures
showDialog(
useRootNavigator: false,
context: context,
builder: (BuildContext context) {
return AppUpdateDialog(

View File

@@ -64,6 +64,7 @@ class AccountSectionWidget extends StatelessWidget {
if (hasAuthenticated) {
// ignore: unawaited_futures
showDialog(
useRootNavigator: false,
context: context,
builder: (BuildContext context) {
return const ChangeEmailDialog();

View File

@@ -116,6 +116,7 @@ class DebugSectionWidget extends StatelessWidget {
);
showDialog(
useRootNavigator: false,
context: context,
builder: (BuildContext context) {
return alert;

View File

@@ -248,6 +248,7 @@ class _SecuritySectionWidgetState extends State<SecuritySectionWidget> {
);
await showDialog(
useRootNavigator: false,
context: context,
builder: (BuildContext context) {
return alert;

View File

@@ -176,6 +176,7 @@ class SettingsPage extends StatelessWidget {
Future<void> _showVerifyIdentityDialog(BuildContext context) async {
await showDialog(
useRootNavigator: false,
context: context,
builder: (BuildContext context) {
return VerifyIdentifyDialog(self: true);

View File

@@ -168,6 +168,7 @@ class _AddParticipantPage extends State<AddParticipantPage> {
},
onLongPress: () {
showDialog(
useRootNavigator: false,
context: context,
builder: (BuildContext context) {
return VerifyIdentifyDialog(

View File

@@ -198,6 +198,7 @@ class _HomeWidgetState extends State<HomeWidget> {
Future.delayed(Duration.zero, () {
if (value) {
showDialog(
useRootNavigator: false,
context: context,
builder: (BuildContext context) {
return AppUpdateDialog(
@@ -252,6 +253,7 @@ class _HomeWidgetState extends State<HomeWidget> {
);
await showDialog(
useRootNavigator: false,
context: context,
builder: (BuildContext context) {
return alert;

View File

@@ -89,6 +89,7 @@ class _AllExifItemWidgetState extends State<AllExifItemWidget> {
} else if (exif.isNotEmpty) {
label = S.of(context).viewAllExifData;
onTap = () => showDialog(
useRootNavigator: false,
context: context,
builder: (BuildContext context) {
return ExifInfoDialog(file);

View File

@@ -781,6 +781,7 @@ class _GalleryAppBarWidgetState extends State<GalleryAppBarWidget> {
final result = await showDialog<ButtonAction?>(
context: context,
barrierDismissible: true,
useRootNavigator: false,
builder: (BuildContext context) {
return const CastChooseDialog();
},
@@ -792,6 +793,7 @@ class _GalleryAppBarWidgetState extends State<GalleryAppBarWidget> {
await Future.delayed(const Duration(milliseconds: 100));
if (result == ButtonAction.first) {
await showDialog(
useRootNavigator: false,
context: context,
barrierDismissible: true,
builder: (BuildContext bContext) {

View File

@@ -424,6 +424,7 @@ Future<List<String>> deleteLocalFilesInBatches(
);
// ignore: unawaited_futures
showDialog(
useRootNavigator: false,
context: context,
builder: (context) {
return dialog;

View File

@@ -48,12 +48,14 @@ Future<ButtonResult?> showErrorDialog(
String title,
String? body, {
bool isDismissable = true,
bool useRootNavigator = false,
}) async {
return showDialogWidget(
context: context,
title: title,
body: body,
isDismissible: isDismissable,
useRootNavigator: useRootNavigator,
buttons: [
ButtonWidget(
buttonType: ButtonType.secondary,
@@ -354,10 +356,12 @@ Future<dynamic> showTextInputDialog(
TextEditingController? textEditingController,
List<TextInputFormatter>? textInputFormatter,
TextInputType? textInputType,
bool useRootNavigator = false,
}) {
return showDialog(
barrierColor: backdropFaintDark,
context: context,
useRootNavigator: useRootNavigator,
builder: (context) {
final bottomInset = MediaQuery.of(context).viewInsets.bottom;
final isKeyboardUp = bottomInset > 100;

View File

@@ -72,6 +72,7 @@ Future<void> sendLogs(
onTap: () async {
// ignore: unawaited_futures
showDialog(
useRootNavigator: false,
context: context,
builder: (BuildContext context) {
return LogFileViewer(SuperLogging.logFile!);

View File

@@ -29,12 +29,16 @@ class LockScreenSettings {
Duration(minutes: 5),
Duration(minutes: 30),
];
void init(SharedPreferences prefs) async {
Future<void> init(SharedPreferences prefs) async {
_secureStorage = const FlutterSecureStorage();
_preferences = prefs;
///Workaround for privacyScreen not working when app is killed and opened.
await setHideAppContent(getShouldHideAppContent());
/// Workaround to check if "lateinit property activity has not been
/// initialized" PlatformException goes away.
await Future.delayed(const Duration(milliseconds: 500), () {
///Workaround for privacyScreen not working when app is killed and opened.
setHideAppContent(getShouldHideAppContent());
});
}
Future<void> setHideAppContent(bool hideContent) async {

View File

@@ -1657,7 +1657,7 @@ packages:
description:
path: "."
ref: ios_only
resolved-ref: "70e163745e082b81235d7330b9d5e8c110ed68e4"
resolved-ref: "212b2cab85647c6d2ffee213dc3b875ef2bf6504"
url: "https://github.com/ente-io/onnxruntime.git"
source: git
version: "1.4.1"

View File

@@ -12,7 +12,7 @@ description: ente photos application
# Read more about iOS versioning at
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
version: 0.9.48+948
version: 0.9.49+949
publish_to: none
environment:

View File

@@ -156,10 +156,14 @@ const localeName = (locale: SupportedLocale) => {
case "es-ES":
return "Español";
case "pt-BR":
return "Brazilian Portuguese";
return "Português Brasileiro";
case "ru-RU":
return "Russian";
return "Русский";
case "pl-PL":
return "Polish";
return "Polski";
case "it-IT":
return "Italiano";
case "lt-LT":
return "Lietuvių kalba";
}
};

View File

@@ -28,6 +28,8 @@ export const supportedLocales = [
"pt-BR" /* Portuguese, Brazilian */,
"ru-RU" /* Russian */,
"pl-PL" /* Polish */,
"it-IT" /* Italian */,
"lt-LT" /* Lithuanian */,
] as const;
/** The type of {@link supportedLocales}. */
@@ -177,6 +179,10 @@ const closestSupportedLocale = (
return "ru-RU";
} else if (ls.startsWith("pl")) {
return "pl-PL";
} else if (ls.startsWith("it")) {
return "it-IT";
} else if (ls.startsWith("lt")) {
return "lt-LT";
}
}

View File

@@ -410,7 +410,7 @@
"folder": "Folder",
"google_takeout": "Google takeout",
"DEDUPLICATE_FILES": "Deduplicate files",
"NO_DUPLICATES_FOUND": "You've no duplicate files that can be cleared",
"NO_DUPLICATES_FOUND": "You have no duplicate files that can be cleared",
"FILES": "files",
"EACH": "each",
"DEDUPLICATE_BASED_ON_SIZE": "The following files were clubbed based on their sizes, please review and delete items you believe are duplicates",

View File

@@ -19,7 +19,7 @@
"ENTER_OTT": "Codice di verifica",
"RESEND_MAIL": "Reinvia codice",
"VERIFY": "Verifica",
"generic_error": "",
"generic_error": "Qualcosa è andato storto",
"generic_error_retry": "Qualcosa è andato storto, per favore riprova",
"INVALID_CODE": "Codice di verifica non valido",
"EXPIRED_CODE": "Il tuo codice di verifica è scaduto",

View File

@@ -10,7 +10,7 @@
"NEW_USER": "Naujas platformoje „Ente“",
"EXISTING_USER": "Esamas naudotojas",
"enter_name": "Įveskite vardą",
"PUBLIC_UPLOADER_NAME_MESSAGE": "Pridėkite vardą, kad draugai žinotų, kam padėkoti už šias puikias nuotraukas!",
"PUBLIC_UPLOADER_NAME_MESSAGE": "Pridėkite vardą, kad draugai žinotų, kam padėkoti už šias puikias nuotraukas.",
"ENTER_EMAIL": "Įveskite el. pašto adresą",
"EMAIL_ERROR": "Įveskite tinkamą el. paštą.",
"required": "Privaloma",
@@ -37,7 +37,7 @@
"PASSPHRASE_HINT": "Slaptažodis",
"CONFIRM_PASSPHRASE": "Patvirtinti slaptažodį",
"REFERRAL_CODE_HINT": "Kaip išgirdote apie „Ente“? (nebūtina)",
"REFERRAL_INFO": "Mes nesekame programų diegimų. Mums padėtų, jei pasakytumėte, kur mus radote!",
"REFERRAL_INFO": "Mes nesekame programų diegimų. Mums padėtų, jei pasakytumėte, kur mus radote.",
"PASSPHRASE_MATCH_ERROR": "Slaptažodžiai nesutampa.",
"welcome_to_ente_title": "Sveiki atvykę į „<a/>“",
"welcome_to_ente_subtitle": "Visapusiškai užšifruota nuotraukų saugykla ir bendrinimas",
@@ -83,7 +83,7 @@
"previous_key": "Ankstesnis (←)",
"next_key": "Sekantis (→)",
"title_photos": "„Ente“ nuotraukos",
"title_auth": "„Ente“ tap. nust.",
"title_auth": "„Ente Auth“",
"title_accounts": "„Ente“ paskyros",
"UPLOAD_FIRST_PHOTO": "Įkelkite pirmąją nuotrauką",
"IMPORT_YOUR_FOLDERS": "Importuokite aplankus",
@@ -286,7 +286,7 @@
"SEND_OTT": "Siųsti OTP",
"EMAIl_ALREADY_OWNED": "El. paštas jau paimtas.",
"ETAGS_BLOCKED": "<p>Mums nepavyko įkelti toliau esančių failų dėl jūsų naršyklės konfigūracijos.</p><p>Išjunkite visus priedus, kurie gali trukdyti „Ente“ naudoti <code>„eTags“</code> dideliems failams įkelti, arba naudokite mūsų <a>darbalaukio programą</a>, kad galėtumėte patikimiau importuoti.</p>",
"LIVE_PHOTOS_DETECTED": "",
"LIVE_PHOTOS_DETECTED": "Nuotraukų ir vaizdo įrašų failai iš Gyvosios nuotraukos buvo sujungti į vieną failą",
"RETRY_FAILED": "Pakartoti nepavykusius įkėlimus",
"FAILED_UPLOADS": "Nepavykę įkėlimai ",
"failed_uploads_hint": "Kai baigsis įkėlimas, bus parinktis bandyti tai pakartoti",
@@ -302,13 +302,13 @@
"TOO_LARGE_UPLOADS": "Dideli failai",
"LARGER_THAN_AVAILABLE_STORAGE_UPLOADS": "Nepakankama saugykla",
"LARGER_THAN_AVAILABLE_STORAGE_INFO": "Šie failai nebuvo įkelti, nes jie viršija jūsų saugyklos plano didžiausio dydžio ribą.",
"TOO_LARGE_INFO": "",
"THUMBNAIL_GENERATION_FAILED_INFO": "",
"upload_to_album": "",
"add_to_album": "",
"TOO_LARGE_INFO": "Šie failai nebuvo įkelti, nes jie viršija didžiausio failo dydžio ribą.",
"THUMBNAIL_GENERATION_FAILED_INFO": "Šie failai buvo įkelti, bet, deja, negalėjome sugeneruoti jų miniatiūrų.",
"upload_to_album": "Įkelti į albumą",
"add_to_album": "Pridėti į albumą",
"move_to_album": "Perkelti į albumą",
"unhide_to_album": "",
"restore_to_album": "",
"unhide_to_album": "Rodyti į albumą",
"restore_to_album": "Atkurti į albumą",
"section_all": "Viskas",
"section_uncategorized": "Nekategorizuoti",
"section_archive": "Archyvas",
@@ -320,87 +320,87 @@
"unarchive": "Išarchyvuoti",
"unarchive_album": "Išarchyvuoti albumą",
"hide_collection": "Slėpti albumą",
"unhide_collection": "",
"MOVE": "",
"add": "",
"REMOVE": "",
"YES_REMOVE": "",
"REMOVE_FROM_COLLECTION": "",
"MOVE_TO_TRASH": "",
"TRASH_FILES_MESSAGE": "",
"TRASH_FILE_MESSAGE": "",
"unhide_collection": "Rodyti albumą",
"MOVE": "Perkelti",
"add": "Pridėti",
"REMOVE": "Pašalinti",
"YES_REMOVE": "Taip, pašalinti",
"REMOVE_FROM_COLLECTION": "Pašalinti iš albumo",
"MOVE_TO_TRASH": "Perkelti į šiukšlinę",
"TRASH_FILES_MESSAGE": "Pasirinkti failai bus pašalinti iš visų albumų ir perkelti į šiukšlinę.",
"TRASH_FILE_MESSAGE": "Failas bus pašalintas iš visų albumų ir perkeltas į šiukšlinę.",
"DELETE_PERMANENTLY": "Ištrinti negrįžtamai",
"RESTORE": "Atkurti",
"empty_trash": "",
"empty_trash_title": "",
"empty_trash_message": "",
"leave_album": "",
"leave_shared_album_title": "",
"leave_shared_album_message": "",
"leave_shared_album": "",
"NOT_FILE_OWNER": "",
"CONFIRM_SELF_REMOVE_MESSAGE": "",
"CONFIRM_SELF_AND_OTHER_REMOVE_MESSAGE": "",
"empty_trash": "Ištuštinti šiukšlinę",
"empty_trash_title": "Ištuštinti šiukšlinę?",
"empty_trash_message": "Šie failai bus negrįžtamai ištrinti iš jūsų „Ente“ paskyros.",
"leave_album": "Palikti albumą",
"leave_shared_album_title": "Palikti bendrinamą albumą?",
"leave_shared_album_message": "Paliksite albumą ir jis nebebus jums matomas.",
"leave_shared_album": "Taip, palikti",
"NOT_FILE_OWNER": "Negalite ištrinti failų bendrinamame albume.",
"CONFIRM_SELF_REMOVE_MESSAGE": "Pasirinkti elementai bus pašalinti iš šio albumo. Elementai, kurie yra tik šiame albume, bus perkelti į Nekategorizuoti.",
"CONFIRM_SELF_AND_OTHER_REMOVE_MESSAGE": "Kai kuriuos elementus, kuriuos šalinate, pridėjo kiti žmonės, todėl prarasite prieigą prie jų.",
"sort_by_creation_time_ascending": "Seniausią",
"sort_by_updation_time_descending": "Paskutinį kartą atnaujintą",
"sort_by_name": "Pavadinimą",
"FIX_CREATION_TIME": "",
"FIX_CREATION_TIME_IN_PROGRESS": "",
"CREATION_TIME_UPDATED": "",
"UPDATE_CREATION_TIME_NOT_STARTED": "",
"UPDATE_CREATION_TIME_COMPLETED": "",
"UPDATE_CREATION_TIME_COMPLETED_WITH_ERROR": "",
"FIX_CREATION_TIME": "Taisyti laiką",
"FIX_CREATION_TIME_IN_PROGRESS": "Pataisomas laikas",
"CREATION_TIME_UPDATED": "Atnaujintas failo laikas",
"UPDATE_CREATION_TIME_NOT_STARTED": "Pasirinkite parinktį, kurią norite naudoti",
"UPDATE_CREATION_TIME_COMPLETED": "Sėkmingai atnaujinti visi failai",
"UPDATE_CREATION_TIME_COMPLETED_WITH_ERROR": "Nepavyko atnaujinti kai kurių failų laiko. Pakartokite.",
"CAPTION_CHARACTER_LIMIT": "Ne daugiau kaip 5000 simbolių",
"DATE_TIME_ORIGINAL": "Exif: originali datos laikas",
"DATE_TIME_DIGITIZED": "Exif: skaitmeninta datos laikas",
"METADATA_DATE": "Exif: metaduomenų data",
"CUSTOM_TIME": "Pasirinktinis laikas",
"REOPEN_PLAN_SELECTOR_MODAL": "",
"OPEN_PLAN_SELECTOR_MODAL_FAILED": "",
"REOPEN_PLAN_SELECTOR_MODAL": "Iš naujo atidaryti planus",
"OPEN_PLAN_SELECTOR_MODAL_FAILED": "Nepavyko atidaryti planų.",
"sharing_details": "Bendrinimo išsami informacija",
"modify_sharing": "",
"ADD_COLLABORATORS": "",
"ADD_NEW_EMAIL": "",
"shared_with_people_count_zero": "",
"shared_with_people_count_one": "",
"shared_with_people_count": "",
"participants_count_zero": "",
"participants_count_one": "",
"participants_count": "",
"ADD_VIEWERS": "",
"CHANGE_PERMISSIONS_TO_VIEWER": "",
"CHANGE_PERMISSIONS_TO_COLLABORATOR": "",
"CONVERT_TO_VIEWER": "",
"CONVERT_TO_COLLABORATOR": "",
"CHANGE_PERMISSION": "",
"REMOVE_PARTICIPANT": "",
"CONFIRM_REMOVE": "",
"MANAGE": "",
"ADDED_AS": "",
"COLLABORATOR_RIGHTS": "",
"REMOVE_PARTICIPANT_HEAD": "",
"OWNER": "",
"modify_sharing": "Modifikuoti bendrinimą",
"ADD_COLLABORATORS": "Pridėti bendradarbių",
"ADD_NEW_EMAIL": "Pridėti naują el. paštą",
"shared_with_people_count_zero": "Bendrinti su konkrečiais žmonėmis",
"shared_with_people_count_one": "Bendrinta su žmogumi",
"shared_with_people_count": "Bendrinta su {{count, number}} žmonėmis (-ių)",
"participants_count_zero": "Nėra dalyvių",
"participants_count_one": "Dalyvis",
"participants_count": "{count, number} dalyviai (-ų)",
"ADD_VIEWERS": "Pridėti žiūrėtojus",
"CHANGE_PERMISSIONS_TO_VIEWER": "<p>{{selectedEmail}} negalės pridėti daugiau nuotraukų į albumą.</p><p>Jie vis tiek galės pašalinti savo pridėtas nuotraukas</p>",
"CHANGE_PERMISSIONS_TO_COLLABORATOR": "{{selectedEmail}} galės pridėti nuotraukų į albumą",
"CONVERT_TO_VIEWER": "Taip, keisti į žiūrėtoją",
"CONVERT_TO_COLLABORATOR": "Taip, keisti į bendradarbį",
"CHANGE_PERMISSION": "Keisti leidimą?",
"REMOVE_PARTICIPANT": "Pašalinti?",
"CONFIRM_REMOVE": "Taip, pašalinti",
"MANAGE": "Tvarkyti",
"ADDED_AS": "Pridėta kaip",
"COLLABORATOR_RIGHTS": "Bendradarbiai gali pridėti nuotraukų ir vaizdo įrašų į bendrintą albumą",
"REMOVE_PARTICIPANT_HEAD": "Pašalinti dalyvį",
"OWNER": "Savininkas",
"COLLABORATORS": "Bendradarbiai",
"ADD_MORE": "Pridėti daugiau",
"VIEWERS": "Žiūrėtojai",
"OR_ADD_EXISTING": "",
"REMOVE_PARTICIPANT_MESSAGE": "",
"NOT_FOUND": "",
"LINK_EXPIRED": "",
"LINK_EXPIRED_MESSAGE": "",
"OR_ADD_EXISTING": "Arba pasirinkite esamą",
"REMOVE_PARTICIPANT_MESSAGE": "<p>{{selectedEmail}} bus pašalintas iš albumo.</p><p>Visos jų pridėtos nuotraukos taip pat bus pašalintos iš albumo</p>",
"NOT_FOUND": "404 nerasta.",
"LINK_EXPIRED": "Nuoroda nebegalioja",
"LINK_EXPIRED_MESSAGE": "Ši nuoroda nebegalioja arba yra išjungta.",
"MANAGE_LINK": "Tvarkyti nuorodą",
"LINK_TOO_MANY_REQUESTS": "",
"LINK_TOO_MANY_REQUESTS": "Atsiprašome. Šis albumas buvo peržiūrėtas per daug įrenginiuose.",
"FILE_DOWNLOAD": "Leisti atsisiuntimus",
"link_password_lock": "",
"PUBLIC_COLLECT": "",
"LINK_DEVICE_LIMIT": "",
"NO_DEVICE_LIMIT": "",
"LINK_EXPIRY": "",
"NEVER": "",
"DISABLE_FILE_DOWNLOAD": "",
"DISABLE_FILE_DOWNLOAD_MESSAGE": "",
"SHARED_USING": "",
"SHARING_REFERRAL_CODE": "",
"link_password_lock": "Slaptažodžio užraktas",
"PUBLIC_COLLECT": "Leisti pridėti nuotraukų",
"LINK_DEVICE_LIMIT": "Įrenginių riba",
"NO_DEVICE_LIMIT": "Jokio",
"LINK_EXPIRY": "Nuorodos galiojimo laikas",
"NEVER": "Niekada",
"DISABLE_FILE_DOWNLOAD": "Išjungti atsisiuntimą",
"DISABLE_FILE_DOWNLOAD_MESSAGE": "<p>Ar tikrai norite išjungti failų atsisiuntimo mygtuką?</p><p>Žiūrėtojai vis tiek gali daryti ekrano kopijas arba išsaugoti nuotraukų kopijas naudojant išorinius įrankius.</p>",
"SHARED_USING": "Bendrinta naudojant ",
"SHARING_REFERRAL_CODE": "Naudokite kodą <strong>{{{referralCode}}</strong>, kad gautumėte 10 GB nemokamai",
"LIVE": "GYVAI",
"DISABLE_PASSWORD": "Išjungti slaptažodžio užraktą",
"DISABLE_PASSWORD_MESSAGE": "Ar tikrai norite išjungti slaptažodžio užraktą?",
@@ -630,7 +630,7 @@
"passkey_login_credential_hint": "Jei slaptaraktai yra kitame įrenginyje, galite atidaryti šį puslapį tame įrenginyje ir patvirtinti.",
"passkeys_not_supported": "Šioje naršyklėje nepalaikomi slaptaraktai.",
"try_again": "Bandyti dar kartą",
"check_status": "Patikrinti būseną",
"check_status": "Tikrinti būseną",
"passkey_login_instructions": "Sekite žingsnius iš naršyklės, kad tęstumėte prisijungimą.",
"passkey_login": "Prisijungti su slaptaraktu",
"passkey": "Slaptaraktas",

View File

@@ -19,7 +19,7 @@
"ENTER_OTT": "Verificatiecode",
"RESEND_MAIL": "Code opnieuw versturen",
"VERIFY": "Verifiëren",
"generic_error": "",
"generic_error": "Er ging iets mis",
"generic_error_retry": "Er is iets fout gegaan, probeer het opnieuw",
"INVALID_CODE": "Ongeldige verificatiecode",
"EXPIRED_CODE": "Uw verificatiecode is verlopen",
@@ -48,7 +48,7 @@
"enter_file_name": "Bestandsnaam",
"close": "Sluiten",
"no": "Nee",
"nothing_here": "",
"nothing_here": "Hier is nog niets te zien",
"upload": "Uploaden",
"import": "Importeren",
"add_photos": "Foto's toevoegen",

View File

@@ -363,6 +363,7 @@ export interface PersonSuggestionsAndChoices {
export const _suggestionsAndChoicesForPerson = async (
person: CGroupPerson,
): Promise<PersonSuggestionsAndChoices> => {
console.time("prep");
const startTime = Date.now();
const personClusters = person.cgroup.data.assigned;
@@ -391,12 +392,13 @@ export const _suggestionsAndChoicesForPerson = async (
.filter((e) => !!e);
// Randomly sample faces to limit the O(n^2) cost.
const sampledPersonFaceEmbeddings = shuffled(personFaceEmbeddings).slice(
0,
100,
);
const sampledPersonEmbeddings = randomSample(personFaceEmbeddings, 50);
const suggestedClusters: FaceCluster[] = [];
console.timeEnd("prep");
console.time("loop");
const candidateClustersAndSimilarity: [FaceCluster, number][] = [];
for (const cluster of clusters) {
const { id, faces } = cluster;
@@ -405,23 +407,53 @@ export const _suggestionsAndChoicesForPerson = async (
if (personClusterIDs.has(id)) continue;
if (ignoredClusterIDs.has(id)) continue;
let suggest = false;
for (const fi of faces) {
const ei = embeddingByFaceID.get(fi);
if (!ei) continue;
for (const ej of sampledPersonFaceEmbeddings) {
const csim = dotProduct(ei, ej);
if (csim >= 0.6) {
suggest = true;
break;
if (process.env.NEXT_PUBLIC_ENTE_WIP_CL_TODO) {
/* direct compare method TODO-Cluster remove me */
let suggest = false;
for (const fi of faces) {
const ei = embeddingByFaceID.get(fi);
if (!ei) continue;
for (const ej of sampledPersonEmbeddings) {
const csim = dotProduct(ei, ej);
if (csim >= 0.6) {
suggest = true;
break;
}
}
if (suggest) break;
}
if (suggest) candidateClustersAndSimilarity.push([cluster, 0]);
} else {
const sampledOtherEmbeddings = randomSample(faces, 50)
.map((id) => embeddingByFaceID.get(id))
.filter((e) => !!e);
/* cosine similarities */
const csims: number[] = [];
for (const other of sampledOtherEmbeddings) {
for (const embedding of sampledPersonEmbeddings) {
csims.push(dotProduct(embedding, other));
}
}
if (suggest) break;
}
csims.sort();
if (suggest) suggestedClusters.push(cluster);
if (csims.length == 0) continue;
const medianSim = ensure(csims[Math.floor(csims.length / 2)]);
if (medianSim > 0.48) {
candidateClustersAndSimilarity.push([cluster, medianSim]);
}
}
}
console.timeEnd("loop");
console.time("post");
candidateClustersAndSimilarity.sort(([, a], [, b]) => b - a);
const suggestedClusters = candidateClustersAndSimilarity.map(([c]) => c);
// Annotate the clusters with the information that the UI needs to show its
// preview faces.
@@ -449,21 +481,28 @@ export const _suggestionsAndChoicesForPerson = async (
if (previewFaces.length == 4) break;
}
if (previewFaces.length == 0) return undefined;
return { ...cluster, previewFaces };
};
const toPreviewableList = (clusters: FaceCluster[]) =>
clusters.map(toPreviewable).filter((p) => !!p);
const sortBySize = (entries: { faces: unknown[] }[]) =>
entries.sort((a, b) => b.faces.length - a.faces.length);
const acceptedChoices = personClusters
.map(toPreviewable)
.map((p) => ({ ...p, accepted: true }));
const acceptedChoices = toPreviewableList(personClusters).map((p) => ({
...p,
accepted: true,
}));
sortBySize(acceptedChoices);
const ignoredChoices = ignoredClusters
.map(toPreviewable)
.map((p) => ({ ...p, accepted: false }));
const ignoredChoices = toPreviewableList(ignoredClusters).map((p) => ({
...p,
accepted: false,
}));
// Ensure that the first item in the choices is not an ignored one, even if
// that is what we'd have ended up with if we sorted by size.
@@ -474,9 +513,11 @@ export const _suggestionsAndChoicesForPerson = async (
const choices = [firstChoice, ...restChoices];
sortBySize(suggestedClusters);
// sortBySize(suggestedClusters);
// Limit to the number of suggestions shown in a single go.
const suggestions = suggestedClusters.slice(0, 80).map(toPreviewable);
const suggestions = toPreviewableList(suggestedClusters.slice(0, 80));
console.timeEnd("post");
log.info(
`Generated ${suggestions.length} suggestions for ${person.id} (${Date.now() - startTime} ms)`,
@@ -484,3 +525,6 @@ export const _suggestionsAndChoicesForPerson = async (
return { choices, suggestions };
};
const randomSample = <T>(items: T[], n: number) =>
items.length < n ? items : shuffled(items).slice(0, n);