b945dcb6

By: Michael Lynch <git@mtlynch.io>

Separate image and video upload paths

Remove the generic uploadPost dispatcher and the uploadParser/publishFunc
function-type indirection that existed only to share code between the image
and video routes. Each route is now a self-contained handler read top to
bottom.

Split uploadPostRequest into imageUploadPostRequest (carrying an open
io.ReadCloser, as on master) and videoUploadPostRequest (carrying a temp
path, since its parser streams the multipart body to disk). The video struct
drops MediaType, which is always video.

Each parser now accepts only the formats its route serves: photoTypeFromFilename
for the image route, requireVideoFilename for the video route, replacing the
shared mediaTypeFromFilename and the awkward post-parse video rejection.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>