/
LocalRemoteRepo.cpp
73 lines (66 loc) · 1.86 KB
/
LocalRemoteRepo.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#include "LocalRemoteRepo.hpp"
#include "ServerRepo.hpp"
#include "../inanity/MemoryStream.hpp"
#include "../inanity/StreamReader.hpp"
#include "../inanity/StreamWriter.hpp"
#include "../inanity/FileInputStream.hpp"
#include "../inanity/File.hpp"
BEGIN_INANITY_OIL
LocalRemoteRepo::LocalRemoteRepo(ptr<ServerRepo> serverRepo)
: serverRepo(serverRepo) {}
void LocalRemoteRepo::GetManifest(ptr<DataHandler<ptr<File> > > manifestHandler)
{
try
{
ptr<MemoryStream> stream = NEW(MemoryStream());
StreamWriter writer(stream);
serverRepo->WriteManifest(&writer);
manifestHandler->FireData(stream->ToFile());
}
catch(Exception* exception)
{
manifestHandler->FireError(exception);
}
}
void LocalRemoteRepo::Sync(ptr<File> pushData, ptr<DataHandler<ptr<File> > > pullHandler)
{
try
{
ptr<MemoryStream> stream = NEW(MemoryStream());
StreamWriter writer(stream);
StreamReader reader(NEW(FileInputStream(pushData)));
static const String userName = "local";
bool pushedSomething = serverRepo->Sync(&reader, &writer, userName, true);
pullHandler->FireData(stream->ToFile());
if(pushedSomething && deferredWatchHandler)
{
ptr<MemoryStream> stream = NEW(MemoryStream());
StreamWriter writer(stream);
serverRepo->RespondWatch(&writer);
deferredWatchHandler->FireData(stream->ToFile());
deferredWatchHandler = nullptr;
}
}
catch(Exception* exception)
{
pullHandler->FireError(exception);
}
}
void LocalRemoteRepo::Watch(ptr<File> requestData, ptr<DataHandler<ptr<File> > > watchHandler)
{
try
{
ptr<MemoryStream> stream = NEW(MemoryStream());
StreamWriter writer(stream);
StreamReader reader(NEW(FileInputStream(requestData)));
if(serverRepo->Watch(&reader, &writer))
watchHandler->FireData(stream->ToFile());
else
deferredWatchHandler = watchHandler;
}
catch(Exception* exception)
{
watchHandler->FireError(exception);
}
}
END_INANITY_OIL