From e10c04c253a4913433db365e4cfa7801a3a88385 Mon Sep 17 00:00:00 2001 From: David Daily Date: Mon, 13 Feb 2023 16:20:22 -0600 Subject: [PATCH] minor updates --- func.ahk | 632 ++++++++++++--------------------------------------- glovarsource | 10 +- msmv.ahk | 2 +- 3 files changed, 153 insertions(+), 491 deletions(-) diff --git a/func.ahk b/func.ahk index 4058edd..cc8d08d 100644 --- a/func.ahk +++ b/func.ahk @@ -1,501 +1,169 @@ -#Include, func.ahk +#SingleInstance force ; Only one instance at a time +SendMode, Input +FileEncoding, UTF-8 ; Makes sure the special characters dont break stuff +SetWorkingDir, %A_MyDocuments%\D3K ; Make sure we can find the .ahks linked below +SetTitleMatchMode, 2 + +d3k_version := 3 ; The current version + +GetDateTime(lang) +{ + FormatStr := "yyyy-MM-dd" ; The Date + FormatTime, DateStr, %A_NowUTC%, %FormatStr% ; format it to make it look like the Date we want + FormatStr := "H:mm'Z'" ; The time + FormatTime, TimeStr, %A_NowUTC%, %FormatStr% ; Format the string to be better + if (lang = "en") + { + Return DateStr " at " TimeStr + } + + if (lang = "de") + { + Return DateStr " um " TimeStr + } + + if (lang = "ISO8601") + { + Return DateStr "T" TimeStr + } + + if (lang = "date") + { + Return DateStr + } +} + +GetInfo(xID) +{ + if (xID) + { + File := FileOpen(A_MyDocuments "\emails.csv", "r") + Loop + { + Line := File.ReadLine() + Array := StrSplit(Line,",") ; split the line at its separating commas to get separate "columns" AKA elements + if InStr(Array[1], xID) ; if at the specified element (1) the specified content (dealers xID) has been found + { + Test := {xid: Array[1], email: Array[2], name: Array[3], user: Array[4], org: Array[5]} ; Return the array so we can do {variable}.email and so on + File.Close() ; Close the file + Return Test ; Return the array with the deets that we found + } + } Until (File.AtEOF) + File.Close() + Return false + } + if !(xID) + { + Return false + } +} + +;------------------------------------------------------------------------------ +; INI Manipulation that supports UTF-8 +;------------------------------------------------------------------------------ + +ini_load(location) +{ + out := {} + File := FileOpen(location, "r") + cleaner := File.Read() + File.Close() + cleaner := RegExReplace(cleaner, "`am)^[\s\R]*") ; Remove empty lines + cleaner := RegExReplace(cleaner, "m)[ \t]+$") ; Get rid of extra space at the end of values (NEEDS FIXED) + File := FileOpen(location, "w") + File.Write(cleaner) + File.Close() + File := FileOpen(location, "r") + Loop + { + Line := File.ReadLine() + RegExMatch(Line, "(?
(?<=\[).*(?=\]))|(?.*)=(?.*)", r) ; Key = rKey, Value = rValue, Section = rSection + If (rSection) + { + rSection := Trim(rSection, " `t`r`n") ; Remove pesky newlines and extra space + rSection := StrReplace(rSection, " ", "§") ; AHK can't handle spaces in nested array names, so they're substituted with § + out[rSection]:={} + c_Section := rSection + } Else + { + rKey := Trim(rKey, " `t`r`n") + rValue := Trim(rValue, " `t`r`n") + out[c_Section, rKey] := rValue + } + } Until (File.AtEOF) + File.Close() + Return out +} + + +ini_write(location, inKey, inValue) ; Don't need to specify section because you can only have one hotstring anyway +{ + Critical, On + file := FileOpen(location, "r") + temp := file.Read() + file.Close() + inKey := "(?<=" inKey "=)\S*" ; Regex to make sure we're matching only the value for the requested key + temp := RegExReplace(temp, inKey, inValue) + ; msgbox, % temp "`n`nRegex:`t" inKey "`nReplacing match with:`t" inValue + file := FileOpen(location, "w") + file.Write(temp) + file.Close() +} -Menu, Tray, Icon, shell32.dll, 283 ; Set the tray icon to a keyboard -Menu, Tray, Add, Mouse Mover, Mouse_Mover ; Add item to the tray to move the mouse -Menu, Tray, Add, %A_AhkVersion%, docs ;------------------------------------------------------------------------------ ; Make sure the settings file exists, if not, create it ;------------------------------------------------------------------------------ +sett_ini := A_MyDocuments "\D3Ksettings.ini" ; Where the settings ini is -If !FileExist(ini) ; Check if the ini doesn't exist +If !FileExist(sett_ini) ; Check if the sett_ini doesn't exist { -FileAppend, -( -; 0 is off, 1 is on -[USpec] -RACF=LF01234 -Email=LastnameFirstname@JohnDeere.com -Name=Firstname -DocFile=Select File -[Main] -Mansol=1 -MJDPaste=1 -CaseFormatter=1 -CFmail=0 -[Replacement] -JDProductNames=1 -GloVar=0 -[Language] -German=0 -), %ini% -Run Settings.ahk ; Runs the GUI for changing the settings, also accessible with Alt+Shift+\ (also easy way to restart this script) + file := FileOpen(sett_ini, "w") + writethis := " + ( LTrim + [USpec] + Email=LastnameFirstname@JohnDeere.com + Name=Firstname + DocFile=Select File + [Main] + Mansol=1 + MJDPaste=1 + CaseFormatter=1 + CFmail=0 + [Replacement] + JDProductNames=1 + GloVar=0 + [Language] + German=0 + )" + file.Write(writethis) + file.Close() + Run Settings.ahk ; Runs the GUI for changing the settings, accessible with Alt+Shift+\ (also easy way to restart this script) } ;------------------------------------------------------------------------------ -; Read the ini +; Read the sett_ini ;------------------------------------------------------------------------------ -; This is the part that reads the file to see what your settings are. Variables in the ini file are in all lowercase, variables here are CamelCase for more distinction +; This is the part that reads the file to see what your settings are. Variables in the sett_ini file are in all CamelCase, variables here are lowercase for more distinction + +settings := {} +settings := ini_load(sett_ini) ; User Specific things: -racf := ini_get(ini, "USpec", "RACF") -email := ini_get(ini, "USpec", "Email") -name := ini_get(ini, "USpec", "Name") -docfile := ini_get(ini, "USpec", "DocFile") +email := settings["USpec", "Email"] +name := settings["USpec", "Name"] +docfile := settings["USpec", "DocFile"] ; General Settings -mansol := ini_get(ini, "Main", "Mansol") -supadmin := ini_get(ini, "Main", "Supadmin") -mjdpaste := ini_get(ini, "Main", "MJDPaste") -caseformatter := ini_get(ini, "Main", "CaseFormatter") +mansol := settings["Main", "Mansol"] +supadmin := settings["Main", "Supadmin"] +mjdpaste := settings["Main", "MJDPaste"] +caseformatter := settings["Main", "CaseFormatter"] +cfmail := settings["Main", "CFmail"] ; Replacement -jdpn := ini_get(ini, "Replacement", "JDProductNames") -glovar := ini_get(ini, "Replacement", "GloVar") +jdpn := settings["Replacement", "JDProductNames"] +glovar := settings["Replacement", "GloVar"] ; Language -ger := ini_get(ini, "Language", "German") - -;------------------------------------------------------------------------------ -; Global Variables -;------------------------------------------------------------------------------ - -If (glovar = 1) -{ - glovarini := A_MyDocuments "\GloVar.ini" ; Location of the ini that the user modifies - - glovarstart := "#SingleInstance force`n`n" - - SetTimer, GloVar, 2000 ; Check every 2 seconds - - GloVar: - WinWaitNotActive, GloVar.ini ; So that we don't get any problems with the file on disk being out of date. I use VSCode with the "Save on lose focus" option on, YMMV - { - FileGetTime, gvModNew, %glovarini% - if !(gvModNew = gvMod) ; Those two lines mean the rest of this only executes if there were changes to the ini. - { - gvMod := gvModNew - FileDelete, glovar.ahk ; Start with a clean slate - FileAppend, %glovarstart%, glovar.ahk ; makes sure we only have one instance of the script running at a time - - RESection := "" ; Make sure that its clear - file := FileOpen(glovarini, "r") - Loop ; Read one line at a time - { - Line := file.ReadLine() - RegExMatch(Line, "(?<=\[).*(?=\])", RESection) ; explained above - RegExMatch(Line, "^(?.*)=(?.*)", RE) ; Key = REKey, Value = REValue - - If !(RESection) ; If the RegEx doesn't find antything, its empty - { - If !(REValue) ; If there is no value for the key, skip it (Continue the loop at the next line) - { - Continue - } - If InStr(StoredSection, "Serial Numbers") ; If the section is "Serial Numbers", make everything uppercase - { - StringUpper, REValue, REValue ; Makes it uppercase - WinWaitNotActive, GloVar.ini ; Just to make sure - { - ini_write(glovarini, REKey, REValue) - FileGetTime, gvMod, %glovarini% - } - } - If InStr(REKey, "case") ; If a key contains "case". Case numbers are all in the format "LETTERS-NUMBERS". - { - StringUpper, REValue, REValue ; Makes it uppercase - RegExMatch(REValue, "(?<=\().*(?=\))", REMatch) ; Match everything but the parenthesis. When the case numbers are shown they have parenthesis, and those are annoying. - If (REMatch) ; If there's anything there - { - WinWaitNotActive, GloVar.ini - { - ini_write(glovarini, REKey, REMatch) ; Writes the properly formatted case number to glovar.ini - FileGetTime, gvMod, %glovarini% - } - REValue := REMatch - } Else { - WinWaitNotActive, GloVar.ini - { - ini_write(glovarini, REKey, REValue) ; Writes the properly formatted case number to glovar.ini - FileGetTime, gvMod, %glovarini% - } - } - } - writethis := ":*:$" REKey "::" REValue "`n" ; Save the hotstring to a variable - FileAppend, %writethis%, glovar.ahk ; Write the variable to glovar.ahk - } - If (RESection) ; If we have a section - { - StoredSection := RESection - If InStr(RESection, "clear") ; Will clear the ini and save its and the documentation file's contents to a log - { - FileRead, doctemp, %docfile% ; Read documentation file, set in settings - FileRead, initemp, %glovarini% ; Read the ini - initemp := RegExReplace(initemp, "(?<=\[)clear(?=\])", "Info") ; Replace the "clear" section we set with Info - CurrTime := GetDateTime("en") ; get the current date and time as "YYYY-MM-DD at HH:MM GMT" - writethis := "Case on " . CurrTime . "`n`n`n" . doctemp . "`n`n" . initemp ; Save the current time, what was in the doc file, and glovarini to a variable - FileAppend, % "`n`n" writethis "`n`n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~", %A_MyDocuments%/D3KLog.txt ; Write a few new lines , the content, and a line underneath - FileAppend,, temptemp - FileCopy, glovarsource, %glovarini%, 1 ; Copies and replaces any text in glovar.ini with the template - FileCopy, temptemp, %docfile%, 1 ; These two this close together makes it look like they get cleared at the same time - FileDelete, temptemp - fileread, gvMod, %glovarini% ; Make sure that this script knows what the ini was changed to so it doesn't constantly run through the above code - FileDelete, glovar.ahk ; THE CLEAN SLATE - FileAppend, %glovarstart%, glovar.ahk - Sleep, 500 - FileGetTime, gvMod, %glovarini% ; Make sure that this script knows what the ini was changed to so it doesn't constantly run through the above code - If FileExist("glovar.ahk") - { - Run glovar.ahk - } - Return - } - } - } Until (file.AtEOF) - file.Close() - FileGetTime, gvMod, %glovarini% ; Make sure that this script knows what the ini was changed to so it doesn't constantly run through the above code - If FileExist("glovar.ahk") - { - Run glovar.ahk - ToolTip, glovar updated, 50, 50 - Sleep, 500 - ToolTip - } - } - } - Return -} - - -;------------------------------------------------------------------------------ -; Settings window -;------------------------------------------------------------------------------ - -!+\::Run Settings.ahk ; Alt+Shift+\ - -Mouse_Mover: - Run, msmv.ahk -Return - -;------------------------------------------------------------------------------ -; DTAC Solution Opener -;------------------------------------------------------------------------------ - -#If, mansol = "1" ; checks from the variable thats set from the .ini file - !+S::Run Mansol_Opener.ahk ; Alt+Shift+S -#If ; these are to make sure one "if" doesn't influence the next accidentially - - -;------------------------------------------------------------------------------ -; Case Formatter -;------------------------------------------------------------------------------ - -#If, CaseFormatter = "1" - Pause::Run Case_Formatter.ahk ; The Pause|Break key -#If - - -;------------------------------------------------------------------------------- -; Special Characters -;------------------------------------------------------------------------------- - -#If, ger = "1" -; scharfes s / Eszett / ß - !s::Send {U+00DF} ;Alt+S - -; ä - !a::Send {U+00E4} ;Alt+a - -; ö - !o::Send {U+00F6} ;Alt+o - -; ü - !u::Send {U+00FC} ;Alt+u - -; Ä - +!A::Send {U+00C4} ;Alt+A - -; Ö - +!O::Send {U+00D6} ;Alt+O - -; Ü - +!U::Send {U+00DC} ;Alt+U - -#If - -;------------------------------------------------------------------------------- -; Capitalise dates -;------------------------------------------------------------------------------- - -::monday::Monday -::tuesday::Tuesday -::wednesday::Wednesday -::thursday::Thursday -::friday::Friday -::saturday::Saturday -::sunday::Sunday - -::january::January -::february::February -; ::march::March ; Commented out because it matches the common word "march". -::april::April -; ::may::May ; Commented out because it matches the common word "may". -::june::June -::july::July -::august::August -::september::September -::october::October -::november::November -::december::December - - -; German -#If, ger = "1" - ::montag::Montag - ::dienstag::Dienstag - ::mittwoch::Mittwoch - ::donnerstag::Donnerstag - ::freitag:: Freitag - ::samstag::Samstag - ::sonntag::Sonntag - - ::januar::Januar - ::februar::Februar - ::märz::März - ::mai::Mai - ::juni::Juni - ::juli::Juli - ::oktober::Oktober - ::dezebmer::Dezember -#If - - - -;------------------------------------------------------------------------------ -; Copypastas -;------------------------------------------------------------------------------ -;STWA Applied -:*:]cms:: - Send STWA applied{Enter 2}Status: Providing information{Enter 2}Comments:{Space}{Enter 2}Thank you,{Enter}%name%{Enter 2}Tier 2 internal steps:{Space}{Enter 2}SQL:{Enter} - Return - -;------------------------------------------------------------------------------ -; Email -;------------------------------------------------------------------------------ - -; Regular -:*:]email:: - Send Hello,{Enter 2}{Space 3} - Return - - -; German -#If, ger = "1" - -; Regular -:*:[email:: - Send Hallo,{Enter 2}{Space 3} - Return -#If - - - -;------------------------------------------------------------------------------ -; Profile email paste -;------------------------------------------------------------------------------ -; So when editing Profiles, it won't let you paste in the email field. We don't like that. Make sure to let go of all keys immediatley after pressing this - -#If, mjdpaste = "1" - #v:: - sleep, 750 - Send %clipboard% - sleep, 500 - send # ; to make sure the start menu isn't open for some reason - return -#If - - - -;------------------------------------------------------------------------------ -; Common Terms autocorrect and replacement -;------------------------------------------------------------------------------ - -#If, not(racf = "LF01234") ; So that it doesn't put the fake RACF from the default ini file - :*:]me:: - Send, %racf% - return - - :*:[me:: - Send, %racf% - return -#If - -#If, not(email = "LastnameFirstname@JohnDeere.com") ; Same as above - :*:@me:: - Send, %email% - Return -#If - -; JD Names -#If, jdpn = "1" - - :*:[xx::XXXXXXXXXXXXX ; I'm not gonna try and find the right amount of X's to appease the CCMS demons - :*:]xx::XXXXXXXXXXXXX - -; English - :*:]at::AutoTrac - :*:]sf::StarFire - :*:]jdld::JDLink Dashboard - :*:]jdlc::JDLink Connectivity - :*:]jdls::JDLink Subscription - :*:]jdll::JDLink - :*:]jdp::JDParts - :*:]mjd::MyJohnDeere - :*:]opsc::Operations Center - :*:]seccon::Section Control - :*:]gs::GreenStar - :*:]cc::CommandCenter - :*:]fc::Field Connect - :*:]rs::RowSense - :*:]sub::subscription - :*:]ss::Stellar Support - :*:]tman::Technical Manual - :*:]oman::Operator's Manual - :*:]hl3::HarvestLab 3000 - :*:]hlo::Original HarvestLab - :*:]bin::Virtual Inventory - :*:]warrep::Warranty Reports - :*:]tcsm::Territory Customer Support Manager - :*:]macrep::Machine Reports - :*:]jdsm::John Deere Software Manager - :*:]jddm::John Deere Data Manager - :*:]serva::Service Advisor - :*:]muc::Master Unlock Code - :*:]asmn::Asset Manager - :*:]bsm::Base Station Manager - - - ::rowsense::RowSense - :*:comar::COMAR - ::mrtk::mRTK - ::rda::RDA - ::rtk::RTK - ::autotrac::AutoTrac - :*:ccms::CCMS - :*:dtac::DTAC - ::tcsm::TCSM - ::itec::iTEC Pro - ::ssu::SSU - ::atu::ATU - :*:mtg::MTG - ::wdt::WDT - ::itc::iTC - :*:vin::Machine PIN ; Not actually vehicles, so they don't have VINs - ::gs2::GS2 - ::gs3::GS3 - ::sf1::SF1 - ::sf2::SF2 - ::sf3::SF3 - ::sf4::SF4 - ::xid::xID - ::pmcalc::PMCalc - ::vat::VAT - :*:racf::RACF - ::igrade::iGrade - :*:JDCP::JDCP - :*:ISOBUS::ISOBUS - - -; German -#If, ger = "1" - :*:[at::AutoTrac - :*:[sf::StarFire - :*:[jdlw::JDLink Web - :*:[jdld::JDLink Dashboard - :*:[jdl2::JDLink Dashboard 2.0 - :*:[jdlc::JDLink Connectivity - :*:[jdls::JDLink Abonnement - :*:[jdll::JDLink - :*:[jdp::JDParts - :*:[mjd::MyJohnDeere - :*:[opsc::Einsatzzentrale - :*:[seccon::Teilbreitensteuerung - :*:[gs::GreenStar - :*:[cc::CommandCenter - :*:[fc::Field Connect - :*:[rs::RowSense - :*:[sub::Abonnement - :*:[ss::Stellar Support - :*:[tman::Technische Betriebsanleitung - :*:[oman::Betriebsanleitung - :*:[hl3::HarvestLab 3000 - :*:[hlo::Originales HarvestLab - :*:[bin::Virtuellen Bestand - :*:[warrep::Warranty Reports - :*:[tp::TouchPoint - :*:[tcsm::Technischer Bezirksleiter - :*:[macrep::Machine Reports - :*:[jdsm::John Deere Software Manager - :*:[jddm::John Deere Data Manager - :*:[serva::Service Advisor - :*:[muc::Master Unlock Code - :*:[asmn::Asset Manager - :*:[bsm::Base Station Manager -#If - - - -;------------------------------------------------------------------------------ -; QoL Improvements -;------------------------------------------------------------------------------ - -#j:: ; Open the downloads folder on Win+J -Run, C:\Users\%racf%\Downloads -Return - -#w:: ; Open My Documents folder on Win+W -Run, C:\Users\%racf%\Documents -Return - -:*:[now:: ; Send the current time/date in ISO8601 format -:*:]now:: - d_t := GetDateTime("ISO8601") - SendInput, %d_t% -Return - -:*:[today:: ; Send the current date in ISO8601 format -:*:]today:: - d_t := GetDateTime("date") - SendInput, %d_t% -Return - -:*:[deg::{ASC 248} -:*:]deg::{ASC 248} -:*:[eq::{ASC 247} -:*:]eq::{ASC 247} - -:*:[shrug::¯\_(ツ)_/¯ -:*:]shrug::¯\_(ツ)_/¯ - -asciiart(art) -{ - For index, value in art - { - SendInput, %value%{ShiftDown}{Enter}{ShiftUp} - } - Return -} - -:*:]yee:: - art := ["░░░░░░░░░░░░░▄███▄▄▄░░░░░░░","░░░░░░░░░▄▄▄██▀▀▀▀███▄░░░░░","░░░░░░░▄▀▀░░░░░░░░░░░▀█░░░░","░░░░▄▄▀░░░░░░░░░░░░░░░▀█░░░","░░░█░░░░░▀▄░░▄▀░░░░░░░░█░░░","░░░▐██▄░░▀▄▀▀▄▀░░▄██▀░▐▌░░░","░░░█▀█░▀░░░▀▀░░░▀░█▀░░▐▌░░░","░░░█░░▀▐░░░░░░░░▌▀░░░░░█░░░","░░░█░░░░░░░░░░░░░░░░░░░█░░░","░░░░█░░▀▄░░░░▄▀░░░░░░░░█░░░","░░░░█░░░░░░░░░░░▄▄░░░░█░░░░","░░░░░█▀██▀▀▀▀██▀░░░░░░█░░░░","░░░░░█░░▀████▀░░░░░░░█░░░░░","░░░░░░█░░░░░░░░░░░░▄█░░░░░░","░░░░░░░██░░░░░█▄▄▀▀░█░░░░░░","░░░░░░░░▀▀█▀▀▀▀░░░░░░█░░░░░", "yee ░░░░░█░░░░░░░░░░░░█░░░░"] - asciiart(art) -Return - -:*:]glass:: - art := ["▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄", "█░░░░░░░░▀█▄▀▄▀██████░▀█▄▀▄▀██████░", "░░░░░░░░░░░▀█▄█▄███▀░░░▀██▄█▄███▀░"] - asciiart(art) -Return - -docs: - run https://www.autohotkey.com/docs/AutoHotkey.htm -Return \ No newline at end of file +ger := settings["Language", "German"] \ No newline at end of file diff --git a/glovarsource b/glovarsource index e3902ec..ef1fddb 100644 --- a/glovarsource +++ b/glovarsource @@ -1,11 +1,5 @@ [Serial Numbers] 1= -ch= -2= -MTG= -VIN= -[Operations Center] -usr= -org= +cm= [Info] -ccms= +case= \ No newline at end of file diff --git a/msmv.ahk b/msmv.ahk index b95b9dc..1e3e33e 100644 --- a/msmv.ahk +++ b/msmv.ahk @@ -1,7 +1,7 @@ #SingleInstance, force CoordMode, Mouse, Screen -waittime := 180000 +waittime := 160000 Switch A_Args[1] {