Compare commits

..

No commits in common. "9109eb36c11b610beef3a202780d6037ca923510" and "cc4c1c9201d255a93eb270cb06a784d0d7d58f0d" have entirely different histories.

12 changed files with 96 additions and 170 deletions

View File

@ -51,7 +51,7 @@ steps:
- CHANGELOG=$(git log $VER..HEAD --pretty="- %s") - CHANGELOG=$(git log $VER..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"
- ./build.sh --publish --from-ci - ./build.sh --publish --from-ci
- git remote add pushing https://$GITEA_USR:$GITEA_PASS@gitea.amine-louveau.fr/Louvorg/ReaderForSelfoss-multiplatform.git - 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

View File

@ -1,25 +1,3 @@
- feat: Close images by swiping down
--------------------------------------------------------------------
**v122123641**
- feat: Disable the failing source in the filter sheet.
- feat: Display the source error in the sources list.
--------------------------------------------------------------------
**v122123631**
- build: Added back maven repos (see https://gitlab.com/fdroid/fdroiddata/-/commit/1fb9d60dc58511abc2bb4eb321977922a0682c8b#note_1223925153)
- build: Added back maven repos (see https://gitlab.com/fdroid/fdroiddata/-/commit/1fb9d60dc58511abc2bb4eb321977922a0682c8b#note_1223925153)
- debug: trying to resolve `Canvas: trying to use a recycled bitmap`.
- fix: NPE may be caused by the binding or the title that was null.
- chore: Skip drone pipeline on changelog push.
--------------------------------------------------------------------
**v122123621** **v122123621**
- fix: Automatic CHANGELOG generation. - fix: Automatic CHANGELOG generation.

View File

@ -19,7 +19,6 @@ class ImageActivity : AppCompatActivity() {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
binding = ActivityImageBinding.inflate(layoutInflater) binding = ActivityImageBinding.inflate(layoutInflater)
val view = binding.root val view = binding.root
binding.pager.requestDisallowInterceptTouchEvent(true)
setContentView(view) setContentView(view)

View File

@ -4,7 +4,6 @@ import android.app.Activity
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.Button import android.widget.Button
import android.widget.Toast import android.widget.Toast
@ -61,13 +60,6 @@ class SourcesListAdapter(
c.circularBitmapDrawable(itm.getIcon(repository.baseUrl), binding.itemImage) c.circularBitmapDrawable(itm.getIcon(repository.baseUrl), binding.itemImage)
} }
if (itm.error.isNotBlank()) {
binding.errorText.visibility = View.VISIBLE
binding.errorText.text = itm.error
} else {
binding.errorText.visibility = View.GONE
}
binding.sourceTitle.text = itm.title.getHtmlDecoded() binding.sourceTitle.text = itm.title.getHtmlDecoded()
} }

View File

@ -66,7 +66,8 @@ class ArticleFragment : Fragment(), DIAware {
private lateinit var allImages : ArrayList<String> private lateinit var allImages : ArrayList<String>
private lateinit var fab: FloatingActionButton private lateinit var fab: FloatingActionButton
private lateinit var textAlignment: String private lateinit var textAlignment: String
private lateinit var binding: FragmentArticleBinding private var _binding: FragmentArticleBinding? = null
private val binding get() = _binding
override val di : DI by closestDI() override val di : DI by closestDI()
private val repository: Repository by instance() private val repository: Repository by instance()
@ -94,7 +95,7 @@ class ArticleFragment : Fragment(), DIAware {
savedInstanceState: Bundle? savedInstanceState: Bundle?
): View { ): View {
try { try {
binding = FragmentArticleBinding.inflate(inflater, container, false) _binding = FragmentArticleBinding.inflate(inflater, container, false)
url = item.getLinkDecoded() url = item.getLinkDecoded()
contentText = item.content contentText = item.content
@ -109,13 +110,13 @@ class ArticleFragment : Fragment(), DIAware {
refreshAlignment() refreshAlignment()
fab = binding.fab fab = binding!!.fab
fab.backgroundTintList = ColorStateList.valueOf(resources.getColor(R.color.colorAccent)) fab.backgroundTintList = ColorStateList.valueOf(resources.getColor(R.color.colorAccent))
fab.rippleColor = resources.getColor(R.color.colorAccentDark) fab.rippleColor = resources.getColor(R.color.colorAccentDark)
val floatingToolbar: FloatingToolbar = binding.floatingToolbar val floatingToolbar: FloatingToolbar = binding!!.floatingToolbar
floatingToolbar.attachFab(fab) floatingToolbar.attachFab(fab)
floatingToolbar.background = ColorDrawable(resources.getColor(R.color.colorAccent)) floatingToolbar.background = ColorDrawable(resources.getColor(R.color.colorAccent))
@ -163,35 +164,35 @@ class ArticleFragment : Fragment(), DIAware {
floatingToolbar.show() floatingToolbar.show()
} }
binding.source.text = contentSource binding!!.source.text = contentSource
if (typeface != null) { if (typeface != null) {
binding.source.typeface = typeface binding!!.source.typeface = typeface
} }
if (contentText.isEmptyOrNullOrNullString()) { if (contentText.isEmptyOrNullOrNullString()) {
getContentFromMercury() getContentFromMercury()
} else { } else {
binding.titleView.text = contentTitle binding!!.titleView.text = contentTitle
if (typeface != null) { if (typeface != null) {
binding.titleView.typeface = typeface binding!!.titleView.typeface = typeface
} }
htmlToWebview() htmlToWebview()
if (!contentImage.isEmptyOrNullOrNullString() && context != null) { if (!contentImage.isEmptyOrNullOrNullString() && context != null) {
binding.imageView.visibility = View.VISIBLE binding!!.imageView.visibility = View.VISIBLE
Glide Glide
.with(requireContext()) .with(requireContext())
.asBitmap() .asBitmap()
.load(contentImage) .load(contentImage)
.apply(RequestOptions.fitCenterTransform()) .apply(RequestOptions.fitCenterTransform())
.into(binding.imageView) .into(binding!!.imageView)
} else { } else {
binding.imageView.visibility = View.GONE binding!!.imageView.visibility = View.GONE
} }
} }
binding.nestedScrollView.setOnScrollChangeListener( binding!!.nestedScrollView.setOnScrollChangeListener(
NestedScrollView.OnScrollChangeListener { _, _, scrollY, _, oldScrollY -> NestedScrollView.OnScrollChangeListener { _, _, scrollY, _, oldScrollY ->
if (scrollY > oldScrollY) { if (scrollY > oldScrollY) {
floatingToolbar.hide() floatingToolbar.hide()
@ -220,7 +221,12 @@ class ArticleFragment : Fragment(), DIAware {
.show() .show()
} }
return binding.root return binding!!.root
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
} }
private fun refreshAlignment() { private fun refreshAlignment() {
@ -233,16 +239,16 @@ class ArticleFragment : Fragment(), DIAware {
private fun getContentFromMercury() { private fun getContentFromMercury() {
if (repository.isNetworkAvailable()) { if (repository.isNetworkAvailable()) {
binding.progressBar.visibility = View.VISIBLE binding!!.progressBar.visibility = View.VISIBLE
CoroutineScope(Dispatchers.Main).launch { CoroutineScope(Dispatchers.Main).launch {
try { try {
val response = mercuryApi.query(url) val response = mercuryApi.query(url)
if (response.success && response.data != null && !response.data?.content.isNullOrEmpty()) { if (response.success && response.data != null && !response.data?.content.isNullOrEmpty()) {
binding.titleView.text = response.data!!.title.orEmpty() binding!!.titleView.text = response.data!!.title.orEmpty()
try { try {
if (typeface != null) { if (typeface != null) {
binding.titleView.typeface = typeface binding!!.titleView.typeface = typeface
} }
} catch (e: Exception) { } catch (e: Exception) {
e.sendSilentlyWithAcraWithName("getContentFromMercury > typeface") e.sendSilentlyWithAcraWithName("getContentFromMercury > typeface")
@ -266,7 +272,7 @@ class ArticleFragment : Fragment(), DIAware {
if (!response.data?.lead_image_url.isNullOrEmpty() && context != null) { if (!response.data?.lead_image_url.isNullOrEmpty() && context != null) {
try { try {
binding.imageView.visibility = View.VISIBLE binding!!.imageView.visibility = View.VISIBLE
try { try {
Glide Glide
.with(requireContext()) .with(requireContext())
@ -275,7 +281,7 @@ class ArticleFragment : Fragment(), DIAware {
response.data!!.lead_image_url.orEmpty() response.data!!.lead_image_url.orEmpty()
) )
.apply(RequestOptions.fitCenterTransform()) .apply(RequestOptions.fitCenterTransform())
.into(binding.imageView) .into(binding!!.imageView)
} catch (e: Exception) { } catch (e: Exception) {
e.sendSilentlyWithAcraWithName("getContentFromMercury > glide lead image") e.sendSilentlyWithAcraWithName("getContentFromMercury > glide lead image")
} }
@ -283,12 +289,12 @@ class ArticleFragment : Fragment(), DIAware {
e.sendSilentlyWithAcraWithName("getContentFromMercury > outside glide lead image") e.sendSilentlyWithAcraWithName("getContentFromMercury > outside glide lead image")
} }
} else { } else {
binding.imageView.visibility = View.GONE binding!!.imageView.visibility = View.GONE
} }
try { try {
binding.nestedScrollView.scrollTo(0, 0) binding!!.nestedScrollView.scrollTo(0, 0)
binding.progressBar.visibility = View.GONE binding!!.progressBar.visibility = View.GONE
} catch (e: Exception) { } catch (e: Exception) {
e.sendSilentlyWithAcraWithName("getContentFromMercury > scrollview") e.sendSilentlyWithAcraWithName("getContentFromMercury > scrollview")
} }
@ -311,8 +317,8 @@ class ArticleFragment : Fragment(), DIAware {
val a: TypedArray = requireContext().obtainStyledAttributes(resId, attrs) val a: TypedArray = requireContext().obtainStyledAttributes(resId, attrs)
binding.webcontent.settings.standardFontFamily = a.getString(0) binding!!.webcontent.settings.standardFontFamily = a.getString(0)
binding.webcontent.visibility = View.VISIBLE binding!!.webcontent.visibility = View.VISIBLE
val colorOnSurface = TypedValue() val colorOnSurface = TypedValue()
requireContext().theme.resolveAttribute(R.attr.colorOnSurface, colorOnSurface, true) requireContext().theme.resolveAttribute(R.attr.colorOnSurface, colorOnSurface, true)
@ -320,14 +326,14 @@ class ArticleFragment : Fragment(), DIAware {
val colorSurface = TypedValue() val colorSurface = TypedValue()
requireContext().theme.resolveAttribute(R.attr.colorSurface, colorSurface, true) requireContext().theme.resolveAttribute(R.attr.colorSurface, colorSurface, true)
binding.webcontent.settings.useWideViewPort = true binding!!.webcontent.settings.useWideViewPort = true
binding.webcontent.settings.loadWithOverviewMode = true binding!!.webcontent.settings.loadWithOverviewMode = true
binding.webcontent.settings.javaScriptEnabled = false binding!!.webcontent.settings.javaScriptEnabled = false
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) { if (binding!!.webcontent.hitTestResult.type != WebView.HitTestResult.SRC_IMAGE_ANCHOR_TYPE) {
requireContext().startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(url))) requireContext().startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(url)))
} }
return true return true
@ -371,9 +377,9 @@ class ArticleFragment : Fragment(), DIAware {
} }
}) })
binding.webcontent.setOnTouchListener { _, event -> gestureDetector.onTouchEvent(event)} binding!!.webcontent.setOnTouchListener { _, event -> gestureDetector.onTouchEvent(event)}
binding.webcontent.settings.layoutAlgorithm = binding!!.webcontent.settings.layoutAlgorithm =
WebSettings.LayoutAlgorithm.TEXT_AUTOSIZING WebSettings.LayoutAlgorithm.TEXT_AUTOSIZING
var baseUrl: String? = null var baseUrl: String? = null
@ -404,7 +410,7 @@ class ArticleFragment : Fragment(), DIAware {
"" ""
} }
binding.webcontent.loadDataWithBaseURL( binding!!.webcontent.loadDataWithBaseURL(
baseUrl, baseUrl,
"""<html> """<html>
|<head> |<head>
@ -457,17 +463,17 @@ class ArticleFragment : Fragment(), DIAware {
} }
fun scrollDown() { fun scrollDown() {
val height = binding.nestedScrollView.measuredHeight val height = binding!!.nestedScrollView.measuredHeight
binding.nestedScrollView.smoothScrollBy(0, height/2) binding!!.nestedScrollView.smoothScrollBy(0, height/2)
} }
fun scrollUp() { fun scrollUp() {
val height = binding.nestedScrollView.measuredHeight val height = binding!!.nestedScrollView.measuredHeight
binding.nestedScrollView.smoothScrollBy(0, -height/2) binding!!.nestedScrollView.smoothScrollBy(0, -height/2)
} }
private fun openInBrowserAfterFailing() { private fun openInBrowserAfterFailing() {
binding.progressBar.visibility = View.GONE binding!!.progressBar.visibility = View.GONE
requireActivity().openInBrowserAsNewTask(this@ArticleFragment.item) requireActivity().openInBrowserAsNewTask(this@ArticleFragment.item)
} }
@ -486,10 +492,10 @@ class ArticleFragment : Fragment(), DIAware {
} }
fun performClick(): Boolean { fun performClick(): Boolean {
if (binding.webcontent.hitTestResult.type == WebView.HitTestResult.IMAGE_TYPE || if (binding!!.webcontent.hitTestResult.type == WebView.HitTestResult.IMAGE_TYPE ||
binding.webcontent.hitTestResult.type == WebView.HitTestResult.SRC_IMAGE_ANCHOR_TYPE) { binding!!.webcontent.hitTestResult.type == WebView.HitTestResult.SRC_IMAGE_ANCHOR_TYPE) {
val position : Int = allImages.indexOf(binding.webcontent.hitTestResult.extra) val position : Int = allImages.indexOf(binding!!.webcontent.hitTestResult.extra)
val intent = Intent(activity, ImageActivity::class.java) val intent = Intent(activity, ImageActivity::class.java)
intent.putExtra("allImages", allImages) intent.putExtra("allImages", allImages)

View File

@ -4,7 +4,6 @@ import android.content.Context
import android.graphics.Color import android.graphics.Color
import android.graphics.drawable.Drawable import android.graphics.drawable.Drawable
import android.graphics.drawable.GradientDrawable import android.graphics.drawable.GradientDrawable
import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
@ -68,7 +67,6 @@ class FilterSheetFragment : BottomSheetDialogFragment(), DIAware {
val c = Chip(context) val c = Chip(context)
c.text = tag.tag c.text = tag.tag
try {
val gd = GradientDrawable() val gd = GradientDrawable()
val gdColor = try { val gdColor = try {
Color.parseColor(tag.color) Color.parseColor(tag.color)
@ -81,9 +79,6 @@ class FilterSheetFragment : BottomSheetDialogFragment(), DIAware {
gd.setSize(30, 30) gd.setSize(30, 30)
gd.cornerRadius = 30F gd.cornerRadius = 30F
c.chipIcon = gd c.chipIcon = gd
} catch (e: Exception) {
e.sendSilentlyWithAcraWithName("tags > GradientDrawable")
}
c.setOnCloseIconClickListener { c.setOnCloseIconClickListener {
(it as Chip).isCloseIconVisible = false (it as Chip).isCloseIconVisible = false
@ -132,11 +127,7 @@ class FilterSheetFragment : BottomSheetDialogFragment(), DIAware {
dataSource: DataSource?, dataSource: DataSource?,
isFirstResource: Boolean isFirstResource: Boolean
): Boolean { ): Boolean {
try {
c.chipIcon = resource c.chipIcon = resource
} catch (e: Exception) {
e.sendSilentlyWithAcraWithName("sources > onResourceReady")
}
return false return false
} }
}).preload() }).preload()
@ -166,12 +157,6 @@ class FilterSheetFragment : BottomSheetDialogFragment(), DIAware {
selectedChip = c selectedChip = c
} }
c.isEnabled = source.error.isBlank()
if (source.error.isNotBlank() && Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
c.tooltipText = source.error
}
sourceGroup.addView(c) sourceGroup.addView(c)
} }

View File

@ -27,11 +27,6 @@ class ImageFragment : Fragment() {
_binding = FragmentImageBinding.inflate(inflater, container, false) _binding = FragmentImageBinding.inflate(inflater, container, false)
val view = binding?.root val view = binding?.root
binding?.swipeRefreshLayout?.setProgressViewEndTarget(false, 0)
binding?.swipeRefreshLayout?.setOnRefreshListener {
activity?.finish()
}
binding!!.photoView.visibility = View.VISIBLE binding!!.photoView.visibility = View.VISIBLE
Glide.with(requireActivity()) Glide.with(requireActivity())
.asBitmap() .asBitmap()

View File

@ -4,11 +4,6 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent">
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:id="@+id/swipeRefreshLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.github.chrisbanes.photoview.PhotoView <com.github.chrisbanes.photoview.PhotoView
android:id="@+id/photoView" android:id="@+id/photoView"
android:layout_width="match_parent" android:layout_width="match_parent"
@ -17,6 +12,5 @@
android:adjustViewBounds="true" android:adjustViewBounds="true"
android:background="@drawable/checkerboard" android:background="@drawable/checkerboard"
app:srcCompat="@android:drawable/screen_background_dark" /> app:srcCompat="@android:drawable/screen_background_dark" />
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
</RelativeLayout> </RelativeLayout>

View File

@ -3,40 +3,18 @@
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="48dp"
android:orientation="vertical"> android:orientation="vertical">
<Button
android:id="@+id/deleteBtn"
style="@style/Widget.AppCompat.Button.Borderless"
android:layout_width="48dp"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginEnd="8dp"
android:layout_marginTop="8dp"
android:background="@drawable/ic_remove_circle_outline_black_24dp"
android:backgroundTint="?android:textColorSecondary"
android:contentDescription="@string/remove_source"
android:elevation="4dp"
app:iconSize="34dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.0" />
<ImageView <ImageView
android:id="@+id/itemImage" android:id="@+id/itemImage"
android:layout_width="36dp" android:layout_width="36dp"
android:layout_height="36dp" android:layout_height="36dp"
android:layout_marginBottom="8dp"
android:layout_marginLeft="8dp"
android:layout_marginTop="8dp"
android:importantForAccessibility="no" android:importantForAccessibility="no"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent" />
app:layout_constraintVertical_bias="0.0" />
<TextView <TextView
android:id="@+id/sourceTitle" android:id="@+id/sourceTitle"
@ -47,30 +25,26 @@
android:gravity="start" android:gravity="start"
android:maxLines="1" android:maxLines="1"
android:textAlignment="textStart" android:textAlignment="textStart"
android:textColor="?android:textColorPrimary"
android:textSize="13sp" android:textSize="13sp"
app:layout_constraintBottom_toTopOf="@+id/errorText" android:textColor="?android:textColorPrimary"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/deleteBtn" app:layout_constraintEnd_toStartOf="@+id/deleteBtn"
app:layout_constraintStart_toEndOf="@+id/itemImage" app:layout_constraintStart_toEndOf="@+id/itemImage"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
tools:text="source title" /> tools:text="source title" />
<TextView <Button
android:id="@+id/errorText" android:id="@+id/deleteBtn"
android:layout_width="0dp" style="@style/Widget.AppCompat.Button.Borderless"
android:layout_height="wrap_content" android:layout_width="34dp"
android:layout_marginBottom="8dp" android:layout_height="34dp"
android:layout_marginEnd="16dp" android:layout_marginEnd="8dp"
android:layout_marginStart="16dp" android:background="@drawable/ic_remove_circle_outline_black_24dp"
android:layout_marginTop="8dp" android:backgroundTint="?android:textColorSecondary"
android:textAppearance="@style/TextAppearance.AppCompat.Small" android:elevation="4dp"
android:textColor="@color/red" android:contentDescription="@string/remove_source"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" />
app:layout_constraintTop_toBottomOf="@+id/itemImage"
tools:text="Test"
tools:visibility="visible" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -17,11 +17,12 @@ plugins {
allprojects { allprojects {
repositories { repositories {
// maven { url = uri("https://nexus.amine-louveau.fr/repository/maven-public/")} maven { url = uri("https://nexus.amine-louveau.fr/repository/maven-public/")}
google() // IMPORTANT : Add back when new library added
mavenCentral() // google()
jcenter() // mavenCentral()
maven { url = uri("https://www.jitpack.io") } // jcenter()
// maven { url = uri("https://www.jitpack.io") }
} }
} }

View File

@ -2,18 +2,20 @@ 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/")}
google() // IMPORTANT : Add back when new plugin added
gradlePluginPortal() // google()
mavenCentral() // gradlePluginPortal()
// mavenCentral()
} }
} }
dependencyResolutionManagement { dependencyResolutionManagement {
repositories { repositories {
// maven { url = uri("https://nexus.amine-louveau.fr/repository/maven-public/")} maven { url = uri("https://nexus.amine-louveau.fr/repository/maven-public/")}
google() // IMPORTANT : Add back when new library added
mavenCentral() // google()
// mavenCentral()
} }
} }

View File

@ -6,7 +6,7 @@ class MercuryModel {
@Serializable @Serializable
class ParsedContent( class ParsedContent(
val title: String?, val title: String,
val content: String?, val content: String?,
val lead_image_url: String?, val lead_image_url: String?,
val url: String val url: String