Skip to content

Commit

Permalink
#18 Added parser for review list
Browse files Browse the repository at this point in the history
  • Loading branch information
MewX committed Jun 12, 2018
1 parent bcf6ab2 commit 093723e
Show file tree
Hide file tree
Showing 8 changed files with 187 additions and 42 deletions.
8 changes: 8 additions & 0 deletions studio-android/LightNovelLibrary/app/build.gradle
Expand Up @@ -9,16 +9,19 @@ android {
targetSdkVersion 27
versionCode 35
versionName "1.4"
testInstrumentationRunner 'android.support.test.runner.AndroidJUnitRunner'
}
buildTypes {
debug {
debuggable true
minifyEnabled true
testProguardFile 'proguard-rules-tests.pro'
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
release {
debuggable false
minifyEnabled true
testProguardFile 'proguard-rules-tests.pro'
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
Expand Down Expand Up @@ -78,6 +81,11 @@ dependencies {
implementation 'com.umeng.sdk:common:1.5.0'
implementation 'com.umeng.sdk:analytics:7.5.0'

androidTestImplementation 'com.android.support:support-annotations:27.1.1'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test:rules:1.0.2'
androidTestImplementation 'junit:junit:4.12'

testImplementation 'junit:junit:4.12'
testImplementation 'org.mockito:mockito-all:1.10.19'
testImplementation 'org.powermock:powermock-module-junit4:1.7.4'
Expand Down
15 changes: 15 additions & 0 deletions studio-android/LightNovelLibrary/app/proguard-rules-tests.pro
@@ -0,0 +1,15 @@
# Proguard rules that are applied to your test apk/code.
-ignorewarnings

-keepattributes *Annotation*

-dontnote junit.framework.**
-dontnote junit.runner.**

-dontwarn android.test.**
-dontwarn android.support.test.**
-dontwarn org.junit.**
-dontwarn org.hamcrest.**
-dontwarn com.squareup.javawriter.JavaWriter
# Uncomment this if you use Mockito
-dontwarn org.mockito.**
2 changes: 1 addition & 1 deletion studio-android/LightNovelLibrary/app/proguard-rules.pro
Expand Up @@ -17,7 +17,7 @@
#}

# general
-target 1.7
-target 1.8
-optimizationpasses 5
#-dontoptimize
-dontusemixedcaseclassnames
Expand Down
@@ -0,0 +1,66 @@
package org.mewx.wenku8.global.api;

import android.support.test.filters.SmallTest;

import org.junit.Assert;
import org.junit.Test;

import java.util.GregorianCalendar;

@SmallTest
public class Wenku8ParserTest {
private final String REVIEW_LIST_XML = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" +
"<metadata>\n" +
"<page num='12'/>\n" +
"\n" +
"<item rid='79800' posttime='20130525171631' replies='1' replytime='20130528184916'>\n" +
"<user uid='81669'><![CDATA[老衲0轻音]]></user>\n" +
"<content><![CDATA[前排……]]></content>\n" +
"</item>\n" +
"\n" +
"<item rid='79826' posttime='20130525232002' replies='4' replytime='20130527234259'>\n" +
"<user uid='34924'><![CDATA[冒险奏鸣]]></user>\n" +
"<content><![CDATA[有种神曲奏界的既视感]]></content>\n" +
"</item>\n" +
"\n" +
"</metadata>";

// TODO: more tests

@Test
public void testParseReviewList() {
ReviewList reviewList = new ReviewList();
Wenku8Parser.parseReviewList(reviewList, REVIEW_LIST_XML);

Assert.assertEquals(reviewList.getTotalPage(), 12);
Assert.assertEquals(reviewList.getCurrentPage(), 1);
Assert.assertEquals(reviewList.getList().size(), 2);
ReviewList.Review review = reviewList.getList().get(0);
Assert.assertEquals(review.getRid(), 79800);
Assert.assertEquals(review.getPostTime().getTime(),
new GregorianCalendar(2013, 5, 25, 17, 16, 31).getTime().getTime());
Assert.assertEquals(review.getNoReplies(), 1);
Assert.assertEquals(review.getLastReplyTime().getTime(),
new GregorianCalendar(2013, 5, 28, 18, 49, 16).getTime().getTime());
Assert.assertEquals(review.getUid(), 81669);
Assert.assertEquals(review.getUserName(), "老衲0轻音");
Assert.assertEquals(review.getTitle(), "前排……");

review = reviewList.getList().get(1);
Assert.assertEquals(review.getRid(), 79826);
Assert.assertEquals(review.getPostTime().getTime(),
new GregorianCalendar(2013, 5, 25, 23, 20, 2).getTime().getTime());
Assert.assertEquals(review.getNoReplies(), 4);
Assert.assertEquals(review.getLastReplyTime().getTime(),
new GregorianCalendar(2013, 5, 27, 23, 42, 59).getTime().getTime());
Assert.assertEquals(review.getUid(), 34924);
Assert.assertEquals(review.getUserName(), "冒险奏鸣");
Assert.assertEquals(review.getTitle(), "有种神曲奏界的既视感");
}


@Test
public void testParseReviewListPageTwo() {
// TODO
}
}
Expand Up @@ -619,7 +619,7 @@ public void onPositive(MaterialDialog dialog) {
}
} else if (menuItem.getItemId() == R.id.action_go_to_forum) {
// TODO:
Toast.makeText(this, "test", Toast.LENGTH_SHORT).show();
Toast.makeText(this, "下个版本这里就能点进评论区啦", Toast.LENGTH_SHORT).show();
}
return super.onOptionsItemSelected(menuItem);
}
Expand Down
@@ -1,5 +1,7 @@
package org.mewx.wenku8.global.api;

import android.support.annotation.NonNull;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
Expand All @@ -8,17 +10,19 @@ public class ReviewList {

public static class Review {
private int rid; // review id
private Date postTime;
@NonNull private Date postTime;
private int noReplies;
private Date lastReplyTime;
@NonNull private Date lastReplyTime;
@NonNull private String userName;
private int uid; // post user
private String title; // review title
@NonNull private String title; // review title

public Review(int rid, Date postTime, int noReplies, Date lastReplyTime, int uid, String title) {
public Review(int rid, @NonNull Date postTime, int noReplies, @NonNull Date lastReplyTime, @NonNull String userName, int uid, @NonNull String title) {
this.rid = rid;
this.postTime = postTime;
this.noReplies = noReplies;
this.lastReplyTime = lastReplyTime;
this.userName = userName;
this.uid = uid;
this.title = title;
}
Expand All @@ -31,11 +35,12 @@ public void setRid(int rid) {
this.rid = rid;
}

@NonNull
public Date getPostTime() {
return postTime;
}

public void setPostTime(Date postTime) {
public void setPostTime(@NonNull Date postTime) {
this.postTime = postTime;
}

Expand All @@ -47,11 +52,12 @@ public void setNoReplies(int noReplies) {
this.noReplies = noReplies;
}

@NonNull
public Date getLastReplyTime() {
return lastReplyTime;
}

public void setLastReplyTime(Date lastReplyTime) {
public void setLastReplyTime(@NonNull Date lastReplyTime) {
this.lastReplyTime = lastReplyTime;
}

Expand All @@ -63,18 +69,28 @@ public void setUid(int uid) {
this.uid = uid;
}

@NonNull
public String getTitle() {
return title;
}

public void setTitle(String title) {
public void setTitle(@NonNull String title) {
this.title = title;
}

@NonNull
public String getUserName() {
return userName;
}

public void setUserName(@NonNull String userName) {
this.userName = userName;
}
}

private List<Review> list = new ArrayList<>();
private int totalPage = 1;
private int currentPage = 1; // 1-totalPage
private int currentPage = 0; // 1-totalPage, 0 means not yet loaded

public List<Review> getList() {
return list;
Expand Down
Expand Up @@ -9,6 +9,8 @@

import java.io.StringReader;
import java.util.ArrayList;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;

/**
Expand Down Expand Up @@ -225,10 +227,76 @@ static public ArrayList<VolumeList> getVolumeList(String xml) {
}
}

static public ReviewList parseReviewList(String xml) {
ReviewList reviewList = new ReviewList();
// TODO:
/**
* save the new xsl into an existing review list
* @param reviewList the existing review list object
* @param xml the fetched xml
*/
static public void parseReviewList(ReviewList reviewList, String xml) {
reviewList.setCurrentPage(reviewList.getCurrentPage() + 1);

return reviewList;
try {
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser xmlPullParser = factory.newPullParser();
xmlPullParser.setInput(new StringReader(xml));
int eventType = xmlPullParser.getEventType();

int rid = 0; // review id
Date postTime = new Date();
int noReplies = 0;
Date lastReplyTime = new Date();
String userName = "";
int uid = 0; // post user
String title = ""; // review title

while (eventType != XmlPullParser.END_DOCUMENT) {
switch (eventType) {
case XmlPullParser.START_DOCUMENT:
break;

case XmlPullParser.START_TAG:
if ("page".equals(xmlPullParser.getName())) {
reviewList.setTotalPage(Integer.valueOf(xmlPullParser.getAttributeValue(null, "num")));
} else if ("item".equals(xmlPullParser.getName())) {
rid = Integer.valueOf(xmlPullParser.getAttributeValue(null, "rid"));
noReplies = Integer.valueOf(xmlPullParser.getAttributeValue(null, "replies"));
String postTimeStr = xmlPullParser.getAttributeValue(null, "posttime");
postTime = new GregorianCalendar(
Integer.valueOf(postTimeStr.substring(0, 2), 10),
Integer.valueOf(postTimeStr.substring(2, 4), 10),
Integer.valueOf(postTimeStr.substring(4, 6), 10),
Integer.valueOf(postTimeStr.substring(6, 8), 10),
Integer.valueOf(postTimeStr.substring(8, 10), 10),
Integer.valueOf(postTimeStr.substring(10), 10)
).getTime();
String replyTimeStr = xmlPullParser.getAttributeValue(null, "replytime");
lastReplyTime = new GregorianCalendar(
Integer.valueOf(replyTimeStr.substring(0, 2), 10),
Integer.valueOf(replyTimeStr.substring(2, 4), 10),
Integer.valueOf(replyTimeStr.substring(4, 6), 10),
Integer.valueOf(replyTimeStr.substring(6, 8), 10),
Integer.valueOf(replyTimeStr.substring(8, 10), 10),
Integer.valueOf(replyTimeStr.substring(10), 10)
).getTime();
} else if ("user".equals(xmlPullParser.getName())) {
uid = Integer.valueOf(xmlPullParser.getAttributeValue(null, "uid"));
userName = xmlPullParser.nextText();
} else if ("content".equals(xmlPullParser.getName())) {
title = xmlPullParser.nextText();
}
break;

case XmlPullParser.END_TAG:
if ("item".equals(xmlPullParser.getName())) {
reviewList.getList().add(
new ReviewList.Review(rid, postTime, noReplies, lastReplyTime, userName, uid, title));
}
break;
}
eventType = xmlPullParser.next();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

This file was deleted.

0 comments on commit 093723e

Please sign in to comment.