package com.tuit.ar.models; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import org.apache.http.NameValuePair; import org.apache.http.message.BasicNameValuePair; import org.json.JSONException; import org.json.JSONObject; import android.content.ContentValues; import android.database.Cursor; import android.database.sqlite.SQLiteException; import com.tuit.ar.api.Twitter; import com.tuit.ar.api.TwitterAccount; import com.tuit.ar.api.TwitterAccountRequestsObserver; import com.tuit.ar.api.TwitterRequest; import com.tuit.ar.api.request.Options; import com.tuit.ar.databases.Model; public class DirectMessage extends ListElement implements TwitterAccountRequestsObserver { private static final String[] columns = new String[]{ "id", "sender_id", "date", "text", "belongs_to_user" }; private JSONObject dataSourceJSON; private User sender = null; private Date createDate = null; private long dateMillis = 0; private String text = null; private long belongs_to_user; private long id; protected TwitterRequest deleteRequest; public DirectMessage(Cursor query) { super(); setId(query.getLong(0)); setSenderId(query.getLong(1)); setDateMillis(query.getLong(2) * 1000); setText(query.getString(3)); setBelongsToUser(query.getLong(4)); } protected void setSenderId(long sender_id) { ArrayList<User> searchUser = User.select("id = ?", new String[] { String.valueOf(sender_id) }, null, null, null, "1"); if (searchUser.size() > 0) sender = searchUser.get(0); } public DirectMessage(JSONObject jsonObject) { super(); dataSourceJSON = jsonObject; } public User getSender() { if (sender != null) return sender; try { return sender = new User(dataSourceJSON.getJSONObject("sender")); } catch (JSONException e) { return null; } } public void setSender(User sender) { this.sender = sender; } public long getId() { if (id != 0) return id; try { return id = dataSourceJSON.getLong("id"); } catch (JSONException e) { return 0; } } public void setId(long id) { this.id = id; } public String getText() { if (text != null) return text; try { setText(dataSourceJSON.getString("text")); return text; } catch (Exception e) { return ""; } } public void setText(String text) { this.text = sanitize(text); } public long getBelongsToUser() { return belongs_to_user; } public void setBelongsToUser(long belongsToUser) { belongs_to_user = belongsToUser; } public Date getDate() { try { if (createDate != null) return createDate; SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM d hh:mm:ss Z yyyy"); return createDate = sdf.parse(dataSourceJSON.getString("created_at")); } catch (Exception e) { return null; } } public void setDateMillis(long date) { dateMillis = date; } public long getDateMillis() { if (dateMillis == 0) { Date date = this.getDate(); if (date == null) return (long)0; dateMillis = date.getTime(); } return dateMillis; } @Override protected ContentValues getValues() { ContentValues fields = new ContentValues(); fields.put(columns[0], getId()); fields.put(columns[1], getSender().getId()); fields.put(columns[2], getDateMillis() / 1000); fields.put(columns[3], getText()); fields.put(columns[4], getBelongsToUser()); return fields; } @Override public String getUsername() { return getSender().getScreenName(); } @Override public String getDisplayDate() { return calculateElapsed(getDateMillis()); } @SuppressWarnings("unchecked") static public ArrayList<DirectMessage> select(String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit) { return (ArrayList<DirectMessage>)Model.select(DirectMessage.class, columns, selection, selectionArgs, groupBy, having, orderBy, limit); } public void deleteFromServer() throws Exception { TwitterAccount account = Twitter.getInstance().getDefaultAccount(); account.addRequestObserver(this); ArrayList<NameValuePair> nvps = new ArrayList<NameValuePair>(); nvps.add(new BasicNameValuePair("id", String.valueOf(getId()))); deleteRequest = account.requestUrl(Options.DELETE_DIRECT_MESSAGE, nvps, TwitterRequest.METHOD_POST); com.tuit.ar.models.timeline.DirectMessages timeline = com.tuit.ar.models.timeline.DirectMessages.getInstance(Twitter.getInstance().getDefaultAccount()); timeline.startedUpdate(); } public void requestHasFinished(TwitterRequest request) { if (request == deleteRequest) { com.tuit.ar.models.timeline.DirectMessages timeline = com.tuit.ar.models.timeline.DirectMessages.getInstance(Twitter.getInstance().getDefaultAccount()); timeline.deleteTweet(this); timeline.finishedUpdate(); this.delete(); TwitterAccount account = Twitter.getInstance().getDefaultAccount(); account.removeRequestObserver(this); } } public int delete() { return db.delete("directmessage", "id = ? AND belongs_to_user = ?", new String[] {String.valueOf(getId()), String.valueOf(getBelongsToUser())}); } public void requestHasStarted(TwitterRequest request) { } public long replace() { try { User user = getSender(); user.setBelongsToUser(getBelongsToUser()); user.replace(); } catch (SQLiteException e) {} return super.replace(); } @Override public String getAvatarUrl() { try { return getSender().getProfileImageUrl(); } catch (Exception e) { return null; } } }