1
0
mirror of https://github.com/tateisu/SubwayTooter synced 2024-12-27 01:13:31 +01:00

リファクタ

This commit is contained in:
tateisu 2017-12-02 01:57:44 +09:00
parent a6ad17101f
commit ba6a8cb7d3
2 changed files with 100 additions and 115 deletions

View File

@ -8,6 +8,7 @@ import org.json.JSONObject;
import java.util.ArrayList;
import jp.juggler.subwaytooter.table.UserRelation;
import jp.juggler.subwaytooter.util.LogCategory;
import jp.juggler.subwaytooter.util.Utils;
@ -15,54 +16,29 @@ public class TootRelationShip {
private static final LogCategory log = new LogCategory( "TootRelationShip" );
// Target account id
// Target account id
public long id;
// Whether the user is currently following the account
private boolean following;
// Whether the authorized user is currently following the target account.
// maybe faked in response of follow-request.
public boolean following;
// Whether the user is currently being followed by the account
// Whether the authorized user is currently being followed by the target account.
public boolean followed_by;
// Whether the user is currently blocking the account
// Whether the authorized user is currently blocking the target account.
public boolean blocking;
// Whether the user is currently muting the account
// Whether the authorized user is currently muting the target account.
public boolean muting;
// Whether the user has requested to follow the account
private boolean requested;
// Whether the authorized user has requested to follow the target account.
// maybe true while follow-request is progress on server, even if the user is not locked.
public boolean requested;
public int following_reblogs = REBLOG_UNKNOWN;
public static final int REBLOG_HIDE = 0;
public static final int REBLOG_SHOW = 1;
public static final int REBLOG_UNKNOWN = 2;
// 認証ユーザからのフォロー状態
public boolean getFollowing( @NonNull TootAccount who ){
//noinspection SimplifiableIfStatement
if( requested && ! following && ! who.locked ){
return true;
}
return following;
}
public boolean _getRealFollowing(){
return following;
}
// 認証ユーザからのフォローリクエスト申請中状態
public boolean getRequested( @NonNull TootAccount who ){
//noinspection SimplifiableIfStatement
if( requested && ! following && ! who.locked ){
return false;
}
return requested;
}
public boolean _getRealRequested(){
return requested;
}
// (mastodon 2.1 or later) per-following-user setting.
// Whether the boosts from target account will be shown on authorized user's home TL.
public int following_reblogs = UserRelation.REBLOG_UNKNOWN;
@Nullable
public static TootRelationShip parse( JSONObject src ){
@ -79,15 +55,15 @@ public class TootRelationShip {
ov = ( (JSONObject) ov ).opt( "reblogs" );
if( ov instanceof Boolean ){
dst.following_reblogs = (Boolean) ov ? REBLOG_SHOW : REBLOG_HIDE;
dst.following_reblogs = (Boolean) ov ? UserRelation.REBLOG_SHOW : UserRelation.REBLOG_HIDE;
}else{
dst.following_reblogs = REBLOG_UNKNOWN;
dst.following_reblogs = UserRelation.REBLOG_UNKNOWN;
}
}else{
// 2.0 までの挙動
dst.following = ( ov instanceof Boolean ? (Boolean) ov : false );
dst.following_reblogs = REBLOG_UNKNOWN;
dst.following_reblogs = UserRelation.REBLOG_UNKNOWN;
}
dst.followed_by = src.optBoolean( "followed_by" );

View File

@ -25,8 +25,15 @@ public class UserRelation {
private static final String COL_BLOCKING = "blocking";
private static final String COL_MUTING = "muting";
private static final String COL_REQUESTED = "requested";
// (mastodon 2.1 or later) per-following-user setting.
// Whether the boosts from target account will be shown on authorized user's home TL.
private static final String COL_FOLLOWING_REBLOGS = "following_reblogs";
public static final int REBLOG_HIDE = 0; // don't show the boosts from target account will be shown on authorized user's home TL.
public static final int REBLOG_SHOW = 1; // show the boosts from target account will be shown on authorized user's home TL.
public static final int REBLOG_UNKNOWN = 2; // not following, or instance don't support hide reblog.
public static void onDBCreate( SQLiteDatabase db ){
log.d( "onDBCreate!" );
db.execSQL(
@ -57,7 +64,13 @@ public class UserRelation {
}
if( oldVersion < 20 && newVersion >= 20 ){
try{
db.execSQL( "alter table " + table + " add column "+ COL_FOLLOWING_REBLOGS+" integer default 1" );
db.execSQL( "alter table " + table + " add column " + COL_FOLLOWING_REBLOGS + " integer default 1" );
/*
(COL_FOLLOWING_REBLOGS カラムのデフォルト値について)
1.7.5でboolean値を保存していた関係でデフォルト値は1(REBLOG_SHOW)になってしまっている
1.7.6以降では3値論理にしたのでデフォルトは2(REBLOG_UNKNOWN)の方が適切だがSQLiteにはカラムのデフォルト制約の変更を行う機能がない
データは適当に更新されるはずだから今のままでも多分問題ないはず
*/
}catch( Throwable ex ){
log.trace( ex );
}
@ -75,17 +88,18 @@ public class UserRelation {
}
}
public static @NonNull UserRelation save1( long now, long db_id, @NonNull TootRelationShip src ){
public static @NonNull
UserRelation save1( long now, long db_id, @NonNull TootRelationShip src ){
try{
ContentValues cv = new ContentValues();
cv.put( COL_TIME_SAVE, now );
cv.put( COL_DB_ID, db_id );
cv.put( COL_WHO_ID, src.id );
cv.put( COL_FOLLOWING, src._getRealFollowing() ? 1 : 0 );
cv.put( COL_FOLLOWING, src.following ? 1 : 0 );
cv.put( COL_FOLLOWED_BY, src.followed_by ? 1 : 0 );
cv.put( COL_BLOCKING, src.blocking ? 1 : 0 );
cv.put( COL_MUTING, src.muting ? 1 : 0 );
cv.put( COL_REQUESTED, src._getRealRequested() ? 1 : 0 );
cv.put( COL_REQUESTED, src.requested ? 1 : 0 );
cv.put( COL_FOLLOWING_REBLOGS, src.following_reblogs );
App1.getDB().replace( table, null, cv );
@ -94,7 +108,7 @@ public class UserRelation {
}catch( Throwable ex ){
log.e( ex, "save failed." );
}
return load( db_id,src.id );
return load( db_id, src.id );
}
public static void saveList( long now, long db_id, TootRelationShip.List src_list ){
@ -109,11 +123,11 @@ public class UserRelation {
try{
for( TootRelationShip src : src_list ){
cv.put( COL_WHO_ID, src.id );
cv.put( COL_FOLLOWING, src._getRealFollowing() ? 1 : 0 );
cv.put( COL_FOLLOWING, src.following ? 1 : 0 );
cv.put( COL_FOLLOWED_BY, src.followed_by ? 1 : 0 );
cv.put( COL_BLOCKING, src.blocking ? 1 : 0 );
cv.put( COL_MUTING, src.muting ? 1 : 0 );
cv.put( COL_REQUESTED, src._getRealRequested() ? 1 : 0 );
cv.put( COL_REQUESTED, src.requested ? 1 : 0 );
cv.put( COL_FOLLOWING_REBLOGS, src.following_reblogs );
db.replace( table, null, cv );
@ -139,16 +153,11 @@ public class UserRelation {
public boolean blocking;
public boolean muting;
private boolean requested; // 認証ユーザからのフォローは申請中である
public int following_reblogs; // このユーザからのブーストをTLに表示する
@SuppressWarnings("unused")
public static final int REBLOG_HIDE = TootRelationShip.REBLOG_HIDE;
public static final int REBLOG_SHOW = TootRelationShip.REBLOG_SHOW;
public static final int REBLOG_UNKNOWN = TootRelationShip.REBLOG_UNKNOWN;
// 認証ユーザからのフォロー状態
public boolean getFollowing(@Nullable TootAccount who){
public boolean getFollowing( @Nullable TootAccount who ){
//noinspection SimplifiableIfStatement
if( requested && ! following && who != null && ! who.locked ){
return true;
@ -157,7 +166,7 @@ public class UserRelation {
}
// 認証ユーザからのフォローリクエスト申請中状態
public boolean getRequested(@Nullable TootAccount who){
public boolean getRequested( @Nullable TootAccount who ){
//noinspection SimplifiableIfStatement
if( requested && ! following && who != null && ! who.locked ){
return false;
@ -213,64 +222,64 @@ public class UserRelation {
mMemoryCache.put( key, dst );
return dst;
}
// public static Cursor createCursor(){
// return App1.getDB().query( table, null, null, null, null, null, COL_NAME + " asc" );
// }
//
// public static void delete( String name ){
// try{
// App1.getDB().delete( table, COL_NAME + "=?", new String[]{ name } );
// }catch( Throwable ex ){
// log.e( ex, "delete failed." );
// }
// }
//
// public static HashSet< String > getNameSet(){
// HashSet< String > dst = new HashSet<>();
// try{
// Cursor cursor = App1.getDB().query( table, null, null, null, null, null, null );
// if( cursor != null ){
// try{
// int idx_name = cursor.getColumnIndex( COL_NAME );
// while( cursor.moveToNext() ){
// String s = cursor.getString( idx_name );
// dst.add( s );
// }
// }finally{
// cursor.close();
// }
// }
// }catch( Throwable ex ){
// ex.printStackTrace();
// }
// return dst;
// }
// private static final String[] isMuted_projection = new String[]{COL_NAME};
// private static final String isMuted_where = COL_NAME+"=?";
// private static final ThreadLocal<String[]> isMuted_where_arg = new ThreadLocal<String[]>() {
// @Override protected String[] initialValue() {
// return new String[1];
// }
// };
// public static boolean isMuted( String app_name ){
// if( app_name == null ) return false;
// try{
// String[] where_arg = isMuted_where_arg.get();
// where_arg[0] = app_name;
// Cursor cursor = App1.getDB().query( table, isMuted_projection,isMuted_where , where_arg, null, null, null );
// try{
// if( cursor.moveToFirst() ){
// return true;
// }
// }finally{
// cursor.close();
// }
// }catch( Throwable ex ){
// log.e( ex, "load failed." );
// }
// return false;
// }
// public static Cursor createCursor(){
// return App1.getDB().query( table, null, null, null, null, null, COL_NAME + " asc" );
// }
//
// public static void delete( String name ){
// try{
// App1.getDB().delete( table, COL_NAME + "=?", new String[]{ name } );
// }catch( Throwable ex ){
// log.e( ex, "delete failed." );
// }
// }
//
// public static HashSet< String > getNameSet(){
// HashSet< String > dst = new HashSet<>();
// try{
// Cursor cursor = App1.getDB().query( table, null, null, null, null, null, null );
// if( cursor != null ){
// try{
// int idx_name = cursor.getColumnIndex( COL_NAME );
// while( cursor.moveToNext() ){
// String s = cursor.getString( idx_name );
// dst.add( s );
// }
// }finally{
// cursor.close();
// }
// }
// }catch( Throwable ex ){
// ex.printStackTrace();
// }
// return dst;
// }
// private static final String[] isMuted_projection = new String[]{COL_NAME};
// private static final String isMuted_where = COL_NAME+"=?";
// private static final ThreadLocal<String[]> isMuted_where_arg = new ThreadLocal<String[]>() {
// @Override protected String[] initialValue() {
// return new String[1];
// }
// };
// public static boolean isMuted( String app_name ){
// if( app_name == null ) return false;
// try{
// String[] where_arg = isMuted_where_arg.get();
// where_arg[0] = app_name;
// Cursor cursor = App1.getDB().query( table, isMuted_projection,isMuted_where , where_arg, null, null, null );
// try{
// if( cursor.moveToFirst() ){
// return true;
// }
// }finally{
// cursor.close();
// }
// }catch( Throwable ex ){
// log.e( ex, "load failed." );
// }
// return false;
// }
}