mirror of
https://git.FreeBSD.org/ports.git
synced 2025-01-14 07:43:06 +00:00
764fdbdf68
PR: 165833 Submitted by: Jason E. Hale Obtained from: Ubuntu Feature safe: yes
198 lines
5.6 KiB
Objective-C
198 lines
5.6 KiB
Objective-C
--- ./SongInspectorController.m.orig 2012-03-05 20:56:28.000000000 -0500
|
|
+++ ./SongInspectorController.m 2012-03-05 21:03:15.000000000 -0500
|
|
@@ -34,8 +34,6 @@
|
|
#import <Foundation/NSString.h>
|
|
#import <Foundation/NSThread.h>
|
|
|
|
-#import <musicbrainz/mb_c.h>
|
|
-
|
|
#import <Cynthiune/Format.h>
|
|
#import <Cynthiune/NSViewExtensions.h>
|
|
#import <Cynthiune/utils.h>
|
|
@@ -156,10 +154,10 @@
|
|
{
|
|
if (!threadRunning)
|
|
{
|
|
- [lookupButton setEnabled: YES];
|
|
- [lookupButton setImage: [NSImage imageNamed: @"lookup-mb-on"]];
|
|
+ [lookupButton setEnabled: NO];
|
|
+ [lookupButton setImage: [NSImage imageNamed: @"lookup-mb-off"]];
|
|
[lookupAnimation setImage: nil];
|
|
- [lookupStatusLabel setStringValue: @""];
|
|
+ [lookupStatusLabel setStringValue: @"MB lookup doesn't work!"];
|
|
}
|
|
}
|
|
else
|
|
@@ -320,39 +318,6 @@
|
|
forKey: @"song"]];
|
|
}
|
|
|
|
-- (char *) _generateTrmId
|
|
-{
|
|
- id <Format> stream;
|
|
- trm_t trmGen;
|
|
- int size;
|
|
- char sig[17];
|
|
- unsigned char buffer[4096];
|
|
- char *trmId;
|
|
-
|
|
- stream = [song openStreamForSong];
|
|
- if (stream)
|
|
- {
|
|
- trmGen = trm_New ();
|
|
- trm_SetPCMDataInfo (trmGen,
|
|
- [stream readRate], [stream readChannels], 16);
|
|
- trm_SetSongLength (trmGen, [stream readDuration]);
|
|
- size = [stream readNextChunk: buffer withSize: 4096];
|
|
- while (!trm_GenerateSignature (trmGen, (char *) buffer, size))
|
|
- size = [stream readNextChunk: buffer withSize: 4096];
|
|
-
|
|
- trm_FinalizeSignature (trmGen, sig, NULL);
|
|
-
|
|
- trmId = malloc (37);
|
|
- trm_ConvertSigToASCII (trmGen, sig, trmId);
|
|
- trm_Delete (trmGen);
|
|
- [stream streamClose];
|
|
- }
|
|
- else
|
|
- trmId = NULL;
|
|
-
|
|
- return trmId;
|
|
-}
|
|
-
|
|
- (void) updateField: (NSTextField *) field
|
|
withString: (NSString *) string
|
|
{
|
|
@@ -418,132 +383,6 @@
|
|
selector: @selector (_updateFieldsWithTrackInfos:)];
|
|
}
|
|
|
|
-- (NSDictionary *) readMB: (musicbrainz_t) mb
|
|
- track: (int) track
|
|
-{
|
|
- NSMutableDictionary *trackInfos;
|
|
- NSString *string;
|
|
- char cString[100];
|
|
- int releases;
|
|
-
|
|
- trackInfos = [NSMutableDictionary new];
|
|
- [trackInfos autorelease];
|
|
-
|
|
- mb_Select1 (mb, MBS_SelectTrack, track);
|
|
- if (mb_GetResultData (mb, MBE_TrackGetTrackName, cString, 100))
|
|
- {
|
|
- string = [NSString stringWithUTF8String: cString];
|
|
- [trackInfos setObject: string forKey: @"title"];
|
|
- }
|
|
-
|
|
- if (mb_GetResultData (mb, MBE_TrackGetArtistName, cString, 100))
|
|
- {
|
|
- string = [NSString stringWithUTF8String: cString];
|
|
- [trackInfos setObject: string forKey: @"artist"];
|
|
- }
|
|
-
|
|
- if (mb_GetResultData (mb, MBE_TrackGetTrackNum, cString, 100))
|
|
- {
|
|
- string = [NSString stringWithUTF8String: cString];
|
|
- [trackInfos setObject: string forKey: @"trackNumber"];
|
|
- }
|
|
-
|
|
- if (mb_Select (mb, MBS_SelectTrackAlbum))
|
|
- {
|
|
- if (mb_GetResultData (mb, MBE_AlbumGetAlbumName, cString, 100))
|
|
- {
|
|
- string = [NSString stringWithUTF8String: cString];
|
|
- [trackInfos setObject: string forKey: @"album"];
|
|
- }
|
|
-#ifdef MBE_AlbumGetNumReleaseDates
|
|
- releases = mb_GetResultInt (mb, MBE_AlbumGetNumReleaseDates);
|
|
- if (releases)
|
|
- {
|
|
- mb_Select1 (mb, MBS_SelectReleaseDate, 1);
|
|
- if (mb_GetResultData (mb, MBE_ReleaseGetDate, cString, 100))
|
|
- {
|
|
- *(cString + 4) = 0;
|
|
- string = [NSString stringWithUTF8String: cString];
|
|
- [trackInfos setObject: string forKey: @"year"];
|
|
- }
|
|
- mb_Select (mb, MBS_Back);
|
|
- }
|
|
-#endif
|
|
-
|
|
- mb_Select (mb, MBS_Back);
|
|
- }
|
|
-
|
|
- mb_Select (mb, MBS_Rewind);
|
|
-
|
|
- return trackInfos;
|
|
-}
|
|
-
|
|
-- (void) _parseMB: (musicbrainz_t) mb
|
|
-{
|
|
- int count, results;
|
|
- NSMutableArray *allTrackInfos;
|
|
-
|
|
- results = mb_GetResultInt (mb, MBE_GetNumTracks);
|
|
- allTrackInfos = [[NSMutableArray alloc] initWithCapacity: results];
|
|
- [allTrackInfos autorelease];
|
|
-
|
|
- for (count = 0; count < results; count++)
|
|
- [allTrackInfos addObject: [self readMB: mb track: count + 1]];
|
|
-
|
|
- [self performSelectorOnMainThread: @selector (_updateSongFields:)
|
|
- withObject: allTrackInfos
|
|
- waitUntilDone: YES];
|
|
-}
|
|
-
|
|
-- (void) lookupThread
|
|
-{
|
|
- NSAutoreleasePool *pool;
|
|
- char *trmId;
|
|
- musicbrainz_t mb;
|
|
- char **qis;
|
|
- char error[80];
|
|
-
|
|
- pool = [NSAutoreleasePool new];
|
|
-
|
|
- [self updateField: lookupStatusLabel
|
|
- withString: LOCALIZED(@"Generating TRM...")];
|
|
- trmId = [self _generateTrmId];
|
|
- if (trmId && !threadShouldDie)
|
|
- {
|
|
- qis = MakeQis (trmId, song);
|
|
-
|
|
- if (strcasecmp (trmId, busyTrmId))
|
|
- {
|
|
- [self updateField: lookupStatusLabel
|
|
- withString: LOCALIZED (@"Querying MusicBrainz server...")];
|
|
- mb = mb_New ();
|
|
- mb_UseUTF8 (mb, YES);
|
|
- if (mb_QueryWithArgs (mb, MBQ_TrackInfoFromTRMId, qis))
|
|
- [self _parseMB: mb];
|
|
- else
|
|
- {
|
|
-// FIXME: there should be an accurate error message here...
|
|
- [self updateField: lookupStatusLabel
|
|
- withString: @""];
|
|
- mb_GetQueryError (mb, error, 80);
|
|
- NSLog (@"Musicbrainz error: %s (%s)", error, trmId);
|
|
- }
|
|
- mb_Delete (mb);
|
|
- }
|
|
- else
|
|
- [self updateField: lookupStatusLabel
|
|
- withString: LOCALIZED (@"The MusicBrainz server was too busy")];
|
|
-
|
|
- FreeQis (qis);
|
|
- }
|
|
-
|
|
- [self performSelectorOnMainThread: @selector (lookupThreadEnded)
|
|
- withObject: nil
|
|
- waitUntilDone: NO];
|
|
-
|
|
- [pool release];
|
|
-}
|
|
-
|
|
- (void) mbLookup: (id)sender
|
|
{
|
|
if (song) |