Prechádzať zdrojové kódy

Moved extensions and functions to appropriate packages

Vadik Sirekanyan 7 rokov pred
rodič
commit
0100734e4d
32 zmenil súbory, kde vykonal 79 pridanie a 70 odobranie
  1. 0 0
      app/src/main/java/com/sirekanyan/knigopis/common/Constants.kt
  2. 0 0
      app/src/main/java/com/sirekanyan/knigopis/common/extensions/Activity.kt
  3. 1 1
      app/src/main/java/com/sirekanyan/knigopis/common/extensions/Collection.kt
  4. 0 0
      app/src/main/java/com/sirekanyan/knigopis/common/extensions/Context.kt
  5. 0 0
      app/src/main/java/com/sirekanyan/knigopis/common/extensions/ImageView.kt
  6. 8 0
      app/src/main/java/com/sirekanyan/knigopis/common/extensions/ProgressBar.kt
  7. 0 1
      app/src/main/java/com/sirekanyan/knigopis/common/extensions/Resources.kt
  8. 0 0
      app/src/main/java/com/sirekanyan/knigopis/common/extensions/View.kt
  9. 0 0
      app/src/main/java/com/sirekanyan/knigopis/common/extensions/ViewGroup.kt
  10. 1 15
      app/src/main/java/com/sirekanyan/knigopis/common/extensions/utils.kt
  11. 1 1
      app/src/main/java/com/sirekanyan/knigopis/common/functions/IntentFactory.kt
  12. 10 0
      app/src/main/java/com/sirekanyan/knigopis/common/functions/LogFactory.kt
  13. 17 0
      app/src/main/java/com/sirekanyan/knigopis/common/functions/StringFactory.kt
  14. 0 8
      app/src/main/java/com/sirekanyan/knigopis/common/view/dialog/DialogItem.kt
  15. 10 0
      app/src/main/java/com/sirekanyan/knigopis/common/view/dialog/DialogItemFactory.kt
  16. 1 1
      app/src/main/java/com/sirekanyan/knigopis/dependency.kt
  17. 4 5
      app/src/main/java/com/sirekanyan/knigopis/feature/MainActivity.kt
  18. 6 2
      app/src/main/java/com/sirekanyan/knigopis/feature/book/BookActivity.kt
  19. 1 1
      app/src/main/java/com/sirekanyan/knigopis/feature/books/BookDataViewHolder.kt
  20. 5 2
      app/src/main/java/com/sirekanyan/knigopis/feature/profile/ProfileActivity.kt
  21. 4 1
      app/src/main/java/com/sirekanyan/knigopis/feature/user/UserActivity.kt
  22. 2 2
      app/src/main/java/com/sirekanyan/knigopis/feature/user/UserInteractor.kt
  23. 2 2
      app/src/main/java/com/sirekanyan/knigopis/model/BookModel.kt
  24. 1 1
      app/src/main/java/com/sirekanyan/knigopis/model/dto/Identity.kt
  25. 1 1
      app/src/main/java/com/sirekanyan/knigopis/model/mappers.kt
  26. 0 2
      app/src/main/java/com/sirekanyan/knigopis/repository/BookRepository.kt
  27. 1 1
      app/src/main/java/com/sirekanyan/knigopis/repository/CommonRepository.kt
  28. 1 1
      app/src/main/java/com/sirekanyan/knigopis/repository/Endpoint.kt
  29. 2 3
      app/src/main/java/com/sirekanyan/knigopis/repository/KAuth.kt
  30. 0 2
      app/src/main/java/com/sirekanyan/knigopis/repository/NoteRepository.kt
  31. 0 2
      app/src/main/java/com/sirekanyan/knigopis/repository/UserRepository.kt
  32. 0 15
      app/src/main/java/com/sirekanyan/knigopis/repository/api/static.kt

+ 0 - 0
app/src/main/java/com/sirekanyan/knigopis/common/constants.kt → app/src/main/java/com/sirekanyan/knigopis/common/Constants.kt


+ 0 - 0
app/src/main/java/com/sirekanyan/knigopis/common/extensions/activity.kt → app/src/main/java/com/sirekanyan/knigopis/common/extensions/Activity.kt


+ 1 - 1
app/src/main/java/com/sirekanyan/knigopis/common/Collection.kt → app/src/main/java/com/sirekanyan/knigopis/common/extensions/Collection.kt

