UpdaterBehaviour now treats tracker data like media data, as discussed in slack
This commit is contained in:
@@ -16,6 +16,8 @@ namespace RothenburgAR.Exhibition
|
|||||||
{
|
{
|
||||||
if (!Directory.Exists(exhibitionDirectory))
|
if (!Directory.Exists(exhibitionDirectory))
|
||||||
return false;
|
return false;
|
||||||
|
if (!File.Exists(Path.Combine(exhibitionDirectory, "version.txt")))
|
||||||
|
return false;
|
||||||
if (!File.Exists(Path.Combine(exhibitionDirectory, "tracker.xml")))
|
if (!File.Exists(Path.Combine(exhibitionDirectory, "tracker.xml")))
|
||||||
return false;
|
return false;
|
||||||
if (!File.Exists(Path.Combine(exhibitionDirectory, "tracker.dat")))
|
if (!File.Exists(Path.Combine(exhibitionDirectory, "tracker.dat")))
|
||||||
|
|||||||
@@ -65,11 +65,13 @@ namespace RothenburgAR.Updater
|
|||||||
public UnityWebRequest Request { get; set; }
|
public UnityWebRequest Request { get; set; }
|
||||||
public UnityWebRequestAsyncOperation Operation { get; set; }
|
public UnityWebRequestAsyncOperation Operation { get; set; }
|
||||||
|
|
||||||
|
private bool isDone = false;
|
||||||
|
|
||||||
public bool IsDone
|
public bool IsDone
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
return Operation.isDone && Request.isDone;
|
return Operation.isDone && Request.isDone && this.isDone;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -79,6 +81,11 @@ namespace RothenburgAR.Updater
|
|||||||
this.Download = download;
|
this.Download = download;
|
||||||
this.Request = request;
|
this.Request = request;
|
||||||
this.Operation = operation;
|
this.Operation = operation;
|
||||||
|
|
||||||
|
this.Operation.completed += (_) =>
|
||||||
|
{
|
||||||
|
this.isDone = true;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -241,18 +241,17 @@ namespace RothenburgAR.Updater
|
|||||||
downloadingMedia.Add(mediaId);
|
downloadingMedia.Add(mediaId);
|
||||||
|
|
||||||
var path = PathHelper.CombinePaths(PathHelper.MediaPath, mediaId);
|
var path = PathHelper.CombinePaths(PathHelper.MediaPath, mediaId);
|
||||||
var filepath = Path.Combine(path, mediaId + ".med");
|
var filepath = Path.Combine(path, mediaId + ".obj");
|
||||||
|
|
||||||
// create dir if nonexistent
|
// create dir if nonexistent
|
||||||
if (!Directory.Exists(path)) Directory.CreateDirectory(path);
|
if (!Directory.Exists(path)) Directory.CreateDirectory(path);
|
||||||
|
|
||||||
//System.Security.Cryptography.SHA1CryptoServiceProvider
|
|
||||||
//System.Security.Cryptography.SHA256
|
|
||||||
var eTag = GenerateETag(filepath);
|
var eTag = GenerateETag(filepath);
|
||||||
|
|
||||||
var url = ApiInfo.FileEndpoint.Replace("{id}", mediaId);
|
var url = ApiInfo.FileEndpoint.Replace("{id}", mediaId);
|
||||||
var http = new HttpRequest(url, HttpVerb.GET)
|
var http = new HttpRequest(url, HttpVerb.GET)
|
||||||
.WithHeader("If-None-Match", eTag)
|
.WithHeader("If-None-Match", eTag)
|
||||||
|
.WithHeader("Accept-Encoding", "gzip,deflate")
|
||||||
.Send();
|
.Send();
|
||||||
|
|
||||||
httpHandlers.Add(http);
|
httpHandlers.Add(http);
|
||||||
@@ -277,7 +276,7 @@ namespace RothenburgAR.Updater
|
|||||||
var subfiles = subfilesHeader.Split(separator, StringSplitOptions.RemoveEmptyEntries);
|
var subfiles = subfilesHeader.Split(separator, StringSplitOptions.RemoveEmptyEntries);
|
||||||
foreach (var subfile in subfiles)
|
foreach (var subfile in subfiles)
|
||||||
{
|
{
|
||||||
UpdateSubfile(path, mediaId, subfile);
|
UpdateSubfile(path, url, subfile);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -286,6 +285,55 @@ namespace RothenburgAR.Updater
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void UpdateTracker(ApiExhibitionVersion exhibition)
|
||||||
|
{
|
||||||
|
var path = PathHelper.CombinePaths(PathHelper.ExhibitionPath, exhibition.Id);
|
||||||
|
var filepath = Path.Combine(path, "tracker.dat"); //TODO test if it's the xml instead
|
||||||
|
|
||||||
|
// create dir if nonexistent
|
||||||
|
if (!Directory.Exists(path)) Directory.CreateDirectory(path);
|
||||||
|
|
||||||
|
var eTag = GenerateETag(filepath);
|
||||||
|
|
||||||
|
var url = exhibition.Tracker.UpdateUrl;
|
||||||
|
var http = new HttpRequest(url, HttpVerb.GET)
|
||||||
|
.WithHeader("If-None-Match", eTag)
|
||||||
|
.Send();
|
||||||
|
httpHandlers.Add(http);
|
||||||
|
|
||||||
|
http.Operation.completed += ar =>
|
||||||
|
{
|
||||||
|
if (CheckNetworkErrors(http))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Directory.Exists(path))
|
||||||
|
{
|
||||||
|
Directory.CreateDirectory(path);
|
||||||
|
}
|
||||||
|
|
||||||
|
// do nothing if unchanged
|
||||||
|
if (http.Request.responseCode == 304) return;
|
||||||
|
|
||||||
|
// gzipped files are un-gzipped automagically
|
||||||
|
File.WriteAllBytes(filepath, http.Download.data);
|
||||||
|
|
||||||
|
var subfilesHeader = http.Request.GetResponseHeader("subfiles");
|
||||||
|
if (subfilesHeader != null)
|
||||||
|
{
|
||||||
|
string[] separator = new string[1] { ";;" };
|
||||||
|
var subfiles = subfilesHeader.Split(separator, StringSplitOptions.RemoveEmptyEntries);
|
||||||
|
foreach (var subfile in subfiles)
|
||||||
|
{
|
||||||
|
UpdateSubfile(path, url, subfile);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Debug.Log(string.Format("{1}-DONE with {0}", url, Time.realtimeSinceStartup));
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
private string GenerateETag(string filepath)
|
private string GenerateETag(string filepath)
|
||||||
{
|
{
|
||||||
string eTag = "";
|
string eTag = "";
|
||||||
@@ -303,12 +351,12 @@ namespace RothenburgAR.Updater
|
|||||||
return eTag;
|
return eTag;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void UpdateSubfile(string path, string mediaId, string subfile)
|
private void UpdateSubfile(string path, string parentUrl, string subfile)
|
||||||
{
|
{
|
||||||
var filepath = Path.Combine(path, subfile);
|
var filepath = Path.Combine(path, subfile);
|
||||||
var eTag = GenerateETag(filepath);
|
var eTag = GenerateETag(filepath);
|
||||||
|
|
||||||
var url = ApiInfo.FileEndpoint.Replace("{id}", mediaId) + "/" + subfile;
|
var url = parentUrl + "/" + subfile;
|
||||||
var http = new HttpRequest(url, HttpVerb.GET)
|
var http = new HttpRequest(url, HttpVerb.GET)
|
||||||
.WithHeader("If-None-Match", eTag)
|
.WithHeader("If-None-Match", eTag)
|
||||||
.Send();
|
.Send();
|
||||||
@@ -355,33 +403,6 @@ namespace RothenburgAR.Updater
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void UpdateTracker(ApiExhibitionVersion exhibition)
|
|
||||||
{
|
|
||||||
//TODO test UpdateTracker
|
|
||||||
var path = PathHelper.CombinePaths(PathHelper.ExhibitionPath, exhibition.Id);
|
|
||||||
var url = exhibition.Tracker.UpdateUrl;
|
|
||||||
var http = new HttpRequest(url, HttpVerb.GET).Send();
|
|
||||||
httpHandlers.Add(http);
|
|
||||||
|
|
||||||
http.Operation.completed += ar =>
|
|
||||||
{
|
|
||||||
if (CheckNetworkErrors(http))
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!Directory.Exists(path))
|
|
||||||
{
|
|
||||||
Directory.CreateDirectory(path);
|
|
||||||
}
|
|
||||||
|
|
||||||
//TODO unzip, should be tracker.xml and tracker.dat files
|
|
||||||
var type = http.Request.GetResponseHeader("Content-Type");
|
|
||||||
File.WriteAllBytes(Path.Combine(path, "tracker.zip"), http.Download.data);
|
|
||||||
Debug.Log(string.Format("{1}-DONE with {0}", url, Time.realtimeSinceStartup));
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
public void LoadMainScene()
|
public void LoadMainScene()
|
||||||
{
|
{
|
||||||
Debug.Log("Loading mainScene");
|
Debug.Log("Loading mainScene");
|
||||||
|
|||||||
Reference in New Issue
Block a user