summaryrefslogtreecommitdiff
path: root/StoneIsland/www/js/lib/etc/push.js
blob: 138c4896327f92756da23b6a846c421bb8e46990 (plain)
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
var push = (function(){
  var push = { settings: {} }
  var pushPlugin
  push.init = function(){
  
    pushPlugin = PushNotification.init({
      ios: {
        alert: true,
        badge: true,
        sound: false,
        clearBadge: true,
      },
    })

    console.log("push init")
    
    PushNotification.hasPermission(push.did_initialize)
    pushPlugin.on('registration', push.got_registration)
    pushPlugin.on('notification', push.got_push_notification)
  }
  push.did_initialize = function(data) {
    if (! data.isEnabled) {
      return
    }
    console.log("push did initialize")
    var hub_status = localStorage.getItem("yoox.push_hub")
    var store_status = localStorage.getItem("yoox.push_store")
    
    push.settings.requested = localStorage.getItem("yoox.push_requested") == "true"
    push.settings.hub = hub_status == "true"
    push.settings.store = store_status == "true"
    
    if (! hub_status || hub_status == "true") {
      push.subscribe("hub")
    }
    if (! store_status || store_status == "true") {
      push.subscribe("store")
    }
  }
  push.got_registration = function(data){
    var registrationId = data.registrationId
    var oldRegistrationId =  localStorage.getItem("yoox.registrationId")
    console.log(registrationId, oldRegistrationId)
    
    if (registrationId !== oldRegistrationId || ! push.settings.requested) {
      localStorage.setItem("yoox.registrationId", registrationId)
      push.subscribe("hub", function(){
        push.subscribe("store")
      })
    }
  }
  push.subscribe = function(channel, cb){
    push.settings[channel] = true
    localStorage.setItem("yoox.push_" + channel, "true")
    var data = {
      registrationId: localStorage.getItem("yoox.registrationId"),
      channel: channel,
      platform: device.platform,
    }
    pushPlugin.subscribe(channel, function(){
      console.log("subscribed to", channel)
    })
    $.ajax({
      method: "POST",
      url: "https://stone.sup.land/_services/push/add",
      data: data,
      contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
      success: function(){
        console.log("subscribed to", channel)
        cb && cb()
      },
      error: push.error,
    })
  }
  push.unsubscribe = function(channel, cb){
    push.settings[channel] = false
    localStorage.setItem("yoox.push_" + channel, "false")
    var data = {
      registrationId: localStorage.getItem("yoox.registrationId"),
      channel: channel,
      platform: device.platform,
    }
    $.ajax({
      method: "POST",
      url: "https://stone.sup.land/_services/push/remove",
      data: data,
      contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
      success: function(){
        console.log("unsubscribed from", channel)
        cb && cb()
      },
      error: push.error,
    })
  }
  push.got_push_notification = function(push_obj) {
    // alert('We received this push notification: ' + JSON.stringify(push_obj));
    app.blog.refresh()

    try {
      var is_hub = JSON.stringify(push_obj || {}).match(/hub/i)
      if (is_hub) {
        app.intro.$alert.show().html("[ HUB UPDATED ]")
      }
      else {
        auth.clear_cart()
        app.intro.$alert.show().html("[ STORE UPDATED ]")
      }
    }
    catch (e) {
      app.intro.$alert.show().html("[ HUB UPDATED ]")
    }

    if (push_obj.additionalData.foreground === false) {
      // TODO: route the user to the uri in push_obj
      pushPlugin.finish(function(){}, function(){})
    }
    else {
      app.route("intro")
    }
  }
  push.error = function(e){
    console.log("push error")
  }  
  return push
})()