summaryrefslogtreecommitdiff
path: root/org.fox.ttrss
diff options
context:
space:
mode:
authorAndrew Dolgov <fox@fakecake.org>2025-05-17 14:40:15 +0300
committerAndrew Dolgov <fox@fakecake.org>2025-05-17 14:40:15 +0300
commit70f53af0aa11921346f5f2365f8d124b262e7bee (patch)
treed79ecc2d354b5168ad2ef6fca9179f9772642423 /org.fox.ttrss
parentb7300498f01e46219e4b7309abd51a5d4b47d9fb (diff)
more gallery model stuff
Diffstat (limited to 'org.fox.ttrss')
-rw-r--r--org.fox.ttrss/src/main/java/org/fox/ttrss/GalleryModel.java121
1 files changed, 61 insertions, 60 deletions
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/GalleryModel.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/GalleryModel.java
index 25117bb2..1e059e0f 100644
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/GalleryModel.java
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/GalleryModel.java
@@ -1,7 +1,10 @@
package org.fox.ttrss;
import android.app.Application;
+import android.graphics.Bitmap;
import android.net.Uri;
+import android.os.Handler;
+import android.os.Looper;
import android.util.Log;
import androidx.annotation.NonNull;
@@ -9,14 +12,21 @@ import androidx.lifecycle.AndroidViewModel;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
+import com.bumptech.glide.Glide;
+import com.bumptech.glide.load.engine.DiskCacheStrategy;
+
import org.fox.ttrss.types.GalleryEntry;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
+import java.net.MalformedURLException;
+import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.List;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
public class GalleryModel extends AndroidViewModel {
private final String TAG = this.getClass().getSimpleName();
@@ -31,67 +41,47 @@ public class GalleryModel extends AndroidViewModel {
return m_items;
}
+ private ExecutorService m_executor = Executors.newSingleThreadExecutor();
+ private Handler m_mainHandler = new Handler(Looper.getMainLooper());
+
public void collectItems(String articleText, String srcFirst) {
Document doc = Jsoup.parse(articleText);
- /* look for srcFirst and post an update */
-
- Elements elems = doc.select("img,video");
-
- for (Element elem : elems) {
- GalleryEntry item = new GalleryEntry();
-
- if ("video".equalsIgnoreCase(elem.tagName())) {
-
-
- } else {
- String src = elem.attr("abs:src");
-
-
- }
- }
- }
+ List<GalleryEntry> checkList = new ArrayList<>();
- List<GalleryEntry> collectGalleryContents(String imgSrcFirst, String articleText, List<GalleryEntry> uncheckedItems ) {
- List<GalleryEntry> items = new ArrayList<>();
+ /* look for srcFirst quickly and post an update */
- Document doc = Jsoup.parse(articleText);
+ Log.d(TAG, "looking for srcFirst=" + srcFirst);
Elements elems = doc.select("img,video");
- boolean firstFound = false;
-
for (Element elem : elems) {
-
- GalleryEntry item = new GalleryEntry();
-
if ("video".equalsIgnoreCase(elem.tagName())) {
- String cover = elem.attr("poster");
-
Element source = elem.select("source").first();
+ String poster = elem.attr("abs:poster");
if (source != null) {
- String src = source.attr("src");
+ String src = source.attr("abs:src");
- if (!src.isEmpty()) {
- //Log.d(TAG, "vid/src=" + src);
+ Log.d(TAG, "checking vid src=" + src + " poster=" + poster);
- if (src.startsWith("//")) {
- src = "https:" + src;
- }
+ if (poster != null && poster.equals(srcFirst) || src != null && src.equals(srcFirst)) {
+ Log.d(TAG, "first item found, vid=" + src);
+
+ GalleryEntry item = new GalleryEntry(src, GalleryEntry.GalleryEntryType.TYPE_VIDEO, poster);
- if (imgSrcFirst.equals(src))
- firstFound = true;
+ checkList.add(item);
+ m_items.postValue(checkList);
+ } else {
try {
Uri checkUri = Uri.parse(src);
if (!"data".equalsIgnoreCase(checkUri.getScheme())) {
- item.url = src;
- item.coverUrl = cover;
- item.type = GalleryEntry.GalleryEntryType.TYPE_VIDEO;
- }
+ checkList.add(new GalleryEntry(src, GalleryEntry.GalleryEntryType.TYPE_VIDEO, poster));
+ m_items.postValue(checkList);
+ }
} catch (Exception e) {
e.printStackTrace();
}
@@ -99,41 +89,52 @@ public class GalleryModel extends AndroidViewModel {
}
} else {
- String src = elem.attr("src");
+ String src = elem.attr("abs:src");
- if (!src.isEmpty()) {
- if (src.startsWith("//")) {
- src = "https:" + src;
- }
+ Log.d(TAG, "checking img src=" + src);
- if (imgSrcFirst.equals(src))
- firstFound = true;
+ if (src != null && src.equals(srcFirst)) {
+ Log.d(TAG, "first item found, img=" + src);
- Log.d(TAG, "img/fir=" + imgSrcFirst + ";");
- Log.d(TAG, "img/src=" + src + "; ff=" + firstFound);
+ GalleryEntry item = new GalleryEntry(src, GalleryEntry.GalleryEntryType.TYPE_IMAGE, null);
+ checkList.add(item);
+
+ m_items.postValue(checkList);
+ } else {
try {
Uri checkUri = Uri.parse(src);
if (!"data".equalsIgnoreCase(checkUri.getScheme())) {
- item.url = src;
- item.type = GalleryEntry.GalleryEntryType.TYPE_IMAGE;
- }
+ m_executor.execute(() -> {
+ Log.d(TAG, "checking image with glide: " + src);
+
+ try {
+ Bitmap bmp = Glide.with(getApplication().getApplicationContext())
+ .load(src)
+ .asBitmap()
+ .skipMemoryCache(false)
+ .diskCacheStrategy(DiskCacheStrategy.ALL)
+ .into(HeadlinesFragment.FLAVOR_IMG_MIN_SIZE, HeadlinesFragment.FLAVOR_IMG_MIN_SIZE)
+ .get();
+
+ if (bmp != null && bmp.getWidth() >= HeadlinesFragment.FLAVOR_IMG_MIN_SIZE && bmp.getHeight() >= HeadlinesFragment.FLAVOR_IMG_MIN_SIZE) {
+ Log.d(TAG, "image matches gallery criteria, adding...");
+
+ checkList.add(new GalleryEntry(src, GalleryEntry.GalleryEntryType.TYPE_IMAGE, null));
+ m_items.postValue(checkList);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ });
+ }
} catch (Exception e) {
e.printStackTrace();
}
}
}
-
- if ((firstFound || imgSrcFirst.isEmpty()) && item.url != null) {
- if (m_items.isEmpty())
- m_items.add(item);
- else
- uncheckedItems.add(item);
- }
}
-
- return firstFound;
}
}