Metadata: Accept switch back to local time if current zone is UTC #2876
Signed-off-by: Michael Mayer <michael@photoprism.app>
This commit is contained in:
parent
75f288d465
commit
6ab04088e2
|
@ -63,9 +63,11 @@ func (m *Photo) SetTakenAt(taken, local time.Time, zone, source string) {
|
|||
m.TimeZone = zone
|
||||
m.TakenAt = m.GetTakenAt()
|
||||
} else if m.TimeZoneUTC() {
|
||||
// Local is UTC.
|
||||
m.TimeZone = zone
|
||||
// Keep UTC?
|
||||
if m.TimeZoneUTC() {
|
||||
m.TakenAtLocal = taken
|
||||
}
|
||||
} else if m.TimeZone != "" {
|
||||
// Apply existing time zone.
|
||||
m.TakenAt = m.GetTakenAt()
|
||||
|
|
|
@ -39,20 +39,20 @@ func TestPhoto_TrustedTime(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestPhoto_SetTakenAt(t *testing.T) {
|
||||
t.Run("empty taken", func(t *testing.T) {
|
||||
t.Run("Empty", func(t *testing.T) {
|
||||
m := PhotoFixtures.Get("Photo15")
|
||||
assert.Equal(t, time.Date(2013, 11, 11, 9, 7, 18, 0, time.UTC), m.TakenAt)
|
||||
m.SetTakenAt(time.Time{}, time.Time{}, "", SrcManual)
|
||||
assert.Equal(t, time.Date(2013, 11, 11, 9, 7, 18, 0, time.UTC), m.TakenAt)
|
||||
})
|
||||
t.Run("taken not from the same source", func(t *testing.T) {
|
||||
t.Run("LowerSourcePriority", func(t *testing.T) {
|
||||
m := PhotoFixtures.Get("Photo15")
|
||||
assert.Equal(t, time.Date(2013, 11, 11, 9, 7, 18, 0, time.UTC), m.TakenAt)
|
||||
m.SetTakenAt(time.Date(2019, 12, 11, 9, 7, 18, 0, time.UTC),
|
||||
time.Date(2019, 12, 11, 9, 7, 18, 0, time.UTC), "", SrcAuto)
|
||||
assert.Equal(t, time.Date(2013, 11, 11, 9, 7, 18, 0, time.UTC), m.TakenAt)
|
||||
})
|
||||
t.Run("from name", func(t *testing.T) {
|
||||
t.Run("FromName", func(t *testing.T) {
|
||||
m := PhotoFixtures.Get("Photo15")
|
||||
m.TimeZone = ""
|
||||
m.TakenSrc = SrcAuto
|
||||
|
@ -71,7 +71,7 @@ func TestPhoto_SetTakenAt(t *testing.T) {
|
|||
assert.Equal(t, time.Date(2011, 12, 11, 9, 7, 18, 0, time.UTC), m.TakenAt)
|
||||
assert.Equal(t, time.Date(2019, 11, 11, 10, 7, 18, 0, time.UTC), m.TakenAtLocal)
|
||||
})
|
||||
t.Run("success", func(t *testing.T) {
|
||||
t.Run("Success", func(t *testing.T) {
|
||||
m := PhotoFixtures.Get("Photo15")
|
||||
assert.Equal(t, time.Date(2013, 11, 11, 9, 7, 18, 0, time.UTC), m.TakenAt)
|
||||
assert.Equal(t, time.Date(2013, 11, 11, 9, 7, 18, 0, time.UTC), m.TakenAtLocal)
|
||||
|
@ -82,7 +82,7 @@ func TestPhoto_SetTakenAt(t *testing.T) {
|
|||
assert.Equal(t, time.Date(2019, 12, 11, 9, 7, 18, 0, time.UTC), m.TakenAt)
|
||||
assert.Equal(t, time.Date(2019, 12, 11, 10, 7, 18, 0, time.UTC), m.TakenAtLocal)
|
||||
})
|
||||
t.Run("fallback", func(t *testing.T) {
|
||||
t.Run("Fallback", func(t *testing.T) {
|
||||
m := PhotoFixtures.Get("Photo15")
|
||||
assert.Equal(t, time.Date(2013, time.November, 11, 9, 7, 18, 0, time.UTC), m.TakenAt)
|
||||
assert.Equal(t, time.Date(2013, time.November, 11, 9, 7, 18, 0, time.UTC), m.TakenAtLocal)
|
||||
|
@ -108,7 +108,7 @@ func TestPhoto_SetTakenAt(t *testing.T) {
|
|||
assert.Equal(t, expected, m.TakenAt)
|
||||
assert.Equal(t, m.GetTakenAtLocal(), m.TakenAtLocal)
|
||||
})
|
||||
t.Run("time zone", func(t *testing.T) {
|
||||
t.Run("TimeZone", func(t *testing.T) {
|
||||
m := PhotoFixtures.Get("Photo15")
|
||||
|
||||
zone := "Europe/Berlin"
|
||||
|
@ -122,7 +122,7 @@ func TestPhoto_SetTakenAt(t *testing.T) {
|
|||
assert.Equal(t, newTime.UTC(), m.TakenAt)
|
||||
assert.Equal(t, newTime, m.TakenAtLocal)
|
||||
})
|
||||
t.Run("time > max year", func(t *testing.T) {
|
||||
t.Run("InvalidYear", func(t *testing.T) {
|
||||
m := PhotoFixtures.Get("Photo15")
|
||||
assert.Equal(t, time.Date(2013, 11, 11, 9, 7, 18, 0, time.UTC), m.TakenAt)
|
||||
assert.Equal(t, time.Date(2013, 11, 11, 9, 7, 18, 0, time.UTC), m.TakenAtLocal)
|
||||
|
@ -131,7 +131,7 @@ func TestPhoto_SetTakenAt(t *testing.T) {
|
|||
assert.Equal(t, time.Date(2013, 11, 11, 9, 7, 18, 0, time.UTC), m.TakenAt)
|
||||
assert.Equal(t, time.Date(2013, 11, 11, 9, 7, 18, 0, time.UTC), m.TakenAtLocal)
|
||||
})
|
||||
t.Run("success with empty takenAtLocal", func(t *testing.T) {
|
||||
t.Run("SuccessLocalEmpty", func(t *testing.T) {
|
||||
m := PhotoFixtures.Get("Photo15")
|
||||
assert.Equal(t, time.Date(2013, 11, 11, 9, 7, 18, 0, time.UTC), m.TakenAt)
|
||||
assert.Equal(t, time.Date(2013, 11, 11, 9, 7, 18, 0, time.UTC), m.TakenAtLocal)
|
||||
|
@ -140,25 +140,32 @@ func TestPhoto_SetTakenAt(t *testing.T) {
|
|||
assert.Equal(t, time.Date(2019, 12, 11, 9, 7, 18, 0, time.UTC), m.TakenAt)
|
||||
assert.Equal(t, time.Date(2019, 12, 11, 9, 7, 18, 0, time.UTC), m.TakenAtLocal)
|
||||
})
|
||||
t.Run("don't update older date", func(t *testing.T) {
|
||||
t.Run("SkipUpdate", func(t *testing.T) {
|
||||
photo := &Photo{TakenAt: time.Date(2013, 11, 11, 9, 7, 18, 0, time.UTC)}
|
||||
photo.SetTakenAt(time.Date(2014, 12, 11, 9, 7, 18, 0, time.UTC),
|
||||
time.Date(2014, 12, 11, 10, 7, 18, 0, time.UTC), "", SrcAuto)
|
||||
assert.Equal(t, time.Date(2013, 11, 11, 9, 7, 18, 0, time.UTC), photo.TakenAt)
|
||||
})
|
||||
t.Run("set local time from utc", func(t *testing.T) {
|
||||
t.Run("LocalFromUTC", func(t *testing.T) {
|
||||
photo := &Photo{TakenAt: time.Date(2015, 11, 11, 9, 7, 18, 0, time.UTC), TimeZone: "Europe/Berlin"}
|
||||
photo.SetTakenAt(time.Date(2014, 12, 11, 9, 7, 18, 0, time.UTC),
|
||||
time.Date(2014, 12, 11, 10, 7, 18, 0, time.UTC), time.UTC.String(), SrcManual)
|
||||
assert.Equal(t, time.Date(2014, 12, 11, 9, 7, 18, 0, time.UTC), photo.TakenAt)
|
||||
assert.Equal(t, time.Date(2014, 12, 11, 10, 07, 18, 0, time.UTC), photo.TakenAtLocal)
|
||||
})
|
||||
t.Run("local is UTC", func(t *testing.T) {
|
||||
t.Run("KeepUTC", func(t *testing.T) {
|
||||
photo := &Photo{TakenAt: time.Date(2015, 11, 11, 9, 7, 18, 0, time.UTC), TimeZone: time.UTC.String()}
|
||||
photo.SetTakenAt(time.Date(2014, 12, 11, 9, 7, 18, 0, time.UTC),
|
||||
time.Date(2014, 12, 11, 10, 7, 18, 0, time.UTC), time.UTC.String(), SrcManual)
|
||||
assert.Equal(t, time.Date(2014, 12, 11, 9, 7, 18, 0, time.UTC), photo.TakenAt)
|
||||
assert.Equal(t, time.Date(2014, 12, 11, 9, 07, 18, 0, time.UTC), photo.TakenAtLocal)
|
||||
})
|
||||
t.Run("UTCToLocal", func(t *testing.T) {
|
||||
photo := &Photo{TakenAt: time.Date(2015, 11, 11, 9, 7, 18, 0, time.UTC), TimeZone: time.UTC.String()}
|
||||
photo.SetTakenAt(time.Date(2014, 12, 11, 9, 7, 18, 0, time.UTC),
|
||||
time.Date(2014, 12, 11, 10, 7, 18, 0, time.UTC), "", SrcManual)
|
||||
assert.Equal(t, time.Date(2014, 12, 11, 9, 7, 18, 0, time.UTC), photo.TakenAt)
|
||||
assert.Equal(t, time.Date(2014, 12, 11, 9, 07, 18, 0, time.UTC), photo.TakenAtLocal)
|
||||
assert.Equal(t, time.Date(2014, 12, 11, 10, 07, 18, 0, time.UTC), photo.TakenAtLocal)
|
||||
})
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue