Posting is done in two steps - first the media is uploaded and that begins a processing pipeline. When the media is finally processed, the media pipeline sets the cdn_url to the final image (in the cloud if configured). At any time, the user can click post. This begins a separate NewStatusPipeline to deliver the status over ActivityPub. This causes a race. If the NewStatusPipeline runs before the media finishes processing, then the status is delivered with the un-processed (and un-optimized images). If pixelfed is set to use cloud storage, then the ActivityPub message also incorrectly uses the local media. This commit fixes the race condition by waiting for all the media to be processed before sending the message over ActivityPub. A new publish_delayed column is set per-post, indicating whether the status should be delayed until all media is processed. Then, the NewStatusPipeline is called twice per post - When the media finishes processing and when the status is posted. Both times, the pipeline will check to see if it's valid to post If so, the pipeline will try to set publish_delayed to false and only if it is the first time doing so, will it publish the post |
3 months ago | |
|---|---|---|
| .ddev | ||
| .github | ||
| .vscode | ||
| app | 3 months ago | |
| bootstrap | ||
| config | 4 months ago | |
| database | ||
| docker | ||
| public | ||
| resources | 4 months ago | |
| routes | ||
| storage | ||
| tests | ||
| .dockerignore | ||
| .editorconfig | ||
| .env.docker | ||
| .env.example | ||
| .env.testing | ||
| .gitattributes | ||
| .gitignore | ||
| .hadolint.yaml | ||
| .markdownlint.json | ||
| .node-version | ||
| .shellcheckrc | ||
| CHANGELOG.md | 4 months ago | |
| CODEOWNERS | ||
| CODE_OF_CONDUCT.md | ||
| CONTRIBUTING.md | ||
| Dockerfile | ||
| LICENSE | ||
| README.md | ||
| SECURITY.md | ||
| artisan | ||
| composer.json | ||
| composer.lock | ||
| crowdin.yml | ||
| docker-compose.migrate.yml | ||
| docker-compose.yml | ||
| funding.json | ||
| goss.yaml | ||
| package-lock.json | ||
| package.json | ||
| phpunit.xml | ||
| server.php | ||
| webpack.mix.js | ||
README.md
Introduction
Photo sharing the way it should be. Pixelfed lets your casual shots and creative photography find their audience naturally, without algorithmic barriers. Join millions of people sharing across the fediverse.
Official Documentation
Documentation for Pixelfed can be found on the Pixelfed documentation website.
Run on YunoHost
Pixelfed app for YunoHost. See the package source code
License
Pixelfed is open-sourced software licensed under the AGPL license.
Communication
The ways you can communicate on the project are below. Before interacting, please read through the Code Of Conduct.
- Mastodon: @pixelfed@mastodon.social
- E-mail: hello@pixelfed.org
Pixelfed Sponsors
We would like to extend our thanks to the following sponsors for funding Pixelfed development. If you are interested in becoming a sponsor, please visit the Pixelfed Patreon Page
- NLnet Foundation and NGI0 Discovery, part of the Next Generation Internet initiative.
This project is supported by:
