mirror of
https://github.com/samsonjs/retrogit.git
synced 2026-03-30 10:16:08 +00:00
Guess timezone.
This commit is contained in:
parent
7a24dfef8f
commit
71ebf98ce7
3 changed files with 50 additions and 1 deletions
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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}}
|
||||
|
|
|
|||
Loading…
Reference in a new issue