HISE Logo Forum
    • Categories
    • Register
    • Login

    Download progress bar

    Scheduled Pinned Locked Moved General Questions
    19 Posts 3 Posters 685 Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • d.healeyD
      d.healey
      last edited by

      You can check the download's progress in the download callback and use it to draw a progress bar in a panel's paint routine.

      Link Preview Image
      HISE | Docs

      favicon

      (docs.hise.audio)

      Link Preview Image
      HISE | Docs

      favicon

      (docs.hise.audio)

      Libre Wave - Freedom respecting instruments and effects
      My Patreon - HISE tutorials
      YouTube Channel - Public HISE tutorials

      1 Reply Last reply Reply Quote 0
      • J
        johnmike @Lindon
        last edited by

        @Lindon said in Download progress bar:

        @johnmike

        FileSystem.browseForDirectory(var startFolder, var callback)

        Link Preview Image
        HISE | Docs

        favicon

        (docs.hise.audio)

        I get the console error "Found 'var' when expecting an expression"

        d.healeyD 1 Reply Last reply Reply Quote 0
        • d.healeyD
          d.healey @johnmike
          last edited by

          @johnmike Post your code

          Libre Wave - Freedom respecting instruments and effects
          My Patreon - HISE tutorials
          YouTube Channel - Public HISE tutorials

          J 1 Reply Last reply Reply Quote 0
          • J
            johnmike @d.healey
            last edited by

            @d-healey

            const url = "https://www.dropbox.com/s/wldq9cxssx3cif7/Screen%20Shot%202022-11-17%20at%205.34.44%20PM.png?dl=1";
            const downloadsFolder = 
            FileSystem.browseForDirectory(var startFolder, var callback);
            
            reg pause = false;
            reg abort = false;
            reg download;
            
            Server.cleanFinishedDownloads();
            
            // btnStart
            const btnStart = Content.getComponent("btnStart");
            btnStart.setControlCallback(onbtnStartControl);
            
            inline function onbtnStartControl(component, value)
            {
            	if (value)
            	{
            		startDownload();
            	}
            }
            
            // btnPause
            const btnPause = Content.getComponent("btnPause");
            btnPause.setValue(0);
            btnPause.set("text", "Pause");
            btnPause.setControlCallback(onbtnPauseControl);
            
            inline function onbtnPauseControl(component, value)
            {
            	if (value)
            		pauseDownloads();
            	else
            		resumeDownloads();
            		
            	value == 0 ? component.set("text", "Pause") : component.set("text", "Resume");
            }
            
            // btnAbort
            const btnAbort = Content.getComponent("btnAbort");
            btnAbort.setControlCallback(onbtnAbortControl);
            
            inline function onbtnAbortControl(component, value)
            {
            	if (value)
            	{
            		abortDownloads();
            	}
            }
            
            // Functions
            
            inline function startDownload()
            {
            	pause = false;
            	abort = false;
            	
            	Server.setBaseURL("https://");
            	
            	local f = downloadsFolder.getChildFile("test.png");
            	download = Server.downloadFile(url.replace("https://"), {}, f, downloadCallback);
            }
            
            function downloadCallback()
            {
            	if (abort)
            		this.abort();
            	else if (pause)
            		this.stop();
            
            	if (this.data.finished && !pause)
            	{
            		Console.print(this.data.success ? "Done" : "Fail");
            	}
            }
            
            inline function pauseDownloads()
            {
            	pause = true;
            }
            
            inline function resumeDownloads()
            {
            	pause = false;
            	download.resume();	
            }
            
            inline function abortDownloads()
            {	
            	pauseDownloads();
            	
            	Engine.showYesNoWindow("Cancel Download", "Are you sure you want to cancel the download?", function(response)
            	{
            		if (response)
            		{
            			pause = false;
            			abort = true;
            			download.abort();
            		}
            		else
            		{
            			resumeDownloads();
            		}		
            	});	
            }
            
            
            
            
            
            
            
            
            
            
            
            
            
            
            ``
            d.healeyD LindonL 2 Replies Last reply Reply Quote 0
            • d.healeyD
              d.healey @johnmike
              last edited by

              @johnmike Ah ok, Lindon was just showing you which function is used to open a file browser https://docs.hise.audio/scripting/scripting-api/filesystem/index.html#browsefordirectory

              There are many ways to implement it. Usually in a button callback.

              Libre Wave - Freedom respecting instruments and effects
              My Patreon - HISE tutorials
              YouTube Channel - Public HISE tutorials

              J 1 Reply Last reply Reply Quote 0
              • J
                johnmike @d.healey
                last edited by

                @d-healey ok I can do a deeper dive when I have more time to experiment and wrap my head around the file system stuff... but here's a snippet of where im at now... I just want to connect this progress bar in the panel to the download progress...

                HiseSnippet 1772.3ocsX0naaTDD9bZOfyPQfDO.KVpnKf6kytITfnRy+PDMAq31BnR.s4t01q55cM2tNIVUQhGMdD3Qg2.Xl890NmSQQfijysyO67MyNyb63dIpHlVqRbZ38rYSXNMdO29yjlQ6NhxkNGtGRXO0ERghFyRb1Y1DpVyhcZz3NeCJQCu65X+7WOYGpfJiXkjbbdghGwdJeL2TRs2VeGWHN.1tmwGWQ5025vHkbWkPMEPycbCclPidEcH6XJJ1JtNMdq8i4FUReC0vzNMt6Np3Y8GAnKU9Wv07yDLbQGm9vFkR9.kHFQLR0Y2QbQbubuV6.6RuxXvcRiAej6Q7XdA8xXwGXYPJ0nZ7nwJyCu6LG75TEdgUfWMPpQEHc2TH8gt8iR3SLkbP77ttGJMrjATHrWEJox5rxO9tt6p.IjlfwzWwNHAVTng+mGF1l.es5lMaBgdsgLMQPdLoUbhZxYpKChTiWSu1Eh3e6KitTqu7gQ7AOZMXyYL486FB9lA9G7W2GzoyC57HXAEorQvCWOX80gm5cTvD4vmDKdbmValYj3rzIs8fIAL3AbAq+LsgMNXHyjR1uBw7DPMhzD1PxD5TMCTb.UnYaZIQOSkXlmTtg.k5yRNmkDDIXT4AbIWOhEWrq931t1ZjyLR3rKwjgy7kvllGDAzsqZ7DkDV32JWfVf94OGnQQjlDkXWpPbFjB6qj4by3f1iKEbIiLXpLxvURx0DxOJ2RsImSESYq170M83CH9Yq7fkdZTibOAcDuqZdUt2zCCSkdSurn1R8Fq.Ydi8YzadAZM+vEn52xvtzzpMoUsJUaHvx8MEBpJzaND3YyDl6jziAI..mDld53EX40zypI4wOlDRdBoX+q0kHe0xD3D6diNcQrdaL+qLVucV53Ri0VAxBa1mWZXyx8ME1pJz+tLGaAy7gm7TmCx1Z80M1B4a3FuPwn2BUhPLOq5CbvcnZ1yO4o9sFYLSze0ZqgQ.PBgJhJHC.sVn6fMvgMHw1A3Af1fcTrpkKJnUlExoXEFZlEjvlHvVcUrWaxqupMYP6BKkGsSOMK7zEY6WDEsNHl7YFw0A1UEIdDT.aDoP.sQMw1hwprkTL0PCFj0Gh7IeB4iyUAOYfiQsRvBljvgjkREzSivd+Pdaq8fi2VP9YqCnbQqhytEOsVr5n5wkIYJay5T5ZEN0cHmGcBRkF7Ou51qESxZ9Zul0Uy1zae4PPy.M79xehoOV8CbIXC+V6h2oPPxEGq91NgQlolRzSyd3BpzPLJRTprlQrhSum.JjiFe.qPcQQbFONpPxR6ZNpWQ9bZ.CHT36kG8P32Kuwicaps6yUXCnqxBUPc1Do.de9PPVcVmiyoIUotzFHUjAO8qrb9V1KxAuxURQFcQfAOhIvGz7WhtJlyMLeif8AYZ+B45eI4yHcVkbeRmNorJXmlvmq3kqtYExPsHESnw5rqAMrshEb9c2HrNj2C08D0TCjkTB7g4HeHTNIDaKD9o2fTGblHslt.anyQA3+xbu6G3wlQ9qRVizk7.x5gg3SsKb9ukwGNxTvuaF60waM0M7zJ67vzd2ncKLeLM4U.3mkgfT7A3WB2E8DVjgJGB8nnsIarHFO+5G.fk6Dt4Rs0Ei3F1ManWReY3osIzW1w9c2SIeJ4b7oGd5oKhAxWSBC1nKzmoNikFWgdO0wTfgr4b63D5EaCjkr3mAu8z+bvvcfP8mQZcen1DB.shfT5DVbq7DixOUdG2wJC66SyTwxGxhrFLnVdYuRT.IV0wNMk6FTzWNc7YrjpuHEEDtW97W12c4W1u5rHQoUyUDTIOTxMe+DlbYSn3j0B.d54GtG7h.bBgLZfbSXIFNBgF6wNGF2JcdAO28X5WAu4APZQeCmFuiwx88yllXmoFiR5vggFZ5le+SmKKGJauslUt33sv6+3z3scSkiqORMF1VZxrTryjTvmwQjdJiljMUlldN6PYOnNlYxm3oDPu0MCH6MwVFf9iet.Poxcyl5M361aPsLSsEqvTox8egu+1o.5d4i1QkLgEO2ysRyuJP52OoBj9SyVWfMvJ495sFYaYU5B+RFpuma9tsCMAFA+ZiWBC1phmJnl4m1EGwOiATUL2Hl3XjRM2Lq5OAv+Yi.+uEhenaOtIZT8XbkZvHT67+AFy9gCtm69CF.8bKA3ccO3G++4WIvI8kgCOhZR3PNh6wSG2GZBGw.qKgTIrqTiUv9GoqCw0XDnOSFaW72vmLlcv0MxX1ImoyXZTh5WiR6Eh+zDuikBfIo8Wkwy8HbMoiis+HnmaXPnyXnL3WihP2+APKs50o6sPmGdKzY8agNabKz4yuE57nagNewMpC1AZ6oF03zxAfPu8suznQi8ssnrYgN+C..EdSD
                
                d.healeyD 1 Reply Last reply Reply Quote 0
                • d.healeyD
                  d.healey @johnmike
                  last edited by

                  @johnmike You don't need to use a timer for this. In the download callback you can get the progress of the download (see the link I posted before) which returns a value between 0 and 1. Set this as your progress bar panel's value and trigger a repaint. In the panel's paint routine you can use this value as the multiplier for the width of the progress indicator.

                  Libre Wave - Freedom respecting instruments and effects
                  My Patreon - HISE tutorials
                  YouTube Channel - Public HISE tutorials

                  J 1 Reply Last reply Reply Quote 0
                  • J
                    johnmike @d.healey
                    last edited by

                    @d-healey I know it's something obvious that im missing...im very much still wrapping my head around all this...plus im more of a Kinesthetic learner...ive gotten as far as I have watching your vids and learning from recipes and various snippets posted here....I subscribed to your Patreon so I've been digging around over there...plan on just getting your Hise masterclass soon...but the way my life is setup now I just don't have the time to really dig my heels in to make this work...I just need a simple progress bar added to this...Just want the end user to click start on the downloader and see the progress of the download and when it finishes...Im willing to pay you to do it(simple as it may be) Its a small part of a larger project im working on and I don't want to sink too much time getting stuck here trying to learn the panel paint routines...

                    HiseSnippet 1804.3ocsX0uaaTrEecZWtcMTDHwCvfkJZC3twNMkBD0ay2WhnIXEWJbUIflr6X6Qc7L9NyXmXEEIz8etuV7HviBuAbOmY+vqcVmVEUbkR247wb9c9bmY6nUwLiQo8pE7hoiXd09.+tSk1A6NfxkdGtGRXO04Rghlvzd6LcD0XXId0pcm+EJQsf65498mOaGpfJiYyH448REOl8b9PtcF0Na8cbg3.X6dAeXIo2XqCiUxcUB0X.M2wuk2HZ7qo8YGSQwVw2q16seB2pzcsTKy3U6t6nRl1c.ftT4eI2vOSvvEs85BaTJ4CThDDwHUucGvEIcx8ZiGrKclECtSZL3S7OhmvKnOKV7QNFjYZTNdTak4g2clCdsKCuVkfWEPpVIHc2TH8w9ci07Q1YbP7799GJsLcOJD1KCkTY8V4z22eWEHgzFMj9Z1AZXQgFgeYqVMIveVcy50gPuwRFqEjmRZjnUiNScQTrZ3Zl0NWj7e953KLlKdTLu2SVC1bFS9f0aA9lE9O3eq+v1seX6m.KnHkGG8nMh1XC3oNGEMR1+YIhm1twlYFIIqbx3RLZvfGvErtSMV1vn9LaJ4vRDyK.MHR0r9jQzwFFnXOpvv1zQhdlRammTtg.k5xzSX5nXAiJOfK4lArjhcMD210ViblUB4NsMCm4KgMMOHBnaW0vQJIrHrQt.M.8yeNxfhHsZkXWpPbFTBGpj4by3f1iKEbIizarL1xURx0DJLN2RMISnhwrUqeY8.dORX1p.XYfA0H2SPGI3p5Wk6McvvzLuoSVTaodiSfLuw8L5MuDsVXqEnF1vxtv1nIoQkJUYHvw8MEBJKzaNDD3pDlKSFvfB.filYFObAVA0CbZRd5SIsHOiTr+U5RjuYYBbhauQmtHVuMV+MKVucV43Ri0NAxBatmWZXyw8ME1JKzaWkiqgY9vSdoyAYas45Fag5MbiWnYLXgNQHlm08AN3NTC6GN44gMFXsiLeyZqgQ.PBgJlJH8.sVX5fKvgCHwwAXBvXwIJN0xEEzJyB4TbBCCyhzrQBbTWI60jb4UMI8ZVXo7ncZ1rvSWjcXQTz4fXwmc.2D4VUT3QPAbQjBALV0H2HFmxNRITKMpW1bHxm8YjOMWELy.oQiRvhFo4PwxLELiiwY+Pcai8fzaCn9rwATtnQQtawr0hcGkSWV8X1lUoz0ZbpJImGchRkF7ufp1qEKxpeYP8p5YqGrurOnYjAde4+lYNV8ibIXivF6hmoPPxEG691VyHSUiIlwYObNUZIVEINUV6.VQ16YfB4nIDvJzWTDmwzQIRNZWyQCJpmSCX.gBeeVpGB+A4CdbaSkSetBG.cEFpBv1rQRA7579fnPiV0CJJIhKKWZ87ylgsL2X3VjKjytSnZxEnCfUR8y0B4Pfeo+E4GdA4KHsWk7.R61YLmIPZobtxWr5lkoCsYTrVMeOW.lcPlmnFagLbXQ1n+poBe4LS0GZJDhsEhvzyAZhNSj1Yt.ZvenaQAX+pb+5G4I1AgqRVirN4gjMZ0BepYga+sLd+A1B9qmwdC7TPq25zJsQ+zoxHVJfTBU+Zv0lVFUo.GbQIbTySXwVprOLBh1j73kC9IWOm.PpcqMuY6e9.tk8VX7WQeUqSaRnups6uqeJ4yISvmdzomtbbQ9mjVQOdcXHSU1NMc.Cdpho.iuWOxjnomuMvSxRdA79yvI.NZCImufz3AP2IDiZDCE6ZVRibEupn3r7DYk7Xkk88xzIR.Kxhr50qRdYuWT.mprJ138Pz2jhgxwCOioK+1TTP3v4yehe+keh+xWHINsUujfJ4gRt86GwjK6ZJdYyGfm9gC2Cda.dMgLZfbiXZKGgPs8XSf6bkdog.+8XlWCu9AfVwPEuZ+Cqi68ytRwgCgKY4wgKNbOe2ys8tn7k3lVdw4XOVAge++t0.WWUAkQ+uslT9dNdkr68Rs6GlY2cFasJoyv08yO7aYSu2VkL8wagG9B.uepbbyQpgv1R0SSiYLIErJd+rmyn5rqDZnSXGJ6.ChX1qCn26lAj6XfKCP+9OW.nT4tYS8F7c2w2Vlo1hUXpT4dW36KTDzgJYBGdtueoo2kfzucRIH8G1sluR32tbwJAueIC022Oe21gpg6+es61B2pVkLVPsyeUa76Kjw.5Fm69s3cXkFtcZ4u+v6r6e+1BwO1uC2FOnZLtREXD5Y+6.iYe0h66ueudvz+Y.7t9G7S+87IJ7Read+inVMGpQ7Od7vtvKAhYf0kPoDNMr1J3bqz0sv0XDnKSl3V7WvuLlsw00xX1Nmo2PZrV8qwoyfwuKx8bT.LIceRn.+iv0j1dt4xfd9shZ4MDZC903Xz8eHLJsZcV+VnyitE5rwsPmGeKz4KuE57jagNe0MpCNAZ6wV0vz1AfPm8curpVs8cinbUgd+emYA49.
                    
                    d.healeyD 1 Reply Last reply Reply Quote 0
                    • J
                      johnmike
                      last edited by

                      If anyone could help I'd gladly buy your lunch tomorrow or a beer for the weekend he he! LBVS...

                      1 Reply Last reply Reply Quote 0
                      • d.healeyD
                        d.healey @johnmike
                        last edited by d.healey

                        @johnmike said in Download progress bar:

                        I don't want to sink too much time getting stuck here trying to learn the panel paint routines...

                        You've already got the paint routine. You just need to use the download progress from the download callback as the panel's value instead of setting it in a timer.

                        It's almost identical to what you have already. In your download callback you use this.getProgress() which will give you a value between 0 and 1. You assign this as the panel's value, then you call repaint, just like you're doing in your timer.

                        Then in the paint routine, instead of v = this.getValue() / 10 you can just have v = this.getValue();.

                        Libre Wave - Freedom respecting instruments and effects
                        My Patreon - HISE tutorials
                        YouTube Channel - Public HISE tutorials

                        J 1 Reply Last reply Reply Quote 0
                        • J
                          johnmike @d.healey
                          last edited by

                          @d-healey like so? ```

                          // pnlProgress
                          
                          Content.getComponent("pnlProgress");
                          	pnlProgress.setValue(0);
                          	
                          	this.getProgress();
                          	var x = this.getValue();
                          	    
                          	    x = (x + 1) % 11;
                          	        
                          	    this.setValue(x); 
                          	    this.repaint();
                          	    pnlProgress.setPaintRoutine(function(g)
                          	    {
                          	        g.fillAll(Colours.black);
                          	        
                          	        var a = [this.getWidth() / 2 - 400 / 2, this.getHeight() / 2 - 20 / 2, 400, 20];
                          	        
                          	        g.setColour(Colours.darkgrey);
                          	        g.fillRoundedRectangle(a, 5);
                          	        
                          	        var v = this.getValue();
                          	        g.setColour(Colours.white);
                          	        g.fillRoundedRectangle([a[0], a[1], a[2] * v, a[3]], 5);
                          	        
                          	        v > 0.52 ? g.setColour(Colours.black) : g.setColour(Colours.lightgrey);
                          	        g.drawAlignedText(v * 100 + "%", a, "centred");
                          	    });
                          	    
                          }
                          
                          

                          I'm still not seeing it do anything...where do I assign the panel's value? I appreciate you helping me...

                          d.healeyD 1 Reply Last reply Reply Quote 0
                          • d.healeyD
                            d.healey @johnmike
                            last edited by

                            @johnmike The first snippet you posted, did you write that code?

                            Libre Wave - Freedom respecting instruments and effects
                            My Patreon - HISE tutorials
                            YouTube Channel - Public HISE tutorials

                            J 1 Reply Last reply Reply Quote 0
                            • J
                              johnmike @d.healey
                              last edited by

                              @d-healey yea but did so following your downloader tutorial and your panel timer tutorial on your Patreon just typing it in as you went...but my 40-year old brain isn't making the connection between the 2 yet ha ha

                              d.healeyD 1 Reply Last reply Reply Quote 0
                              • J
                                johnmike
                                last edited by

                                so I did both separate and then copied and pasted one into the other

                                1 Reply Last reply Reply Quote 0
                                • d.healeyD
                                  d.healey @johnmike
                                  last edited by

                                  @johnmike Ah copy and paste to create a Frankenstein code is always dangerous :)

                                  The download callback is the part that starts with function downloadCallback()

                                  Inside the download callback you need to get the progress of the download and assign it as the panel's value. This is pretty much the same as you are doing in your timer callback, except there you are using x. Then you need to call the panel's repaint function.

                                  The paint routine is the part that starts with
                                  pnlProgress.setPaintRoutine(function(g)

                                  In the paint routine you just need to do what I said in my last post :)

                                  I could do this for you, but then you will come back with more questions when you want to change something or you find a bug. You need to be in control of your own script.

                                  Libre Wave - Freedom respecting instruments and effects
                                  My Patreon - HISE tutorials
                                  YouTube Channel - Public HISE tutorials

                                  J 1 Reply Last reply Reply Quote 0
                                  • J
                                    johnmike @d.healey
                                    last edited by

                                    Ok gonna try this and go back to the "drawing" board again!😖

                                    I could do this for you, but then you will come back with more questions when you want to change something or you find a bug. You need to be in control of your own script.

                                    Absolutely! I totally get it!I taught music for almost 15 years before I started my online business...this is like learning scales all over again lol! The student wants you to just jump and show them the sexy jazz chords and runs...but hasn't yet fully learned the theory and foundation behind those chords/runs...which would make them a better and more skilled Musician being able to create and imagine their own chords/runs...I get it lol :expressionless_face:

                                    1 Reply Last reply Reply Quote 1
                                    • LindonL
                                      Lindon @johnmike
                                      last edited by Lindon

                                      @johnmike Ok well you cant just copy and paste code out of the documentation and expect it to work...

                                      FileSystem.browseForDirectory(var startFolder, var callback)
                                      
                                      • you need to specify a value for startFolder, even an empty string will do
                                      • you need to define a function for callback, that function will need a single param called result -this will be a file object, in this case a Directory - that you can manipulate and check in your function...
                                      // get the folder 
                                      WeDontUSeThis = FileSystem.browseForDirectory("", function(result){
                                      			MyDownloadFolderString = result.toString(FullPath);
                                      			Console.print( MyDownloadFolderString);
                                      			
                                      				
                                      		});
                                      

                                      HISE Development for hire.
                                      www.channelrobot.com

                                      1 Reply Last reply Reply Quote 0
                                      • First post
                                        Last post

                                      18

                                      Online

                                      1.7k

                                      Users

                                      11.8k

                                      Topics

                                      102.4k

                                      Posts