mirror of
https://github.com/miniflux/v2.git
synced 2025-09-30 19:22:11 +00:00
fix(timezone): make sure legacy time zones are no longer used
Debian Trixie has removed several time zones. This change makes sure only the current IANA time zones are in use.
This commit is contained in:
parent
4eff9129ab
commit
b1742168e1
6 changed files with 652 additions and 54 deletions
|
@ -1158,4 +1158,187 @@ var migrations = [...]func(tx *sql.Tx) error{
|
|||
_, err = tx.Exec(sql)
|
||||
return err
|
||||
},
|
||||
// This migration replaces deprecated timezones by their equivalent on Debian Trixie.
|
||||
func(tx *sql.Tx) (err error) {
|
||||
var deprecatedTimeZoneMap = map[string]string{
|
||||
// Africa
|
||||
"Africa/Asmera": "Africa/Asmara",
|
||||
|
||||
// America - Argentina
|
||||
"America/Argentina/ComodRivadavia": "America/Argentina/Catamarca",
|
||||
"America/Buenos_Aires": "America/Argentina/Buenos_Aires",
|
||||
"America/Catamarca": "America/Argentina/Catamarca",
|
||||
"America/Cordoba": "America/Argentina/Cordoba",
|
||||
"America/Jujuy": "America/Argentina/Jujuy",
|
||||
"America/Mendoza": "America/Argentina/Mendoza",
|
||||
"America/Rosario": "America/Argentina/Cordoba",
|
||||
|
||||
// America - US
|
||||
"America/Fort_Wayne": "America/Indiana/Indianapolis",
|
||||
"America/Indianapolis": "America/Indiana/Indianapolis",
|
||||
"America/Knox_IN": "America/Indiana/Knox",
|
||||
"America/Louisville": "America/Kentucky/Louisville",
|
||||
|
||||
// America - Greenland
|
||||
"America/Godthab": "America/Nuuk",
|
||||
|
||||
// Antarctica
|
||||
"Antarctica/South_Pole": "Pacific/Auckland",
|
||||
|
||||
// Asia
|
||||
"Asia/Ashkhabad": "Asia/Ashgabat",
|
||||
"Asia/Calcutta": "Asia/Kolkata",
|
||||
"Asia/Choibalsan": "Asia/Ulaanbaatar",
|
||||
"Asia/Chungking": "Asia/Chongqing",
|
||||
"Asia/Dacca": "Asia/Dhaka",
|
||||
"Asia/Katmandu": "Asia/Kathmandu",
|
||||
"Asia/Macao": "Asia/Macau",
|
||||
"Asia/Rangoon": "Asia/Yangon",
|
||||
"Asia/Saigon": "Asia/Ho_Chi_Minh",
|
||||
"Asia/Thimbu": "Asia/Thimphu",
|
||||
"Asia/Ujung_Pandang": "Asia/Makassar",
|
||||
"Asia/Ulan_Bator": "Asia/Ulaanbaatar",
|
||||
|
||||
// Atlantic
|
||||
"Atlantic/Faeroe": "Atlantic/Faroe",
|
||||
|
||||
// Australia
|
||||
"Australia/ACT": "Australia/Sydney",
|
||||
"Australia/LHI": "Australia/Lord_Howe",
|
||||
"Australia/North": "Australia/Darwin",
|
||||
"Australia/NSW": "Australia/Sydney",
|
||||
"Australia/Queensland": "Australia/Brisbane",
|
||||
"Australia/South": "Australia/Adelaide",
|
||||
"Australia/Tasmania": "Australia/Hobart",
|
||||
"Australia/Victoria": "Australia/Melbourne",
|
||||
"Australia/West": "Australia/Perth",
|
||||
|
||||
// Brazil
|
||||
"Brazil/Acre": "America/Rio_Branco",
|
||||
"Brazil/DeNoronha": "America/Noronha",
|
||||
"Brazil/East": "America/Sao_Paulo",
|
||||
"Brazil/West": "America/Manaus",
|
||||
|
||||
// Canada
|
||||
"Canada/Atlantic": "America/Halifax",
|
||||
"Canada/Central": "America/Winnipeg",
|
||||
"Canada/Eastern": "America/Toronto",
|
||||
"Canada/Mountain": "America/Edmonton",
|
||||
"Canada/Newfoundland": "America/St_Johns",
|
||||
"Canada/Pacific": "America/Vancouver",
|
||||
"Canada/Saskatchewan": "America/Regina",
|
||||
"Canada/Yukon": "America/Whitehorse",
|
||||
|
||||
// Europe
|
||||
"CET": "Europe/Paris",
|
||||
"EET": "Europe/Sofia",
|
||||
"Europe/Kiev": "Europe/Kyiv",
|
||||
"Europe/Uzhgorod": "Europe/Kyiv",
|
||||
"Europe/Zaporozhye": "Europe/Kyiv",
|
||||
"MET": "Europe/Paris",
|
||||
"WET": "Europe/Lisbon",
|
||||
|
||||
// Chile
|
||||
"Chile/Continental": "America/Santiago",
|
||||
"Chile/EasterIsland": "Pacific/Easter",
|
||||
|
||||
// Fixed offset and generic zones
|
||||
"CST6CDT": "America/Chicago",
|
||||
"EST": "America/New_York",
|
||||
"EST5EDT": "America/New_York",
|
||||
"HST": "Pacific/Honolulu",
|
||||
"MST": "America/Denver",
|
||||
"MST7MDT": "America/Denver",
|
||||
"PST8PDT": "America/Los_Angeles",
|
||||
|
||||
// Countries/Regions
|
||||
"Cuba": "America/Havana",
|
||||
"Egypt": "Africa/Cairo",
|
||||
"Eire": "Europe/Dublin",
|
||||
"GB": "Europe/London",
|
||||
"GB-Eire": "Europe/London",
|
||||
"Hongkong": "Asia/Hong_Kong",
|
||||
"Iceland": "Atlantic/Reykjavik",
|
||||
"Iran": "Asia/Tehran",
|
||||
"Israel": "Asia/Jerusalem",
|
||||
"Jamaica": "America/Jamaica",
|
||||
"Japan": "Asia/Tokyo",
|
||||
"Libya": "Africa/Tripoli",
|
||||
"Poland": "Europe/Warsaw",
|
||||
"Portugal": "Europe/Lisbon",
|
||||
"PRC": "Asia/Shanghai",
|
||||
"ROC": "Asia/Taipei",
|
||||
"ROK": "Asia/Seoul",
|
||||
"Singapore": "Asia/Singapore",
|
||||
"Turkey": "Europe/Istanbul",
|
||||
|
||||
// GMT variations
|
||||
"GMT+0": "GMT",
|
||||
"GMT-0": "GMT",
|
||||
"GMT0": "GMT",
|
||||
"Greenwich": "GMT",
|
||||
"UCT": "UTC",
|
||||
"Universal": "UTC",
|
||||
"Zulu": "UTC",
|
||||
|
||||
// Mexico
|
||||
"Mexico/BajaNorte": "America/Tijuana",
|
||||
"Mexico/BajaSur": "America/Mazatlan",
|
||||
"Mexico/General": "America/Mexico_City",
|
||||
|
||||
// US zones
|
||||
"Navajo": "America/Denver",
|
||||
"US/Alaska": "America/Anchorage",
|
||||
"US/Aleutian": "America/Adak",
|
||||
"US/Arizona": "America/Phoenix",
|
||||
"US/Central": "America/Chicago",
|
||||
"US/Eastern": "America/New_York",
|
||||
"US/East-Indiana": "America/Indiana/Indianapolis",
|
||||
"US/Hawaii": "Pacific/Honolulu",
|
||||
"US/Indiana-Starke": "America/Indiana/Knox",
|
||||
"US/Michigan": "America/Detroit",
|
||||
"US/Mountain": "America/Denver",
|
||||
"US/Pacific": "America/Los_Angeles",
|
||||
"US/Samoa": "Pacific/Pago_Pago",
|
||||
|
||||
// Pacific
|
||||
"Kwajalein": "Pacific/Kwajalein",
|
||||
"NZ": "Pacific/Auckland",
|
||||
"NZ-CHAT": "Pacific/Chatham",
|
||||
"Pacific/Enderbury": "Pacific/Kanton",
|
||||
"Pacific/Ponape": "Pacific/Pohnpei",
|
||||
"Pacific/Truk": "Pacific/Chuuk",
|
||||
|
||||
// Special cases
|
||||
"Factory": "UTC", // Factory is used for unconfigured systems
|
||||
"W-SU": "Europe/Moscow",
|
||||
}
|
||||
|
||||
// Loop through each user and correct the timezone
|
||||
rows, err := tx.Query(`SELECT id, timezone FROM users`)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
userTimezoneMap := make(map[int64]string)
|
||||
for rows.Next() {
|
||||
var userID int64
|
||||
var userTimezone string
|
||||
if err := rows.Scan(&userID, &userTimezone); err != nil {
|
||||
return err
|
||||
}
|
||||
userTimezoneMap[userID] = userTimezone
|
||||
}
|
||||
rows.Close()
|
||||
|
||||
for userID, userTimezone := range userTimezoneMap {
|
||||
if newTimezone, found := deprecatedTimeZoneMap[userTimezone]; found {
|
||||
if _, err := tx.Exec(`UPDATE users SET timezone = $1 WHERE id = $2`, newTimezone, userID); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
},
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue