database bugfix, fixed error handling

This commit is contained in:
nuclearfog 2022-01-16 14:14:21 +01:00
parent e6464b277f
commit 1c25c7006d
No known key found for this signature in database
GPG Key ID: AA0271FBE406DB98
16 changed files with 26 additions and 35 deletions

View File

@ -52,6 +52,8 @@ public class AccountLoader extends AsyncTask<Account, Void, List<Account>> {
if (fragment != null) { if (fragment != null) {
if (accounts != null) { if (accounts != null) {
fragment.onSuccess(accounts); fragment.onSuccess(accounts);
} else {
fragment.onError();
} }
} }
} }

View File

@ -71,8 +71,6 @@ public class ListLoader extends AsyncTask<Long, Void, UserLists> {
} }
} catch (TwitterException twException) { } catch (TwitterException twException) {
this.twException = twException; this.twException = twException;
} catch (Exception err) {
err.printStackTrace();
} }
return null; return null;
} }

View File

@ -42,8 +42,6 @@ public class ListUpdater extends AsyncTask<Void, Void, UserList> {
return twitter.createUserlist(update); return twitter.createUserlist(update);
} catch (TwitterException err) { } catch (TwitterException err) {
this.err = err; this.err = err;
} catch (Exception err) {
err.printStackTrace();
} }
return null; return null;
} }

View File

@ -95,8 +95,6 @@ public class MessageLoader extends AsyncTask<Long, Void, Directmessages> {
db.deleteMessage(messageId); db.deleteMessage(messageId);
removeMsgId = messageId; removeMsgId = messageId;
} }
} catch (Exception err) {
err.printStackTrace();
} }
return null; return null;
} }

View File

@ -50,15 +50,13 @@ public class MessageUpdater extends AsyncTask<Void, Void, Boolean> {
mediaId = twitter.uploadMedia(message.getMediaStream()); mediaId = twitter.uploadMedia(message.getMediaStream());
message.getMediaStream().close(); message.getMediaStream().close();
} }
// upload message and media ID if defined // upload message and media ID
if (!isCancelled()) { if (!isCancelled()) {
twitter.sendDirectmessage(id, message.getText(), mediaId); twitter.sendDirectmessage(id, message.getText(), mediaId);
} }
return true; return true;
} catch (TwitterException twException) { } catch (TwitterException twException) {
this.twException = twException; this.twException = twException;
} catch (Exception err) {
err.printStackTrace();
} }
return false; return false;
} }

View File

@ -58,8 +58,6 @@ public class TrendLoader extends AsyncTask<Integer, Void, List<Trend>> {
return trends; return trends;
} catch (TwitterException twException) { } catch (TwitterException twException) {
this.twException = twException; this.twException = twException;
} catch (Exception err) {
err.printStackTrace();
} }
return null; return null;
} }

View File

@ -137,8 +137,6 @@ public class TweetAction extends AsyncTask<TweetAction.Action, Tweet, TweetActio
if (twException.getErrorType() == ErrorHandler.TwitterError.RESOURCE_NOT_FOUND) { if (twException.getErrorType() == ErrorHandler.TwitterError.RESOURCE_NOT_FOUND) {
db.removeStatus(tweetId); db.removeStatus(tweetId);
} }
} catch (Exception err) {
err.printStackTrace();
} }
return null; return null;
} }

View File

@ -203,8 +203,6 @@ public class TweetLoader extends AsyncTask<Long, Void, List<Tweet>> {
} }
} catch (TwitterException e) { } catch (TwitterException e) {
this.twException = e; this.twException = e;
} catch (Exception err) {
err.printStackTrace();
} }
return tweets; return tweets;
} }

View File

@ -9,6 +9,7 @@ import org.nuclearfog.twidda.backend.api.holder.MediaStream;
import org.nuclearfog.twidda.backend.api.holder.TweetUpdate; import org.nuclearfog.twidda.backend.api.holder.TweetUpdate;
import org.nuclearfog.twidda.backend.utils.ErrorHandler; import org.nuclearfog.twidda.backend.utils.ErrorHandler;
import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.lang.ref.WeakReference; import java.lang.ref.WeakReference;
@ -62,7 +63,7 @@ public class TweetUpdater extends AsyncTask<Void, Void, Boolean> {
return true; return true;
} catch (TwitterException twException) { } catch (TwitterException twException) {
this.twException = twException; this.twException = twException;
} catch (Exception err) { } catch (IOException err) {
err.printStackTrace(); err.printStackTrace();
} }
return false; return false;

