I have made a lot of progress on my media server website. I finally came up with a method of abstraction that I am happy with. I have the site organized into modules, which handle files of different types, and plug-ins, which handle displaying different aspects of each module.
Modules handle files of different types, for example audio files or video files. Every module is extended from the “files” module which just stores general file information. Every module has some requirements that they must override, for example the handles function which takes a file as input and determines if the module can handle that file.
This contains the core functionality of the site. The plug-ins includes things like RSS feed, the file getter, and the viewer. The plug-ins can interact with each other, in which case they would have “dependencies”. Plug-ins are mainly responsible for display data that the modules collect.
The site will have strong template support. And if a file is not found for a template, then the default template file will be used. The appearance should mainly depend on the CSS template. There will also be a nice admin section.