option explicit
' Modified and Created age column
' qiuqiu
'
' This is a script for Directory Opus.
' See http://www.gpsoft.com.au/DScripts/redirect.asp?page=scripts for development information.
' https://resource.dopus.com/t/column-modified-and-created-age/20328/1
'
'
' Called by Directory Opus to initialize the script
Function OnInit(initData)
initData.name = "Age Columns"
initData.desc = "Modified and Created age column"
initData.copyright = "qiuqiu"
initData.version = "0.7"
initData.default_enable = False
if DOpus.version.AtLeast("12.0.8") then
initData.url = "https://resource.dopus.com/t/column-modified-and-created-age/20328/1"
End If
initData.config.Item_MinuteText = " minutes"
initData.config.Item_HourText = " hours"
initData.config.Item_DayText = " days"
initData.config.Item_MonthText = " months"
initData.config.Item_YearText = " years"
initData.config.Group_MinuteText = "within one hour"
initData.config.Group_HourText = "within one day"
initData.config.Group_DayText = "within one month"
initData.config.Group_MonthText = "within one year"
initData.config.Group_YearText = "over one year"
initData.config.Column_CreateHeader = "Created (relative)"
initData.config.Column_ModifyHeader = "Modified (relative)"
initData.config_desc = DOpus.NewMap( _
"Item_MinuteText" , "Text that is appended to the number of minutes.", _
"Item_HourText" , "Text that is appended to the number of hours.", _
"Item_DayText" , "Text that is appended to the number of days.", _
"Item_MonthText" , "Text that is appended to the number of months.", _
"Item_YearText" , "Text that is appended to the number of years.", _
"Group_MinuteText" , "Group information (within one hour)", _
"Group_HourText" , "Group information (within one day)", _
"Group_DayText" , "Group information (within one month)", _
"Group_MonthText" , "Group information (within one year)", _
"Group_YearText" , "Group information (over one year)", _
"Column_CreateHeader", "This option controls the column header text and requires restarting DOpus.", _
"Column_ModifyHeader", "This option controls the column header text and requires restarting DOpus.")
Dim col
Set col = initData.AddColumn
col.name = "Created"
col.method = "OnCreated"
col.label = initData.config.Column_CreateHeader
col.justify = "Right"
col.autogroup = False
col.autorefresh = True
Set col = initData.AddColumn
col.name = "Modified"
col.method = "OnModified"
col.label = initData.config.Column_ModifyHeader
col.justify = "Right"
col.autogroup = False
col.autorefresh = True
End Function
' Implement the Created age column
Function OnCreated(scriptColData)
Dim rValue
set rValue = GetAgeTag(scriptColData.item.create)
scriptColData.value = rValue("ItemValue")
scriptColData.sort = rValue("ItemSort")
scriptColData.Group = rValue("ItemGroup")
Set rValue = nothing
End Function
' Implement the Modified age column
Function OnModified(scriptColData)
'DOpus.Output(scriptColData.item.name)
Dim rValue
set rValue = GetAgeTag(scriptColData.item.modify)
scriptColData.value = rValue("ItemValue")
scriptColData.sort = rValue("ItemSort")
scriptColData.Group = rValue("ItemGroup")
Set rValue = nothing
End Function
Function GetAgeTag(ItemDate)
Dim ReturnMap, TempDateTime, DiffDays, DiffMinutes
Set ReturnMap = DOpus.Create.Map
TempDateTime = Now()
DiffMinutes = DateDiff("n",ItemDate, TempDateTime)
DiffDays = DateDiff("y",ItemDate, TempDateTime)
If (DiffDays = 0) Then
If (DiffMinutes < 60) Then
' return minutes
ReturnMap("ItemValue") = DiffMinutes & Script.config.Item_MinuteText
ReturnMap("ItemSort") = DiffMinutes / 10000 + 1
ReturnMap("ItemGroup") = Script.config.Column_ModifyHeader & Script.config.Group_MinuteText
ElseIF DiffMinutes > 60 And DiffMinutes < 1440 Then
' return hours
ReturnMap("ItemValue") = DateDiff("h",ItemDate, TempDateTime) & Script.config.Item_HourText
ReturnMap("ItemSort") = DiffMinutes / 10000 + 2
ReturnMap("ItemGroup") = Script.config.Column_ModifyHeader & Script.config.Group_HourText
End If
ElseIf (DiffDays > 0 And DiffDays < 30) Then
'return days
ReturnMap("ItemValue") = DiffDays & Script.config.Item_DayText
ReturnMap("ItemSort") = DiffDays / 10000 + 3
ReturnMap("ItemGroup") = Script.config.Column_ModifyHeader & Script.config.Group_DayText
ElseIf (DiffDays >= 30) And (DiffDays < 365) Then
'return months
ReturnMap("ItemValue") = DateDiff("m",ItemDate, TempDateTime) & Script.config.Item_MonthText
ReturnMap("ItemSort") = DiffDays / 10000 + 4
ReturnMap("ItemGroup") = Script.config.Column_ModifyHeader & Script.config.Group_MonthText
ElseIF (DiffDays >= 365) Then
'return years
ReturnMap("ItemValue") = DateDiff("yyyy",ItemDate, TempDateTime) & Script.config.Item_YearText
ReturnMap("ItemSort") = DiffDays / 10000 + 5
ReturnMap("ItemGroup") = Script.config.Column_ModifyHeader & Script.config.Group_YearText
Else
Randomize
ReturnMap("ItemValue") = "Error"
ReturnMap("ItemSort") = Rnd() + 6
ReturnMap("ItemGroup") = "Calculation error"
End If
Set GetAgeTag = ReturnMap
Set ReturnMap = nothing
End Function
I noticed that this script is quite slow on network shares (via VPN). What’s interesting: the file listing of a folder with ~ 50 items loads instantly (Columns: Name, Size, Modified); but the “Relative Date” column only slowly loads line-by-line (approx. 0,25 secs per line).
DOpus seems to fetch the modified date for the script individually line-by-line. Can this be optimized so that DOpus uses the Modified date that’s already loaded and present in the file listing?