Skip to content

Connect to localhost server dialog #213

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 6 commits into from
Jul 28, 2024
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,7 @@ User interface of the app is translated for languages listed in this table:
| Ukrainian | 0.1.0 | `Translated` |
| Turkish | 0.4.1 | `Translated` |
| Russian | 0.5.5 | `Translated` |
| Chinese (Simplified) | 0.6.2 | `Translated` |

Any contributions to the translations are welcome.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,6 @@ internal class UrlValidatorImpl : UrlValidator {
isValid = false,
validationError = UrlValidator.Error.BadScheme,
)
input.contains(LOCALHOST_IPV4) -> ValidationResult(
isValid = false,
validationError = UrlValidator.Error.Localhost,
)
!URLUtil.isValidUrl(input) -> ValidationResult(
isValid = false,
validationError = UrlValidator.Error.Invalid,
Expand All @@ -31,6 +27,10 @@ internal class UrlValidatorImpl : UrlValidator {
isValid = false,
validationError = UrlValidator.Error.Invalid,
)
input.contains(LOCALHOST_IPV4) -> ValidationResult(
isValid = false,
validationError = UrlValidator.Error.Localhost,
)
else -> ValidationResult(isValid = true)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,7 @@ fun ModalRenderer(
onDismissRequest = dismiss,
)

Modal.ExportInProgress -> ProgressDialog(
Modal.ExportInProgress -> ProgressDialog(
titleResId = R.string.exporting_progress_title,
subTitleResId = R.string.exporting_progress_sub_title,
canDismiss = false,
Expand Down Expand Up @@ -242,5 +242,14 @@ fun ModalRenderer(
onDismissRequest = dismiss,
onResult = { processIntent(ImageToImageIntent.UpdateImage(it)) }
)

Modal.ConnectLocalHost -> DecisionInteractiveDialog(
title = R.string.interaction_warning_title.asUiText(),
text = R.string.interaction_warning_localhost_sub_title.asUiText(),
confirmActionResId = R.string.yes_i_did,
dismissActionResId = R.string.cancel,
onConfirmAction = { processIntent(ServerSetupIntent.ConnectToLocalHost) },
onDismissRequest = dismiss,
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ sealed interface Modal {

data object ExportInProgress : Modal

data object ConnectLocalHost : Modal


@Immutable
data class SelectSdModel(val models: List<String>, val selected: String) : Modal
Expand Down Expand Up @@ -64,13 +66,13 @@ sealed interface Modal {
sealed interface Image : Modal {

@Immutable
data class Single(val result: AiGenerationResult, val autoSaveEnabled: Boolean): Image
data class Single(val result: AiGenerationResult, val autoSaveEnabled: Boolean) : Image

@Immutable
data class Batch(val results: List<AiGenerationResult>, val autoSaveEnabled: Boolean): Image
data class Batch(val results: List<AiGenerationResult>, val autoSaveEnabled: Boolean) : Image

@Immutable
data class Crop(val bitmap: Bitmap): Image
data class Crop(val bitmap: Bitmap) : Image

companion object {
fun create(list: List<AiGenerationResult>, autoSaveEnabled: Boolean): Image =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,8 @@ sealed interface ServerSetupIntent : MviIntent {

data object LaunchManageStoragePermission : ServerSetupIntent

data object ConnectToLocalHost : ServerSetupIntent

sealed class LaunchUrl : ServerSetupIntent, KoinComponent {

protected val linksProvider: LinksProvider by inject()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -200,6 +200,26 @@ class ServerSetupViewModel(
is ServerSetupIntent.UpdateStabilityAiApiKey -> updateState {
it.copy(stabilityAiApiKey = intent.key)
}

ServerSetupIntent.ConnectToLocalHost -> {
connectToLocalHostWithSSH()
}
}

private fun connectToLocalHostWithSSH() {
emitEffect(ServerSetupEffect.HideKeyboard)
!connectToAutomaticInstance()
.doOnSubscribe { setScreenModal(Modal.Communicating(canCancel = false)) }
.subscribeOnMainThread(schedulersProvider)
.subscribeBy(::errorLog) { result ->
result.fold(
onSuccess = { onSetupComplete() },
onFailure = { t ->
val message = t.localizedMessage ?: "Bad key"
setScreenModal(Modal.Error(message.asUiText()))
}
)
}
}

private fun connectToServer() {
Expand Down Expand Up @@ -243,6 +263,9 @@ class ServerSetupViewModel(
)
isValid = isValid && loginValidation.isValid && passwordValidation.isValid
}
if (serverUrlValidation.validationError is UrlValidator.Error.Localhost) {
newState = it.copy(screenModal = Modal.ConnectLocalHost)
}
newState
}
isValid
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,6 @@ fun ValidationResult<UrlValidator.Error>.mapToUi(): UiText? {
UrlValidator.Error.BadScheme -> R.string.error_invalid_scheme
UrlValidator.Error.Empty -> R.string.error_empty_url
UrlValidator.Error.Invalid -> R.string.error_invalid_url
UrlValidator.Error.Localhost -> R.string.error_localhost_url
}.asUiText()
UrlValidator.Error.Localhost -> null
}?.asUiText()
}
4 changes: 4 additions & 0 deletions presentation/src/main/res/values-ru/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
<string name="locale">ru</string>
<string name="ok">OK</string>
<string name="yes">Да</string>
<string name="yes_i_got_it">Да, я понял</string>
<string name="no">Нет</string>
<string name="cancel">Отмена</string>
<string name="retry">Повторить</string>
Expand Down Expand Up @@ -208,6 +209,9 @@
<string name="interaction_export_sub_title">Эта функция экспортирует все изображения галереи в архив *.zip. Этот процесс может длиться долго, если у вас много изображений. Хотите продолжить?</string>
<string name="interaction_cache_sub_title">Это приведет к сбросу настроек программы и удалению всех созданных изображений. Вы хотите продолжить?</string>

<string name="interaction_warning_title">Предупреждение</string>
<string name="interaction_warning_localhost_sub_title">Если вы хотите подключиться к вашему локальному серверу (127.0.0.1), убедитесь, что у вас включено SSH-туннелирование в целях безопасности!</string>

<string name="interaction_delete_generation_title">Удалить изображение</string>
<string name="interaction_delete_generation_sub_title">Вы уверены, что хотите окончательно удалить это изображение?</string>

Expand Down
8 changes: 6 additions & 2 deletions presentation/src/main/res/values-tr/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
<string name="locale">tr</string>
<string name="ok">Tamam</string>
<string name="yes">Evet</string>
<string name="yes_i_got_it">Evet, anladım</string>
<string name="no">Hayır</string>
<string name="cancel">İptal</string>
<string name="retry">yeniden dene</string>
Expand Down Expand Up @@ -95,7 +96,7 @@
<string name="hint_server_setup_title">Lütfen Stable Diffusion WebUI(AUTOMATIC1111) URL adresinizi yazın.</string>
<string name="hint_valid_urls">Bazı sunucu örnekleri:\n• http://192.168.0.2:7860\n• http://alanadiniz.com:7860\n• https://alanadiniz.com</string>
<string name="hint_demo_mode">This mode allows you to test the application behavior, even if you don\'t have Stable Diffusion WebUI server.\n\nIn demo mode app ignores user prompt, does not use AI server, and returns some mock images.</string>
<string name="hint_args_warning" tools:ignore="TypographyDashes">Before connecting ensure that:\n• you are running AUTOMATIC1111 WebUI with flags --api --listen\n• your firewall is not blocking 7860 port\n• phone is on the same WiFi with your PC</string>
<string name="hint_args_warning" tools:ignore="TypographyDashes,Typos">Before connecting ensure that:\n• you are running AUTOMATIC1111 WebUI with flags --api --listen\n• your firewall is not blocking 7860 port\n• phone is on the same WiFi with your PC</string>

<string name="hint_server_horde_title">Horde AI bulutuna bağlanın</string>
<string name="hint_server_horde_sub_title">Horde AI, Görüntü oluşturma çalışanları ve metin oluşturma çalışanlarından oluşan kitle kaynaklı dağıtılmış bir kümedir.</string>
Expand Down Expand Up @@ -128,7 +129,7 @@
<string name="home_tab_settings">Ayarlar</string>

<string name="gallery_tab_image">Resim</string>
<string name="gallery_tab_original">Orjinal</string>
<string name="gallery_tab_original">Orijinal</string>
<string name="gallery_tab_info">Bilgi</string>

<string name="title_text_to_image">Yazıdan Resime</string>
Expand Down Expand Up @@ -208,6 +209,9 @@
<string name="interaction_export_sub_title">Bu işlem bütün galerideki resimleri tek bir .zip arşivi dosyası olarak dışa aktaracaktır. Galerinizin boyutuna göre bu işlem uzun bir zaman alabailir. Devam etmek istiyor musunuz?</string>
<string name="interaction_cache_sub_title">Bu işlem bütün uygulama ayarlarını ve oluşturulan resimleri silecektir. Devam etmek istiyor musunuz?</string>

<string name="interaction_warning_title">Uyarı</string>
<string name="interaction_warning_localhost_sub_title">Eğer localhost (127.0.0.1) sunucunuza bağlanmak istiyorsanız, lütfen güvenlik için ssh tünellemesinin etkinleştirildiğinden emin olun!</string>

<string name="interaction_delete_generation_title">Resmi sil</string>
<string name="interaction_delete_generation_sub_title">Kalıcı olarak bu resmi silmek istediğinize emin misiniz?</string>

Expand Down
4 changes: 4 additions & 0 deletions presentation/src/main/res/values-uk/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
<string name="locale">uk</string>
<string name="ok">OK</string>
<string name="yes">Так</string>
<string name="yes_i_got_it">Так, я зрозумів</string>
<string name="no">Ні</string>
<string name="cancel">Скасувати</string>
<string name="retry">Повторити</string>
Expand Down Expand Up @@ -208,6 +209,9 @@
<string name="interaction_export_sub_title">Ця функція експортує всі зображення галереї у архів *.zip. Цей процес може тривати довго, якщо у вас багато зображень. Бажаєте продовжити?</string>
<string name="interaction_cache_sub_title">Це призведе до скидання налаштувань програми та видалення всіх створених зображень. Ви бажаєте продовжити?</string>

<string name="interaction_warning_title">Попередження</string>
<string name="interaction_warning_localhost_sub_title">Якщо ви хочете підключитися до свого сервера localhost (127.0.0.1), будь ласка, переконайтеся, що у вас увімкнено тунелювання ssh з міркувань безпеки!</string>

<string name="interaction_delete_generation_title">Видалити зображення</string>
<string name="interaction_delete_generation_sub_title">Ви впевнені, що хочете остаточно видалити це зображення?</string>

Expand Down
5 changes: 5 additions & 0 deletions presentation/src/main/res/values-zh/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
<string name="locale">zh</string>
<string name="ok">确定</string>
<string name="yes">是</string>
<string name="yes_i_got_it">是的,我知道了</string>
<string name="no">否</string>
<string name="cancel">取消</string>
<string name="retry">重试</string>
Expand Down Expand Up @@ -255,6 +256,10 @@
<string name="interaction_export_sub_title">这将把所有图库图像导出为*.zip压缩包。此过程可能很长,如果您有很多图片,您想继续吗?</string>
<string name="interaction_cache_sub_title">这将重置应用设置并删除所有生成的图像。您想继续吗?</string>

<!-- 警告互动 -->
<string name="interaction_warning_title">警告性的</string>
<string name="interaction_warning_localhost_sub_title">如果您想连接到本地主机(127.0.0.1)服务器,请确保您已启用 ssh 隧道以确保安全!</string>

<!-- 删除图像提示 -->
<string name="interaction_delete_generation_title">删除图像</string>
<string name="interaction_delete_generation_sub_title">您确定要永久删除此图像吗?</string>
Expand Down
6 changes: 5 additions & 1 deletion presentation/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
<string name="locale">en</string>
<string name="ok">OK</string>
<string name="yes">Yes</string>
<string name="yes_i_got_it">Yes, I got it</string>
<string name="no">No</string>
<string name="cancel">Cancel</string>
<string name="retry">Retry</string>
Expand Down Expand Up @@ -111,7 +112,7 @@
<string name="hint_server_setup_title">Provide your Stable Diffusion WebUI URL</string>
<string name="hint_valid_urls">Here are the examples of server URLs:\n• http://192.168.0.2:7860\n• http://yourdomain.com:7860\n• https://yourdomain.com</string>
<string name="hint_demo_mode">This mode allows you to test the application behavior, even if you don\'t have Stable Diffusion WebUI server.\n\nIn demo mode app ignores user prompt, does not use AI server, and returns some mock images.</string>
<string name="hint_args_warning" tools:ignore="TypographyDashes">Before connecting ensure that:\n• you are running AUTOMATIC1111 WebUI with flags --api --listen\n• your firewall is not blocking 7860 port\n• phone is on the same WiFi with your PC</string>
<string name="hint_args_warning" tools:ignore="TypographyDashes,Typos">Before connecting ensure that:\n• you are running AUTOMATIC1111 WebUI with flags --api --listen\n• your firewall is not blocking 7860 port\n• phone is on the same WiFi with your PC</string>

<string name="hint_server_horde_title">Connect to Horde AI cloud</string>
<string name="hint_server_horde_sub_title">Horde AI is a crowdsourced distributed cluster of Image generation workers and text generation workers.</string>
Expand Down Expand Up @@ -227,6 +228,9 @@
<string name="interaction_export_sub_title">This will export all the gallery images as *.zip archive. This process may be long if you have many images, would you like to proceed?</string>
<string name="interaction_cache_sub_title">This will reset app settings and delete all the generated images. Do you want to proceed?</string>

<string name="interaction_warning_title">Warning</string>
<string name="interaction_warning_localhost_sub_title">If you want to connect to your localhost (127.0.0.1) server, please make sure that you have ssh tunneling enabled for security!</string>

<string name="interaction_delete_generation_title">Delete image</string>
<string name="interaction_delete_generation_sub_title">Are you sure you want to permanently delete this image?</string>

Expand Down