diff options
Diffstat (limited to 'app/src/main/java/app/fedilab/android/mastodon/client/entities/api')
-rw-r--r-- | app/src/main/java/app/fedilab/android/mastodon/client/entities/api/EmojiInstance.java | 97 | ||||
-rw-r--r-- | app/src/main/java/app/fedilab/android/mastodon/client/entities/api/Tag.java | 6 |
2 files changed, 103 insertions, 0 deletions
diff --git a/app/src/main/java/app/fedilab/android/mastodon/client/entities/api/EmojiInstance.java b/app/src/main/java/app/fedilab/android/mastodon/client/entities/api/EmojiInstance.java index 71955a3d2..ce672178f 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/client/entities/api/EmojiInstance.java +++ b/app/src/main/java/app/fedilab/android/mastodon/client/entities/api/EmojiInstance.java @@ -14,21 +14,40 @@ package app.fedilab.android.mastodon.client.entities.api; * You should have received a copy of the GNU General Public License along with Fedilab; if not, * see <http://www.gnu.org/licenses>. */ +import static app.fedilab.android.BaseMainActivity.emojis; + import android.content.ContentValues; import android.content.Context; import android.database.Cursor; +import android.database.sqlite.SQLiteBlobTooBigException; import android.database.sqlite.SQLiteDatabase; +import android.os.Handler; +import android.os.Looper; + +import androidx.annotation.NonNull; +import androidx.lifecycle.ViewModelProvider; import com.google.gson.Gson; +import com.google.gson.GsonBuilder; import com.google.gson.annotations.SerializedName; import com.google.gson.reflect.TypeToken; import java.io.Serializable; +import java.net.IDN; import java.util.ArrayList; import java.util.List; +import app.fedilab.android.BaseMainActivity; +import app.fedilab.android.mastodon.client.endpoints.MastodonInstanceService; import app.fedilab.android.mastodon.exception.DBException; +import app.fedilab.android.mastodon.helper.Helper; +import app.fedilab.android.mastodon.viewmodel.mastodon.InstancesVM; import app.fedilab.android.sqlite.Sqlite; +import okhttp3.OkHttpClient; +import retrofit2.Call; +import retrofit2.Response; +import retrofit2.Retrofit; +import retrofit2.converter.gson.GsonConverterFactory; public class EmojiInstance implements Serializable { @@ -170,6 +189,17 @@ public class EmojiInstance implements Serializable { } } + + private MastodonInstanceService init(String instance) { + final OkHttpClient okHttpClient = Helper.myOkHttpClient(context); + Retrofit retrofit = new Retrofit.Builder() + .baseUrl("https://" + (instance != null ? IDN.toASCII(instance, IDN.ALLOW_UNASSIGNED) : null) + "/api/v1/") + .addConverterFactory(GsonConverterFactory.create(Helper.getDateBuilder())) + .client(okHttpClient) + .build(); + return retrofit.create(MastodonInstanceService.class); + } + /** * Returns the emojis for an instance * @@ -184,10 +214,77 @@ public class EmojiInstance implements Serializable { Cursor c = db.query(Sqlite.TABLE_EMOJI_INSTANCE, null, Sqlite.COL_INSTANCE + " = '" + instance + "'", null, null, null, null, "1"); return cursorToEmojiList(c); } catch (Exception e) { + MastodonInstanceService mastodonInstanceService = init(instance); + Call<List<Emoji>> emojiCall = mastodonInstanceService.customEmoji(); + if (emojiCall != null) { + try { + Response<List<Emoji>> emojiResponse = emojiCall.execute(); + if (emojiResponse.isSuccessful()) { + return emojiResponse.body(); + } + } catch (Exception err) { + err.printStackTrace(); + } + } return null; } } + public interface EmojiFilteredCallBack{ + void get(List<Emoji> emojiList); + } + + /** + * Returns the emojis for an instance + * + * @param instance String + * @param filter String + * @param callBack EmojiFilteredCallBack - Get filtered emojis + * + * @return List<Emoji> - List of {@link Emoji} + */ + public void getEmojiListFiltered(@NonNull String instance, @NonNull String filter, EmojiFilteredCallBack callBack) throws DBException { + if (db == null) { + throw new DBException("db is null. Wrong initialization."); + } + new Thread(() -> { + List<Emoji> emojiArrayList= new ArrayList<>(); + List<Emoji> emojiFiltered= new ArrayList<>(); + if (emojis == null || !emojis.containsKey(BaseMainActivity.currentInstance) || emojis.get(BaseMainActivity.currentInstance) == null) { + try { + Cursor c = db.query(Sqlite.TABLE_EMOJI_INSTANCE, null, Sqlite.COL_INSTANCE + " = '" + instance + "'", null, null, null, null, "1"); + emojiArrayList = cursorToEmojiList(c); + } catch (Exception e) { + MastodonInstanceService mastodonInstanceService = init(instance); + Call<List<Emoji>> emojiCall = mastodonInstanceService.customEmoji(); + if (emojiCall != null) { + try { + Response<List<Emoji>> emojiResponse = emojiCall.execute(); + if (emojiResponse.isSuccessful()) { + emojiArrayList = emojiResponse.body(); + } + } catch (Exception err) { + err.printStackTrace(); + } + } + } + } else { + emojiArrayList = emojis.get(instance); + } + if(emojiArrayList != null && emojiArrayList.size() > 0 ) { + for(Emoji emoji: emojiArrayList) { + if(emoji.shortcode.contains(filter)) { + emojiFiltered.add(emoji); + } + } + } + Handler mainHandler = new Handler(Looper.getMainLooper()); + Runnable myRunnable = () -> callBack.get(emojiFiltered); + mainHandler.post(myRunnable); + }).start(); + + } + /** * Restore emoji list from db * diff --git a/app/src/main/java/app/fedilab/android/mastodon/client/entities/api/Tag.java b/app/src/main/java/app/fedilab/android/mastodon/client/entities/api/Tag.java index a1b9b1b3d..5b2a5bbec 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/client/entities/api/Tag.java +++ b/app/src/main/java/app/fedilab/android/mastodon/client/entities/api/Tag.java @@ -32,6 +32,12 @@ public class Tag implements Serializable { @SerializedName("following") public boolean following = false; + public Tag() {} + + public Tag(String name) { + this.name = name; + } + public int getWeight() { int weight = 0; if (history != null && history.size() > 0) { |