-
Notifications
You must be signed in to change notification settings - Fork 17
/
HBBLangData.m
103 lines (82 loc) · 3.5 KB
/
HBBLangData.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
//
// HBBLangData.m
// HandBrakeBatch
//
// Created by Cesare Tagliaferri on 15/01/2012.
// This file is part of the HandBrakeBatch source code.
// Homepage: <http://www.osomac.com/>.
// It may be used under the terms of the GNU General Public License.
//
#import "HBBLangData.h"
static HBBLangData *instance = nil;
@implementation HBBLangData
+(HBBLangData *)defaultHBBLangData {
if (instance == nil) {
instance = [[HBBLangData alloc] init];
}
return instance;
}
- (id)init {
self = [super init];
if (self) {
NSString *dbFileName = [[NSBundle mainBundle] pathForResource:@"iso639-2" ofType:@"db"];
int status = sqlite3_open_v2([dbFileName cStringUsingEncoding:NSUTF8StringEncoding], &dbHandle, SQLITE_OPEN_READONLY, NULL);
if (status != SQLITE_OK) {
NSLog(@"Error opening language list database: %s", sqlite3_errmsg(dbHandle));
return nil;
}
}
return self;
}
- (NSArray *)languageList {
NSString *statementString = @"SELECT Ref_Name_EN FROM ISO_639_2 ORDER BY Ref_Name_EN";
const char *unused;
sqlite3_stmt *statement;
if (sqlite3_prepare_v2(dbHandle, [statementString cStringUsingEncoding:NSUTF8StringEncoding], (int)[statementString length], &statement, &unused) != SQLITE_OK) {
NSLog(@"Error preparing SQL statement (%@): %s", statementString, sqlite3_errmsg(dbHandle));
return nil;
}
NSMutableArray *result = [[NSMutableArray alloc] init];
int status;
while ((status = sqlite3_step(statement)) == SQLITE_ROW) {
const char *resultBytes = (const char *)sqlite3_column_text(statement, 0);
[result addObject:[NSString stringWithUTF8String:resultBytes]];
}
if ( status != SQLITE_DONE ) {
NSLog(@"Error executing SQL statement (%@): %s", statementString, sqlite3_errmsg(dbHandle));
sqlite3_finalize(statement);
return nil;
}
sqlite3_finalize(statement);
return result;
}
- (NSString *)execSimpleStatement: (NSString *)statementString {
const char *unused;
sqlite3_stmt *statement;
if (sqlite3_prepare_v2(dbHandle, [statementString cStringUsingEncoding:NSUTF8StringEncoding], (int)[statementString length], &statement, &unused) != SQLITE_OK) {
NSLog(@"Error preparing SQL statement (%@): %s", statementString, sqlite3_errmsg(dbHandle));
return nil;
}
if (sqlite3_step(statement) != SQLITE_ROW) {
NSLog(@"Error executing SQL statement (%@): %s", statementString, sqlite3_errmsg(dbHandle));
sqlite3_finalize(statement);
return nil;
}
const char *resultBytes = (const char *)sqlite3_column_text(statement, 0);
NSString *result = [NSString stringWithUTF8String:resultBytes];
sqlite3_finalize(statement);
return result;
}
-(NSString *)langBCode: (NSString *)langName {
NSString *statementString = [NSString stringWithFormat:@"SELECT Part2B FROM ISO_639_2 WHERE Ref_Name_EN = '%@'", langName];
return [self execSimpleStatement:statementString];
}
-(NSString *)langTCode: (NSString *)langName {
NSString *statementString = [NSString stringWithFormat:@"SELECT Part2T FROM ISO_639_2 WHERE Ref_Name_EN = '%@'", langName];
return [self execSimpleStatement:statementString];
}
-(NSString *)langName: (NSString *)langCode {
NSString *statementString = [NSString stringWithFormat:@"SELECT Ref_Name_EN FROM ISO_639_2 WHERE Part2B = '%@' OR Part2T = '%@'", langCode, langCode];
return [self execSimpleStatement:statementString];
}
@end