Compare commits
14 Commits
v123020491
...
v123020572
Author | SHA1 | Date | |
---|---|---|---|
c2a1c9eaac | |||
bf37209a15 | |||
2c558fe6fd | |||
ad88011454 | |||
559c17bc1d | |||
ab9c46f0eb | |||
aa799d2ca8 | |||
177c978474 | |||
39b9991413 | |||
b303f110f1 | |||
f851941a6a | |||
a313552976 | |||
6ac97ed3fe | |||
d583b937b7 |
@ -48,13 +48,14 @@ steps:
|
|||||||
commands:
|
commands:
|
||||||
- apt-get update && apt-get install -y git
|
- apt-get update && apt-get install -y git
|
||||||
- git fetch --tags -p
|
- git fetch --tags -p
|
||||||
|
- PREV=$(git describe --tags --abbrev=0)
|
||||||
|
- ./build.sh --publish --from-ci
|
||||||
|
- git remote add pushing https://$GITEA_USR:$GITEA_PASS@gitea.amine-louveau.fr/Louvorg/ReaderForSelfoss-multiplatform.git
|
||||||
- VER=$(git describe --tags --abbrev=0)
|
- VER=$(git describe --tags --abbrev=0)
|
||||||
- CHANGELOG=$(git log $VER..HEAD --pretty="- %s")
|
- CHANGELOG=$(git log $PREV..HEAD --pretty="- %s")
|
||||||
- echo "**$VER**\n\n$CHANGELOG\n\n--------------------------------------------------------------------\n\n$(cat CHANGELOG.md)" > CHANGELOG.md
|
- echo "**$VER**\n\n$CHANGELOG\n\n--------------------------------------------------------------------\n\n$(cat CHANGELOG.md)" > CHANGELOG.md
|
||||||
- git add CHANGELOG.md
|
- git add CHANGELOG.md
|
||||||
- git commit -m "Changelog for $VER [CI SKIP]"
|
- git commit -m "Changelog for $VER [CI SKIP]"
|
||||||
- ./build.sh --publish --from-ci
|
|
||||||
- git remote add pushing https://$GITEA_USR:$GITEA_PASS@gitea.amine-louveau.fr/Louvorg/ReaderForSelfoss-multiplatform.git
|
|
||||||
- git push pushing master
|
- git push pushing master
|
||||||
- git push pushing --tags
|
- git push pushing --tags
|
||||||
environment:
|
environment:
|
||||||
|
21
CHANGELOG.md
21
CHANGELOG.md
@ -1,3 +1,24 @@
|
|||||||
|
**v123020571**
|
||||||
|
|
||||||
|
- chore: remove errors logging.
|
||||||
|
- fix: quickfix for url param not provided for some sources.
|
||||||
|
- Update 'CHANGELOG.md'
|
||||||
|
- Changelog for v123020523 [CI SKIP]
|
||||||
|
|
||||||
|
--------------------------------------------------------------------
|
||||||
|
|
||||||
|
**v123020523**
|
||||||
|
|
||||||
|
- fix: Git changelog.
|
||||||
|
|
||||||
|
--------------------------------------------------------------------
|
||||||
|
|
||||||
|
**v123020491**
|
||||||
|
|
||||||
|
- fix: Fixed acra bug reporting.
|
||||||
|
|
||||||
|
--------------------------------------------------------------------
|
||||||
|
|
||||||
**v123010301**
|
**v123010301**
|
||||||
|
|
||||||
- Chore: acra config.
|
- Chore: acra config.
|
||||||
|
@ -34,6 +34,7 @@ import org.kodein.di.*
|
|||||||
class MyApp : MultiDexApplication(), DIAware {
|
class MyApp : MultiDexApplication(), DIAware {
|
||||||
|
|
||||||
override val di by DI.lazy {
|
override val di by DI.lazy {
|
||||||
|
bind<AppSettingsService>() with singleton { AppSettingsService(ACRA.isACRASenderServiceProcess()) }
|
||||||
import(networkModule)
|
import(networkModule)
|
||||||
bind<DriverFactory>() with singleton { DriverFactory(applicationContext) }
|
bind<DriverFactory>() with singleton { DriverFactory(applicationContext) }
|
||||||
bind<ReaderForSelfossDB>() with singleton { ReaderForSelfossDB(driverFactory.createDriver()) }
|
bind<ReaderForSelfossDB>() with singleton { ReaderForSelfossDB(driverFactory.createDriver()) }
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package bou.amine.apps.readerforselfossv2.android.fragments
|
package bou.amine.apps.readerforselfossv2.android.fragments
|
||||||
|
|
||||||
|
import android.content.ActivityNotFoundException
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.content.res.ColorStateList
|
import android.content.res.ColorStateList
|
||||||
import android.content.res.TypedArray
|
import android.content.res.TypedArray
|
||||||
@ -150,6 +151,7 @@ class ArticleFragment : Fragment(), DIAware {
|
|||||||
|
|
||||||
} catch (e: InflateException) {
|
} catch (e: InflateException) {
|
||||||
e.sendSilentlyWithAcraWithName("webview not available")
|
e.sendSilentlyWithAcraWithName("webview not available")
|
||||||
|
if (context != null) {
|
||||||
AlertDialog.Builder(requireContext())
|
AlertDialog.Builder(requireContext())
|
||||||
.setMessage(requireContext().getString(R.string.webview_dialog_issue_message))
|
.setMessage(requireContext().getString(R.string.webview_dialog_issue_message))
|
||||||
.setTitle(requireContext().getString(R.string.webview_dialog_issue_title))
|
.setTitle(requireContext().getString(R.string.webview_dialog_issue_title))
|
||||||
@ -162,6 +164,7 @@ class ArticleFragment : Fragment(), DIAware {
|
|||||||
.create()
|
.create()
|
||||||
.show()
|
.show()
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return binding.root
|
return binding.root
|
||||||
}
|
}
|
||||||
@ -304,10 +307,16 @@ class ArticleFragment : Fragment(), DIAware {
|
|||||||
binding.webcontent.webViewClient = object : WebViewClient() {
|
binding.webcontent.webViewClient = object : WebViewClient() {
|
||||||
@Deprecated("Deprecated in Java")
|
@Deprecated("Deprecated in Java")
|
||||||
override fun shouldOverrideUrlLoading(view: WebView?, url: String): Boolean {
|
override fun shouldOverrideUrlLoading(view: WebView?, url: String): Boolean {
|
||||||
if (binding.webcontent.hitTestResult.type != WebView.HitTestResult.SRC_IMAGE_ANCHOR_TYPE) {
|
return if (context != null && binding.webcontent.hitTestResult.type != WebView.HitTestResult.SRC_IMAGE_ANCHOR_TYPE) {
|
||||||
|
try {
|
||||||
requireContext().startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(url)))
|
requireContext().startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(url)))
|
||||||
|
} catch (e: ActivityNotFoundException) {
|
||||||
|
e.sendSilentlyWithAcraWithName("activityNotFound > $url")
|
||||||
|
}
|
||||||
|
true
|
||||||
|
} else {
|
||||||
|
false
|
||||||
}
|
}
|
||||||
return true
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Deprecated("Deprecated in Java")
|
@Deprecated("Deprecated in Java")
|
||||||
@ -325,7 +334,7 @@ class ArticleFragment : Fragment(), DIAware {
|
|||||||
getBitmapInputStream(image, Bitmap.CompressFormat.JPEG)
|
getBitmapInputStream(image, Bitmap.CompressFormat.JPEG)
|
||||||
)
|
)
|
||||||
} catch (e: ExecutionException) {
|
} catch (e: ExecutionException) {
|
||||||
e.sendSilentlyWithAcraWithName("shouldInterceptRequest > jpeg > $url")
|
// Do nothing
|
||||||
}
|
}
|
||||||
} else if (url.lowercase(Locale.US).contains(".png")) {
|
} else if (url.lowercase(Locale.US).contains(".png")) {
|
||||||
try {
|
try {
|
||||||
@ -337,7 +346,7 @@ class ArticleFragment : Fragment(), DIAware {
|
|||||||
getBitmapInputStream(image, Bitmap.CompressFormat.PNG)
|
getBitmapInputStream(image, Bitmap.CompressFormat.PNG)
|
||||||
)
|
)
|
||||||
} catch (e: ExecutionException) {
|
} catch (e: ExecutionException) {
|
||||||
e.sendSilentlyWithAcraWithName("shouldInterceptRequest > png > $url")
|
// Do nothing
|
||||||
}
|
}
|
||||||
} else if (url.lowercase(Locale.US).contains(".webp")) {
|
} else if (url.lowercase(Locale.US).contains(".webp")) {
|
||||||
try {
|
try {
|
||||||
@ -349,7 +358,7 @@ class ArticleFragment : Fragment(), DIAware {
|
|||||||
getBitmapInputStream(image, Bitmap.CompressFormat.WEBP)
|
getBitmapInputStream(image, Bitmap.CompressFormat.WEBP)
|
||||||
)
|
)
|
||||||
} catch (e: ExecutionException) {
|
} catch (e: ExecutionException) {
|
||||||
e.sendSilentlyWithAcraWithName("shouldInterceptRequest > webp > $url")
|
// Do nothing
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -359,7 +368,7 @@ class ArticleFragment : Fragment(), DIAware {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun htmlToWebview() {
|
private fun htmlToWebview() {
|
||||||
|
if (context != null) {
|
||||||
val attrs: IntArray = intArrayOf(android.R.attr.fontFamily)
|
val attrs: IntArray = intArrayOf(android.R.attr.fontFamily)
|
||||||
val a: TypedArray = requireContext().obtainStyledAttributes(resId, attrs)
|
val a: TypedArray = requireContext().obtainStyledAttributes(resId, attrs)
|
||||||
|
|
||||||
@ -500,6 +509,7 @@ class ArticleFragment : Fragment(), DIAware {
|
|||||||
null
|
null
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fun scrollDown() {
|
fun scrollDown() {
|
||||||
val height = binding.nestedScrollView.measuredHeight
|
val height = binding.nestedScrollView.measuredHeight
|
||||||
|
@ -9,7 +9,6 @@ import org.kodein.di.instance
|
|||||||
import org.kodein.di.singleton
|
import org.kodein.di.singleton
|
||||||
|
|
||||||
val networkModule by DI.Module {
|
val networkModule by DI.Module {
|
||||||
bind<AppSettingsService>() with singleton { AppSettingsService() }
|
|
||||||
bind<SelfossApi>() with singleton { SelfossApi(instance()) }
|
bind<SelfossApi>() with singleton { SelfossApi(instance()) }
|
||||||
bind<MercuryApi>() with singleton { MercuryApi() }
|
bind<MercuryApi>() with singleton { MercuryApi() }
|
||||||
}
|
}
|
@ -76,7 +76,7 @@ class SelfossModel {
|
|||||||
)
|
)
|
||||||
@Serializable
|
@Serializable
|
||||||
data class SourceParams(
|
data class SourceParams(
|
||||||
val url: String
|
val url: String?
|
||||||
)
|
)
|
||||||
@Serializable
|
@Serializable
|
||||||
data class Item(
|
data class Item(
|
||||||
|
@ -0,0 +1,70 @@
|
|||||||
|
package bou.amine.apps.readerforselfossv2.service
|
||||||
|
|
||||||
|
import com.russhwolf.settings.Settings
|
||||||
|
|
||||||
|
// This will be used in ACRA process. For now, it does nothing.
|
||||||
|
// This is to fix ACRA not sending reports anymore.
|
||||||
|
// See https://www.acra.ch/docs/Troubleshooting-Guide#applicationoncreate
|
||||||
|
class ACRASettings : Settings {
|
||||||
|
override val keys: Set<String> = emptySet()
|
||||||
|
override val size: Int = 0
|
||||||
|
|
||||||
|
override fun clear() {
|
||||||
|
// Nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getBoolean(key: String, defaultValue: Boolean): Boolean = false
|
||||||
|
|
||||||
|
override fun getBooleanOrNull(key: String): Boolean? = null
|
||||||
|
|
||||||
|
override fun getDouble(key: String, defaultValue: Double): Double = 0.0
|
||||||
|
|
||||||
|
override fun getDoubleOrNull(key: String): Double? = null
|
||||||
|
|
||||||
|
override fun getFloat(key: String, defaultValue: Float): Float = 0.0F
|
||||||
|
|
||||||
|
override fun getFloatOrNull(key: String): Float? = null
|
||||||
|
|
||||||
|
override fun getInt(key: String, defaultValue: Int): Int = 0
|
||||||
|
|
||||||
|
override fun getIntOrNull(key: String): Int? = null
|
||||||
|
|
||||||
|
override fun getLong(key: String, defaultValue: Long): Long = 0
|
||||||
|
|
||||||
|
override fun getLongOrNull(key: String): Long? = null
|
||||||
|
|
||||||
|
override fun getString(key: String, defaultValue: String): String = "0"
|
||||||
|
|
||||||
|
override fun getStringOrNull(key: String): String? = null
|
||||||
|
|
||||||
|
override fun hasKey(key: String): Boolean = false
|
||||||
|
|
||||||
|
override fun putBoolean(key: String, value: Boolean) {
|
||||||
|
// Nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun putDouble(key: String, value: Double) {
|
||||||
|
// Nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun putFloat(key: String, value: Float) {
|
||||||
|
// Nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun putInt(key: String, value: Int) {
|
||||||
|
// Nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun putLong(key: String, value: Long) {
|
||||||
|
// Nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun putString(key: String, value: String) {
|
||||||
|
// Nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun remove(key: String) {
|
||||||
|
// Nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -2,8 +2,8 @@ package bou.amine.apps.readerforselfossv2.service
|
|||||||
|
|
||||||
import com.russhwolf.settings.Settings
|
import com.russhwolf.settings.Settings
|
||||||
|
|
||||||
class AppSettingsService {
|
class AppSettingsService(acraSenderServiceProcess: Boolean = false) {
|
||||||
val settings: Settings = Settings()
|
val settings: Settings = if (acraSenderServiceProcess) { ACRASettings() } else { Settings() }
|
||||||
|
|
||||||
// Api related
|
// Api related
|
||||||
private var _apiVersion: Int = -1
|
private var _apiVersion: Int = -1
|
||||||
|
@ -20,7 +20,7 @@ fun SOURCE.toView(): SelfossModel.Source =
|
|||||||
this.spout,
|
this.spout,
|
||||||
this.error,
|
this.error,
|
||||||
this.icon,
|
this.icon,
|
||||||
if (this.url != null) SelfossModel.SourceParams(this.url) else null
|
SelfossModel.SourceParams(this.url)
|
||||||
)
|
)
|
||||||
|
|
||||||
fun SelfossModel.Source.toEntity(): SOURCE =
|
fun SelfossModel.Source.toEntity(): SOURCE =
|
||||||
|
Reference in New Issue
Block a user