version upgrade, database bugfix

This commit is contained in:
nuclearfog 2022-01-22 17:02:48 +01:00
parent ad68c16c10
commit b6917bea26
No known key found for this signature in database
GPG Key ID: AA0271FBE406DB98
5 changed files with 71 additions and 38 deletions

View File

@ -12,8 +12,8 @@ android {
applicationId 'org.nuclearfog.twidda'
minSdkVersion 16
targetSdkVersion 31
versionCode 53
versionName '2.0'
versionCode 54
versionName '2.0.1'
// limiting language support for smaller APK size
resConfigs 'en', 'de-rDE', 'zh-rCN'
vectorDrawables.useSupportLibrary true

View File

@ -66,8 +66,8 @@ public class PicassoBuilder implements GlobalSettings.SettingsListener {
TrustManagerFactory factory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
factory.init((KeyStore) null);
X509TrustManager manager = (X509TrustManager) factory.getTrustManagers()[0];
builder.sslSocketFactory(new TLSSocketFactory(), manager);
downloader = new OkHttp3Downloader(builder.build());
TLSSocketFactory socket = new TLSSocketFactory();
builder.sslSocketFactory(socket, manager);
} catch (Exception e) {
// ignore, try without TLS 1.2 support
}

View File

@ -26,6 +26,8 @@ import org.nuclearfog.twidda.model.User;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
/**
* SQLite database class to store and load tweets, messages, trends and user information
@ -136,15 +138,10 @@ public class AppDatabase {
+ " AND " + UserRegisterTable.NAME + "." + UserRegisterTable.REGISTER + "&" + EXCL_USR + " IS 0"
+ " ORDER BY " + TweetTable.ID + " DESC LIMIT ?";
/**
* SQL query to get current user's messages
*/
static final String MESSAGE_QUERY = "SELECT * FROM " + MessageTable.NAME
+ " LEFT JOIN " + UserTable.NAME + " " + UserTable.ALIAS_1
+ " ON " + UserTable.ALIAS_1 + "." + UserTable.ID + "=" + MessageTable.NAME + "." + MessageTable.FROM
+ " LEFT JOIN " + UserTable.NAME + " " + UserTable.ALIAS_2
+ " ON " + UserTable.ALIAS_2 + "." + UserTable.ID + "=" + MessageTable.NAME + "." + MessageTable.TO
+ " LEFT JOIN " + UserRegisterTable.NAME + " " + UserRegisterTable.ALIAS_1
+ " ON " + UserRegisterTable.ALIAS_1 + "." + UserRegisterTable.ID + "=" + MessageTable.NAME + "." + MessageTable.FROM
+ " LEFT JOIN " + UserRegisterTable.NAME + " " + UserRegisterTable.ALIAS_2
+ " ON " + UserRegisterTable.ALIAS_2 + "." + UserRegisterTable.ID + "=" + MessageTable.NAME + "." + MessageTable.TO
+ " WHERE " + MessageTable.FROM + "=? OR " + MessageTable.TO + "=?"
+ " ORDER BY " + MessageTable.SINCE + " DESC LIMIT ?";
@ -593,13 +590,33 @@ public class AppDatabase {
* @return list of direct messages
*/
public Directmessages getMessages() {
String[] args = {Long.toString(homeId), Long.toString(homeId), Integer.toString(limit)};
String homeIdStr = Long.toString(homeId);
String[] args = {homeIdStr, homeIdStr, Integer.toString(limit)};
Directmessages result = new Directmessages(null, null);
SQLiteDatabase db = getDbRead();
Map<Long, User> userCache = new TreeMap<>();
Cursor cursor = db.rawQuery(MESSAGE_QUERY, args);
if (cursor.moveToFirst()) {
do {
result.add(new DirectMessageImpl(cursor, homeId));
User sender, receiver;
DirectMessageImpl message = new DirectMessageImpl(cursor);
if (userCache.containsKey(message.getSenderId())) {
sender = userCache.get(message.getSenderId());
} else {
sender = getUser(message.getSenderId());
userCache.put(message.getSenderId(), sender);
}
if (userCache.containsKey(message.getReceiverId())) {
receiver = userCache.get(message.getReceiverId());
} else {
receiver = getUser(message.getReceiverId());
userCache.put(message.getReceiverId(), receiver);
}
if (sender != null && receiver != null) {
message.setSender(sender);
message.setReceiver(receiver);
result.add(message);
}
} while (cursor.moveToNext());
}
cursor.close();
@ -852,7 +869,7 @@ public class AppDatabase {
*/
private void storeMessage(DirectMessage message, SQLiteDatabase db) {
// store message information
ContentValues messageColumn = new ContentValues(5);
ContentValues messageColumn = new ContentValues(6);
messageColumn.put(MessageTable.ID, message.getId());
messageColumn.put(MessageTable.SINCE, message.getTimestamp());
messageColumn.put(MessageTable.FROM, message.getSender().getId());

View File

@ -7,7 +7,6 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import org.nuclearfog.twidda.database.DatabaseAdapter.MessageTable;
import org.nuclearfog.twidda.database.DatabaseAdapter.UserTable;
import org.nuclearfog.twidda.model.DirectMessage;
import org.nuclearfog.twidda.model.User;
@ -20,19 +19,21 @@ class DirectMessageImpl implements DirectMessage {
private long id;
private long time;
private long senderId;
private long receiverId;
private String text;
private User sender;
private User receiver;
private String media;
DirectMessageImpl(Cursor cursor, long currentId) {
DirectMessageImpl(Cursor cursor) {
text = cursor.getString(cursor.getColumnIndexOrThrow(MessageTable.MESSAGE));
time = cursor.getLong(cursor.getColumnIndexOrThrow(MessageTable.SINCE));
id = cursor.getLong(cursor.getColumnIndexOrThrow(MessageTable.ID));
senderId = cursor.getLong(cursor.getColumnIndexOrThrow(MessageTable.FROM));
receiverId = cursor.getLong(cursor.getColumnIndexOrThrow(MessageTable.TO));
media = cursor.getString(cursor.getColumnIndexOrThrow(MessageTable.MEDIA));
sender = new UserImpl(cursor, UserTable.ALIAS_1 + ".", currentId);
receiver = new UserImpl(cursor, UserTable.ALIAS_2 + ".", currentId);
}
@Override
@ -80,4 +81,24 @@ class DirectMessageImpl implements DirectMessage {
public String toString() {
return "from:" + sender + " to:" + receiver + " message:" + text;
}
void setSender(User sender) {
this.sender = sender;
}
void setReceiver(User receiver) {
this.receiver = receiver;
}
long getSenderId() {
return senderId;
}
long getReceiverId() {
return receiverId;
}
}

View File

@ -42,25 +42,20 @@ class UserImpl implements User {
UserImpl(Cursor cursor, long currentUserId) {
this(cursor, "", currentUserId);
}
UserImpl(Cursor cursor, String prefix, long currentUserId) {
id = cursor.getLong(cursor.getColumnIndexOrThrow(prefix + DatabaseAdapter.UserTable.ID));
username = cursor.getString(cursor.getColumnIndexOrThrow(prefix + DatabaseAdapter.UserTable.USERNAME));
screenName = cursor.getString(cursor.getColumnIndexOrThrow(prefix + DatabaseAdapter.UserTable.SCREENNAME));
profileImg = cursor.getString(cursor.getColumnIndexOrThrow(prefix + DatabaseAdapter.UserTable.IMAGE));
bio = cursor.getString(cursor.getColumnIndexOrThrow(prefix + DatabaseAdapter.UserTable.DESCRIPTION));
link = cursor.getString(cursor.getColumnIndexOrThrow(prefix + DatabaseAdapter.UserTable.LINK));
location = cursor.getString(cursor.getColumnIndexOrThrow(prefix + DatabaseAdapter.UserTable.LOCATION));
bannerImg = cursor.getString(cursor.getColumnIndexOrThrow(prefix + DatabaseAdapter.UserTable.BANNER));
created = cursor.getLong(cursor.getColumnIndexOrThrow(prefix + DatabaseAdapter.UserTable.SINCE));
following = cursor.getInt(cursor.getColumnIndexOrThrow(prefix + DatabaseAdapter.UserTable.FRIENDS));
follower = cursor.getInt(cursor.getColumnIndexOrThrow(prefix + DatabaseAdapter.UserTable.FOLLOWER));
tweetCount = cursor.getInt(cursor.getColumnIndexOrThrow(prefix + DatabaseAdapter.UserTable.TWEETS));
favorCount = cursor.getInt(cursor.getColumnIndexOrThrow(prefix + DatabaseAdapter.UserTable.FAVORS));
int register = cursor.getInt(cursor.getColumnIndexOrThrow(prefix + DatabaseAdapter.UserRegisterTable.REGISTER));
id = cursor.getLong(cursor.getColumnIndexOrThrow(DatabaseAdapter.UserTable.ID));
username = cursor.getString(cursor.getColumnIndexOrThrow(DatabaseAdapter.UserTable.USERNAME));
screenName = cursor.getString(cursor.getColumnIndexOrThrow(DatabaseAdapter.UserTable.SCREENNAME));
profileImg = cursor.getString(cursor.getColumnIndexOrThrow(DatabaseAdapter.UserTable.IMAGE));
bio = cursor.getString(cursor.getColumnIndexOrThrow(DatabaseAdapter.UserTable.DESCRIPTION));
link = cursor.getString(cursor.getColumnIndexOrThrow(DatabaseAdapter.UserTable.LINK));
location = cursor.getString(cursor.getColumnIndexOrThrow(DatabaseAdapter.UserTable.LOCATION));
bannerImg = cursor.getString(cursor.getColumnIndexOrThrow( DatabaseAdapter.UserTable.BANNER));
created = cursor.getLong(cursor.getColumnIndexOrThrow(DatabaseAdapter.UserTable.SINCE));
following = cursor.getInt(cursor.getColumnIndexOrThrow(DatabaseAdapter.UserTable.FRIENDS));
follower = cursor.getInt(cursor.getColumnIndexOrThrow(DatabaseAdapter.UserTable.FOLLOWER));
tweetCount = cursor.getInt(cursor.getColumnIndexOrThrow(DatabaseAdapter.UserTable.TWEETS));
favorCount = cursor.getInt(cursor.getColumnIndexOrThrow(DatabaseAdapter.UserTable.FAVORS));
int register = cursor.getInt(cursor.getColumnIndexOrThrow(DatabaseAdapter.UserRegisterTable.REGISTER));
isVerified = (register & VER_MASK) != 0;
isLocked = (register & LCK_MASK) != 0;
followReqSent = (register & FRQ_MASK) != 0;