Skip to content

Commit b0d81e4

Browse files
use browser api to calculate duration
1 parent b552d45 commit b0d81e4

11 files changed

Lines changed: 31 additions & 160 deletions

File tree

AudioCuesheetEditor.Tests/Model/AudioCuesheet/CuesheetTests.cs

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -673,12 +673,9 @@ public void StartRecording_WithAudiofile_ShouldStartRecording()
673673
public void RecalculateLastTrackEnd_SingleTrackWithAudiofile_EndSetToAudiofileDuration()
674674
{
675675
// Arrange
676-
var audiofileMock = new Mock<IAudiofile>();
677-
audiofileMock.SetupGet(a => a.Duration).Returns(TimeSpan.FromMinutes(5));
678-
679676
var cuesheet = new Cuesheet
680677
{
681-
Audiofile = audiofileMock.Object
678+
Audiofile = new("Test.mp3", nameof(RecalculateLastTrackEnd_SingleTrackWithAudiofile_EndSetToAudiofileDuration), new AudioCodec("audio/mpeg", ".mp3", "AudioCodec MP3"), TimeSpan.FromMinutes(5))
682679
};
683680
var track = new Track { Position = 1, Begin = TimeSpan.Zero };
684681
cuesheet.AddTrack(track);
@@ -712,12 +709,9 @@ public void RecalculateLastTrackEnd_MultipleTracks_EndSetCorrectly()
712709
public void RecalculateLastTrackEnd_MultipleTracksWithAudiofile_LastTrackEndSetToAudiofileDuration()
713710
{
714711
// Arrange
715-
var audiofileMock = new Mock<IAudiofile>();
716-
audiofileMock.SetupGet(a => a.Duration).Returns(TimeSpan.FromMinutes(5));
717-
718712
var cuesheet = new Cuesheet
719713
{
720-
Audiofile = audiofileMock.Object
714+
Audiofile = new("Test.mp3", nameof(RecalculateLastTrackEnd_SingleTrackWithAudiofile_EndSetToAudiofileDuration), new AudioCodec("audio/mpeg", ".mp3", "AudioCodec MP3"), TimeSpan.FromMinutes(5))
721715
};
722716
var track1 = new Track { Position = 1, Begin = TimeSpan.Zero, End = TimeSpan.FromMinutes(2) };
723717
var track2 = new Track { Position = 2, Begin = TimeSpan.FromMinutes(2) };

AudioCuesheetEditor.Tests/Model/IO/Audio/AudiofileTests.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,6 @@ public class AudiofileTests
2626
public void AudioFileTest()
2727
{
2828
var audioFile = new Audiofile("test.mp3");
29-
Assert.IsNull(audioFile.ContentStream);
30-
Assert.IsFalse(audioFile.IsContentStreamLoaded);
3129
Assert.IsNotNull(audioFile.Name);
3230
Assert.AreEqual("MP3", audioFile.AudioFileType);
3331
audioFile = new Audiofile("Test");

AudioCuesheetEditor/AudioCuesheetEditor.csproj

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
<PackageReference Include="Microsoft.Extensions.Logging.Configuration" Version="10.0.4" />
3232
<PackageReference Include="MudBlazor" Version="9.1.0" />
3333
<PackageReference Include="Toolbelt.Blazor.HotKeys2" Version="6.2.0" />
34-
<PackageReference Include="z440.atl.core" Version="7.11.0" />
3534
</ItemGroup>
3635

3736
<ItemGroup>

AudioCuesheetEditor/Extensions/InterfaceConverter.cs

Lines changed: 0 additions & 40 deletions
This file was deleted.

AudioCuesheetEditor/Model/AudioCuesheet/Cuesheet.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public class Cuesheet() : Validateable, ITraceable, ICuesheet
3838
private List<Track> tracks = [];
3939
private String? artist;
4040
private String? title;
41-
private IAudiofile? audiofile;
41+
private Audiofile? audiofile;
4242
private CDTextfile? cDTextfile;
4343
private String? catalogueNumber;
4444
private readonly List<KeyValuePair<String, Track>> currentlyHandlingLinkedTrackPropertyChange = [];
@@ -89,7 +89,7 @@ public String? Title
8989
FireEvents(previousValue, propertyName: nameof(Title));
9090
}
9191
}
92-
public IAudiofile? Audiofile
92+
public Audiofile? Audiofile
9393
{
9494
get => audiofile;
9595
set

AudioCuesheetEditor/Model/IO/Audio/Audiofile.cs

Lines changed: 3 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
namespace AudioCuesheetEditor.Model.IO.Audio
1919
{
2020
[method: JsonConstructor]
21-
public class Audiofile(String name) : IDisposable, IAudiofile
21+
public class Audiofile(String name)
2222
{
2323
public static readonly AudioCodec AudioCodecWEBM = new("audio/webm", ".webm", "AudioCodec WEBM");
2424

@@ -35,20 +35,17 @@ public class Audiofile(String name) : IDisposable, IAudiofile
3535
];
3636

3737
private AudioCodec? audioCodec;
38-
private Stream? contentStream;
3938
private String name = name;
40-
private bool disposedValue;
4139

42-
public event EventHandler? ContentStreamLoaded;
43-
44-
public Audiofile(String name, String objectURL, AudioCodec? audioCodec) : this(name)
40+
public Audiofile(String name, String objectURL, AudioCodec? audioCodec, TimeSpan? duration = null) : this(name)
4541
{
4642
if (String.IsNullOrEmpty(objectURL))
4743
{
4844
throw new ArgumentNullException(nameof(objectURL));
4945
}
5046
ObjectURL = objectURL;
5147
AudioCodec = audioCodec;
48+
Duration = duration;
5249
}
5350

5451
public String Name
@@ -71,32 +68,6 @@ public String Name
7168
[JsonIgnore]
7269
public String? ObjectURL { get; private set; }
7370
/// <summary>
74-
/// Boolean indicating if the stream has fully been loaded
75-
/// </summary>
76-
[JsonIgnore]
77-
public Boolean IsContentStreamLoaded
78-
{
79-
get { return ContentStream != null; }
80-
}
81-
/// <summary>
82-
/// File content stream. Be carefully, this stream is loaded asynchronously. Connect to the StreamLoaded for checking if loading has already been done!
83-
/// </summary>
84-
[JsonIgnore]
85-
public Stream? ContentStream
86-
{
87-
get => contentStream;
88-
set
89-
{
90-
contentStream = value;
91-
if ((ContentStream != null) && (AudioCodec != null))
92-
{
93-
var track = new ATL.Track(ContentStream, AudioCodec.MimeType);
94-
Duration = new TimeSpan(0, 0, track.Duration);
95-
ContentStreamLoaded?.Invoke(this, EventArgs.Empty);
96-
}
97-
}
98-
}
99-
/// <summary>
10071
/// Duration of the audio file
10172
/// </summary>
10273
public TimeSpan? Duration { get; private set; }
@@ -144,30 +115,5 @@ public Boolean PlaybackPossible
144115
return playbackPossible;
145116
}
146117
}
147-
148-
protected virtual void Dispose(bool disposing)
149-
{
150-
if (!disposedValue)
151-
{
152-
if (disposing)
153-
{
154-
if (ContentStream != null)
155-
{
156-
ContentStream.Close();
157-
ContentStream.Dispose();
158-
ContentStream = null;
159-
}
160-
}
161-
162-
disposedValue = true;
163-
}
164-
}
165-
166-
public void Dispose()
167-
{
168-
// Ändern Sie diesen Code nicht. Fügen Sie Bereinigungscode in der Methode "Dispose(bool disposing)" ein.
169-
Dispose(disposing: true);
170-
GC.SuppressFinalize(this);
171-
}
172118
}
173119
}

