W.I.P. App for quick access to CSP extension ini files.

Discussion in 'Apps' started by William Riker, Mar 6, 2022.

  1. William Riker

    William Riker New Member

    Joined:
    Aug 23, 2015
    Messages:
    29
    Likes Received:
    5
    Hi, a few days ago i made a tool for quick access to Custom Shaders Patch extension ini files for live editing. I managed to code something that fills some of my expectations at least, so i wanted to share the code in case anyone else wants to take it and make something better out of it. .

    Here's what it does:
    Firstly, the app recognizes if there's *.ini files in existence both in loaded folders (extension/config/cars/loaded and extension/config/tracks/loaded) and particular car and track folders (content/cars/'car name'/extension and content/tracks/'track name'/extension). There's 4 buttons that open these 4 files in notepad in the case the files actually exist. In the case of loaded folder, when the *.ini file does not exist, the button creates a new blank file and immediately after it allows to open it. For some reason, i could not set this same action for the particular folder buttons, so they just open the file in case it exists and don't do anything in case it doesn't.

    [​IMG]

    My initial plan was to make it possible in some way to open and edit the text of these *.ini files in the app itself, but i guess my limited programming skills made it impossible to find a way. At least i am content with the possibility of opening these files in notepad with one click from within the game.

    Here's the code, cheers!

    Code:
    import ac, acsys, platform, os, sys, webbrowser
    
    if platform.architecture()[0] == "64bit":
        sysdir = os.path.dirname(__file__)+'/stdlib64'
    else:
        sysdir = os.path.dirname(__file__)+'/stdlib'
    
    
    import ctypes
    
    
    appName = "Quick Extension Config"
    trackName = ac.getTrackName (0)
    carName = ac.getCarName (0)
    carCommonExists = False
    carPartExists = False
    trackCommonExists = False
    trackPartExists = False
    trackConfigLoadedFilePath = "extension\\config\\tracks\\loaded\\"
    tracksMainPath = "content\\tracks\\"
    carConfigFilePath= "extension\\config\\cars\\"
    carConfigLoadedFilePath = "extension\\config\\cars\\loaded\\"
    carsMainPath = "content\\cars\\"
    Content = "Track: " + trackName + "\n" + "Car: " + carName
    
    
    def acMain(ac_version):
    
     
        global appWindow, btnCarCommon, btnTrackCommon, btnCarPart, btnTrackPart, text, carCommonExists, carPartExists, trackCommonExists, trackPartExists, trackcommonpath, trackpartpath, carpartpath, carcommonpath, Content, carsMainPath, tracksMainPath, carName, trackName
    
        appWindow = ac.newApp(appName)
        
        ac.setTitle(appWindow, appName)
        ac.setSize(appWindow, 320, 220)
    
        btnCarCommon = ac.addButton(appWindow, "Open Car Loaded")
        ac.setPosition(btnCarCommon, 5, 30)
        ac.setSize(btnCarCommon, 150, 20)
        ac.addOnClickedListener(btnCarCommon, CarCommonConfig)
        
        btnTrackCommon = ac.addButton(appWindow, "Open Track Loaded")
        ac.setPosition(btnTrackCommon, 165, 30)
        ac.setSize(btnTrackCommon, 150, 20)
        ac.addOnClickedListener(btnTrackCommon, TrackCommonConfig)
        
        btnCarPart = ac.addButton(appWindow, "Open Car Particular")
        ac.setPosition(btnCarPart, 5, 60)
        ac.setSize(btnCarPart, 150, 20)
        ac.addOnClickedListener(btnCarPart, CarPartConfig)
    
        btnTrackPart = ac.addButton(appWindow, "Open Track Particular")
        ac.setPosition(btnTrackPart, 165, 60)
        ac.setSize(btnTrackPart, 150, 20)
        ac.addOnClickedListener(btnTrackPart, TrackPartConfig)
        
        text = ac.addTextBox(appWindow,"TEXT")
        ac.setPosition(text, 5, 90)
        ac.setSize(text, 310, 120)
    
        trackcommonpath = str(trackConfigLoadedFilePath + trackName + ".ini")
        trackpartpath = str(tracksMainPath + trackName + "\\extension\\ext_config.ini")
        carcommonpath = str(carConfigLoadedFilePath + carName + ".ini")
        carpartpath = str(carsMainPath + carName + "\\extension\\ext_config.ini")
        trackextpath = str(tracksMainPath + trackName + "\\extension")
        carextpath = str(carsMainPath + carName + "\\extension")
    
    
        if os.path.isfile(trackcommonpath):
            
            trackCommonExists = True
            Content = Content + "\nTrack Config in Loaded folder: YES"
            ac.log("Track Config in Loaded folder exists")
            ac.setText(btnTrackCommon, "Open Track Loaded")
        else:
            Content = Content + "\nTrack Config in Loaded folder: NO"
            ac.setText(btnTrackCommon, "Create Track Loaded")
        
            
        if os.path.isfile(trackpartpath):
        
            trackPartExists = True
            Content = Content + "\nTrack Config in particular folder: YES"
            ac.log("Track Config in particular folder exists")
            ac.setText(btnTrackPart, "Open Track Particular")
        else:
            Content = Content + "\nTrack Config in particular folder: NO"
            ac.setText(btnTrackPart, "Open Track Particular")
            
        if os.path.isfile(carcommonpath):
            
            carCommonExists = True
            Content = Content + "\nCar Config in Loaded folder: YES"
            ac.log("Car Config in Loaded folder exists")
            ac.setText(btnCarCommon, "Open Car Loaded")
        else:
            Content = Content + "\nCar Config in Loaded folder: NO"
            ac.setText(btnCarCommon, "Create Car Loaded")
            
        if os.path.isfile(carpartpath):
        
            carPartExists = True
            Content = Content + "\nCar Config in particular folder: YES"
            ac.log("Car Config in particular folder exists")
            ac.setText(btnCarPart, "Open Car Particular")
        else:
            Content = Content + "\nCar Config in particular folder: NO"
            ac.setText(btnCarPart, "Open Car Particular")
            
        ac.setText(text, Content)
        ac.setFontSize(text, 13)
        
        
        return appName
    
    
    
    def CarCommonConfig(dummy, variable):
        global CarCommon, trackcommonpath, trackpartpath, carpartpath, carcommonpath, Content, carCommonExists
        
        if os.path.isfile(carcommonpath):
            
            webbrowser.open(carcommonpath)
            ac.log("Car Common Config opened")
            
        else:
            carCommonExists = True
            CarCommon = open((carcommonpath), 'w')
            CarCommon.close()
            
            ac.log("Car Common Config created")
            
            Content = "Track: " + trackName + "\n" + "Car: " + carName
            
            if os.path.isfile(trackcommonpath):
            
                trackCommonExists = True
                Content = Content + "\nTrack Config in Loaded folder: YES"
                ac.log("Track Config in Loaded folder exists")
                ac.setText(btnTrackCommon, "Open Track Loaded")
            else:
                Content = Content + "\nTrack Config in Loaded folder: NO"
                ac.setText(btnTrackCommon, "Create Track Loaded")
        
            
            if os.path.isfile(trackpartpath):
        
                trackPartExists = True
                Content = Content + "\nTrack Config in particular folder: YES"
                ac.log("Track Config in particular folder exists")
                ac.setText(btnTrackPart, "Open Track Particular")
            else:
                Content = Content + "\nTrack Config in particular folder: NO"
                ac.setText(btnTrackPart, "Open Track Particular")
            
            if os.path.isfile(carcommonpath):
            
                carCommonExists = True
                Content = Content + "\nCar Config in Loaded folder: YES"
                ac.log("Car Config in Loaded folder exists")
                ac.setText(btnCarCommon, "Open Car Loaded")
            else:
                Content = Content + "\nCar Config in Loaded folder: NO"
                ac.setText(btnCarCommon, "Create Car Loaded")
            
            if os.path.isfile(carpartpath):
        
                carPartExists = True
                Content = Content + "\nCar Config in particular folder: YES"
                ac.log("Car Config in particular folder exists")
                ac.setText(btnCarPart, "Open Car Particular")
            else:
                Content = Content + "\nCar Config in particular folder: NO"
                ac.setText(btnCarPart, "Open Car Particular")
            
            ac.setText(text, Content)
            ac.setFontSize(text, 13)
            
        
    def TrackCommonConfig(dummy, variable):
    
        global TrackCommon, trackcommonpath, trackpartpath, carpartpath, carcommonpath, Content, TrackCommonExists
        
        if os.path.isfile(trackcommonpath):
            
            webbrowser.open(trackcommonpath)
            ac.log("Track Common Config opened")
            
        else:
            trackCommonExists = True
            TrackCommon = open((trackcommonpath), 'w')
            TrackCommon.close()
            
            ac.log("Track Common Config created")
            
            Content = "Track: " + trackName + "\n" + "Car: " + carName
            
            if os.path.isfile(trackcommonpath):
            
                trackCommonExists = True
                Content = Content + "\nTrack Config in Loaded folder: YES"
                ac.log("Track Config in Loaded folder exists")
                ac.setText(btnTrackCommon, "Open Track Loaded")
            else:
                Content = Content + "\nTrack Config in Loaded folder: NO"
                ac.setText(btnTrackCommon, "Create Track Loaded")
        
            
            if os.path.isfile(trackpartpath):
        
                trackPartExists = True
                Content = Content + "\nTrack Config in particular folder: YES"
                ac.log("Track Config in particular folder exists")
                ac.setText(btnTrackPart, "Open Track Particular")
            else:
                Content = Content + "\nTrack Config in particular folder: NO"
                ac.setText(btnTrackPart, "Create Track Particular")
            
            if os.path.isfile(carcommonpath):
            
                carCommonExists = True
                Content = Content + "\nCar Config in Loaded folder: YES"
                ac.log("Car Config in Loaded folder exists")
                ac.setText(btnCarCommon, "Car Loaded")
            else:
                Content = Content + "\nCar Config in Loaded folder: NO"
                ac.setText(btnCarCommon, "Create Car Loaded")
            
            if os.path.isfile(carpartpath):
        
                carPartExists = True
                Content = Content + "\nCar Config in particular folder: YES"
                ac.log("Car Config in particular folder exists")
                ac.setText(btnCarPart, "Car Particular")
            else:
                Content = Content + "\nCar Config in particular folder: NO"
                ac.setText(btnCarPart, "Create Car Particular")
            
            ac.setText(text, Content)
            ac.setFontSize(text, 13)
        
    
        
    def CarPartConfig(dummy, variable):
    
        global CarPart, trackcommonpath, trackpartpath, carpartpath, carcommonpath, Content, TrackCommonExists, carextpath
        
        if os.path.isfile(carpartpath):
            
            webbrowser.open(carpartpath)
            ac.log("Car Particular Config opened")
            
        else:
            carPartExists = True
            os.makedirs(carextpath)
            CarPart = open((carpartpath), 'w')
            CarPart.close()
            
            ac.log("Car Particular Config created")
            
            Content = "Track: " + trackName + "\n" + "Car: " + carName
            
            if os.path.isfile(trackcommonpath):
            
                trackCommonExists = True
                Content = Content + "\nTrack Config in Loaded folder: YES"
                ac.log("Track Config in Loaded folder exists")
                ac.setText(btnTrackCommon, "Open Track Loaded")
            else:
                Content = Content + "\nTrack Config in Loaded folder: NO"
                ac.setText(btnTrackCommon, "Create Track Loaded")
        
            
            if os.path.isfile(trackpartpath):
        
                trackPartExists = True
                Content = Content + "\nTrack Config in particular folder: YES"
                ac.log("Track Config in particular folder exists")
                ac.setText(btnTrackPart, "Open Track Particular")
            else:
                Content = Content + "\nTrack Config in particular folder: NO"
                ac.setText(btnTrackPart, "Create Track Particular")
            
            if os.path.isfile(carcommonpath):
            
                carCommonExists = True
                Content = Content + "\nCar Config in Loaded folder: YES"
                ac.log("Car Config in Loaded folder exists")
                ac.setText(btnCarCommon, "Car Loaded")
            else:
                Content = Content + "\nCar Config in Loaded folder: NO"
                ac.setText(btnCarCommon, "Create Car Loaded")
            
            if os.path.isfile(carpartpath):
        
                carPartExists = True
                Content = Content + "\nCar Config in particular folder: YES"
                ac.log("Car Config in particular folder exists")
                ac.setText(btnCarPart, "Car Particular")
            else:
                Content = Content + "\nCar Config in particular folder: NO"
                ac.setText(btnCarPart, "Create Car Particular")
            
            ac.setText(text, Content)
            ac.setFontSize(text, 13)
        
    
        
    def TrackPartConfig(dummy, variable):
    
        global TrackPart, trackcommonpath, trackpartpath, carpartpath, carcommonpath, Content, TrackCommonExists
        
        if os.path.isfile(trackpartpath):
            
            webbrowser.open(trackpartpath)
            ac.log("Track Particular Config opened")
            
        else:
            trackPartExists = True
            TrackPart = open((trackpartpath), 'w')
            TrackPart.close()
            
            ac.log("Track Particular Config created")
            
            Content = "Track: " + trackName + "\n" + "Car: " + carName
            
            if os.path.isfile(trackcommonpath):
            
                trackCommonExists = True
                Content = Content + "\nTrack Config in Loaded folder: YES"
                ac.log("Track Config in Loaded folder exists")
                ac.setText(btnTrackCommon, "Open Track Loaded")
            else:
                Content = Content + "\nTrack Config in Loaded folder: NO"
                ac.setText(btnTrackCommon, "Create Track Loaded")
        
            
            if os.path.isfile(trackpartpath):
        
                trackPartExists = True
                Content = Content + "\nTrack Config in particular folder: YES"
                ac.log("Track Config in particular folder exists")
                ac.setText(btnTrackPart, "Open Track Particular")
            else:
                Content = Content + "\nTrack Config in particular folder: NO"
                ac.setText(btnTrackPart, "Create Track Particular")
            
            if os.path.isfile(carcommonpath):
            
                carCommonExists = True
                Content = Content + "\nCar Config in Loaded folder: YES"
                ac.log("Car Config in Loaded folder exists")
                ac.setText(btnCarCommon, "Car Loaded")
            else:
                Content = Content + "\nCar Config in Loaded folder: NO"
                ac.setText(btnCarCommon, "Create Car Loaded")
            
            if os.path.isfile(carpartpath):
        
                carPartExists = True
                Content = Content + "\nCar Config in particular folder: YES"
                ac.log("Car Config in particular folder exists")
                ac.setText(btnCarPart, "Car Particular")
            else:
                Content = Content + "\nCar Config in particular folder: NO"
                ac.setText(btnCarPart, "Create Car Particular")
            
            ac.setText(text, Content)
            ac.setFontSize(text, 13)
    
     
  2. fughettaboutit

    fughettaboutit aka leBluem

    Joined:
    Jul 21, 2014
    Messages:
    1,118
    Likes Received:
    380
    Oh by "edit" you just mean have a button for the configs? Well i put that in sol weather app, on the "old" (sol<2.1) weather plan selector you have buttons for the configs, for track and car:
    (Edit: afair it searches 8 places for configs)
    upload_2022-3-6_13-28-21.png
    With hotkeys enabled you also can set a shortcut for that planner window too:
    upload_2022-3-6_13-30-26.png
     
  3. William Riker

    William Riker New Member

    Joined:
    Aug 23, 2015
    Messages:
    29
    Likes Received:
    5
    Oh, i'm using the last version of Sol so i guess that's why i didn't found that window. What i wanted initially was some kind of ingame text editor so one could write inside the text file live without having to open other programs like notepad or similar text editors. Having found no way to do this with the basic python tools in AC documentation, it was enough for me having some buttons to quickly open these files in notepad with just one click.
     
  4. fughettaboutit

    fughettaboutit aka leBluem

    Joined:
    Jul 21, 2014
    Messages:
    1,118
    Likes Received:
    380
    oh btw, that app i mentioned with the buttons is still included in latest sol, that plan window is still there, like above, without weather-stuff...
     
  5. William Riker

    William Riker New Member

    Joined:
    Aug 23, 2015
    Messages:
    29
    Likes Received:
    5
    This is what i get in Sol Plan Selector, i'm not sure how to access the window you mention..

    [​IMG]
     
  6. fughettaboutit

    fughettaboutit aka leBluem

    Joined:
    Jul 21, 2014
    Messages:
    1,118
    Likes Received:
    380
    oh this button
    upload_2022-3-8_0-0-0.png
    and this enabled:
    upload_2022-3-8_0-1-30.png
     
    William Riker likes this.
  7. William Riker

    William Riker New Member

    Joined:
    Aug 23, 2015
    Messages:
    29
    Likes Received:
    5
    Now i see that, thanks!
     
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice