Skip to content

Commit

Permalink
Added timestamp to data so multiple watches sync
Browse files Browse the repository at this point in the history
  • Loading branch information
wildhart committed Jan 22, 2016
1 parent 371f2df commit 36d7346
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 25 deletions.
3 changes: 2 additions & 1 deletion appinfo.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
"KEY_LAST_RESET": 8,
"KEY_SHOW_CLOCK": 3,
"KEY_TIMER": 2,
"KEY_TIMESTAMP": 9,
"KEY_VERSION": 1
},
"capabilities": [
Expand Down Expand Up @@ -36,7 +37,7 @@
"shortName": "Job Timer",
"uuid": "18560a47-2011-431b-8da4-844f7d38d992",
"versionCode": 1,
"versionLabel": "1.1",
"versionLabel": "1.2",
"watchapp": {
"watchface": false
}
Expand Down
55 changes: 32 additions & 23 deletions src/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ GBitmap *bitmap_export;

static bool JS_ready = false;
static bool data_loaded_from_watch = false;
static uint32_t data_timestamp = 0;
uint8_t stored_version=0;
bool export_after_save=false;

Expand All @@ -39,6 +40,7 @@ bool export_after_save=false;
#define KEY_EXPORT 6
#define KEY_APP_VERSION 7
#define KEY_LAST_RESET 8
#define KEY_TIMESTAMP 9
#define KEY_JOBS 100

static void send_settings_to_phone() {
Expand Down Expand Up @@ -73,32 +75,36 @@ static void inbox_received_handler(DictionaryIterator *iter, void *context) {
JS_ready = true;
Tuple *tuple_t;
bool new_data_from_config_page = dict_find(iter, KEY_CONFIG_DATA);

tuple_t=dict_find(iter, KEY_VERSION); stored_version = (tuple_t) ? tuple_t->value->int32 : 1;
tuple_t=dict_find(iter, KEY_SHOW_CLOCK); if (tuple_t && settings.Show_clock != (tuple_t->value->int8 > 0) ) main_menu_toggle_clock();
tuple_t=dict_find(iter, KEY_AUTO_SORT); if (tuple_t) settings.Auto_sort = tuple_t->value->int8 > 0;
tuple_t=dict_find(iter, KEY_HRS_PER_DAY); if (tuple_t) settings.Hrs_day_x10 = tuple_t->value->int32;
tuple_t=dict_find(iter, KEY_LAST_RESET); if (tuple_t) settings.Last_reset = tuple_t->value->int32;

tuple_t=dict_find(iter,KEY_TIMER);
if (tuple_t) {
memcpy(&timer, tuple_t->value->data, tuple_t->length);
tick_timer_service_subscribe(MINUTE_UNIT + SECOND_UNIT, handle_ticktimer_tick);
} else {
timer.Active = false;
tuple_t= dict_find(iter, KEY_TIMESTAMP);
uint32_t inbox_timestamp = tuple_t ? tuple_t->value->int32 : 0;

if (new_data_from_config_page || inbox_timestamp > data_timestamp) {
data_timestamp=inbox_timestamp;
tuple_t=dict_find(iter, KEY_VERSION); stored_version = (tuple_t) ? tuple_t->value->int32 : 1;
tuple_t=dict_find(iter, KEY_SHOW_CLOCK); if (tuple_t && settings.Show_clock != (tuple_t->value->int8 > 0) ) main_menu_toggle_clock();
tuple_t=dict_find(iter, KEY_AUTO_SORT); if (tuple_t) settings.Auto_sort = tuple_t->value->int8 > 0;
tuple_t=dict_find(iter, KEY_HRS_PER_DAY); if (tuple_t) settings.Hrs_day_x10 = tuple_t->value->int32;
tuple_t=dict_find(iter, KEY_LAST_RESET); if (tuple_t) settings.Last_reset = tuple_t->value->int32;

tuple_t=dict_find(iter,KEY_TIMER);
if (tuple_t) {
memcpy(&timer, tuple_t->value->data, tuple_t->length);
tick_timer_service_subscribe(MINUTE_UNIT + SECOND_UNIT, handle_ticktimer_tick);
} else {
timer.Active = false;
}
jobs_delete_all_jobs();
jobs_list_read_dict(iter, KEY_JOBS, stored_version);
main_menu_update();
main_menu_highlight_top();
if (stored_version < CURRENT_STORAGE_VERSION) {
update_show(stored_version);
stored_version = CURRENT_STORAGE_VERSION;
}
main_save_data();
}
if (new_data_from_config_page) jobs_delete_all_jobs();
jobs_list_read_dict(iter, KEY_JOBS, stored_version);

LOG("Inbox processed.");
main_menu_update();
main_menu_highlight_top();
if (new_data_from_config_page) main_save_data();
if (stored_version < CURRENT_STORAGE_VERSION) {
update_show(stored_version);
stored_version = CURRENT_STORAGE_VERSION;
send_settings_to_phone();
}
}

// *****************************************************************************************************
Expand All @@ -108,6 +114,8 @@ static void inbox_received_handler(DictionaryIterator *iter, void *context) {
void main_save_data() {
data_loaded_from_watch = true;
persist_write_int(STORAGE_KEY_VERSION, CURRENT_STORAGE_VERSION);
data_timestamp=time(NULL);
persist_write_int(STORAGE_KEY_TIMESTAMP, data_timestamp);
if (timer.Active) {
persist_write_data(STORAGE_KEY_TIMER, &timer, sizeof(Timer));
} else {
Expand All @@ -128,6 +136,7 @@ static void main_load_data(void) {
stored_version = persist_read_int(STORAGE_KEY_VERSION); // defaults to 0 if key is missing
if (stored_version) {
data_loaded_from_watch = true;
if (persist_exists(STORAGE_KEY_TIMESTAMP)) data_timestamp=persist_read_int(STORAGE_KEY_TIMESTAMP);
persist_read_data(STORAGE_KEY_TIMER, &timer, sizeof(Timer));
if (persist_exists(STORAGE_KEY_SETTINGS)) {
persist_read_data(STORAGE_KEY_SETTINGS, &settings, sizeof(Settings));
Expand Down
1 change: 1 addition & 0 deletions src/main.h
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,7 @@ extern Timer timer;
#define STORAGE_KEY_VERSION 1
#define STORAGE_KEY_TIMER 2
#define STORAGE_KEY_SETTINGS 3
#define STORAGE_KEY_TIMESTAMP 4
#define STORAGE_KEY_FIRST_JOB 100

#define CURRENT_STORAGE_VERSION 2
Expand Down
8 changes: 7 additions & 1 deletion src/pebble-js-app.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,11 @@ Pebble.addEventListener('ready', function() {
var settings=localStorage.getItem("settings");
// settings='{"101":"B|0","KEY_VERSION":1,"KEY_SHOW_CLOCK":1,"KEY_AUTO_SORT":0,"KEY_HRS_PER_DAY":80,"KEY_JOBS":"A|0"';
var dict=settings ? JSON.parse(settings) : {};
console.log(settings);
if (!dict.KEY_TIMESTAMP) {
var d=new Date();
dict.KEY_TIMESTAMP = Math.floor(d.getTime()/1000 - d.getTimezoneOffset()*60);
}
console.log(JSON.stringify(dict));
Pebble.sendAppMessage(dict, function() {
console.log('Send successful: ' + JSON.stringify(dict));
}, function() {
Expand Down Expand Up @@ -76,6 +80,8 @@ Pebble.addEventListener('webviewclosed', function(e) {
dict.KEY_AUTO_SORT = configData.auto_sort ? 1 : 0; // Send a boolean as an integer
dict.KEY_HRS_PER_DAY = configData.hrs_per_day * 10;
dict.KEY_VERSION = configData.data_version;
var d=new Date();
dict.KEY_TIMESTAMP = Math.floor(d.getTime()/1000 - d.getTimezoneOffset()*60);

var job=0;
while (configData["job_"+job]) {
Expand Down

0 comments on commit 36d7346

Please sign in to comment.