mirror of
https://github.com/KokaKiwi/BarInsta
synced 2024-12-23 05:16:58 +00:00
Merge branch 'master' into feature/multistack-navigation
This commit is contained in:
commit
2f7a68341d
@ -60,16 +60,6 @@
|
||||
"bug"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "vojta-horanek",
|
||||
"name": "Vojtěch Hořánek",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/12630566?v=4",
|
||||
"profile": "https://vojtechh.eu/",
|
||||
"contributions": [
|
||||
"code",
|
||||
"translation"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "MeLlamoPablo",
|
||||
"name": "Pablo Rodríguez",
|
||||
@ -79,6 +69,33 @@
|
||||
"code"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "tcely",
|
||||
"name": "tcely",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/138864?v=4",
|
||||
"profile": "https://github.com/tcely",
|
||||
"contributions": [
|
||||
"code"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "Vonter",
|
||||
"name": "Vonter",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/25414711?v=4",
|
||||
"profile": "https://github.com/Vonter",
|
||||
"contributions": [
|
||||
"code"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "raniapl",
|
||||
"name": "Rania Pilioura",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/56370534?v=4",
|
||||
"profile": "https://github.com/raniapl",
|
||||
"contributions": [
|
||||
"code"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "stamatiap",
|
||||
"name": "Stamatia Papageorgiou",
|
||||
@ -90,19 +107,29 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "The-EDev",
|
||||
"name": "Farook Al-Sammarraie",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/60552923?v=4",
|
||||
"profile": "https://github.com/The-EDev",
|
||||
"login": "Zopieux",
|
||||
"name": "Alexandre Macabies",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/81353?v=4",
|
||||
"profile": "https://github.com/Zopieux",
|
||||
"contributions": [
|
||||
"code"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "Zopieux",
|
||||
"name": "Alexandre Macabies",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/81353?v=4",
|
||||
"profile": "https://github.com/Zopieux",
|
||||
"login": "vojta-horanek",
|
||||
"name": "Vojtěch Hořánek",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/12630566?v=4",
|
||||
"profile": "https://vojtechh.eu/",
|
||||
"contributions": [
|
||||
"code",
|
||||
"translation"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "The-EDev",
|
||||
"name": "Farook Al-Sammarraie",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/60552923?v=4",
|
||||
"profile": "https://github.com/The-EDev",
|
||||
"contributions": [
|
||||
"code"
|
||||
]
|
||||
@ -135,6 +162,17 @@
|
||||
"financial"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "Martin5001",
|
||||
"name": "Martin Krejčí",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/35201200?v=4",
|
||||
"profile": "https://github.com/Martin5001",
|
||||
"contributions": [
|
||||
"bug",
|
||||
"ideas",
|
||||
"translation"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "Shadowspear123",
|
||||
"name": "Shadowspear123",
|
||||
@ -266,6 +304,15 @@
|
||||
"translation"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "Lego8486",
|
||||
"name": "Ten_Lego",
|
||||
"avatar_url": "https://avatars1.githubusercontent.com/u/47414485",
|
||||
"profile": "https://github.com/Lego8486",
|
||||
"contributions": [
|
||||
"translation"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "MoaufmKlo",
|
||||
"name": "MoaufmKlo",
|
||||
@ -338,6 +385,15 @@
|
||||
"translation"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "rex07",
|
||||
"name": "Rex_sa",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/13156001?v=4",
|
||||
"profile": "https://github.com/rex07",
|
||||
"contributions": [
|
||||
"translation"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "rikishi0071",
|
||||
"name": "rikishi0071",
|
||||
@ -375,10 +431,10 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "Lego8486",
|
||||
"name": "Ten_Lego",
|
||||
"avatar_url": "https://avatars1.githubusercontent.com/u/47414485",
|
||||
"profile": "https://github.com/Lego8486",
|
||||
"login": "Umeaboy",
|
||||
"name": "Kristoffer Grundström",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/714473?v=4",
|
||||
"profile": "https://github.com/Umeaboy",
|
||||
"contributions": [
|
||||
"translation"
|
||||
]
|
||||
@ -418,6 +474,15 @@
|
||||
"contributions": [
|
||||
"translation"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "2hot2exist",
|
||||
"name": "2hot2exist",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/84233003?v=4",
|
||||
"profile": "https://github.com/2hot2exist",
|
||||
"contributions": [
|
||||
"translation"
|
||||
]
|
||||
}
|
||||
],
|
||||
"contributorsPerLine": 6,
|
||||
|
33
README.md
33
README.md
@ -9,7 +9,7 @@
|
||||
[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://makeapullrequest.com)
|
||||
[![GPLv3 license](https://img.shields.io/badge/License-GPLv3-blue.svg)](./LICENSE)
|
||||
[![GitHub stars](https://img.shields.io/github/stars/austinhuang0131/instagrabber.svg?style=social&label=Star)](https://GitHub.com/austinhuang0131/barinsta/stargazers/)<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
|
||||
[![All Contributors](https://img.shields.io/badge/all_contributors-44-orange.svg)](#contributors)
|
||||
[![All Contributors](https://img.shields.io/badge/all_contributors-51-orange.svg)](#contributors)
|
||||
<!-- ALL-CONTRIBUTORS-BADGE:END -->
|
||||
|
||||
Instagram client; previously known as InstaGrabber.
|
||||
@ -59,59 +59,68 @@ Prominent contributors are listed here in the [all-contributors](https://allcont
|
||||
<td align="center"><a href="https://github.com/zerrium"><img src="https://avatars.githubusercontent.com/u/58355441?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Zerrium</b></sub></a><br /><a href="https://github.com/austinhuang0131/barinsta/commits?author=zerrium" title="Code">💻</a></td>
|
||||
<td align="center"><a href="https://github.com/junhuicoding"><img src="https://avatars.githubusercontent.com/u/54289027?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Chua Jun Hui</b></sub></a><br /><a href="https://github.com/austinhuang0131/barinsta/commits?author=junhuicoding" title="Code">💻</a></td>
|
||||
<td align="center"><a href="https://github.com/andersonvom"><img src="https://avatars3.githubusercontent.com/u/69922?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Anderson Mesquita</b></sub></a><br /><a href="https://github.com/austinhuang0131/barinsta/commits?author=andersonvom" title="Code">💻</a> <a href="https://github.com/austinhuang0131/barinsta/issues?q=author%3Aandersonvom" title="Bug reports">🐛</a></td>
|
||||
<td align="center"><a href="https://github.com/MeLlamoPablo"><img src="https://avatars.githubusercontent.com/u/11708035?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Pablo Rodríguez</b></sub></a><br /><a href="https://github.com/austinhuang0131/barinsta/commits?author=MeLlamoPablo" title="Code">💻</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><a href="https://github.com/tcely"><img src="https://avatars.githubusercontent.com/u/138864?v=4?s=100" width="100px;" alt=""/><br /><sub><b>tcely</b></sub></a><br /><a href="https://github.com/austinhuang0131/barinsta/commits?author=tcely" title="Code">💻</a></td>
|
||||
<td align="center"><a href="https://github.com/Vonter"><img src="https://avatars.githubusercontent.com/u/25414711?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Vonter</b></sub></a><br /><a href="https://github.com/austinhuang0131/barinsta/commits?author=Vonter" title="Code">💻</a></td>
|
||||
<td align="center"><a href="https://github.com/raniapl"><img src="https://avatars.githubusercontent.com/u/56370534?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Rania Pilioura</b></sub></a><br /><a href="https://github.com/austinhuang0131/barinsta/commits?author=raniapl" title="Code">💻</a></td>
|
||||
<td align="center"><a href="https://github.com/stamatiap"><img src="https://avatars.githubusercontent.com/u/57223967?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Stamatia Papageorgiou</b></sub></a><br /><a href="https://github.com/austinhuang0131/barinsta/commits?author=stamatiap" title="Code">💻</a> <a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/Zopieux"><img src="https://avatars.githubusercontent.com/u/81353?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Alexandre Macabies</b></sub></a><br /><a href="https://github.com/austinhuang0131/barinsta/commits?author=Zopieux" title="Code">💻</a></td>
|
||||
<td align="center"><a href="https://vojtechh.eu/"><img src="https://avatars.githubusercontent.com/u/12630566?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Vojtěch Hořánek</b></sub></a><br /><a href="https://github.com/austinhuang0131/barinsta/commits?author=vojta-horanek" title="Code">💻</a> <a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><a href="https://github.com/MeLlamoPablo"><img src="https://avatars.githubusercontent.com/u/11708035?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Pablo Rodríguez</b></sub></a><br /><a href="https://github.com/austinhuang0131/barinsta/commits?author=MeLlamoPablo" title="Code">💻</a></td>
|
||||
<td align="center"><a href="https://github.com/stamatiap"><img src="https://avatars.githubusercontent.com/u/57223967?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Stamatia Papageorgiou</b></sub></a><br /><a href="https://github.com/austinhuang0131/barinsta/commits?author=stamatiap" title="Code">💻</a> <a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/The-EDev"><img src="https://avatars.githubusercontent.com/u/60552923?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Farook Al-Sammarraie</b></sub></a><br /><a href="https://github.com/austinhuang0131/barinsta/commits?author=The-EDev" title="Code">💻</a></td>
|
||||
<td align="center"><a href="https://github.com/Zopieux"><img src="https://avatars.githubusercontent.com/u/81353?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Alexandre Macabies</b></sub></a><br /><a href="https://github.com/austinhuang0131/barinsta/commits?author=Zopieux" title="Code">💻</a></td>
|
||||
<td align="center"><a href="https://snajdovski.github.io"><img src="https://avatars2.githubusercontent.com/u/42580385?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Stefan Najdovski</b></sub></a><br /><a href="#design-snajdovski" title="Design">🎨</a> <a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/CrazyMarvin"><img src="https://avatars3.githubusercontent.com/u/15004217?v=4?s=100" width="100px;" alt=""/><br /><sub><b>CrazyMarvin</b></sub></a><br /><a href="#financial-CrazyMarvin" title="Financial">💵</a></td>
|
||||
<td align="center"><a href="http://kevinthomas.dev"><img src="https://avatars2.githubusercontent.com/u/15370181?s=100" width="100px;" alt=""/><br /><sub><b>Kevin Thomas</b></sub></a><br /><a href="#financial-KevinNThomas" title="Financial">💵</a></td>
|
||||
<td align="center"><a href="https://github.com/Martin5001"><img src="https://avatars.githubusercontent.com/u/35201200?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Martin Krejčí</b></sub></a><br /><a href="https://github.com/austinhuang0131/barinsta/issues?q=author%3AMartin5001" title="Bug reports">🐛</a> <a href="#ideas-Martin5001" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/Shadowspear123"><img src="https://avatars1.githubusercontent.com/u/50462281?s=100" width="100px;" alt=""/><br /><sub><b>Shadowspear123</b></sub></a><br /><a href="#blog-Shadowspear123" title="Blogposts">📝</a> <a href="https://github.com/austinhuang0131/barinsta/issues?q=author%3AShadowspear123" title="Bug reports">🐛</a> <a href="#ideas-Shadowspear123" title="Ideas, Planning, & Feedback">🤔</a> <a href="#question-Shadowspear123" title="Answering Questions">💬</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><a href="https://kevinthomas.dev"><img src="https://avatars2.githubusercontent.com/u/15370181?s=100" width="100px;" alt=""/><br /><sub><b>Kevin Thomas</b></sub></a><br /><a href="#financial-KevinNThomas" title="Financial">💵</a></td>
|
||||
<td align="center"><a href="https://github.com/Shadowspear123"><img src="https://avatars1.githubusercontent.com/u/50462281?s=100" width="100px;" alt=""/><br /><sub><b>Shadowspear123</b></sub></a><br /><a href="#blog-Shadowspear123" title="Blogposts">📝</a> <a href="https://github.com/austinhuang0131/barinsta/issues?q=author%3AShadowspear123" title="Bug reports">🐛</a> <a href="#ideas-Shadowspear123" title="Ideas, Planning, & Feedback">🤔</a> <a href="#question-Shadowspear123" title="Answering Questions">💬</a></td>
|
||||
<td align="center"><a href="https://github.com/RickyM7"><img src="https://avatars3.githubusercontent.com/u/24703825?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Ricardo</b></sub></a><br /><a href="https://github.com/austinhuang0131/barinsta/issues?q=author%3ARickyM7" title="Bug reports">🐛</a> <a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/Akrai"><img src="https://avatars1.githubusercontent.com/u/5624597?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Akrai</b></sub></a><br /><a href="#ideas-Akrai" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/avtkal"><img src="https://avatars.githubusercontent.com/u/63205014?v=4?s=100" width="100px;" alt=""/><br /><sub><b>avtkal</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/cizordj"><img src="https://avatars2.githubusercontent.com/u/32869222?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Cézar Augusto</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><a href="https://github.com/dimitrist19"><img src="https://avatars.githubusercontent.com/u/56406468?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Dimitris T</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/farzadx"><img src="https://avatars2.githubusercontent.com/u/70059397?v=4?s=100" width="100px;" alt=""/><br /><sub><b>farzadx</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><a href="https://github.com/faydin"><img src="https://avatars2.githubusercontent.com/u/22706676?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Fatih Aydın</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/fouze555"><img src="https://avatars3.githubusercontent.com/u/71935341?v=4?s=100" width="100px;" alt=""/><br /><sub><b>fouze555</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/Galang23"><img src="https://avatars3.githubusercontent.com/u/13700948?s=100" width="100px;" alt=""/><br /><sub><b>Galang23</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/initdebugs"><img src="https://avatars0.githubusercontent.com/u/75781464?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Initdebugs</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><a href="https://janek.xyz/"><img src="https://avatars3.githubusercontent.com/u/8365659?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Jakub Janek</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/GenosseFlosse"><img src="https://avatars.githubusercontent.com/u/59205524?v=4?s=100" width="100px;" alt=""/><br /><sub><b>GenosseFlosse</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><a href="https://becauseofprog.fr/"><img src="https://avatars3.githubusercontent.com/u/24623168?s=100" width="100px;" alt=""/><br /><sub><b>kernoeb</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/Lego8486"><img src="https://avatars1.githubusercontent.com/u/47414485?s=100" width="100px;" alt=""/><br /><sub><b>Ten_Lego</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/MoaufmKlo"><img src="https://avatars1.githubusercontent.com/u/45636897?s=100" width="100px;" alt=""/><br /><sub><b>MoaufmKlo</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/nalinalini"><img src="https://avatars0.githubusercontent.com/u/65640431?v=4?s=100" width="100px;" alt=""/><br /><sub><b>nalinalini</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/peterge1998"><img src="https://avatars2.githubusercontent.com/u/47355238?s=100" width="100px;" alt=""/><br /><sub><b>peterge1998</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/PierreM0"><img src="https://avatars3.githubusercontent.com/u/71077853?v=4?s=100" width="100px;" alt=""/><br /><sub><b>PierreM0</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><a href="https://github.com/PierreM0"><img src="https://avatars3.githubusercontent.com/u/71077853?v=4?s=100" width="100px;" alt=""/><br /><sub><b>PierreM0</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/Pyrobauve"><img src="https://avatars.githubusercontent.com/u/48654473?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Pyrobauve</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/RAMAR-RAR"><img src="https://avatars3.githubusercontent.com/u/47423745?s=100" width="100px;" alt=""/><br /><sub><b>RAMAR-RAR</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/rohang02"><img src="https://avatars3.githubusercontent.com/u/47921164?v=4?s=100" width="100px;" alt=""/><br /><sub><b>rohang02</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/retiolus"><img src="https://avatars1.githubusercontent.com/u/65604466?v=4?s=100" width="100px;" alt=""/><br /><sub><b>retiolus</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/rex07"><img src="https://avatars.githubusercontent.com/u/13156001?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Rex_sa</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/rikishi0071"><img src="https://avatars3.githubusercontent.com/u/18183855?v=4?s=100" width="100px;" alt=""/><br /><sub><b>rikishi0071</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><a href="https://gitlab.com/sandboiii"><img src="https://avatars.githubusercontent.com/u/17468894?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Alexey Peschany</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/Sitavi"><img src="https://avatars.githubusercontent.com/u/80586127?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Sitavi</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://stillu.cc/"><img src="https://avatars2.githubusercontent.com/u/5843208?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Still Hsu</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/Lego8486"><img src="https://avatars1.githubusercontent.com/u/47414485?s=100" width="100px;" alt=""/><br /><sub><b>Ten_Lego</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/Umeaboy"><img src="https://avatars.githubusercontent.com/u/714473?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Kristoffer Grundström</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/wagnim"><img src="https://avatars0.githubusercontent.com/u/30241419?s=100" width="100px;" alt=""/><br /><sub><b>wagnim</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/wokija"><img src="https://avatars.githubusercontent.com/u/14982166?v=4?s=100" width="100px;" alt=""/><br /><sub><b>wokija</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><a href="https://github.com/ysakamoto"><img src="https://avatars3.githubusercontent.com/u/1331642?v=4?s=100" width="100px;" alt=""/><br /><sub><b>ysakamoto</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/ZDVokoun"><img src="https://avatars.githubusercontent.com/u/76393152?v=4?s=100" width="100px;" alt=""/><br /><sub><b>ZDVokoun</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/2hot2exist"><img src="https://avatars.githubusercontent.com/u/84233003?v=4?s=100" width="100px;" alt=""/><br /><sub><b>2hot2exist</b></sub></a><br /><a href="https://crowdin.com/project/instagrabber" title="Translation">🌍</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
@ -180,6 +180,7 @@ dependencies {
|
||||
implementation "androidx.constraintlayout:constraintlayout:2.0.4"
|
||||
implementation "androidx.preference:preference:1.1.1"
|
||||
implementation 'androidx.palette:palette:1.0.0'
|
||||
implementation 'androidx.documentfile:documentfile:1.0.1'
|
||||
|
||||
implementation 'com.google.guava:guava:27.0.1-android'
|
||||
|
||||
|
@ -52,7 +52,7 @@ class CameraActivity : BaseLanguageActivity() {
|
||||
setContentView(binding.root)
|
||||
Utils.transparentStatusBar(this, true, false)
|
||||
displayManager = getSystemService(DISPLAY_SERVICE) as DisplayManager
|
||||
outputDirectory = DownloadUtils.getCameraDir()
|
||||
outputDirectory = DownloadUtils.cameraDir
|
||||
cameraExecutor = Executors.newSingleThreadExecutor()
|
||||
displayManager.registerDisplayListener(displayListener, null)
|
||||
binding.viewFinder.post {
|
||||
|
@ -226,7 +226,7 @@ public final class FeedAdapterV2 extends ListAdapter<Media, RecyclerView.ViewHol
|
||||
|
||||
void onCommentsClick(final Media feedModel);
|
||||
|
||||
void onDownloadClick(final Media feedModel, final int childPosition);
|
||||
void onDownloadClick(final Media feedModel, final int childPosition, final View popupLocation);
|
||||
|
||||
void onEmailClick(final String emailId);
|
||||
|
||||
|
@ -28,7 +28,7 @@ public class FeedItemCallbackAdapter implements FeedAdapterV2.FeedItemCallback {
|
||||
public void onCommentsClick(final Media media) {}
|
||||
|
||||
@Override
|
||||
public void onDownloadClick(final Media media, final int childPosition) {}
|
||||
public void onDownloadClick(final Media media, final int childPosition, final View popupLocation) {}
|
||||
|
||||
@Override
|
||||
public void onEmailClick(final String emailId) {}
|
||||
|
@ -1,104 +0,0 @@
|
||||
package awais.instagrabber.adapters;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.recyclerview.widget.DiffUtil;
|
||||
import androidx.recyclerview.widget.ListAdapter;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public abstract class MultiSelectListAdapter<T extends MultiSelectListAdapter.Selectable, VH extends RecyclerView.ViewHolder> extends
|
||||
ListAdapter<T, VH> {
|
||||
|
||||
private boolean isSelecting;
|
||||
private OnItemClickListener<T> internalOnItemClickListener;
|
||||
private OnItemLongClickListener<T> internalOnLongItemClickListener;
|
||||
|
||||
private final List<T> selectedItems = new ArrayList<>();
|
||||
|
||||
protected MultiSelectListAdapter(@NonNull final DiffUtil.ItemCallback<T> diffCallback,
|
||||
final OnItemClickListener<T> clickListener,
|
||||
final OnItemLongClickListener<T> longClickListener) {
|
||||
super(diffCallback);
|
||||
internalOnItemClickListener = (item, position) -> {
|
||||
if (isSelecting) {
|
||||
toggleSelection(item, position);
|
||||
}
|
||||
if (clickListener == null) {
|
||||
return;
|
||||
}
|
||||
clickListener.onItemClick(item, position);
|
||||
};
|
||||
internalOnLongItemClickListener = (item, position) -> {
|
||||
if (!isSelecting) {
|
||||
isSelecting = true;
|
||||
}
|
||||
toggleSelection(item, position);
|
||||
if (longClickListener == null) {
|
||||
return true;
|
||||
}
|
||||
return longClickListener.onItemLongClick(item, position);
|
||||
};
|
||||
}
|
||||
|
||||
public OnItemClickListener<T> getInternalOnItemClickListener() {
|
||||
return internalOnItemClickListener;
|
||||
}
|
||||
|
||||
public OnItemLongClickListener<T> getInternalOnLongItemClickListener() {
|
||||
return internalOnLongItemClickListener;
|
||||
}
|
||||
|
||||
private void toggleSelection(final T item, final int position) {
|
||||
if (item == null) {
|
||||
return;
|
||||
}
|
||||
if (selectedItems.size() >= 100) {
|
||||
// Toast.makeText(mainActivity, R.string.downloader_too_many, Toast.LENGTH_SHORT);
|
||||
return;
|
||||
}
|
||||
if (item.isSelected()) {
|
||||
item.setSelected(false);
|
||||
selectedItems.remove(item);
|
||||
} else {
|
||||
item.setSelected(true);
|
||||
selectedItems.add(item);
|
||||
}
|
||||
if (selectedItems.size() == 0) {
|
||||
isSelecting = false;
|
||||
}
|
||||
notifyItemChanged(position);
|
||||
}
|
||||
|
||||
public boolean isSelecting() {
|
||||
return isSelecting;
|
||||
}
|
||||
|
||||
public List<T> getSelectedModels() {
|
||||
return selectedItems;
|
||||
}
|
||||
|
||||
public void clearSelection() {
|
||||
for (final T item : selectedItems) {
|
||||
item.setSelected(false);
|
||||
}
|
||||
selectedItems.clear();
|
||||
isSelecting = false;
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
public interface Selectable {
|
||||
boolean isSelected();
|
||||
|
||||
void setSelected(boolean selected);
|
||||
}
|
||||
|
||||
public interface OnItemClickListener<T> {
|
||||
void onItemClick(T item, int position);
|
||||
}
|
||||
|
||||
public interface OnItemLongClickListener<T> {
|
||||
boolean onItemLongClick(T item, int position);
|
||||
}
|
||||
}
|
@ -122,7 +122,6 @@ public final class CommentViewHolder extends RecyclerView.ViewHolder {
|
||||
}
|
||||
|
||||
private void setLikes(@NonNull final Comment comment, final boolean isReply) {
|
||||
// final String likesString = itemView.getResources().getQuantityString(R.plurals.likes_count, likes, likes);
|
||||
binding.likes.setText(String.valueOf(comment.getCommentLikeCount()));
|
||||
binding.likes.setOnLongClickListener(v -> {
|
||||
if (commentCallback == null) return false;
|
||||
@ -150,7 +149,6 @@ public final class CommentViewHolder extends RecyclerView.ViewHolder {
|
||||
final int replies = comment.getChildCommentCount();
|
||||
binding.replies.setVisibility(View.VISIBLE);
|
||||
final String text = isReply ? "" : String.valueOf(replies);
|
||||
// final String string = itemView.getResources().getQuantityString(R.plurals.replies_count, replies, replies);
|
||||
binding.replies.setText(text);
|
||||
binding.replies.setOnClickListener(v -> {
|
||||
if (commentCallback == null) return;
|
||||
|
@ -47,7 +47,9 @@ public abstract class FeedItemViewHolder extends RecyclerView.ViewHolder {
|
||||
setupComments(media);
|
||||
setupCaption(media);
|
||||
if (media.getType() != MediaItemType.MEDIA_TYPE_SLIDER) {
|
||||
bottomBinding.btnDownload.setOnClickListener(v -> feedItemCallback.onDownloadClick(media, -1));
|
||||
bottomBinding.btnDownload.setOnClickListener(v ->
|
||||
feedItemCallback.onDownloadClick(media, -1, null)
|
||||
);
|
||||
}
|
||||
bindItem(media);
|
||||
}
|
||||
|
@ -59,11 +59,15 @@ public class FeedSliderViewHolder extends FeedItemViewHolder {
|
||||
final String text = (position + 1) + "/" + sliderItemLen;
|
||||
binding.mediaCounter.setText(text);
|
||||
setDimensions(binding.mediaList, sliderItems.get(position));
|
||||
binding.itemFeedBottom.btnDownload.setOnClickListener(v -> feedItemCallback.onDownloadClick(feedModel, position));
|
||||
binding.itemFeedBottom.btnDownload.setOnClickListener(v ->
|
||||
feedItemCallback.onDownloadClick(feedModel, position, binding.itemFeedBottom.btnDownload)
|
||||
);
|
||||
}
|
||||
});
|
||||
setDimensions(binding.mediaList, sliderItems.get(0));
|
||||
binding.itemFeedBottom.btnDownload.setOnClickListener(v -> feedItemCallback.onDownloadClick(feedModel, 0));
|
||||
binding.itemFeedBottom.btnDownload.setOnClickListener(v ->
|
||||
feedItemCallback.onDownloadClick(feedModel, 0, binding.itemFeedBottom.btnDownload)
|
||||
);
|
||||
adapter.submitList(sliderItems);
|
||||
}
|
||||
|
||||
|
@ -126,10 +126,10 @@ public class CollectionPostsFragment extends Fragment implements SwipeRefreshLay
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDownloadClick(final Media feedModel, final int childPosition) {
|
||||
public void onDownloadClick(final Media feedModel, final int childPosition, final View popupLocation) {
|
||||
final Context context = getContext();
|
||||
if (context == null) return;
|
||||
DownloadUtils.showDownloadDialog(context, feedModel, childPosition);
|
||||
DownloadUtils.showDownloadDialog(context, feedModel, childPosition, popupLocation);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -145,10 +145,10 @@ public class HashTagFragment extends Fragment implements SwipeRefreshLayout.OnRe
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDownloadClick(final Media feedModel, final int childPosition) {
|
||||
public void onDownloadClick(final Media feedModel, final int childPosition, final View popupLocation) {
|
||||
final Context context = getContext();
|
||||
if (context == null) return;
|
||||
DownloadUtils.showDownloadDialog(context, feedModel, childPosition);
|
||||
DownloadUtils.showDownloadDialog(context, feedModel, childPosition, popupLocation);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -139,10 +139,10 @@ public class LocationFragment extends Fragment implements SwipeRefreshLayout.OnR
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDownloadClick(final Media feedModel, final int childPosition) {
|
||||
public void onDownloadClick(final Media feedModel, final int childPosition, final View popupLocation) {
|
||||
final Context context = getContext();
|
||||
if (context == null) return;
|
||||
DownloadUtils.showDownloadDialog(context, feedModel, childPosition);
|
||||
DownloadUtils.showDownloadDialog(context, feedModel, childPosition, popupLocation);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -446,7 +446,7 @@ public class PostViewV2Fragment extends Fragment implements EditTextDialogFragme
|
||||
|
||||
private void setupDownload() {
|
||||
bottom.download.setOnClickListener(v -> {
|
||||
DownloadUtils.showDownloadDialog(context, viewModel.getMedia(), sliderPosition);
|
||||
DownloadUtils.showDownloadDialog(context, viewModel.getMedia(), sliderPosition, bottom.download);
|
||||
});
|
||||
TooltipCompat.setTooltipText(bottom.download, getString(R.string.action_download));
|
||||
}
|
||||
@ -744,12 +744,6 @@ public class PostViewV2Fragment extends Fragment implements EditTextDialogFragme
|
||||
final Media media = viewModel.getMedia();
|
||||
final User profileModel = media.getUser();
|
||||
if (profileModel == null) return;
|
||||
final boolean isPrivate = profileModel.isPrivate();
|
||||
if (isPrivate) {
|
||||
final Context context = getContext();
|
||||
if (context == null) return;
|
||||
// Toast.makeText(context, R.string.share_private_post, Toast.LENGTH_LONG).show();
|
||||
}
|
||||
if (viewModel.isLoggedIn()) {
|
||||
final Context context = getContext();
|
||||
if (context == null) return;
|
||||
@ -776,7 +770,7 @@ public class PostViewV2Fragment extends Fragment implements EditTextDialogFragme
|
||||
}
|
||||
return true;
|
||||
} else if (itemId == R.id.share) {
|
||||
shareLink(media, isPrivate);
|
||||
shareLink(media, profileModel.isPrivate());
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@ -784,7 +778,7 @@ public class PostViewV2Fragment extends Fragment implements EditTextDialogFragme
|
||||
popupMenu.show();
|
||||
return;
|
||||
}
|
||||
shareLink(media, isPrivate);
|
||||
shareLink(media, false);
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -109,10 +109,10 @@ public final class SavedViewerFragment extends Fragment implements SwipeRefreshL
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDownloadClick(final Media feedModel, final int childPosition) {
|
||||
public void onDownloadClick(final Media feedModel, final int childPosition, final View popupLocation) {
|
||||
final Context context = getContext();
|
||||
if (context == null) return;
|
||||
DownloadUtils.showDownloadDialog(context, feedModel, childPosition);
|
||||
DownloadUtils.showDownloadDialog(context, feedModel, childPosition, popupLocation);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -473,11 +473,11 @@ public class StoryViewerFragment extends Fragment {
|
||||
poll = (PollSticker) tag;
|
||||
final List<Tally> tallies = poll.getTallies();
|
||||
final String[] choices = tallies.stream()
|
||||
.map(t -> (poll.getViewerVote() == tallies.indexOf(t) ? "√ " : "")
|
||||
.map(t -> (poll.getViewerVote() != null && poll.getViewerVote() == tallies.indexOf(t) ? "√ " : "")
|
||||
+ t.getText() + " (" + t.getCount() + ")" )
|
||||
.toArray(String[]::new);
|
||||
final ArrayAdapter adapter = new ArrayAdapter<>(context, android.R.layout.simple_list_item_1, choices);
|
||||
if (poll.getViewerVote() > -1) {
|
||||
if (poll.getViewerVote() != null) {
|
||||
new AlertDialog.Builder(context)
|
||||
.setTitle(R.string.voted_story_poll)
|
||||
.setAdapter(adapter, null)
|
||||
@ -577,16 +577,17 @@ public class StoryViewerFragment extends Fragment {
|
||||
.setPositiveButton(R.string.cancel, null)
|
||||
.show();
|
||||
} else if (tag instanceof QuizSticker) {
|
||||
quiz = (QuizSticker) tag;
|
||||
final List<Tally> tallies = quiz.getTallies();
|
||||
final String[] choices = tallies.stream().map(
|
||||
t -> (quiz.getViewerAnswer() == tallies.indexOf(t) ? "√ " : "") +
|
||||
t -> (quiz.getViewerAnswer() != null && quiz.getViewerAnswer() == tallies.indexOf(t) ? "√ " : "") +
|
||||
(quiz.getCorrectAnswer() == tallies.indexOf(t) ? "*** " : "") +
|
||||
t.getText() + " (" + t.getCount() + ")"
|
||||
).toArray(String[]::new);
|
||||
new AlertDialog.Builder(context)
|
||||
.setTitle(quiz.getViewerAnswer() > -1 ? getString(R.string.story_quizzed) : quiz.getQuestion())
|
||||
.setTitle(quiz.getViewerAnswer() != null ? getString(R.string.story_quizzed) : quiz.getQuestion())
|
||||
.setAdapter(new ArrayAdapter<>(context, android.R.layout.simple_list_item_1, choices), (d, w) -> {
|
||||
if (quiz.getViewerAnswer() == -1) {
|
||||
if (quiz.getViewerAnswer() == null) {
|
||||
sticking = true;
|
||||
storiesRepository.respondToQuiz(
|
||||
csrfToken,
|
||||
@ -901,7 +902,7 @@ public class StoryViewerFragment extends Fragment {
|
||||
}
|
||||
lastSlidePos = slidePos;
|
||||
|
||||
final MediaItemType itemType = currentStory.getMediaType();
|
||||
final MediaItemType itemType = currentStory.getType();
|
||||
|
||||
url = itemType == MediaItemType.MEDIA_TYPE_IMAGE
|
||||
? ResponseBodyUtils.getImageUrl(currentStory)
|
||||
@ -966,7 +967,7 @@ public class StoryViewerFragment extends Fragment {
|
||||
}
|
||||
|
||||
if (currentStory.getStoryCta() != null) {
|
||||
final StoryCta swipeUp = currentStory.getStoryCta().get(0).getLinks();
|
||||
final StoryCta swipeUp = currentStory.getStoryCta().get(0).getLinks().get(0);
|
||||
binding.swipeUp.setVisibility(View.VISIBLE);
|
||||
binding.swipeUp.setText(currentStory.getLinkText());
|
||||
final String swipeUpUrl = swipeUp.getWebUri();
|
||||
|
@ -120,10 +120,10 @@ public class TopicPostsFragment extends Fragment implements SwipeRefreshLayout.O
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDownloadClick(final Media feedModel, final int childPosition) {
|
||||
public void onDownloadClick(final Media feedModel, final int childPosition, final View popupLocation) {
|
||||
final Context context = getContext();
|
||||
if (context == null) return;
|
||||
DownloadUtils.showDownloadDialog(context, feedModel, childPosition);
|
||||
DownloadUtils.showDownloadDialog(context, feedModel, childPosition, popupLocation);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -116,10 +116,10 @@ public class FeedFragment extends Fragment implements SwipeRefreshLayout.OnRefre
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDownloadClick(final Media feedModel, final int childPosition) {
|
||||
public void onDownloadClick(final Media feedModel, final int childPosition, final View popupLocation) {
|
||||
final Context context = getContext();
|
||||
if (context == null) return;
|
||||
DownloadUtils.showDownloadDialog(context, feedModel, childPosition);
|
||||
DownloadUtils.showDownloadDialog(context, feedModel, childPosition, popupLocation);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -127,8 +127,8 @@ class ProfileFragment : Fragment(), OnRefreshListener, ConfirmDialogFragmentCall
|
||||
NavHostFragment.findNavController(this@ProfileFragment).navigate(commentsAction)
|
||||
}
|
||||
|
||||
override fun onDownloadClick(media: Media?, childPosition: Int) {
|
||||
DownloadUtils.showDownloadDialog(context ?: return, media ?: return, childPosition)
|
||||
override fun onDownloadClick(media: Media?, childPosition: Int, popupLocation: View) {
|
||||
DownloadUtils.showDownloadDialog(context ?: return, media ?: return, childPosition, popupLocation)
|
||||
}
|
||||
|
||||
override fun onEmailClick(emailId: String?) {
|
||||
|
@ -6,8 +6,8 @@ import awais.instagrabber.repositories.responses.Location
|
||||
import awais.instagrabber.repositories.responses.User
|
||||
|
||||
data class PollSticker(
|
||||
val pollId: Long?,
|
||||
val pollId: Long,
|
||||
val question: String?,
|
||||
val tallies: List<Tally>?,
|
||||
var viewerVote: Int = -1
|
||||
val tallies: List<Tally>,
|
||||
var viewerVote: Int?
|
||||
) : Serializable
|
@ -7,6 +7,6 @@ import awais.instagrabber.repositories.responses.User
|
||||
|
||||
data class QuestionSticker(
|
||||
val questionType: String?,
|
||||
val questionId: Long?,
|
||||
val question: String?
|
||||
val questionId: Long,
|
||||
val question: String
|
||||
) : Serializable
|
@ -8,7 +8,7 @@ import awais.instagrabber.repositories.responses.User
|
||||
data class QuizSticker(
|
||||
val quizId: Long?,
|
||||
val question: String?,
|
||||
val tallies: List<Tally>?,
|
||||
var viewerAnswer: Int? = -1,
|
||||
val correctAnswer: Int?
|
||||
val tallies: List<Tally>,
|
||||
var viewerAnswer: Int?,
|
||||
val correctAnswer: Int
|
||||
) : Serializable
|
@ -1,6 +1,7 @@
|
||||
package awais.instagrabber.repositories.responses.stories
|
||||
|
||||
import awais.instagrabber.models.enums.MediaItemType
|
||||
import awais.instagrabber.models.enums.MediaItemType.Companion.valueOf
|
||||
import awais.instagrabber.repositories.responses.ImageVersions2
|
||||
import awais.instagrabber.repositories.responses.MediaCandidate
|
||||
import awais.instagrabber.repositories.responses.User
|
||||
@ -9,36 +10,36 @@ import java.io.Serializable
|
||||
|
||||
data class StoryMedia(
|
||||
// inherited from Media
|
||||
val pk: String? = null,
|
||||
val id: String? = null,
|
||||
val takenAt: Long = -1,
|
||||
val user: User? = null,
|
||||
val canReshare: Boolean = false,
|
||||
val imageVersions2: ImageVersions2? = null,
|
||||
val originalWidth: Int = 0,
|
||||
val originalHeight: Int = 0,
|
||||
val mediaType: MediaItemType? = null,
|
||||
val isReelMedia: Boolean = false,
|
||||
val videoVersions: List<MediaCandidate>? = null,
|
||||
val hasAudio: Boolean = false,
|
||||
val videoDuration: Double = 0.0,
|
||||
val viewCount: Long = 0,
|
||||
val title: String? = null,
|
||||
// story-specific
|
||||
val canReply: Boolean = false,
|
||||
val linkText: String? = null, // required for story_cta
|
||||
// stickers
|
||||
val reelMentions: List<StorySticker>? = null,
|
||||
val storyHashtags: List<StorySticker>? = null,
|
||||
val storyLocations: List<StorySticker>? = null,
|
||||
val storyFeedMedia: List<StorySticker>? = null,
|
||||
val storyPolls: List<StorySticker>? = null,
|
||||
val storyQuestions: List<StorySticker>? = null,
|
||||
val storyQuizs: List<StorySticker>? = null,
|
||||
val storyCta: List<StorySticker>? = null,
|
||||
val storySliders: List<StorySticker>? = null,
|
||||
// spotify/soundcloud button, not a sticker
|
||||
val storyAppAttribution: StoryAppAttribution? = null
|
||||
val pk: String? = null,
|
||||
val id: String? = null,
|
||||
val takenAt: Long = -1,
|
||||
val user: User? = null,
|
||||
val canReshare: Boolean = false,
|
||||
val imageVersions2: ImageVersions2? = null,
|
||||
val originalWidth: Int = 0,
|
||||
val originalHeight: Int = 0,
|
||||
val mediaType: Int = 0,
|
||||
val isReelMedia: Boolean = false,
|
||||
val videoVersions: List<MediaCandidate>? = null,
|
||||
val hasAudio: Boolean = false,
|
||||
val videoDuration: Double = 0.0,
|
||||
val viewCount: Long = 0,
|
||||
val title: String? = null,
|
||||
// story-specific
|
||||
val canReply: Boolean = false,
|
||||
val linkText: String? = null, // required for story_cta
|
||||
// stickers
|
||||
val reelMentions: List<StorySticker>? = null,
|
||||
val storyHashtags: List<StorySticker>? = null,
|
||||
val storyLocations: List<StorySticker>? = null,
|
||||
val storyFeedMedia: List<StorySticker>? = null,
|
||||
val storyPolls: List<StorySticker>? = null,
|
||||
val storyQuestions: List<StorySticker>? = null,
|
||||
val storyQuizs: List<StorySticker>? = null,
|
||||
val storyCta: List<StorySticker>? = null,
|
||||
val storySliders: List<StorySticker>? = null,
|
||||
// spotify/soundcloud button, not a sticker
|
||||
val storyAppAttribution: StoryAppAttribution? = null
|
||||
) : Serializable {
|
||||
private var dateString: String? = null
|
||||
var position = 0
|
||||
@ -48,6 +49,9 @@ data class StoryMedia(
|
||||
// val date: String by lazy {
|
||||
// if (takenAt <= 0) "" else Utils.datetimeParser.format(Date(takenAt * 1000L))
|
||||
// }
|
||||
val type: MediaItemType?
|
||||
get() = valueOf(mediaType)
|
||||
|
||||
val date: String
|
||||
get() {
|
||||
if (takenAt <= 0) return ""
|
||||
|
@ -14,6 +14,6 @@ data class StorySticker(
|
||||
val pollSticker: PollSticker?, // story_polls
|
||||
val questionSticker: QuestionSticker?, // story_questions
|
||||
val quizSticker: QuizSticker?, // story_quizs
|
||||
val links: StoryCta?, // story_cta, requires link_text from the story
|
||||
val links: List<StoryCta?>?, // story_cta, requires link_text from the story
|
||||
val sliderSticker: SliderSticker? // story_sliders
|
||||
) : Serializable
|
@ -1,14 +1,16 @@
|
||||
package awais.instagrabber.utils
|
||||
|
||||
import android.content.Context
|
||||
import android.content.DialogInterface
|
||||
import android.content.UriPermission
|
||||
import android.net.Uri
|
||||
import android.provider.DocumentsContract
|
||||
import android.util.Log
|
||||
import android.widget.Toast
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import androidx.core.util.Pair
|
||||
import android.view.MenuItem
|
||||
import android.view.View
|
||||
import androidx.appcompat.view.ContextThemeWrapper
|
||||
import androidx.appcompat.widget.PopupMenu
|
||||
import androidx.core.app.NotificationCompat
|
||||
import androidx.core.app.NotificationManagerCompat
|
||||
import androidx.documentfile.provider.DocumentFile
|
||||
import androidx.work.*
|
||||
import awais.instagrabber.R
|
||||
@ -16,6 +18,7 @@ import awais.instagrabber.fragments.settings.PreferenceKeys
|
||||
import awais.instagrabber.models.enums.MediaItemType
|
||||
import awais.instagrabber.repositories.responses.Media
|
||||
import awais.instagrabber.repositories.responses.stories.StoryMedia
|
||||
import awais.instagrabber.utils.AppExecutors.tasksThread
|
||||
import awais.instagrabber.utils.TextUtils.isEmpty
|
||||
import awais.instagrabber.workers.DownloadWorker
|
||||
import com.google.gson.Gson
|
||||
@ -24,6 +27,7 @@ import java.io.IOException
|
||||
import java.io.OutputStreamWriter
|
||||
import java.util.*
|
||||
import java.util.regex.Pattern
|
||||
import kotlin.math.abs
|
||||
|
||||
|
||||
object DownloadUtils {
|
||||
@ -36,6 +40,8 @@ object DownloadUtils {
|
||||
private const val DIR_RECORDINGS = "Sent Recordings"
|
||||
private const val DIR_TEMP = "Temp"
|
||||
private const val DIR_BACKUPS = "Backups"
|
||||
private const val MIME_DIR = DocumentsContract.Document.MIME_TYPE_DIR
|
||||
private val dirMap: MutableMap<String, DocumentFile?> = mutableMapOf()
|
||||
private var root: DocumentFile? = null
|
||||
@JvmStatic
|
||||
@Throws(ReselectDocumentTreeException::class)
|
||||
@ -48,18 +54,15 @@ object DownloadUtils {
|
||||
}
|
||||
val uri = Uri.parse(barinstaDirUri)
|
||||
if (!barinstaDirUri!!.startsWith("content://com.android.externalstorage.documents")) {
|
||||
// reselect the folder in selector view
|
||||
throw ReselectDocumentTreeException(uri)
|
||||
}
|
||||
val existingPermissions = context.contentResolver.persistedUriPermissions
|
||||
if (existingPermissions.isEmpty()) {
|
||||
// reselect the folder in selector view
|
||||
throw ReselectDocumentTreeException(uri)
|
||||
}
|
||||
val anyMatch = existingPermissions.stream()
|
||||
.anyMatch { uriPermission: UriPermission -> uriPermission.uri == uri }
|
||||
if (!anyMatch) {
|
||||
// reselect the folder in selector view
|
||||
throw ReselectDocumentTreeException(uri)
|
||||
}
|
||||
root = DocumentFile.fromTreeUri(context, uri)
|
||||
@ -68,155 +71,152 @@ object DownloadUtils {
|
||||
throw ReselectDocumentTreeException(uri)
|
||||
}
|
||||
Utils.settingsHelper.putString(PreferenceKeys.PREF_BARINSTA_DIR_URI, uri.toString())
|
||||
// set up directories
|
||||
val dirKeys = mapOf(
|
||||
DIR_DOWNLOADS to MIME_DIR,
|
||||
DIR_CAMERA to MIME_DIR,
|
||||
DIR_EDIT to MIME_DIR,
|
||||
DIR_RECORDINGS to MIME_DIR,
|
||||
DIR_TEMP to MIME_DIR,
|
||||
DIR_BACKUPS to MIME_DIR
|
||||
)
|
||||
dirMap.putAll(checkFiles(context, root, dirKeys, true))
|
||||
}
|
||||
|
||||
fun destroy() {
|
||||
root = null
|
||||
dirMap.clear()
|
||||
}
|
||||
|
||||
fun getDownloadDir(vararg dirs: String?): DocumentFile? {
|
||||
if (root == null) {
|
||||
return null
|
||||
fun checkFiles(context: Context,
|
||||
parent: DocumentFile?,
|
||||
queries: Map<String, String>, // <file name, mime type>
|
||||
create: Boolean
|
||||
): Map<String, DocumentFile?> {
|
||||
// first we'll find existing ones
|
||||
val result: MutableMap<String, DocumentFile?> = mutableMapOf()
|
||||
if (root == null || parent == null || !parent.isDirectory) return result.toMap()
|
||||
val docId = DocumentsContract.getDocumentId(parent.uri)
|
||||
val docUri = DocumentsContract.buildChildDocumentsUriUsingTree(root!!.uri, docId)
|
||||
val docCursor = context.contentResolver.query(
|
||||
docUri, arrayOf(
|
||||
DocumentsContract.Document.COLUMN_DISPLAY_NAME,
|
||||
DocumentsContract.Document.COLUMN_DOCUMENT_ID,
|
||||
DocumentsContract.Document.COLUMN_MIME_TYPE
|
||||
), null, null, null
|
||||
)
|
||||
if (docCursor == null) return result.toMap()
|
||||
while (docCursor.moveToNext()) {
|
||||
val q = queries.get(docCursor.getString(0))
|
||||
if (q == null || !docCursor.getString(2).equals(q)) continue
|
||||
val fileUri = DocumentsContract.buildDocumentUriUsingTree(parent.uri, docCursor.getString(1))
|
||||
val dir = if (q.equals(MIME_DIR)) DocumentFile.fromTreeUri(context, fileUri)
|
||||
else DocumentFile.fromSingleUri(context, fileUri)
|
||||
result.put(docCursor.getString(0), dir)
|
||||
if (result.size >= queries.size) break
|
||||
}
|
||||
var subDir = root
|
||||
for (dir in dirs) {
|
||||
if (subDir == null || isEmpty(dir)) continue
|
||||
val subDirFile = subDir.findFile(dir!!)
|
||||
val exists = subDirFile != null && subDirFile.exists()
|
||||
subDir = if (exists) subDirFile else subDir.createDirectory(dir)
|
||||
docCursor.close()
|
||||
// next we'll create inexistent ones, if necessary
|
||||
if (create) {
|
||||
for (k in queries) {
|
||||
if (result.get(k.key) == null) {
|
||||
result.put(k.key, if (MIME_DIR.equals(k.value)) parent.createDirectory(k.key)
|
||||
else parent.createFile(k.value, k.key))
|
||||
}
|
||||
}
|
||||
}
|
||||
return subDir
|
||||
return result.toMap()
|
||||
}
|
||||
|
||||
fun getRootDir(dir: String): DocumentFile? {
|
||||
if (root == null) return null
|
||||
return dirMap.get(dir)
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
val downloadDir: DocumentFile?
|
||||
get() = getDownloadDir(DIR_DOWNLOADS)
|
||||
get() = getRootDir(DIR_DOWNLOADS)
|
||||
|
||||
@JvmStatic
|
||||
fun getCameraDir(): DocumentFile? {
|
||||
return getDownloadDir(DIR_CAMERA)
|
||||
val cameraDir: DocumentFile?
|
||||
get() = getRootDir(DIR_CAMERA)
|
||||
|
||||
@JvmStatic
|
||||
fun getImageEditDir(sessionId: String?, context: Context): DocumentFile? {
|
||||
val editRoot = getRootDir(DIR_EDIT)
|
||||
if (sessionId == null) return editRoot
|
||||
return checkFiles(context,
|
||||
editRoot,
|
||||
mapOf(sessionId to MIME_DIR),
|
||||
true).get(sessionId)
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun getImageEditDir(sessionId: String?): DocumentFile? {
|
||||
return getDownloadDir(DIR_EDIT, sessionId)
|
||||
}
|
||||
|
||||
fun getRecordingsDir(): DocumentFile? {
|
||||
return getDownloadDir(DIR_RECORDINGS)
|
||||
}
|
||||
val recordingsDir: DocumentFile?
|
||||
get() = getRootDir(DIR_RECORDINGS)
|
||||
|
||||
@JvmStatic
|
||||
fun getBackupsDir(): DocumentFile? {
|
||||
return getDownloadDir(DIR_BACKUPS)
|
||||
}
|
||||
val backupsDir: DocumentFile?
|
||||
get() = getRootDir(DIR_BACKUPS)
|
||||
|
||||
// @Nullable
|
||||
// private static DocumentFile getDownloadDir(@NonNull final Context context, @Nullable final String username) {
|
||||
// return getDownloadDir(context, username, false);
|
||||
// }
|
||||
private fun getDownloadDir(
|
||||
context: Context?,
|
||||
username: String?
|
||||
context: Context,
|
||||
username: String?,
|
||||
shouldCreate: Boolean
|
||||
): DocumentFile? {
|
||||
val userFolderPaths: List<String> = getSubPathForUserFolder(username)
|
||||
var dir = root
|
||||
for (dirName in userFolderPaths) {
|
||||
val file = dir!!.findFile(dirName)
|
||||
if (file != null) {
|
||||
dir = file
|
||||
continue
|
||||
}
|
||||
dir = dir.createDirectory(dirName)
|
||||
if (dir == null) break
|
||||
}
|
||||
// final String joined = android.text.TextUtils.join("/", userFolderPaths);
|
||||
// final Uri userFolderUri = DocumentsContract.buildDocumentUriUsingTree(root.getUri(), joined);
|
||||
// final DocumentFile userFolder = DocumentFile.fromSingleUri(context, userFolderUri);
|
||||
if (context != null && (dir == null || !dir.exists())) {
|
||||
Toast.makeText(context, R.string.error_creating_folders, Toast.LENGTH_SHORT).show()
|
||||
return null
|
||||
}
|
||||
return dir
|
||||
if (!Utils.settingsHelper.getBoolean(PreferenceKeys.DOWNLOAD_USER_FOLDER) || username.isNullOrEmpty())
|
||||
return downloadDir
|
||||
return checkFiles(context,
|
||||
downloadDir,
|
||||
mapOf(username to MIME_DIR),
|
||||
shouldCreate).get(username)
|
||||
}
|
||||
|
||||
private fun getSubPathForUserFolder(username: String?): MutableList<String> {
|
||||
val list: MutableList<String> = ArrayList()
|
||||
if (!Utils.settingsHelper.getBoolean(PreferenceKeys.DOWNLOAD_USER_FOLDER) ||
|
||||
username.isNullOrEmpty()) {
|
||||
list.add(DIR_DOWNLOADS)
|
||||
return list
|
||||
}
|
||||
val finalUsername = if (username.startsWith("@")) username.substring(1) else username
|
||||
list.add(DIR_DOWNLOADS)
|
||||
list.add(finalUsername)
|
||||
return list
|
||||
}
|
||||
|
||||
private fun getTempDir(): DocumentFile? {
|
||||
var file = root!!.findFile(DIR_TEMP)
|
||||
if (file == null) {
|
||||
file = root!!.createDirectory(DIR_TEMP)
|
||||
}
|
||||
return file
|
||||
}
|
||||
private val tempDir: DocumentFile?
|
||||
get() = getRootDir(DIR_TEMP)
|
||||
|
||||
private fun getDownloadSavePaths(
|
||||
paths: MutableList<String>,
|
||||
postId: String?,
|
||||
displayUrl: String?
|
||||
): Pair<List<String>, String?>? {
|
||||
return getDownloadSavePaths(paths, postId, "", displayUrl, "")
|
||||
): Pair<String, String> {
|
||||
return getDownloadFileName(postId, "", displayUrl, "")
|
||||
}
|
||||
|
||||
private fun getDownloadSavePaths(
|
||||
paths: MutableList<String>,
|
||||
postId: String?,
|
||||
displayUrl: String,
|
||||
username: String
|
||||
): Pair<List<String>, String?>? {
|
||||
return getDownloadSavePaths(paths, postId, "", displayUrl, username)
|
||||
): Pair<String, String> {
|
||||
return getDownloadFileName(postId, "", displayUrl, username)
|
||||
}
|
||||
|
||||
private fun getDownloadChildSavePaths(
|
||||
paths: MutableList<String>,
|
||||
postId: String?,
|
||||
childPosition: Int,
|
||||
url: String?,
|
||||
username: String
|
||||
): Pair<List<String>, String?>? {
|
||||
): Pair<String, String> {
|
||||
val sliderPostfix = "_slide_$childPosition"
|
||||
return getDownloadSavePaths(paths, postId, sliderPostfix, url, username)
|
||||
return getDownloadFileName(postId, sliderPostfix, url, username)
|
||||
}
|
||||
|
||||
private fun getDownloadSavePaths(
|
||||
paths: MutableList<String>?,
|
||||
private fun getDownloadFileName(
|
||||
postId: String?,
|
||||
sliderPostfix: String,
|
||||
displayUrl: String?,
|
||||
username: String
|
||||
): Pair<List<String>, String?>? {
|
||||
if (paths == null) return null
|
||||
): Pair<String, String> {
|
||||
val extension = getFileExtensionFromUrl(displayUrl)
|
||||
val usernamePrepend = if (isEmpty(username)) "" else username + "_"
|
||||
val fileName = usernamePrepend + postId + sliderPostfix + extension
|
||||
// return new File(finalDir, fileName);
|
||||
// DocumentFile file = finalDir.findFile(fileName);
|
||||
// if (file == null) {
|
||||
val mimeType = Utils.mimeTypeMap.getMimeTypeFromExtension(
|
||||
if (extension.startsWith(".")) extension.substring(1) else extension
|
||||
)
|
||||
// file = finalDir.createFile(mimeType, fileName);
|
||||
// }
|
||||
paths.add(fileName)
|
||||
return Pair(paths, mimeType)
|
||||
return Pair(fileName, mimeType!!)
|
||||
}
|
||||
|
||||
// public static DocumentFile getTempFile() {
|
||||
// return getTempFile(null, null);
|
||||
// }
|
||||
fun getTempFile(fileName: String?, extension: String): DocumentFile? {
|
||||
val dir = getTempDir()
|
||||
val dir = tempDir
|
||||
var name = fileName
|
||||
if (isEmpty(name)) {
|
||||
name = UUID.randomUUID().toString()
|
||||
@ -284,26 +284,23 @@ object DownloadUtils {
|
||||
if (user != null) {
|
||||
username = user.username
|
||||
}
|
||||
val userFolderPaths: List<String> = getSubPathForUserFolder(username)
|
||||
val userFolder = getDownloadDir(context, username, false)
|
||||
if (userFolder == null) return checkList
|
||||
when (media.type) {
|
||||
MediaItemType.MEDIA_TYPE_IMAGE, MediaItemType.MEDIA_TYPE_VIDEO -> {
|
||||
val url =
|
||||
if (media.type == MediaItemType.MEDIA_TYPE_VIDEO) ResponseBodyUtils.getVideoUrl(
|
||||
media
|
||||
) else ResponseBodyUtils.getImageUrl(media)
|
||||
val file = getDownloadSavePaths(ArrayList(userFolderPaths), media.code, url, "")
|
||||
val fileExists = file!!.first != null && checkPathExists(file.first, context)
|
||||
var usernameFileExists = false
|
||||
if (!fileExists) {
|
||||
val usernameFile = getDownloadSavePaths(
|
||||
ArrayList(userFolderPaths), media.code, url, username
|
||||
)
|
||||
usernameFileExists = usernameFile!!.first != null && checkPathExists(usernameFile.first, context)
|
||||
}
|
||||
checkList.add(fileExists || usernameFileExists)
|
||||
val fileName = getDownloadSavePaths(media.code, url)
|
||||
val fileNameWithUser = getDownloadSavePaths(media.code, url, username)
|
||||
val files = checkFiles(context, userFolder, mapOf(fileName, fileNameWithUser), false)
|
||||
checkList.add(files.size > 0)
|
||||
}
|
||||
MediaItemType.MEDIA_TYPE_SLIDER -> {
|
||||
val sliderItems = media.carouselMedia
|
||||
val fileNames: MutableMap<String, String> = mutableMapOf()
|
||||
val filePairs: MutableMap<String, String> = mutableMapOf()
|
||||
var i = 0
|
||||
while (i < sliderItems!!.size) {
|
||||
val child = sliderItems[i]
|
||||
@ -311,20 +308,17 @@ object DownloadUtils {
|
||||
if (child.type == MediaItemType.MEDIA_TYPE_VIDEO) ResponseBodyUtils.getVideoUrl(
|
||||
child
|
||||
) else ResponseBodyUtils.getImageUrl(child)
|
||||
val file = getDownloadChildSavePaths(
|
||||
ArrayList(userFolderPaths), media.code, i + 1, url, ""
|
||||
)
|
||||
val fileExists = file!!.first != null && checkPathExists(file.first, context)
|
||||
var usernameFileExists = false
|
||||
if (!fileExists) {
|
||||
val usernameFile = getDownloadChildSavePaths(
|
||||
ArrayList(userFolderPaths), media.code, i + 1, url, username
|
||||
)
|
||||
usernameFileExists = usernameFile!!.first != null && checkPathExists(usernameFile.first, context)
|
||||
}
|
||||
checkList.add(fileExists || usernameFileExists)
|
||||
val fileName = getDownloadChildSavePaths(media.code, i+1, url, "")
|
||||
val fileNameWithUser = getDownloadChildSavePaths(media.code, i+1, url, username)
|
||||
fileNames.put(fileName.first, fileName.second)
|
||||
fileNames.put(fileNameWithUser.first, fileNameWithUser.second)
|
||||
filePairs.put(fileName.first, fileNameWithUser.first)
|
||||
i++
|
||||
}
|
||||
val files = checkFiles(context, userFolder, fileNames, false)
|
||||
for (p in filePairs) {
|
||||
checkList.add(files.get(p.key) != null || files.get(p.value) != null)
|
||||
}
|
||||
}
|
||||
else -> {
|
||||
}
|
||||
@ -332,61 +326,32 @@ object DownloadUtils {
|
||||
return checkList
|
||||
}
|
||||
|
||||
private fun checkPathExists(paths: List<String>, context: Context): Boolean {
|
||||
if (root == null) return false
|
||||
val uri = root!!.uri
|
||||
var found = false
|
||||
var docId = DocumentsContract.getTreeDocumentId(uri)
|
||||
for (path in paths) {
|
||||
val docUri = DocumentsContract.buildChildDocumentsUriUsingTree(uri, docId)
|
||||
val docCursor = context.contentResolver.query(
|
||||
docUri, arrayOf(
|
||||
DocumentsContract.Document.COLUMN_DISPLAY_NAME,
|
||||
DocumentsContract.Document.COLUMN_DOCUMENT_ID
|
||||
), null, null, null
|
||||
)
|
||||
if (docCursor == null) return false
|
||||
while (docCursor.moveToNext() && !found) {
|
||||
if (path.equals(docCursor.getString(0))) {
|
||||
docId = docCursor.getString(1)
|
||||
found = true
|
||||
}
|
||||
}
|
||||
docCursor.close()
|
||||
if (!found) return false
|
||||
found = false
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun showDownloadDialog(
|
||||
context: Context,
|
||||
feedModel: Media,
|
||||
childPosition: Int
|
||||
childPosition: Int,
|
||||
popupLocation: View?
|
||||
) {
|
||||
if (childPosition >= 0) {
|
||||
val clickListener =
|
||||
DialogInterface.OnClickListener { dialog: DialogInterface, which: Int ->
|
||||
when (which) {
|
||||
0 -> download(context, feedModel, childPosition)
|
||||
1 -> download(context, feedModel)
|
||||
DialogInterface.BUTTON_NEGATIVE -> dialog.dismiss()
|
||||
else -> dialog.dismiss()
|
||||
}
|
||||
}
|
||||
val items = arrayOf(
|
||||
context.getString(R.string.post_viewer_download_current),
|
||||
context.getString(R.string.post_viewer_download_album)
|
||||
)
|
||||
AlertDialog.Builder(context)
|
||||
.setTitle(R.string.post_viewer_download_dialog_title)
|
||||
.setItems(items, clickListener)
|
||||
.setNegativeButton(R.string.cancel, null)
|
||||
.show()
|
||||
if (childPosition == -1 || popupLocation == null) {
|
||||
download(context, feedModel)
|
||||
return
|
||||
}
|
||||
download(context, feedModel)
|
||||
val themeWrapper = ContextThemeWrapper(context, R.style.popupMenuStyle)
|
||||
val popupMenu = PopupMenu(themeWrapper, popupLocation)
|
||||
val menu = popupMenu.menu
|
||||
menu.add(0, R.id.download_current, 0, R.string.post_viewer_download_current)
|
||||
menu.add(0, R.id.download_all, 1, R.string.post_viewer_download_album)
|
||||
popupMenu.setOnMenuItemClickListener { item: MenuItem ->
|
||||
val itemId = item.itemId
|
||||
if (itemId == R.id.download_current) {
|
||||
download(context, feedModel, childPosition)
|
||||
} else if (itemId == R.id.download_all) {
|
||||
download(context, feedModel)
|
||||
}
|
||||
false
|
||||
}
|
||||
popupMenu.show()
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
@ -394,27 +359,19 @@ object DownloadUtils {
|
||||
context: Context,
|
||||
storyModel: StoryMedia
|
||||
) {
|
||||
val downloadDir = getDownloadDir(context, storyModel.user?.username) ?: return
|
||||
val downloadDir = getDownloadDir(context, storyModel.user?.username, true) ?: return
|
||||
val url =
|
||||
if (storyModel.mediaType == MediaItemType.MEDIA_TYPE_VIDEO) ResponseBodyUtils.getVideoUrl(storyModel)
|
||||
if (storyModel.type == MediaItemType.MEDIA_TYPE_VIDEO) ResponseBodyUtils.getVideoUrl(storyModel)
|
||||
else ResponseBodyUtils.getImageUrl(storyModel)
|
||||
val extension = getFileExtensionFromUrl(url)
|
||||
val baseFileName = (storyModel.id + "_"
|
||||
+ storyModel.takenAt + extension)
|
||||
val mimeType = Utils.mimeTypeMap.getMimeTypeFromExtension(extension)
|
||||
val baseFileName = storyModel.id + "_" + storyModel.takenAt + extension
|
||||
val usernamePrepend =
|
||||
if (Utils.settingsHelper.getBoolean(PreferenceKeys.DOWNLOAD_PREPEND_USER_NAME)
|
||||
&& storyModel.user?.username != null
|
||||
) storyModel.user.username + "_" else ""
|
||||
val fileName = usernamePrepend + baseFileName
|
||||
var saveFile = downloadDir.findFile(fileName)
|
||||
if (saveFile == null) {
|
||||
val mimeType = Utils.mimeTypeMap.getMimeTypeFromExtension(
|
||||
if (extension.startsWith(".")) extension.substring(1) else extension
|
||||
)
|
||||
?: return
|
||||
saveFile = downloadDir.createFile(mimeType, fileName)
|
||||
}
|
||||
// final File saveFile = new File(downloadDir, fileName);
|
||||
var saveFile = checkFiles(context, downloadDir, mapOf(fileName to mimeType!!), true).get(fileName)
|
||||
download(context, url, saveFile)
|
||||
}
|
||||
|
||||
@ -428,12 +385,28 @@ object DownloadUtils {
|
||||
download(context, listOf(feedModel), position)
|
||||
}
|
||||
|
||||
// this must be used for bulk download, but ONLY bulk download
|
||||
@JvmStatic
|
||||
fun download(
|
||||
context: Context,
|
||||
feedModels: List<Media>
|
||||
) {
|
||||
download(context, feedModels, -1)
|
||||
val builder = NotificationCompat.Builder(context, Constants.DOWNLOAD_CHANNEL_ID)
|
||||
.setCategory(NotificationCompat.CATEGORY_PROGRESS)
|
||||
.setSmallIcon(R.drawable.ic_download)
|
||||
.setOngoing(true)
|
||||
.setProgress(1, 0, true)
|
||||
.setAutoCancel(false)
|
||||
.setOnlyAlertOnce(true)
|
||||
.setContentTitle(context.getString(R.string.downloader_preparing))
|
||||
val notification = builder.build()
|
||||
val nid = abs(UUID.randomUUID().hashCode())
|
||||
val nManager = NotificationManagerCompat.from(context.applicationContext)
|
||||
nManager.notify(nid, notification)
|
||||
tasksThread.execute {
|
||||
download(context, feedModels, -1)
|
||||
nManager.cancel(nid)
|
||||
}
|
||||
}
|
||||
|
||||
private fun download(
|
||||
@ -441,11 +414,12 @@ object DownloadUtils {
|
||||
feedModels: List<Media>,
|
||||
childPositionIfSingle: Int
|
||||
) {
|
||||
val map: MutableMap<String, DocumentFile> = HashMap()
|
||||
val map: MutableMap<String, Pair<String, String>> = HashMap()
|
||||
val fileMap: MutableMap<String, DocumentFile?> = HashMap()
|
||||
for (media in feedModels) {
|
||||
val mediaUser = media.user
|
||||
val username = mediaUser?.username ?: ""
|
||||
val userFolderPaths = getSubPathForUserFolder(username)
|
||||
val dir = getDownloadDir(context, username, true)
|
||||
when (media.type) {
|
||||
MediaItemType.MEDIA_TYPE_IMAGE, MediaItemType.MEDIA_TYPE_VIDEO -> {
|
||||
val url = getUrlOfType(media)
|
||||
@ -459,9 +433,8 @@ object DownloadUtils {
|
||||
fileName = mediaUser.username + "_" + fileName
|
||||
}
|
||||
}
|
||||
val pair = getDownloadSavePaths(userFolderPaths, fileName, url)
|
||||
val file = createFile(pair!!) ?: continue
|
||||
map[url!!] = file
|
||||
val pair = getDownloadSavePaths(fileName, url)
|
||||
map[url!!] = pair
|
||||
}
|
||||
MediaItemType.MEDIA_TYPE_VOICE -> {
|
||||
val url = getUrlOfType(media)
|
||||
@ -469,9 +442,8 @@ object DownloadUtils {
|
||||
if (mediaUser != null) {
|
||||
fileName = mediaUser.username + "_" + fileName
|
||||
}
|
||||
val pair = getDownloadSavePaths(userFolderPaths, fileName, url)
|
||||
val file = createFile(pair!!) ?: continue
|
||||
map[url!!] = file
|
||||
val pair = getDownloadSavePaths(fileName, url)
|
||||
map[url!!] = pair
|
||||
}
|
||||
MediaItemType.MEDIA_TYPE_SLIDER -> {
|
||||
val sliderItems = media.carouselMedia
|
||||
@ -485,43 +457,18 @@ object DownloadUtils {
|
||||
val url = getUrlOfType(child)
|
||||
val usernamePrepend =
|
||||
if (Utils.settingsHelper.getBoolean(PreferenceKeys.DOWNLOAD_PREPEND_USER_NAME) && mediaUser != null) mediaUser.username else ""
|
||||
val pair = getDownloadChildSavePaths(
|
||||
ArrayList(userFolderPaths), media.code, i + 1, url, usernamePrepend
|
||||
)
|
||||
val file = createFile(pair!!)
|
||||
if (file == null) {
|
||||
i++
|
||||
continue
|
||||
}
|
||||
map[url!!] = file
|
||||
val pair = getDownloadChildSavePaths(media.code, i + 1, url, usernamePrepend)
|
||||
map[url!!] = pair
|
||||
i++
|
||||
}
|
||||
}
|
||||
}
|
||||
fileMap.putAll(checkFiles(context, dir, map.values.toMap(), true))
|
||||
}
|
||||
if (map.isEmpty()) return
|
||||
download(context, map)
|
||||
}
|
||||
|
||||
private fun createFile(pair: Pair<List<String>, String?>): DocumentFile? {
|
||||
if (root == null) return null
|
||||
if (pair.first == null || pair.second == null) return null
|
||||
var dir = root
|
||||
val first = pair.first
|
||||
for (i in first.indices) {
|
||||
val name = first[i]
|
||||
val file = dir!!.findFile(name)
|
||||
if (file != null) {
|
||||
dir = file
|
||||
continue
|
||||
}
|
||||
dir = if (i == first.size - 1) dir.createFile(
|
||||
pair.second!!,
|
||||
name
|
||||
) else dir.createDirectory(name)
|
||||
if (dir == null) break
|
||||
}
|
||||
return dir
|
||||
if (map.isEmpty() || fileMap.isEmpty()) return
|
||||
val resultMap: MutableMap<String, DocumentFile?> = mutableMapOf()
|
||||
map.mapValuesTo(resultMap) { fileMap.get(it.value.first) }
|
||||
download(context, resultMap)
|
||||
}
|
||||
|
||||
private fun getUrlOfType(media: Media): String? {
|
||||
@ -559,7 +506,7 @@ object DownloadUtils {
|
||||
download(context, Collections.singletonMap(url!!, filePath))
|
||||
}
|
||||
|
||||
private fun download(context: Context?, urlFilePathMap: Map<String, DocumentFile>) {
|
||||
private fun download(context: Context?, urlFilePathMap: Map<String, DocumentFile?>) {
|
||||
if (context == null) return
|
||||
val constraints = Constraints.Builder()
|
||||
.setRequiredNetworkType(NetworkType.CONNECTED)
|
||||
|
@ -34,7 +34,7 @@ class DirectThreadViewModel(
|
||||
|
||||
// private static final String ERROR_INVALID_THREAD = "Invalid thread";
|
||||
private val contentResolver: ContentResolver = application.contentResolver
|
||||
private val recordingsDir: DocumentFile? = DownloadUtils.getRecordingsDir()
|
||||
private val recordingsDir: DocumentFile? = DownloadUtils.recordingsDir
|
||||
private var voiceRecorder: VoiceRecorder? = null
|
||||
private lateinit var threadManager: ThreadManager
|
||||
|
||||
|
@ -59,7 +59,7 @@ public class ImageEditViewModel extends AndroidViewModel {
|
||||
public ImageEditViewModel(final Application application) {
|
||||
super(application);
|
||||
sessionId = LocalDateTime.now().format(SIMPLE_DATE_FORMAT);
|
||||
outputDir = DownloadUtils.getImageEditDir(sessionId);
|
||||
outputDir = DownloadUtils.getImageEditDir(sessionId, application);
|
||||
destinationFile = outputDir.createFile(MIME_TYPE, RESULT + ".jpg");
|
||||
destinationUri = destinationFile.getUri();
|
||||
cropDestinationUri = outputDir.createFile(MIME_TYPE, CROP + ".jpg").getUri();
|
||||
|
@ -393,9 +393,10 @@ class DownloadWorker(context: Context, workerParams: WorkerParameters) : Corouti
|
||||
|
||||
class Builder {
|
||||
private var urlToFilePathMap: MutableMap<String, String> = mutableMapOf()
|
||||
fun setUrlToFilePathMap(urlToFilePathMap: Map<String, DocumentFile>): Builder {
|
||||
fun setUrlToFilePathMap(urlToFilePathMap: Map<String, DocumentFile?>): Builder {
|
||||
this.urlToFilePathMap = urlToFilePathMap
|
||||
.mapValues { it.value.uri.toString() }
|
||||
.filter{ it.value != null }
|
||||
.mapValues { it.value!!.uri.toString() }
|
||||
.toMutableMap()
|
||||
return this
|
||||
}
|
||||
|
@ -40,8 +40,6 @@
|
||||
<string name="save_to_folder">حفظ في مجلد مخصص</string>
|
||||
<string name="select_folder">تحديد مجلد</string>
|
||||
<string name="theme_settings">السمة</string>
|
||||
<string name="login_settings">فقط يؤثر على المستخدمين المسجلين:</string>
|
||||
<string name="anonymous_settings">يؤثر فقط على مستخدمين مجهولين:</string>
|
||||
<string name="select_language">اللغة</string>
|
||||
<plurals name="main_posts_count">
|
||||
<item quantity="zero">%s\nPosts</item>
|
||||
@ -125,10 +123,7 @@
|
||||
<string name="saved">تم الحفظ</string>
|
||||
<string name="tagged">مشار إليها</string>
|
||||
<string name="dm_person">الرسالة</string>
|
||||
<string name="like_without_count">اعجاب</string>
|
||||
<string name="unlike_without_count">إلغاء الإعجاب</string>
|
||||
<string name="bookmark">Bookmark</string>
|
||||
<string name="unbookmark">Unbookmark</string>
|
||||
<string name="follow">Follow</string>
|
||||
<string name="unfollow">Unfollow</string>
|
||||
<string name="favorite_short" comment="Adjective, not verb">Favorite</string>
|
||||
@ -156,7 +151,6 @@
|
||||
<string name="dialog_export_failed">Failed to export!</string>
|
||||
<string name="refresh">Refresh</string>
|
||||
<string name="get_cookies">Get cookies</string>
|
||||
<string name="desktop_2fa">Desktop Mode</string>
|
||||
<string name="time_settings_title_custom">Use custom format</string>
|
||||
<string name="time_settings_title_separator">Separator</string>
|
||||
<string name="time_settings_title_time_format">Time Format</string>
|
||||
@ -223,14 +217,8 @@
|
||||
<string name="downloader_error_creating_folder">Error creating folder!</string>
|
||||
<string name="downloader_error_download_file">Error downloading file</string>
|
||||
<string name="downloader_too_many">You can only download 100 posts at a time. Don\'t be too greedy!</string>
|
||||
<string name="comment_viewer_copy_comment">Copy comment</string>
|
||||
<string name="comment_viewer_see_likers">View comment likers</string>
|
||||
<string name="comment_viewer_reply_comment">Reply to comment</string>
|
||||
<string name="comment_viewer_like_comment">Like comment</string>
|
||||
<string name="comment_viewer_unlike_comment">Unlike comment</string>
|
||||
<string name="comment_viewer_translate_comment">Translate comment</string>
|
||||
<string name="comment_viewer_delete_comment">Delete comment</string>
|
||||
<string name="comment_send_empty_comment">No empty comments!</string>
|
||||
<string name="comment_view_mention_user_search">Do you want to search the username?</string>
|
||||
<string name="comment_view_mention_hash_search">Do you want to search the hashtag?</string>
|
||||
<string name="followers_type_followers">Followers</string>
|
||||
|
@ -40,8 +40,6 @@
|
||||
<string name="save_to_folder">Desa a una carpeta personalitzada</string>
|
||||
<string name="select_folder">Selecciona la carpeta</string>
|
||||
<string name="theme_settings">Tema</string>
|
||||
<string name="login_settings">Només afecta als usuaris amb sessió iniciada:</string>
|
||||
<string name="anonymous_settings">Només afecta als usuaris anònims:</string>
|
||||
<string name="select_language">Llengua</string>
|
||||
<plurals name="main_posts_count">
|
||||
<item quantity="one">%s\nPublicació</item>
|
||||
@ -109,10 +107,7 @@
|
||||
<string name="saved">Desat</string>
|
||||
<string name="tagged">Etiquetat</string>
|
||||
<string name="dm_person">Missatge</string>
|
||||
<string name="like_without_count">M\'agrada</string>
|
||||
<string name="unlike_without_count">Desfer \"m\'agrada\"</string>
|
||||
<string name="bookmark">Marcador</string>
|
||||
<string name="unbookmark">Desfer marcador</string>
|
||||
<string name="follow">Seguir</string>
|
||||
<string name="unfollow">Deixar de seguir</string>
|
||||
<string name="favorite_short" comment="Adjective, not verb">Preferit</string>
|
||||
@ -140,7 +135,6 @@
|
||||
<string name="dialog_export_failed">No s\'ha pogut exportar!</string>
|
||||
<string name="refresh">Actualitzar</string>
|
||||
<string name="get_cookies">Obtenir cookies</string>
|
||||
<string name="desktop_2fa">Mode escriptori</string>
|
||||
<string name="time_settings_title_custom">Utilitza un format personalitzat</string>
|
||||
<string name="time_settings_title_separator">Separador</string>
|
||||
<string name="time_settings_title_time_format">Format d\'hora</string>
|
||||
@ -207,14 +201,8 @@
|
||||
<string name="downloader_error_creating_folder">S\'ha produït un error en crear la carpeta!</string>
|
||||
<string name="downloader_error_download_file">S\'ha produït un error en descarregar l\'arxiu</string>
|
||||
<string name="downloader_too_many">Només pots descarregar 100 publicacions alhora. No siguis massa cobdiciós!</string>
|
||||
<string name="comment_viewer_copy_comment">Copiar el comentari</string>
|
||||
<string name="comment_viewer_see_likers">Veure m\'agrades del comentari</string>
|
||||
<string name="comment_viewer_reply_comment">Respondre al comentari</string>
|
||||
<string name="comment_viewer_like_comment">Donar \"m\'agrada\" al comentari</string>
|
||||
<string name="comment_viewer_unlike_comment">Treure \"m\'agrada\" al comentari</string>
|
||||
<string name="comment_viewer_translate_comment">Traduir comentari</string>
|
||||
<string name="comment_viewer_delete_comment">Esborrar comentari</string>
|
||||
<string name="comment_send_empty_comment">No als comentaris buits!</string>
|
||||
<string name="comment_view_mention_user_search">Vols cercar el nom d\'usuari?</string>
|
||||
<string name="comment_view_mention_hash_search">Vols cercar l\'etiqueta?</string>
|
||||
<string name="followers_type_followers">Seguidors</string>
|
||||
|
@ -40,8 +40,6 @@
|
||||
<string name="save_to_folder">Uložit do vlastní složky</string>
|
||||
<string name="select_folder">Vybrat složku</string>
|
||||
<string name="theme_settings">Motiv</string>
|
||||
<string name="login_settings">Týká se pouze přihlášených uživatelů:</string>
|
||||
<string name="anonymous_settings">Týká se pouze anonymních uživatelů:</string>
|
||||
<string name="select_language">Jazyk</string>
|
||||
<plurals name="main_posts_count">
|
||||
<item quantity="one">%s\nPříspěvek</item>
|
||||
@ -117,10 +115,7 @@
|
||||
<string name="saved">Uložené</string>
|
||||
<string name="tagged">Označení</string>
|
||||
<string name="dm_person">Zpráva</string>
|
||||
<string name="like_without_count">To se mi líbí</string>
|
||||
<string name="unlike_without_count">Už se mi to nelíbí</string>
|
||||
<string name="bookmark">Přidat do záložek</string>
|
||||
<string name="unbookmark">Odebrat záložku</string>
|
||||
<string name="follow">Sledovat</string>
|
||||
<string name="unfollow">Přestat sledovat</string>
|
||||
<string name="favorite_short" comment="Adjective, not verb">Oblíbené</string>
|
||||
@ -148,7 +143,6 @@
|
||||
<string name="dialog_export_failed">Export se nezdařil!</string>
|
||||
<string name="refresh">Načíst znovu</string>
|
||||
<string name="get_cookies">Získat cookies</string>
|
||||
<string name="desktop_2fa">Režim počítače</string>
|
||||
<string name="time_settings_title_custom">Použít vlastní formát</string>
|
||||
<string name="time_settings_title_separator">Oddělovač</string>
|
||||
<string name="time_settings_title_time_format">Formát času</string>
|
||||
@ -215,14 +209,8 @@
|
||||
<string name="downloader_error_creating_folder">Chyba při vytváření složky!</string>
|
||||
<string name="downloader_error_download_file">Chyba při stahování souboru</string>
|
||||
<string name="downloader_too_many">Můžete stahovat pouze 100 příspěvků najednou. Nebuďte příliš chamtiví!</string>
|
||||
<string name="comment_viewer_copy_comment">Kopírovat komentář</string>
|
||||
<string name="comment_viewer_see_likers">Zobrazit, komu se komentář líbí</string>
|
||||
<string name="comment_viewer_reply_comment">Odpovědět na komentář</string>
|
||||
<string name="comment_viewer_like_comment">Označit komentář lajkem</string>
|
||||
<string name="comment_viewer_unlike_comment">Odebrat lajk z komentáře</string>
|
||||
<string name="comment_viewer_translate_comment">Přeložit komentář</string>
|
||||
<string name="comment_viewer_delete_comment">Odstranit komentář</string>
|
||||
<string name="comment_send_empty_comment">Žádné prázdné komentáře!</string>
|
||||
<string name="comment_view_mention_user_search">Chcete vyhledat uživatelské jméno?</string>
|
||||
<string name="comment_view_mention_hash_search">Chcete vyhledat hashtag?</string>
|
||||
<string name="followers_type_followers">Sledující</string>
|
||||
|
@ -40,8 +40,6 @@
|
||||
<string name="save_to_folder">In benutzerdefiniertem Ordner speichern</string>
|
||||
<string name="select_folder">Ordner auswählen</string>
|
||||
<string name="theme_settings">Design</string>
|
||||
<string name="login_settings">Betrifft nur angemeldete Benutzer:</string>
|
||||
<string name="anonymous_settings">Betrifft nur anonyme Benutzer:</string>
|
||||
<string name="select_language">Sprache</string>
|
||||
<plurals name="main_posts_count">
|
||||
<item quantity="one">%s\nBeitrag</item>
|
||||
@ -109,10 +107,7 @@
|
||||
<string name="saved">Gespeichert</string>
|
||||
<string name="tagged">Markiert</string>
|
||||
<string name="dm_person">Nachricht</string>
|
||||
<string name="like_without_count">Gefällt mir</string>
|
||||
<string name="unlike_without_count">Gefällt mir nicht mehr</string>
|
||||
<string name="bookmark">Lesezeichen</string>
|
||||
<string name="unbookmark">Lesezeichen entfernen</string>
|
||||
<string name="follow">Folgen</string>
|
||||
<string name="unfollow">Nicht mehr folgen</string>
|
||||
<string name="favorite_short" comment="Adjective, not verb">Favorit</string>
|
||||
@ -140,7 +135,6 @@
|
||||
<string name="dialog_export_failed">Export fehlgeschlagen!</string>
|
||||
<string name="refresh">Aktualisieren</string>
|
||||
<string name="get_cookies">Cookies abrufen</string>
|
||||
<string name="desktop_2fa">Desktop Modus</string>
|
||||
<string name="time_settings_title_custom">Eigenes Format verwenden</string>
|
||||
<string name="time_settings_title_separator">Trennzeichen</string>
|
||||
<string name="time_settings_title_time_format">Zeiformat</string>
|
||||
@ -207,14 +201,8 @@
|
||||
<string name="downloader_error_creating_folder">Fehler beim Erstellen des Ordners!</string>
|
||||
<string name="downloader_error_download_file">Fehler beim Dateidownload</string>
|
||||
<string name="downloader_too_many">Du kannst nur 100 Beiträge gleichzeitig herunterladen. Sei nicht zu gierig!</string>
|
||||
<string name="comment_viewer_copy_comment">Kommentar kopieren</string>
|
||||
<string name="comment_viewer_see_likers">Kommentar-Liker ansehen</string>
|
||||
<string name="comment_viewer_reply_comment">Auf Kommentar antworten</string>
|
||||
<string name="comment_viewer_like_comment">Kommentar gefällt mir</string>
|
||||
<string name="comment_viewer_unlike_comment">Kommentar gefällt mir nicht mehr</string>
|
||||
<string name="comment_viewer_translate_comment">Kommentar übersetzen</string>
|
||||
<string name="comment_viewer_delete_comment">Kommentar löschen</string>
|
||||
<string name="comment_send_empty_comment">Keine leeren Kommentare!</string>
|
||||
<string name="comment_view_mention_user_search">Möchtest du nach dem Benutzernamen suchen?</string>
|
||||
<string name="comment_view_mention_hash_search">Möchtest du nach dem Hashtag suchen?</string>
|
||||
<string name="followers_type_followers">Abonnenten</string>
|
||||
|
@ -40,8 +40,6 @@
|
||||
<string name="save_to_folder">Αποθήκευση σε προσαρμοσμένο φάκελο</string>
|
||||
<string name="select_folder">Επιλογή φακέλου</string>
|
||||
<string name="theme_settings">Θέμα</string>
|
||||
<string name="login_settings">Επηρεάζει μόνο τους συνδεδεμένους χρήστες:</string>
|
||||
<string name="anonymous_settings">Επηρεάζει μόνο τους ανώνυμους χρήστες:</string>
|
||||
<string name="select_language">Γλώσσα</string>
|
||||
<plurals name="main_posts_count">
|
||||
<item quantity="one">%s\nΔημοσίευση</item>
|
||||
@ -109,10 +107,7 @@
|
||||
<string name="saved">Αποθηκευμένα</string>
|
||||
<string name="tagged">Ετικέτες</string>
|
||||
<string name="dm_person">Μήνυμα</string>
|
||||
<string name="like_without_count">Μου αρέσει</string>
|
||||
<string name="unlike_without_count">Δε μου αρέσει</string>
|
||||
<string name="bookmark">Αποθήκευση σαν σελιδοδείκτης</string>
|
||||
<string name="unbookmark">Διαγραφή σελιδοδείκτη</string>
|
||||
<string name="follow">Ακολουθήστε</string>
|
||||
<string name="unfollow">Να μην ακολουθώ</string>
|
||||
<string name="favorite_short" comment="Adjective, not verb">Αγαπημένα</string>
|
||||
@ -140,7 +135,6 @@
|
||||
<string name="dialog_export_failed">Η εξαγωγή απέτυχε!</string>
|
||||
<string name="refresh">Ανανέωση</string>
|
||||
<string name="get_cookies">Λήψη cookies</string>
|
||||
<string name="desktop_2fa">Λειτουργία Επιφάνειας Εργασίας</string>
|
||||
<string name="time_settings_title_custom">Χρήση προσαρμοσμένης μορφής</string>
|
||||
<string name="time_settings_title_separator">Διαχωριστικό</string>
|
||||
<string name="time_settings_title_time_format">Μορφή Ώρας</string>
|
||||
@ -207,14 +201,8 @@
|
||||
<string name="downloader_error_creating_folder">Σφάλμα κατά τη δημιουργία φακέλου!</string>
|
||||
<string name="downloader_error_download_file">Σφάλμα λήψης αρχείου</string>
|
||||
<string name="downloader_too_many">Μπορείτε να καταφορτώσετε μόνο 100 δημοσιεύσεις τη φορά. Μην είστε τόσο άπληστος!</string>
|
||||
<string name="comment_viewer_copy_comment">Αντιγραφή σχολίου</string>
|
||||
<string name="comment_viewer_see_likers">Προβολή όσων δήλωσαν ότι τους αρέσει το σχόλιο</string>
|
||||
<string name="comment_viewer_reply_comment">Απάντηση στο σχόλιο</string>
|
||||
<string name="comment_viewer_like_comment">Επισήμανση ως «Μου Αρέσει»</string>
|
||||
<string name="comment_viewer_unlike_comment">Κατάργηση του «Μου Αρέσει»</string>
|
||||
<string name="comment_viewer_translate_comment">Μετάφραση σχολίου</string>
|
||||
<string name="comment_viewer_delete_comment">Διαγραφή σχολίου</string>
|
||||
<string name="comment_send_empty_comment">Όχι κενά σχόλια!</string>
|
||||
<string name="comment_view_mention_user_search">Θέλετε να αναζητήσετε το όνομα χρήστη;</string>
|
||||
<string name="comment_view_mention_hash_search">Θέλετε να αναζητήσετε το hashtag;</string>
|
||||
<string name="followers_type_followers">Ακόλουθοι</string>
|
||||
|
@ -40,8 +40,6 @@
|
||||
<string name="save_to_folder">Descargar en carpeta personalizada</string>
|
||||
<string name="select_folder">Seleccionar carpeta</string>
|
||||
<string name="theme_settings">Tema</string>
|
||||
<string name="login_settings">Sólo afecta a cuentas que han iniciado sesión:</string>
|
||||
<string name="anonymous_settings">Sólo afecta a usuarios anónimos:</string>
|
||||
<string name="select_language">Idioma</string>
|
||||
<plurals name="main_posts_count">
|
||||
<item quantity="one">%s\nPublicación</item>
|
||||
@ -109,10 +107,7 @@
|
||||
<string name="saved">Guardado</string>
|
||||
<string name="tagged">Etiquetado</string>
|
||||
<string name="dm_person">Mensaje</string>
|
||||
<string name="like_without_count">Me gusta</string>
|
||||
<string name="unlike_without_count">No me gusta</string>
|
||||
<string name="bookmark">Añadir marcador</string>
|
||||
<string name="unbookmark">Quitar marcador</string>
|
||||
<string name="follow">Seguir</string>
|
||||
<string name="unfollow">Dejar de seguir</string>
|
||||
<string name="favorite_short" comment="Adjective, not verb">Agregar a favoritos</string>
|
||||
@ -140,7 +135,6 @@
|
||||
<string name="dialog_export_failed">¡Falló la exportación!</string>
|
||||
<string name="refresh">Actualizar</string>
|
||||
<string name="get_cookies">Obtener cookies</string>
|
||||
<string name="desktop_2fa">Modo escritorio</string>
|
||||
<string name="time_settings_title_custom">Usar formato personalizado</string>
|
||||
<string name="time_settings_title_separator">Separador</string>
|
||||
<string name="time_settings_title_time_format">Formato de tiempo</string>
|
||||
@ -207,14 +201,8 @@
|
||||
<string name="downloader_error_creating_folder">¡Error al crear carpeta!</string>
|
||||
<string name="downloader_error_download_file">Error al descargar archivo</string>
|
||||
<string name="downloader_too_many">Sólo puedes descargar 100 publicaciones a la vez. ¡No seas abaricioso!</string>
|
||||
<string name="comment_viewer_copy_comment">Copiar comentario</string>
|
||||
<string name="comment_viewer_see_likers">Ver me gustas del comentario</string>
|
||||
<string name="comment_viewer_reply_comment">Responder a comentario</string>
|
||||
<string name="comment_viewer_like_comment">Dar me gusta a comentario</string>
|
||||
<string name="comment_viewer_unlike_comment">Quitar me gusta a comentario</string>
|
||||
<string name="comment_viewer_translate_comment">Traducir comentario</string>
|
||||
<string name="comment_viewer_delete_comment">Eliminar comentario</string>
|
||||
<string name="comment_send_empty_comment">¡No hay comentarios vacíos!</string>
|
||||
<string name="comment_view_mention_user_search">¿Quieres buscar el nombre de usuario?</string>
|
||||
<string name="comment_view_mention_hash_search">¿Quieres buscar el hashtag?</string>
|
||||
<string name="followers_type_followers">Seguidores</string>
|
||||
|
@ -40,8 +40,6 @@
|
||||
<string name="save_to_folder">Gorde pertsonalizatutako karpetan</string>
|
||||
<string name="select_folder">Hautatu karpeta</string>
|
||||
<string name="theme_settings">Gaia</string>
|
||||
<string name="login_settings">Saioa hasi duten erabiltzaileei soilik eragiten die:</string>
|
||||
<string name="anonymous_settings">Erabiltzaile anonimoei soilik eragiten die:</string>
|
||||
<string name="select_language">Hizkuntza</string>
|
||||
<plurals name="main_posts_count">
|
||||
<item quantity="one">%s\nPost</item>
|
||||
@ -109,10 +107,7 @@
|
||||
<string name="saved">Gordeta</string>
|
||||
<string name="tagged">Etiketatuta</string>
|
||||
<string name="dm_person">Mezua</string>
|
||||
<string name="like_without_count">Atsegitea</string>
|
||||
<string name="unlike_without_count">Ez dut atsegin</string>
|
||||
<string name="bookmark">Laster-marka</string>
|
||||
<string name="unbookmark">Laster-marka kendu</string>
|
||||
<string name="follow">Jarraitu</string>
|
||||
<string name="unfollow">Jarraitzeari utzi</string>
|
||||
<string name="favorite_short" comment="Adjective, not verb">Gogokoa</string>
|
||||
@ -140,7 +135,6 @@
|
||||
<string name="dialog_export_failed">Esportatzeak huts egin du!</string>
|
||||
<string name="refresh">Freskatu</string>
|
||||
<string name="get_cookies">Eskuratu cookieak</string>
|
||||
<string name="desktop_2fa">Mahaigaineko modua</string>
|
||||
<string name="time_settings_title_custom">Erabili pertsonalizatutako formatua</string>
|
||||
<string name="time_settings_title_separator">Bereizlea</string>
|
||||
<string name="time_settings_title_time_format">Ordu-formatua</string>
|
||||
@ -207,14 +201,8 @@
|
||||
<string name="downloader_error_creating_folder">Errorea karpeta sortzean!</string>
|
||||
<string name="downloader_error_download_file">Errorea fitxategia deskargatzean</string>
|
||||
<string name="downloader_too_many">100 bidalketa deskargatu ditzakezu une berean. Ez izan gutiziatsu!</string>
|
||||
<string name="comment_viewer_copy_comment">Kopiatu iruzkina</string>
|
||||
<string name="comment_viewer_see_likers">Ikusi iruzkinen atsegiteak</string>
|
||||
<string name="comment_viewer_reply_comment">Erantzun iruzkinari</string>
|
||||
<string name="comment_viewer_like_comment">Atsegin iruzkina</string>
|
||||
<string name="comment_viewer_unlike_comment">Ez dut atsegin</string>
|
||||
<string name="comment_viewer_translate_comment">Itzuli iruzkina</string>
|
||||
<string name="comment_viewer_delete_comment">Delete comment</string>
|
||||
<string name="comment_send_empty_comment">Iruzkin hutsik ez!</string>
|
||||
<string name="comment_view_mention_user_search">Erabiltzaile-izena bilatu nahi duzu?</string>
|
||||
<string name="comment_view_mention_hash_search">Traol-hitza bilatu nahi duzu?</string>
|
||||
<string name="followers_type_followers">Jarraitzaileak</string>
|
||||
|
@ -40,8 +40,6 @@
|
||||
<string name="save_to_folder">ذخیره در پوشه سفارشی</string>
|
||||
<string name="select_folder">انتخاب پوشه</string>
|
||||
<string name="theme_settings">پوسته</string>
|
||||
<string name="login_settings">فقط بر کاربران وارد شده اثر دارد:</string>
|
||||
<string name="anonymous_settings">فقط بر کاربران ناشناس اثر دارد:</string>
|
||||
<string name="select_language">زبان</string>
|
||||
<plurals name="main_posts_count">
|
||||
<item quantity="one">%s\n پست</item>
|
||||
@ -110,10 +108,7 @@
|
||||
<string name="saved">ذخیره شد</string>
|
||||
<string name="tagged">تگ شده</string>
|
||||
<string name="dm_person">پیام</string>
|
||||
<string name="like_without_count">پسند</string>
|
||||
<string name="unlike_without_count">ناپسند</string>
|
||||
<string name="bookmark">نشانک</string>
|
||||
<string name="unbookmark">حذف نشانک</string>
|
||||
<string name="follow">پیگرفتن</string>
|
||||
<string name="unfollow">پایان پیگرفتن</string>
|
||||
<string name="favorite_short" comment="Adjective, not verb">برگزیده</string>
|
||||
@ -141,7 +136,6 @@
|
||||
<string name="dialog_export_failed">پشتبان گیری با موفقیت نبود!</string>
|
||||
<string name="refresh">تازه سازی</string>
|
||||
<string name="get_cookies">گرفتن کوکی ها</string>
|
||||
<string name="desktop_2fa">حالت دسکتاپ</string>
|
||||
<string name="time_settings_title_custom">استفاده از فرمت سفارشی</string>
|
||||
<string name="time_settings_title_separator">تفکیک کننده</string>
|
||||
<string name="time_settings_title_time_format">فرمت زمان</string>
|
||||
@ -208,14 +202,8 @@
|
||||
<string name="downloader_error_creating_folder">خطا در ایجاد پوشه!</string>
|
||||
<string name="downloader_error_download_file">خطا در دانلود فایل</string>
|
||||
<string name="downloader_too_many">شما فقط 100 پست در یک زمان میتوانید دانلود کنید. خیلی حریص نباشید!</string>
|
||||
<string name="comment_viewer_copy_comment">کپی دیدگاه</string>
|
||||
<string name="comment_viewer_see_likers">View comment likers</string>
|
||||
<string name="comment_viewer_reply_comment">پاسخ به دیدگاه</string>
|
||||
<string name="comment_viewer_like_comment">پسندیدن دیدگاه</string>
|
||||
<string name="comment_viewer_unlike_comment">نپسندیدن دیدگاه</string>
|
||||
<string name="comment_viewer_translate_comment">گرداندن دیدگاه</string>
|
||||
<string name="comment_viewer_delete_comment">Delete comment</string>
|
||||
<string name="comment_send_empty_comment">بدون دیدگاه تهی!</string>
|
||||
<string name="comment_view_mention_user_search">ایا میخواهید نام کاربری جستوجو کنید ؟</string>
|
||||
<string name="comment_view_mention_hash_search">آیا میخواهید هشتگ جستوجو کنید؟</string>
|
||||
<string name="followers_type_followers">پیگیران</string>
|
||||
|
@ -40,8 +40,6 @@
|
||||
<string name="save_to_folder">Enregistrer dans un dossier personnalisé</string>
|
||||
<string name="select_folder">Sélectionnez un dossier</string>
|
||||
<string name="theme_settings">Thème</string>
|
||||
<string name="login_settings">N\'affecte que les utilisateurs connectés :</string>
|
||||
<string name="anonymous_settings">N\'affecte que les utilisateurs anonymes:</string>
|
||||
<string name="select_language">Langues</string>
|
||||
<plurals name="main_posts_count">
|
||||
<item quantity="one">%s\nPublication</item>
|
||||
@ -109,10 +107,7 @@
|
||||
<string name="saved">Sauvegardé</string>
|
||||
<string name="tagged">Taggé</string>
|
||||
<string name="dm_person">Message</string>
|
||||
<string name="like_without_count">J\'aime</string>
|
||||
<string name="unlike_without_count">Ne plus aimer</string>
|
||||
<string name="bookmark">Ajouter aux marque-pages</string>
|
||||
<string name="unbookmark">Retirer des marque-pages</string>
|
||||
<string name="follow">Suivre</string>
|
||||
<string name="unfollow">Ne plus suivre</string>
|
||||
<string name="favorite_short" comment="Adjective, not verb">Mettre en favoris</string>
|
||||
@ -140,7 +135,6 @@
|
||||
<string name="dialog_export_failed">Erreur d\'exportation!</string>
|
||||
<string name="refresh">Actualiser</string>
|
||||
<string name="get_cookies">Récupérer les cookies</string>
|
||||
<string name="desktop_2fa">Mode desktop</string>
|
||||
<string name="time_settings_title_custom">Utiliser un format personnalisé</string>
|
||||
<string name="time_settings_title_separator">Séparateur</string>
|
||||
<string name="time_settings_title_time_format">Format de l\'heure</string>
|
||||
@ -207,14 +201,8 @@
|
||||
<string name="downloader_error_creating_folder">Erreur de création de dossier !</string>
|
||||
<string name="downloader_error_download_file">Erreur de téléchargement du fichier</string>
|
||||
<string name="downloader_too_many">Vous ne pouvez télécharger que 100 publications à la fois. Ne soyez pas trop gourmands !</string>
|
||||
<string name="comment_viewer_copy_comment">Copier le commentaire</string>
|
||||
<string name="comment_viewer_see_likers">Voir les \"j\'aime\" du commentaire</string>
|
||||
<string name="comment_viewer_reply_comment">Répondre au commentaire</string>
|
||||
<string name="comment_viewer_like_comment">Aimer le commentaire</string>
|
||||
<string name="comment_viewer_unlike_comment">Retirer le j\'aime du commentaire</string>
|
||||
<string name="comment_viewer_translate_comment">Traduire le commentaire</string>
|
||||
<string name="comment_viewer_delete_comment">Supprimer le commentaire</string>
|
||||
<string name="comment_send_empty_comment">Aucun commentaire vide !</string>
|
||||
<string name="comment_view_mention_user_search">Souhaitez-vous faire une recherche sur le nom d\'utilisateur ?</string>
|
||||
<string name="comment_view_mention_hash_search">Souhaitez-vous faire une recherch sur le hashtag ?</string>
|
||||
<string name="followers_type_followers">Abonnés</string>
|
||||
|
@ -40,8 +40,6 @@
|
||||
<string name="save_to_folder">खुद के द्बारा निर्धारित फोल्डर पे रखें</string>
|
||||
<string name="select_folder">फोल्डर का चयन करें</string>
|
||||
<string name="theme_settings">थीम</string>
|
||||
<string name="login_settings">सिर्फ लग इन किए हुए ब्यबहारकारी के लिये</string>
|
||||
<string name="anonymous_settings">गुमनामी लोगों के लिये</string>
|
||||
<string name="select_language">भाषा</string>
|
||||
<plurals name="main_posts_count">
|
||||
<item quantity="one">%s\nपोस्ट</item>
|
||||
@ -110,10 +108,7 @@
|
||||
<string name="saved">सेव किया</string>
|
||||
<string name="tagged">टैग किये</string>
|
||||
<string name="dm_person">संदेश</string>
|
||||
<string name="like_without_count">पसन्द</string>
|
||||
<string name="unlike_without_count">नापसंद</string>
|
||||
<string name="bookmark">बुकमार्क</string>
|
||||
<string name="unbookmark">बुकमार्क न करें</string>
|
||||
<string name="follow">अनुसरण करे</string>
|
||||
<string name="unfollow">अनुसरण ना करें</string>
|
||||
<string name="favorite_short" comment="Adjective, not verb">पसंदीदा</string>
|
||||
@ -141,7 +136,6 @@
|
||||
<string name="dialog_export_failed">निर्यात करने में विफल!</string>
|
||||
<string name="refresh">ताज़ा करें:</string>
|
||||
<string name="get_cookies">कुकिज पायें</string>
|
||||
<string name="desktop_2fa">डेस्कटप मोड करें</string>
|
||||
<string name="time_settings_title_custom">कस्टम फर्माट ब्यबहार करें</string>
|
||||
<string name="time_settings_title_separator">सेपरेटर</string>
|
||||
<string name="time_settings_title_time_format">समय का स्बरुप</string>
|
||||
@ -208,14 +202,8 @@
|
||||
<string name="downloader_error_creating_folder">फोलडर बनाने में त्रुटि!</string>
|
||||
<string name="downloader_error_download_file">फ़ाइल डाउनलोड करने में त्रुटि</string>
|
||||
<string name="downloader_too_many">आप सिर्फ १०० पोस्टस एक बार में डाउनलोड कर सकते हैं. ज्यादा लोभी बनना हानिकारक हैं!</string>
|
||||
<string name="comment_viewer_copy_comment">टिप्पणी कॉपी करें</string>
|
||||
<string name="comment_viewer_see_likers">View comment likers</string>
|
||||
<string name="comment_viewer_reply_comment">टिप्पणी का जवाब दें</string>
|
||||
<string name="comment_viewer_like_comment">टिप्पणी को पसन्द करें</string>
|
||||
<string name="comment_viewer_unlike_comment">टिप्पणी को पसन्द न करें</string>
|
||||
<string name="comment_viewer_translate_comment">टिप्पणी का अनुवाद करें</string>
|
||||
<string name="comment_viewer_delete_comment">टिप्पणी हटाएं</string>
|
||||
<string name="comment_send_empty_comment">रिक्त टिप्पणी न करें!</string>
|
||||
<string name="comment_view_mention_user_search">युज़रनेम को ढूंढ़ना चाहते हैं?</string>
|
||||
<string name="comment_view_mention_hash_search">हैशटैग को ढूंढ़ना चाहते हैं?</string>
|
||||
<string name="followers_type_followers">अनुयायी</string>
|
||||
|
@ -40,8 +40,6 @@
|
||||
<string name="save_to_folder">Simpan ke folder khusus</string>
|
||||
<string name="select_folder">Pilih folder</string>
|
||||
<string name="theme_settings">Tema</string>
|
||||
<string name="login_settings">Hanya memengaruhi pengguna yang sudah masuk:</string>
|
||||
<string name="anonymous_settings">Hanya memengaruhi pengguna anonim:</string>
|
||||
<string name="select_language">Bahasa</string>
|
||||
<plurals name="main_posts_count">
|
||||
<item quantity="other">%s\nKiriman</item>
|
||||
@ -105,10 +103,7 @@
|
||||
<string name="saved">Tersimpan</string>
|
||||
<string name="tagged">Ditandai</string>
|
||||
<string name="dm_person">Pesan</string>
|
||||
<string name="like_without_count">Suka</string>
|
||||
<string name="unlike_without_count">Batal Suka</string>
|
||||
<string name="bookmark">Markah</string>
|
||||
<string name="unbookmark">Batalkan Markah</string>
|
||||
<string name="follow">Ikuti</string>
|
||||
<string name="unfollow">Batal Ikuti</string>
|
||||
<string name="favorite_short" comment="Adjective, not verb">Favorit</string>
|
||||
@ -136,7 +131,6 @@
|
||||
<string name="dialog_export_failed">Gagal mengekspor!</string>
|
||||
<string name="refresh">Muat ulang</string>
|
||||
<string name="get_cookies">Dapatkan cookies</string>
|
||||
<string name="desktop_2fa">Desktop Mode\nuntuk 2FA</string>
|
||||
<string name="time_settings_title_custom">Gunakan format suaian</string>
|
||||
<string name="time_settings_title_separator">Pemisah</string>
|
||||
<string name="time_settings_title_time_format">Format Jam</string>
|
||||
@ -203,14 +197,8 @@
|
||||
<string name="downloader_error_creating_folder">Galat membuat folder!</string>
|
||||
<string name="downloader_error_download_file">Galat mengunduh berkas</string>
|
||||
<string name="downloader_too_many">Anda hanya dapat mengunduh 100 kiriman saat bersamaan. Jangan serakah-serakah!</string>
|
||||
<string name="comment_viewer_copy_comment">Salin komentar</string>
|
||||
<string name="comment_viewer_see_likers">Lihat penyuka komentar</string>
|
||||
<string name="comment_viewer_reply_comment">Balas komentar</string>
|
||||
<string name="comment_viewer_like_comment">Suka komentar</string>
|
||||
<string name="comment_viewer_unlike_comment">Batal suka komentar</string>
|
||||
<string name="comment_viewer_translate_comment">Terjemahkan komentar</string>
|
||||
<string name="comment_viewer_delete_comment">Delete comment</string>
|
||||
<string name="comment_send_empty_comment">Ups, komentar kosong!</string>
|
||||
<string name="comment_view_mention_user_search">Apakah anda ingin mencari nama pengguna ini?</string>
|
||||
<string name="comment_view_mention_hash_search">Apakah anda ingin mencari tagar ini?</string>
|
||||
<string name="followers_type_followers">Pengikut</string>
|
||||
|
@ -40,8 +40,6 @@
|
||||
<string name="save_to_folder">Salva alla cartella personalizzata</string>
|
||||
<string name="select_folder">Seleziona cartella</string>
|
||||
<string name="theme_settings">Tema</string>
|
||||
<string name="login_settings">Influenza solo gli utenti connessi:</string>
|
||||
<string name="anonymous_settings">Influenza solo gli utenti anonimi:</string>
|
||||
<string name="select_language">Lingua</string>
|
||||
<plurals name="main_posts_count">
|
||||
<item quantity="one">%s\nPubblicazione</item>
|
||||
@ -109,10 +107,7 @@
|
||||
<string name="saved">Salvati</string>
|
||||
<string name="tagged">Taggati</string>
|
||||
<string name="dm_person">Messaggio</string>
|
||||
<string name="like_without_count">Mi Piace</string>
|
||||
<string name="unlike_without_count">Non mi Piace</string>
|
||||
<string name="bookmark">Contrassegna</string>
|
||||
<string name="unbookmark">Rimuovi dai preferiti</string>
|
||||
<string name="follow">Segui</string>
|
||||
<string name="unfollow">Non Seguire Più</string>
|
||||
<string name="favorite_short" comment="Adjective, not verb">Preferito</string>
|
||||
@ -140,7 +135,6 @@
|
||||
<string name="dialog_export_failed">Impossibile esportare!</string>
|
||||
<string name="refresh">Ricarica</string>
|
||||
<string name="get_cookies">Ottieni cookie</string>
|
||||
<string name="desktop_2fa">Modalità Desktop</string>
|
||||
<string name="time_settings_title_custom">Usa formato personalizzato</string>
|
||||
<string name="time_settings_title_separator">Separatore</string>
|
||||
<string name="time_settings_title_time_format">Formato Ora</string>
|
||||
@ -207,14 +201,8 @@
|
||||
<string name="downloader_error_creating_folder">Errore creando la cartella!</string>
|
||||
<string name="downloader_error_download_file">Errore scaricando il file</string>
|
||||
<string name="downloader_too_many">Puoi scaricare solo 100 post per volta. Non essere troppo avido!</string>
|
||||
<string name="comment_viewer_copy_comment">Copia commento</string>
|
||||
<string name="comment_viewer_see_likers">Visualizza i mi piace del commento</string>
|
||||
<string name="comment_viewer_reply_comment">Rispondi al commento</string>
|
||||
<string name="comment_viewer_like_comment">Mi Piace il commento</string>
|
||||
<string name="comment_viewer_unlike_comment">Il commento Non mi Piace Più</string>
|
||||
<string name="comment_viewer_translate_comment">Traduci commento</string>
|
||||
<string name="comment_viewer_delete_comment">Elimina commento</string>
|
||||
<string name="comment_send_empty_comment">Nessun commento vuoto!</string>
|
||||
<string name="comment_view_mention_user_search">Vuoi cercare il nome utente?</string>
|
||||
<string name="comment_view_mention_hash_search">Vuoi cercare l\'hashtag?</string>
|
||||
<string name="followers_type_followers">Seguaci</string>
|
||||
|
@ -40,8 +40,6 @@
|
||||
<string name="save_to_folder">カスタムフォルダーに保存</string>
|
||||
<string name="select_folder">フォルダーを選択</string>
|
||||
<string name="theme_settings">テーマ</string>
|
||||
<string name="login_settings">ログインユーザーにのみ影響します:</string>
|
||||
<string name="anonymous_settings">匿名ユーザーにのみ影響します:</string>
|
||||
<string name="select_language">言語</string>
|
||||
<plurals name="main_posts_count">
|
||||
<item quantity="other">%s\n件</item>
|
||||
@ -105,10 +103,7 @@
|
||||
<string name="saved">保存</string>
|
||||
<string name="tagged">タグ付き</string>
|
||||
<string name="dm_person">メッセージ</string>
|
||||
<string name="like_without_count">いいね!</string>
|
||||
<string name="unlike_without_count">いいね!を取り消す</string>
|
||||
<string name="bookmark">ブックマーク</string>
|
||||
<string name="unbookmark">ブックマークを解除する</string>
|
||||
<string name="follow">フォローする</string>
|
||||
<string name="unfollow">フォローを解除</string>
|
||||
<string name="favorite_short" comment="Adjective, not verb">お気に入り</string>
|
||||
@ -136,7 +131,6 @@
|
||||
<string name="dialog_export_failed">エクスポートに失敗しました!</string>
|
||||
<string name="refresh">更新</string>
|
||||
<string name="get_cookies">Cookie を取得する</string>
|
||||
<string name="desktop_2fa">デスクトップモード</string>
|
||||
<string name="time_settings_title_custom">カスタム形式を使用する</string>
|
||||
<string name="time_settings_title_separator">区切り記号</string>
|
||||
<string name="time_settings_title_time_format">時刻形式</string>
|
||||
@ -203,14 +197,8 @@
|
||||
<string name="downloader_error_creating_folder">フォルダの作成中にエラーが発生しました!</string>
|
||||
<string name="downloader_error_download_file">ダウンロード中にエラーが発生しました</string>
|
||||
<string name="downloader_too_many">一度に100個までの投稿しかダウンロードできません。取り過ぎ注意!</string>
|
||||
<string name="comment_viewer_copy_comment">コメントをコピー</string>
|
||||
<string name="comment_viewer_see_likers">コメントにいいね!したユーザーを表示</string>
|
||||
<string name="comment_viewer_reply_comment">コメントに返信</string>
|
||||
<string name="comment_viewer_like_comment">コメントに いいね!</string>
|
||||
<string name="comment_viewer_unlike_comment">コメントのいいね!を取り消す</string>
|
||||
<string name="comment_viewer_translate_comment">コメントを翻訳</string>
|
||||
<string name="comment_viewer_delete_comment">コメントを削除</string>
|
||||
<string name="comment_send_empty_comment">メッセージが未入力です!</string>
|
||||
<string name="comment_view_mention_user_search">ユーザー名を検索しますか?</string>
|
||||
<string name="comment_view_mention_hash_search">ハッシュタグを検索しますか?</string>
|
||||
<string name="followers_type_followers">フォロワー</string>
|
||||
|
@ -40,8 +40,6 @@
|
||||
<string name="save_to_folder">Save to custom folder</string>
|
||||
<string name="select_folder">폴더 선택</string>
|
||||
<string name="theme_settings">테마</string>
|
||||
<string name="login_settings">Only affects logged-in users:</string>
|
||||
<string name="anonymous_settings">Only affects anonymous users:</string>
|
||||
<string name="select_language">언어</string>
|
||||
<plurals name="main_posts_count">
|
||||
<item quantity="other">%s\n게시물</item>
|
||||
@ -105,10 +103,7 @@
|
||||
<string name="saved">저장됨</string>
|
||||
<string name="tagged">태그됨</string>
|
||||
<string name="dm_person">메시지</string>
|
||||
<string name="like_without_count">좋아요</string>
|
||||
<string name="unlike_without_count">좋아요 취소</string>
|
||||
<string name="bookmark">북마크 하기</string>
|
||||
<string name="unbookmark">북마크에서 제거</string>
|
||||
<string name="follow">팔로우</string>
|
||||
<string name="unfollow">팔로우 취소</string>
|
||||
<string name="favorite_short" comment="Adjective, not verb">즐겨찾기</string>
|
||||
@ -136,7 +131,6 @@
|
||||
<string name="dialog_export_failed">Failed to export!</string>
|
||||
<string name="refresh">새로고침</string>
|
||||
<string name="get_cookies">Get cookies</string>
|
||||
<string name="desktop_2fa">Desktop Mode</string>
|
||||
<string name="time_settings_title_custom">Use custom format</string>
|
||||
<string name="time_settings_title_separator">Separator</string>
|
||||
<string name="time_settings_title_time_format">시간 형식</string>
|
||||
@ -203,14 +197,8 @@
|
||||
<string name="downloader_error_creating_folder">Error creating folder!</string>
|
||||
<string name="downloader_error_download_file">Error downloading file</string>
|
||||
<string name="downloader_too_many">You can only download 100 posts at a time. Don\'t be too greedy!</string>
|
||||
<string name="comment_viewer_copy_comment">댓글 복사</string>
|
||||
<string name="comment_viewer_see_likers">좋아요 보기</string>
|
||||
<string name="comment_viewer_reply_comment">답글 달기</string>
|
||||
<string name="comment_viewer_like_comment">댓글 좋아요</string>
|
||||
<string name="comment_viewer_unlike_comment">댓글 좋아요 삭제</string>
|
||||
<string name="comment_viewer_translate_comment">댓글 번역</string>
|
||||
<string name="comment_viewer_delete_comment">댓글 삭제</string>
|
||||
<string name="comment_send_empty_comment">빈 댓글이 안 됍니다.</string>
|
||||
<string name="comment_view_mention_user_search">Do you want to search the username?</string>
|
||||
<string name="comment_view_mention_hash_search">Do you want to search the hashtag?</string>
|
||||
<string name="followers_type_followers">팔로워</string>
|
||||
|
@ -40,8 +40,6 @@
|
||||
<string name="save_to_folder">Зачувај во друга папка</string>
|
||||
<string name="select_folder">Одбери папка</string>
|
||||
<string name="theme_settings">Тема</string>
|
||||
<string name="login_settings">Влијае само на корисниците кои се најавени:</string>
|
||||
<string name="anonymous_settings">Влијае на анонимните корисници:</string>
|
||||
<string name="select_language">Јазик</string>
|
||||
<plurals name="main_posts_count">
|
||||
<item quantity="one">%s\nОбјава</item>
|
||||
@ -109,10 +107,7 @@
|
||||
<string name="saved">Зачувано</string>
|
||||
<string name="tagged">Означен</string>
|
||||
<string name="dm_person">Порака</string>
|
||||
<string name="like_without_count">Лајк</string>
|
||||
<string name="unlike_without_count">Дислајк</string>
|
||||
<string name="bookmark">Обележи</string>
|
||||
<string name="unbookmark">Одобележи</string>
|
||||
<string name="follow">Следи</string>
|
||||
<string name="unfollow">Одследи</string>
|
||||
<string name="favorite_short" comment="Adjective, not verb">Омилен</string>
|
||||
@ -140,7 +135,6 @@
|
||||
<string name="dialog_export_failed">Неуспешно експортиање!</string>
|
||||
<string name="refresh">Обнови</string>
|
||||
<string name="get_cookies">Превземи колачиња</string>
|
||||
<string name="desktop_2fa">Десктоп изглед</string>
|
||||
<string name="time_settings_title_custom">Користи свој формат</string>
|
||||
<string name="time_settings_title_separator">Разделувач</string>
|
||||
<string name="time_settings_title_time_format">Формат на време</string>
|
||||
@ -207,14 +201,8 @@
|
||||
<string name="downloader_error_creating_folder">Фатална грешка при креирање папка!</string>
|
||||
<string name="downloader_error_download_file">Фатална грешка при превзамање фајл</string>
|
||||
<string name="downloader_too_many">Можете само 100 постови наеднаш да превземите. Не бидете алчни!</string>
|
||||
<string name="comment_viewer_copy_comment">Копирај Коментар</string>
|
||||
<string name="comment_viewer_see_likers">Прегледај лајкови на коментар</string>
|
||||
<string name="comment_viewer_reply_comment">Одговори на коментар</string>
|
||||
<string name="comment_viewer_like_comment">Лајкни коментар</string>
|
||||
<string name="comment_viewer_unlike_comment">Одлајкни коментар</string>
|
||||
<string name="comment_viewer_translate_comment">Преведи коментар</string>
|
||||
<string name="comment_viewer_delete_comment">Избриши коментар</string>
|
||||
<string name="comment_send_empty_comment">Не смее празни коментари!</string>
|
||||
<string name="comment_view_mention_user_search">Дали сакате да го пребарате ова корисничко име?</string>
|
||||
<string name="comment_view_mention_hash_search">Дали сакате да го пребарате овај хаштаг?</string>
|
||||
<string name="followers_type_followers">Следачи</string>
|
||||
|
@ -40,8 +40,6 @@
|
||||
<string name="save_to_folder">Opslaan in aangepaste map</string>
|
||||
<string name="select_folder">Selecteer map</string>
|
||||
<string name="theme_settings">Thema</string>
|
||||
<string name="login_settings">Heeft alleen invloed op ingelogde gebruikers:</string>
|
||||
<string name="anonymous_settings">Heeft alleen invloed op anonieme gebruikers:</string>
|
||||
<string name="select_language">Taal</string>
|
||||
<plurals name="main_posts_count">
|
||||
<item quantity="one">%s\nPost</item>
|
||||
@ -109,10 +107,7 @@
|
||||
<string name="saved">Opgeslagen</string>
|
||||
<string name="tagged">Getagd</string>
|
||||
<string name="dm_person">Bericht</string>
|
||||
<string name="like_without_count">Vind ik leuk</string>
|
||||
<string name="unlike_without_count">Vind ik niet meer leuk</string>
|
||||
<string name="bookmark">Toevoegen aan favorieten</string>
|
||||
<string name="unbookmark">Verwijderen uit favorieten</string>
|
||||
<string name="follow">Volg</string>
|
||||
<string name="unfollow">Ontvolg</string>
|
||||
<string name="favorite_short" comment="Adjective, not verb">Toevoegen aan favorieten</string>
|
||||
@ -140,7 +135,6 @@
|
||||
<string name="dialog_export_failed">Exporteren mislukt!</string>
|
||||
<string name="refresh">Ververs</string>
|
||||
<string name="get_cookies">Cookies ophalen</string>
|
||||
<string name="desktop_2fa">Desktop Modus</string>
|
||||
<string name="time_settings_title_custom">Aangepaste indeling gebruiken</string>
|
||||
<string name="time_settings_title_separator">Scheidingsteken</string>
|
||||
<string name="time_settings_title_time_format">Tijdnotatie</string>
|
||||
@ -207,14 +201,8 @@
|
||||
<string name="downloader_error_creating_folder">Fout bij aanmaken map!</string>
|
||||
<string name="downloader_error_download_file">Fout bij downloaden bestand</string>
|
||||
<string name="downloader_too_many">Je kunt slechts 100 berichten per keer downloaden. Wees niet te hebberig!</string>
|
||||
<string name="comment_viewer_copy_comment">Kopieer reactie</string>
|
||||
<string name="comment_viewer_see_likers">Bekijk reacties likers</string>
|
||||
<string name="comment_viewer_reply_comment">Reageer op opmerking</string>
|
||||
<string name="comment_viewer_like_comment">Vind reactie leuk</string>
|
||||
<string name="comment_viewer_unlike_comment">Vind reactie niet meer leuk</string>
|
||||
<string name="comment_viewer_translate_comment">Reactie vertalen</string>
|
||||
<string name="comment_viewer_delete_comment">Verwijder reactie</string>
|
||||
<string name="comment_send_empty_comment">Geen lege reacties!</string>
|
||||
<string name="comment_view_mention_user_search">Wil je de gebruikersnaam zoeken?</string>
|
||||
<string name="comment_view_mention_hash_search">Wil je de hashtag zoeken?</string>
|
||||
<string name="followers_type_followers">Volgers</string>
|
||||
|
@ -40,8 +40,6 @@
|
||||
<string name="save_to_folder">ନିଜେ ସ୍ଥିର କରିଥିବା ଫୋଲଡର ରେ ରଖ।</string>
|
||||
<string name="select_folder">ଫୋଲ୍ଡର୍ ଚୟନ କରନ୍ତୁ</string>
|
||||
<string name="theme_settings">ଥିମ</string>
|
||||
<string name="login_settings">କେବଳ ଲଗ ଇନ ହୋଇଥିବା ବ୍ୟବହାରକାରୀଙ୍କ ପାଇଁ:</string>
|
||||
<string name="anonymous_settings">କେବଳ ଲଗ ଇନ ହୋଇନଥିବା ବ୍ୟବହାରକାରୀଙ୍କ ପାଇଁ:</string>
|
||||
<string name="select_language">ଭାଷା</string>
|
||||
<plurals name="main_posts_count">
|
||||
<item quantity="one">%s\nPost</item>
|
||||
@ -109,10 +107,7 @@
|
||||
<string name="saved">ସଞ୍ଚୟ ହେଲା</string>
|
||||
<string name="tagged">ଟ୍ୟାଗ୍ କରିଛନ୍ତି</string>
|
||||
<string name="dm_person">ସନ୍ଦେଶ</string>
|
||||
<string name="like_without_count">ପସନ୍ଦ କରନ୍ତୁ</string>
|
||||
<string name="unlike_without_count">Unlike</string>
|
||||
<string name="bookmark">Bookmark</string>
|
||||
<string name="unbookmark">Unbookmark</string>
|
||||
<string name="follow">Follow</string>
|
||||
<string name="unfollow">Unfollow</string>
|
||||
<string name="favorite_short" comment="Adjective, not verb">Favorite</string>
|
||||
@ -140,7 +135,6 @@
|
||||
<string name="dialog_export_failed">Failed to export!</string>
|
||||
<string name="refresh">Refresh</string>
|
||||
<string name="get_cookies">Get cookies</string>
|
||||
<string name="desktop_2fa">Desktop Mode</string>
|
||||
<string name="time_settings_title_custom">Use custom format</string>
|
||||
<string name="time_settings_title_separator">Separator</string>
|
||||
<string name="time_settings_title_time_format">Time Format</string>
|
||||
@ -207,14 +201,8 @@
|
||||
<string name="downloader_error_creating_folder">Error creating folder!</string>
|
||||
<string name="downloader_error_download_file">Error downloading file</string>
|
||||
<string name="downloader_too_many">You can only download 100 posts at a time. Don\'t be too greedy!</string>
|
||||
<string name="comment_viewer_copy_comment">Copy comment</string>
|
||||
<string name="comment_viewer_see_likers">View comment likers</string>
|
||||
<string name="comment_viewer_reply_comment">Reply to comment</string>
|
||||
<string name="comment_viewer_like_comment">Like comment</string>
|
||||
<string name="comment_viewer_unlike_comment">Unlike comment</string>
|
||||
<string name="comment_viewer_translate_comment">Translate comment</string>
|
||||
<string name="comment_viewer_delete_comment">Delete comment</string>
|
||||
<string name="comment_send_empty_comment">No empty comments!</string>
|
||||
<string name="comment_view_mention_user_search">Do you want to search the username?</string>
|
||||
<string name="comment_view_mention_hash_search">Do you want to search the hashtag?</string>
|
||||
<string name="followers_type_followers">Followers</string>
|
||||
|
@ -40,8 +40,6 @@
|
||||
<string name="save_to_folder">Zapisz w folderze niestandardowym</string>
|
||||
<string name="select_folder">Wybierz folder</string>
|
||||
<string name="theme_settings">Motyw</string>
|
||||
<string name="login_settings">Dotyczy tylko zalogowanych użytkowników:</string>
|
||||
<string name="anonymous_settings">Dotyczy tylko anonimowych użytkowników:</string>
|
||||
<string name="select_language">Język</string>
|
||||
<plurals name="main_posts_count">
|
||||
<item quantity="one">%s\npost</item>
|
||||
@ -117,10 +115,7 @@
|
||||
<string name="saved">Zapisane</string>
|
||||
<string name="tagged">Oznaczono</string>
|
||||
<string name="dm_person">Message</string>
|
||||
<string name="like_without_count">Polub</string>
|
||||
<string name="unlike_without_count">Cofnij polubienie</string>
|
||||
<string name="bookmark">Zapisz</string>
|
||||
<string name="unbookmark">Usuń z zapisanych</string>
|
||||
<string name="follow">Obserwuj</string>
|
||||
<string name="unfollow">Przestań obserwować</string>
|
||||
<string name="favorite_short" comment="Adjective, not verb">Ulubiony</string>
|
||||
@ -148,7 +143,6 @@
|
||||
<string name="dialog_export_failed">Eksportowanie nie powiodło się!</string>
|
||||
<string name="refresh">Odśwież</string>
|
||||
<string name="get_cookies">Pobierz ciasteczka</string>
|
||||
<string name="desktop_2fa">Tryb PC</string>
|
||||
<string name="time_settings_title_custom">Niestandardowy format</string>
|
||||
<string name="time_settings_title_separator">Separator</string>
|
||||
<string name="time_settings_title_time_format">Format czasu</string>
|
||||
@ -215,14 +209,8 @@
|
||||
<string name="downloader_error_creating_folder">Błąd podczas tworzenia folderu!</string>
|
||||
<string name="downloader_error_download_file">Błąd podczas pobierania pliku</string>
|
||||
<string name="downloader_too_many">Możesz pobrać tylko 100 postów jednocześnie. Nie bądź zbyt chciwy!</string>
|
||||
<string name="comment_viewer_copy_comment">Skopiuj komentarz</string>
|
||||
<string name="comment_viewer_see_likers">Wyświetl polubienia komentarzy</string>
|
||||
<string name="comment_viewer_reply_comment">Odpowiedz na komentarz</string>
|
||||
<string name="comment_viewer_like_comment">Polub komentarz</string>
|
||||
<string name="comment_viewer_unlike_comment">Usuń polubienie komentarza</string>
|
||||
<string name="comment_viewer_translate_comment">Tłumacz komentarz</string>
|
||||
<string name="comment_viewer_delete_comment">Usuń komentarz</string>
|
||||
<string name="comment_send_empty_comment">Brak komentarzy!</string>
|
||||
<string name="comment_view_mention_user_search">Czy chcesz wyszukać przy pomocy nazwy użytkownika?</string>
|
||||
<string name="comment_view_mention_hash_search">Czy chcesz wyszukać przy pomocy hashtag\'a?</string>
|
||||
<string name="followers_type_followers">Obserwujący</string>
|
||||
|
@ -40,8 +40,6 @@
|
||||
<string name="save_to_folder">Salvar em pasta personalizada</string>
|
||||
<string name="select_folder">Selecionar pasta</string>
|
||||
<string name="theme_settings">Tema</string>
|
||||
<string name="login_settings">Afeta apenas usuários logados:</string>
|
||||
<string name="anonymous_settings">Afeta apenas usuários anônimos:</string>
|
||||
<string name="select_language">Idioma</string>
|
||||
<plurals name="main_posts_count">
|
||||
<item quantity="one">%s\nPublicação</item>
|
||||
@ -109,10 +107,7 @@
|
||||
<string name="saved">Salvo</string>
|
||||
<string name="tagged">Marcado</string>
|
||||
<string name="dm_person">Mensagem</string>
|
||||
<string name="like_without_count">Curtir</string>
|
||||
<string name="unlike_without_count">Descurtir</string>
|
||||
<string name="bookmark">Salvar</string>
|
||||
<string name="unbookmark">Remover</string>
|
||||
<string name="follow">Seguir</string>
|
||||
<string name="unfollow">Deixar de seguir</string>
|
||||
<string name="favorite_short" comment="Adjective, not verb">Favorito</string>
|
||||
@ -140,7 +135,6 @@
|
||||
<string name="dialog_export_failed">Falha ao exportar!</string>
|
||||
<string name="refresh">Atualizar</string>
|
||||
<string name="get_cookies">Obter cookies</string>
|
||||
<string name="desktop_2fa">Modo Desktop</string>
|
||||
<string name="time_settings_title_custom">Usar formato personalizado</string>
|
||||
<string name="time_settings_title_separator">Separador</string>
|
||||
<string name="time_settings_title_time_format">Formato de hora</string>
|
||||
@ -207,14 +201,8 @@
|
||||
<string name="downloader_error_creating_folder">Erro ao criar pasta!</string>
|
||||
<string name="downloader_error_download_file">Erro ao baixar arquivo</string>
|
||||
<string name="downloader_too_many">Você só pode baixar 100 publicações por vez. Não seja tão ganancioso!</string>
|
||||
<string name="comment_viewer_copy_comment">Copiar comentário</string>
|
||||
<string name="comment_viewer_see_likers">Ver quem curtiu o comentário</string>
|
||||
<string name="comment_viewer_reply_comment">Responder comentário</string>
|
||||
<string name="comment_viewer_like_comment">Curtir comentário</string>
|
||||
<string name="comment_viewer_unlike_comment">Descurtir comentário</string>
|
||||
<string name="comment_viewer_translate_comment">Traduzir comentário</string>
|
||||
<string name="comment_viewer_delete_comment">Excluir comentário</string>
|
||||
<string name="comment_send_empty_comment">Comentário em branco!</string>
|
||||
<string name="comment_view_mention_user_search">Você quer buscar o nome de usuário?</string>
|
||||
<string name="comment_view_mention_hash_search">Você quer buscar a hashtag?</string>
|
||||
<string name="followers_type_followers">Seguidores</string>
|
||||
|
@ -40,8 +40,6 @@
|
||||
<string name="save_to_folder">Сохранить в пользовательскую папку</string>
|
||||
<string name="select_folder">Выбрать папку</string>
|
||||
<string name="theme_settings">Тема</string>
|
||||
<string name="login_settings">Затрагивает только авторизованных пользователей:</string>
|
||||
<string name="anonymous_settings">Затрагивает только анонимных пользователей:</string>
|
||||
<string name="select_language">Язык</string>
|
||||
<plurals name="main_posts_count">
|
||||
<item quantity="one">%s\nПубликация</item>
|
||||
@ -117,10 +115,7 @@
|
||||
<string name="saved">Сохранено</string>
|
||||
<string name="tagged">Отмечено</string>
|
||||
<string name="dm_person">Сообщение</string>
|
||||
<string name="like_without_count">Нравится</string>
|
||||
<string name="unlike_without_count">Не нравится</string>
|
||||
<string name="bookmark">Закладка</string>
|
||||
<string name="unbookmark">Снять закладку</string>
|
||||
<string name="follow">Подписаться</string>
|
||||
<string name="unfollow">Отписаться</string>
|
||||
<string name="favorite_short" comment="Adjective, not verb">В избранное</string>
|
||||
@ -148,7 +143,6 @@
|
||||
<string name="dialog_export_failed">Не удалось экспортировать!</string>
|
||||
<string name="refresh">Обновить</string>
|
||||
<string name="get_cookies">Получить файлы cookie</string>
|
||||
<string name="desktop_2fa">Режим настольного ПК</string>
|
||||
<string name="time_settings_title_custom">Использовать пользовательский формат</string>
|
||||
<string name="time_settings_title_separator">Разделитель</string>
|
||||
<string name="time_settings_title_time_format">Формат времени</string>
|
||||
@ -215,14 +209,8 @@
|
||||
<string name="downloader_error_creating_folder">Ошибка при создании папки!</string>
|
||||
<string name="downloader_error_download_file">Ошибка при скачивании файла</string>
|
||||
<string name="downloader_too_many">Вы можете скачать только 100 сообщений за раз. Не будьте слишком жадным!</string>
|
||||
<string name="comment_viewer_copy_comment">Копировать комментарий</string>
|
||||
<string name="comment_viewer_see_likers">Просмотр симпатий комментария</string>
|
||||
<string name="comment_viewer_reply_comment">Ответить на комментарий</string>
|
||||
<string name="comment_viewer_like_comment">Мне нравится комментарий</string>
|
||||
<string name="comment_viewer_unlike_comment">Не нравится комментарий</string>
|
||||
<string name="comment_viewer_translate_comment">Перевести комментарий</string>
|
||||
<string name="comment_viewer_delete_comment">Удалить комментарий</string>
|
||||
<string name="comment_send_empty_comment">Нет пустых комментариев!</string>
|
||||
<string name="comment_view_mention_user_search">Вы хотите найти имя пользователя?</string>
|
||||
<string name="comment_view_mention_hash_search">Вы хотите найти хештэг?</string>
|
||||
<string name="followers_type_followers">Подписчики</string>
|
||||
|
@ -40,8 +40,6 @@
|
||||
<string name="save_to_folder">Uložiť do vlastného priečinku</string>
|
||||
<string name="select_folder">Vybrať priečinok</string>
|
||||
<string name="theme_settings">Téma</string>
|
||||
<string name="login_settings">Platí iba pre prihlásených užívateľov:</string>
|
||||
<string name="anonymous_settings">Platí iba pre neprihlásených užívateľov:</string>
|
||||
<string name="select_language">Jazyk</string>
|
||||
<plurals name="main_posts_count">
|
||||
<item quantity="one">%s\nPríspevok</item>
|
||||
@ -117,10 +115,7 @@
|
||||
<string name="saved">Uložené</string>
|
||||
<string name="tagged">Označené</string>
|
||||
<string name="dm_person">Správa</string>
|
||||
<string name="like_without_count">Páči sa</string>
|
||||
<string name="unlike_without_count">Nepáči sa</string>
|
||||
<string name="bookmark">Záložka</string>
|
||||
<string name="unbookmark">Zrušiť záložku</string>
|
||||
<string name="follow">Sledovať</string>
|
||||
<string name="unfollow">Zrušiť sledovanie</string>
|
||||
<string name="favorite_short" comment="Adjective, not verb">Obľúbené</string>
|
||||
@ -148,7 +143,6 @@
|
||||
<string name="dialog_export_failed">Export zlyhal!</string>
|
||||
<string name="refresh">Obnoviť</string>
|
||||
<string name="get_cookies">Získať cookies</string>
|
||||
<string name="desktop_2fa">Režim desktop</string>
|
||||
<string name="time_settings_title_custom">Použiť vlastný formát</string>
|
||||
<string name="time_settings_title_separator">Oddeľovač</string>
|
||||
<string name="time_settings_title_time_format">Formát času</string>
|
||||
@ -215,14 +209,8 @@
|
||||
<string name="downloader_error_creating_folder">Chyba pri vytváraní priečinka!</string>
|
||||
<string name="downloader_error_download_file">Chyba pri sťahovaní súboru</string>
|
||||
<string name="downloader_too_many">Môžeš stiahnuť len 100 príspevkov v jeden čas. Nebuď chamtivý/á!</string>
|
||||
<string name="comment_viewer_copy_comment">Kopírovať komentár</string>
|
||||
<string name="comment_viewer_see_likers">Ľudia čo označili \"páči sa mi\"</string>
|
||||
<string name="comment_viewer_reply_comment">Odpovedať na komentár</string>
|
||||
<string name="comment_viewer_like_comment">Páči sa mi</string>
|
||||
<string name="comment_viewer_unlike_comment">Nepáči sa mi</string>
|
||||
<string name="comment_viewer_translate_comment">Preložiť komentár</string>
|
||||
<string name="comment_viewer_delete_comment">Delete comment</string>
|
||||
<string name="comment_send_empty_comment">Komentár je prázdny!</string>
|
||||
<string name="comment_view_mention_user_search">Chcete vyhľadať používeteľské meno?</string>
|
||||
<string name="comment_view_mention_hash_search">Chcete vyhľadať hashtag?</string>
|
||||
<string name="followers_type_followers">Sledovatelia</string>
|
||||
|
@ -40,8 +40,6 @@
|
||||
<string name="save_to_folder">Spara till en anpassad mapp</string>
|
||||
<string name="select_folder">Välj mapp</string>
|
||||
<string name="theme_settings">Tema</string>
|
||||
<string name="login_settings">Påverkar endast inloggade användare:</string>
|
||||
<string name="anonymous_settings">Påverkar endast anonyma användare:</string>
|
||||
<string name="select_language">Språk</string>
|
||||
<plurals name="main_posts_count">
|
||||
<item quantity="one">%s\nPost</item>
|
||||
@ -109,10 +107,7 @@
|
||||
<string name="saved">Sparade</string>
|
||||
<string name="tagged">Taggade</string>
|
||||
<string name="dm_person">Meddelande</string>
|
||||
<string name="like_without_count">Gilla</string>
|
||||
<string name="unlike_without_count">Sluta gilla</string>
|
||||
<string name="bookmark">Bokmärk</string>
|
||||
<string name="unbookmark">Ta bort bokmärke</string>
|
||||
<string name="follow">Följ</string>
|
||||
<string name="unfollow">Sluta följa</string>
|
||||
<string name="favorite_short" comment="Adjective, not verb">Favorit</string>
|
||||
@ -140,7 +135,6 @@
|
||||
<string name="dialog_export_failed">Misslyckades med exportering!</string>
|
||||
<string name="refresh">Uppdatera</string>
|
||||
<string name="get_cookies">Hämta kakor</string>
|
||||
<string name="desktop_2fa">Skrivbordsläge</string>
|
||||
<string name="time_settings_title_custom">Använd anpassat format</string>
|
||||
<string name="time_settings_title_separator">Avskiljare</string>
|
||||
<string name="time_settings_title_time_format">Tidsformat</string>
|
||||
@ -207,14 +201,8 @@
|
||||
<string name="downloader_error_creating_folder">Error creating folder!</string>
|
||||
<string name="downloader_error_download_file">Error downloading file</string>
|
||||
<string name="downloader_too_many">Du kan endast ladda ner 100 inlägg åt gången. Var inte för girig!</string>
|
||||
<string name="comment_viewer_copy_comment">Kopiera kommentaren</string>
|
||||
<string name="comment_viewer_see_likers">Visa gillare av kommentaren</string>
|
||||
<string name="comment_viewer_reply_comment">Svara till kommentaren</string>
|
||||
<string name="comment_viewer_like_comment">Gilla kommentaren</string>
|
||||
<string name="comment_viewer_unlike_comment">Sluta gilla kommentaren</string>
|
||||
<string name="comment_viewer_translate_comment">Översätt kommentaren</string>
|
||||
<string name="comment_viewer_delete_comment">Delete comment</string>
|
||||
<string name="comment_send_empty_comment">Inga tomma kommentarer!</string>
|
||||
<string name="comment_view_mention_user_search">Vill du söka på användarnamnet?</string>
|
||||
<string name="comment_view_mention_hash_search">Vill du söka på hash-taggen?</string>
|
||||
<string name="followers_type_followers">Följare</string>
|
||||
|
@ -40,8 +40,6 @@
|
||||
<string name="save_to_folder">Şu klasöre kaydet:</string>
|
||||
<string name="select_folder">Klasörü seçin</string>
|
||||
<string name="theme_settings">Tema</string>
|
||||
<string name="login_settings">Sadece giriş yapılmış hesapları etkiler:</string>
|
||||
<string name="anonymous_settings">Sadece anonim hesapları etkiler:</string>
|
||||
<string name="select_language">Dil</string>
|
||||
<plurals name="main_posts_count">
|
||||
<item quantity="one">%s\nGönderi</item>
|
||||
@ -109,10 +107,7 @@
|
||||
<string name="saved">Kaydedilenler</string>
|
||||
<string name="tagged">Etiketlenilenler</string>
|
||||
<string name="dm_person">Mesaj</string>
|
||||
<string name="like_without_count">Beğen</string>
|
||||
<string name="unlike_without_count">Beğenmekten Vazgeç</string>
|
||||
<string name="bookmark">Yer İşareti Koy</string>
|
||||
<string name="unbookmark">Yer İşaretini Kaldır</string>
|
||||
<string name="follow">Takip Et</string>
|
||||
<string name="unfollow">Takipten Çık</string>
|
||||
<string name="favorite_short" comment="Adjective, not verb">Favorilere Ekle</string>
|
||||
@ -140,7 +135,6 @@
|
||||
<string name="dialog_export_failed">Dışa aktarılamadı!</string>
|
||||
<string name="refresh">Yenile</string>
|
||||
<string name="get_cookies">Çerezleri al</string>
|
||||
<string name="desktop_2fa">Masaüstü Modu</string>
|
||||
<string name="time_settings_title_custom">Özel biçim kullan</string>
|
||||
<string name="time_settings_title_separator">Ayırıcı</string>
|
||||
<string name="time_settings_title_time_format">Zaman Biçimi</string>
|
||||
@ -207,14 +201,8 @@
|
||||
<string name="downloader_error_creating_folder">Klasör oluşturma hatası!</string>
|
||||
<string name="downloader_error_download_file">Dosya indirme hatası</string>
|
||||
<string name="downloader_too_many">Tek seferde en fazla 100 gönderi indirebilirsin, açgözlü olma!</string>
|
||||
<string name="comment_viewer_copy_comment">Yorumu kopyala</string>
|
||||
<string name="comment_viewer_see_likers">Yorumu beğenenleri gör</string>
|
||||
<string name="comment_viewer_reply_comment">Yoruma cevap ver</string>
|
||||
<string name="comment_viewer_like_comment">Yorumu beğen</string>
|
||||
<string name="comment_viewer_unlike_comment">Yorum beğenisini geri al</string>
|
||||
<string name="comment_viewer_translate_comment">Yorumu çevir</string>
|
||||
<string name="comment_viewer_delete_comment">Delete comment</string>
|
||||
<string name="comment_send_empty_comment">Boş yorum yapılamaz!</string>
|
||||
<string name="comment_view_mention_user_search">Kullanıcı adını aratmak istiyor musun?</string>
|
||||
<string name="comment_view_mention_hash_search">Etiketi aratmak istiyor musun?</string>
|
||||
<string name="followers_type_followers">Takipçiler</string>
|
||||
|
@ -40,8 +40,6 @@
|
||||
<string name="save_to_folder">Lưu vào thư mục tùy chọn</string>
|
||||
<string name="select_folder">Chọn thư mục</string>
|
||||
<string name="theme_settings">Giao diện</string>
|
||||
<string name="login_settings">Chỉ ảnh hưởng người dùng đã đăng nhập:</string>
|
||||
<string name="anonymous_settings">Chỉ ảnh hưởng người dùng ẩn danh:</string>
|
||||
<string name="select_language">Ngôn ngữ</string>
|
||||
<plurals name="main_posts_count">
|
||||
<item quantity="other">%s\nBài đăng</item>
|
||||
@ -105,10 +103,7 @@
|
||||
<string name="saved">Đã lưu</string>
|
||||
<string name="tagged">Đã gắn thẻ</string>
|
||||
<string name="dm_person">Tin nhắn</string>
|
||||
<string name="like_without_count">Thích</string>
|
||||
<string name="unlike_without_count">Bỏ thích</string>
|
||||
<string name="bookmark">Dấu trang</string>
|
||||
<string name="unbookmark">Gỡ dấu trang</string>
|
||||
<string name="follow">Theo dõi</string>
|
||||
<string name="unfollow">Bỏ theo dõi</string>
|
||||
<string name="favorite_short" comment="Adjective, not verb">Yêu thích</string>
|
||||
@ -136,7 +131,6 @@
|
||||
<string name="dialog_export_failed">Xuất dữ liệu thất bại!</string>
|
||||
<string name="refresh">Làm mới</string>
|
||||
<string name="get_cookies">Lấy cookies</string>
|
||||
<string name="desktop_2fa">Chế độ máy tính</string>
|
||||
<string name="time_settings_title_custom">Dùng định dạng tuỳ chỉnh</string>
|
||||
<string name="time_settings_title_separator">Phân cách</string>
|
||||
<string name="time_settings_title_time_format">Định dạng Thời gian</string>
|
||||
@ -203,14 +197,8 @@
|
||||
<string name="downloader_error_creating_folder">Lỗi khi tạo thư mục!</string>
|
||||
<string name="downloader_error_download_file">Lỗi khi tải xuống tệp</string>
|
||||
<string name="downloader_too_many">Bạn chỉ có thể tải xuống 100 bài cùng một lúc. Đừng tham lam quá!</string>
|
||||
<string name="comment_viewer_copy_comment">Sao chép bình luận</string>
|
||||
<string name="comment_viewer_see_likers">Xem những người đã thích bình luận</string>
|
||||
<string name="comment_viewer_reply_comment">Trả lời bình luận</string>
|
||||
<string name="comment_viewer_like_comment">Thích bình luận</string>
|
||||
<string name="comment_viewer_unlike_comment">Bỏ thích bình luận</string>
|
||||
<string name="comment_viewer_translate_comment">Dịch bình luận</string>
|
||||
<string name="comment_viewer_delete_comment">Xóa bình luận</string>
|
||||
<string name="comment_send_empty_comment">Không được để trống bình luận!</string>
|
||||
<string name="comment_view_mention_user_search">Bạn có muốn tìm tên người dùng không?</string>
|
||||
<string name="comment_view_mention_hash_search">Bạn có muốn tìm hashtag không?</string>
|
||||
<string name="followers_type_followers">Người theo dõi</string>
|
||||
|
@ -40,8 +40,6 @@
|
||||
<string name="save_to_folder">保存至自定义文件夹</string>
|
||||
<string name="select_folder">选择文件夹</string>
|
||||
<string name="theme_settings">主题</string>
|
||||
<string name="login_settings">仅影响登录用户:</string>
|
||||
<string name="anonymous_settings">仅影响匿名用户:</string>
|
||||
<string name="select_language">语言</string>
|
||||
<plurals name="main_posts_count">
|
||||
<item quantity="other">%s\n帖子</item>
|
||||
@ -105,10 +103,7 @@
|
||||
<string name="saved">已保存</string>
|
||||
<string name="tagged">已标记</string>
|
||||
<string name="dm_person">消息</string>
|
||||
<string name="like_without_count">赞</string>
|
||||
<string name="unlike_without_count">取消点赞</string>
|
||||
<string name="bookmark">加入收藏</string>
|
||||
<string name="unbookmark">解除收藏</string>
|
||||
<string name="follow">关注</string>
|
||||
<string name="unfollow">脱粉</string>
|
||||
<string name="favorite_short" comment="Adjective, not verb">加入收藏</string>
|
||||
@ -136,7 +131,6 @@
|
||||
<string name="dialog_export_failed">导出失败!</string>
|
||||
<string name="refresh">刷新</string>
|
||||
<string name="get_cookies">获取 cookies</string>
|
||||
<string name="desktop_2fa">桌面版</string>
|
||||
<string name="time_settings_title_custom">使用自定义格式</string>
|
||||
<string name="time_settings_title_separator">分界</string>
|
||||
<string name="time_settings_title_time_format">时间格式</string>
|
||||
@ -203,14 +197,8 @@
|
||||
<string name="downloader_error_creating_folder">创建文件夹时出错!</string>
|
||||
<string name="downloader_error_download_file">下载文件时出错</string>
|
||||
<string name="downloader_too_many">您一次只能下载100个帖子。切勿贪得无厌!</string>
|
||||
<string name="comment_viewer_copy_comment">复制评论</string>
|
||||
<string name="comment_viewer_see_likers">查看评论赞</string>
|
||||
<string name="comment_viewer_reply_comment">回复评论</string>
|
||||
<string name="comment_viewer_like_comment">赞评论</string>
|
||||
<string name="comment_viewer_unlike_comment">取消赞</string>
|
||||
<string name="comment_viewer_translate_comment">翻译评论</string>
|
||||
<string name="comment_viewer_delete_comment">删除评论</string>
|
||||
<string name="comment_send_empty_comment">评论要写字的!</string>
|
||||
<string name="comment_view_mention_user_search">要搜索用户名吗?</string>
|
||||
<string name="comment_view_mention_hash_search">要搜索标签吗?</string>
|
||||
<string name="followers_type_followers">粉丝</string>
|
||||
|
@ -40,8 +40,6 @@
|
||||
<string name="save_to_folder">儲存到自定義資料夾</string>
|
||||
<string name="select_folder">選擇資料夾</string>
|
||||
<string name="theme_settings">主題</string>
|
||||
<string name="login_settings">僅影響已登入用戶:</string>
|
||||
<string name="anonymous_settings">僅影響匿名用戶:</string>
|
||||
<string name="select_language">語言</string>
|
||||
<plurals name="main_posts_count">
|
||||
<item quantity="other">%s\n貼文</item>
|
||||
@ -105,10 +103,7 @@
|
||||
<string name="saved">已儲存</string>
|
||||
<string name="tagged">已標記</string>
|
||||
<string name="dm_person">訊息</string>
|
||||
<string name="like_without_count">讚</string>
|
||||
<string name="unlike_without_count">收回讚</string>
|
||||
<string name="bookmark">書籤</string>
|
||||
<string name="unbookmark">自書籤中移除</string>
|
||||
<string name="follow">追蹤</string>
|
||||
<string name="unfollow">取消追蹤</string>
|
||||
<string name="favorite_short" comment="Adjective, not verb">收藏</string>
|
||||
@ -136,7 +131,6 @@
|
||||
<string name="dialog_export_failed">匯出失敗!</string>
|
||||
<string name="refresh">重新整理</string>
|
||||
<string name="get_cookies">取得 Cookies</string>
|
||||
<string name="desktop_2fa">桌面模式</string>
|
||||
<string name="time_settings_title_custom">使用自定義格式</string>
|
||||
<string name="time_settings_title_separator">分隔</string>
|
||||
<string name="time_settings_title_time_format">時間格式</string>
|
||||
@ -203,14 +197,8 @@
|
||||
<string name="downloader_error_creating_folder">建立資料夾時出錯!</string>
|
||||
<string name="downloader_error_download_file">下載檔案時出錯</string>
|
||||
<string name="downloader_too_many">您一次只能下載100個文章。不要太貪心!</string>
|
||||
<string name="comment_viewer_copy_comment">複製評論</string>
|
||||
<string name="comment_viewer_see_likers">查看為此評論點讚的用戶</string>
|
||||
<string name="comment_viewer_reply_comment">回覆評論</string>
|
||||
<string name="comment_viewer_like_comment">對此評論說讚</string>
|
||||
<string name="comment_viewer_unlike_comment">收回評論的讚</string>
|
||||
<string name="comment_viewer_translate_comment">翻譯評論</string>
|
||||
<string name="comment_viewer_delete_comment">刪除評論</string>
|
||||
<string name="comment_send_empty_comment">無空評論!</string>
|
||||
<string name="comment_view_mention_user_search">您要搜尋用戶名嗎?</string>
|
||||
<string name="comment_view_mention_hash_search">您要搜尋主題標籤嗎?</string>
|
||||
<string name="followers_type_followers">追蹤者</string>
|
||||
|
@ -6,4 +6,6 @@
|
||||
<item name="detail" type="id" />
|
||||
<item name="copy" type="id" />
|
||||
<item name="share_dm" type="id" />
|
||||
<item name="download_current" type="id" />
|
||||
<item name="download_all" type="id" />
|
||||
</resources>
|
@ -5,8 +5,6 @@
|
||||
<string name="action_dms">Direct Messages</string>
|
||||
<string name="action_settings">Settings</string>
|
||||
<string name="action_download">Download</string>
|
||||
<string name="action_github" translatable="false">GitHub</string>
|
||||
<string name="action_fdroid" translatable="false">F-Droid</string>
|
||||
<string name="action_search">Search username…</string>
|
||||
<string name="action_compare">Compare</string>
|
||||
<string name="clipboard_error">Error copying text</string>
|
||||
@ -44,8 +42,6 @@
|
||||
<string name="save_to_folder">Save to custom folder</string>
|
||||
<string name="select_folder">Select folder</string>
|
||||
<string name="theme_settings">Theme</string>
|
||||
<string name="login_settings">Only affects logged-in users:</string>
|
||||
<string name="anonymous_settings">Only affects anonymous users:</string>
|
||||
<string name="select_language">Language</string>
|
||||
<plurals name="main_posts_count">
|
||||
<item quantity="one">%s\nPost</item>
|
||||
@ -73,7 +69,7 @@
|
||||
<string name="be_patient">Be patient!</string>
|
||||
<string name="view_story_post">View Post</string>
|
||||
<string name="view_post">View Post</string>
|
||||
<string name="spotify">Spotify</string>
|
||||
<string name="spotify" translatable="false">Spotify</string>
|
||||
<string name="vote_story_poll">Vote</string>
|
||||
<string name="votef_story_poll">Vote successful!</string>
|
||||
<string name="voted_story_poll">You have already voted!</string>
|
||||
@ -114,10 +110,7 @@
|
||||
<string name="saved">Saved</string>
|
||||
<string name="tagged">Tagged</string>
|
||||
<string name="dm_person">Message</string>
|
||||
<string name="like_without_count">Like</string>
|
||||
<string name="unlike_without_count">Unlike</string>
|
||||
<string name="bookmark">Bookmark</string>
|
||||
<string name="unbookmark">Unbookmark</string>
|
||||
<string name="follow">Follow</string>
|
||||
<string name="unfollow">Unfollow</string>
|
||||
<string name="favorite_short" comment="Adjective, not verb">Favorite</string>
|
||||
@ -145,7 +138,6 @@
|
||||
<string name="dialog_export_failed">Failed to export!</string>
|
||||
<string name="refresh">Refresh</string>
|
||||
<string name="get_cookies">Get cookies</string>
|
||||
<string name="desktop_2fa">Desktop Mode</string>
|
||||
<string name="time_settings_title_custom">Use custom format</string>
|
||||
<string name="time_settings_title_separator">Separator</string>
|
||||
<string name="time_settings_title_time_format">Time Format</string>
|
||||
@ -205,6 +197,7 @@
|
||||
<string name="direct_download_desc">Downloads posts directly to the phone!</string>
|
||||
<string name="direct_download_loading">Fetching post(s)</string>
|
||||
<string name="downloader_complete">Download completed</string>
|
||||
<string name="downloader_preparing">Preparing to download…</string>
|
||||
<string name="downloader_downloading_post">Downloading post…</string>
|
||||
<string name="downloader_downloading_media">Downloading media</string>
|
||||
<string name="downloader_downloading_pfp">Downloading profile picture</string>
|
||||
@ -212,14 +205,8 @@
|
||||
<string name="downloader_error_creating_folder">Error creating folder!</string>
|
||||
<string name="downloader_error_download_file">Error downloading file</string>
|
||||
<string name="downloader_too_many">You can only download 100 posts at a time. Don\'t be too greedy!</string>
|
||||
<string name="comment_viewer_copy_comment">Copy comment</string>
|
||||
<string name="comment_viewer_see_likers">View comment likers</string>
|
||||
<string name="comment_viewer_reply_comment">Reply to comment</string>
|
||||
<string name="comment_viewer_like_comment">Like comment</string>
|
||||
<string name="comment_viewer_unlike_comment">Unlike comment</string>
|
||||
<string name="comment_viewer_translate_comment">Translate comment</string>
|
||||
<string name="comment_viewer_delete_comment">Delete comment</string>
|
||||
<string name="comment_send_empty_comment">No empty comments!</string>
|
||||
<string name="comment_view_mention_user_search">Do you want to search the username?</string>
|
||||
<string name="comment_view_mention_hash_search">Do you want to search the hashtag?</string>
|
||||
<string name="followers_type_followers">Followers</string>
|
||||
|
Loading…
Reference in New Issue
Block a user