diff --git a/Project.toml b/Project.toml index 064c0a5..7abff29 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "UnixTimes" uuid = "ab1a18e7-b408-4913-896c-624bb82ed7f4" authors = ["Christian Rorvik "] -version = "1.7.1" +version = "1.7.2" [deps] Dates = "ade2ca70-3891-5945-98fb-dc099432e06a" diff --git a/ext/UnixTimesMakieExt.jl b/ext/UnixTimesMakieExt.jl index d003c36..aa6d5a4 100644 --- a/ext/UnixTimesMakieExt.jl +++ b/ext/UnixTimesMakieExt.jl @@ -6,36 +6,40 @@ using Observables using Dates struct UnixTimeConversion <: Makie.AbstractDimConversion - custom_epoch::Observable{Union{Nothing, UnixTime}} - function UnixTimeConversion(custom_epoch = nothing) - new(Observable{Union{Nothing, UnixTime}}(custom_epoch; ignore_equal_values=true)) + custom_epoch::Observable{UnixTime} + function UnixTimeConversion(custom_epoch = UNIX_EPOCH) + new(Observable{UnixTime}(custom_epoch; ignore_equal_values=true)) end end function number_to_unixtime(conversion::UnixTimeConversion, i) - Nanosecond(round(Int64, Float64(i))) + something(conversion.custom_epoch[], UNIX_EPOCH) + Nanosecond(round(Int64, Float64(i))) + conversion.custom_epoch[] end +function unixtime_to_number(conversion::UnixTimeConversion, value::UnixTime) + Dates.value(value - conversion.custom_epoch[]) +end + +Makie.expand_dimensions(::PointBased, y::AbstractVector{<:UnixTime}) = (keys(y), y) -Makie.needs_tick_update_observable(conversion::UnixTimeConversion) = nothing +Makie.needs_tick_update_observable(conversion::UnixTimeConversion) = conversion.custom_epoch Makie.should_dim_convert(::Type{UnixTime}) = true Makie.create_dim_conversion(::Type{UnixTime}) = UnixTimeConversion() function Makie.convert_dim_value(conversion::UnixTimeConversion, value::UnixTime) - Dates.value(value - something(conversion.custom_epoch[], UNIX_EPOCH)) + unixtime_to_number(conversion, value) end function Makie.convert_dim_value(conversion::UnixTimeConversion, values::AbstractArray{UnixTime}) - Dates.value.(values .- something(conversion.custom_epoch[], UNIX_EPOCH)) + unixtime_to_number.(tuple(conversion), values) +end +function Makie.convert_dim_value(conversion::UnixTimeConversion, attr, values, prev_values) + unixtime_to_number.(tuple(conversion), values) end function Makie.convert_dim_observable(conversion::UnixTimeConversion, values::Observable, deregister) - if conversion.custom_epoch[] === nothing - conversion.custom_epoch[] = last(values[]) - end - result = map(values, conversion.custom_epoch) do vs, ep - Dates.value.(vs .- something(ep, UNIX_EPOCH)) + Dates.value.(vs .- ep) end append!(deregister, result.inputs) result