Simplify recipient emails and add live upload progress on create.
Deploy Ladill Transfer / deploy (push) Successful in 47s

Recipients always get the download link immediately when an email is set.
Large files upload in the background with per-file and overall progress bars.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
isaacclad
2026-06-08 13:25:43 +00:00
co-authored by Cursor
parent c53191a41b
commit 4b616a7f04
11 changed files with 287 additions and 227 deletions
@@ -6,7 +6,6 @@ use App\Http\Controllers\Controller;
use App\Models\Transfer;
use App\Services\Qr\QrImageGeneratorService;
use App\Services\Qr\QrPdfExporter;
use App\Services\Transfer\TransferRecipientMailService;
use App\Services\Transfer\TransferService;
use App\Services\Upload\ChunkedUploadService;
use Illuminate\Http\RedirectResponse;
@@ -42,14 +41,10 @@ class TransferController extends Controller
public function create(): View
{
$mailService = app(TransferRecipientMailService::class);
return view('transfer.transfers.create', [
'maxFiles' => (int) config('transfer.max_files_per_transfer', 20),
'pricePerGb' => (float) config('transfer.price_per_gb_month', 0.30),
'gracePeriodDays' => (int) config('transfer.grace_period_days', 15),
'emailMilestones' => $mailService->milestoneOptions(),
'defaultEmailMilestones' => (array) config('transfer.default_recipient_email_milestones', ['created']),
]);
}
@@ -63,14 +58,10 @@ class TransferController extends Controller
$fileRules[] = 'max:'.(int) ceil($maxBytes / 1024);
}
$allowedMilestones = implode(',', app(TransferRecipientMailService::class)->allowedMilestones());
$data = $request->validate([
'title' => 'required|string|max:120',
'message' => 'nullable|string|max:2000',
'recipient_email' => 'nullable|email|max:255|required_with:email_milestones',
'email_milestones' => 'nullable|array',
'email_milestones.*' => 'in:'.$allowedMilestones,
'recipient_email' => 'nullable|email|max:255',
'password' => 'nullable|string|min:4|max:64',
'files' => 'nullable|array',
'files.*' => $fileRules,
@@ -105,7 +96,7 @@ class TransferController extends Controller
}
$success = 'Transfer created. Share the link or QR code with recipients.';
if ($transfer->recipient_email && $transfer->wantsRecipientMilestone('created') && $transfer->recipientMilestoneSent('created')) {
if ($transfer->recipient_email && $transfer->recipientMilestoneSent('created')) {
$success .= ' A download link was emailed to '.$transfer->recipient_email.'.';
}