Mercurial > hg > soniczoomios
changeset 30:c0a6f7c66719
Josh M test "in house" version 0.1
author | Robert Tubb <rt300@eecs.qmul.ac.uk> |
---|---|
date | Wed, 27 Feb 2013 11:39:07 +0000 |
parents | fabb3a5cdfc9 |
children | 23ef179c3748 |
files | HelpViewController.xib IntroViewController.xib PresetAlertViewController.mm ServerComms.h ServerComms.mm TimedSessionController.h TimedSessionController.mm eventLogger.h eventLogger.mm presetManager.h presetManager.mm testApp.mm |
diffstat | 12 files changed, 447 insertions(+), 285 deletions(-) [+] |
line wrap: on
line diff
--- a/HelpViewController.xib Fri Feb 22 17:41:38 2013 +0000 +++ b/HelpViewController.xib Wed Feb 27 11:39:07 2013 +0000 @@ -1,14 +1,14 @@ <?xml version="1.0" encoding="UTF-8"?> <archive type="com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB" version="8.00"> <data> - <int key="IBDocument.SystemTarget">1536</int> + <int key="IBDocument.SystemTarget">1552</int> <string key="IBDocument.SystemVersion">11G63</string> - <string key="IBDocument.InterfaceBuilderVersion">2844</string> + <string key="IBDocument.InterfaceBuilderVersion">3084</string> <string key="IBDocument.AppKitVersion">1138.51</string> <string key="IBDocument.HIToolboxVersion">569.00</string> <object class="NSMutableDictionary" key="IBDocument.PluginVersions"> <string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string> - <string key="NS.object.0">1930</string> + <string key="NS.object.0">2083</string> </object> <array key="IBDocument.IntegratedClassDependencies"> <string>IBProxyObject</string> @@ -55,35 +55,38 @@ <bool key="IBUIUsesAttributedText">YES</bool> <object class="NSAttributedString" key="IBUIAttributedText"> <string type="base64-UTF8" key="NSString">SU5TVFJVQ1RJT05TDQ1QcmVzcyB0aGUgcGxheSBidXR0b24gYXQgdGhlIHRvcCB0byBzdGFydCB0aGUg -c2VxdWVuY2VyLiBQcmVzcyBwYXVzZSB0byBzdG9wLg1QbGVhc2UgdXNlIGFsbCB0aHJlZSBtb2Rlczog -Zmlyc3QgdGhlIFNMSURFUlMsIHRoZW4gdGhlIFpPT01FUiBhbmQgdGhlbiBCT1RIIGZvciBhYm91dCA4 -IG1pbnV0ZXMgZWFjaC4gWW91IGNhbiBhY2Nlc3MgdGhlc2UgdXNpbmcgdGhlIHRhYnMgYXQgdGhlIGJv -dHRvbSBvZiB0aGUgc2NyZWVuLiANDU9QRVJBVElORyBUSEUgWk9PTUVS4oCoDVRoZSByZWQgY3Jvc3No -YWlycyBpbiB0aGUgY2VudHJlIG9mIHRoZSBzY3JlZW4gcmVwcmVzZW50IHRoZSBwb2ludCBvbiB0aGUg -c3VyZmFjZSB0aGF0IHlvdSBhcmUgbGlzdGVuaW5nIHRvLiBTY3JvbGwgdGhlIHN1cmZhY2UgdW5kZXIg -dGhpcyBwb2ludCB0byBtb3ZlIHRvIGEgZGlmZmVyZW50IHNvdW5kLiBJbiBCT1RIIG1vZGUgeW91IHdp -bGwgYmUgYWJsZSB0byBzZWUgdGhlIGVmZmVjdCBvZiB0aGlzIG9uIHRoZSBzbGlkZXJzLiBMaWtld2lz -ZSBpZiB5b3UgbW92ZSBhIHNsaWRlciB5b3Ugd2lsbCBob3AgdG8gYSBkaWZmZXJlbnQgcG9pbnQgb24g -dGhlIHN1cmZhY2Uu4oCoDVNhdmUgYW55IHNvdW5kcy9zZXF1ZW5jZXMgdGhhdCB5b3UgbGlrZSB1c2lu -ZyB0aGUg4oCcc2F2ZSBwcmVzZXTigJ0gYnV0dG9uLiBBIG1hcmtlciB3aWxsIGFwcGVhciBvbiB0aGUg -em9vbSBzdXJmYWNlLiBJZiB5b3UgbW92ZSB0byB0aGUgdmljaW5pdHkgb2YgYSBwcmVzZXQgbWFya2Vy -LCB0aGUgY3Jvc3NoYWlycyB3aWxsIHNuYXAgdG8gdGhlIHByZXNldCwgaXRzIGRldGFpbHMgd2lsbCBh -cHBlYXIgYW5kIHRoZSBzb3VuZCB3aWxsIHBsYXkuDeKAqFVzaW5nIHR3byBmaW5nZXIgcGluY2ggbW92 -ZW1lbnQgem9vbXMgdGhlIHN1cmZhY2UganVzdCBhcyBpbiBhIG1hcHMgYXBwLiBUaGUgZnVydGhlciB5 -b3Ugem9vbSBpbiwgdGhlIGxlc3MgdGhlIHNvdW5kIHdpbGwgY2hhbmdlIGFzIHlvdSBzY3JvbGwgYXJv -dW5kLiBGb3IgZXhhbXBsZSB0aGUgeWVsbG93IGxpbmVzIHRoYXQgYXBwZWFyIGF0IHRoZSBsYXJnZXN0 -IHNjYWxlIGNvcnJlc3BvbmQgdG8gdGhlIHNsaWRlcnMganVtcGluZyA2NCB1bml0cy4gVGhlIHdoaXRl -IGxpbmVzIGF0IHRoZSBzbWFsbGVzdCBzY2FsZSBjb3JyZXNwb25kIHRvIGp1bXBzIG9mIG9uZSB1bml0 -LiBUaGVyZSBhcmUgNyBsZXZlbHM64oCo4oCoWWVsbG93ID0gNjTigKhUZWFsID0gMzLigKhQdXJwbGUg -PSAxNuKAqEdyZWVuID0gOOKAqERhcmsgQmx1ZSA9IDTigKhSZWQgPSAy4oCoV2hpdGUgPSAx4oCo4oCo -TE9DS+KAqOKAqElmIHlvdSBmaW5kIGEgc2VxdWVuY2UgeW91IGxpa2UgYnV0IHdhbnQgdG8gY2hhbmdl -IHRoZSBzeW50aCBzb3VuZCB1c2UgdGhlICJMb2NrIFNlcXVlbmNlIChYKSIgYnV0dG9uLiBUaGlzIHdp -bGwgcHJldmVudCB5b3UgYWNjaWRlbnRhbGx5IG1vdmluZyBpbiBmcm9tIGxlZnQgdG8gcmlnaHQgYW5k -IG1lc3NpbmcgdXAgeW91ciBub3RlIHBhdHRlcm4uIFNpbWlsYXJseSBpZiB5b3UgZmluZCBhIHN5bnRo -IHNvdW5kIHRoYXQgeW91IGxpa2UsIGJ1dCB3YW50IHRvIGNoYW5nZSB0aGUgbm90ZSBzZXF1ZW5jZSwg -dXNlIHRoZSAiTG9jayBTeW50aCAoWSkiIGJ1dHRvbi4g4oCo4oCoUkFORE9NSVNF4oCo4oCoVXNlIHRo -ZSByYW5kb21pc2UgdG8ganVtcCB0byBhIHJhbmRvbSBwb2ludCBvbiB0aGUgZ3JpZC4g4oCoVEhFIFFV -RVNUSU9OTkFJUkXigKjigKgNDQ</string> +c2VxdWVuY2VyLiBQcmVzcyBwYXVzZSB0byBzdG9wLg1Zb3Ugd2lsbCBiZSB1c2luZyBhbGwgdGhyZWUg +bW9kZXM6IGZpcnN0IHRoZSBTTElERVJTLCB0aGVuIHRoZSBaT09NRVIgYW5kIHRoZW4gQk9USCBmb3Ig +YWJvdXQgNiBtaW51dGVzIGVhY2guIEFmdGVyIHlvdSBjb21wbGV0ZSB0aGUgdGltZWQgc2Vzc2lvbnMg +YW5kIHRoZSBxdWVzdGlvbm5haXJlLCB5b3UgY2FuIGFjY2VzcyB0aGVzZSB1c2luZyB0aGUgdGFicyBh +dCB0aGUgYm90dG9tIG9mIHRoZSBzY3JlZW4uIA0NT1BFUkFUSU5HIFRIRSBaT09NRVLigKgNVGhlIHJl +ZCBjcm9zc2hhaXJzIGluIHRoZSBjZW50cmUgb2YgdGhlIHNjcmVlbiByZXByZXNlbnQgdGhlIHBvaW50 +IG9uIHRoZSBzdXJmYWNlIHRoYXQgeW91IGFyZSBsaXN0ZW5pbmcgdG8uIFNjcm9sbCB0aGUgc3VyZmFj +ZSB1bmRlciB0aGlzIHBvaW50IHRvIG1vdmUgdG8gYSBkaWZmZXJlbnQgc291bmQuIEluIEJPVEggbW9k +ZSB5b3Ugd2lsbCBiZSBhYmxlIHRvIHNlZSB0aGUgZWZmZWN0IG9mIHRoaXMgb24gdGhlIHNsaWRlcnMu +IExpa2V3aXNlIGlmIHlvdSBtb3ZlIGEgc2xpZGVyIHlvdSB3aWxsIGhvcCB0byBhIGRpZmZlcmVudCBw +b2ludCBvbiB0aGUgc3VyZmFjZS7igKgNU2F2ZSBhbnkgc291bmRzL3NlcXVlbmNlcyB0aGF0IHlvdSBs +aWtlIHVzaW5nIHRoZSDigJxzYXZlIHByZXNldOKAnSBidXR0b24uIEEgbWFya2VyIHdpbGwgYXBwZWFy +IG9uIHRoZSB6b29tIHN1cmZhY2UuIElmIHlvdSBtb3ZlIHRvIHRoZSB2aWNpbml0eSBvZiBhIHByZXNl +dCBtYXJrZXIsIHRoZSBjcm9zc2hhaXJzIHdpbGwgc25hcCB0byB0aGUgcHJlc2V0LCBpdHMgZGV0YWls +cyB3aWxsIGFwcGVhciBhbmQgdGhlIHNvdW5kIHdpbGwgcGxheS4N4oCoVXNpbmcgdHdvIGZpbmdlciBw +aW5jaCBtb3ZlbWVudCB6b29tcyB0aGUgc3VyZmFjZSBqdXN0IGFzIGluIGEgbWFwcyBhcHAuIFRoZSBm +dXJ0aGVyIHlvdSB6b29tIGluLCB0aGUgbGVzcyB0aGUgc291bmQgd2lsbCBjaGFuZ2UgYXMgeW91IHNj +cm9sbCBhcm91bmQuIEZvciBleGFtcGxlIHRoZSB5ZWxsb3cgbGluZXMgdGhhdCBhcHBlYXIgYXQgdGhl +IGxhcmdlc3Qgc2NhbGUgY29ycmVzcG9uZCB0byB0aGUgc2xpZGVycyBqdW1waW5nIDY0IHVuaXRzLiBU +aGUgd2hpdGUgbGluZXMgYXQgdGhlIHNtYWxsZXN0IHNjYWxlIGNvcnJlc3BvbmQgdG8ganVtcHMgb2Yg +b25lIHVuaXQuIFRoZXJlIGFyZSA3IGxldmVsczrigKjigKhZZWxsb3cgPSA2NOKAqFRlYWwgPSAzMuKA +qFB1cnBsZSA9IDE24oCoR3JlZW4gPSA44oCoRGFyayBCbHVlID0gNOKAqFJlZCA9IDLigKhXaGl0ZSA9 +IDHigKjigKhMT0NL4oCo4oCoSWYgeW91IGZpbmQgYSBzZXF1ZW5jZSB5b3UgbGlrZSBidXQgd2FudCB0 +byBjaGFuZ2UgdGhlIHN5bnRoIHNvdW5kIHVzZSB0aGUgIkxvY2sgU2VxdWVuY2UgKFgpIiBidXR0b24u +IFRoaXMgd2lsbCBwcmV2ZW50IHlvdSBhY2NpZGVudGFsbHkgbW92aW5nIGluIGZyb20gbGVmdCB0byBy +aWdodCBhbmQgbWVzc2luZyB1cCB5b3VyIG5vdGUgcGF0dGVybi4gU2ltaWxhcmx5IGlmIHlvdSBmaW5k +IGEgc3ludGggc291bmQgdGhhdCB5b3UgbGlrZSwgYnV0IHdhbnQgdG8gY2hhbmdlIHRoZSBub3RlIHNl +cXVlbmNlLCB1c2UgdGhlICJMb2NrIFN5bnRoIChZKSIgYnV0dG9uLiDigKjigKhSQU5ET01JU0XigKji +gKhVc2UgdGhlIHJhbmRvbWlzZSB0byBqdW1wIHRvIGEgcmFuZG9tIHBvaW50IG9uIHRoZSBncmlkLiDi +gKjigKhUSEUgUVVFU1RJT05OQUlSReKAqOKAqFRoZXJlIGFyZSBhcm91bmQgMTcgc2ltcGxlIG11bHRp +cGxlIGNob2ljZSBxdWVzdGlvbnMgdG8gYW5zd2VyLCBhbmQgYSB0ZXh0IGZlZWRiYWNrIGJveC4gWW91 +ciBmZWVkYmFjayBpcyBhcHByZWNpYXRlZCENDQ</string> <dictionary key="NSAttributes"> <object class="NSColor" key="NSColor"> <int key="NSColorSpace">1</int> @@ -275,6 +278,6 @@ <string key="IBDocument.TargetRuntimeIdentifier">IBIPadFramework</string> <bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool> <int key="IBDocument.defaultPropertyAccessControl">3</int> - <string key="IBCocoaTouchPluginVersion">1930</string> + <string key="IBCocoaTouchPluginVersion">2083</string> </data> </archive>
--- a/IntroViewController.xib Fri Feb 22 17:41:38 2013 +0000 +++ b/IntroViewController.xib Wed Feb 27 11:39:07 2013 +0000 @@ -1,14 +1,14 @@ <?xml version="1.0" encoding="UTF-8"?> <archive type="com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB" version="8.00"> <data> - <int key="IBDocument.SystemTarget">1536</int> + <int key="IBDocument.SystemTarget">1552</int> <string key="IBDocument.SystemVersion">11G63</string> - <string key="IBDocument.InterfaceBuilderVersion">2844</string> + <string key="IBDocument.InterfaceBuilderVersion">3084</string> <string key="IBDocument.AppKitVersion">1138.51</string> <string key="IBDocument.HIToolboxVersion">569.00</string> <object class="NSMutableDictionary" key="IBDocument.PluginVersions"> <string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string> - <string key="NS.object.0">1930</string> + <string key="NS.object.0">2083</string> </object> <array key="IBDocument.IntegratedClassDependencies"> <string>IBProxyObject</string> @@ -42,6 +42,7 @@ <string key="NSFrame">{{326, 881}, {116, 44}}</string> <reference key="NSSuperview" ref="766721923"/> <reference key="NSWindow"/> + <reference key="NSNextKeyView"/> <string key="NSReuseIdentifierKey">_NS:9</string> <bool key="IBUIOpaque">NO</bool> <string key="targetRuntimeIdentifier">IBIPadFramework</string> @@ -85,37 +86,34 @@ <bool key="IBUIUserInteractionEnabled">NO</bool> <string key="targetRuntimeIdentifier">IBIPadFramework</string> <object class="NSMutableString" key="IBUIText"> - <bytes key="NS.bytes">V2VsY29tZSB0byB0aGUgIlNvbmljIFpvb20iLiBUaGlzIGlzIGEgcmVzZWFyY2ggcHJvamVjdCBhaW1l -ZCBhdCBmaW5kaW5nIG91dCBob3cgcGVvcGxlIGV4cGxvcmUgdGhlIHNwYWNlIG9mIHNvdW5kIHN5bnRo -ZXNpcyBwYXJhbWV0ZXJzLiANDUluIHRoaXMgYXBwIHRoZXJlIGFyZSBqdXN0IDEwIHBhcmFtZXRlcnMg -4oCTIDUgZm9yIHRoZSBzZXF1ZW5jZXIgcGF0dGVybiBnZW5lcmF0b3IgYW5kIDUgZm9yIGEgYmFzaWMg -Rk0vc3VidHJhY3RpdmUgc3ludGhlc2l6ZXIuIEhvd2V2ZXIsIGV2ZW4gd2l0aCBvbmx5IDEwIHBhcmFt -ZXRlcnMgdGhlIGFtb3VudCBvZiBkaWZmZXJlbnQgc291bmRzIHRvIGV4cGxvcmUgaXMgdmFzdDogaW4g -ZmFjdCB0aGVyZSBhcmUganVzdCBvdmVyIGEgYmlsbGlvbiB0cmlsbGlvbiBkaXN0aW5jdCBzZXR0aW5n -cyEgV2UgYWltIHRvIGxvb2sgYXQgd2hhdCBwYXRocyBwZW9wbGUgdGFrZSBpbiB0aGlzIGh1Z2Ugc3Bh -Y2UsIHdoYXQgcG9pbnRzIHRoZXkgbGlrZSBhbmQgZGlzbGlrZSwgYW5kIHVzZSB0aGUgZGF0YSB0byBj -cmVhdGUgc3ludGhzIHRoYXQgYXJlIGVhc2llciB0byBuYXZpZ2F0ZSwgYW5kIGhvcGVmdWxseSBlbmNv -dXJhZ2UgY3JlYXRpdml0eS4NDVRoZXJlIGFyZSB0d28gaW50ZXJmYWNlcyBwcmVzZW50ZWQgaGVyZS4g -VGhlIGZpcnN0IGlzIG9uZSB5b3Ugd2lsbCBwcm9iYWJseSBiZSB1c2VkIHRvIGlmIHlvdSBhcmUgYSBt -dXNpY2lhbjogMTAgc2xpZGVycyBmb3IgZWFjaCBvZiB0aGUgcGFyYW1ldGVycy4gVGhlIHNlY29uZCBp -cyBzb21ld2hhdCBuZXc6IGV2ZXJ5IG9uZSBvZiB0aGUgYmlsbGlvbiB0cmlsbGlvbiBwb2ludHMgaGFz -IGJlZW4gbWFwcGVkIHRvIGEgMkQgc3VyZmFjZSAoaWYgeW91IHJlYWxseSB3YW50IHRvIGtub3cgLSBl -YWNoIHNxdWFyZSB5b3Ugc2VlIGlzIGEgc3F1YXNoZWQgb3V0IDEwRCBoeXBlcmN1YmUsIGFuZCBhbGwg -b2YgdGhlIDEwMjQgc3ViLXNxdWFyZXMgYXJlIHRoZSDigJxjb3JuZXJz4oCdIG9mIHRoaXMgMTAtY3Vi -ZSwgd2hpY2ggdGhlbXNlbHZlcyBhcmUgYnVpbHQgZnJvbSBzbWFsbGVyIGh5cGVyY3ViZXMgYW5kIHNv -IG9u4oCmKS4gQXMgZmFyIGFzIHBvc3NpYmxlLCB0aGUgZnVydGhlciB5b3UgdHJhdmVsIGFsb25nIHRo -aXMgMkQgc3VyZmFjZSwgdGhlIG1vcmUgZGlmZmVyZW50IHRoZSBzb3VuZCB3aWxsIGJlY29tZS4NDVVw -IGRvd24gbW92ZW1lbnQgY29udHJvbHMgdGhlIHN5bnRoIHRpbWJyZSwgbGVmdCByaWdodCBjb250cm9s -cyB0aGUgc2VxdWVuY2VyLiBXaGVuIHlvdSBjbGljayDigJxzYXZlIHByZXNldOKAnSB5b3Ugd2lsbCBk -cm9wIGEgcGluIG9udG8gdGhlIHN1cmZhY2UsIGFuZCB5b3UgY2FuIHJldmlzaXQgdGhpcyBwb2ludCBh -dCBhbnl0aW1lIGJ5IHNjcm9sbGluZyB0byBpdC4gVGhpbmsgb2YgaXQgbGlrZSBhICJHb29nbGUgTWFw -cyIgZm9yIHN5bnRoIHNvdW5kcy4uLg0NWW91IGNhbiB1c2UgYSBwaW5jaCBnZXN0dXJlIHRvIHpvb20g -aW4gYW5kIG91dCBvZiB0aGUgc3VyZmFjZS4gWm9vbWluZyBpbiB3aWxsIGVuYWJsZSB5b3UgdG8gZXhw -bG9yZSBzbWFsbGVyIGxvY2FsaXRpZXMgb2YgdGhlIHNvdW5kIHNwYWNlLiBab29taW5nIG91dCB3aWxs -IGdpdmUgeW91IGEgYmlnZ2VyIHBlcnNwZWN0aXZlLCBidXQgb2YgY291cnNlIHRoZSBzb3VuZCB3aWxs -IGJlY29tZSBmYXIgbW9yZSByYW5kb20gYW5kIHVuY29udHJvbGxhYmxlIGFzIHlvdSBtb3ZlIGJpZ2dl -ciBkaXN0YW5jZXMuDQ1XaGF0IHdlIGFyZSBhc2tpbmcgeW91LCB0aGUgcGFydGljaXBhbnQsIHRvIGRv -IGlzIHVzZSBib3RoIHRoZSB6b29tZXIgYW5kIHRoZSBzbGlkZXJzIGZvciA2IG1pbnV0ZXMgZWFjaCwg + <bytes key="NS.bytes">V2VsY29tZSB0byB0aGUgIlNvbmljIFpvb20iLiBUaGlzIGlzIGEgUXVlZW4gTWFyeSBVbml2ZXJzaXR5 +IFBoRCByZXNlYXJjaCBwcm9qZWN0IGFpbWVkIGF0IGZpbmRpbmcgb3V0IGhvdyBwZW9wbGUgZXhwbG9y +ZSB0aGUgc3BhY2Ugb2Ygc291bmQgc3ludGhlc2lzIHBhcmFtZXRlcnMuIA0NSW4gdGhpcyBhcHAgdGhl +cmUgYXJlIGp1c3QgMTAgcGFyYW1ldGVycyDigJMgNSBmb3IgdGhlIHNlcXVlbmNlciBwYXR0ZXJuIGdl +bmVyYXRvciBhbmQgNSBmb3IgYSBiYXNpYyBGTS9zdWJ0cmFjdGl2ZSBzeW50aGVzaXplci4gSG93ZXZl +ciwgZXZlbiB3aXRoIG9ubHkgMTAgcGFyYW1ldGVycyB0aGUgYW1vdW50IG9mIGRpZmZlcmVudCBzb3Vu +ZHMgdG8gZXhwbG9yZSBpcyB2YXN0OiBpbiBmYWN0IHRoZXJlIGFyZSBqdXN0IG92ZXIgYSBiaWxsaW9u +IHRyaWxsaW9uIGRpc3RpbmN0IHNldHRpbmdzISBXZSBhaW0gdG8gbG9vayBhdCB3aGF0IHBhdGhzIHBl +b3BsZSB0YWtlIGluIHRoaXMgaHVnZSBzcGFjZSwgd2hhdCBwb2ludHMgdGhleSBsaWtlIGFuZCBkaXNs +aWtlLCBhbmQgdXNlIHRoZSBkYXRhIHRvIGNyZWF0ZSBzeW50aHMgdGhhdCBhcmUgZWFzaWVyIHRvIG5h +dmlnYXRlLCBhbmQgaG9wZWZ1bGx5IGVuY291cmFnZSBjcmVhdGl2aXR5Lg0NVGhlcmUgYXJlIHR3byBp +bnRlcmZhY2VzIHByZXNlbnRlZCBoZXJlLiBUaGUgZmlyc3QgaXMgb25lIHlvdSB3aWxsIHByb2JhYmx5 +IGJlIHVzZWQgdG8gaWYgeW91IGFyZSBhIG11c2ljaWFuOiAxMCBzbGlkZXJzIGZvciBlYWNoIG9mIHRo +ZSBwYXJhbWV0ZXJzLiBUaGUgc2Vjb25kIGlzIHNvbWV3aGF0IG5ldzogZXZlcnkgb25lIG9mIHRoZSBi +aWxsaW9uIHRyaWxsaW9uIHBvaW50cyBoYXMgYmVlbiBtYXBwZWQgdG8gYSAyRCBzdXJmYWNlLiBCdXQg +YmFzaWNhbGx5LCB0aGUgZnVydGhlciB5b3UgdHJhdmVsIGFsb25nIHRoaXMgMkQgc3VyZmFjZSwgdGhl +IG1vcmUgZGlmZmVyZW50IHRoZSBzb3VuZCB3aWxsIGJlY29tZS4NDVVwIGRvd24gbW92ZW1lbnQgY29u +dHJvbHMgdGhlIHN5bnRoIHRpbWJyZSwgbGVmdCByaWdodCBjb250cm9scyB0aGUgc2VxdWVuY2VyLiBX +aGVuIHlvdSBjbGljayDigJxzYXZlIHByZXNldOKAnSB5b3Ugd2lsbCBkcm9wIGEgcGluIG9udG8gdGhl +IHN1cmZhY2UsIGFuZCB5b3UgY2FuIHJldmlzaXQgdGhpcyBwb2ludCBhdCBhbnl0aW1lIGJ5IHNjcm9s +bGluZyB0byBpdC4gVGhpbmsgb2YgaXQgbGlrZSBhICJHb29nbGUgTWFwcyIgZm9yIHN5bnRoIHNvdW5k +cy4uLg0NWW91IGNhbiB1c2UgYSBwaW5jaCBnZXN0dXJlIHRvIHpvb20gaW4gYW5kIG91dCBvZiB0aGUg +c3VyZmFjZS4gWm9vbWluZyBpbiB3aWxsIGVuYWJsZSB5b3UgdG8gZXhwbG9yZSBzbWFsbGVyIGxvY2Fs +aXRpZXMgb2YgdGhlIHNvdW5kIHNwYWNlLiBab29taW5nIG91dCB3aWxsIGdpdmUgeW91IGEgYmlnZ2Vy +IHBlcnNwZWN0aXZlLCBidXQgb2YgY291cnNlIHRoZSBzb3VuZCB3aWxsIGJlY29tZSBmYXIgbW9yZSBy +YW5kb20gYW5kIHVuY29udHJvbGxhYmxlIGFzIHlvdSBtb3ZlIGJpZ2dlciBkaXN0YW5jZXMuDQ1XaGF0 +IHdlIGFyZSBhc2tpbmcgeW91LCB0aGUgcGFydGljaXBhbnQsIHRvIGRvIGlzIHVzZSB0aGUgem9vbWVy +LCB0aGUgc2xpZGVycyBhbmQgYSBjb21iaW5hdGlvbiBvZiBib3RoIGZvciA2IG1pbnV0ZXMgZWFjaCwg YW5kIHNhdmUgYW55IHNvdW5kcyB0aGF0IHlvdSBsaWtlLiBBbHNvIGNoZWNrIG91dCB0aGUgInJhbmRv bWlzZSIgYW5kICJsb2NrIiBidXR0b25zLiBBZnRlciB0aGlzIGEgc2hvcnQgcXVlc3Rpb25uYWlyZSB3 aWxsIGFwcGVhciB0aGF0IHdpbGwgaGVscCB1cyBhc3Nlc3MgdGhlIGludGVyZmFjZSBmdXJ0aGVyLiBB @@ -344,6 +342,6 @@ <string key="IBDocument.TargetRuntimeIdentifier">IBIPadFramework</string> <bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool> <int key="IBDocument.defaultPropertyAccessControl">3</int> - <string key="IBCocoaTouchPluginVersion">1930</string> + <string key="IBCocoaTouchPluginVersion">2083</string> </data> </archive>
--- a/PresetAlertViewController.mm Fri Feb 22 17:41:38 2013 +0000 +++ b/PresetAlertViewController.mm Wed Feb 27 11:39:07 2013 +0000 @@ -53,6 +53,9 @@ if([[[alertView textFieldAtIndex:0] text] isEqualToString:@"newuser"]){ // call new user stufff eventLogger.newUser(); + }else if([[[alertView textFieldAtIndex:0] text] isEqualToString:@"printall"]){ + presetManager.printAll(); + eventLogger.printAll(); }else{ presetManager.addPreset([[[alertView textFieldAtIndex:0] text] cStringUsingEncoding:NSASCIIStringEncoding]); }
--- a/ServerComms.h Fri Feb 22 17:41:38 2013 +0000 +++ b/ServerComms.h Wed Feb 27 11:39:07 2013 +0000 @@ -1,18 +1,36 @@ // // ServerComms.h -// sonicZoom +// httpPost // -// Created by Robert Tubb on 21/02/2013. -// +// Created by Robert Tubb on 24/02/2013. +// Copyright (c) 2013 Robert Tubb. All rights reserved. // #import <Foundation/Foundation.h> -@interface ServerComms : NSObject <NSURLConnectionDelegate> --(void)test; --(void)postRequest:(NSString *)msgbody; +@interface ServerComms : NSObject <NSURLConnectionDataDelegate> +{ +NSURL *serverURL; +NSString *filePath; +id delegate; +SEL doneSelector; +SEL errorSelector; -- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response; -- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data; -- (NSCachedURLResponse *)connection:(NSURLConnection *)connection willCacheResponse:(NSCachedURLResponse *)cachedResponse; +BOOL uploadDidSucceed; +} + +- (id)initWithURL: (NSURL *)serverURL + filePath: (NSString *)filePath + delegate: (id)delegate + doneSelector: (SEL)doneSelector + errorSelector: (SEL)errorSelector; + +- (NSString *)filePath; + +-(BOOL)doSyncPostRequest:(NSString *)type withData:(NSString *)data; +-(BOOL)doPostRequest:(NSString *)type withData:(NSString *)data; +@property (strong,nonatomic) NSMutableData * data; +@property BOOL requestInProgress; +@property (strong, nonatomic) NSString * currentRequestType; + @end
--- a/ServerComms.mm Fri Feb 22 17:41:38 2013 +0000 +++ b/ServerComms.mm Wed Feb 27 11:39:07 2013 +0000 @@ -1,55 +1,184 @@ // // ServerComms.m -// sonicZoom +// httpPost // -// Created by Robert Tubb on 21/02/2013. -// +// Created by Robert Tubb on 24/02/2013. +// Copyright (c) 2013 Robert Tubb. All rights reserved. // #import "ServerComms.h" +#import "eventLogger.h" + +extern EventLogger eventLogger; @implementation ServerComms --(void)test{ - NSLog(@"hi"); +// + + +// asynchronous one +-(BOOL)doPostRequest:(NSString *)type withData:(NSString *)data{ + + if(self.requestInProgress){ + return NO; + } + self.currentRequestType = type; + NSString *localServerURL = @"http://127.0.0.1:8080/testservice/"; + NSString *webServerURL = @"http://www.isophonics.net/datacollector/"; + + NSString *urls = [webServerURL stringByAppendingString:type]; + NSURL *url = [NSURL URLWithString:urls]; + + + // request object + NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; + + // the data + NSString *post = [@"jsontext=" stringByAppendingString:[NSString stringWithFormat:data]]; + NSData *postData = [post dataUsingEncoding:NSUTF8StringEncoding]; + // length of data + NSString *postLength = [NSString stringWithFormat:@"%d",[postData length]]; + + // request properties/header fields + [request setHTTPMethod:@"POST"]; + [request setValue:postLength forHTTPHeaderField:@"Content-Length"]; + [request setValue:@"gzip" forHTTPHeaderField:@"Accept-Encoding"]; + [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; + [request setHTTPBody:postData ]; + + NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:request delegate:self]; + self.requestInProgress = YES; + return YES; + // asynchronous one?? } --(void)postRequest:(NSString *)msgbody{ - NSMutableURLRequest *request = [[NSMutableURLRequest alloc] - initWithURL:[NSURL - URLWithString:msgbody]]; +//-------------------------------------------------------------------- + +// schncronous +-(BOOL)doSyncPostRequest:(NSString *)type withData:(NSString *)data{ + BOOL success; + NSString *localServerURL = @"http://127.0.0.1:8080/testservice/"; + NSString *webServerURL = @"http://www.isophonics.net/datacollector/"; + + NSString *urls = [webServerURL stringByAppendingString:type]; + NSURL *url = [NSURL URLWithString:urls]; + + + // request object + NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; + + // the data + NSString *post = [@"jsontext=" stringByAppendingString:[NSString stringWithFormat:data]]; + NSData *postData = [post dataUsingEncoding:NSUTF8StringEncoding]; + // length of data + NSString *postLength = [NSString stringWithFormat:@"%d",[postData length]]; + + // request properties/header fields [request setHTTPMethod:@"POST"]; - [request setValue:@"text/xml" - forHTTPHeaderField:@"Content-type"]; + [request setValue:postLength forHTTPHeaderField:@"Content-Length"]; + [request setValue:@"gzip" forHTTPHeaderField:@"Accept-Encoding"]; + [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; + [request setHTTPBody:postData ]; - NSString *xmlString = @"<data><item>Item 1</item><item>Item 2</item></data>"; + NSURLResponse* response; + NSError* error = nil; + NSData* result = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; + + NSString *responseDataString = [[NSString alloc] initWithData:result encoding:NSUTF8StringEncoding]; - [request setValue:[NSString stringWithFormat:@"%d", - [xmlString length]] - forHTTPHeaderField:@"Content-length"]; + //NSString* responseDataString = [NSString stringWithUTF8String: ]; + NSLog(@"didRecieveDta %@", responseDataString); + [self.data appendData:result]; - [request setHTTPBody:[xmlString - dataUsingEncoding:NSUTF8StringEncoding]]; + if([responseDataString isEqualToString:@"testConnection:OK"]){ + + eventLogger.testConnectionOK(); + success = true; + }else if([responseDataString isEqualToString:@"questionnaire:OK"]){ + eventLogger.questionnaireOK(); + success = true; + }else if([responseDataString isEqualToString:@"eventlog:OK"]){ + // call eventLogger eventlogUploadOK + eventLogger.eventlogOK(); + success = true; + }else{ + success = false; + } - [[NSURLConnection alloc] - initWithRequest:request - delegate:self]; + // else check error?? + + // check result + self.requestInProgress = NO; + return success; +} +//------------------------------------------------------------------------------------------------- + +- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { + [self.data setLength:0]; + NSLog(@"didReceiveResponse : %@",response); } +- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)d { + NSString *responseDataString = [[NSString alloc] initWithData:d encoding:NSUTF8StringEncoding]; + + //NSString* responseDataString = [NSString stringWithUTF8String: ]; + NSLog(@"didRecieveDta %@", responseDataString); + [self.data appendData:d]; + + if([responseDataString isEqualToString:@"testConnection:OK"]){ -- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{ - NSLog(@"!!!!!!!!!!!!!!!!!!!!connection error"); + eventLogger.testConnectionOK(); + }else if([responseDataString isEqualToString:@"questionnaire:OK"]){ + eventLogger.questionnaireOK(); + }else if([responseDataString isEqualToString:@"eventlog:OK"]){ + // call eventLogger eventlogUploadOK + eventLogger.eventlogOK(); + } + // or? + /* + if([self.currentRequestType isEqualToString:@"testConnection"){ + + } + */ } -- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{ - NSLog(@"!!!!!!!!!!!!!!!!!!!!didReceiveResponse"); +- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { + UIAlertView * av = [ [UIAlertView alloc] initWithTitle:NSLocalizedString(@"Error", @"") + message:[error localizedDescription] + delegate:nil + cancelButtonTitle:NSLocalizedString(@"OK", @"") + otherButtonTitles:nil ]; + [av show]; + NSLog(@"fail with error"); + self.requestInProgress = NO; + // we won't know what kind of request method this was... } -- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{ - NSLog(@"!!!!!!!!!!!!!!!!!!!!didReceiveData"); +- (void)connectionDidFinishLoading:(NSURLConnection *)connection { + NSString *responseText = [[NSString alloc] initWithData:self.data encoding:NSUTF8StringEncoding]; + + // Do anything you want with it + NSLog(@"response text: %@",responseText); + self.requestInProgress = NO; + } +// Handle basic authentication challenge if needed +- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge { + NSString *username = @"username"; + NSString *password = @"password"; + + NSURLCredential *credential = [NSURLCredential credentialWithUser:username + password:password + persistence:NSURLCredentialPersistenceForSession]; + [[challenge sender] useCredential:credential forAuthenticationChallenge:challenge]; +} +/* +- (NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)redirectResponse{ + +} - (NSCachedURLResponse *)connection:(NSURLConnection *)connection willCacheResponse:(NSCachedURLResponse *)cachedResponse{ } +*/ @end
--- a/TimedSessionController.h Fri Feb 22 17:41:38 2013 +0000 +++ b/TimedSessionController.h Wed Feb 27 11:39:07 2013 +0000 @@ -5,7 +5,7 @@ // Created by Robert Tubb on 18/02/2013. // // -#define SECONDS_PER_INTERFACE 10 +#define SECONDS_PER_INTERFACE 300 #import <Foundation/Foundation.h>
--- a/TimedSessionController.mm Fri Feb 22 17:41:38 2013 +0000 +++ b/TimedSessionController.mm Wed Feb 27 11:39:07 2013 +0000 @@ -9,7 +9,6 @@ #import "TimedSessionController.h" @interface TimedSessionController() // private stuff - @end @implementation TimedSessionController @@ -56,6 +55,7 @@ -(void)showNextPrompt{ NSString *themessage; scount++; + ((testApp *)self.theOFAppRef)->moveVel = TwoVector(); // stops movement if(scount < 3){ themessage = [alertMessages objectAtIndex:orders[theOrder][scount] ]; }else{ @@ -85,6 +85,7 @@ if(scount < 3){ NSInteger next = orders[theOrder][scount]; + ((testApp *)self.theOFAppRef)->interfaceSelected(next); self.theCurrentTimer = [NSTimer scheduledTimerWithTimeInterval:SECONDS_PER_INTERFACE target:self selector:@selector(showNextPrompt) userInfo:nil repeats:NO];
--- a/eventLogger.h Fri Feb 22 17:41:38 2013 +0000 +++ b/eventLogger.h Wed Feb 27 11:39:07 2013 +0000 @@ -31,7 +31,7 @@ #define EVENT_LOG_FILENAME "log.json" //#define LOGGING_SERVER_URL "http://www.isophonics.net/datacollector/" #define LOGGING_SERVER_URL "http://127.0.0.1:8080/testservice/" -#define UPLOAD_CHUNK_SIZE 100 +#define UPLOAD_CHUNK_SIZE 20 #define QUESTIONNAIRE_ENABLE_TIME 100000 // milliseconds #define APP_CREATION_TIME 381429000000 // milliseconds to the time i wrote this wee blighter saves digits @@ -159,6 +159,15 @@ void logEvent(const leventType& evtType,const TwoVector& centre = TwoVector(), const double& scale = 1.0, const int& sliderID = -1, const double& sliderVal = 0.0); void questionnaireAnswersObtained(vector<int> answers, const char* userComments); void urlResponse(ofHttpResponse & response); + + void questionnaireOK(); + void eventlogOK(); + void testConnectionOK(); + void questionnaireNotOK(); + void eventlogNotOK(); + void testConnectionNotOK(); + + void printAll(); private: int currentHTTPRequestID; @@ -182,19 +191,16 @@ void deleteLogs(); // new user bool uploadEventLog(bool async); void firstEverAppOpen(); - void readJsonToLog(const string &jsonFile); + void checkExistingLogFile(const string &jsonFile); void uploadQuestionnaire(); bool sendToServer(string functionName, Json::Value jsonData, bool async); + + + + Json::Value logsToJson(); Json::Value questionnaireToJson(); - void printAll(){ - cout << "ALL LOGGED EVENTS!: \n"; - vector<lEvent>::iterator evIter; - for(evIter = theEvents.begin(); evIter < theEvents.end(); evIter++){ - cout << *evIter; - - } - }; + // ServerComms *serverComms;
--- a/eventLogger.mm Fri Feb 22 17:41:38 2013 +0000 +++ b/eventLogger.mm Wed Feb 27 11:39:07 2013 +0000 @@ -35,26 +35,129 @@ void EventLogger::init(){ - readJsonToLog(ofxiPhoneGetDocumentsDirectory() + EVENT_LOG_FILENAME); + checkExistingLogFile(ofxiPhoneGetDocumentsDirectory() + EVENT_LOG_FILENAME); sessionStartTime = ofGetSystemTime(); testConnection(); logEvent(APP_STARTED); - stringstream r; - r << LOGGING_SERVER_URL << "testConnection?jsontext=" << "{\"test\":\"test\"}&Content-Length=456"; + NSString *jsondata; + jsondata=@"{\"test\":\"test\""; + serverComms = [[ServerComms alloc] init]; - NSString *urlstring; - urlstring = @"http://127.0.0.1:8080/testservice/testConnection?jsontext={\"objc post\":\"obj c post\"}"; - serverComms = [[ServerComms alloc] init]; - [serverComms postRequest:urlstring]; +} +//--------------------------------------------------------------------------- +// this reads the persistent log file , checks if we've used the app before and +// if we've answered questionnaire or not +void EventLogger::checkExistingLogFile(const string &jsonFile){ + Json::Value root; + Json::Reader reader; + + ///////////// + // read file + + ifstream theFile(jsonFile.c_str()); + stringstream fileText; + string line; + if(!theFile){ + + firstEverAppOpen(); + return; + }else{ + while(theFile){ + theFile >> line; + // cout << line; // lots!!!! + fileText << line; + } + theFile.close(); + } + + // otherwise, we've been in here before + + ///////////// + // Parse json + cout << "size of log JSON string:" << fileText.str().length() << "BYTES \n"; + + bool parsingSuccessful = reader.parse( fileText.str(), root ); + + if ( !parsingSuccessful ) + { + // report to the user the failure and their locations in the document. + std::cout << "Failed to parse event log JSON: \n" + << reader.getFormattedErrorMessages(); + return; + } + + ///////////////// + // now put user deets into variables + + userName = root["userName"].asString(); + deviceID = root["deviceID"].asLargestInt(); + nextUploadNumber = root["uploadNumber"].asInt(); + savedInteractionTime = root["savedInteractionTime"].asLargestInt(); + questionnaireCompleted = root["questionnaireCompleted"].asBool(); + questionnaireUploaded = root["questionnaireUploaded"].asBool(); + interfaceOrder = root["interfaceOrder"].asInt(); + + // check for unuploaded evts + const Json::Value jlogs = root["events"]; - urlstring = nil; + for ( int index = 0; index < jlogs.size(); ++index ) theEvents.push_back(lEvent(jlogs[index])); + if(theEvents.size() > nextUploadQty && ! logUploadInProgress){ + //try to upload + uploadEventLog(true); + } + + ////////////// + // what stage is the experiment at?? + + if(questionnaireCompleted && !questionnaireUploaded){ + // then read it in and upload it + Json::Value JQ = root["questionnaire"]; + Json::Value JArray = JQ["qAnswers"]; + if(JArray.size() < 2){ + cout << "Error - status of questionnaire is wierd\n"; + } + for ( unsigned int i = 0; i < JArray.size(); i++ ) + { + questionnaireAnswers.push_back(JArray[i].asInt()); + } + questionnaireComments = JQ["comments"].toStyledString(); + uploadQuestionnaire(); + } + //TODO if questionnaire wasn't reached but still opened then set the timer to something sensible + + if(!questionnaireCompleted){ + // for now sod it, start from scratch + firstEverAppOpen(); + return; + } + cout << "Total interaction time: " << savedInteractionTime << '\n'; + + //timer.setInteractionTime(savedInteractionTime); + //timer.setOrderFromPrevious(interfaceOrder); + } //--------------------------------------------------------------------------- + +void EventLogger::firstEverAppOpen(){ + cout<<"no event log file - first APP open\n"; + nextUploadNumber = 0; + deviceID = ofGetSystemTimeMicros(); + savedInteractionTime = 0; + questionnaireCompleted = false; + questionnaireUploaded = false; + + ((testApp *)ofGetAppPtr())->showIntro(); + consentGiven = false; + +} + + +//--------------------------------------------------------------------------- void EventLogger::questionnaireAnswersObtained(vector<int> answers, const char* userComments){ questionnaireCompleted = true; @@ -73,19 +176,7 @@ } //--------------------------------------------------------------------------- bool EventLogger::sendToServer(string functionName, Json::Value jsonData, bool async = false){ - bool sent; - stringstream request; - request << LOGGING_SERVER_URL << functionName << "?jsontext="; - /* - if(functionName == "testConnection"){ - request = "http://127.0.0.1:8080/testservice/testConnection?jsontext="; - }else if(functionName == "questionnaire"){ - request = "http://127.0.0.1:8080/testservice/questionnaire?jsontext="; - }else if(functionName == "eventlog"){ - request = "http://127.0.0.1:8080/testservice/eventlog?jsontext="; - } - */ Json::FastWriter writer; string jsontext = writer.write( jsonData ); @@ -93,48 +184,53 @@ if (!jsontext.empty() && jsontext[jsontext.length()-1] == '\n') { jsontext.erase(jsontext.length()-1); } + ostringstream jd; + jd << jsontext; + NSString *theData = [NSString stringWithUTF8String:jd.str().c_str()]; + NSString *theType = [NSString stringWithUTF8String:functionName.c_str()]; - request << jsontext; + if(async){ + [serverComms doPostRequest:theType withData:theData]; + }else{ + bool success = [serverComms doSyncPostRequest:theType withData:theData]; + return success; + } - cout << request.str(); - - if(!async){ - ofURLFileLoader fileLoader; - ofHttpResponse resp; - resp = fileLoader.get(request.str()); - - cout << "HTTP STATUS " << resp.status << "\n"; - cout << "HTTP ERROR " << resp.error << "\n"; - cout << "HTTP DATA " << resp.data << "\n"; // ofBuffer - - stringstream response; - response << resp.data; - - if (resp.status == 200){ - if(response.str() == "OK"){ - - sent = true; - }else{ - // not ok - // problem serverside - sent = false; - } - }else{ - - sent = false; - // SHOW AN ALERT TO USER? - } - - return sent; - }else{ // async - ofURLFileLoader fileLoader; - currentHTTPRequestID = ofLoadURLAsync(request.str(), functionName); - ofRegisterURLNotification(this); - - return true; // ??? - } } //----------------------------- +void EventLogger::questionnaireOK(){ + questionnaireUploaded = true; +} +//----------------------------- +void EventLogger::eventlogOK(){ + //theEvents.clear(); + cout << "EVENT LOG UPLOAD SUCCESS\n"; + nextUploadNumber++; + logUploadInProgress = false; +} +//----------------------------- +void EventLogger::testConnectionOK(){ + cout << "^^^^^^^^ server connection OK ^^^^^^^^ \n"; + serverConnectionOK = true; +} +//----------------------------- +void EventLogger::questionnaireNotOK(){ + questionnaireUploaded = false; +} +//----------------------------- +void EventLogger::eventlogNotOK(){ + // try later + nextUploadQty += UPLOAD_CHUNK_SIZE; + logUploadInProgress = false; +} +//----------------------------- +void EventLogger::testConnectionNotOK(){ + cout << "^^^^^^^^ server connection NOT OK ^^^^^^^^ \n"; + serverConnectionOK = false; + // alert? + +} +/* void EventLogger::urlResponse(ofHttpResponse & response){ cout << "gotHTTPRequestStatus\n"; cout << "HTTP REQUEST NAME " << response.request.name << "\n"; @@ -192,94 +288,15 @@ } } + */ //--------------------------------------------------------------------------- bool EventLogger::testConnection(){ Json::Value root; - root["x"] = "y"; - - + root["test"] = "test"; sendToServer("testConnection", root, true); } //--------------------------------------------------------------------------- -// this reads the persistent log file , checks if we've used the app before and -// if we've answered questionnaire or not -void EventLogger::readJsonToLog(const string &jsonFile){ - Json::Value root; - Json::Reader reader; - - - ifstream theFile(jsonFile.c_str()); - stringstream fileText; - string line; - if(!theFile){ - - firstEverAppOpen(); - - return; - }else{ - while(theFile){ - theFile >> line; - // cout << line; // lots!!!! - fileText << line; - } - theFile.close(); - } - - cout << "size of log JSON string:" << fileText.str().length() << "BYTES \n"; - - bool parsingSuccessful = reader.parse( fileText.str(), root ); - - if ( !parsingSuccessful ) - { - // report to the user the failure and their locations in the document. - std::cout << "Failed to parse event log JSON: \n" - << reader.getFormattedErrorMessages(); - return; - } - - // now put user deets into variables - userName = root["userName"].asString(); - deviceID = root["deviceID"].asLargestInt(); - nextUploadNumber = root["uploadNumber"].asInt(); - savedInteractionTime = root["savedInteractionTime"].asLargestInt(); - questionnaireCompleted = root["questionnaireCompleted"].asBool(); - questionnaireUploaded = root["questionnaireUploaded"].asBool(); - interfaceOrder = root["interfaceOrder"].asInt(); - - if(questionnaireCompleted && !questionnaireUploaded){ - // then read it in and upload it - Json::Value JQ = root["questionnaire"]; - Json::Value JArray = JQ["qAnswers"]; - if(JArray.size() < 2){ - cout << "Error - status of questionnaire is wierd\n"; - } - for ( unsigned int i = 0; i < JArray.size(); i++ ) - { - questionnaireAnswers.push_back(JArray[i].asInt()); - } - questionnaireComments = JQ["comments"].toStyledString(); - uploadQuestionnaire(); - } - - // check for unuploaded evts - const Json::Value jlogs = root["events"]; - - for ( int index = 0; index < jlogs.size(); ++index ) theEvents.push_back(lEvent(jlogs[index])); - if(theEvents.size() > nextUploadQty && ! logUploadInProgress){ - //try to upload - uploadEventLog(true); - } - // TODO if the total interaction time is greater than a certain amount && no questions answered - questionnaire time! - cout << "Total interaction time: " << savedInteractionTime << '\n'; - - //timer.setInteractionTime(savedInteractionTime); - //timer.setOrderFromPrevious(interfaceOrder); - -} - - -//--------------------------------------------------------------------------- bool EventLogger::uploadEventLog(bool async){ @@ -294,7 +311,7 @@ }else{ // if success - clear memory - theEvents.clear(); + //theEvents.clear(); cout << "UPLOAD SUCCESS\n"; nextUploadNumber++; } @@ -309,20 +326,7 @@ //---------------------------------------------------------------------------- //void EventLogger::deleteLogFile(){ -//--------------------------------------------------------------------------- -void EventLogger::firstEverAppOpen(){ - cout<<"no event log file - first APP open\n"; - nextUploadNumber = 0; - deviceID = ofGetSystemTimeMicros(); - savedInteractionTime = 0; - questionnaireCompleted = false; - questionnaireUploaded = false; - - ((testApp *)ofGetAppPtr())->showIntro(); - consentGiven = false; - -} //--------------------------------------------------------------------------- // only called when doing supervised tests void EventLogger::newUser(){ @@ -492,9 +496,8 @@ root["savedInteractionTime"] = savedInteractionTime; root["questionnaireCompleted"] = questionnaireCompleted; root["questionnaireUploaded"] = questionnaireUploaded; - if(questionnaireCompleted && !questionnaireUploaded){ - root["questionnaire"] = questionnaireToJson(); - } + root["questionnaire"] = questionnaireToJson(); + int i = 0; for(eventIter = theEvents.begin(); eventIter < theEvents.end(); eventIter++){ @@ -520,7 +523,6 @@ questionnaire[i] = (*aIter); i++; } - cout << questionnaireComments << "\n"; root["qAnswers"] = questionnaire; root["comments"] = questionnaireComments; @@ -531,6 +533,13 @@ return root; } + //--------------------------------------------------------------------------- +void EventLogger::printAll(){ + cout << "-----------------ALL LOGGED EVENTS----------------- \n"; + vector<lEvent>::iterator evIter; + cout << logsToJson() << "\n"; + cout << "---------------------QUESTIONNAIRE---------------- \n"; + cout << questionnaireToJson() << "\n"; +}; //--------------------------------------------------------------------------- -//---------------------------------------------------------------------------
--- a/presetManager.h Fri Feb 22 17:41:38 2013 +0000 +++ b/presetManager.h Wed Feb 27 11:39:07 2013 +0000 @@ -114,7 +114,7 @@ void drawPresetsInRange(const TwoVector min, const TwoVector max); void printAll(); - void startupLoadAll(); // get stuff from XML + void startLoadAll(); // get stuff from XML void exitAndSaveAll(); // save to XML, delete presets array (?) void clearAll(); Json::Value allPresetsToJson();
--- a/presetManager.mm Fri Feb 22 17:41:38 2013 +0000 +++ b/presetManager.mm Wed Feb 27 11:39:07 2013 +0000 @@ -157,12 +157,8 @@ } //--------------------------------------------------------------------------- void PresetManager::printAll(){ - cout << "ALL PRESETS: \n"; - vector<Preset *>::iterator presetIter; - for(presetIter = thePresets.begin(); presetIter < thePresets.end(); presetIter++){ - cout << **presetIter; - - } + cout << "----------------ALL PRESETS-------------: \n"; + cout << allPresetsToJson() << "\n"; } //--------------------------------------------------------------------------- void PresetManager::showNameDialog(){ @@ -243,7 +239,7 @@ } //----------------------------------------------cu----------------------------- -void PresetManager::startupLoadAll(){ +void PresetManager::startLoadAll(){ // get stuff from file // load file
--- a/testApp.mm Fri Feb 22 17:41:38 2013 +0000 +++ b/testApp.mm Wed Feb 27 11:39:07 2013 +0000 @@ -112,7 +112,7 @@ */ // initialise user logging stuff - presetManager.startupLoadAll(); + presetManager.startLoadAll(); tsc = [[TimedSessionController alloc] init]; [tsc setAppRef:(id)this]; eventLogger.init(); @@ -301,9 +301,8 @@ int width = 320; float dim = (height-10.0*OFX_UI_GLOBAL_WIDGET_SPACING)/10.0; // LEFT GUI - sliderGUI = new ofxUICanvas(0,100,SLIDER_GUI_WIDTH,getHeight()); - - + sliderGUI = new ofxUICanvas(0,160,SLIDER_GUI_WIDTH,getHeight()); + // Uh.. loop this for(int i = 1; i<=10;i++){