@@ -1,4 +1,4 @@
-package com.sirekanyan.knigopis.common
+package com.sirekanyan.knigopis.common.extensions
 
 import java.util.*
 

+ 0 - 0
app/src/main/java/com/sirekanyan/knigopis/common/extensions/context.kt → app/src/main/java/com/sirekanyan/knigopis/common/extensions/Context.kt


+ 0 - 0
app/src/main/java/com/sirekanyan/knigopis/common/extensions/image_view.kt → app/src/main/java/com/sirekanyan/knigopis/common/extensions/ImageView.kt


+ 8 - 0
app/src/main/java/com/sirekanyan/knigopis/common/extensions/ProgressBar.kt

@@ -0,0 +1,8 @@
+package com.sirekanyan.knigopis.common.extensions
+
+import android.animation.ObjectAnimator
+import android.widget.ProgressBar
+
+fun ProgressBar.setProgressSmoothly(progress: Int) {
+    ObjectAnimator.ofInt(this, "progress", progress).start()
+}

+ 0 - 1
app/src/main/java/com/sirekanyan/knigopis/common/extensions/resources.kt → app/src/main/java/com/sirekanyan/knigopis/common/extensions/Resources.kt

@@ -2,7 +2,6 @@ package com.sirekanyan.knigopis.common.extensions
 
 import android.content.res.Resources
 import com.sirekanyan.knigopis.R
