Implemented a mechanism to extract the correct time zone from the GPS coordinate if presented in the file's EXIF, and to convert the timestamp to the correct UTC time so that the time will show correctly based on the mobile/web local time zone.
Add web UI components tests setup
@alextran1502 I'll get this merged so I can add CI checks for the web as well. Let me know if you have any questions 😃
* Get asset and album count
* Generate APIs
* Added asset count for each type
* Added api on the web
* Added info button for asset and album count to trigger getting info on hover
* Remove websocket event from photo page
* Extract logic from Albums page
- move "albums" page logic to `albums-bloc`
- add types to AlbumCard custom events
* Implement some album-bloc unit-tests
- add libraries for testing
- add album factory
- changes in albums-bloc API
* Add rest of albums-bloc test
Cleanup and remove console logs
* Refactor `isShowContextMenu` writable to derived
* Use runtime env var for loginPageMessage
* Rename VITE_LOGIN_PAGE_MESSAGE to PUBLIC_LOGIN_PAGE_MESSAGE in .env.example
* Move docker image `npm run build` step into Dockerfile
* Remove comment from web Dockerfile
* Add route to query albums for a specific asset
* Update API and add to detail-panel
* Fix tests
* Refactor API endpoint
* Added alt attribute to img tag
Co-authored-by: Alex <alex.tran1502@gmail.com>
* build endpoint to get asset count by month
* Added asset repository
* Added create asset
* get asset by device ID
* Added test for existing methods
* Refactor additional endpoint
* Refactor database api to get curated locations and curated objects
* Refactor get search properties
* Fixed cookies parsing for websocket
* Added API to get asset count by time group
* Remove unused code
* fix(web): buffering for video player
* chore(): missing file -_-
* refactor(web): using URL builder
* chore(): add semicolon
* fix(web): video player
* remove deadcode
Co-authored-by: Alex <alex.tran1502@gmail.com>
* Fix redirect to login page after password change
Copied from the similar fix in #414
* Fix typo in change-password form
* Remove misplaced text from user management page
* Added dispatch event for edit user
* Fixed import location
* solve merge conflict
* Fixed issue not admin user can access admin page
* Implemented edit user and password reset
* Change API to return assets count and change web behavior accordingly
* Refactor assets.length
* Explicitly declare type of assetCount so Dart SDK understand it
* Finished refactoring on mobile
* Added selection mechanism to photos page
* Added control app bar
* Refactor AlbumAppBar into ControlAppBar
* Added addtional micro interactions when in multi selection mode
* Implemented delete selected asset and rerender
* Add installation script
* Populate instsall.sh
* format
* Get IP address on both macos and linux
* Update mobile version
* Remove test folder
* Added sed command for ios
* Added sed command for ios
* Fixed ios command
* Fixed ios command
* Added friendly debug message
* Update README
* Update Readme with new installation instruction
* Update message on instsallation script
* Move backend api to its own instance
* Remove external fetch hook
* Added endpoint for album
* Added endpoint for admin page
* Make request directly to immich-server
* Refactor unsued code
* Added context menu for album opionts
* choose asset for album thumbnail
* Refactor UpdateAlbumDto to accept albumThumbnailAssetId
* implemented changing album cover on web
* Fixed api change on mobile app
* Added stores to get album assetId
* Upload assets and add to album
* Added comments
* resolve conflict when add assets from upload directly
* Filtered out duplicate asset before adding to the album
* Use cookie for frontend request
* Remove api helper to use SDK
* Added error handling to status box
* Remove additional places that check for session.user
* Refactor sending password
* prettier clean up
* remove deadcode
* Move all authentication requests to the client
* refactor upload panel to only fetch assets after the upload panel disappear
* Added keydown to remove focus on title change on album viewer
* Added interaction to select multiple thumbnail
* Fixed stutter transition
* Return AlbumResponseDto after removing an asset from album
* Render correctly when an array of thumbnail is updated
* Fixed wording
* Added native dialog for removing users from album
* Fixed rendering incorrect profile image on share user select dialog
* AFixed overlay issue of modal
* Added modal with existing user
* Added custom scrollbar to all pages
* Fixed Document is not define when access document DOM node in browswer
* Added context menu
* Added api to remove user from album
* Handle user leave album
* Added share button to non-shared album
* Added padding to album viewer:
* Fixed margin top of asset selection page
* Fixed issue cannot push to dockerhub
* Added album creation button functionality
* Added input for album title
* Added select photos button
* Added page to select assets
* Show photo selection timeline
* Implemented update album name mechanism:
* Added selection mechanism
* Added selection mechanism with existing assets in album
* Refactored and added comments
* Refactored and added comments - 2
* Refactor album app bar
* Added modal for select user
* Implemented choose users
* Added additional share user button
* Added rule to show add users button
* Rename asset viewer folder
* Refactor AssetViewer to be able to user with different component
* Refactor AssetViewer to be able to user with different component
* Added viewer for album and sharing
* Added album page
* Refactor sidebar
* Added album assets count info
* Added album viewer page
* Refactor album sorting
* Fixed incorrectly showing selected asset in album selection
* Improve fetching speed with prefetch
* Refactor to use ImmichThubmnail component for all
* Update to the latest version of Svelte
* Implement fixed app bar in album viewer
* Added shared user avatar
* Correctly get all owned albums, including shared
* Add message for demo instances to login screen
* Rename env variable
* Added key into
* Add styling to conform with Immich color scheme
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
* Added swagger bearer auth method authentication accordingly
* Update Auth endpoint
* Added additional api information for authentication
* Added Swagger CLI pluggin
* Added DTO for /user endpoint
* Added /device-info reponse DTOs
* Implement server version
* Added DTOs for /server-info
* Added DTOs for /assets
* Added album to Swagger group
* Added generated specs file
* Add Client API generator for web
* Remove incorrectly placed node_modules
* Created class to handle access token
* Remove password and hash when getting all user
* PR feedback
* Fixed video from CLI doesn't get metadata extracted
* Fixed issue with TSConfig to work with generated openAPI
* PR feedback
* Remove console.log
* Fixed issue with generating thumbnail for video with 0 length cause undefined file and crash the server
* Added all file error handling operation
* Temporarily disabled WebSocket on the web because receiving a new upload event doesn't put the new file in the correct place.
* Cosmetic fixed on the info panel
* Deprecate login scenarios that support pre-web era
* refactor and simplify setup
* Added user info to change password form
* change isFistLogin column to shouldChangePassword
* Implemented change user password
* Implement the change password page for mobile
* Change label
* Added changes log and up minor version
* Fixed typo in the release note
* Up server version
* chore: remove UPLOAD_LOCATION as it isn't used in the server
* docker: remove network in docker compose as docker creates one by default
* nginx: update reverse proxy to put web at root and api at /api
* docker: remove unneeded exposed ports and docker network
Align dev setup with prod, but with ports exposed for direct connection
Most communication between services happens on the internal network, so we don't need to expose all these services.
With the nginx changes, the api and web panel are both server through the reverse proxy on / for web and /api for the API.
The only service that should expose ports is nginx as that is the entrypoint to the application.
* chore: remove CORS now we serve the api on /api in the default setup
* docs: update README.md to include /api
* Fixed docket-compose file for dev environment and websocket on web and mobile
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>