View File

@ -63,8 +63,6 @@ public class UserExcludeLoader extends AsyncTask<String, Void, Void> {
} }
} catch (TwitterException err) { } catch (TwitterException err) {
this.err = err; this.err = err;
} catch (Exception err) {
// ignore
} }
return null; return null;
} }

View File

@ -1714,7 +1714,7 @@ public class Twitter {
* @param params parameter to add to signature * @param params parameter to add to signature
* @return header string * @return header string
*/ */
private String buildHeader(String method, String endpoint, List<String> params) { private String buildHeader(String method, String endpoint, List<String> params) throws IOException {
String timeStamp = StringTools.getTimestamp(); String timeStamp = StringTools.getTimestamp();
String random = StringTools.getRandomString(); String random = StringTools.getRandomString();
String signkey = tokens.getConsumerSec() + "&"; String signkey = tokens.getConsumerSec() + "&";

View File

@ -4,10 +4,9 @@ import static org.nuclearfog.twidda.backend.api.Twitter.SIGNATURE_ALG;
import android.util.Base64; import android.util.Base64;
import java.io.IOException;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.net.URLEncoder; import java.net.URLEncoder;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Date; import java.util.Date;
import java.util.Locale; import java.util.Locale;
@ -250,7 +249,7 @@ public final class StringTools {
* @param keyString key used to sign * @param keyString key used to sign
* @return key signature * @return key signature
*/ */
public static String sign(String method, String endpoint, String param, String keyString) { public static String sign(String method, String endpoint, String param, String keyString) throws IOException {
String input = method + "&" + encode(endpoint) + "&" + encode(param); String input = method + "&" + encode(endpoint) + "&" + encode(param);
return encode(computeSignature(input, keyString)); return encode(computeSignature(input, keyString));
} }
@ -262,15 +261,14 @@ public final class StringTools {
* @param keyString key used for sign * @param keyString key used for sign
* @return sign string * @return sign string
*/ */
public static String computeSignature(String baseString, String keyString) { public static String computeSignature(String baseString, String keyString) throws IOException {
try { try {
SecretKey secretKey = new SecretKeySpec(keyString.getBytes(), SIGNATURE_ALG); SecretKey secretKey = new SecretKeySpec(keyString.getBytes(), SIGNATURE_ALG);
Mac mac = Mac.getInstance(SIGNATURE_ALG); Mac mac = Mac.getInstance(SIGNATURE_ALG);
mac.init(secretKey); mac.init(secretKey);
return new String(Base64.encode(mac.doFinal(baseString.getBytes()), Base64.DEFAULT)).trim(); return new String(Base64.encode(mac.doFinal(baseString.getBytes()), Base64.DEFAULT)).trim();
} catch (NoSuchAlgorithmException | InvalidKeyException e) { } catch (Exception e) {
e.printStackTrace(); throw new IOException("error generating signature!");
} }
return "";
} }
} }

View File

@ -98,7 +98,8 @@ public class DatabaseAdapter {
+ MessageTable.SINCE + " INTEGER," + MessageTable.SINCE + " INTEGER,"
+ MessageTable.FROM + " INTEGER," + MessageTable.FROM + " INTEGER,"
+ MessageTable.TO + " INTEGER," + MessageTable.TO + " INTEGER,"
+ MessageTable.MESSAGE + " TEXT);"; + MessageTable.MESSAGE + " TEXT,"
+ MessageTable.MEDIA + " TEXT);";
/** /**
* table for tweet register * table for tweet register
@ -108,6 +109,7 @@ public class DatabaseAdapter {
+ TweetRegisterTable.OWNER + " INTEGER," + TweetRegisterTable.OWNER + " INTEGER,"
+ TweetRegisterTable.ID + " INTEGER," + TweetRegisterTable.ID + " INTEGER,"
+ TweetRegisterTable.REGISTER + " INTEGER," + TweetRegisterTable.REGISTER + " INTEGER,"
+ TweetRegisterTable.RETWEETUSER + " INTEGER,"
+ "FOREIGN KEY(" + TweetRegisterTable.ID + ")" + "FOREIGN KEY(" + TweetRegisterTable.ID + ")"
+ "REFERENCES " + TweetTable.NAME + "(" + TweetTable.ID + "));"; + "REFERENCES " + TweetTable.NAME + "(" + TweetTable.ID + "));";
@ -146,12 +148,6 @@ public class DatabaseAdapter {
private static final String INDX_TWEET = "CREATE INDEX IF NOT EXISTS idx_tweet" private static final String INDX_TWEET = "CREATE INDEX IF NOT EXISTS idx_tweet"
+ " ON " + TweetTable.NAME + "(" + TweetTable.USER + ");"; + " ON " + TweetTable.NAME + "(" + TweetTable.USER + ");";
/**
* table index for trend table
*/
private static final String INDX_TREND = "CREATE INDEX IF NOT EXISTS idx_trend"
+ " ON " + TrendTable.NAME + "(" + TrendTable.ID + ");";
/** /**
* table index for tweet register * table index for tweet register
*/ */
@ -252,7 +248,6 @@ public class DatabaseAdapter {
db.execSQL(TABLE_USER_REGISTER); db.execSQL(TABLE_USER_REGISTER);
// create index // create index
db.execSQL(INDX_TWEET); db.execSQL(INDX_TWEET);
db.execSQL(INDX_TREND);
db.execSQL(INDX_TWEET_REG); db.execSQL(INDX_TWEET_REG);
db.execSQL(INDX_USER_REG); db.execSQL(INDX_USER_REG);
if (db.getVersion() == 0) { if (db.getVersion() == 0) {

View File

@ -6,10 +6,12 @@ import static org.nuclearfog.twidda.dialog.ConfirmDialog.DialogType;
import android.os.Bundle; import android.os.Bundle;
import android.view.View; import android.view.View;
import android.widget.Toast;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import org.nuclearfog.twidda.R;
import org.nuclearfog.twidda.adapter.AccountAdapter; import org.nuclearfog.twidda.adapter.AccountAdapter;
import org.nuclearfog.twidda.adapter.AccountAdapter.OnAccountClickListener; import org.nuclearfog.twidda.adapter.AccountAdapter.OnAccountClickListener;
import org.nuclearfog.twidda.backend.AccountLoader; import org.nuclearfog.twidda.backend.AccountLoader;
@ -110,7 +112,7 @@ public class AccountFragment extends ListFragment implements OnAccountClickListe
} }
/** /**
* called from {@link AccountLoader} * called from {@link AccountLoader} to set login information
* *
* @param result login information * @param result login information
*/ */
@ -118,4 +120,11 @@ public class AccountFragment extends ListFragment implements OnAccountClickListe
adapter.setData(result); adapter.setData(result);
setRefresh(false); setRefresh(false);
} }
/**
* called from {@link AccountLoader} when an error occurs
*/
public void onError() {
Toast.makeText(requireContext(), R.string.error_login_information, Toast.LENGTH_SHORT).show();
}
} }

View File

@ -226,4 +226,5 @@
<string name="toolbar_tweet_favoriter">Tweet favorisiert von</string> <string name="toolbar_tweet_favoriter">Tweet favorisiert von</string>
<string name="toolbar_tweet_liker">Tweet gelikt von</string> <string name="toolbar_tweet_liker">Tweet gelikt von</string>
<string name="error_forbidden_api_access">Diese API unterstützt nicht diese Aktion!</string> <string name="error_forbidden_api_access">Diese API unterstützt nicht diese Aktion!</string>
<string name="error_login_information">Login Informationen konnten nicht geladen werden!</string>
</resources> </resources>

View File

@ -209,6 +209,7 @@
<string name="error_twitter_search">Error, search query is too long or contains illegal characters!</string> <string name="error_twitter_search">Error, search query is too long or contains illegal characters!</string>
<string name="error_not_defined">Not specified error!</string> <string name="error_not_defined">Not specified error!</string>
<string name="error_forbidden_api_access">API does not support this operation!</string> <string name="error_forbidden_api_access">API does not support this operation!</string>
<string name="error_login_information">could not load login information!</string>
<!-- menu icon strings --> <!-- menu icon strings -->
<string name="menu_tweet">write Tweet</string> <string name="menu_tweet">write Tweet</string>