mirror of https://github.com/ThmmyNoLife/mTHMMY
Apostolos Fanakis
8 years ago
6 changed files with 302 additions and 269 deletions
@ -0,0 +1,263 @@ |
|||
package gr.thmmy.mthmmy.activities.topic; |
|||
|
|||
import android.util.Log; |
|||
|
|||
import org.jsoup.Jsoup; |
|||
import org.jsoup.nodes.Document; |
|||
|
|||
import java.io.IOException; |
|||
import java.util.HashMap; |
|||
import java.util.Map; |
|||
import java.util.regex.Matcher; |
|||
|
|||
import okhttp3.Response; |
|||
|
|||
class Posting { |
|||
enum REPLY_STATUS { |
|||
SUCCESSFUL, NO_SUBJECT, EMPTY_BODY, NEW_REPLY_WHILE_POSTING, NOT_FOUND, SESSION_ENDED, OTHER_ERROR |
|||
} |
|||
|
|||
static REPLY_STATUS replyStatus(Response response) throws IOException { |
|||
if (response.code() == 404) return REPLY_STATUS.NOT_FOUND; |
|||
if (response.code() < 200 || response.code() >= 400) return REPLY_STATUS.OTHER_ERROR; |
|||
String finalUrl = response.request().url().toString(); |
|||
if (finalUrl.contains("action=post")) { |
|||
Document postErrorPage = Jsoup.parse(response.body().string()); |
|||
String[] errors = postErrorPage.select("tr[id=errors] div[id=error_list]").first() |
|||
.toString().split("<br>"); |
|||
for (int i = 0; i < errors.length; ++i) { //TODO test
|
|||
Log.d("TAG", String.valueOf(i)); |
|||
Log.d("TAG", errors[i]); |
|||
} |
|||
for (String error : errors) { |
|||
if (error.contains("Your session timed out while posting") || |
|||
error.contains("Υπερβήκατε τον μέγιστο χρόνο σύνδεσης κατά την αποστολή")) |
|||
return REPLY_STATUS.SESSION_ENDED; |
|||
if (error.contains("No subject was filled in") |
|||
|| error.contains("Δεν δόθηκε τίτλος")) |
|||
return REPLY_STATUS.NO_SUBJECT; |
|||
if (error.contains("The message body was left empty") |
|||
|| error.contains("Δεν δόθηκε κείμενο για το μήνυμα")) |
|||
return REPLY_STATUS.EMPTY_BODY; |
|||
} |
|||
return REPLY_STATUS.NEW_REPLY_WHILE_POSTING; |
|||
} |
|||
return REPLY_STATUS.SUCCESSFUL; |
|||
} |
|||
|
|||
static String htmlToBBcode(String html) { |
|||
Map<String, String> bbMap = new HashMap<>(); |
|||
Map<String, String> smileysMap1 = new HashMap<>(); |
|||
Map<String, String> smileysMap2 = new HashMap<>(); |
|||
smileysMap1.put("Smiley", ":)"); |
|||
smileysMap1.put("Wink", ";)"); |
|||
smileysMap1.put("Cheesy", ":D"); |
|||
smileysMap1.put("Grin", ";D"); |
|||
smileysMap1.put("Angry", ">:("); |
|||
smileysMap1.put("Sad", ":("); |
|||
smileysMap1.put("Shocked", ":o"); |
|||
smileysMap1.put("Cool", "8))"); |
|||
smileysMap1.put("Huh", ":???:"); |
|||
smileysMap1.put("Roll Eyes", "::)"); |
|||
smileysMap1.put("Tongue", ":P"); |
|||
smileysMap1.put("Embarrassed", ":-["); |
|||
smileysMap1.put("Lips Sealed", ":-X"); |
|||
smileysMap1.put("Kiss", ":-*"); |
|||
smileysMap1.put("Cry", ":'("); |
|||
smileysMap1.put("heart", "<3"); |
|||
smileysMap1.put("kleidaria", "^locked^"); |
|||
smileysMap1.put("roll_over", "^rollover^"); |
|||
smileysMap1.put("redface", "^redface^"); |
|||
smileysMap1.put("confused", "^confused^"); |
|||
smileysMap1.put("innocent", "^innocent^"); |
|||
smileysMap1.put("sleep", "^sleep^"); |
|||
smileysMap1.put("lips_sealed", "^sealed^"); |
|||
smileysMap1.put("cool", "^cool^"); |
|||
smileysMap1.put("crazy", "^crazy^"); |
|||
smileysMap1.put("mad", "^mad^"); |
|||
smileysMap1.put("wav", "^wav^"); |
|||
smileysMap1.put("BinkyBaby", "^binkybaby^"); |
|||
smileysMap1.put("DontKnow", "^dontknow^"); |
|||
smileysMap1.put("angry4", ":angry4:"); |
|||
smileysMap1.put("angryAndHot", "^angryhot^"); |
|||
smileysMap1.put("angry", "^angry^"); |
|||
smileysMap1.put("bang_head", "^banghead^"); |
|||
smileysMap1.put("CryBaby", "^crybaby^"); |
|||
smileysMap1.put("Hello", "^hello^"); |
|||
smileysMap1.put("jerk", "^jerk^"); |
|||
smileysMap1.put("NoNo", "^nono^"); |
|||
smileysMap1.put("NotWorthy", "^notworthy^"); |
|||
smileysMap1.put("Off-topic", "^off-topic^"); |
|||
smileysMap1.put("Puke", "^puke^"); |
|||
smileysMap1.put("Shout", "^shout^"); |
|||
smileysMap1.put("Slurp", "^slurp^"); |
|||
smileysMap1.put("SuperConfused", "^superconfused^"); |
|||
smileysMap1.put("SuperInnocent", "^superinnocent^"); |
|||
smileysMap1.put("CellPhone", "^cellPhone^"); |
|||
smileysMap1.put("Idiot", "^idiot^"); |
|||
smileysMap1.put("Knuppel", "^knuppel^"); |
|||
smileysMap1.put("TickedOff", "^tickedOff^"); |
|||
smileysMap1.put("Peace", "^peace^"); |
|||
smileysMap1.put("Suspicious", "^suspicious^"); |
|||
smileysMap1.put("Caffine", "^caffine^"); |
|||
smileysMap1.put("argue", "^argue^"); |
|||
smileysMap1.put("banned2", "^banned2^"); |
|||
smileysMap1.put("banned", "^banned^"); |
|||
smileysMap1.put("bath", "^bath^"); |
|||
smileysMap1.put("beg", "^beg^"); |
|||
smileysMap1.put("bluescreen", "^bluescreen^"); |
|||
smileysMap1.put("boil", "^boil^"); |
|||
smileysMap1.put("bye", "^bye^"); |
|||
smileysMap1.put("callmerip", "^callmerip^"); |
|||
smileysMap1.put("carnaval", "^carnaval^"); |
|||
smileysMap1.put("clap", "^clap^"); |
|||
smileysMap1.put("coffepot", "^coffepot^"); |
|||
smileysMap1.put("crap", "^crap^"); |
|||
smileysMap1.put("curses", "^curses^"); |
|||
smileysMap1.put("funny", "^funny^"); |
|||
smileysMap1.put("guitar", "^guitar^"); |
|||
smileysMap1.put("kissy", "^kissy^"); |
|||
smileysMap1.put("band", "^band^"); |
|||
smileysMap1.put("ivres", "^ivres^"); |
|||
smileysMap1.put("kaloe", "^kaloe^"); |
|||
smileysMap1.put("kremala", "^kremala^"); |
|||
smileysMap1.put("moon", "^moon^"); |
|||
smileysMap1.put("mopping", "^mopping^"); |
|||
smileysMap1.put("mountza", "^mountza^"); |
|||
smileysMap1.put("pcsleep", "^pcsleep^"); |
|||
smileysMap1.put("pinokio", "^pinokio^"); |
|||
smileysMap1.put("poke", "^poke^"); |
|||
smileysMap1.put("seestars", "^seestars^"); |
|||
smileysMap1.put("sfyri", "^sfyri^"); |
|||
smileysMap1.put("spam", "^spam^"); |
|||
smileysMap1.put("super", "^super^"); |
|||
smileysMap1.put("tafos", "^tafos^"); |
|||
smileysMap1.put("tomato", "^tomato^"); |
|||
smileysMap1.put("ytold", "^ytold^"); |
|||
smileysMap1.put("beer", "^beer^"); |
|||
smileysMap1.put("ο fritz!!!", "^fritz^"); |
|||
smileysMap1.put("o Wade!!!", "^wade^"); |
|||
smileysMap1.put("bonjour", "^hat^"); |
|||
smileysMap1.put("bonjour2", "^miss^"); |
|||
smileysMap1.put("question", "^que^"); |
|||
smileysMap1.put("shifty", "^shifty^"); |
|||
smileysMap1.put("shy", "^shy^"); |
|||
smileysMap1.put("music_listenning", "^music_listen^"); |
|||
smileysMap1.put("bag_face", "^bagface^"); |
|||
smileysMap1.put("rotation", "^rotate^"); |
|||
smileysMap1.put("love", "^love^"); |
|||
smileysMap1.put("speech", "^speech^"); |
|||
smileysMap1.put("shocked", "^shocked^"); |
|||
smileysMap1.put("extremely_shocked", "^ex_shocked^"); |
|||
smileysMap1.put("smurf", "^smurf^"); |
|||
smileysMap1.put("monster", "^monster^"); |
|||
smileysMap1.put("pig", "^pig^"); |
|||
smileysMap1.put("lol", "^lol^"); |
|||
|
|||
smileysMap2.put("Police", "^Police^"); |
|||
smileysMap2.put("foyska", "^fouska^"); |
|||
smileysMap2.put("nista", "^nysta^"); |
|||
smileysMap2.put("10_7_3", "^sfinaki^"); |
|||
smileysMap2.put("yu", "^yue^"); |
|||
smileysMap2.put("a-eatpaper", "^eatpaper^"); |
|||
smileysMap2.put("lypi", "^lypi^"); |
|||
smileysMap2.put("megashok1wq", "^aytoxeir^"); |
|||
smileysMap2.put("victory", "^victory^"); |
|||
smileysMap2.put("filarakia", "^filarakia^"); |
|||
smileysMap2.put("rofl", "^rolfmao^"); |
|||
smileysMap2.put("locked", "^lock^"); |
|||
smileysMap2.put("facepalm", "^facepalm^"); |
|||
|
|||
//html stuff on the beginning
|
|||
bbMap.put("<link rel=.+\">\n ", ""); |
|||
//quotes and code headers
|
|||
bbMap.put("\n\\s+?<div class=\"quoteheader\">\n (.+?)\n </div>", ""); |
|||
bbMap.put("\n\\s+?<div class=\"codeheader\">\n (.+?)\n </div>", ""); |
|||
bbMap.put("\n\\s+?<div class=\"quote\">\n (.+?)\n </div>", ""); |
|||
bbMap.put("<br>", "\n"); |
|||
//bold
|
|||
bbMap.put("\n\\s+?<b>(.+?)</b>", "\\[b\\]$1\\[/b\\]"); |
|||
//italics
|
|||
bbMap.put("\n\\s+?<i>(.+?)</i>", "\\[i\\]$1\\[/i\\]"); |
|||
//underline
|
|||
bbMap.put("\n\\s+?<span style=\"text-decoration: underline;\">(.+?)</span>", "\\[u\\]$1\\[/u\\]"); |
|||
//deleted
|
|||
bbMap.put("\n\\s+?<del>(.+?)</del>", "\\[s\\]$1\\[/s\\]"); |
|||
//text color
|
|||
bbMap.put("\n\\s+?<span style=\"color: (.+?);\">(.+?)</span>", "\\[color=$1\\]$2\\[/color\\]"); |
|||
//glow
|
|||
bbMap.put("\n\\s+?<span style=\"background-color: (.+?);\">(.+?)</span>", "\\[glow=$1,2,300\\]$2\\[/glow\\]"); |
|||
//shadow
|
|||
bbMap.put("\n\\s+?<span style=\"text-shadow: (.+?) (.+?)\">(.+?)</span>", "\\[shadow=$1,$2\\]$3\\[/shadow\\]"); |
|||
//running text
|
|||
bbMap.put("\\s+?<marquee>\n (.+?)\n </marquee>", "\\[move\\]$1\\[/move\\]"); |
|||
//alignment
|
|||
bbMap.put("\n\\s+?<div align=\"center\">\n (.+?)\n </div>", "\\[center\\]$1\\[/center\\]"); |
|||
bbMap.put("\n\\s+?<div style=\"text-align: (.+?);\">\n (.+?)\n </div>", "\\[$1\\]$2\\[/$1\\]"); |
|||
//preformated
|
|||
bbMap.put("\n\\s+?<pre>(.+?)</pre>", "\\[pre\\]$1\\[/pre\\]"); |
|||
//horizontal rule
|
|||
bbMap.put("\n\\s+?<hr>", "\\[hr\\]"); |
|||
//resize
|
|||
bbMap.put("\n\\s+?<span style=\"font-size: (.+?);(.+?)\">(.+?)</span>", "\\[size=$1\\]$3\\[/size\\]"); |
|||
//font
|
|||
bbMap.put("\n\\s+?<span style=\"font-family: (.+?);\">(.+?)</span>", "\\[font=$1\\]$2\\[/font\\]"); |
|||
//lists
|
|||
bbMap.put("\\s+<li>(.+?)</li>", "\\[li\\]$1\\[/li\\]"); |
|||
bbMap.put("\n\\s+<ul style=\"margin-top: 0; margin-bottom: 0;\">([\\S\\s]+?)\n\\s+</ul>", |
|||
"\\[list\\]\n$1\n\\[/list\\]"); |
|||
//latex code
|
|||
bbMap.put("\n\\s+?<img src=\".+?eq=(.+?)\" .+?\">", "\\[tex\\]$1\\[/tex\\]"); |
|||
//code
|
|||
bbMap.put("\n\\s+?<div class=\"code\">\n (.+?)\n </div>", "\\[code\\]$1\\[/code\\]"); |
|||
//teletype
|
|||
bbMap.put("\n\\s+?<tt>(.+?)</tt>", "\\[tt\\]$1\\[/tt\\]"); |
|||
//superscript/subscript
|
|||
bbMap.put("\n\\s+?<sub>(.+?)</sub>", "\\[sub\\]$1\\[/sub\\]"); |
|||
bbMap.put("\n\\s+?<sup>(.+?)</sup>", "\\[sup\\]$1\\[/sup\\]"); |
|||
//tables
|
|||
bbMap.put("\\s+?<td.+?>([\\S\\s]+?)</td>", "\\[td\\]$1\\[/td\\]"); |
|||
bbMap.put("<tr>([\\S\\s]+?)\n </tr>", "\\[tr\\]$1\\[/tr\\]"); |
|||
bbMap.put("\n\\s+?<table style=\"(.+?)\">\n <tbody>\n ([\\S\\s]+?)\n </tbody>\n </table>" |
|||
, "\\[table\\]$2\\[/table\\]"); |
|||
//videos
|
|||
bbMap.put("\n\\s+?<div class=\"yt\"><a href=\".+?watch\\?v=(.+?)\"((.|\\n)*?)\\/div>\n", |
|||
"[youtube]https://www.youtube.com/watch?v=$1[/youtube]"); |
|||
//ftp
|
|||
bbMap.put("<a href=\"ftp:(.+?)\" .+?>([\\S\\s]+?)</a>", "\\[fpt=ftp:$1\\]$2\\[/ftp\\]"); |
|||
//mailto
|
|||
bbMap.put("\n\\s+?<a href=\"mailto:(.+?)\">([\\S\\s]+?)</a>", "\\[email\\]$2\\[/email\\]"); |
|||
//links
|
|||
bbMap.put("\n\\s+?<a href=\"(.+?)\" .+?>([\\S\\s]+?)</a>", "\\[url=$1\\]$2\\[/url\\]"); |
|||
//smileys
|
|||
for (Map.Entry entry : smileysMap1.entrySet()) { |
|||
bbMap.put("\n <img src=\"(.+?)//www.thmmy.gr/smf/Smileys/default_dither/(.+?) alt=\"" |
|||
+ entry.getKey().toString() + "\" .+?\">", entry.getValue().toString()); |
|||
} |
|||
for (Map.Entry entry : smileysMap2.entrySet()) { //Those that have empty alt tag
|
|||
bbMap.put("\n <img src=\"(.+?)//www.thmmy.gr/smf/Smileys/default_dither/" |
|||
+ entry.getKey().toString() + ".gif\" .+?\">", entry.getValue().toString()); |
|||
} |
|||
|
|||
bbMap.put("\n <img src=\"(.+?)//www.thmmy.gr/smf/Smileys/default_dither/undecided.gif\" alt=\"Undecided\" border=\"0\">" |
|||
, Matcher.quoteReplacement(":-\\")); |
|||
|
|||
//html stuff on the end
|
|||
bbMap.put("\n</div>", ""); |
|||
|
|||
for (Map.Entry entry : bbMap.entrySet()) { |
|||
html = html.replaceAll(entry.getKey().toString(), entry.getValue().toString()); |
|||
} |
|||
|
|||
//img need to be done last or it messes up everything else
|
|||
html = html.replaceAll("\\s+<img src=\"(.+?)\" .+? width=\"(.+?)\" .+? height=\"(.+?)\" .+?>", |
|||
"\\[img width=$2 height=$3\\]$1\\[/img\\]"); |
|||
html = html.replaceAll("\\s+<img src=\"(.+?)\" .+? height=\"(.+?)\" .+? width=\"(.+?)\" .+?>", |
|||
"\\[img height=$2 width=$3\\]$1\\[/img\\]"); |
|||
html = html.replaceAll("\\s+<img src=\"(.+?)\" .+? width=\"(.+?)\" .+?>", "\\[img width=$2\\]$1\\[/img\\]"); |
|||
html = html.replaceAll("\\s+<img src=\"(.+?)\" .+? height=\"(.+?)\" .+?>", "\\[img height=$2\\]$1\\[/img\\]"); |
|||
html = html.replaceAll("\\s+<img src=\"(.+?)\".+?>", "\\[img\\]$1\\[/img\\]"); |
|||
|
|||
return html; |
|||
} |
|||
} |
@ -1,44 +0,0 @@ |
|||
package gr.thmmy.mthmmy.activities.topic; |
|||
|
|||
import android.util.Log; |
|||
|
|||
import org.jsoup.Jsoup; |
|||
import org.jsoup.nodes.Document; |
|||
|
|||
import java.io.IOException; |
|||
|
|||
import okhttp3.Response; |
|||
|
|||
class ReplyParser { |
|||
enum REPLY_STATUS { |
|||
SUCCESSFUL, NO_SUBJECT, EMPTY_BODY, NEW_REPLY_WHILE_POSTING, NOT_FOUND, SESSION_ENDED, OTHER_ERROR |
|||
} |
|||
|
|||
static REPLY_STATUS replyStatus(Response response) throws IOException { |
|||
if (response.code() == 404) return REPLY_STATUS.NOT_FOUND; |
|||
if (response.code() < 200 || response.code() >= 400) return REPLY_STATUS.OTHER_ERROR; |
|||
String finalUrl = response.request().url().toString(); |
|||
if (finalUrl.contains("action=post")) { |
|||
Document postErrorPage = Jsoup.parse(response.body().string()); |
|||
String[] errors = postErrorPage.select("tr[id=errors] div[id=error_list]").first() |
|||
.toString().split("<br>"); |
|||
for (int i = 0; i < errors.length; ++i) { //TODO test
|
|||
Log.d("TAG", String.valueOf(i)); |
|||
Log.d("TAG", errors[i]); |
|||
} |
|||
for (String error : errors) { |
|||
if (error.contains("Your session timed out while posting") || |
|||
error.contains("Υπερβήκατε τον μέγιστο χρόνο σύνδεσης κατά την αποστολή")) |
|||
return REPLY_STATUS.SESSION_ENDED; |
|||
if (error.contains("No subject was filled in") |
|||
|| error.contains("Δεν δόθηκε τίτλος")) |
|||
return REPLY_STATUS.NO_SUBJECT; |
|||
if (error.contains("The message body was left empty") |
|||
|| error.contains("Δεν δόθηκε κείμενο για το μήνυμα")) |
|||
return REPLY_STATUS.EMPTY_BODY; |
|||
} |
|||
return REPLY_STATUS.NEW_REPLY_WHILE_POSTING; |
|||
} |
|||
return REPLY_STATUS.SUCCESSFUL; |
|||
} |
|||
} |
Loading…
Reference in new issue