Guess timezone.

This commit is contained in:
Mihai Parparita 2014-10-12 21:17:55 -07:00
parent 7a24dfef8f
commit 71ebf98ce7
3 changed files with 50 additions and 1 deletions

View file

@ -21,6 +21,7 @@ type Account struct {
OAuthToken oauth.Token `datastore:"-,"`
TimezoneName string `datastore:",noindex"`
TimezoneLocation *time.Location `datastore:"-,"`
HasTimezoneSet bool `datastore:"-,"`
ExcludedRepoIds []int `datastore:",noindex"`
DigestEmailAddress string
Frequency string
@ -48,7 +49,8 @@ func initAccount(account *Account) error {
if err != nil {
return err
}
if len(account.TimezoneName) == 0 {
account.HasTimezoneSet = len(account.TimezoneName) > 0
if !account.HasTimezoneSet {
account.TimezoneName = "America/Los_Angeles"
}
if len(account.Frequency) == 0 {

View file

@ -51,6 +51,7 @@ func init() {
router.HandleFunc("/account/settings", settingsHandler).Name("settings").Methods("GET")
router.HandleFunc("/account/settings", saveSettingsHandler).Name("save-settings").Methods("POST")
router.HandleFunc("/account/set-initial-timezone", setInitialTimezoneHandler).Name("set-initial-timezone").Methods("POST")
router.HandleFunc("/account/delete", deleteAccountHandler).Name("delete-account").Methods("POST")
router.HandleFunc("/admin/digest", digestAdminHandler)
@ -231,6 +232,7 @@ func indexHandler(w http.ResponseWriter, r *http.Request) {
var data = map[string]interface{}{
"User": user,
"SettingsSummary": settingsSummary,
"DetectTimezone": !account.HasTimezoneSet,
}
if err := templates["index"].Execute(w, data); err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
@ -513,6 +515,31 @@ func saveSettingsHandler(w http.ResponseWriter, r *http.Request) {
http.Redirect(w, r, settingsUrl.String(), http.StatusFound)
}
func setInitialTimezoneHandler(w http.ResponseWriter, r *http.Request) {
session, _ := sessionStore.Get(r, sessionConfig.CookieName)
userId := session.Values[sessionConfig.UserIdKey].(int)
c := appengine.NewContext(r)
account, err := getAccount(c, userId)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
timezoneName := r.FormValue("timezone_name")
_, err = time.LoadLocation(timezoneName)
if err != nil {
http.Error(w, err.Error(), http.StatusBadRequest)
return
}
account.TimezoneName = timezoneName
err = account.Put(c)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
}
func deleteAccountHandler(w http.ResponseWriter, r *http.Request) {
session, _ := sessionStore.Get(r, sessionConfig.CookieName)
userId := session.Values[sessionConfig.UserIdKey].(int)

View file

@ -29,4 +29,24 @@
<a href="{{routeUrl "settings"}}">Change settings</a>
<p>
{{if .DetectTimezone }}
<script src="//cdnjs.cloudflare.com/ajax/libs/jstimezonedetect/1.0.4/jstz.min.js"></script>
<script>
var timezoneName = jstz.determine().name();
var preferredTimezoneNames = {
"America/Santa_Isabel": "America/Los_Angeles"
};
if (timezoneName in preferredTimezoneNames) {
timezoneName = preferredTimezoneNames[timezoneName]
}
var formData = new FormData();
formData.append("timezone_name", timezoneName);
var xhr = new XMLHttpRequest();
xhr.open("POST", "{{routeUrl "set-initial-timezone"}}", true);
xhr.send(formData);
</script>
{{end}}
{{end}}