Backend work
Alright, it’s been a while since I’ve worked on this, and coming back I realize that I knew so little about any of how drives, media, filesystems, and all that works. So, I’m going to give a quick synopsis of all I’ve learned (keep in mind, this all applies to LINUX ONLY since that’s what I’m on, the app will come to windows eventually but for the time being I’m not worrying about it):
Storage devices are where your computer stores data for storage. One physical device (i.e. a thumb drive) corresponds to one drive, although some physical devices can have multiple drives. These drives are split into BlockDevices, so one drive can have many Block Devices. Block devices can have one or none filesystems; keep in mind there isn’t one universal filesystem that everybody agreed to use so we could all be happy; you’re gonna have to deal with FAT32, NTFS, ext4, exfat and btrfs at a minimum. Now, those filesystems aren’t immediately accessible; they need to be mounted, which esentially means just putting it somewhere in another filesystem on your computer, probably the main one, like your HDD/SSD. A single blockdevice can have many mount points, each with different permissions; one might have NOEXEC permissions so you can’t launch a game from there, another might have RO so you can’t write anything to it. Keep in mind, these permissions are completely separate from file and directory permissions; those are a whole ’nother can of worms.
Basically, Physical Device -> Drive[], Drive -> BlockDevice[], BlockDevice -> Filesystem?, Filesystem -> (MountPath, Permissions)[]. That’s the really really really big oversimplification but yeah. If you read to here, hopefully you know understand my pain; I commend your patience.