mirror of
https://github.com/overleaf/overleaf.git
synced 2025-04-05 18:01:01 +00:00
Basic implementation of postback key.
This commit is contained in:
parent
3887e5025f
commit
c3ef49b17c
6 changed files with 42 additions and 27 deletions
|
@ -23,7 +23,7 @@ public interface WriteLatexDataSource {
|
|||
public void putDirectoryContentsToProjectWithName(String projectName, RawDirectoryContents directoryContents, String hostname) throws SnapshotPostException, IOException, FailedConnectionException;
|
||||
|
||||
/* Called by postback thread. */
|
||||
public void postbackReceivedSuccessfully(String projectName, int versionID) throws UnexpectedPostbackException;
|
||||
public void postbackReceivedWithException(String projectName, SnapshotPostException exception) throws UnexpectedPostbackException;
|
||||
public void postbackReceivedSuccessfully(String projectName, String postbackKey, int versionID) throws UnexpectedPostbackException;
|
||||
public void postbackReceivedWithException(String projectName, String postbackKey, SnapshotPostException exception) throws UnexpectedPostbackException;
|
||||
|
||||
}
|
||||
|
|
|
@ -18,13 +18,15 @@ public class WLDirectoryNodeSnapshot implements CandidateSnapshot {
|
|||
private final String projectName;
|
||||
private final String projectURL;
|
||||
private final WLDirectoryNode directoryNode;
|
||||
private final String postbackKey;
|
||||
private final CandidateSnapshotCallback callback;
|
||||
|
||||
public WLDirectoryNodeSnapshot(WLProject project, WLDirectoryNode directoryNode, String hostname, CandidateSnapshotCallback callback) {
|
||||
public WLDirectoryNodeSnapshot(WLProject project, WLDirectoryNode directoryNode, String hostname, String postbackKey, CandidateSnapshotCallback callback) {
|
||||
previousVersionID = project.getLatestSnapshotID();
|
||||
projectName = project.getName();
|
||||
projectURL = "http://" + hostname + "/" + projectName;
|
||||
this.directoryNode = directoryNode;
|
||||
this.postbackKey = postbackKey;
|
||||
this.callback = callback;
|
||||
}
|
||||
|
||||
|
@ -33,7 +35,7 @@ public class WLDirectoryNodeSnapshot implements CandidateSnapshot {
|
|||
JsonObject jsonObject = new JsonObject();
|
||||
jsonObject.addProperty("latestVerId", previousVersionID);
|
||||
jsonObject.add("files", getFilesAsJson());
|
||||
jsonObject.addProperty("postbackUrl", projectURL + "/postback");
|
||||
jsonObject.addProperty("postbackUrl", projectURL + "/" + postbackKey);
|
||||
System.out.println(jsonObject);
|
||||
return jsonObject;
|
||||
}
|
||||
|
|
|
@ -36,7 +36,6 @@ public class WriteLatexAPI implements WriteLatexDataSource {
|
|||
postbackManager = new PostbackManager();
|
||||
projectLocks = new HashMap<String, Lock>();
|
||||
mainProjectLock = new ProjectLock();
|
||||
// postbackLock = new ProjectLock();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -78,7 +77,8 @@ public class WriteLatexAPI implements WriteLatexDataSource {
|
|||
mainProjectLock.lockForProject(projectName);
|
||||
try {
|
||||
System.out.println("Pushing project: " + projectName);
|
||||
CandidateSnapshot candidate = dataModel.createCandidateSnapshotFromProjectWithContents(projectName, directoryContents, hostname);
|
||||
String postbackKey = postbackManager.makeKeyForProject(projectName);
|
||||
CandidateSnapshot candidate = dataModel.createCandidateSnapshotFromProjectWithContents(projectName, directoryContents, hostname, postbackKey);
|
||||
SnapshotPushRequest snapshotPushRequest = new SnapshotPushRequest(candidate);
|
||||
snapshotPushRequest.request();
|
||||
SnapshotPushRequestResult result = snapshotPushRequest.getResult();
|
||||
|
@ -100,13 +100,13 @@ public class WriteLatexAPI implements WriteLatexDataSource {
|
|||
|
||||
/* Called by postback thread. */
|
||||
@Override
|
||||
public void postbackReceivedSuccessfully(String projectName, int versionID) throws UnexpectedPostbackException {
|
||||
postbackManager.postVersionIDForProject(projectName, versionID);
|
||||
public void postbackReceivedSuccessfully(String projectName, String postbackKey, int versionID) throws UnexpectedPostbackException {
|
||||
postbackManager.postVersionIDForProject(projectName, versionID, postbackKey);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void postbackReceivedWithException(String projectName, SnapshotPostException exception) throws UnexpectedPostbackException {
|
||||
postbackManager.postExceptionForProject(projectName, exception);
|
||||
public void postbackReceivedWithException(String projectName, String postbackKey, SnapshotPostException exception) throws UnexpectedPostbackException {
|
||||
postbackManager.postExceptionForProject(projectName, exception, postbackKey);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -7,11 +7,14 @@ import uk.ac.ic.wlgitbridge.writelatex.api.request.push.exception.SnapshotPostEx
|
|||
*/
|
||||
public class PostbackContents {
|
||||
|
||||
private final String postbackKey;
|
||||
|
||||
private boolean received;
|
||||
private int versionID;
|
||||
private SnapshotPostException exception;
|
||||
|
||||
public PostbackContents() {
|
||||
public PostbackContents(String postbackKey) {
|
||||
this.postbackKey = postbackKey;
|
||||
received = false;
|
||||
exception = null;
|
||||
}
|
||||
|
@ -30,16 +33,20 @@ public class PostbackContents {
|
|||
return versionID;
|
||||
}
|
||||
|
||||
public synchronized void receivedVersionID(int versionID) {
|
||||
this.versionID = versionID;
|
||||
received = true;
|
||||
notifyAll();
|
||||
public synchronized void receivedVersionID(int versionID, String postbackKey) {
|
||||
if (postbackKey.equals(this.postbackKey)) {
|
||||
this.versionID = versionID;
|
||||
received = true;
|
||||
notifyAll();
|
||||
}
|
||||
}
|
||||
|
||||
public synchronized void receivedException(SnapshotPostException exception) {
|
||||
this.exception = exception;
|
||||
received = true;
|
||||
notifyAll();
|
||||
public synchronized void receivedException(SnapshotPostException exception, String postbackKey) {
|
||||
if (postbackKey.equals(this.postbackKey)) {
|
||||
this.exception = exception;
|
||||
received = true;
|
||||
notifyAll();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -17,19 +17,17 @@ public class PostbackManager {
|
|||
}
|
||||
|
||||
public int getVersionID(String projectName) throws SnapshotPostException {
|
||||
PostbackContents contents = new PostbackContents();
|
||||
postbackContentsTable.put(projectName, contents);
|
||||
int versionID = contents.waitForPostback();
|
||||
int versionID = postbackContentsTable.get(projectName).waitForPostback();
|
||||
postbackContentsTable.remove(projectName);
|
||||
return versionID;
|
||||
}
|
||||
|
||||
public void postVersionIDForProject(String projectName, int versionID) throws UnexpectedPostbackException {
|
||||
getPostbackForProject(projectName).receivedVersionID(versionID);
|
||||
public void postVersionIDForProject(String projectName, int versionID, String postbackKey) throws UnexpectedPostbackException {
|
||||
getPostbackForProject(projectName).receivedVersionID(versionID, postbackKey);
|
||||
}
|
||||
|
||||
public void postExceptionForProject(String projectName, SnapshotPostException exception) throws UnexpectedPostbackException {
|
||||
getPostbackForProject(projectName).receivedException(exception);
|
||||
public void postExceptionForProject(String projectName, SnapshotPostException exception, String postbackKey) throws UnexpectedPostbackException {
|
||||
getPostbackForProject(projectName).receivedException(exception, postbackKey);
|
||||
}
|
||||
|
||||
private PostbackContents getPostbackForProject(String projectName) throws UnexpectedPostbackException {
|
||||
|
@ -40,4 +38,11 @@ public class PostbackManager {
|
|||
return contents;
|
||||
}
|
||||
|
||||
public String makeKeyForProject(String projectName) {
|
||||
String key = "postback";
|
||||
PostbackContents contents = new PostbackContents(key);
|
||||
postbackContentsTable.put(projectName, contents);
|
||||
return key;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -45,11 +45,12 @@ public class WLDataModel implements CandidateSnapshotCallback {
|
|||
return projectStore.getProjectWithName(name);
|
||||
}
|
||||
|
||||
public CandidateSnapshot createCandidateSnapshotFromProjectWithContents(String projectName, RawDirectoryContents directoryContents, String hostname) throws SnapshotPostException, IOException, FailedConnectionException {
|
||||
public CandidateSnapshot createCandidateSnapshotFromProjectWithContents(String projectName, RawDirectoryContents directoryContents, String hostname, String postbackKey) throws SnapshotPostException, IOException, FailedConnectionException {
|
||||
return new WLDirectoryNodeSnapshot(getProjectWithName(projectName),
|
||||
fileStore.createNextDirectoryNodeInProjectFromContents(getProjectWithName(projectName),
|
||||
directoryContents),
|
||||
hostname,
|
||||
postbackKey,
|
||||
this);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue