It is currently April 27th, 2024, 5:15 pm

Load file to display from a folder

Get help with installing and using Rainmeter.
User avatar
Yincognito
Rainmeter Sage
Posts: 7178
Joined: February 27th, 2015, 2:38 pm
Location: Terra Yincognita

Re: Load file to display from a folder

Post by Yincognito »

balala wrote: July 29th, 2023, 6:28 amYeah, definitely this is another approach. Both have their own advantages and disadvantages.
Well, after a few tests, as much as I'm a fan of reading file contents using WebParser, it turns out that Lua is much faster, let alone it doesn't hang on very frequent file reading like when scrolling...

<SkinFolder>\@Resources\Script.lua:

Code: Select all

function Update()
  local filename, content = SELF:GetOption('LoadFile'), ''
  local fileitem, message = io.open(filename, 'r')
  if fileitem then content = fileitem:read('*a'); fileitem:close() else print(message) end
  return content
end
<SkinFolder>\Skin.ini:

Code: Select all

[Variables]
Updates=1000
JumpInt=5
FileDir=#@#
FileExt=txt
FileMax=430
FileIdx=1
BodyPos=0
Margins=5
Padding=5
TxtSize=8

[Rainmeter]
Update=#Updates#
AccurateText=1
DynamicWindowSize=1

---Measures---

[FilePath]
Measure=Plugin
Plugin=FileView
Path=#FileDir#
ShowDotDot=0
ShowFolder=0
Extensions=#FileExt#
SortType=Name
UpdateDivider=-1
FinishAction=[!EnableMeasure FileText][!UpdateMeasure FileName][!UpdateMeasure FileText][!UpdateMeterGroup FileData][!Redraw][!Delay (#Updates#*#JumpInt#)][!EnableMeasure FileJump][!UpdateMeasure FileJump]
DynamicVariables=1

[FileName]
Measure=Plugin
Plugin=FileView
Path=[FilePath]
Type=FileName
Index=#FileIdx#
IgnoreCount=1
UpdateDivider=-1
DynamicVariables=1

[FileText]
Disabled=1
Measure=Script
ScriptFile=#@#Script.lua
LoadFile=[FilePath][FileName]
UpdateDivider=-1
DynamicVariables=1

[FileJump]
Disabled=1
Measure=Calc
UpdateDivider=#JumpInt#
OnUpdateAction=[!SetVariable FileIdx (Clamp(#FileIdx#+1,1,#FileMax#))][!SetVariable BodyPos 0][!UpdateMeasure FileName][!UpdateMeasure FileText][!UpdateMeterGroup FileData][!Redraw]
DynamicVariables=1

---Styles---

[Texts]
FontColor=224,224,224,255
FontEffectColor=0,0,0,255
StringEffect=Shadow
SolidColor=0,0,0,160
FontSize=#TxtSize#
FontFace=Segoe UI
StringStyle=Bold
StringAlign=Left
Padding=#Padding#,#Padding#,#Padding#,#Padding#
ClipString=2
AntiAlias=1

---Meters---

[Background]
Meter=Image
W=400
H=300
SolidColor=0,128,0,128
UpdateDivider=-1

[FileInfo]
Group=FileData
Meter=String
MeterStyle=Texts
X=(#Margins#)
Y=(#Margins#)
W=([Background:W]-#Margins#*2-#Padding#*2)
H=(#TxtSize#+12)
MeasureName=FilePath
MeasureName2=FileName
Text=%1%2
UpdateDivider=-1
MouseScrollUpAction=[!SetVariable FileIdx (Clamp(#FileIdx#-1,1,#FileMax#))][!SetVariable BodyPos 0][!UpdateMeasure FileName][!UpdateMeasure FileText][!UpdateMeterGroup FileData][!Redraw]
MouseScrollDownAction=[!SetVariable FileIdx (Clamp(#FileIdx#+1,1,#FileMax#))][!SetVariable BodyPos 0][!UpdateMeasure FileName][!UpdateMeasure FileText][!UpdateMeterGroup FileData][!Redraw]
DynamicVariables=1

[FileMask]
Meter=Image
X=(#Margins#)
Y=(#Margins#)R
W=([Background:W]-#Margins#*2)
H=([Background:H]-[FileInfo:H]-#Margins#*3)
SolidColor=0,0,0,255
UpdateDivider=-1

[FileBody]
Group=FileData
Container=FileMask
Meter=String
MeterStyle=Texts
Y=(#BodyPos#)
W=([FileMask:W]-#Padding#*2)
MeasureName=FileText
Text=%1
UpdateDivider=-1
MouseScrollUpAction=[!SetVariable BodyPos (Clamp(#BodyPos#+14,[FileMask:H]<[FileBody:H]?[FileMask:H]-[FileBody:H]:0,0))][!UpdateMeter FileBody][!Redraw]
MouseScrollDownAction=[!SetVariable BodyPos (Clamp(#BodyPos#-14,[FileMask:H]<[FileBody:H]?[FileMask:H]-[FileBody:H]:0,0))][!UpdateMeter FileBody][!Redraw]
DynamicVariables=1
The FileView approach does the job in this case, and although slower than a RunCommand having a dir "<path>" /b as Parameter, it's friendlier when including multiple file types / extensions.
This was tested on 430 text files named 001-000...001-122, 002-000...002-213, 003-000...003-092 in the @Resources folder of the skin.
Profiles: Rainmeter ProfileDeviantArt ProfileSuites: MYiniMeterSkins: Earth
lionpack
Posts: 11
Joined: July 27th, 2023, 8:25 pm

Re: Load file to display from a folder

Post by lionpack »

Thank you!
User avatar
Yincognito
Rainmeter Sage
Posts: 7178
Joined: February 27th, 2015, 2:38 pm
Location: Terra Yincognita

Re: Load file to display from a folder

Post by Yincognito »

You're welcome! Next time you can try do it yourself and see if you are up to the challenge.
Profiles: Rainmeter ProfileDeviantArt ProfileSuites: MYiniMeterSkins: Earth