Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
03008ad
Merge pull request #533 from ShaneIsrael/develop
ShaneIsrael Apr 6, 2026
a8944b7
Merge pull request #545 from ShaneIsrael/develop
ShaneIsrael Apr 7, 2026
a98ce82
update workflow dispatch
ShaneIsrael Apr 7, 2026
1151b00
Merge pull request #546 from ShaneIsrael/update-workflow-dispatch
ShaneIsrael Apr 7, 2026
a38ebd0
Merge pull request #547 from ShaneIsrael/develop
ShaneIsrael Apr 7, 2026
864f1e9
Merge pull request #552 from ShaneIsrael/develop
ShaneIsrael Apr 8, 2026
7e7ccc2
Merge pull request #554 from ShaneIsrael/develop
ShaneIsrael Apr 9, 2026
9de27a2
Merge pull request #555 from ShaneIsrael/develop
ShaneIsrael Apr 10, 2026
f0e815a
screenshot system
ShaneIsrael Apr 10, 2026
c648805
more screenshot updates
ShaneIsrael Apr 10, 2026
5ab16d6
update file manager
ShaneIsrael Apr 10, 2026
f9d1162
fade screenshots in more naturally
ShaneIsrael Apr 10, 2026
6324ea5
added image directory configuration to dockerfile and docs
ShaneIsrael Apr 10, 2026
b626d97
mobile screenshots updates
ShaneIsrael Apr 10, 2026
fab1b6b
more mobile updates
ShaneIsrael Apr 10, 2026
b24d8ca
fix pinch to zoom
ShaneIsrael Apr 10, 2026
7564bf6
use react-zoom-pan-pinch for mobile image zoom/panning
ShaneIsrael Apr 10, 2026
d38db4c
fix newest/oldest sort, memoize cards to improve performance
ShaneIsrael Apr 10, 2026
2b4fbcc
selecting a row on file manager selects the row instead of opening it…
ShaneIsrael Apr 10, 2026
c7af8b5
more pinch zoom pan updates:
ShaneIsrael Apr 10, 2026
c82e5b9
more pinch zoom pan updates:
ShaneIsrael Apr 10, 2026
7599a01
more pinch zoom pan updates:
ShaneIsrael Apr 10, 2026
d9e15b4
mix images into games pages if they are linked to a game
ShaneIsrael Apr 11, 2026
aa6c9ff
removed hash links from missed items
ShaneIsrael Apr 11, 2026
17df0d3
added images folder rules section
ShaneIsrael Apr 11, 2026
68eef26
1.6.0
ShaneIsrael Apr 11, 2026
bb9b7e5
Merge pull request #556 from ShaneIsrael/screenshots
ShaneIsrael Apr 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .env.dev
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ export THUMBNAIL_VIDEO_LOCATION=50
export SECRET_KEY=dev-test-key
export DATA_DIRECTORY=$(pwd)/dev_root/dev_data/
export VIDEO_DIRECTORY=$(pwd)/dev_root/dev_videos/
export IMAGE_DIRECTORY=$(pwd)/dev_root/dev_images/
export PROCESSED_DIRECTORY=$(pwd)/dev_root/dev_processed/
export STEAMGRIDDB_API_KEY=""
export ADMIN_PASSWORD=admin
Expand Down
1 change: 1 addition & 0 deletions .env.prod
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
export FLASK_APP="/app/server/fireshare:create_app()"
export DATA_DIRECTORY=/data/
export VIDEO_DIRECTORY=/videos/
export IMAGE_DIRECTORY=/images/
export PROCESSED_DIRECTORY=/processed/
export TEMPLATE_PATH=/app/server/fireshare/templates
export ENVIRONMENT=production
Expand Down
4 changes: 3 additions & 1 deletion .github/workflows/docker-publish-main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -227,7 +227,9 @@ jobs:
- name: Create manifest list and push
working-directory: /tmp/digests
run: |
docker buildx imagetools create -t ${{ env.REGISTRY_IMAGE }}:${{ github.event.inputs.tag }} \
docker buildx imagetools create \
-t ${{ env.REGISTRY_IMAGE }}:${{ github.event.inputs.tag }} \
-t ${{ env.REGISTRY_IMAGE }}:latest \
$(printf '${{ env.REGISTRY_IMAGE }}@sha256:%s ' *)