-import com.sirekanyan.knigopis.common.orDefault
 
 fun Resources.getTitleString(title: String): String {
     return title.orDefault(getString(R.string.common_book_notitle))

+ 0 - 0
app/src/main/java/com/sirekanyan/knigopis/common/extensions/view.kt → app/src/main/java/com/sirekanyan/knigopis/common/extensions/View.kt


+ 0 - 0
app/src/main/java/com/sirekanyan/knigopis/common/extensions/view_group.kt → app/src/main/java/com/sirekanyan/knigopis/common/extensions/ViewGroup.kt


+ 1 - 15
app/src/main/java/com/sirekanyan/knigopis/common/utils.kt → app/src/main/java/com/sirekanyan/knigopis/common/extensions/utils.kt

@@ -1,6 +1,5 @@
-package com.sirekanyan.knigopis.common
+package com.sirekanyan.knigopis.common.extensions
 
-import android.animation.ObjectAnimator
 import android.app.Activity
 import android.net.Uri
 import android.support.annotation.DimenRes
@@ -9,7 +8,6 @@ import android.support.v4.view.animation.FastOutLinearInInterpolator
 import android.support.v4.view.animation.LinearOutSlowInInterpolator
 import android.util.Log
 import android.view.View
-import android.widget.ProgressBar
 import com.sirekanyan.knigopis.App
 import com.sirekanyan.knigopis.BuildConfig.APPLICATION_ID
 import io.reactivex.Completable
@@ -18,18 +16,10 @@ import io.reactivex.Single
 import io.reactivex.android.schedulers.AndroidSchedulers
 import io.reactivex.schedulers.Schedulers
 
-private const val TAG = "Knigopis"
 private val HTTP_SCHEMES = setOf("http", "https")
 
-fun extra(name: String) = "$APPLICATION_ID.extra_$name"
-
 fun Activity.app() = application as App
 
-@Suppress("unused")
-fun logWarn(message: String) = Log.w(TAG, message)
-
-fun logError(message: String, throwable: Throwable?) = Log.e(TAG, message, throwable)
-
 fun <T> Single<T>.io2main(): Single<T> =
     subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
 
@@ -76,10 +66,6 @@ fun View.startCollapseAnimation() {
 
 val View.isVisible get() = visibility == View.VISIBLE
 
-fun ProgressBar.setProgressSmoothly(progress: Int) {
-    ObjectAnimator.ofInt(this, "progress", progress).start()
-}
-
 fun String.toUriOrNull() =
     Uri.parse(this).takeIf(Uri::isValidHttpLink)
 

+ 1 - 1
app/src/main/java/com/sirekanyan/knigopis/common/Context.kt → app/src/main/java/com/sirekanyan/knigopis/common/functions/IntentFactory.kt

@@ -1,4 +1,4 @@
-package com.sirekanyan.knigopis.common
+package com.sirekanyan.knigopis.common.functions
 
 import android.content.Intent
 

+ 10 - 0
app/src/main/java/com/sirekanyan/knigopis/common/functions/LogFactory.kt

@@ -0,0 +1,10 @@
+package com.sirekanyan.knigopis.common.functions
+
+import android.util.Log
+
+private const val TAG = "Knigopis"
+
+@Suppress("unused")
+fun logWarn(message: String) = Log.w(TAG, message)
+
+fun logError(message: String, throwable: Throwable?) = Log.e(TAG, message, throwable)

+ 17 - 0
app/src/main/java/com/sirekanyan/knigopis/common/functions/StringFactory.kt

@@ -0,0 +1,17 @@
+package com.sirekanyan.knigopis.common.functions
+
+import com.sirekanyan.knigopis.BuildConfig
+
+fun extra(name: String) = "${BuildConfig.APPLICATION_ID}.extra_$name"
+
+fun createUserImageUrl(userId: String): String {
+    return "${BuildConfig.STATIC_SERVER}/user/$userId"
+}
+
+fun createBookImageUrl(bookTitle: String): String {
+    val normalizedTitle = bookTitle.toLowerCase()
+        .replace(Regex("\\W+"), "_")
+        .replace(Regex("(^_|_$)"), "")
+        .replace("ё", "е")
+    return "${BuildConfig.STATIC_SERVER}/book/$normalizedTitle"
+}

+ 0 - 8
app/src/main/java/com/sirekanyan/knigopis/common/view/dialog/DialogItem.kt

@@ -1,16 +1,8 @@
 package com.sirekanyan.knigopis.common.view.dialog
 
 import android.support.annotation.DrawableRes
-import com.sirekanyan.knigopis.common.IntegerStringResource
-import com.sirekanyan.knigopis.common.PlainStringResource
 import com.sirekanyan.knigopis.common.StringResource
 
-fun createDialogItem(titleRes: Int, iconRes: Int, onClick: () -> Unit) =
-    DialogItem(IntegerStringResource(titleRes), iconRes, onClick)
-
-fun createDialogItem(title: String, iconRes: Int, onClick: () -> Unit) =
-    DialogItem(PlainStringResource(title), iconRes, onClick)
-
 class DialogItem(
     val title: StringResource,
     @DrawableRes val iconRes: Int,

+ 10 - 0
app/src/main/java/com/sirekanyan/knigopis/common/view/dialog/DialogItemFactory.kt

@@ -0,0 +1,10 @@
+package com.sirekanyan.knigopis.common.view.dialog
+
+import com.sirekanyan.knigopis.common.IntegerStringResource
+import com.sirekanyan.knigopis.common.PlainStringResource
+
+fun createDialogItem(titleRes: Int, iconRes: Int, onClick: () -> Unit) =
+    DialogItem(IntegerStringResource(titleRes), iconRes, onClick)
+
+fun createDialogItem(title: String, iconRes: Int, onClick: () -> Unit) =
+    DialogItem(PlainStringResource(title), iconRes, onClick)

+ 1 - 1
app/src/main/java/com/sirekanyan/knigopis/dependency.kt

@@ -16,7 +16,7 @@ import com.sirekanyan.knigopis.model.BookModel
 import com.sirekanyan.knigopis.model.dto.FinishedBook
 import com.sirekanyan.knigopis.model.dto.PlannedBook
 import com.sirekanyan.knigopis.repository.*
-import com.sirekanyan.knigopis.repository.api.Endpoint
+import com.sirekanyan.knigopis.repository.Endpoint
 import com.sirekanyan.knigopis.repository.cache.CommonCache
 import com.sirekanyan.knigopis.repository.cache.CommonCacheImpl
 import com.sirekanyan.knigopis.repository.cache.HeadedModelDeserializer

+ 4 - 5
app/src/main/java/com/sirekanyan/knigopis/feature/MainActivity.kt

@@ -16,10 +16,10 @@ import android.widget.TextView
 import com.sirekanyan.knigopis.BuildConfig
 import com.sirekanyan.knigopis.R
 import com.sirekanyan.knigopis.Router
-import com.sirekanyan.knigopis.common.*
-import com.sirekanyan.knigopis.common.extensions.getFullTitleString
-import com.sirekanyan.knigopis.common.extensions.startActivityOrNull
-import com.sirekanyan.knigopis.common.extensions.toast
+import com.sirekanyan.knigopis.common.BaseActivity
+import com.sirekanyan.knigopis.common.ResourceProvider
+import com.sirekanyan.knigopis.common.extensions.*
+import com.sirekanyan.knigopis.common.functions.logError
 import com.sirekanyan.knigopis.common.view.dialog.DialogFactory
 import com.sirekanyan.knigopis.common.view.dialog.DialogItem
 import com.sirekanyan.knigopis.common.view.dialog.createDialogItem
@@ -36,7 +36,6 @@ import com.sirekanyan.knigopis.feature.users.UsersAdapter
 import com.sirekanyan.knigopis.model.*
 import com.sirekanyan.knigopis.model.CurrentTab.*
 import com.sirekanyan.knigopis.repository.*
-import com.sirekanyan.knigopis.repository.api.Endpoint
 import com.tbruyelle.rxpermissions2.RxPermissions
 import io.reactivex.Flowable
 import kotlinx.android.synthetic.main.about.view.*

+ 6 - 2
app/src/main/java/com/sirekanyan/knigopis/feature/book/BookActivity.kt

@@ -6,14 +6,18 @@ import android.os.Bundle
 import android.widget.SeekBar
 import android.widget.SeekBar.OnSeekBarChangeListener
 import com.sirekanyan.knigopis.R
-import com.sirekanyan.knigopis.common.*
+import com.sirekanyan.knigopis.common.BaseActivity
+import com.sirekanyan.knigopis.common.MAX_BOOK_PRIORITY
+import com.sirekanyan.knigopis.common.MIN_BOOK_PRIORITY
 import com.sirekanyan.knigopis.common.extensions.*
+import com.sirekanyan.knigopis.common.functions.createBookImageUrl
+import com.sirekanyan.knigopis.common.functions.extra
+import com.sirekanyan.knigopis.common.functions.logError
 import com.sirekanyan.knigopis.model.BookDataModel
 import com.sirekanyan.knigopis.model.dto.FinishedBookToSend
 import com.sirekanyan.knigopis.model.dto.PlannedBookToSend
 import com.sirekanyan.knigopis.repository.BookRepository
 import com.sirekanyan.knigopis.repository.Configuration
-import com.sirekanyan.knigopis.repository.api.createBookImageUrl
 import kotlinx.android.synthetic.main.book_edit.*
 import org.koin.android.ext.android.inject
 import java.util.*

+ 1 - 1
app/src/main/java/com/sirekanyan/knigopis/feature/books/BookDataViewHolder.kt

@@ -3,7 +3,7 @@ package com.sirekanyan.knigopis.feature.books
 import android.view.View
 import com.sirekanyan.knigopis.common.adapter.CommonViewHolder
 import com.sirekanyan.knigopis.common.extensions.*
-import com.sirekanyan.knigopis.common.setProgressSmoothly
+import com.sirekanyan.knigopis.common.extensions.setProgressSmoothly
 import com.sirekanyan.knigopis.model.BookDataModel
 import com.sirekanyan.knigopis.model.BookModel
 import kotlinx.android.extensions.LayoutContainer

+ 5 - 2
app/src/main/java/com/sirekanyan/knigopis/feature/profile/ProfileActivity.kt

@@ -8,11 +8,14 @@ import android.view.MenuItem
 import android.view.animation.AccelerateInterpolator
 import android.view.inputmethod.EditorInfo
 import com.sirekanyan.knigopis.R
-import com.sirekanyan.knigopis.common.*
+import com.sirekanyan.knigopis.common.BaseActivity
+import com.sirekanyan.knigopis.common.MAX_BOOK_PRIORITY
 import com.sirekanyan.knigopis.common.extensions.*
+import com.sirekanyan.knigopis.common.functions.createTextShareIntent
+import com.sirekanyan.knigopis.common.functions.logError
 import com.sirekanyan.knigopis.model.dto.*
+import com.sirekanyan.knigopis.repository.Endpoint
 import com.sirekanyan.knigopis.repository.KAuth
-import com.sirekanyan.knigopis.repository.api.Endpoint
 import kotlinx.android.synthetic.main.profile_activity.*
 import org.koin.android.ext.android.inject
 

+ 4 - 1
app/src/main/java/com/sirekanyan/knigopis/feature/user/UserActivity.kt

@@ -8,8 +8,11 @@ import android.support.v7.widget.LinearLayoutManager
 import android.view.Menu
 import android.view.MenuItem
 import com.sirekanyan.knigopis.R
-import com.sirekanyan.knigopis.common.*
+import com.sirekanyan.knigopis.common.BaseActivity
+import com.sirekanyan.knigopis.common.MAX_BOOK_PRIORITY
 import com.sirekanyan.knigopis.common.extensions.*
+import com.sirekanyan.knigopis.common.functions.extra
+import com.sirekanyan.knigopis.common.functions.logError
 import com.sirekanyan.knigopis.common.view.dialog.DialogFactory
 import com.sirekanyan.knigopis.common.view.dialog.createDialogItem
 import com.sirekanyan.knigopis.common.view.header.HeaderItemDecoration

+ 2 - 2
app/src/main/java/com/sirekanyan/knigopis/feature/user/UserInteractor.kt

@@ -1,12 +1,12 @@
 package com.sirekanyan.knigopis.feature.user
 
 import com.sirekanyan.knigopis.common.ResourceProvider
-import com.sirekanyan.knigopis.common.io2main
+import com.sirekanyan.knigopis.common.extensions.io2main
 import com.sirekanyan.knigopis.model.BookModel
 import com.sirekanyan.knigopis.model.createBookHeaderModel
 import com.sirekanyan.knigopis.model.toBookModel
 import com.sirekanyan.knigopis.repository.KAuth
-import com.sirekanyan.knigopis.repository.api.Endpoint
+import com.sirekanyan.knigopis.repository.Endpoint
 import io.reactivex.Completable
 import io.reactivex.Single
 

+ 2 - 2
app/src/main/java/com/sirekanyan/knigopis/model/BookModel.kt

@@ -3,8 +3,8 @@ package com.sirekanyan.knigopis.model
 import com.sirekanyan.knigopis.R
 import com.sirekanyan.knigopis.common.ResourceProvider
 import com.sirekanyan.knigopis.common.adapter.HeadedModel
-import com.sirekanyan.knigopis.common.orDefault
-import com.sirekanyan.knigopis.repository.api.createBookImageUrl
+import com.sirekanyan.knigopis.common.extensions.orDefault
+import com.sirekanyan.knigopis.common.functions.createBookImageUrl
 
 fun createBookHeaderModel(resources: ResourceProvider, title: String, count: Int): BookHeaderModel {
     val titleOrDefault = title.orDefault(resources.getString(R.string.books_header_done_other))

+ 1 - 1
app/src/main/java/com/sirekanyan/knigopis/model/dto/Identity.kt

@@ -1,6 +1,6 @@
 package com.sirekanyan.knigopis.model.dto
 
-import com.sirekanyan.knigopis.repository.api.createUserImageUrl
+import com.sirekanyan.knigopis.common.functions.createUserImageUrl
 
 class Identity(
     val id: String,

+ 1 - 1
app/src/main/java/com/sirekanyan/knigopis/model/mappers.kt

@@ -4,11 +4,11 @@ import android.text.SpannableString
 import android.text.format.DateUtils
 import android.text.style.SuperscriptSpan
 import com.sirekanyan.knigopis.common.MAX_BOOK_PRIORITY
+import com.sirekanyan.knigopis.common.functions.createBookImageUrl
 import com.sirekanyan.knigopis.model.dto.FinishedBook
 import com.sirekanyan.knigopis.model.dto.Note
 import com.sirekanyan.knigopis.model.dto.PlannedBook
 import com.sirekanyan.knigopis.model.dto.Subscription
-import com.sirekanyan.knigopis.repository.api.createBookImageUrl
 
 fun PlannedBook.toBookModel(group: BookGroupModel) =
     BookDataModel(

+ 0 - 2
app/src/main/java/com/sirekanyan/knigopis/repository/BookRepository.kt

@@ -6,11 +6,9 @@ import com.sirekanyan.knigopis.model.dto.FinishedBook
 import com.sirekanyan.knigopis.model.dto.FinishedBookToSend
 import com.sirekanyan.knigopis.model.dto.PlannedBook
 import com.sirekanyan.knigopis.model.dto.PlannedBookToSend
-import com.sirekanyan.knigopis.repository.api.Endpoint
 import com.sirekanyan.knigopis.repository.cache.CacheKey
 import com.sirekanyan.knigopis.repository.cache.CommonCache
 import com.sirekanyan.knigopis.repository.cache.genericType
-import com.sirekanyan.knigopis.repository.common.CommonRepository
 import io.reactivex.Completable
 import io.reactivex.Flowable
 import io.reactivex.Maybe

+ 1 - 1
app/src/main/java/com/sirekanyan/knigopis/repository/common/CommonRepository.kt → app/src/main/java/com/sirekanyan/knigopis/repository/CommonRepository.kt

@@ -1,4 +1,4 @@
-package com.sirekanyan.knigopis.repository.common
+package com.sirekanyan.knigopis.repository
 
 import com.sirekanyan.knigopis.common.NetworkChecker
 import io.reactivex.Completable

+ 1 - 1
app/src/main/java/com/sirekanyan/knigopis/repository/api/Endpoint.kt → app/src/main/java/com/sirekanyan/knigopis/repository/Endpoint.kt

@@ -1,4 +1,4 @@
-package com.sirekanyan.knigopis.repository.api
+package com.sirekanyan.knigopis.repository
 
 import com.sirekanyan.knigopis.model.dto.*
 import io.reactivex.Completable

+ 2 - 3
app/src/main/java/com/sirekanyan/knigopis/repository/KAuth.kt

@@ -2,9 +2,8 @@ package com.sirekanyan.knigopis.repository
 
 import android.content.Context
 import android.content.Intent
-import com.sirekanyan.knigopis.common.io2main
-import com.sirekanyan.knigopis.common.logError
-import com.sirekanyan.knigopis.repository.api.Endpoint
+import com.sirekanyan.knigopis.common.extensions.io2main
+import com.sirekanyan.knigopis.common.functions.logError
 import ru.ulogin.sdk.UloginAuthActivity
 import java.util.*
 

+ 0 - 2
app/src/main/java/com/sirekanyan/knigopis/repository/NoteRepository.kt

@@ -3,11 +3,9 @@ package com.sirekanyan.knigopis.repository
 import com.sirekanyan.knigopis.common.NetworkChecker
 import com.sirekanyan.knigopis.model.NoteModel
 import com.sirekanyan.knigopis.model.toNoteModel
-import com.sirekanyan.knigopis.repository.api.Endpoint
 import com.sirekanyan.knigopis.repository.cache.CacheKey
 import com.sirekanyan.knigopis.repository.cache.CommonCache
 import com.sirekanyan.knigopis.repository.cache.genericType
-import com.sirekanyan.knigopis.repository.common.CommonRepository
 import io.reactivex.Completable
 import io.reactivex.Flowable
 import io.reactivex.Maybe

+ 0 - 2
app/src/main/java/com/sirekanyan/knigopis/repository/UserRepository.kt

@@ -3,11 +3,9 @@ package com.sirekanyan.knigopis.repository
 import com.sirekanyan.knigopis.common.NetworkChecker
 import com.sirekanyan.knigopis.model.UserModel
 import com.sirekanyan.knigopis.model.toUserModel
-import com.sirekanyan.knigopis.repository.api.Endpoint
 import com.sirekanyan.knigopis.repository.cache.CacheKey
 import com.sirekanyan.knigopis.repository.cache.CommonCache
 import com.sirekanyan.knigopis.repository.cache.genericType
-import com.sirekanyan.knigopis.repository.common.CommonRepository
 import io.reactivex.Completable
 import io.reactivex.Flowable
 import io.reactivex.Maybe

+ 0 - 15
app/src/main/java/com/sirekanyan/knigopis/repository/api/static.kt

@@ -1,15 +0,0 @@
-package com.sirekanyan.knigopis.repository.api
-
-import com.sirekanyan.knigopis.BuildConfig.STATIC_SERVER
-
-fun createUserImageUrl(userId: String): String {
-    return "$STATIC_SERVER/user/$userId"
-}
-
-fun createBookImageUrl(bookTitle: String): String {
-    val normalizedTitle = bookTitle.toLowerCase()
-        .replace(Regex("\\W+"), "_")
-        .replace(Regex("(^_|_$)"), "")
-        .replace("ё", "е")
-    return "$STATIC_SERVER/book/$normalizedTitle"
-}