Desktop Development Improvements in .NET 5 - WPF, WinForms, and ClickOnce

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
with the latest version of visual studio and net5 there have been a few really powerful changes to desktop development in c-sharp in this video we're looking at the changes specifically to win forms and wpf development along with the re-introduction to click once in.net now if this is your first vid you've watched of mine my name is tim corey it's my goal to make learning c-sharp easier i provide videos twice a week here on youtube to help you grow as a developer i also have a full set of training courses on iamtimcory.com i encourage you to check out all the resources i have to offer now in this video as with most of my videos let me create some source code if you'd like a copy of that source code just use the link in the description you might even get a special bonus just for downloading the source code okay let's get started looking at the new features in desktop development here i have visual studio i just upgraded so it's now version 16.8.2 there's another minor bug fix patch they just put out today but all these changes really apply to anything in 16.8 so let's scroll down to create a new project we're going to start first with i've filtered my desktop apps where i'll look for the windows form app but not net framework if we look down here we should find a windows form app that says dot net now dot net is going forward that's net five going forward that is the one you want to choose for legacy things that's when you use the net framework so dot net for windows form we'll call this winform demo and we'll call this the desktop app demo so i'll create a winform app first because there's not a ton to show you here at least not i'm not gonna go into a ton i just wanna show you that yes things have changed a little bit and primarily the thing has changed is there has been a continued work on the form designer so that this this form designer right here is now in theory more stable it has more availability to bring in third-party controls into the drag-and-drop designer and things just tend to work better so we still have the common controls we can drag a button on here we can resize it and all the good stuff that we normally would do with winforms and and really in some ways this is a return to what we used to have it's not exactly a leap forward from a usability standpoint behind the scenes it's a leap forward technologically but in the usability it's actually just catching up to what we had with dotnet framework so just so you know it's not gonna look like a big deal we do have a little cool little icon here now instead of the original icon that was i believe blue yellow and red um but besides that it feels and acts like the old designer so i just want to point out that that is kind of a change it's a big deal that this is actually working now right in visual studio rather than be a preview that only works kind of part of the time there's still ways to go on it but it's almost there now if you are a winform developer that should it should encourage you that there is still a lot of work being done to make sure that winforms still works well in net five okay so if we right click on this project i believe it's getting.net nope.net core 3.1 we can go to five so this is a net five project we can still you know put labels on all the rest so it still works and it's still being improved upon and worked upon so if you're winform designer just know you can still have win forms today even in the very latest.net 5. just to be clear winforms is not cross-platform even though it's powered by net 5 which is cross-platform in most cases the clue is in the name windows forms it's tied to windows even the name is tied to windows all the libraries are tied to windows and that's not something they'll separate so even in.net 6 when you get maui which is desktop development across all three platforms mac linux and windows we still aren't going to get win forms to work cross platform that'll be a separate desktop application it will not be win forms or wpf so just want to point that out but if you're not a winform developer you're saying well man winforms should just die already why isn't it gone already and the answer to that is well because so many people use winforms it is still i would guess based upon and this is anecdotal based upon the people i've talked to it might be still the most used user interface out there it may seem like that can't be the case because it's been surpassed by wpf or uwp or whatever else but remember businesses move slowly and they can't just rewrite their user interface quickly so therefore they're still on those user interfaces they're still expanding those user interfaces so it's still good to support winforms and i really appreciate the fact that microsoft is supporting them and even though winforms was kind of the first designer that's back in 2001 time frame was when winforms came out for net because it's really a port from vb6 and before so this has been around for decades and yet still being supported and updated with the latest code so um we appreciate microsoft doing that that's all i want to show winforms let's go on to wpf where i think a lot of you will be interested visit a lot of cool stuff here and i'm really happy with a lot of the quality of life changes they've made for wpf so choose jpfapp.net and we'll say this is a wpf demo all right we can unpin this and this is a basic apf app that you are probably familiar with if you've done any desktop development it looks the same but i do want to show you something really cool here the first thing i usually do when i come in to create a new app i i set out my grid rows and columns i specify how many rows and how many columns so let's do that with this code and let's do this let's specify three rows three columns and we'll only use the middle ones of each so i'm going to say grid dot notice that intellisense and especially um the highlighting of the most important or most used things is really helpful here so i can hit column definition that's really nice intellisense has been improved in xaml really great and then also again i can start typing here i see oh column definition that's what it is i always forget with column definitions versus row definition i have a hard time spatially thinking you know left right up down kind of thing and so is it width or is it height that i specify for a column now if i stop and think about it for a minute well a column is vertical therefore it's the width but if i just hit space here it tells me oh width i can hit tab now here's another feature that has been missing from xaml for a long time and it's finally in place i want to type star but notice my cursor is right after that star and before the close quotes in the c sharp in actual c sharp code at this point i could hit the double quote character and it would just move my cursor to the other side of that double quote in xaml for the longest time it would not do that it would put an extra double quote but now i can hit double quote and it just moves my cursor over which makes it much much faster when you're typing things out so that's a for me it's a huge quality of life thing that's a that's a big deal it doesn't define three columns here the outer columns are star meaning they take up as much space as is available the middle column is an auto meaning take up only what you need and do the same thing for rows row definition and again intellisense is going to help me move very very quickly on this so i'll paste that two more times and i'll make this one auto so now i have my again rows the top and bottom one split the remaining space and the middle one takes up just as much space as it needs which right now since there's nothing in it it's just got a point here there's nothing in them so i'm gonna create a little stack panel here so let's scroll down here i'm gonna create a stack panel and i'm gonna say the orientation is vertical grid.row is one grid.column is one notice intellisense again has really helped me out here i don't have to pick my hands up off the keyboard or go over the arrow keys i can just keep typing really helpful i'm going to say text box and let's say that the um let's text box x colon name is going to be first name and let's say that the width is let's start off at 50. and we'll put a margin on here of five okay we're gonna copy this and we'll paste it and we'll say last name again margin 50. well that's great but if you notice let's move a cursor out of the grid if you notice that looks kind of small but how do we know if it's smaller but just zoomed in well now there's this new feature called well new feature to 16.7 of visual studio i believe called design time binding so we can say d colon for design time notice intellisense comes up and say text so i'm going to put the value for the text in this box i'll say tim and notice i can see it says tim it's very very small i can scroll up here to my window and i say you know what i want the font size to be 24 for the entire object cool now i can see the the size of you know what it says for tim i can do the same thing down here for last name d colon text there we go for corey i can notice oh it's that's cutting it off i can say well let's let's do a hundred and a hundred and now i can see based upon the data in this form okay that that makes more sense for the size of my boxes now let's set this as startup project and let's run this and when we do we're going to see those boxes are empty there's no values in there and the reason why is because whenever you say d colon you're saying this is design time only design time is right now when i'm working i'm designing it what this allows you to do is put sample data in your fields that doesn't affect anything at runtime there's no repercussions it's not like you're gonna put tim corey in there where you have to you know change it or wipe it out remember to wipe it out nope that's just design time data that allows you to see what data might look like in that box we can say you know what timothy is maybe a more representative name it's a little longer it's got seven characters is that good enough yeah i think it's probably good enough but it's probably a little tight for anything more than that and there are names that are longer than seven characters therefore may i want to make some changes or tweaks so design time binding really cool feature and you can bind to pretty much anything if you notice that that d colon list you can bind to a lot of things now it makes most sense to do things that are visible because that's what's about is just the design the look of it when it's on the screen but you can even bind lists and you can bind um your checkbox values and radio buttons and a whole bunch of other things at design time so you can see what it might look like when it's actually filled out so that's a really helpful feature when it comes to designing our forms in wpf it's one that i will use all the time because i want to see what my form looks like filled out because that makes a big difference in seeing if it really makes sense how i've built it for example what if i had said that the height was i don't know 10 let's not go to that stream 20. well if there is no design time data here that box looks okay it's only when i put data in that i oops well i just i just overwrote it and i don't want to there we go it's only going to put data in it they go oh it doesn't make sense to to make that height 20 because it cuts off the the words where if i said 50 that's just too much i could play around and go okay i think more like maybe 30 35 something like that or you know as you can do with the apf just take it off and it figures it out for itself so that's like i said a really helpful feature just d colon and any property you can change at design time to allow you to see what it might look like in production now this next feature is one that you'll probably have to turn on so if you go to tools options and not under environment under debugging and then under hot reload you want enable hot reload and in here's a few things that you want to look through um i currently don't have the in-app toolbar turned on but we will we'll use the live visual tree which can act the same way as a live or the in-app toolbar i'll show you both um but this is allowing xaml hot reload on document save this checkbox need to be checked and it's probably good to enable this as well enable just my xaml in the live visual tree because then you're not mixing your code up with what comes from microsoft now if you're into uh xamarin forms there is one more feature in here that uh we're not ready to cover in this video but i want to point out and that is the changes only which is a preview feature for the hot reload in xamarin forms really helpful it doesn't do a full page refresh it just updates the feature or change that was made so if you just change a combo box only that combo box gets refreshed everything else stays the same so really cool stuff there in xamarin but in this case we're just going to look at the wpf xaml we hit okay and let's run this application we're gonna do is i'm gonna bring this down i'm gonna let's minimize this for a minute that will come later let's bring over our wpf app on the left here and i'm going to try and get both on the screen if possible so on the left here's my vision live visual tree and this shows me the hierarchy of everything on the page notice i can right click on first name and say view source and it goes right to that line line 21. even if i'm up here on a different line and i right click and say view source it goes right down to line 21 and shows me oh there's a text box you're talking about i can also do this which is the second icon right here is notice this icon right here it's got a little square um a rectangle box with an arrow on it it says select element in the running application this is very familiar to you if you are a web developer have used the developer tools in say chrome where you can click this and then select anything on your wpf application notice the red dots around the elements you click on it and it takes you right that element in the visual tree which then you can go to view source and see the source for that not a big deal when you have 25 lines of xaml but if you have 250 lines of xaml really helpful stuff so that's the live visual tree you can turn on or turn off the in app toolbar this is the in-app toolbar by clicking this this left-hand button right here that says enable in-app toolbar personally i turn it off because i'm not a big fan of having it there i feel like it messes with my application to have it but um you know it's up to you if you like it cool go for it um for me i turn it off but still use the live visual tree if i need something because the wide visual tree has everything that the in-app toolbar has it's just in visual studio rather than right on your app okay let's talk about hot reload because that's kind of the the fun stuff here so i'm looking at this form and going you know it's just missing something it's just not quite complete i go you know what it needs it really needs to have labels so let's do that let's create labels for our our um stack panels here our text boxes so let's actually go right above it the text box where i say stack panel orientation is horizontal and we'll start with a text block text equals first name and we'll put margin of five like so and then after that i'm gonna going to um take this line out and put it right here and i do the same thing again let's just copy this right here and paste it and i'll call this last name make sure i got that right and that should be corey now make sure i got all those changes in all right so now i've wrapped them in stack panels but nothing has shown up over here on the left that's because notice the yellow here i haven't saved these oh so i hit save check that out i said save and boom running application new updates we're good to go so now i can say you know what these boxes right here if i type out timothy i'm really pressing the edges here i don't like that what if i want to side decide that you know what let's double that space and see how that looks boom there you go so that's the hot reload in wpf man is this going to save me time because this is what i do i tweak something i look at it i tweak something i look at it this is how i build all of my web pages i get something on a screen and then i run it and i use the the developer tools to say let's move this let's change this let's change this font size let's move this around i save all those changes in a notepad somewhere and i go and i put them into my css and my html and i refresh or i have a hot reload opportunity and then i do something still we're doing right here which is i make the changes i see them reflected immediately and then i keep tweaking and iterating it just makes life faster so that's kind of for me between the design time data and the hot reload wpf has gotten a big boost in.net 5. and technically it's not even net five it's net five and windows three one and it is with visual studio 16.7 and above i think that the hot reload might be 16.8 um so just get the latest version of visual studio and you'll be good to go so it was the big kind of takeaways for me that the improvements in desktop specifically desktop development in the newest version of net and the newest version of visual studio those are the big ones that came across from me except for one thing and that one thing's kind of a big deal it's one that people been asking for for a while it might even warrant its own video at some point but i think i can introduce the topic to you here and give you enough to get started at least and that is click once deployment now i've covered squirrel and i have covered um msix which are both alternate options for deployment but click once is kind of the original old school way of deploying your application with an updater from visual studio easily and it's back it's finally back and now you can deploy our applications using click once again it's not perfect it is not even necessary up to speed where it was previously in net framework time but it's getting there so let's talk about how to deploy our application using click once we're going to deploy this really stellar wpf application so let's right click on our wpf application and say publish and i say okay we're going to publish this too this is the the first tricky bit is you're going to publish it to a folder i know normally that just means putting it into a file location somewhere but if you hit next you now have the option of click once my guess is at some point we're going to surface not we the people of visual studio they're working on this are going to surface click ones back here that would be what i would suggest because it doesn't really make sense to hide it under folder when it's not really a folder deploy but that's where it's at right now is under folder click once hit next and this is going to ask you okay where do you want to deploy this these files to now for right now i'm not using a build process and you can use tools like mage to work with a command line to to do this on the command line and use a ci cd process but for you know click you know just publishing it once in a while or publishing it um just a sample app this is just fine to publish to the bin slash publish folder i hit next and it says okay how are you going to install the application where are you going user is going to go to find this application are they going to get it from a website from a unc path or file share or from a cd dvd or usb drive so how you distribute your file and the updates now this is where the the fact that i'm using larger fonts really comes to bite me because if you notice someone didn't use their wpf hot reload to look at the screen and evaluate or their design time data to evaluate it and go that's not gonna fit text very nicely notice there's actually text in there somewhere in fact if i hit control a it if i hit control v now my text is in there but all you can see is the tops of the letters it's kind of a bummer but um isn't i'll be submitting you know to see if they can fix that at some point but i've pasted the url in there what url well i've got a azure app service website and if we um browse to this right now there's nothing there it just says hey you know put something here so this is a basic web app on azure i just did this to show you that it can be done you don't have to do this in order to get the demo to work you can put it on a file share unc path or just say no we'll distribute it via usb drive or something like that but i want to show off the fact that you could do this so i put the url in there i hit next now we have some options here for application the first one is do you want to make this application work offline we could say that you have to be online in order to work which allows us to connect back to the mothership and make sure it's a valid application all the rest but nope we're going to allow this to work offline that's the default that's why i want to keep it the next one's also default the application will check for updates yes it will that's a good thing you want to be checking for updates the publish version major minor build and revision one zero zero zero right now and automatically increment the revision so every time you publish it's going to change the revision number by one so the first the first time you publish it'll be 1.0.0.0 if i just don't change anything but i publish again it's going to be 1.0.0.1 and so on now there are other options in here application files you can figure out which files are going you can add files you can say what's included or not the prerequisites you can say okay these things are prerequisites of our application by the way i think that i might have not moved over to net five i did not net five let's do it because probably should okay folder click once that location that url those defaults oops prerequisites um now it says net 5 for 64 bit and we can doubt specify where to download those well we're gonna say download from the component vendors website so download from microsoft if they don't already have dotnet five runtime on the machine that's really helpful because if we go install the application and there's not.net 5 there it wouldn't run unless we've done a self-contained deploy which we're not doing so this way we can say hey there's a prerequisite on.net 5 runtime but go ahead and install it from this location and then finally options you can go through the different options publisher information how you're going to deploy it the manifest the file associations and so on hit next this one is going to be important if you do this for production sign the click once manifest you're going to want to assign your application and the click once deployment as we will see when we actually run this if you don't it makes it messy because it's going to say hey this is not a validly signed application this is an unsigned application this is scary you probably shouldn't do this are you sure you want to do this which is totally valid that should say that because in general you should only run applications that are signed meaning the the person who created the application says this or this is a valid application so if it ever gets modified by an external third party it would fail that validation so with this you do want to have this but a developer certificate is not cheap so i am not going to cover that now i probably will in a future video how to create one where to get one how much it costs how to set it up what the process looks like and so on but for now we're going to leave this unchecked just note that you're going to want to have this checked going forward for production applications next configuration release any cpu net 5 for windows it says dash windows here because it needs to have the the bits necessary for wpf to run wpf is not cross platform it has to have windows bits therefore we're saying net 5 the windows version not just the cross platform stuff so just note that's the difference it is framework dependent meaning you have to have net five installed on the target machine if you did self-contained that's where it put net 5 into your exe application and then you can kind of bundle it all together but that does mean a much larger application a target runtime is portable versus a specific chipset you're targeting that's fine hit finish okay now we have our click ones all set up we hit publish what it's going to do is going to build the application first then it's going to create the publish file or publish files and if you click this open publish location link it's going to take you right to explorer at that location there's a bunch of different files here the important ones here are setup.exe and the wpf demo.application what this wpf demo.application will do is it will kick off the setup process and allow you to this has all the information for setting up your application and then launching it so the launcher i believe how this works the launcher actually launches your your exe application because it needs an intermediate step in order to get a net core application or net 5 application to launch but then you have this application files which has the different versions of your application so with that what we're going to do is we're going to put this onto our web application our azure web app but we're missing one file and if you've worked with click once before you know what file we're missing and that is the publish.htm file or sometimes you rename it into index.html but it's that web page that allows us to create a nice way to download our application we don't have to have it we can create our own but that usually built for us and it's not right now and this is a known issue if we go to the the webpage i had before the there is a under consideration i would encourage you i'll put the link in the description down below i encourage you go to this link and up vote to sign in first but upvote this post which basically says hey you're not generating the deployment webpage publish.htm when selecting install from a website they're looking into adding this feature in the future so if you opt up vote this saying yes i want this feature it's going to add weight to that so i encourage you go do that i've already done that when i logged in i'm the one up vote here i'm not the person who created this that's actually a person from microsoft but just note that this is open for consideration they're looking at hopefully getting in for 16.9 but we'll see if it actually happens it definitely will help if it has more backing behind it of people saying hey yes i want that feature that goes for any feature you see in any of these um community feedback forums if you see something that's like yeah i want that too don't just say that in your head vote because you saying yes i'm behind that too gives voice to the person that's asking it it gives them more of a backing and allows the team to know okay this is a more important feature to to look at now in this post there's also a workaround and the workaround is a little clutchy but it works and that is you download this file right here which is named publish.html.txt you download it and you rename it by removing the dot txt so now it's published.htm and then you modify it we're going to do that so i'm going to paste the file in here i've already renamed it to publish.htm i'm going to right click and say let's actually um let's actually do this let's open up our command prompt and go to vs code at this location so just code dot if you have vs code installed in the um so in this path right here if i do code dot that's going to open up vs code for this folder and there we go and i want to open up this publish.htm it's a bit of a mess this file notice how it it kind of scrolls and that's not really helpful to read i'm going to do is right click on this and say format document and that makes it longer but makes it much more easy to read and then in here we have now online 2 or sorry 393 we have this myapp.application this href equals in quotes myapp.application if you search the document for myapp.application then you can find this quite quickly and you want to change this this part right here my app you want to change that to whatever let's move this out of the way and close this out whatever your application is called in our case it's wpf demo dot application so come back over here and say w wpf demo notice intellisense fills that in for me it's really nice in vs code wpf demo.application and that's going to launch our application now if there's any other prerequisites see it says the following prerequisites and it says dotnet runtime 5.0.0 the 64-bit version but we could add our own prerequisites here if we wanted to there's other prerequisites you'd add them in here as well ctrl s to save this close it out and now our file is correct i do want to rename this let's rename this to index.html that that way i don't have to do anything in order to get azure to work with this location it will just say oh there's an index.htm file that's probably the starting point of the web application so let's copy oops i have to go off come back let's copy this path and i'm going to open up filezilla filezilla is a ftp transfer site i'm going to open up my connection to my click once server which right now just has one file in it hosting start dot html i'm gonna go to the path uh locally of my application my publish location i'm gonna drag all those over to my hosting side to my azure application when i'm done and i go to azure i hit refresh now i have my application now it's called my app i should have modified that to say wpf demo and we can probably do that it's not a big deal though also the version number is not going to change when i do a publish so we're going to modify that it'd be really nice it doesn't create it for us automatically but it's not and that's okay we can get around it now you may have had one question there is ftp files up to azure you might say well how did you do that you go to azure get published profile that downloads a a text file the init has ways to publish via web deploy and also ftp along with the ftp url the ftp username and the ftp password so grab those out use them to connect via ftp to your azure application it's quick and easy and when you're doing these little deploys for just testing purposes it's probably the best way of going about it instead of hooking up the cicd process to do your publish directly to azure so just want to point that out real quick um how to do that all right let's hit install so this page really doesn't matter i mean you don't have to have this this button right here if you um if you inspect this it's actually in the lower left hand corner i think i can zoom in here probably um yep right down there notice that oops of course it's off um but down lower left hand corner it says that this is just for the setup.exe that's all it's really doing is is downloading that so i click that and or i can hit the launch application let's discard this person um let's discard them both okay launch the application and it says the first thing it says is okay this type of file can harm your computer do you want to keep the ppfdemo.application anyway well yes i want to keep it because it's not going to harm my application my computer this is just not signed so i hit keep and then i will let's open up and show in a folder and there's my folder and if i right click on this and go to properties you're going to see down here it says this file came from another computer it might be blocked to help protect this computer check the boxes that unblock and hit apply now run it and you get this dialog this dialog says publisher cannot you verify are you sure you want to install this application the name is wpf demo it's from click once demo.azure from an unknown publisher again this is where the not signing has caused us some problems it causes at least some concerning dialogues a lot of a lot of reds and x's but this is just fine as long as you're the creator it's just when you're accepting this from somebody else that would be a problem but this is why you want to sign your applications anything going to production needs to be signed so hit install and once it installs it's going to do a virus check on this it's going to take a little bit the first time but then we have our application not all i can do but that's that's our application okay so that's version 1.0 so let's get rid of that and let's we don't need to do anything here except and we will close this out now let's make a change to our application so we've got a stack panel here let's um add a button with the the name of i don't know submit button and we'll just say submit something like that and we'll put let's put a margin around it as well of five so there's our submit button it doesn't do anything right now it's just we've added that file or that that button and for whatever reason we decide yep let's go ahead and publish this just hit publish again and it's going to publish the new version which let's go back to our filezilla and look at the application files and notice now we have the wpf demo for zero zero zero one as well as zero zero zero zero so what i do is i just grab everything i move it over and i say over i have different file or it's newer and it's going to upload the entire thing with that let's start the application again now it's in my start menu you can't see my start menu but it's in my start menu i'm going to click on it and it's going to bring up this dialog here it says a new version of jpf demo is available do you want to download it now and you have the option of saying ok or skip so yes i want the newest version i hit ok it's going to download and there we go my application has been updated and now i have that really cool submit button that does nothing so that's click once that's really all it takes to do click once it's a little tricky it's a little uh quirky at times but when it comes down to it if you sign your application and if you create any kind of web page that just gives out that dot application file for people to run then they can run that on their computer it will talk then to azure you don't even need to have a website in front of it really you just need to have those files stored in azure this that's all this is doing at this point it's not it doesn't have to have any kind of web page just visual it's just looking at azure to say are there new files in that that web app if there are then i'm going to say okay you have a new version and display that and update your application with that new version so really cool stuff there also note that this does show up in your application um apps and features section where you can add or move applications it'll show up as a wpf demo so you can uninstall it from there you can also roll it back versions so if i didn't want the this version the older version i could roll it back using that um that remove application dialog box so click ones has a lot of nice features especially if you just want to get a desktop app in people's hands it's not a full installer meaning it does not have the features of say an msi installer where you can do things like change where it's installed or installed databases or set up other things around it it's not like that that's what a full installer is for this is more for just getting something in a user's hands that is they can update itself and really act as a client not the full application where you have like i said where it installs other things as well if you want that kind of full control you still need to use an msi msi file and do it that way so that's click once that's the the last of the big changes that i saw from desktop app development in the newest versions of visual studio and net that i thought were of interest if you have other things that you thought were of interest as well let me know down in the comments let me know if you think i missed one or think i want want to add something to one of those i might do a click once demo after 16.9 comes out if they do fix that that feature we might get a little more in depth on that who knows maybe we'll add it into the temco retail manager we'll see but um it is a nice at least option to have right in visual studio alright thanks for watching and as always i am tim cory [Applause] [Music] you
Info
Channel: IAmTimCorey
Views: 43,444
Rating: 4.9307537 out of 5
Keywords: .net, C#, Visual Studio, code, programming, tutorial, training, how to, tim corey, C# training, C# tutorial, wpf, .net core, .net 5, .net conf 2020, wpf .net core, winform .net core, xaml hot reload, xaml design time binding, design time binding, xaml improvements, whats new in wpf, whats new in winforms, clickonce deployment, clickonce deployment visual studio 2019, clickonce visual studio 2019, clickonce auto update, clickonce wpf deployment, c# click once, clickonce tutorial
Id: STh8bjiz8Jg
Channel Id: undefined
Length: 48min 57sec (2937 seconds)
Published: Mon Nov 23 2020
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.