Skip to content

Commit 7ef623a

Browse files
committed
Add server upload of the users game play data and metadata. #53
Added high scores retrieval from the server and added display of those high scores into the scores page. #54 Updated the Analytics ID to one in the LIL group. In the guess screen, prevented the choose arrows from showing when the answer is displayed.
1 parent aaae5c9 commit 7ef623a

9 files changed

Lines changed: 106 additions & 74 deletions

File tree

gwt-cordova/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
<groupId>nl.ru.languageininteraction</groupId>
1010
<artifactId>languagememorygame</artifactId>
1111
<packaging>war</packaging>
12-
<version>0.1.308-testing</version>
12+
<version>0.1.317-testing</version>
1313
<name>Language Memory Game</name>
1414
<organization>
1515
<name>Language In Interaction</name>

gwt-cordova/setup-cordova.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#mvn install
22
cd target
3-
appname=languagememorygame-0.1.308-testing
3+
appname=languagememorygame-0.1.317-testing
44
rm -rf $appname-cordova
55
unzip $appname-cordova.zip -d $appname-cordova
66
cd $appname-cordova

gwt-cordova/src/main/java/nl/ru/languageininteraction/language/client/model/UserResults.java

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,6 @@ public class UserResults {
2525

2626
private UserData userData = null;
2727
private GameData gameData = new GameData();
28-
private StimuliGroup pendingStimuliGroup = null;
29-
private String scoreLog = "";
3028

3129
public UserResults(UserData userId) {
3230
this.userData = userId;
@@ -48,20 +46,4 @@ public void clearResults() {
4846
public GameData getGameData() {
4947
return gameData;
5048
}
51-
52-
public StimuliGroup getPendingStimuliGroup() {
53-
return pendingStimuliGroup;
54-
}
55-
56-
public void setPendingStimuliGroup(StimuliGroup pendingStimuliGroup) {
57-
this.pendingStimuliGroup = pendingStimuliGroup;
58-
}
59-
60-
public String getScoreLog() {
61-
return scoreLog;
62-
}
63-
64-
public void setScoreLog(String scoreLog) {
65-
this.scoreLog = scoreLog;
66-
}
6749
}

gwt-cordova/src/main/java/nl/ru/languageininteraction/language/client/presenter/ScorePagePresenter.java

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,11 @@
1919

2020
import com.google.gwt.core.client.GWT;
2121
import com.google.gwt.core.client.JsArray;
22+
import com.google.gwt.http.client.URL;
23+
import com.google.gwt.i18n.shared.DateTimeFormat;
2224
import com.google.gwt.user.client.ui.Button;
2325
import com.google.gwt.user.client.ui.RootLayoutPanel;
26+
import java.util.Date;
2427
import nl.ru.languageininteraction.language.client.Messages;
2528
import nl.ru.languageininteraction.language.client.exception.AudioException;
2629
import nl.ru.languageininteraction.language.client.exception.MetadataFieldException;
@@ -35,6 +38,7 @@
3538
import nl.ru.languageininteraction.language.client.service.AudioPlayer;
3639
import nl.ru.languageininteraction.language.client.service.LocalStorage;
3740
import nl.ru.languageininteraction.language.client.service.MetadataFieldProvider;
41+
import nl.ru.languageininteraction.language.client.service.ResultsSerialiser;
3842
import nl.ru.languageininteraction.language.client.view.ScorePageView;
3943

4044
/**
@@ -133,6 +137,16 @@ public void eventFired(Button button) {
133137
try {
134138
userResults.getUserData().validateNameField();
135139
new LocalStorage().storeData(userResults);
140+
String restultsData = URL.encodeQueryString(new ResultsSerialiser() {
141+
final DateTimeFormat format = DateTimeFormat.getFormat(messages.reportDateFormat());
142+
143+
@Override
144+
protected String formatDate(Date date) {
145+
return format.format(date);
146+
}
147+
}.serialise(userResults));
148+
new LocalStorage().addStoredGameData(userResults.getUserData().getUserId(), restultsData);
149+
userResults.clearResults();
136150
appEventListner.requestApplicationState(nextState);
137151
} catch (MetadataFieldException exception) {
138152
// if the user has not entered their name etc then all actions force them to go to the edit details screen (which can only happen if they are playing for the first time or the clicked new player)
@@ -163,7 +177,8 @@ public void audioEnded() {
163177
scorePageView.setRoundsData(userResults.getGameData().getRoundsCorrect(), userResults.getGameData().getRoundsPlayed());
164178

165179
final HighScoreService registrationService = new HighScoreService();
166-
registrationService.submitScores(userResults, new HighScoreListener() {
180+
final boolean isShareData = metadataFieldProvider.shareMetadataField.getControlledVocabulary()[0].equals(userResults.getUserData().getMetadataValue(metadataFieldProvider.shareMetadataField));
181+
registrationService.submitScores(isShareData, userResults, new HighScoreListener() {
167182

168183
@Override
169184
public void scoreSubmissionFailed(HighScoreException exception) {
@@ -183,11 +198,14 @@ public void scoreSubmissionFailed(HighScoreException exception) {
183198

184199
@Override
185200
public void scoreSubmissionComplete(JsArray<HighScoreData> highScoreData) {
186-
userResults.clearResults();
187201
final HighScoreData highScoreJson = highScoreData.get(0);
188202
for (int index = 0; index < highScoreJson.getCount(); index++) {
189203
scorePageView.setHighScore(index, highScoreJson.getPlayerName(index), highScoreJson.getPlayerHighScore(index));
190204
}
205+
if (isShareData) {
206+
userResults.clearResults();
207+
new LocalStorage().clearStoredGameData(userResults.getUserData().getUserId());
208+
}
191209
appEventListner.requestApplicationState(AppEventListner.ApplicationState.highscoresubmitted);
192210
}
193211
}, messages.reportDateFormat());

gwt-cordova/src/main/java/nl/ru/languageininteraction/language/client/registration/HighScoreService.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import nl.ru.languageininteraction.language.client.model.HighScoreData;
3636
import nl.ru.languageininteraction.language.client.model.MetadataField;
3737
import nl.ru.languageininteraction.language.client.model.UserResults;
38+
import nl.ru.languageininteraction.language.client.service.LocalStorage;
3839
import nl.ru.languageininteraction.language.client.service.MetadataFieldProvider;
3940
import nl.ru.languageininteraction.language.client.service.ResultsSerialiser;
4041

@@ -49,12 +50,11 @@ public class HighScoreService {
4950
final MetadataFieldProvider metadataFieldProvider = new MetadataFieldProvider();
5051
private final Version version = GWT.create(Version.class);
5152

52-
public void submitScores(UserResults userResults, HighScoreListener highScoreListener, final String reportDateFormat) {
53+
public void submitScores(final boolean isShareData,UserResults userResults, HighScoreListener highScoreListener, final String reportDateFormat) {
5354
final String highScoresUrl = serviceLocations.highScoresUrl();
5455
final RequestBuilder builder = new RequestBuilder(RequestBuilder.POST, highScoresUrl);
5556
builder.setHeader("Content-type", "application/x-www-form-urlencoded");
56-
StringBuilder stringBuilder = new StringBuilder();
57-
final boolean isShareData = metadataFieldProvider.shareMetadataField.getControlledVocabulary()[0].equals(userResults.getUserData().getMetadataValue(metadataFieldProvider.shareMetadataField));
57+
StringBuilder stringBuilder = new StringBuilder();
5858
if (isShareData) {
5959
for (MetadataField key : userResults.getUserData().getMetadataFields()) {
6060
String value = URL.encodeQueryString(userResults.getUserData().getMetadataValue(key));
@@ -74,8 +74,8 @@ public void submitScores(UserResults userResults, HighScoreListener highScoreLis
7474
}
7575

7676
if (isShareData) {
77-
String scoreLog = URL.encodeQueryString(userResults.getScoreLog());
78-
stringBuilder.append("scorelog").append("=").append(scoreLog).append("&");
77+
// String scoreLog = URL.encodeQueryString(userResults.getScoreLog());
78+
// stringBuilder.append("scorelog").append("=").append(scoreLog).append("&");
7979
String restultsData = URL.encodeQueryString(new ResultsSerialiser() {
8080
final DateTimeFormat format = DateTimeFormat.getFormat(reportDateFormat);
8181

@@ -84,17 +84,17 @@ protected String formatDate(Date date) {
8484
return format.format(date);
8585
}
8686
}.serialise(userResults));
87-
stringBuilder.append("quest_results=").append(restultsData);
87+
stringBuilder.append("quest_results=").append(new LocalStorage().getStoredGameData(userResults.getUserData().getUserId())).append(restultsData);
8888
}
8989
try {
90-
builder.sendRequest(stringBuilder.toString(), geRequestBuilder(builder, highScoreListener, highScoresUrl));
90+
builder.sendRequest(stringBuilder.toString(), geRequestBuilder(builder, highScoreListener, highScoresUrl, userResults));
9191
} catch (RequestException exception) {
9292
highScoreListener.scoreSubmissionFailed(new HighScoreException(HighScoreException.ErrorType.buildererror, exception));
9393
logger.log(Level.SEVERE, "SubmitHighScore", exception);
9494
}
9595
}
9696

97-
private RequestCallback geRequestBuilder(final RequestBuilder builder, final HighScoreListener highScoreListener, final String targetUri) {
97+
private RequestCallback geRequestBuilder(final RequestBuilder builder, final HighScoreListener highScoreListener, final String targetUri, final UserResults userResults) {
9898
return new RequestCallback() {
9999
@Override
100100
public void onError(Request request, Throwable exception) {

gwt-cordova/src/main/java/nl/ru/languageininteraction/language/client/service/LocalStorage.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ public class LocalStorage {
3535
private Storage dataStore = null;
3636
private static final String USER_RESULTS = "UserResults.";
3737
private static final String LAST_USER_ID = "LastUserId.";
38+
private static final String GAME_DATA = "GameData.";
3839
protected static final String MAX_SCORE = "maxScore";
3940
final MetadataFieldProvider metadataFieldProvider = new MetadataFieldProvider();
4041

@@ -45,6 +46,21 @@ private Storage loadStorage() {
4546
return dataStore;
4647
}
4748

49+
public void clearStoredGameData(UserId userId) {
50+
loadStorage();
51+
dataStore.setItem(GAME_DATA + userId.toString(), "");
52+
}
53+
54+
public String getStoredGameData(UserId userId) {
55+
loadStorage();
56+
return getCleanStoredData(GAME_DATA + userId.toString());
57+
}
58+
59+
public void addStoredGameData(UserId userId, String serialisedGameData) {
60+
loadStorage();
61+
dataStore.setItem(GAME_DATA + userId.toString(), getCleanStoredData(GAME_DATA + userId.toString()) + serialisedGameData);
62+
}
63+
4864
public UserData getStoredData(UserId userId) {
4965
UserData userData = new UserData(userId);
5066
loadStorage();

0 commit comments

Comments
 (0)