- name: Inspect image
Expand Down
1 change: 1 addition & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,7 @@ ENV FLASK_APP /app/server/fireshare:create_app()
ENV ENVIRONMENT production
ENV DATA_DIRECTORY /data
ENV VIDEO_DIRECTORY /videos
ENV IMAGE_DIRECTORY /images
ENV PROCESSED_DIRECTORY /processed
ENV TEMPLATE_PATH=/app/server/fireshare/templates
ENV ADMIN_PASSWORD admin
Expand Down
3 changes: 2 additions & 1 deletion EnvironmentVariables.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,12 @@
| `ANALYTICS_TRACKING_SCRIPT` | A full `<script>` tag from an analytics provider (e.g. Umami, Plausible) to inject into the frontend. | |
| `TZ` | Timezone for the container. | `UTC` |
| `FS_LOGLEVEL` | Log level for the application. Valid values: `DEBUG`, `INFO`, `WARNING`, `ERROR`, `CRITICAL`. | `INFO` |
| `THUMBNAIL_VIDEO_LOCATION` | The timestamp (in seconds) used to capture the video thumbnail preview. | `50` |
| **Storage** | | |
| `DATA_DIRECTORY` | Absolute path to the directory where application database and metadata are stored. | `$(pwd)/fireshare/data/` | Yes |
| `PROCESSED_DIRECTORY` | Absolute path to the directory where derived data e.x optimized/transcoded videos, symlinks, posters... are stored. | `$(pwd)/fireshare/processed/` | Yes |
| `VIDEO_DIRECTORY` | Absolute path to the source directory containing raw video files. | `$(pwd)/path/to/my/videos/` | Yes |
| `THUMBNAIL_VIDEO_LOCATION` | The timestamp (in seconds) used to capture the video thumbnail preview. | `50` |
| `IMAGE_DIRECTORY` | Absolute path to the source directory containing raw image files. | `$(pwd)/path/to/my/images/` | Yes |
| **Security** | | |
| `SECRET_KEY` | Flask session encryption key. If not set, a random key is generated on each restart, which invalidates all active sessions. | some random string or phrase |
| `ADMIN_USERNAME` | The username for the initial administrative account. | `admin` |
Expand Down
19 changes: 17 additions & 2 deletions app/client/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion app/client/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "fireshare",
"version": "1.5.7",
"version": "1.6.0",
"private": true,
"dependencies": {
"@emotion/react": "^11.9.0",
Expand All @@ -24,6 +24,7 @@
"react-player": "^2.10.1",
"react-router-dom": "^6.3.0",
"react-select": "^5.3.2",
"react-zoom-pan-pinch": "^4.0.3",
"typeface-roboto": "^1.1.13",
"wavesurfer.js": "^7.12.4"
},
Expand Down
233 changes: 129 additions & 104 deletions app/client/src/App.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,11 @@ import { createTheme, ThemeProvider } from '@mui/material/styles'
import { CssBaseline } from '@mui/material'
import Login from './views/Login'
import Watch from './views/Watch'
import ViewImage from './views/ViewImage'
import Dashboard from './views/Dashboard'
import NotFound from './views/NotFound'
import Settings from './views/Settings'
import Feed from './views/Feed'
import ImageFeed from './views/ImageFeed'
import Games from './views/Games'
import GameVideos from './views/GameVideos'
import Tags from './views/Tags'
Expand Down Expand Up @@ -39,116 +40,140 @@ export default function App() {
<ThemeProvider theme={muitheme}>
<CssBaseline />
<GlobalDragDropOverlay>
<Routes>
<Route
path="/"
element={
<AuthWrapper redirect={'/feed'}>
<Navbar20 page="/" collapsed={!drawerOpen} searchable styleToggle cardSlider searchPlaceholder="Search title, game, or #tag...">
<Dashboard />
</Navbar20>
</AuthWrapper>
}
/>
<Route
path="/feed"
element={
<AuthWrapper>
<Navbar20 page="/feed" collapsed={!drawerOpen} searchable styleToggle cardSlider searchPlaceholder="Search title, game, or #tag...">
<Feed />
</Navbar20>
</AuthWrapper>
}
/>
<Route
path="/login"
element={
<Navbar20 page="/login">
<Routes>
<Route
path="/"
element={
<AuthWrapper>
<Login />
<Navbar20
page="/"
collapsed={!drawerOpen}
searchable
styleToggle
cardSlider
searchPlaceholder="Search title, game, or #tag..."
>
<Dashboard />
</Navbar20>
</AuthWrapper>
</Navbar20>
}
/>
<Route
path="/settings"
element={
<AuthWrapper collapsed={!drawerOpen} redirect={'/login'}>
<Navbar20 page="/settings">
<Settings />
</Navbar20>
</AuthWrapper>
}
/>
<Route
path="/games"
element={
<AuthWrapper>
<Navbar20 page="/games" collapsed={!drawerOpen} searchable searchPlaceholder="Search games...">
<Games />
</Navbar20>
</AuthWrapper>
}
/>
<Route
path="/games/:gameId"
element={
<AuthWrapper>
<Navbar20 page="/games" collapsed={!drawerOpen} styleToggle cardSlider searchable mainPadding={0}>
<GameVideos />
</Navbar20>
</AuthWrapper>
}
/>
<Route
path="/tags"
element={
<AuthWrapper>
<Navbar20 page="/tags" collapsed={!drawerOpen} searchable searchPlaceholder="Search tags...">
<Tags />
}
/>
<Route
path="/login"
element={
<Navbar20 page="/login">
<AuthWrapper>
<Login />
</AuthWrapper>
</Navbar20>
</AuthWrapper>
}
/>
<Route
path="/tags/:tagId"
element={
<AuthWrapper>
<Navbar20 page="/tags" collapsed={!drawerOpen} styleToggle cardSlider searchable mainPadding={0}>
<TagVideos />
}
/>
<Route
path="/settings"
element={
<AuthWrapper collapsed={!drawerOpen} redirect={'/login'}>
<Navbar20 page="/settings">
<Settings />
</Navbar20>
</AuthWrapper>
}
/>
<Route
path="/games"
element={
<AuthWrapper>
<Navbar20 page="/games" collapsed={!drawerOpen} searchable searchPlaceholder="Search games...">
<Games />
</Navbar20>
</AuthWrapper>
}
/>
<Route
path="/games/:gameId"
element={
<AuthWrapper>
<Navbar20 page="/games" collapsed={!drawerOpen} styleToggle cardSlider searchable mainPadding={0}>
<GameVideos />
</Navbar20>
</AuthWrapper>
}
/>
<Route
path="/tags"
element={
<AuthWrapper>
<Navbar20 page="/tags" collapsed={!drawerOpen} searchable searchPlaceholder="Search tags...">
<Tags />
</Navbar20>
</AuthWrapper>
}
/>
<Route
path="/tags/:tagId"
element={
<AuthWrapper>
<Navbar20 page="/tags" collapsed={!drawerOpen} styleToggle cardSlider searchable mainPadding={0}>
<TagVideos />
</Navbar20>
</AuthWrapper>
}
/>
<Route
path="/watch/:id"
element={
<Navbar20 collapsed={true} page="/watch">
<AuthWrapper>
<Watch />
</AuthWrapper>
</Navbar20>
</AuthWrapper>
}
/>
<Route
path="/watch/:id"
element={
<Navbar20 collapsed={true} page="/watch">
}
/>
<Route
path="/images"
element={
<AuthWrapper>
<Watch />
<Navbar20
page="/images"
collapsed={!drawerOpen}
styleToggle
cardSlider
searchable
searchPlaceholder="Search title, game, or #tag..."
>
<ImageFeed />
</Navbar20>
</AuthWrapper>
</Navbar20>
}
/>
<Route
path="/files"
element={
<AuthWrapper redirect={'/login'}>
<Navbar20 page="/files" collapsed={!drawerOpen}>
<FileManager />
}
/>
<Route
path="/image/:id"
element={
<Navbar20 collapsed={true} page="/image">
<AuthWrapper>
<ViewImage />
</AuthWrapper>
</Navbar20>
</AuthWrapper>
}
/>
<Route
path="*"
element={
<AuthWrapper>
<NotFound />
</AuthWrapper>
}
/>
</Routes>
}
/>
<Route
path="/files"
element={
<AuthWrapper redirect={'/login'}>
<Navbar20 page="/files" collapsed={!drawerOpen}>
<FileManager />
</Navbar20>
</AuthWrapper>
}
/>
<Route
path="*"
element={
<AuthWrapper>
<NotFound />
</AuthWrapper>
}
/>
</Routes>
</GlobalDragDropOverlay>
</ThemeProvider>
</Router>
Expand Down
Loading
Loading