* delete and restore user from admin UI
* addressed review comments and fix e2e test
* added cron job to delete user, and some formatting changes
* addressed review comments
* adding missing queue registration
* Add new query parameter to API endpoint that allows adding assets to albums which potentially contain assets that are already part of this album.
* Change API endpoint
* Generate new APIs
* Fixed test
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
* feat(docker) revert ubuntu base image
This PR reverts the base image for immich-server back to alpine
Adds LICENSE to all Images
Quiets apt-get commands when building
ensures write-permission for root group on app folders
Signed-off-by: PixelJonas <5434875+PixelJonas@users.noreply.github.com>
* Test build old Docker content
* Revert and retry
Signed-off-by: PixelJonas <5434875+PixelJonas@users.noreply.github.com>
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
this changes the base-image for immich-server from
`node:16-alpine3.14`
to
`node:16-slim`
There is an open issue with alpine DNS resolving which
breaks immich-microservice when deployed on
kubernetes.
This fixes https://github.com/immich-app/immich-charts/issues/4
Signed-off-by: PixelJonas <5434875+PixelJonas@users.noreply.github.com>
Signed-off-by: PixelJonas <5434875+PixelJonas@users.noreply.github.com>
* add docker volumes to services
this change adds the volume definitions for
/usr/src/app/upload
/usr/src/app/.reverse-geocoding-dump
to the `immich-server` docker-compose files
as /usr/src/app/upload should always be a volume for the containers
I also added it to the `Dockerfile`
Signed-off-by: PixelJonas <5434875+PixelJonas@users.noreply.github.com>
* remove geocoding-dump volume from docker-compose
Signed-off-by: PixelJonas <5434875+PixelJonas@users.noreply.github.com>
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.
* 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
* 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
* feat(server): preserve caption fields and extract mediainfo for video
* Fixed Geocoding missing info leads to fail EXIF extraction for the whole file
Co-authored-by: Alex <alex.tran1502@gmail.com>
* styling light and dark theme
* Icon topbar
* Fixed app bar title dark theme
* Fixed issue with getting thumbnail for things
* Refactor sharing page
* Refactor scroll thumb
* Refactor chip in auto backup indiation button
* Refactor sharing page
* Added theme toggle
* Up version for testflight build
* Refactor backup controller page
* Refactor album selection page
* refactor album pages
* Refactor gradient color profile header
* Added theme switcher
* Register app theme correctly
* Added locale to the app
* Added translation key
* Styling for bottomsheet colors
* up server version
* Fixed font size
* Fixed overlapsed sliverappbar on photos screen
* 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
* 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
* 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
* 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
* fix: remove config parameter from typeorm cli and update config
the config parameter is no longer supported since version 0.3
the config now needs to export a DataSource object to work with the 0.3 cli
* fix: update all typeorm entities and migrations to be aligned with database structure
* Fixed test-util import databaseConfig
* Fixed column mismatch in raw query with new migration
* Remove dist build directory when starting dev server
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
* Remove thumbnail generation on mobile
* Remove tconditions for missing thumbnail on the backend
* Remove console.log
* Refactor queue systems
* Convert queue and processor name to constant
* Added corresponding interface to job queue
* 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
* infra: switch port to 3003 for machine learning container
fixes#289
* Changed port of machine-learning-endpoint to match with new port
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
* 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
* Fix lint issues and some other TS issues
- set TypeScript in strict mode
- add npm commands to lint / check code
- fix all lint issues
- fix some TS issues
- rename User reponse DTO to make it consistent with the other ones
- override Express/User interface to use UserResponseDto interface
This is for when the accessing the `user` from a Express Request,
like in `asset-upload-config`
* Fix the rest of TS issues
- fix all the remaining TypeScript errors
- add missing `@types/mapbox__mapbox-sdk` package
* Move global.d.ts to server `src` folder
* Update AssetReponseDto duration type
This is now of type `string` that defaults to '0:00:00.00000' if not set
which is what the mobile app currently expects
* Set context when logging error in asset.service
Use `ServeFile` as the context for logging an error when
asset.resizePath is not set
* Fix wrong AppController merge conflict resolution
`redirectToWebpage` was removed in main as is no longer used.
* 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>
* Added file selector
* Extract metadata to upload files to the web
* Added request for uploading
* Generate jpeg/Webp thumbnail for asset uploaded without thumbnail data
* Added generating thumbnail for video and WebSocket broadcast after thumbnail is generated
* Added video length extraction
* Added Uploading Panel
* Added upload progress store and styling the uploaded asset
* Added condition to only show upload panel when there is upload in progress
* Remove asset from the upload list after successfully uploading
* Added WebSocket to listen to upload event on the web
* Added mechanism to check for existing assets before uploading on the web
* Added test workflow
* Update readme
* Rename "shared" to "album"
Prepare moving "SharedAlbums" to "Albums"
* Update server album API endpoints
* Update mobile app album endpoints
Also add `putRequest` to mobile network.service
* Add GET album collection filter
- allow to filter by owner = 'mine' | 'their'
- make sharedWithUserIds no longer required when creating an album
* Rename remaining variables to "album"
* Add ParseMeUUIDPipe to validate uuid or `me`
* Add album params validation
* Update todo in mobile album service.
* Setup e2e testing
* Add user e2e tests
* Rename database host env variable to DB_HOST
* Add some `Album` e2e tests
Also fix issues found with the tests
* Force push (try to recover DB_HOST env)
* Rename db host env variable to `DB_HOSTNAME`
* Remove unnecessary `initDb` from test-utils
The current database.config is running the migrations:
`migrationsRun: true`
* Remove `initDb` usage from album e2e test
* Update GET albums filter to `shared`
- add filter by all / shared / not shared
- add response DTOs
- add GET albums e2e tests
* Update album e2e tests for user.service changes
* Update mobile app to use album response DTOs
* Refactor album-service DB into album-registry
- DB logic refactored into album-repository making it easier to test
- add some album-service unit tests
- add `clearMocks` to jest configuration
* Finish implementing album.service unit tests
* Rename response DTO
Make them consistent with rest of the project naming
* Update debug log messages in mobile network service
* Rename table `shared_albums` to `albums`
* Rename table `asset_shared_album`
* Rename Albums `sharedAssets` to `assets`
* Update tests to match updated "delete" response
* Fixed asset cannot be compared in Set by adding Equatable package
* Remove hero effect to fixed janky animation
Co-authored-by: Alex <alex.tran1502@gmail.com>
* refactor microservices to machine-learning
* Update tGithub issue template with correct task syntax
* Added microservices container
* Communicate between service based on queue system
* added dependency
* Fixed problem with having to import BullQueue into the individual service
* Added todo
* refactor server into monorepo with microservices
* refactor database and entity to library
* added simple migration
* Move migrations and database config to library
* Migration works in library
* Cosmetic change in logging message
* added user dto
* Fixed issue with testing not able to find the shared library
* Clean up library mapping path
* Added webp generator to microservices
* Update Github Action build latest
* Fixed issue NPM cannot install due to conflict witl Bull Queue
* format project with prettier
* Modified docker-compose file
* Add GH Action for Staging build:
* Fixed GH action job name
* Modified GH Action to only build & push latest when pushing to main
* Added Test 2e2 Github Action
* Added Test 2e2 Github Action
* Implemented microservice to extract exif
* Added cronjob to scan and generate webp thumbnail at midnight
* Refactor to ireduce hit time to database when running microservices
* Added error handling to asset services that handle read file from disk
* Added video transcoding queue to process one video at a time
* Fixed loading spinner on web while loading covering the info panel
* Add mechanism to show new release announcement to web and mobile app (#209)
* Added changelog page
* Fixed issues based on PR comments
* Fixed issue with video transcoding run on the server
* Change entry point content for backward combatibility when starting up server
* Added announcement box
* Added error handling to failed silently when the app version checking is not able to make the request to GITHUB
* Added new version announcement overlay
* Update message
* Added messages
* Added logic to check and show announcement
* Add method to handle saving new version
* Added button to dimiss the acknowledge message
* Up version for deployment to the app store
* WIP fix user e2e tests
The e2e tests still don't seem to work due to migrations not running.
Changes:
- update user.e2e tests to use new `userService.createUser` method
- fix server `typeorm` command to use ORM config
- update make test-e2e to re-create database volume every time
- add User DTO
- update auth.service and user.service to use User DTO
- update CreateUserDto making optional properties that are optional
* Fix migrations
- add missing `.ts` extension to migrations path
- update user e2e test for the new returned User resource
* Added job for video conversion every 1 minute
* Handle get video as mp4 on the web
* Auto play video on web on hovered
* Added video player
* Added animation and video duration to thumbnail player
* Fixed issue with video not playing on hover
* Added animation when loading thumbnail
* Fixed not displaying default user profile picture
* Added buttons to close viewer and micro-interaction for navigating assets left, right
* Add additional buttons to the control bar
* Display EXIF info
* Added map to detail info
* Handle user input keyboard
* Fixed incorrect file name when downloading multiple files
* Implemented download panel
* Update mobile dependencies
* Added image picker
* Added mechanism to upload profile image
* Added image type to send to web
* Added styling for circle avatar
* Fixxed issue with sharp cannot resize image properly
* Finished displaying and uploading user profile
* Added user profile to web
* Add ability to pass redis hostname as env var
* Read postgres host from env var in microservices
* Update .env.example with postgres and redis hostname vars
* Update readme
* Added webp to table and entity
* Added cronjob and sharp dependencies
* Added conversion of webp every 5 minutes and endpoint will now server webp image if exist
* Setup e2e testing
* Add user e2e tests
* Rename database host env variable to DB_HOST
* Force push (try to recover DB_HOST env)
* Rename db host env variable to `DB_HOSTNAME`
* Remove unnecessary `initDb` from test-utils
The current database.config is running the migrations:
`migrationsRun: true`
* Replace static title text with a text edit field
* Implement endpoint for updating album info
* Implement changing title
* Only the owner can change the title
* New features
- Share album. Users can now create albums to share with existing people on the network.
- Owner can delete the album.
- Owner can invite the additional users to the album.
- Shared users and the owner can add additional assets to the album.
* In the asset viewer, the user can swipe up to see detailed information and swip down to dismiss.
* Several UI enhancements.
* Added webp as supported file type, allow continue upload when an image fail
* Added webp as supported file type, allow continue upload when an image fail
* Solved issue with bad assets cause backup to stop
* Handle pause/restart listening to event on_upload_success and reload asset list after navigating back from BackupControllerPage
* Remove unused api endpoint
* Update photo_manager pub package
* Added download endpoint for assets
* Successfully save a photo to the local device's gallery
* Save save a video to the local device's gallery
* Fixed#97
* Added download loading indicator
* Refactor and increase the font size for curated search thumbnail images
* Reposition loading animation on the search result page
* Renamed multipart filed name 'files' to 'assetData'.
* Added an additional field name of 'thumbnailData' to multipart form.
* Implemented upload mechanism for thumbnail directly from the mobile client.
* Removed dead code
* Implemented a version checking mechanism.
* Added Tab Navigation Observer to trigger event handling for tab page navigation
* Added query to get access with distinct location
* Showed places in search page as a horizontal list
* Showed location search result on tapped
* Refactor docker-compose to its own folder
* Added FastAPI development environment
* Added support for GPU in docker file
* Added image classification
* creating endpoint for smart Image info
* added logo with white background on ios
* Added endpoint and trigger for image tagging
* Classify image and save into database
* Update readme
* refactor serving file function asset service
* Remove PhotoViewer for now since it creates a problem in 2.10
* Added error message for wrong decode file and logo for failed to load file
* Fixed error when read stream cannot be created and crash server
* Added method to get all assets as a raw array
* Implemented cleaner way of grouping image
* Implemented operation to delete assets in the database
* Implemented delete on database operation
* Implemented delete on device operation
* Fixed issue display wrong information when the auto backup is enabled after deleting all assets
* Support HEIC/HEIF backup
* Storing backup directly from original file from the phone
* Directly read and backup video file - Improve performance on video backup
* Implementing video upload features
* setup image resize processor
* Add video thumbnail with duration and icon
* Fixed issue with video upload timeout and upper case file type on ios
* Added video player page
* Added video player page
* Fixing video player not play on ios
* Added partial file streaming for ios/android video request
* Added nginx as proxy server for better file serving
* update nginx and docker-compose file
* Video player working correctly
* Video player working correctly
* Split duration to the second