Compare commits
17 Commits
v123061651
...
f0f998368b
Author | SHA1 | Date | |
---|---|---|---|
|
f0f998368b | ||
|
c458871569 | ||
056825aa0c | |||
16b19fc5ce | |||
4ad4a23ed8 | |||
d8c215eacc | |||
2b446ab22b | |||
a029d8a7dc | |||
4482234e1a | |||
b5de30f561 | |||
70ad5f322c | |||
d167092c83 | |||
c4f4bafe85 | |||
ed06b22a77 | |||
|
172362b533 | ||
|
ad72cb6f56 | ||
|
9057ee0052 |
49
.drone.yml
49
.drone.yml
@@ -3,35 +3,38 @@ type: docker
|
|||||||
name: test
|
name: test
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
|
- name: Lint
|
||||||
|
failure: ignore
|
||||||
|
image: mingc/android-build-box:latest
|
||||||
|
commands:
|
||||||
|
- echo "---------------------------------------------------------"
|
||||||
|
- echo "Install linters..."
|
||||||
|
- curl -sSLO https://github.com/pinterest/ktlint/releases/download/1.0.0/ktlint && chmod a+x ktlint && mv ktlint /usr/local/bin/
|
||||||
|
- curl -sSLO https://github.com/detekt/detekt/releases/download/v1.23.1/detekt-cli-1.23.1.zip && unzip detekt-cli-1.23.1.zip
|
||||||
|
- echo "---------------------------------------------------------"
|
||||||
|
- echo "Linting..."
|
||||||
|
- ktlint || true
|
||||||
|
- echo "---------------------------------------------------------"
|
||||||
|
- echo "Detecting..."
|
||||||
|
- ./detekt-cli-1.23.1/bin/detekt-cli --all-rules || true
|
||||||
|
- echo "---------------------------------------------------------"
|
||||||
|
command_timeout: 1m
|
||||||
- name: BuildAndTest
|
- name: BuildAndTest
|
||||||
image: mingc/android-build-box:latest
|
image: mingc/android-build-box:latest
|
||||||
commands:
|
commands:
|
||||||
- echo "---------------------------------------------------------"
|
- echo "---------------------------------------------------------"
|
||||||
- echo "Configure gradle..."
|
- echo "Configure gradle..."
|
||||||
- mkdir -p ~/.gradle && echo "org.gradle.daemon=false\nignoreGitVersion=true\npushCache=false\nsystemProp.org.gradle.internal.http.connectionTimeout=180000\nsystemProp.org.gradle.internal.http.socketTimeout=180000" >> ~/.gradle/gradle.properties
|
- mkdir -p ~/.gradle && echo "org.gradle.daemon=false\nignoreGitVersion=true\nsystemProp.org.gradle.internal.http.connectionTimeout=180000\nsystemProp.org.gradle.internal.http.socketTimeout=180000" >> ~/.gradle/gradle.properties
|
||||||
- echo "---------------------------------------------------------"
|
- echo "---------------------------------------------------------"
|
||||||
- echo "Building..."
|
- echo "Configure java..."
|
||||||
- ./gradlew build -x test
|
- . ~/.bash_profile
|
||||||
|
- jenv global 17.0
|
||||||
|
- java --version
|
||||||
|
- date
|
||||||
- echo "---------------------------------------------------------"
|
- echo "---------------------------------------------------------"
|
||||||
- echo "Testing..."
|
- echo "Building and testing..."
|
||||||
|
- ./gradlew build
|
||||||
- echo "---------------------------------------------------------"
|
- echo "---------------------------------------------------------"
|
||||||
- ./gradlew koverMergedXmlReport
|
|
||||||
environment:
|
|
||||||
TZ: Europe/Paris
|
|
||||||
SONAR_HOST_URL:
|
|
||||||
from_secret: sonarScannerHostUrl
|
|
||||||
SONAR_LOGIN:
|
|
||||||
from_secret: sonarScannerLogin
|
|
||||||
- name: Analyse
|
|
||||||
image: kytay/sonar-node-plugin
|
|
||||||
settings:
|
|
||||||
sonar_host:
|
|
||||||
from_secret: sonarScannerHostUrl
|
|
||||||
sonar_token:
|
|
||||||
from_secret: sonarScannerLogin
|
|
||||||
use_node_version: 16.18.1
|
|
||||||
sonar_debug: true
|
|
||||||
sonar_project_settings: ./sonar-project.properties
|
|
||||||
trigger:
|
trigger:
|
||||||
event:
|
event:
|
||||||
- push
|
- push
|
||||||
@@ -107,10 +110,10 @@ steps:
|
|||||||
- git fetch --tags
|
- git fetch --tags
|
||||||
- echo "---------------------------------------------------------"
|
- echo "---------------------------------------------------------"
|
||||||
- echo "Configure gradle..."
|
- echo "Configure gradle..."
|
||||||
- mkdir -p ~/.gradle && echo "org.gradle.daemon=false\nignoreGitVersion=false\npushCache=false\nsystemProp.org.gradle.internal.http.connectionTimeout=180000\nsystemProp.org.gradle.internal.http.socketTimeout=180000" >> ~/.gradle/gradle.properties
|
- mkdir -p ~/.gradle && echo "org.gradle.daemon=false\nignoreGitVersion=false\nsystemProp.org.gradle.internal.http.connectionTimeout=180000\nsystemProp.org.gradle.internal.http.socketTimeout=180000" >> ~/.gradle/gradle.properties
|
||||||
- echo "---------------------------------------------------------"
|
- echo "---------------------------------------------------------"
|
||||||
- echo "Generate APK"
|
- echo "Generate APK"
|
||||||
- ./gradlew :androidApp:assembleGithubConfigRelease -P pushCache=false
|
- ./gradlew :androidApp:assembleGithubConfigRelease
|
||||||
- echo "---------------------------------------------------------"
|
- echo "---------------------------------------------------------"
|
||||||
- echo "Get Key"
|
- echo "Get Key"
|
||||||
- wget https://amine-louveau.fr/key
|
- wget https://amine-louveau.fr/key
|
||||||
|
17
CHANGELOG.md
17
CHANGELOG.md
@@ -1,3 +1,20 @@
|
|||||||
|
**v123061811**
|
||||||
|
|
||||||
|
- feat: Added confirmation dialog for disconnect item menu.
|
||||||
|
- Changelog for v123061651 [CI SKIP]
|
||||||
|
|
||||||
|
--------------------------------------------------------------------
|
||||||
|
|
||||||
|
**v123061651**
|
||||||
|
|
||||||
|
- i18n: Translation update.
|
||||||
|
- i18n: Translation update.
|
||||||
|
- i18n: Translation update.
|
||||||
|
- fix: avoid trying to open invalid image urls.
|
||||||
|
- Changelog for v123051471 [CI SKIP]
|
||||||
|
|
||||||
|
--------------------------------------------------------------------
|
||||||
|
|
||||||
**v123051471**
|
**v123051471**
|
||||||
|
|
||||||
- fix: images could be null.
|
- fix: images could be null.
|
||||||
|
@@ -599,12 +599,14 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener, DIAwar
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
R.id.action_disconnect -> {
|
R.id.action_disconnect -> {
|
||||||
runBlocking {
|
needsConfirmation(R.string.confirm_disconnect_title, R.string.confirm_disconnect_description) {
|
||||||
repository.logout()
|
runBlocking {
|
||||||
|
repository.logout()
|
||||||
|
}
|
||||||
|
val intent = Intent(this, LoginActivity::class.java)
|
||||||
|
this.startActivity(intent)
|
||||||
|
finish()
|
||||||
}
|
}
|
||||||
val intent = Intent(this, LoginActivity::class.java)
|
|
||||||
this.startActivity(intent)
|
|
||||||
finish()
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
R.id.action_settings -> {
|
R.id.action_settings -> {
|
||||||
|
@@ -139,9 +139,12 @@ class LoginActivity : AppCompatActivity(), DIAware {
|
|||||||
|
|
||||||
showProgress(true)
|
showProgress(true)
|
||||||
|
|
||||||
|
appSettingsService.updateSelfSigned(binding.selfSigned.isChecked)
|
||||||
|
|
||||||
repository.refreshLoginInformation(url, login, password)
|
repository.refreshLoginInformation(url, login, password)
|
||||||
|
|
||||||
CoroutineScope(Dispatchers.Main).launch {
|
CoroutineScope(Dispatchers.Main).launch {
|
||||||
|
repository.updateApiInformation()
|
||||||
val result = repository.login()
|
val result = repository.login()
|
||||||
if (result) {
|
if (result) {
|
||||||
val (errorFetching, displaySelfossOnly) = repository.shouldBeSelfossInstance()
|
val (errorFetching, displaySelfossOnly) = repository.shouldBeSelfossInstance()
|
||||||
|
@@ -51,6 +51,13 @@
|
|||||||
android:maxLines="1"
|
android:maxLines="1"
|
||||||
android:minHeight="48dp" />
|
android:minHeight="48dp" />
|
||||||
|
|
||||||
|
<com.google.android.material.switchmaterial.SwitchMaterial
|
||||||
|
android:id="@+id/selfSigned"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/disable_ssl"
|
||||||
|
android:textAlignment="viewStart" />
|
||||||
|
|
||||||
<com.google.android.material.switchmaterial.SwitchMaterial
|
<com.google.android.material.switchmaterial.SwitchMaterial
|
||||||
android:id="@+id/withLogin"
|
android:id="@+id/withLogin"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
@@ -128,4 +128,7 @@
|
|||||||
<string name="application_selfoss_only">This app only works with a Selfoss instance, and no other RSS feed.</string>
|
<string name="application_selfoss_only">This app only works with a Selfoss instance, and no other RSS feed.</string>
|
||||||
<string name="menu_home_sources">Sources</string>
|
<string name="menu_home_sources">Sources</string>
|
||||||
<string name="update_source">Update source</string>
|
<string name="update_source">Update source</string>
|
||||||
|
<string name="confirm_disconnect_title">Disconnect ?</string>
|
||||||
|
<string name="confirm_disconnect_description">You will be disconnected from your selfoss instance.</string>
|
||||||
|
<string name="disable_ssl">Disable SSL</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -128,4 +128,7 @@
|
|||||||
<string name="application_selfoss_only">This app only works with a Selfoss instance, and no other RSS feed.</string>
|
<string name="application_selfoss_only">This app only works with a Selfoss instance, and no other RSS feed.</string>
|
||||||
<string name="menu_home_sources">Sources</string>
|
<string name="menu_home_sources">Sources</string>
|
||||||
<string name="update_source">Update source</string>
|
<string name="update_source">Update source</string>
|
||||||
|
<string name="confirm_disconnect_title">Disconnect ?</string>
|
||||||
|
<string name="confirm_disconnect_description">You will be disconnected from your selfoss instance.</string>
|
||||||
|
<string name="disable_ssl">Disable SSL</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -128,4 +128,7 @@
|
|||||||
<string name="application_selfoss_only">This app only works with a Selfoss instance, and no other RSS feed.</string>
|
<string name="application_selfoss_only">This app only works with a Selfoss instance, and no other RSS feed.</string>
|
||||||
<string name="menu_home_sources">Sources</string>
|
<string name="menu_home_sources">Sources</string>
|
||||||
<string name="update_source">Update source</string>
|
<string name="update_source">Update source</string>
|
||||||
|
<string name="confirm_disconnect_title">Disconnect ?</string>
|
||||||
|
<string name="confirm_disconnect_description">You will be disconnected from your selfoss instance.</string>
|
||||||
|
<string name="disable_ssl">Disable SSL</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -128,4 +128,7 @@
|
|||||||
<string name="application_selfoss_only">This app only works with a Selfoss instance, and no other RSS feed.</string>
|
<string name="application_selfoss_only">This app only works with a Selfoss instance, and no other RSS feed.</string>
|
||||||
<string name="menu_home_sources">Sources</string>
|
<string name="menu_home_sources">Sources</string>
|
||||||
<string name="update_source">Update source</string>
|
<string name="update_source">Update source</string>
|
||||||
|
<string name="confirm_disconnect_title">Disconnect ?</string>
|
||||||
|
<string name="confirm_disconnect_description">You will be disconnected from your selfoss instance.</string>
|
||||||
|
<string name="disable_ssl">Disable SSL</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -128,4 +128,7 @@
|
|||||||
<string name="application_selfoss_only">This app only works with a Selfoss instance, and no other RSS feed.</string>
|
<string name="application_selfoss_only">This app only works with a Selfoss instance, and no other RSS feed.</string>
|
||||||
<string name="menu_home_sources">Sources</string>
|
<string name="menu_home_sources">Sources</string>
|
||||||
<string name="update_source">Update source</string>
|
<string name="update_source">Update source</string>
|
||||||
|
<string name="confirm_disconnect_title">Disconnect ?</string>
|
||||||
|
<string name="confirm_disconnect_description">You will be disconnected from your selfoss instance.</string>
|
||||||
|
<string name="disable_ssl">Disable SSL</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -128,4 +128,7 @@
|
|||||||
<string name="application_selfoss_only">Esta aplicación só funciona cunha instancia de Selfoss, e con ningún outro filtro RSS.</string>
|
<string name="application_selfoss_only">Esta aplicación só funciona cunha instancia de Selfoss, e con ningún outro filtro RSS.</string>
|
||||||
<string name="menu_home_sources">Sources</string>
|
<string name="menu_home_sources">Sources</string>
|
||||||
<string name="update_source">Update source</string>
|
<string name="update_source">Update source</string>
|
||||||
|
<string name="confirm_disconnect_title">Disconnect ?</string>
|
||||||
|
<string name="confirm_disconnect_description">You will be disconnected from your selfoss instance.</string>
|
||||||
|
<string name="disable_ssl">Disable SSL</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -128,4 +128,7 @@
|
|||||||
<string name="application_selfoss_only">This app only works with a Selfoss instance, and no other RSS feed.</string>
|
<string name="application_selfoss_only">This app only works with a Selfoss instance, and no other RSS feed.</string>
|
||||||
<string name="menu_home_sources">Sources</string>
|
<string name="menu_home_sources">Sources</string>
|
||||||
<string name="update_source">Update source</string>
|
<string name="update_source">Update source</string>
|
||||||
|
<string name="confirm_disconnect_title">Disconnect ?</string>
|
||||||
|
<string name="confirm_disconnect_description">You will be disconnected from your selfoss instance.</string>
|
||||||
|
<string name="disable_ssl">Disable SSL</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -128,4 +128,7 @@
|
|||||||
<string name="application_selfoss_only">This app only works with a Selfoss instance, and no other RSS feed.</string>
|
<string name="application_selfoss_only">This app only works with a Selfoss instance, and no other RSS feed.</string>
|
||||||
<string name="menu_home_sources">Sources</string>
|
<string name="menu_home_sources">Sources</string>
|
||||||
<string name="update_source">Update source</string>
|
<string name="update_source">Update source</string>
|
||||||
|
<string name="confirm_disconnect_title">Disconnect ?</string>
|
||||||
|
<string name="confirm_disconnect_description">You will be disconnected from your selfoss instance.</string>
|
||||||
|
<string name="disable_ssl">Disable SSL</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -128,4 +128,7 @@
|
|||||||
<string name="application_selfoss_only">This app only works with a Selfoss instance, and no other RSS feed.</string>
|
<string name="application_selfoss_only">This app only works with a Selfoss instance, and no other RSS feed.</string>
|
||||||
<string name="menu_home_sources">Sources</string>
|
<string name="menu_home_sources">Sources</string>
|
||||||
<string name="update_source">Update source</string>
|
<string name="update_source">Update source</string>
|
||||||
|
<string name="confirm_disconnect_title">Disconnect ?</string>
|
||||||
|
<string name="confirm_disconnect_description">You will be disconnected from your selfoss instance.</string>
|
||||||
|
<string name="disable_ssl">Disable SSL</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -1,11 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<resources>
|
|
||||||
<string name="gdpr_dialog_title">The app does not share any personal data about you.</string>
|
|
||||||
<string name="gdpr_dialog_message"><![CDATA[Crash reports sending is now enabled. It can be disabled from the settings page. Keep in mind that crash reports are essential for the app development.]]></string>
|
|
||||||
<string name="crash_toast_text">A crash occured. Sending the details to the developper.</string>
|
|
||||||
<string name="pref_switch_disable_acra">"Disable automatic bug reporting. "</string>
|
|
||||||
<string name="menu_home_filter">Filters</string>
|
|
||||||
<string name="application_selfoss_only">This app only works with a Selfoss instance, and no other RSS feed.</string>
|
|
||||||
<string name="menu_home_sources">Sources</string>
|
|
||||||
<string name="update_source">Update source</string>
|
|
||||||
</resources>
|
|
@@ -128,4 +128,7 @@
|
|||||||
<string name="application_selfoss_only">This app only works with a Selfoss instance, and no other RSS feed.</string>
|
<string name="application_selfoss_only">This app only works with a Selfoss instance, and no other RSS feed.</string>
|
||||||
<string name="menu_home_sources">Sources</string>
|
<string name="menu_home_sources">Sources</string>
|
||||||
<string name="update_source">Update source</string>
|
<string name="update_source">Update source</string>
|
||||||
|
<string name="confirm_disconnect_title">Disconnect ?</string>
|
||||||
|
<string name="confirm_disconnect_description">You will be disconnected from your selfoss instance.</string>
|
||||||
|
<string name="disable_ssl">Disable SSL</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -128,4 +128,7 @@
|
|||||||
<string name="application_selfoss_only">This app only works with a Selfoss instance, and no other RSS feed.</string>
|
<string name="application_selfoss_only">This app only works with a Selfoss instance, and no other RSS feed.</string>
|
||||||
<string name="menu_home_sources">Sources</string>
|
<string name="menu_home_sources">Sources</string>
|
||||||
<string name="update_source">Update source</string>
|
<string name="update_source">Update source</string>
|
||||||
|
<string name="confirm_disconnect_title">Disconnect ?</string>
|
||||||
|
<string name="confirm_disconnect_description">You will be disconnected from your selfoss instance.</string>
|
||||||
|
<string name="disable_ssl">Disable SSL</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -128,4 +128,7 @@
|
|||||||
<string name="application_selfoss_only">This app only works with a Selfoss instance, and no other RSS feed.</string>
|
<string name="application_selfoss_only">This app only works with a Selfoss instance, and no other RSS feed.</string>
|
||||||
<string name="menu_home_sources">Sources</string>
|
<string name="menu_home_sources">Sources</string>
|
||||||
<string name="update_source">Update source</string>
|
<string name="update_source">Update source</string>
|
||||||
|
<string name="confirm_disconnect_title">Disconnect ?</string>
|
||||||
|
<string name="confirm_disconnect_description">You will be disconnected from your selfoss instance.</string>
|
||||||
|
<string name="disable_ssl">Disable SSL</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -128,4 +128,7 @@
|
|||||||
<string name="application_selfoss_only">This app only works with a Selfoss instance, and no other RSS feed.</string>
|
<string name="application_selfoss_only">This app only works with a Selfoss instance, and no other RSS feed.</string>
|
||||||
<string name="menu_home_sources">Sources</string>
|
<string name="menu_home_sources">Sources</string>
|
||||||
<string name="update_source">Update source</string>
|
<string name="update_source">Update source</string>
|
||||||
|
<string name="confirm_disconnect_title">Disconnect ?</string>
|
||||||
|
<string name="confirm_disconnect_description">You will be disconnected from your selfoss instance.</string>
|
||||||
|
<string name="disable_ssl">Disable SSL</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -128,4 +128,7 @@
|
|||||||
<string name="application_selfoss_only">This app only works with a Selfoss instance, and no other RSS feed.</string>
|
<string name="application_selfoss_only">This app only works with a Selfoss instance, and no other RSS feed.</string>
|
||||||
<string name="menu_home_sources">Sources</string>
|
<string name="menu_home_sources">Sources</string>
|
||||||
<string name="update_source">Update source</string>
|
<string name="update_source">Update source</string>
|
||||||
|
<string name="confirm_disconnect_title">Disconnect ?</string>
|
||||||
|
<string name="confirm_disconnect_description">You will be disconnected from your selfoss instance.</string>
|
||||||
|
<string name="disable_ssl">Disable SSL</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -128,4 +128,7 @@
|
|||||||
<string name="application_selfoss_only">此应用只适用于 Selfoss 实例,不适用于其他 RSS 。</string>
|
<string name="application_selfoss_only">此应用只适用于 Selfoss 实例,不适用于其他 RSS 。</string>
|
||||||
<string name="menu_home_sources">源</string>
|
<string name="menu_home_sources">源</string>
|
||||||
<string name="update_source">更新源</string>
|
<string name="update_source">更新源</string>
|
||||||
|
<string name="confirm_disconnect_title">Disconnect ?</string>
|
||||||
|
<string name="confirm_disconnect_description">You will be disconnected from your selfoss instance.</string>
|
||||||
|
<string name="disable_ssl">Disable SSL</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -128,4 +128,7 @@
|
|||||||
<string name="application_selfoss_only">This app only works with a Selfoss instance, and no other RSS feed.</string>
|
<string name="application_selfoss_only">This app only works with a Selfoss instance, and no other RSS feed.</string>
|
||||||
<string name="menu_home_sources">Sources</string>
|
<string name="menu_home_sources">Sources</string>
|
||||||
<string name="update_source">Update source</string>
|
<string name="update_source">Update source</string>
|
||||||
|
<string name="confirm_disconnect_title">Disconnect ?</string>
|
||||||
|
<string name="confirm_disconnect_description">You will be disconnected from your selfoss instance.</string>
|
||||||
|
<string name="disable_ssl">Disable SSL</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -6,6 +6,7 @@
|
|||||||
<string name="error_invalid_password">"Password not long enough"</string>
|
<string name="error_invalid_password">"Password not long enough"</string>
|
||||||
<string name="error_field_required">"Field required"</string>
|
<string name="error_field_required">"Field required"</string>
|
||||||
<string name="prompt_url">"Url"</string>
|
<string name="prompt_url">"Url"</string>
|
||||||
|
<string name="disable_ssl">"Disable SSL"</string>
|
||||||
<string name="withLoginSwitch">"Login required ?"</string>
|
<string name="withLoginSwitch">"Login required ?"</string>
|
||||||
<string name="login_url_problem">"Oops. You may need to add a \"/\" at the end of the url."</string>
|
<string name="login_url_problem">"Oops. You may need to add a \"/\" at the end of the url."</string>
|
||||||
<string name="prompt_login">"Username"</string>
|
<string name="prompt_login">"Username"</string>
|
||||||
@@ -131,4 +132,6 @@
|
|||||||
<string name="application_selfoss_only">This app only works with a Selfoss instance, and no other RSS feed.</string>
|
<string name="application_selfoss_only">This app only works with a Selfoss instance, and no other RSS feed.</string>
|
||||||
<string name="menu_home_sources">Sources</string>
|
<string name="menu_home_sources">Sources</string>
|
||||||
<string name="update_source">Update source</string>
|
<string name="update_source">Update source</string>
|
||||||
|
<string name="confirm_disconnect_title">Disconnect ?</string>
|
||||||
|
<string name="confirm_disconnect_description">You will be disconnected from your selfoss instance.</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -33,4 +33,3 @@ org.gradle.parallel=true
|
|||||||
org.gradle.caching=true
|
org.gradle.caching=true
|
||||||
ignoreGitVersion=false
|
ignoreGitVersion=false
|
||||||
kotlin.native.cacheKind.iosX64=none
|
kotlin.native.cacheKind.iosX64=none
|
||||||
pushCache=true
|
|
||||||
|
@@ -1,5 +1,3 @@
|
|||||||
val pushCache: String by settings
|
|
||||||
|
|
||||||
pluginManagement {
|
pluginManagement {
|
||||||
repositories {
|
repositories {
|
||||||
// maven { url = uri("https://nexus.amine-louveau.fr/repository/maven-public/")}
|
// maven { url = uri("https://nexus.amine-louveau.fr/repository/maven-public/")}
|
||||||
@@ -17,17 +15,6 @@ dependencyResolutionManagement {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
buildCache {
|
|
||||||
remote<HttpBuildCache> {
|
|
||||||
url = uri("http://18.0.0.7:3071/cache/")
|
|
||||||
isAllowInsecureProtocol = true
|
|
||||||
isAllowUntrustedServer = true
|
|
||||||
isUseExpectContinue = true
|
|
||||||
isPush = (pushCache == "true")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
rootProject.name = "ReaderForSelfossV2"
|
rootProject.name = "ReaderForSelfossV2"
|
||||||
include(":androidApp")
|
include(":androidApp")
|
||||||
include(":shared")
|
include(":shared")
|
@@ -35,6 +35,7 @@ kotlin {
|
|||||||
implementation("io.ktor:ktor-client-logging:2.1.1")
|
implementation("io.ktor:ktor-client-logging:2.1.1")
|
||||||
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.0")
|
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.0")
|
||||||
implementation("io.ktor:ktor-client-auth:2.1.1")
|
implementation("io.ktor:ktor-client-auth:2.1.1")
|
||||||
|
implementation("io.ktor:ktor-client-cio:2.1.1")
|
||||||
implementation("org.jsoup:jsoup:1.14.3")
|
implementation("org.jsoup:jsoup:1.14.3")
|
||||||
|
|
||||||
//Dependency Injection
|
//Dependency Injection
|
||||||
|
@@ -0,0 +1,17 @@
|
|||||||
|
package bou.amine.apps.readerforselfossv2.rest
|
||||||
|
|
||||||
|
import io.ktor.client.engine.cio.CIOEngineConfig
|
||||||
|
import java.security.cert.X509Certificate
|
||||||
|
import javax.net.ssl.X509TrustManager
|
||||||
|
|
||||||
|
class NaiveTrustManager : X509TrustManager {
|
||||||
|
override fun checkClientTrusted(chain: Array<out X509Certificate>?, authType: String?) {}
|
||||||
|
|
||||||
|
override fun checkServerTrusted(chain: Array<out X509Certificate>?, authType: String?) {}
|
||||||
|
|
||||||
|
override fun getAcceptedIssuers(): Array<out X509Certificate> = arrayOf()
|
||||||
|
}
|
||||||
|
|
||||||
|
actual fun setupInsecureHTTPEngine(config: CIOEngineConfig) {
|
||||||
|
config.https.trustManager = NaiveTrustManager()
|
||||||
|
}
|
@@ -5,31 +5,46 @@ import bou.amine.apps.readerforselfossv2.model.StatusAndData
|
|||||||
import bou.amine.apps.readerforselfossv2.model.SuccessResponse
|
import bou.amine.apps.readerforselfossv2.model.SuccessResponse
|
||||||
import bou.amine.apps.readerforselfossv2.service.AppSettingsService
|
import bou.amine.apps.readerforselfossv2.service.AppSettingsService
|
||||||
import io.github.aakira.napier.Napier
|
import io.github.aakira.napier.Napier
|
||||||
import io.ktor.client.*
|
import io.ktor.client.HttpClient
|
||||||
import io.ktor.client.plugins.*
|
import io.ktor.client.engine.cio.CIO
|
||||||
import io.ktor.client.plugins.auth.providers.*
|
import io.ktor.client.engine.cio.CIOEngineConfig
|
||||||
import io.ktor.client.plugins.cache.*
|
import io.ktor.client.plugins.HttpRequestRetry
|
||||||
import io.ktor.client.plugins.contentnegotiation.*
|
import io.ktor.client.plugins.HttpTimeout
|
||||||
import io.ktor.client.plugins.cookies.*
|
import io.ktor.client.plugins.auth.providers.BasicAuthCredentials
|
||||||
import io.ktor.client.plugins.logging.*
|
import io.ktor.client.plugins.cache.HttpCache
|
||||||
import io.ktor.client.request.*
|
import io.ktor.client.plugins.contentnegotiation.ContentNegotiation
|
||||||
import io.ktor.client.statement.*
|
import io.ktor.client.plugins.cookies.HttpCookies
|
||||||
import io.ktor.http.*
|
import io.ktor.client.plugins.logging.LogLevel
|
||||||
import io.ktor.serialization.kotlinx.json.*
|
import io.ktor.client.plugins.logging.Logger
|
||||||
import io.ktor.util.*
|
import io.ktor.client.plugins.logging.Logging
|
||||||
import io.ktor.utils.io.charsets.*
|
import io.ktor.client.request.get
|
||||||
import io.ktor.utils.io.core.*
|
import io.ktor.client.request.headers
|
||||||
|
import io.ktor.client.request.parameter
|
||||||
|
import io.ktor.client.statement.HttpResponse
|
||||||
|
import io.ktor.http.HttpHeaders
|
||||||
|
import io.ktor.http.HttpStatusCode
|
||||||
|
import io.ktor.http.Parameters
|
||||||
|
import io.ktor.serialization.kotlinx.json.json
|
||||||
|
import io.ktor.util.encodeBase64
|
||||||
|
import io.ktor.utils.io.charsets.Charsets
|
||||||
|
import io.ktor.utils.io.core.toByteArray
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import kotlinx.serialization.json.Json
|
import kotlinx.serialization.json.Json
|
||||||
|
|
||||||
|
expect fun setupInsecureHTTPEngine(config: CIOEngineConfig)
|
||||||
|
|
||||||
class SelfossApi(private val appSettingsService: AppSettingsService) {
|
class SelfossApi(private val appSettingsService: AppSettingsService) {
|
||||||
|
|
||||||
var client = createHttpClient()
|
var client = createHttpClient()
|
||||||
|
fun createHttpClient() =
|
||||||
private fun createHttpClient(): HttpClient {
|
HttpClient(CIO) {
|
||||||
val client = HttpClient {
|
if (appSettingsService.getSelfSigned()) {
|
||||||
|
engine {
|
||||||
|
setupInsecureHTTPEngine(this)
|
||||||
|
}
|
||||||
|
}
|
||||||
install(ContentNegotiation) {
|
install(ContentNegotiation) {
|
||||||
install(HttpCache)
|
install(HttpCache)
|
||||||
json(Json {
|
json(Json {
|
||||||
@@ -60,7 +75,7 @@ class SelfossApi(private val appSettingsService: AppSettingsService) {
|
|||||||
Napier.i("Will modify", tag = "HttpSend")
|
Napier.i("Will modify", tag = "HttpSend")
|
||||||
CoroutineScope(Dispatchers.Main).launch {
|
CoroutineScope(Dispatchers.Main).launch {
|
||||||
Napier.i("Will login", tag = "HttpSend")
|
Napier.i("Will login", tag = "HttpSend")
|
||||||
this@SelfossApi.login()
|
login()
|
||||||
Napier.i("Did login", tag = "HttpSend")
|
Napier.i("Did login", tag = "HttpSend")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -68,10 +83,6 @@ class SelfossApi(private val appSettingsService: AppSettingsService) {
|
|||||||
expectSuccess = false
|
expectSuccess = false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return client
|
|
||||||
}
|
|
||||||
|
|
||||||
fun url(path: String) =
|
fun url(path: String) =
|
||||||
"${appSettingsService.getBaseUrl()}$path"
|
"${appSettingsService.getBaseUrl()}$path"
|
||||||
|
|
||||||
|
@@ -8,6 +8,7 @@ class AppSettingsService(acraSenderServiceProcess: Boolean = false) {
|
|||||||
// Api related
|
// Api related
|
||||||
private var _apiVersion: Int = -1
|
private var _apiVersion: Int = -1
|
||||||
private var _publicAccess: Boolean? = null
|
private var _publicAccess: Boolean? = null
|
||||||
|
private var _selfSigned: Boolean? = null
|
||||||
private var _baseUrl: String = ""
|
private var _baseUrl: String = ""
|
||||||
private var _userName: String = ""
|
private var _userName: String = ""
|
||||||
private var _basicUserName: String = ""
|
private var _basicUserName: String = ""
|
||||||
@@ -77,6 +78,22 @@ class AppSettingsService(acraSenderServiceProcess: Boolean = false) {
|
|||||||
_publicAccess = settings.getBoolean(API_PUBLIC_ACCESS, false)
|
_publicAccess = settings.getBoolean(API_PUBLIC_ACCESS, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun getSelfSigned(): Boolean {
|
||||||
|
if (_selfSigned == null) {
|
||||||
|
refreshSelfSigned()
|
||||||
|
}
|
||||||
|
return _selfSigned!!
|
||||||
|
}
|
||||||
|
|
||||||
|
fun updateSelfSigned(selfSigned: Boolean) {
|
||||||
|
settings.putBoolean(API_SELF_SIGNED, selfSigned)
|
||||||
|
refreshSelfSigned()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun refreshSelfSigned() {
|
||||||
|
_selfSigned = settings.getBoolean(API_SELF_SIGNED, false)
|
||||||
|
}
|
||||||
|
|
||||||
fun getBaseUrl(): String {
|
fun getBaseUrl(): String {
|
||||||
if (_baseUrl.isEmpty()) {
|
if (_baseUrl.isEmpty()) {
|
||||||
refreshBaseUrl()
|
refreshBaseUrl()
|
||||||
@@ -383,6 +400,7 @@ class AppSettingsService(acraSenderServiceProcess: Boolean = false) {
|
|||||||
refreshBaseUrl()
|
refreshBaseUrl()
|
||||||
refreshApiVersion()
|
refreshApiVersion()
|
||||||
refreshPublicAccess()
|
refreshPublicAccess()
|
||||||
|
refreshSelfSigned()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun refreshUserSettings() {
|
fun refreshUserSettings() {
|
||||||
@@ -468,6 +486,8 @@ class AppSettingsService(acraSenderServiceProcess: Boolean = false) {
|
|||||||
|
|
||||||
const val API_PUBLIC_ACCESS = "apiPublicAccess"
|
const val API_PUBLIC_ACCESS = "apiPublicAccess"
|
||||||
|
|
||||||
|
const val API_SELF_SIGNED = "apiSelfSigned"
|
||||||
|
|
||||||
const val API_ITEMS_NUMBER = "prefer_api_items_number"
|
const val API_ITEMS_NUMBER = "prefer_api_items_number"
|
||||||
|
|
||||||
const val API_TIMEOUT = "api_timeout"
|
const val API_TIMEOUT = "api_timeout"
|
||||||
|
@@ -0,0 +1,6 @@
|
|||||||
|
package bou.amine.apps.readerforselfossv2.rest
|
||||||
|
|
||||||
|
import io.ktor.client.engine.cio.CIOEngineConfig
|
||||||
|
|
||||||
|
actual fun setupInsecureHTTPEngine(config: CIOEngineConfig) {
|
||||||
|
}
|
@@ -0,0 +1,6 @@
|
|||||||
|
package bou.amine.apps.readerforselfossv2.rest
|
||||||
|
|
||||||
|
import io.ktor.client.engine.cio.CIOEngineConfig
|
||||||
|
|
||||||
|
actual fun setupInsecureHTTPEngine(config: CIOEngineConfig) {
|
||||||
|
}
|
Reference in New Issue
Block a user