Browse Source

Making download public for map service integration

Lukas Angerer 3 years ago
parent
commit
25cb768453

+ 4 - 0
src/RunnersMeet.Client/src/app/tracks-api.service.ts

@@ -33,6 +33,10 @@ export class TracksApiService {
 		return lastValueFrom(this.http.delete(`${environment.apiUri}/api/tracks/${track.trackId}`)).then();
 	}
 
+	public getTrackGpxUrl(track: Track): string {
+		return `${environment.apiUri}/api/tracks/download/${track.fileHash}`;
+	}
+
 	public downloadTrack(track: Track): Promise<{ blob: Blob | null, filename?: string }> {
 		return lastValueFrom(this.http.get(`${environment.apiUri}/api/tracks/download/${track.fileHash}`, {
 			responseType: 'blob',

+ 1 - 2
src/RunnersMeet.Client/src/app/tracks/track-list-item/track-list-item.component.html

@@ -1,5 +1,4 @@
 {{ track?.trackId }} - {{ track?.displayName }} - {{ track?.fileHash }}<br />
 ↔{{ track?.distance }}m ↑{{ track?.elevationUp }}m ↓{{ track?.elevationDown }}m<br />
 <a [routerLink]="['/tracks/edit', track?.trackId]">Edit</a> &mdash;
-<button *ngIf="!downloadUrl" type="button" (click)="downloadGpx()">Download</button>
-<a *ngIf="downloadUrl" [href]="downloadUrl" [download]="downloadFileName">Download</a>
+<a [href]="downloadUrl" target="_blank">Download</a>

+ 13 - 10
src/RunnersMeet.Client/src/app/tracks/track-list-item/track-list-item.component.ts

@@ -1,4 +1,4 @@
-import { Component, Input } from '@angular/core';
+import { Component, Input, OnInit } from '@angular/core';
 import { DomSanitizer, SafeUrl } from '@angular/platform-browser';
 import { TracksApiService } from 'src/app/tracks-api.service';
 import { Track } from '../track';
@@ -8,24 +8,27 @@ import { Track } from '../track';
   templateUrl: './track-list-item.component.html',
   styleUrls: ['./track-list-item.component.scss']
 })
-export class TrackListItemComponent {
+export class TrackListItemComponent implements OnInit {
 	@Input()
 	public track?: Track;
 
 	public downloadUrl: SafeUrl | null = null;
-	public downloadFileName?: string;
 
 	public constructor(
 		private readonly tracksApi: TracksApiService,
 		private readonly sanitizer: DomSanitizer
 	) { }
 
-	public downloadGpx(): void {
-		this.tracksApi.downloadTrack(this.track!).then(file => {
-			if (file.blob) {
-				this.downloadUrl = this.sanitizer.bypassSecurityTrustUrl(window.URL.createObjectURL(file.blob));
-				this.downloadFileName = file.filename
-			}
-		});
+	public ngOnInit(): void {
+		this.downloadUrl = this.tracksApi.getTrackGpxUrl(this.track!);
 	}
+
+	// public downloadGpx(): void {
+	// 	this.tracksApi.downloadTrack(this.track!).then(file => {
+	// 		if (file.blob) {
+	// 			this.downloadUrl = this.sanitizer.bypassSecurityTrustUrl(window.URL.createObjectURL(file.blob));
+	// 			this.downloadFileName = file.filename
+	// 		}
+	// 	});
+	// }
 }

+ 1 - 0
src/RunnersMeet.Server/Controllers/TracksController.cs

@@ -74,6 +74,7 @@ public class TracksController : ControllerBase
 	}
 
 	[HttpGet("download/{hash}")]
+	[AllowAnonymous]
 	public ActionResult DownloadGpx(string hash)
 	{
 		var track = _queryFactory.TrackQuery().GetByFileHash(hash);