AudioCuesheetEditor/Model/IO/Audio/IAudiofile.cs

Lines changed: 0 additions & 31 deletions
This file was deleted.

AudioCuesheetEditor/Model/IO/Projectfile.cs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,7 @@
1313
//You should have received a copy of the GNU General Public License
1414
//along with Foobar. If not, see
1515
//<http: //www.gnu.org/licenses />.
16-
using AudioCuesheetEditor.Extensions;
1716
using AudioCuesheetEditor.Model.AudioCuesheet;
18-
using AudioCuesheetEditor.Model.IO.Audio;
1917
using System.Text;
2018
using System.Text.Json;
2119
using System.Text.Json.Serialization;
@@ -32,8 +30,7 @@ public class Projectfile(Cuesheet cuesheet)
3230
ReferenceHandler = ReferenceHandler.IgnoreCycles,
3331
Converters =
3432
{
35-
new JsonStringEnumConverter(),
36-
new InterfaceConverter<IAudiofile, Audiofile>() // Add a custom converter for IAudiofile
33+
new JsonStringEnumConverter()
3734
}
3835
};
3936

AudioCuesheetEditor/Services/Audio/PlaybackService.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public class PlaybackService : IDisposable
2626
private readonly IHowl _howl;
2727

2828
private int? soundId;
29-
private IAudiofile? currentlyPlayingAudiofile;
29+
private Audiofile? currentlyPlayingAudiofile;
3030
private Timer? updateTimer;
3131
private bool disposedValue;
3232
private readonly Lock timerLock = new();
@@ -71,7 +71,7 @@ public PlaybackService(ISessionStateContainer sessionStateContainer, IHowl howl)
7171
public async Task PlayOrPauseAsync()
7272
{
7373
//Reset if the last played audiofile is not the current one
74-
if (currentlyPlayingAudiofile !=cuesheet.Audiofile)
74+
if (currentlyPlayingAudiofile != cuesheet.Audiofile)
7575
{
7676
soundId = null;
7777
}

AudioCuesheetEditor/Services/IO/FileInputManager.cs

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -92,22 +92,13 @@ public bool CheckFileMimeType(string? fileContentType, string fileName, string m
9292
var codec = GetAudioCodec(fileUpload.ContentType, fileUpload.Name);
9393
if (codec != null)
9494
{
95-
audiofile = new Audiofile(fileUpload.Name, fileUpload.ObjectUrl, codec);
95+
TimeSpan? duration = null;
9696
if (String.IsNullOrEmpty(fileUpload.ObjectUrl) == false)
9797
{
98-
var request = new HttpRequestMessage(HttpMethod.Get, fileUpload.ObjectUrl);
99-
//TODO: Enable when https://github.com/NeoCoderMatrix86/AudioCuesheetEditor/issues/524 gets done
100-
request.SetBrowserRequestStreamingEnabled(false);
101-
102-
var response = await _httpClient.SendAsync(request);
103-
var loadContentStreamTask = response.Content.ReadAsStreamAsync()
104-
.ContinueWith(x => audiofile.ContentStream = x.Result);
105-
if (afterContentStreamLoaded != null)
106-
{
107-
_ = loadContentStreamTask
108-
.ContinueWith(afterContentStreamLoaded);
109-
}
98+
var durationSeconds = await _jsRuntime.InvokeAsync<double>("getAudioDurationFromFile", fileUpload.ObjectUrl);
99+
duration = TimeSpan.FromSeconds(durationSeconds);
110100
}
101+
audiofile = new Audiofile(fileUpload.Name, fileUpload.ObjectUrl, codec, duration);
111102
}
112103
else
113104
{

0 commit comments

Comments
 (0)