/* * mygram-droid: Android TV client for Foldergram. * Copyright (C) 2026 Danilo M. * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 as published * by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * for more details. */ package mygram.droid; import org.json.JSONArray; import org.json.JSONObject; import java.util.ArrayList; import java.util.List; /** One Foldergram post: a photo, a video, or a carousel of slides. */ final class Post { /** One slide. A single post has exactly one. */ static final class Media { final boolean video; final int width, height; final long durationMs; final String thumbnailUrl, previewUrl; Media(JSONObject o, String base) { video = "video".equals(o.optString("mediaType")); width = o.optInt("width"); height = o.optInt("height"); durationMs = o.optLong("durationMs"); thumbnailUrl = Api.resolve(base, str(o, "thumbnailUrl")); previewUrl = Api.resolve(base, str(o, "previewUrl")); } } final int id; final String folderSlug, folderName; final List media = new ArrayList<>(); Post(JSONObject o, String base) { id = o.optInt("id"); folderSlug = o.optString("folderSlug"); folderName = o.optString("folderName"); JSONArray items = o.optJSONArray("mediaItems"); if (items != null) for (int i = 0; i < items.length(); i++) media.add(new Media(items.optJSONObject(i), base)); if (media.isEmpty()) media.add(new Media(o, base)); } /** The posts in a paged response's "items". */ static List list(JSONObject page, String base) { List out = new ArrayList<>(); JSONArray items = page.optJSONArray("items"); if (items != null) for (int i = 0; i < items.length(); i++) out.add(new Post(items.optJSONObject(i), base)); return out; } /** optString turns JSON null into "null"; this returns null. */ static String str(JSONObject o, String key) { return o.isNull(key) ? null : o.optString(key); } }