mirror of
https://github.com/danog/Telegram.git
synced 2024-12-11 08:59:48 +01:00
195 lines
5.7 KiB
Objective-C
195 lines
5.7 KiB
Objective-C
#import "TGInputController.h"
|
|
#import "TGBridgeCommon.h"
|
|
#import "TGInterfaceController.h"
|
|
|
|
#import "TGFileCache.h"
|
|
#import "TGExtensionDelegate.h"
|
|
#import "TGBridgePresetsSignals.h"
|
|
|
|
@implementation TGInputController
|
|
|
|
+ (void)presentPlainInputControllerForInterfaceController:(TGInterfaceController *)interfaceController completion:(void (^)(NSString *))completion;
|
|
{
|
|
[interfaceController presentTextInputControllerWithSuggestions:nil allowedInputMode:WKTextInputModePlain completion:^(NSArray *results)
|
|
{
|
|
if (completion != nil && results.count > 0 && [results.firstObject isKindOfClass:[NSString class]])
|
|
completion(results.firstObject);
|
|
}];
|
|
}
|
|
|
|
+ (void)presentInputControllerForInterfaceController:(TGInterfaceController *)interfaceController suggestionsForText:(NSString *)text completion:(void (^)(NSString *))completion
|
|
{
|
|
[interfaceController presentTextInputControllerWithSuggestions:[self suggestionsForText:text] allowedInputMode:WKTextInputModeAllowEmoji completion:^(NSArray *results)
|
|
{
|
|
if (completion != nil && results.count > 0 && [results.firstObject isKindOfClass:[NSString class]])
|
|
completion(results.firstObject);
|
|
}];
|
|
}
|
|
|
|
+ (void)presentAudioControllerForInterfaceController:(TGInterfaceController *)interfaceController completion:(void (^)(int64_t, int32_t, NSURL *))completion
|
|
{
|
|
NSDictionary *options = @
|
|
{
|
|
WKAudioRecorderControllerOptionsActionTitleKey: TGLocalized(@"Watch.Compose.Send"),
|
|
};
|
|
|
|
int64_t randomId = 0;
|
|
arc4random_buf(&randomId, sizeof(int64_t));
|
|
|
|
NSURL *url = [[TGExtensionDelegate instance].audioCache urlForKey:[NSString stringWithFormat:@"%lld", randomId]];
|
|
[interfaceController presentAudioRecorderControllerWithOutputURL:url preset:WKAudioRecorderPresetWideBandSpeech options:options completion:^(BOOL didSave, NSError * _Nullable error)
|
|
{
|
|
WKAudioFileAsset *asset = [WKAudioFileAsset assetWithURL:url];
|
|
|
|
if (didSave && !error)
|
|
completion(randomId, (int32_t)asset.duration, url);
|
|
}];
|
|
}
|
|
|
|
+ (NSArray *)suggestionsForText:(NSString *)text
|
|
{
|
|
return [self customSuggestions];
|
|
}
|
|
|
|
+ (NSArray *)old_customSuggestions
|
|
{
|
|
NSString *groupName = [TGBridgeCommon groupName];
|
|
NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteName:groupName];
|
|
|
|
NSMutableArray *finalSuggestions = [[NSMutableArray alloc] initWithArray:[self generalSuggestions]];
|
|
[finalSuggestions addObjectsFromArray:[self laterSuggestions]];
|
|
|
|
for (NSInteger i = 0; i < 8; i++)
|
|
{
|
|
NSString *key = [NSString stringWithFormat:@"preset_%d", i + 1];
|
|
NSString *preset = [defaults stringForKey:key];
|
|
if (preset.length > 0)
|
|
[finalSuggestions replaceObjectAtIndex:i withObject:preset];
|
|
}
|
|
|
|
return finalSuggestions;
|
|
}
|
|
|
|
+ (NSArray *)customSuggestions
|
|
{
|
|
NSArray *presetIdentifiers = [self presetIdentifiers];
|
|
|
|
NSMutableArray *suggestions = [[NSMutableArray alloc] init];
|
|
NSDictionary *customPresets = [self customPresets];
|
|
for (NSString *identifier in presetIdentifiers)
|
|
{
|
|
NSString *preset = customPresets[identifier];
|
|
if (preset == nil)
|
|
preset = TGLocalized([NSString stringWithFormat:@"Watch.%@", identifier]);
|
|
|
|
[suggestions addObject:preset];
|
|
}
|
|
|
|
return suggestions;
|
|
}
|
|
|
|
+ (NSDictionary *)customPresets
|
|
{
|
|
NSData *data = [NSData dataWithContentsOfURL:[TGBridgePresetsSignals presetsURL]];
|
|
|
|
@try
|
|
{
|
|
id presets = [NSKeyedUnarchiver unarchiveObjectWithData:data];
|
|
if ([presets isKindOfClass:[NSDictionary class]])
|
|
return presets;
|
|
|
|
return nil;
|
|
}
|
|
@catch (NSException *exception)
|
|
{
|
|
return nil;
|
|
}
|
|
}
|
|
|
|
+ (NSArray *)presetIdentifiers
|
|
{
|
|
return @
|
|
[
|
|
@"Suggestion.OK",
|
|
@"Suggestion.Thanks",
|
|
@"Suggestion.WhatsUp",
|
|
@"Suggestion.TalkLater",
|
|
@"Suggestion.CantTalk",
|
|
@"Suggestion.HoldOn",
|
|
@"Suggestion.BRB",
|
|
@"Suggestion.OnMyWay"
|
|
];
|
|
}
|
|
|
|
+ (NSArray *)composeSuggestions
|
|
{
|
|
static NSArray *suggestions;
|
|
static dispatch_once_t onceToken;
|
|
dispatch_once(&onceToken, ^
|
|
{
|
|
suggestions = @
|
|
[
|
|
TGLocalized(@"Watch.Suggestion.WhatsUp"),
|
|
TGLocalized(@"Watch.Suggestion.OnMyWay"),
|
|
TGLocalized(@"Watch.Suggestion.OK"),
|
|
TGLocalized(@"Watch.Suggestion.CantTalk"),
|
|
TGLocalized(@"Watch.Suggestion.CallSoon"),
|
|
TGLocalized(@"Watch.Suggestion.Thanks")
|
|
];
|
|
});
|
|
return suggestions;
|
|
}
|
|
|
|
+ (NSArray *)generalSuggestions
|
|
{
|
|
static NSArray *suggestions;
|
|
static dispatch_once_t onceToken;
|
|
dispatch_once(&onceToken, ^
|
|
{
|
|
suggestions = @
|
|
[
|
|
TGLocalized(@"Watch.Suggestion.OK"),
|
|
TGLocalized(@"Watch.Suggestion.Thanks"),
|
|
TGLocalized(@"Watch.Suggestion.WhatsUp")
|
|
];
|
|
});
|
|
return suggestions;
|
|
}
|
|
|
|
+ (NSArray *)yesNoSuggestions
|
|
{
|
|
static NSArray *suggestions;
|
|
static dispatch_once_t onceToken;
|
|
dispatch_once(&onceToken, ^
|
|
{
|
|
suggestions = @
|
|
[
|
|
TGLocalized(@"Watch.Suggestion.Yes"),
|
|
TGLocalized(@"Watch.Suggestion.No"),
|
|
TGLocalized(@"Watch.Suggestion.Absolutely"),
|
|
TGLocalized(@"Watch.Suggestion.Nope")
|
|
];
|
|
});
|
|
return suggestions;
|
|
}
|
|
|
|
+ (NSArray *)laterSuggestions
|
|
{
|
|
static NSArray *suggestions;
|
|
static dispatch_once_t onceToken;
|
|
dispatch_once(&onceToken, ^
|
|
{
|
|
suggestions = @
|
|
[
|
|
TGLocalized(@"Watch.Suggestion.TalkLater"),
|
|
TGLocalized(@"Watch.Suggestion.CantTalk"),
|
|
TGLocalized(@"Watch.Suggestion.HoldOn"),
|
|
TGLocalized(@"Watch.Suggestion.BRB"),
|
|
TGLocalized(@"Watch.Suggestion.OnMyWay")
|
|
];
|
|
});
|
|
return suggestions;
|
|
}
|
|
|
|
@end
|