Skip to content

Commit

Permalink
1.9.7 (441)
Browse files Browse the repository at this point in the history
  • Loading branch information
denis15yo committed Feb 10, 2025
1 parent 4217806 commit 09e82ae
Show file tree
Hide file tree
Showing 26 changed files with 376 additions and 130 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,10 @@ class NicegramSettingsRepositoryImpl {
grayscaleInChat: false,
grayscaleInChatList: false,
trackDigitalFootprint: false,
speechToText: .init(enableApple: nil)
speechToText: .init(
useOpenAI: [:],
appleRecognizerState: [:]
)
),
toDomain: \.toDomain,
toDto: \.toDto
Expand All @@ -34,7 +37,8 @@ extension NicegramSettingsRepositoryImpl: NicegramSettingsRepository {

private struct NicegramSettingsDto: Codable {
struct SpeechToTextDto: Codable {
let enableApple: Bool?
let useOpenAI: [Int64: Bool?]
let appleRecognizerState: [Int64: Bool?]
}

let disableAnimationsInChatList: Bool
Expand All @@ -58,7 +62,10 @@ private struct NicegramSettingsDto: Codable {

private extension NicegramSettingsDto.SpeechToTextDto {
var toDomain: NicegramSettings.SpeechToText {
NicegramSettings.SpeechToText(enableApple: enableApple)
NicegramSettings.SpeechToText(
useOpenAI: useOpenAI,
appleRecognizerState: appleRecognizerState
)
}
}

Expand All @@ -77,6 +84,9 @@ private extension NicegramSettings {

private extension NicegramSettings.SpeechToText {
var toDto: NicegramSettingsDto.SpeechToTextDto {
NicegramSettingsDto.SpeechToTextDto(enableApple: enableApple)
NicegramSettingsDto.SpeechToTextDto(
useOpenAI: useOpenAI,
appleRecognizerState: appleRecognizerState
)
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import Foundation
import FeatPremium
import FeatSpeechToText

public class GetSpeech2TextSettingsUseCase {
private let nicegramSettingsRepository: NicegramSettingsRepository
Expand All @@ -12,7 +13,11 @@ public class GetSpeech2TextSettingsUseCase {
}

public extension GetSpeech2TextSettingsUseCase {
func callAsFunction() -> Bool {
nicegramSettingsRepository.settings().speechToText.enableApple ?? false
func appleRecognizerState(with id: Int64) -> Bool {
(nicegramSettingsRepository.settings().speechToText.appleRecognizerState[id] ?? false) ?? false
}

func useOpenAI(with id: Int64) -> Bool {
(nicegramSettingsRepository.settings().speechToText.useOpenAI[id] ?? false) ?? false
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@ import NGCore

public struct NicegramSettings: Withable {
public struct SpeechToText: Withable {
public var enableApple: Bool?
public var useOpenAI: [Int64: Bool?]
public var appleRecognizerState: [Int64: Bool?]
}

public var disableAnimationsInChatList: Bool
Expand Down
Original file line number Diff line number Diff line change
@@ -1,36 +1,58 @@
import Foundation
import FeatPremium
import FeatSpeechToText

public final class SetDefaultSpeech2TextSettingsUseCase {
private let nicegramSettingsRepository: NicegramSettingsRepository
private let getPreferredProviderTypeUseCase: GetPreferredProviderTypeUseCase
private let setPreferredProviderTypeUseCase: SetPreferredProviderTypeUseCase

init(
nicegramSettingsRepository: NicegramSettingsRepository
nicegramSettingsRepository: NicegramSettingsRepository,
speechToTextModule: SpeechToTextContainer
) {
self.nicegramSettingsRepository = nicegramSettingsRepository
self.getPreferredProviderTypeUseCase = speechToTextModule.getPreferredProviderTypeUseCase()
self.setPreferredProviderTypeUseCase = speechToTextModule.setPreferredProviderTypeUseCase()
}
}

public extension SetDefaultSpeech2TextSettingsUseCase {
func callAsFunction(with isTelegramPremium: Bool) {
guard nicegramSettingsRepository.settings().speechToText.enableApple == nil else { return }
var result: Bool = true

let isNicegramPremium = isPremium()
func callAsFunction(
with id: Int64,
isTelegramPremium: Bool
) {
if nicegramSettingsRepository.settings().speechToText.useOpenAI[id] == nil {
let type = getPreferredProviderTypeUseCase()
var result = false

if (type == .openAi || NGSettings.useOpenAI) && !isTelegramPremium {
result = true
}

updateNicegramSettings {
$0.speechToText.useOpenAI[id] = result
}

if isTelegramPremium {
result = false
} else if isNicegramPremium &&
isTelegramPremium {
result = false
Task {
await setPreferredProviderTypeUseCase(.google)
}
}

Task {
await nicegramSettingsRepository.update { settings in
var settings = settings
settings.speechToText.enableApple = result

return settings

if nicegramSettingsRepository.settings().speechToText.appleRecognizerState[id] == nil {
var result = true

let isNicegramPremium = isPremium()

if isTelegramPremium {
result = false
} else if isNicegramPremium &&
isTelegramPremium {
result = false
}

updateNicegramSettings {
$0.speechToText.appleRecognizerState[id] = result
}
}
}
Expand Down
14 changes: 11 additions & 3 deletions Nicegram/NGData/Sources/Modern/NicegramSettingsModule.swift
Original file line number Diff line number Diff line change
@@ -1,8 +1,15 @@
import Factory
import FeatSpeechToText
import MemberwiseInit

@MemberwiseInit(.private)
public final class NicegramSettingsModule: SharedContainer {
public static var shared = NicegramSettingsModule()
public var manager = ContainerManager()
public static var shared = NicegramSettingsModule(
speechToTextModule: .shared
)
public var manager: ContainerManager = ContainerManager()

private let speechToTextModule: SpeechToTextContainer
}

extension NicegramSettingsModule {
Expand All @@ -25,7 +32,8 @@ extension NicegramSettingsModule {
public var setDefaultSpeech2TextSettingsUseCase: Factory<SetDefaultSpeech2TextSettingsUseCase> {
self { [self] in
SetDefaultSpeech2TextSettingsUseCase(
nicegramSettingsRepository: nicegramSettingsRepository()
nicegramSettingsRepository: nicegramSettingsRepository(),
speechToTextModule: speechToTextModule
)
}
}
Expand Down
29 changes: 3 additions & 26 deletions Nicegram/NGData/Sources/NGSettings.swift
Original file line number Diff line number Diff line change
Expand Up @@ -59,34 +59,11 @@ public struct NGSettings {

@NGStorage(key: "rememberFolderOnExit", defaultValue: false)
public static var rememberFolderOnExit: Bool


@available(*, deprecated, message: "Deprecation version 1.9.6(441). Use GetSpeech2TextSettingsUseCase or getNicegramSettings()")
@NGStorage(key: "useOpenAI", defaultValue: false)
private static var _useOpenAI: Bool

@available(*, deprecated, message: "Deprecation version 1.9.1(392). Use _useOpenAI instead")
public static var useOpenAI: Bool {
get {
let preferredProviderTypeUseCase = SpeechToTextContainer.shared.getPreferredProviderTypeUseCase()
let type = preferredProviderTypeUseCase()
public static var useOpenAI: Bool

let getSpeech2TextSettingsUseCase = NicegramSettingsModule.shared.getSpeech2TextSettingsUseCase()
let enableApple = getSpeech2TextSettingsUseCase()

if enableApple {
return type == .openAi ? true : NGSettings._useOpenAI
} else {
return NGSettings._useOpenAI
}
}
set {
NGSettings._useOpenAI = newValue
let preferredProviderTypeUseCase = SpeechToTextContainer.shared.setPreferredProviderTypeUseCase()
Task {
await preferredProviderTypeUseCase(.google)
}
}
}

@NGStorage(key: "lastFolder", defaultValue: -1)
public static var lastFolder: Int32

Expand Down
11 changes: 8 additions & 3 deletions Nicegram/NGSpeechToText/Sources/ConvertSpeechToText.swift
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ import AccountContext
import TelegramPresentationData
import NGData
import NGUI
import NGStrings

private let getSpeech2TextSettingsUseCase = NicegramSettingsModule.shared.getSpeech2TextSettingsUseCase()

public enum SpeechToTextMessageSource {
case chat, contextMenu
Expand Down Expand Up @@ -42,9 +45,11 @@ public func convertSpeechToText(
return
}

let useOpenAI = getSpeech2TextSettingsUseCase.useOpenAI(with: id)

checkPremium { isPremium in
if isPremium &&
NGSettings.useOpenAI {
useOpenAI {
startConvertSpeechToTextTask(
from: source,
context: context,
Expand Down Expand Up @@ -191,7 +196,7 @@ private func startConvertSpeechToTextTask(
}
let c = getIAPErrorController(
context: context,
"Speech to text recognizer not available.",
l("NicegramSpeechToText.NotAvailable"),
presentationData
)
controllerInteraction.presentGlobalOverlayController(c, nil)
Expand All @@ -201,7 +206,7 @@ private func startConvertSpeechToTextTask(
}
let c = getIAPErrorController(
context: context,
"Speech to text recognizer autorization status error.",
l("NicegramSpeechToText.AuthorisationError"),
presentationData
)
controllerInteraction.presentGlobalOverlayController(c, nil)
Expand Down
20 changes: 13 additions & 7 deletions Nicegram/NGUI/Sources/NicegramSettingsController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ private enum NicegramSettingsControllerEntry: ItemListNodeEntry {

case quickReplies(String)

case enableAppleSpeech2Text(String, Bool)
case enableAppleSpeech2Text(String, Int64, Bool)
case onetaptr(String, Bool)

case shareBotsData(String, Bool)
Expand Down Expand Up @@ -429,8 +429,8 @@ private enum NicegramSettingsControllerEntry: ItemListNodeEntry {
} else {
return false
}
case let .enableAppleSpeech2Text(lhsText, lhsValue):
if case let .enableAppleSpeech2Text(rhsText, rhsValue) = rhs, lhsText == rhsText, lhsValue == rhsValue {
case let .enableAppleSpeech2Text(lhsText, _, lhsValue):
if case let .enableAppleSpeech2Text(rhsText, _, rhsValue) = rhs, lhsText == rhsText, lhsValue == rhsValue {
return true
} else {
return false
Expand Down Expand Up @@ -656,10 +656,10 @@ private enum NicegramSettingsControllerEntry: ItemListNodeEntry {
style: .blocks,
updated: chat.setEnabled
)
case let .enableAppleSpeech2Text(text, value):
case let .enableAppleSpeech2Text(text, id, value):
return ItemListSwitchItem(presentationData: presentationData, title: text, value: value, enabled: true, sectionId: section, style: .blocks, updated: { value in
updateNicegramSettings {
$0.speechToText.enableApple = value
$0.speechToText.appleRecognizerState[id] = value
}
})
case let .onetaptr(text, value):
Expand Down Expand Up @@ -807,9 +807,15 @@ private func nicegramSettingsControllerEntries(presentationData: PresentationDat

entries.append(.easyToggle(toggleIndex, .enableGrayscaleInChat, l("NicegramSettings.EnableGrayscaleInChat"), nicegramSettings.grayscaleInChat))
toggleIndex += 1

entries.append(.onetaptr(l("Premium.OnetapTranslate"), NGSettings.oneTapTr))
entries.append(.enableAppleSpeech2Text(l("NicegramSettings.EnableAppleSpeech2Text"), nicegramSettings.speechToText.enableApple ?? false))
let id = context.account.peerId.id._internalGetInt64Value()
entries.append(
.enableAppleSpeech2Text(l("NicegramSettings.EnableAppleSpeech2Text"),
id,
(nicegramSettings.speechToText.appleRecognizerState[id] ?? false) ?? false
)
)

if let sharingSettings {
entries.append(
Expand Down
22 changes: 15 additions & 7 deletions Nicegram/NGUI/Sources/PremiumController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ import NGData
import NGStrings
import NGUtils

private let getSpeech2TextSettingsUseCase = NicegramSettingsModule.shared.getSpeech2TextSettingsUseCase()

private struct SelectionState: Equatable {
}

Expand Down Expand Up @@ -223,8 +225,8 @@ private enum PremiumControllerEntry: ItemListNodeEntry {
} else {
return false
}
case let .useOpenAI(lhsValue):
if case let .useOpenAI(rhsValue) = rhs, lhsValue == rhsValue {
case let .useOpenAI(_, lhsValue, _):
if case let .useOpenAI(_, rhsValue, _) = rhs, lhsValue == rhsValue {
return true
} else {
return false
Expand Down Expand Up @@ -299,15 +301,19 @@ private enum PremiumControllerEntry: ItemListNodeEntry {
}


private func premiumControllerEntries(presentationData: PresentationData) -> [PremiumControllerEntry] {
private func premiumControllerEntries(
presentationData: PresentationData,
context: AccountContext
) -> [PremiumControllerEntry] {
var entries: [PremiumControllerEntry] = []

let theme = presentationData.theme

entries.append(.rememberFolderOnExit(theme, l("Premium.rememberFolderOnExit"), NGSettings.rememberFolderOnExit))
entries.append(.ignoretr(theme, l("Premium.IgnoreTranslate.Title")))

entries.append(.useOpenAI(theme, l("SpeechToText.UseOpenAi"), NGSettings.useOpenAI))
let useOpenAI = getSpeech2TextSettingsUseCase.useOpenAI(with: context.account.peerId.id._internalGetInt64Value())
entries.append(.useOpenAI(theme, l("SpeechToText.UseOpenAi"), useOpenAI))
entries.append(.recordAllCalls(l("Premium.RecordAllCalls"), NGSettings.recordAllCalls))

#if DEBUG
Expand Down Expand Up @@ -355,7 +361,9 @@ public func premiumController(context: AccountContext) -> ViewController {
case .rememberFilterOnExit:
NGSettings.rememberFolderOnExit = value
case .useOpenAI:
NGSettings.useOpenAI = value
updateNicegramSettings {
$0.speechToText.useOpenAI[context.account.peerId.id._internalGetInt64Value()] = value
}
default:
break
}
Expand Down Expand Up @@ -458,7 +466,7 @@ public func premiumController(context: AccountContext) -> ViewController {
let signal = combineLatest(context.sharedContext.presentationData, statePromise.get())
|> map { presentationData, state -> (ItemListControllerState, (ItemListNodeState, Any)) in

let entries = premiumControllerEntries(presentationData: presentationData)
let entries = premiumControllerEntries(presentationData: presentationData, context: context)

var _ = 0
var scrollToItem: ListViewScrollToItem?
Expand Down
5 changes: 4 additions & 1 deletion Telegram/Telegram-iOS/ar.lproj/NiceLocalizable.strings
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@

/*Common*/
"Nicegram.PrivacyPolicy" = "سياسة الخصوصية";
"Nicegram.EULA" = "اتفاقية ترخيص المستخدم النهائي\n";
"Nicegram.EULA" = "اتفاقية ترخيص المستخدم النهائي
";

/*ChatFilter*/
"ChatFilter.Bots" = "بوتات";
Expand Down Expand Up @@ -234,6 +235,8 @@
"NicegramSpeechToText.Language.Whisper" = "⚠️ حدد لغة رسالتك الصوتية لتحسين الدقة، أو [فعّل Whisper](https://my.nicegram.app/) للتعرف التلقائي بدون جهد";
"NicegramSpeechToText.Language.Choose" = "اختر لغة للتعرف عليها";
"NicegramSpeechToText.SelectLanguage" = "حدد اللغة";
"NicegramSpeechToText.NotAvailable" = "التعرف على الكلام غير متاح حاليًا";
"NicegramSpeechToText.AuthorisationError" = "التعرف على الكلام غير متاح بسبب إعدادات الأذونات. اسمح بالوصول لـ Nicegram في إعدادات الجهاز ← الخصوصية والأمان ← التعرف على الكلام";

/*Stars Purchase*/
"StarsPurchase.GetOnFragment" = "اشترِ في Fragment";
Expand Down
Loading

0 comments on commit 09e82ae

Please sign in to comment.