package org.softeg.slartus.forpdaplus.classes; import android.app.Activity; import android.content.Context; import android.content.SharedPreferences; import android.os.Handler; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.widget.EditText; import android.widget.Toast; import com.afollestad.materialdialogs.MaterialDialog; import org.softeg.slartus.forpdaplus.App; import org.softeg.slartus.forpdaplus.Client; import org.softeg.slartus.forpdaplus.R; import org.softeg.slartus.forpdaplus.common.AppLog; import org.softeg.slartus.forpdaplus.common.HtmlUtils; import org.softeg.slartus.forpdaplus.prefs.HtmlPreferences; import java.io.IOException; import java.util.Hashtable; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * Created by IntelliJ IDEA. * User: Admin * Date: 21.09.11 * Time: 0:10 * To change this template use File | Settings | File Templates. */ public class Post { private Boolean m_IsCurator = false; private String m_Id = "0"; private String m_Date = "09.03.1983"; private String m_UserNick = "unknown"; private String m_UserGroup = "unknown"; private String m_UserId = "0"; private String m_UserState; private String m_UserReputation = "0"; private String m_Body = ""; private Boolean m_CanEdit = false; private Boolean m_CanDelete = false; private String m_Number = "0"; private Boolean m_CanPlusRep = false; private Boolean m_CanMinusRep = false; private String avatarFileName = ""; public Post(String id, String date, String author, String body) { m_Id = id; m_Date = date; m_UserNick = author; m_Body = body; } public Post(String id, String date, String number) { m_Id = id; m_Date = date; m_Number = number; } public String getDate() { return m_Date; } public void setAuthor(String author) { m_UserNick = author; } public static String modifyBody(String value, Hashtable<String, String> emoticsDict) { return HtmlPreferences.modifyBody(value, emoticsDict); } public void setBody(String value) { m_Body = value; } public String getNumber() { return m_Number; } public String getBody() { return m_Body; } public static String getQuote(String postId, String date, String userNick, String text) { return "[quote name='" + userNick + "' date='" + date + "' post=" + postId + "]" + text + "[/quote]"; } public String getId() { return m_Id; } public static String getLink(String topicId, String postId) { return "http://4pda.ru/forum/index.php?showtopic=" + topicId + "&view=findpost&p=" + postId; } public void setUserId(String value) { m_UserId = value; } public String getUserId() { return m_UserId; } public void setUserState(String value) { m_UserState = value; } public Boolean getUserState() { return m_UserState != null && m_UserState.equals("green"); } public void setUserGroup(String value) { m_UserGroup = value; } public String getUserGroup() { return m_UserGroup; } public void setUserReputation(String value) { m_UserReputation = value; } @Override public String toString() { return m_Body; } public String getNick() { return m_UserNick; } private String m_NickParam = null; public String getNickParam() { if (m_NickParam == null && m_UserNick != null) { m_NickParam = HtmlUtils.modifyHtmlQuote(m_UserNick) .replace("'", "\\'").replace("\"", """); } return m_NickParam; } public String getUserReputation() { return m_UserReputation; } public void setCanEdit(boolean value) { m_CanEdit = value; } public Boolean getCanEdit() { return m_CanEdit; } public void setCanDelete(boolean value) { m_CanDelete = value; } public Boolean getCanDelete() { return m_CanDelete; } public static void delete(String postId, String forumId, String themeId, String authKey) throws IOException { Client.getInstance().deletePost(forumId, themeId, postId, authKey); } public void setCanPlusRep(boolean value) { m_CanPlusRep = value; } public Boolean getCanPlusRep() { return m_CanPlusRep; } public void setCanMinusRep(boolean value) { m_CanMinusRep = value; } public Boolean getCanMinusRep() { return m_CanMinusRep; } public static void claim( final Context context, final android.os.Handler handler, final String themeId, final String postId) { final SharedPreferences prefs = App.getInstance().getPreferences(); if(prefs.getBoolean("showClaimWarn",true)){ new MaterialDialog.Builder(context) .title(R.string.attention) .content(R.string.ClaimDescription) .positiveText(R.string.understand) .callback(new MaterialDialog.ButtonCallback() { @Override public void onPositive(MaterialDialog dialog) { prefs.edit().putBoolean("showClaimWarn",false).apply(); showClaimDialog(context, handler,themeId,postId); } }) .show(); }else { showClaimDialog(context, handler,themeId,postId); } } public static void showClaimDialog( final Context context, final android.os.Handler handler, final String themeId, final String postId){ final String[] text = {""}; LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); View layout = inflater.inflate(R.layout.claim, null); assert layout != null; final EditText message_edit = (EditText) layout.findViewById(R.id.message_edit); new MaterialDialog.Builder(context) .title(R.string.claim_title) .customView(layout,true) .positiveText(R.string.send) .callback(new MaterialDialog.ButtonCallback() { @Override public void onPositive(MaterialDialog dialog) { Toast.makeText(context, R.string.claim_sent, Toast.LENGTH_SHORT).show(); new Thread(new Runnable() { public void run() { Exception ex = null; String res = null; try { res = Client.getInstance().claim(themeId, postId, message_edit.getText().toString()); } catch (IOException e) { ex = e; } final Exception finalEx = ex; final String finalRes = res; handler.post(new Runnable() { public void run() { try { if (finalEx != null) { Toast.makeText(context, R.string.error_request, Toast.LENGTH_LONG).show(); AppLog.e(context, finalEx); } else { Toast.makeText(context, finalRes, Toast.LENGTH_LONG).show(); } } catch (Exception ex) { AppLog.e(context, ex); } } }); } }).start(); } }) .negativeText(R.string.cancel) .show(); } public static void plusOne(Activity themeActivity, Handler handler, String postId) { changePostReputation(themeActivity, handler, postId, "1"); } public static void minusOne(Activity themeActivity, Handler handler, String postId) { changePostReputation(themeActivity, handler, postId, "-1"); } private static void changePostReputation(final Activity themeActivity, final Handler handler, final String postId, final String direction) { Toast.makeText(themeActivity, R.string.vote_request_sent, Toast.LENGTH_SHORT).show(); // http://s.4pda.ru/forum/jscripts/karma3.js new Thread(new Runnable() { public void run() { Throwable ex = null; String message = null; try { String res = Client.getInstance().performGet("http://4pda.ru/forum/zka.php?i=" + postId + "&v=" + direction, true, false); Matcher m = Pattern.compile("ok:\\s*?((?:\\+|\\-)?\\d+)").matcher(res); if (m.find()) { int code = Integer.parseInt(m.group(1)); switch (code) { case 0: message = themeActivity.getString(R.string.vote_error_already_voted); break; case 1: message = themeActivity.getString(R.string.vote_post_increased); break; case -1: message = themeActivity.getString(R.string.vote_post_decreased); break; default: message = themeActivity.getString(R.string.vote_change_error)+": " + res; } } else message = themeActivity.getString(R.string.vote_change_error)+": " + res; } catch (Throwable e) { ex = e; } final Throwable finalEx = ex; final String finalMessage = message; handler.post(new Runnable() { public void run() { try { if (finalEx != null) { Toast.makeText(themeActivity, themeActivity.getString(R.string.vote_change_error) , Toast.LENGTH_LONG).show(); AppLog.e(themeActivity, finalEx); } else { Toast.makeText(themeActivity, finalMessage, Toast.LENGTH_LONG).show(); } } catch (Exception ex) { AppLog.e(themeActivity, ex); } } }); } }).start(); } public String getAvatarFileName() { return avatarFileName; } public void setAvatarFileName(String avatarFileName) { if (TextUtils.isEmpty(avatarFileName)) return; String path = "http://s.4pda.to/forum/uploads/"; if (avatarFileName.contains("/")) if(!Pattern.compile("\\d+\\/").matcher(avatarFileName).find()) path = "http://s.4pda.to/forum/style_avatars/"; this.avatarFileName = path + avatarFileName; } public void setCurator() { m_IsCurator=true; } public Boolean isCurator(){ return m_IsCurator; } }