@@ -52,9 +52,14 @@ - (void)setUrl:(NSURL *)url {
5252- (void )setUrl : (NSURL *)url validator : (id )validator {
5353 _url = url;
5454 _validator = validator;
55- if ([AudioManager shared ].isPlaying && [[AudioManager shared ].validator isEqual: validator]) {
55+ if ([[AudioManager shared ].validator isEqual: validator] && [AudioManager shared ].isPlaying ) {
56+ [AudioManager shared ].delegate = self;
5657 self.playState = AudioPlayViewStatePlaying;
5758 }
59+ else if ([[AudioManager shared ].validator isEqual: validator] && [self isDownloading: url]) {
60+ [AudioManager shared ].delegate = self;
61+ self.playState = AudioPlayViewStateDownloading;
62+ }
5863 else {
5964 self.playState = AudioPlayViewStateNormal;
6065 }
@@ -66,6 +71,16 @@ - (void)play {
6671 if (_url == nil ) {
6772 return ;
6873 }
74+
75+ if ([[AudioManager shared ].delegate isKindOfClass: [AudioPlayView class ]]
76+ && [AudioManager shared ].delegate != self) {
77+ AudioPlayView *view = (AudioPlayView *)[AudioManager shared ].delegate ;
78+ if (view.playState == AudioPlayViewStateDownloading) {
79+ view.playState = AudioPlayViewStateNormal;
80+ }
81+ }
82+ [AudioManager shared ].delegate = self;
83+
6984 if ([_url isFileURL ]) {
7085 [self play: _url.path];
7186 }
@@ -99,7 +114,6 @@ - (void)play:(NSString *)file {
99114 }
100115
101116 self.playState = AudioPlayViewStatePlaying;
102- [AudioManager shared ].delegate = self;
103117 [[AudioManager shared ] play: f validator: self .validator];
104118
105119 if (_playStartedBlock) {
@@ -127,32 +141,43 @@ - (void)startDownload:(NSURL *)url {
127141 if (url == nil ) {
128142 return ;
129143 }
130- NSURLRequest *request = [NSURLRequest requestWithURL: url];
131- NSProgress *progress;
132- NSURLSessionDownloadTask *downloadTask = [[Coding_FileManager af_manager ] downloadTaskWithRequest: request progress: &progress destination: ^NSURL *(NSURL *targetPath, NSURLResponse *response) {
133- return [NSURL fileURLWithPath: [[self class ] downloadFile: response.URL .absoluteString]];
134- } completionHandler: ^(NSURLResponse *response, NSURL *filePath, NSError *error) {
135- if (error) {
136- [self didDownloadError: error];
137- self.playState = AudioPlayViewStateNormal;
138- }
139- else {
140- if ([self .validator isEqual: [AudioManager shared ].validator]) {
141- [self play: filePath.path];
144+ if (![self isDownloading: url]) {
145+ NSURLRequest *request = [NSURLRequest requestWithURL: url];
146+ NSProgress *progress;
147+ NSURLSessionDownloadTask *downloadTask = [[Coding_FileManager af_manager ] downloadTaskWithRequest: request progress: &progress destination: ^NSURL *(NSURL *targetPath, NSURLResponse *response) {
148+ return [NSURL fileURLWithPath: [[self class ] downloadFile: response.URL .absoluteString]];
149+ } completionHandler: ^(NSURLResponse *response, NSURL *filePath, NSError *error) {
150+ if (error) {
151+ [self didDownloadError: error];
152+ self.playState = AudioPlayViewStateNormal;
142153 }
143154 else {
144- self.playState = AudioPlayViewStateNormal;
155+ if ([self .validator isEqual: [AudioManager shared ].validator]) {
156+ [self play: filePath.path];
157+ }
158+ else {
159+ self.playState = AudioPlayViewStateNormal;
160+ }
145161 }
146- }
147- } ];
148- [downloadTask resume ];
162+ }];
163+ [downloadTask resume ];
164+ }
149165 self.playState = AudioPlayViewStateDownloading;
150166}
151167
152168- (void )didDownloadError : (NSError *)error {
153169
154170}
155171
172+ - (BOOL )isDownloading : (NSURL *)url {
173+ for (NSURLSessionDownloadTask *downloadTask in [Coding_FileManager af_manager ].downloadTasks ) {
174+ if ([downloadTask.originalRequest.URL isEqual: url]) {
175+ return YES ;
176+ }
177+ }
178+ return NO ;
179+ }
180+
156181#pragma mark - FileManager
157182
158183+ (NSString *)downloadDir {
0 commit comments