move Html parsing to ViewData (#2414)
* move Html parsing to ViewData * refactor reports to use viewdata * cleanup code * refactor conversations * fix getEditableText * rename StatusParsingHelper * fix tests * commit db schema file * add file header * rename helper function to parseAsMastodonHtml * order imports correctly * move mapping off main thread to default dispatcher * fix ktlint
This commit is contained in:
parent
ffbc4b6403
commit
3e849244f9
34 changed files with 1232 additions and 500 deletions
|
|
@ -31,7 +31,7 @@ import java.io.File;
|
|||
*/
|
||||
@Database(entities = { DraftEntity.class, AccountEntity.class, InstanceEntity.class, TimelineStatusEntity.class,
|
||||
TimelineAccountEntity.class, ConversationEntity.class
|
||||
}, version = 32)
|
||||
}, version = 33)
|
||||
public abstract class AppDatabase extends RoomDatabase {
|
||||
|
||||
public abstract AccountDao accountDao();
|
||||
|
|
@ -490,4 +490,41 @@ public abstract class AppDatabase extends RoomDatabase {
|
|||
database.execSQL("ALTER TABLE `AccountEntity` ADD COLUMN `notificationsSignUps` INTEGER NOT NULL DEFAULT 1");
|
||||
}
|
||||
};
|
||||
|
||||
public static final Migration MIGRATION_32_33 = new Migration(32, 33) {
|
||||
@Override
|
||||
public void migrate(@NonNull SupportSQLiteDatabase database) {
|
||||
|
||||
// ConversationEntity lost the s_collapsible column
|
||||
// since SQLite does not support removing columns and it is just a cache table, we recreate the whole table.
|
||||
database.execSQL("DROP TABLE `ConversationEntity`");
|
||||
database.execSQL("CREATE TABLE IF NOT EXISTS `ConversationEntity` (" +
|
||||
"`accountId` INTEGER NOT NULL," +
|
||||
"`id` TEXT NOT NULL," +
|
||||
"`accounts` TEXT NOT NULL," +
|
||||
"`unread` INTEGER NOT NULL," +
|
||||
"`s_id` TEXT NOT NULL," +
|
||||
"`s_url` TEXT," +
|
||||
"`s_inReplyToId` TEXT," +
|
||||
"`s_inReplyToAccountId` TEXT," +
|
||||
"`s_account` TEXT NOT NULL," +
|
||||
"`s_content` TEXT NOT NULL," +
|
||||
"`s_createdAt` INTEGER NOT NULL," +
|
||||
"`s_emojis` TEXT NOT NULL," +
|
||||
"`s_favouritesCount` INTEGER NOT NULL," +
|
||||
"`s_favourited` INTEGER NOT NULL," +
|
||||
"`s_bookmarked` INTEGER NOT NULL," +
|
||||
"`s_sensitive` INTEGER NOT NULL," +
|
||||
"`s_spoilerText` TEXT NOT NULL," +
|
||||
"`s_attachments` TEXT NOT NULL," +
|
||||
"`s_mentions` TEXT NOT NULL," +
|
||||
"`s_tags` TEXT," +
|
||||
"`s_showingHiddenContent` INTEGER NOT NULL," +
|
||||
"`s_expanded` INTEGER NOT NULL," +
|
||||
"`s_collapsed` INTEGER NOT NULL," +
|
||||
"`s_muted` INTEGER NOT NULL," +
|
||||
"`s_poll` TEXT," +
|
||||
"PRIMARY KEY(`id`, `accountId`))");
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,7 +17,6 @@ package com.keylesspalace.tusky.db
|
|||
|
||||
import androidx.paging.PagingSource
|
||||
import androidx.room.Dao
|
||||
import androidx.room.Delete
|
||||
import androidx.room.Insert
|
||||
import androidx.room.OnConflictStrategy
|
||||
import androidx.room.Query
|
||||
|
|
@ -31,8 +30,8 @@ interface ConversationsDao {
|
|||
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
||||
suspend fun insert(conversation: ConversationEntity): Long
|
||||
|
||||
@Delete
|
||||
suspend fun delete(conversation: ConversationEntity): Int
|
||||
@Query("DELETE FROM ConversationEntity WHERE id = :id AND accountId = :accountId")
|
||||
suspend fun delete(id: String, accountId: Long): Int
|
||||
|
||||
@Query("SELECT * FROM ConversationEntity WHERE accountId = :accountId ORDER BY s_createdAt DESC")
|
||||
fun conversationsForAccount(accountId: Long): PagingSource<Int, ConversationEntity>
|
||||
|
|
|
|||
|
|
@ -15,9 +15,6 @@
|
|||
|
||||
package com.keylesspalace.tusky.db
|
||||
|
||||
import android.text.Spanned
|
||||
import androidx.core.text.parseAsHtml
|
||||
import androidx.core.text.toHtml
|
||||
import androidx.room.ProvidedTypeConverter
|
||||
import androidx.room.TypeConverter
|
||||
import com.google.gson.Gson
|
||||
|
|
@ -31,10 +28,8 @@ import com.keylesspalace.tusky.entity.HashTag
|
|||
import com.keylesspalace.tusky.entity.NewPoll
|
||||
import com.keylesspalace.tusky.entity.Poll
|
||||
import com.keylesspalace.tusky.entity.Status
|
||||
import com.keylesspalace.tusky.util.trimTrailingWhitespace
|
||||
import java.net.URLDecoder
|
||||
import java.net.URLEncoder
|
||||
import java.util.ArrayList
|
||||
import java.util.Date
|
||||
import javax.inject.Inject
|
||||
import javax.inject.Singleton
|
||||
|
|
@ -140,22 +135,6 @@ class Converters @Inject constructor (
|
|||
return Date(date)
|
||||
}
|
||||
|
||||
@TypeConverter
|
||||
fun spannedToString(spanned: Spanned?): String? {
|
||||
if (spanned == null) {
|
||||
return null
|
||||
}
|
||||
return spanned.toHtml()
|
||||
}
|
||||
|
||||
@TypeConverter
|
||||
fun stringToSpanned(spannedString: String?): Spanned? {
|
||||
if (spannedString == null) {
|
||||
return null
|
||||
}
|
||||
return spannedString.parseAsHtml().trimTrailingWhitespace()
|
||||
}
|
||||
|
||||
@TypeConverter
|
||||
fun pollToJson(poll: Poll?): String? {
|
||||
return gson.toJson(poll)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue