log.traceとlog.eをまとめる。log.eの説明文を省略できないようにする。
This commit is contained in:
parent
d58719ceb5
commit
fde7582f04
|
@ -130,3 +130,6 @@ _Emoji/*.txt
|
|||
detektReport/
|
||||
|
||||
.idea/deploymentTargetDropDown.xml
|
||||
|
||||
|
||||
app/detekt-*.xml
|
||||
|
|
|
@ -84,7 +84,7 @@ class ActAbout : AppCompatActivity() {
|
|||
?.text = getString(R.string.version_is, pInfo.versionName)
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex, "can't get app version.")
|
||||
log.e(ex, "can't get app version.")
|
||||
}
|
||||
|
||||
fun setButton(btnId: Int, caption: String, onClick: () -> Unit) {
|
||||
|
|
|
@ -1296,7 +1296,7 @@ class ActAccountSetting : AppCompatActivity(),
|
|||
val intent = intentGetContent(false, getString(R.string.pick_image), arrayOf("image/*"))
|
||||
arAddAttachment.launch(intent)
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex, "performAttachment failed.")
|
||||
log.e(ex, "performAttachment failed.")
|
||||
showToast(ex, "performAttachment failed.")
|
||||
}
|
||||
}
|
||||
|
@ -1318,7 +1318,7 @@ class ActAccountSetting : AppCompatActivity(),
|
|||
state.propName = propName
|
||||
arCameraImage.launch(intent)
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex, "opening camera app failed.")
|
||||
log.e(ex, "opening camera app failed.")
|
||||
showToast(ex, "opening camera app failed.")
|
||||
}
|
||||
}
|
||||
|
@ -1386,7 +1386,7 @@ class ActAccountSetting : AppCompatActivity(),
|
|||
}
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex, "Resizing image failed.")
|
||||
log.e(ex, "Resizing image failed.")
|
||||
showToast(ex, "Resizing image failed.")
|
||||
}
|
||||
|
||||
|
|
|
@ -908,7 +908,7 @@ class ActAppSetting : AppCompatActivity(), ColorPickerDialogListener, View.OnCli
|
|||
}
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "parseFontSize failed.")
|
||||
}
|
||||
|
||||
return Float.NaN
|
||||
|
@ -945,7 +945,7 @@ class ActAppSetting : AppCompatActivity(), ColorPickerDialogListener, View.OnCli
|
|||
return
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "showTimelineFont failed.")
|
||||
}
|
||||
|
||||
// fallback
|
||||
|
@ -994,7 +994,7 @@ class ActAppSetting : AppCompatActivity(), ColorPickerDialogListener, View.OnCli
|
|||
|
||||
return file
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "saveTimelineFont failed.")
|
||||
showToast(ex, "saveTimelineFont failed.")
|
||||
return null
|
||||
}
|
||||
|
@ -1170,7 +1170,7 @@ class ActAppSetting : AppCompatActivity(), ColorPickerDialogListener, View.OnCli
|
|||
.show()
|
||||
if (!rv) showToast(true, "share target app is not installed.")
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "openCustomShareChooser failed.")
|
||||
showToast(ex, "openCustomShareChooser failed.")
|
||||
}
|
||||
}
|
||||
|
@ -1206,7 +1206,7 @@ class ActAppSetting : AppCompatActivity(), ColorPickerDialogListener, View.OnCli
|
|||
.show()
|
||||
if (!rv) showToast(true, "share target app is not installed.")
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "openCustomShareChooser failed.")
|
||||
showToast(ex, "openCustomShareChooser failed.")
|
||||
}
|
||||
}
|
||||
|
|
|
@ -129,7 +129,7 @@ class ActCallback : AppCompatActivity() {
|
|||
copyExtraTexts(dst, src)
|
||||
return dst
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "remake failed. src=$src")
|
||||
}
|
||||
}
|
||||
} else if (Intent.ACTION_SEND == action) {
|
||||
|
@ -144,7 +144,7 @@ class ActCallback : AppCompatActivity() {
|
|||
copyExtraTexts(dst, src)
|
||||
return dst
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "remake failed. src=$src")
|
||||
}
|
||||
} else if (Intent.ACTION_SEND_MULTIPLE == action) {
|
||||
val listUri = src.getStreamUriListExtra()
|
||||
|
@ -156,7 +156,7 @@ class ActCallback : AppCompatActivity() {
|
|||
val uri = saveToCache(uriOriginal)
|
||||
listDst.add(uri)
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "remake failed. src=$src")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -182,7 +182,7 @@ class ActCallback : AppCompatActivity() {
|
|||
}
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "remake failed. src=$src")
|
||||
}
|
||||
|
||||
return null
|
||||
|
@ -230,11 +230,11 @@ class ActCallback : AppCompatActivity() {
|
|||
f.delete()
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "sweepOldCache: delete item failed.")
|
||||
}
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "sweepOldCache failed.")
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -270,7 +270,7 @@ class ActColumnCustomize : AppCompatActivity(), View.OnClickListener, ColorPicke
|
|||
resultUri = fileUri.toString()
|
||||
TootApiResult()
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "can't update background image.")
|
||||
TootApiResult(ex.withCaption("can't update background image."))
|
||||
}
|
||||
}?.let { result ->
|
||||
|
@ -426,7 +426,7 @@ class ActColumnCustomize : AppCompatActivity(), View.OnClickListener, ColorPicke
|
|||
lastImageBitmap?.recycle()
|
||||
lastImageBitmap = null
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "closeBitmaps failed.")
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -453,7 +453,7 @@ class ActColumnCustomize : AppCompatActivity(), View.OnClickListener, ColorPicke
|
|||
lastImageUri = url
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "loadImage failed.")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -145,11 +145,11 @@ class ActColumnList : AppCompatActivity() {
|
|||
item.setOldSelection(true)
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "restoreData: item decode failed.")
|
||||
}
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "restoreData failed.")
|
||||
}
|
||||
|
||||
listAdapter.itemList = tmpList
|
||||
|
|
|
@ -3,12 +3,17 @@ package jp.juggler.subwaytooter
|
|||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.*
|
||||
import android.widget.BaseAdapter
|
||||
import android.widget.ImageView
|
||||
import android.widget.ListView
|
||||
import android.widget.TextView
|
||||
import jp.juggler.subwaytooter.global.appDispatchers
|
||||
import jp.juggler.subwaytooter.util.AsyncActivity
|
||||
import jp.juggler.util.LogCategory
|
||||
import jp.juggler.util.asciiPattern
|
||||
import kotlinx.coroutines.*
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
|
||||
class ActDrawableList : AsyncActivity(), CoroutineScope {
|
||||
|
||||
|
@ -60,7 +65,7 @@ class ActDrawableList : AsyncActivity(), CoroutineScope {
|
|||
drawableList.addAll(list)
|
||||
adapter.notifyDataSetChanged()
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "load failed.")
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -14,8 +14,8 @@ import com.woxthebox.draglistview.swipe.ListSwipeItem
|
|||
import jp.juggler.subwaytooter.api.entity.Acct
|
||||
import jp.juggler.subwaytooter.table.FavMute
|
||||
import jp.juggler.util.LogCategory
|
||||
import jp.juggler.util.backPressed
|
||||
import jp.juggler.util.attrColor
|
||||
import jp.juggler.util.backPressed
|
||||
|
||||
class ActFavMute : AppCompatActivity() {
|
||||
|
||||
|
@ -116,7 +116,7 @@ class ActFavMute : AppCompatActivity() {
|
|||
}
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "loadData failed.")
|
||||
}
|
||||
|
||||
listAdapter.itemList = tmpList
|
||||
|
|
|
@ -122,7 +122,7 @@ class ActHighlightWordList : AppCompatActivity(), View.OnClickListener {
|
|||
}
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "loadData failed.")
|
||||
}
|
||||
|
||||
listAdapter.itemList = tmpList
|
||||
|
@ -268,7 +268,7 @@ class ActHighlightWordList : AppCompatActivity(), View.OnClickListener {
|
|||
try {
|
||||
r.stop()
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "stopLastRingtone failed.")
|
||||
} finally {
|
||||
lastRingtone = null
|
||||
}
|
||||
|
@ -292,7 +292,7 @@ class ActHighlightWordList : AppCompatActivity(), View.OnClickListener {
|
|||
}
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "tryRingTone failed.")
|
||||
}
|
||||
|
||||
return false
|
||||
|
|
|
@ -158,7 +158,7 @@ class ActLanguageFilter : AppCompatActivity(), View.OnClickListener {
|
|||
return
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "restore failed.")
|
||||
}
|
||||
}
|
||||
load(column.languageFilter)
|
||||
|
|
|
@ -447,7 +447,7 @@ class ActMain : AppCompatActivity(),
|
|||
try {
|
||||
SavedAccount.sweepBuggieData()
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex,"sweepBuggieData failed.")
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -537,7 +537,7 @@ class ActMediaViewer : AppCompatActivity(), View.OnClickListener {
|
|||
Bitmap.createBitmap(dstSizeInt.x, dstSizeInt.y, Bitmap.Config.ARGB_8888)
|
||||
?: return Pair(bitmap1, "createBitmap returns null")
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "createBitmap failed.")
|
||||
return Pair(bitmap1, ex.withCaption("createBitmap failed."))
|
||||
}
|
||||
|
||||
|
@ -548,8 +548,8 @@ class ActMediaViewer : AppCompatActivity(), View.OnClickListener {
|
|||
Paint().apply { isFilterBitmap = true }
|
||||
)
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
bitmap2.recycle()
|
||||
log.e(ex, "drawBitmap failed.")
|
||||
return Pair(bitmap1, ex.withCaption("drawBitmap failed."))
|
||||
}
|
||||
|
||||
|
@ -698,30 +698,13 @@ class ActMediaViewer : AppCompatActivity(), View.OnClickListener {
|
|||
download_history_list.addLast(DownloadHistory(now, url))
|
||||
}
|
||||
|
||||
var fileName: String? = null
|
||||
|
||||
try {
|
||||
val pathSegments = url.toUri().pathSegments
|
||||
if (pathSegments != null) {
|
||||
val size = pathSegments.size
|
||||
for (i in size - 1 downTo 0) {
|
||||
val s = pathSegments[i]
|
||||
if (s?.isNotEmpty() == true) {
|
||||
fileName = s
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
}
|
||||
|
||||
if (fileName == null) {
|
||||
fileName = url
|
||||
.replaceFirst("https?://".asciiPattern(), "")
|
||||
.replaceAll("[^.\\w\\d]+".asciiPattern(), "-")
|
||||
}
|
||||
if (fileName.length >= 20) fileName = fileName.substring(fileName.length - 20)
|
||||
val fileName = (
|
||||
url.mayUri()?.pathSegments?.findLast { !it.isNullOrBlank() }
|
||||
?: url
|
||||
.replaceFirst("https?://".asciiPattern(), "")
|
||||
.replaceAll("[^.\\w\\d]+".asciiPattern(), "-")
|
||||
)
|
||||
.take(20)
|
||||
|
||||
val request = DownloadManager.Request(url.toUri())
|
||||
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, fileName)
|
||||
|
|
|
@ -13,8 +13,8 @@ import com.woxthebox.draglistview.swipe.ListSwipeHelper
|
|||
import com.woxthebox.draglistview.swipe.ListSwipeItem
|
||||
import jp.juggler.subwaytooter.table.MutedApp
|
||||
import jp.juggler.util.LogCategory
|
||||
import jp.juggler.util.backPressed
|
||||
import jp.juggler.util.attrColor
|
||||
import jp.juggler.util.backPressed
|
||||
|
||||
class ActMutedApp : AppCompatActivity() {
|
||||
|
||||
|
@ -116,7 +116,7 @@ class ActMutedApp : AppCompatActivity() {
|
|||
}
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "loadData failed.")
|
||||
}
|
||||
|
||||
listAdapter.itemList = tmpList
|
||||
|
|
|
@ -13,8 +13,8 @@ import com.woxthebox.draglistview.swipe.ListSwipeHelper
|
|||
import com.woxthebox.draglistview.swipe.ListSwipeItem
|
||||
import jp.juggler.subwaytooter.table.UserRelation
|
||||
import jp.juggler.util.LogCategory
|
||||
import jp.juggler.util.backPressed
|
||||
import jp.juggler.util.attrColor
|
||||
import jp.juggler.util.backPressed
|
||||
|
||||
class ActMutedPseudoAccount : AppCompatActivity() {
|
||||
|
||||
|
@ -115,7 +115,7 @@ class ActMutedPseudoAccount : AppCompatActivity() {
|
|||
}
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "loadData failed.")
|
||||
}
|
||||
|
||||
listAdapter.itemList = tmpList
|
||||
|
|
|
@ -13,8 +13,8 @@ import com.woxthebox.draglistview.swipe.ListSwipeHelper
|
|||
import com.woxthebox.draglistview.swipe.ListSwipeItem
|
||||
import jp.juggler.subwaytooter.table.MutedWord
|
||||
import jp.juggler.util.LogCategory
|
||||
import jp.juggler.util.backPressed
|
||||
import jp.juggler.util.attrColor
|
||||
import jp.juggler.util.backPressed
|
||||
|
||||
class ActMutedWord : AppCompatActivity() {
|
||||
|
||||
|
@ -115,7 +115,7 @@ class ActMutedWord : AppCompatActivity() {
|
|||
}
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "loadData failed.")
|
||||
}
|
||||
|
||||
listAdapter.itemList = tmpList
|
||||
|
|
|
@ -20,10 +20,10 @@ class ActOSSLicense : AppCompatActivity() {
|
|||
App1.initEdgeToEdge(this)
|
||||
|
||||
try {
|
||||
val tv = findViewById<TextView>(R.id.tvText)
|
||||
tv.text = loadRawResource(R.raw.oss_license).decodeUTF8()
|
||||
findViewById<TextView>(R.id.tvText)
|
||||
?.text = loadRawResource(R.raw.oss_license).decodeUTF8()
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "can't show license text.")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -189,7 +189,7 @@ class ActPost : AppCompatActivity(),
|
|||
} catch (ex: Throwable) {
|
||||
when (ex) {
|
||||
is CancellationException, is ClosedReceiveChannelException -> Unit
|
||||
else -> log.trace(ex)
|
||||
else -> log.e(ex, "can't show media progress.")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -206,7 +206,7 @@ class ActPost : AppCompatActivity(),
|
|||
try {
|
||||
progressChannel.close()
|
||||
} catch (ex: Throwable) {
|
||||
log.e(ex)
|
||||
log.e(ex, "progressChannel close failed.")
|
||||
}
|
||||
completionHelper.onDestroy()
|
||||
attachmentUploader.onActivityDestroy()
|
||||
|
@ -243,7 +243,6 @@ class ActPost : AppCompatActivity(),
|
|||
if (!isPostComplete) saveDraft()
|
||||
}
|
||||
|
||||
|
||||
override fun onClick(v: View) {
|
||||
refActPost = WeakReference(this)
|
||||
when (v.id) {
|
||||
|
@ -291,7 +290,7 @@ class ActPost : AppCompatActivity(),
|
|||
try {
|
||||
progressChannel.send(Unit)
|
||||
} catch (ex: Throwable) {
|
||||
log.w(ex)
|
||||
log.w(ex, "progressChannel send failed.")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,6 +25,7 @@ class ActText : AppCompatActivity() {
|
|||
internal val log = LogCategory("ActText")
|
||||
|
||||
internal const val RESULT_SEARCH_MSP = RESULT_FIRST_USER + 1
|
||||
|
||||
// internal const val RESULT_SEARCH_TS = RESULT_FIRST_USER + 2
|
||||
internal const val RESULT_SEARCH_NOTESTOCK = RESULT_FIRST_USER + 3
|
||||
|
||||
|
@ -152,7 +153,7 @@ class ActText : AppCompatActivity() {
|
|||
intent.putExtra(Intent.EXTRA_TEXT, it)
|
||||
startActivity(intent)
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "send failed.")
|
||||
showToast(ex, "send failed.")
|
||||
}
|
||||
}
|
||||
|
@ -167,7 +168,7 @@ class ActText : AppCompatActivity() {
|
|||
startActivity(intent)
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "search failed.")
|
||||
showToast(ex, "search failed.")
|
||||
}
|
||||
}
|
||||
|
@ -181,7 +182,8 @@ class ActText : AppCompatActivity() {
|
|||
setResult(resultCode, data)
|
||||
finish()
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "searchToot failed.")
|
||||
showToast(ex, "searchToot failed.")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -193,7 +195,7 @@ class ActText : AppCompatActivity() {
|
|||
App1.getAppState(this).onMuteUpdated()
|
||||
showToast(false, R.string.word_was_muted)
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "muteWord failed.")
|
||||
showToast(ex, "muteWord failed.")
|
||||
}
|
||||
}
|
||||
|
|
|
@ -328,7 +328,7 @@ class App1 : Application() {
|
|||
try {
|
||||
appStateX?.sound(item)
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "sound failed.")
|
||||
// java.lang.NoSuchFieldError:
|
||||
// at jp.juggler.subwaytooter.App1$Companion.sound (App1.kt:544)
|
||||
// at jp.juggler.subwaytooter.column.Column$startRefresh$task$1.onPostExecute (Column.kt:2432)
|
||||
|
@ -352,7 +352,7 @@ class App1 : Application() {
|
|||
|
||||
// エラー処理
|
||||
val catcher = GlideExecutor.UncaughtThrowableStrategy { ex ->
|
||||
log.trace(ex)
|
||||
log.e(ex, "glide uncaught error.")
|
||||
}
|
||||
builder.setDiskCacheExecutor(
|
||||
GlideExecutor.newDiskCacheBuilder()
|
||||
|
|
|
@ -87,7 +87,7 @@ class AppState(
|
|||
tmpFile.delete() // ignore return value
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "saveColumnList failed.")
|
||||
context.showToast(ex, "saveColumnList failed.")
|
||||
}
|
||||
}
|
||||
|
@ -101,7 +101,7 @@ class AppState(
|
|||
}
|
||||
} catch (ignored: FileNotFoundException) {
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "loadColumnList failed.")
|
||||
context.showToast(ex, "loadColumnList failed.")
|
||||
}
|
||||
return null
|
||||
|
@ -252,7 +252,6 @@ class AppState(
|
|||
(++utteranceIdSeed).toString() // String utteranceId
|
||||
)
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "proc_flushSpeechQueue catch exception.")
|
||||
restartTTS()
|
||||
}
|
||||
|
@ -274,7 +273,7 @@ class AppState(
|
|||
ColumnEncoder.encode(column, dst, index)
|
||||
dst
|
||||
} catch (ex: JsonException) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "encodeColumnList: encode failed at $index.")
|
||||
null
|
||||
}
|
||||
}.toJsonArray()
|
||||
|
@ -288,11 +287,11 @@ class AppState(
|
|||
fun loadColumnList() {
|
||||
val list = loadColumnList(context, FILE_COLUMN_LIST)
|
||||
?.objectList()
|
||||
?.mapNotNull { src ->
|
||||
?.mapIndexedNotNull { index, src ->
|
||||
try {
|
||||
Column(this, src)
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "loadColumnList: decode column failed at $index")
|
||||
null
|
||||
}
|
||||
}
|
||||
|
@ -317,7 +316,7 @@ class AppState(
|
|||
} catch (ex: Throwable) {
|
||||
// クラッシュレポートによると状態が悪いとダメらしい
|
||||
// java.lang.IllegalStateException
|
||||
log.trace(ex)
|
||||
log.e(ex, "loadColumnList failed.")
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -423,7 +422,6 @@ class AppState(
|
|||
}
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "TextToSpeech.getVoices raises exception.")
|
||||
}
|
||||
|
||||
|
@ -552,12 +550,11 @@ class AppState(
|
|||
}
|
||||
|
||||
private fun stopLastRingtone() {
|
||||
val r = lastRingtone?.get()
|
||||
if (r != null) {
|
||||
lastRingtone?.get()?.let { r ->
|
||||
try {
|
||||
r.stop()
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "stopLastRingtone failed.")
|
||||
} finally {
|
||||
lastRingtone = null
|
||||
}
|
||||
|
@ -584,7 +581,7 @@ class AppState(
|
|||
}
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "tryRingtone failed.")
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
|
|
@ -40,7 +40,7 @@ class MyFirebaseMessagingService : FirebaseMessagingService() {
|
|||
PrefDevice.from(this).edit().putString(PrefDevice.KEY_DEVICE_TOKEN, token).apply()
|
||||
restartAllWorker(this)
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex, "onNewToken failed")
|
||||
log.e(ex, "onNewToken failed")
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -93,7 +93,7 @@ class MyFirebaseMessagingService : FirebaseMessagingService() {
|
|||
log.i(text)
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "check failed. accountDbId=$accountDbId")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,6 +12,8 @@ import jp.juggler.util.LogCategory
|
|||
import jp.juggler.util.jsonObject
|
||||
import jp.juggler.util.showToast
|
||||
|
||||
private val log = LogCategory("ActionUtils")
|
||||
|
||||
// 疑似アカウントを作成する
|
||||
// 既に存在する場合は再利用する
|
||||
// 実アカウントを返すことはない
|
||||
|
@ -20,18 +22,18 @@ internal suspend fun AppCompatActivity.addPseudoAccount(
|
|||
instanceInfoArg: TootInstance? = null,
|
||||
): SavedAccount? {
|
||||
|
||||
suspend fun AppCompatActivity.getInstanceInfo(): TootInstance? {
|
||||
var resultTi: TootInstance? = null
|
||||
val result = runApiTask(host) { client ->
|
||||
val (instance, instanceResult) = TootInstance.get(client)
|
||||
resultTi = instance
|
||||
instanceResult
|
||||
}
|
||||
result?.error?.let { showToast(true, it) }
|
||||
return resultTi
|
||||
}
|
||||
|
||||
try {
|
||||
suspend fun AppCompatActivity.getInstanceInfo(): TootInstance? {
|
||||
var resultTi: TootInstance? = null
|
||||
val result = runApiTask(host) { client ->
|
||||
val (instance, instanceResult) = TootInstance.get(client)
|
||||
resultTi = instance
|
||||
instanceResult
|
||||
}
|
||||
result?.error?.let { showToast(true, it) }
|
||||
return resultTi
|
||||
}
|
||||
|
||||
val acct = Acct.parse("?", host)
|
||||
|
||||
var account = SavedAccount.loadAccountByAcct(this, acct.ascii)
|
||||
|
@ -70,12 +72,10 @@ internal suspend fun AppCompatActivity.addPseudoAccount(
|
|||
account.saveSetting()
|
||||
return account
|
||||
} catch (ex: Throwable) {
|
||||
val log = LogCategory("addPseudoAccount")
|
||||
log.trace(ex)
|
||||
log.e(ex, "failed.")
|
||||
log.e(ex, "addPseudoAccount failed.")
|
||||
showToast(ex, "addPseudoAccount failed.")
|
||||
return null
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
internal fun SavedAccount.saveUserRelation(src: TootRelationShip?): UserRelation? {
|
||||
|
|
|
@ -247,10 +247,11 @@ private fun appServerUnregister(context: Context, account: SavedAccount) {
|
|||
)
|
||||
|
||||
val response = call.await()
|
||||
|
||||
log.e("appServerUnregister: $response")
|
||||
if(!response.isSuccessful){
|
||||
log.e("appServerUnregister: $response")
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex, "appServerUnregister failed.")
|
||||
log.e(ex, "appServerUnregister failed.")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -340,7 +341,7 @@ suspend fun Context.accountListWithFilter(
|
|||
try {
|
||||
if (check(client, it)) it else null
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex, "accountListWithFilter failed.")
|
||||
log.e(ex, "accountListWithFilter failed.")
|
||||
null
|
||||
}
|
||||
}
|
||||
|
|
|
@ -261,7 +261,7 @@ fun ActMain.quoteName(who: TootAccount) {
|
|||
sv = String.format(Locale.getDefault(), fmt, sv)
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "quoteName failed.")
|
||||
}
|
||||
openPost(sv)
|
||||
}
|
||||
|
|
|
@ -127,7 +127,7 @@ fun ActMain.tagDialog(
|
|||
|
||||
d.show(activity, tagWithSharp)
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "tagDialog failed.")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -50,7 +50,7 @@ fun ActMain.onBackPressedImpl() {
|
|||
try {
|
||||
appState.column(env.pager.currentItem)?.addTo(visibleColumnList)
|
||||
} catch (ex: Throwable) {
|
||||
log.w(ex)
|
||||
log.e(ex, "getClosableColumnList failed.")
|
||||
}
|
||||
}, { env ->
|
||||
visibleColumnList.addAll(env.visibleColumns)
|
||||
|
@ -153,7 +153,7 @@ fun ActMain.onMyClickableSpanClickedImpl(viewClicked: View, span: MyClickableSpa
|
|||
}
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "can't create hashtagList")
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -388,7 +388,7 @@ fun ActMain.resizeColumnWidth(views: ActMainTabletViews) {
|
|||
columnWMinDp = iv
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "can't parse spColumnWidth. $sv")
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -11,8 +11,8 @@ import jp.juggler.subwaytooter.appsetting.AppDataExporter
|
|||
import jp.juggler.subwaytooter.column.Column
|
||||
import jp.juggler.subwaytooter.notification.setImportProtector
|
||||
import jp.juggler.util.LogCategory
|
||||
import jp.juggler.util.runOnMainLooper
|
||||
import jp.juggler.util.launchProgress
|
||||
import jp.juggler.util.runOnMainLooper
|
||||
import jp.juggler.util.showToast
|
||||
import java.io.File
|
||||
import java.io.FileInputStream
|
||||
|
@ -100,8 +100,8 @@ fun ActMain.importAppData(uri: Uri) {
|
|||
}
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
if (zipEntryCount != 0) {
|
||||
log.e(ex, "importAppData failed.")
|
||||
showToast(ex, "importAppData failed.")
|
||||
}
|
||||
}
|
||||
|
|
|
@ -39,7 +39,7 @@ fun ActMain.handleIntentUri(uri: Uri) {
|
|||
else -> handleOtherUri(uri)
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "handleIntentUri failed.")
|
||||
showToast(ex, "handleIntentUri failed.")
|
||||
}
|
||||
}
|
||||
|
@ -138,7 +138,7 @@ fun ActMain.handleOtherUri(uri: Uri): Boolean {
|
|||
startActivity(chooser)
|
||||
return true
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "can't open app to handle intent.")
|
||||
}
|
||||
|
||||
AlertDialog.Builder(this)
|
||||
|
@ -188,7 +188,7 @@ private fun ActMain.handleNotificationClick(uri: Uri, dataIdString: String) {
|
|||
// 通知を読み直す
|
||||
if (!column.bInitialLoading) column.startLoading()
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "handleNotificationClick failed.")
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -227,7 +227,7 @@ private fun ActMain.handleOAuth2Callback(uri: Uri) {
|
|||
resultSavedAccount = sa
|
||||
client.account = sa
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "handleOAuth2Callback failed.")
|
||||
return@runApiTask TootApiResult(ex.withCaption("invalid state"))
|
||||
}
|
||||
}
|
||||
|
@ -279,7 +279,7 @@ private fun ActMain.handleOAuth2Callback(uri: Uri) {
|
|||
resultSavedAccount = sa
|
||||
client.account = sa
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "handleOAuth2Callback failed.")
|
||||
return@runApiTask TootApiResult(ex.withCaption("invalid state"))
|
||||
}
|
||||
|
||||
|
|
|
@ -25,47 +25,47 @@ import kotlin.math.max
|
|||
|
||||
private val log = LogCategory("ActMainStyle")
|
||||
|
||||
private fun ActMain.dpToPx(dp: Float) =
|
||||
(dp * density + 0.5f).toInt()
|
||||
|
||||
// initUIから呼ばれる
|
||||
fun ActMain.reloadFonts() {
|
||||
var sv = PrefS.spTimelineFont(pref)
|
||||
if (sv.isNotEmpty()) {
|
||||
ActMain.timelineFont = PrefS.spTimelineFont(pref).notEmpty()?.let {
|
||||
try {
|
||||
ActMain.timelineFont = Typeface.createFromFile(sv)
|
||||
Typeface.createFromFile(it)
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "timelineFont load failed")
|
||||
null
|
||||
}
|
||||
}
|
||||
} ?: Typeface.DEFAULT
|
||||
|
||||
sv = PrefS.spTimelineFontBold(pref)
|
||||
if (sv.isNotEmpty()) {
|
||||
ActMain.timelineFontBold = PrefS.spTimelineFontBold(pref).notEmpty()?.let {
|
||||
try {
|
||||
ActMain.timelineFontBold = Typeface.createFromFile(sv)
|
||||
Typeface.createFromFile(it)
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
}
|
||||
} else {
|
||||
try {
|
||||
ActMain.timelineFontBold = Typeface.create(ActMain.timelineFont, Typeface.BOLD)
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun ActMain.parseIconSize(stringPref: StringPref, minDp: Float = 1f): Int {
|
||||
var iconSizeDp = stringPref.defVal.toFloat()
|
||||
try {
|
||||
val sv = stringPref(pref)
|
||||
val fv = if (sv.isEmpty()) Float.NaN else sv.toFloat()
|
||||
if (fv.isFinite() && fv >= minDp) {
|
||||
iconSizeDp = fv
|
||||
log.e(ex, "timelineFontBold load failed")
|
||||
null
|
||||
}
|
||||
} ?: try {
|
||||
Typeface.create(ActMain.timelineFont, Typeface.BOLD)
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
}
|
||||
return (0.5f + iconSizeDp * density).toInt()
|
||||
log.e(ex, "timelineFontBold create from timelineFont failed")
|
||||
null
|
||||
} ?: Typeface.DEFAULT_BOLD
|
||||
}
|
||||
|
||||
private fun ActMain.parseIconSize(stringPref: StringPref, minDp: Float = 1f) =
|
||||
dpToPx(
|
||||
try {
|
||||
stringPref(pref)
|
||||
.toFloatOrNull()
|
||||
?.takeIf { it.isFinite() && it >= minDp }
|
||||
} catch (ex: Throwable) {
|
||||
log.e(ex, "parseIconSize failed.")
|
||||
null
|
||||
} ?: stringPref.defVal.toFloat()
|
||||
)
|
||||
|
||||
// initUIから呼ばれる
|
||||
fun ActMain.reloadIconSize() {
|
||||
avatarIconSize = parseIconSize(PrefS.spAvatarIconSize)
|
||||
|
@ -85,53 +85,38 @@ fun ActMain.reloadIconSize() {
|
|||
|
||||
// initUIから呼ばれる
|
||||
fun ActMain.reloadRoundRatio() {
|
||||
var roundRatio = 33f
|
||||
try {
|
||||
if (PrefB.bpDontRound(pref)) {
|
||||
roundRatio = 0f
|
||||
} else {
|
||||
val sv = PrefS.spRoundRatio(pref)
|
||||
if (sv.isNotEmpty()) {
|
||||
val fv = sv.toFloat()
|
||||
if (fv.isFinite()) {
|
||||
roundRatio = fv
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
val sizeDp = when {
|
||||
PrefB.bpDontRound(pref) -> 0f
|
||||
else -> PrefS.spRoundRatio(pref)
|
||||
.toFloatOrNull()
|
||||
?.takeIf { it.isFinite() }
|
||||
?: 33f
|
||||
}
|
||||
Styler.round_ratio = clipRange(0f, 1f, roundRatio / 100f) * 0.5f
|
||||
Styler.round_ratio = clipRange(0f, 1f, sizeDp / 100f) * 0.5f
|
||||
}
|
||||
|
||||
// initUI から呼ばれる
|
||||
fun ActMain.reloadBoostAlpha() {
|
||||
var boostAlpha = 0.8f
|
||||
try {
|
||||
val f = (PrefS.spBoostAlpha.toInt(pref).toFloat() + 0.5f) / 100f
|
||||
boostAlpha = when {
|
||||
f >= 1f -> 1f
|
||||
f < 0f -> 0.66f
|
||||
else -> f
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
}
|
||||
Styler.boostAlpha = boostAlpha
|
||||
Styler.boostAlpha = PrefS.spBoostAlpha(pref)
|
||||
.toIntOrNull()
|
||||
?.toFloat()
|
||||
?.let { (it + 0.5f) / 100f }
|
||||
?.let {
|
||||
when {
|
||||
it >= 1f -> 1f
|
||||
it < 0f -> 0.66f
|
||||
else -> it
|
||||
}
|
||||
} ?: 0.8f
|
||||
}
|
||||
|
||||
fun ActMain.reloadMediaHeight() {
|
||||
var mediaThumbHeightDp = 64
|
||||
val sv = PrefS.spMediaThumbHeight(pref)
|
||||
if (sv.isNotEmpty()) {
|
||||
try {
|
||||
val iv = Integer.parseInt(sv)
|
||||
if (iv >= 32) mediaThumbHeightDp = iv
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
}
|
||||
}
|
||||
appState.mediaThumbHeight = (0.5f + mediaThumbHeightDp * density).toInt()
|
||||
appState.mediaThumbHeight = dpToPx(
|
||||
PrefS.spMediaThumbHeight(pref)
|
||||
.toFloatOrNull()
|
||||
?.takeIf { it >= 32f }
|
||||
?: 64f
|
||||
)
|
||||
}
|
||||
|
||||
private fun Float.clipFontSize(): Float =
|
||||
|
@ -146,21 +131,13 @@ fun ActMain.reloadTextSize() {
|
|||
timelineSpacing = if (fv != null && fv.isFinite() && fv != 0f) fv else null
|
||||
}
|
||||
|
||||
fun ActMain.loadColumnMin(density: Float): Int {
|
||||
var x = ActMain.COLUMN_WIDTH_MIN_DP.toFloat()
|
||||
val sv = PrefS.spColumnWidth(pref)
|
||||
if (sv.isNotEmpty()) {
|
||||
try {
|
||||
val fv = sv.toFloat()
|
||||
if (fv.isFinite() && fv >= 100f) {
|
||||
x = fv
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
}
|
||||
}
|
||||
return (0.5f + x * density).toInt()
|
||||
}
|
||||
fun ActMain.loadColumnMin() =
|
||||
dpToPx(
|
||||
PrefS.spColumnWidth(pref)
|
||||
.toFloatOrNull()
|
||||
?.takeIf { it.isFinite() && it >= 100f }
|
||||
?: ActMain.COLUMN_WIDTH_MIN_DP.toFloat()
|
||||
)
|
||||
|
||||
fun ActMain.justifyWindowContentPortrait() {
|
||||
when (PrefI.ipJustifyWindowContentPortrait(pref)) {
|
||||
|
@ -183,7 +160,7 @@ fun ActMain.justifyWindowContentPortrait() {
|
|||
|
||||
PrefI.JWCP_END -> {
|
||||
val iconW = (ActMain.stripIconSize * 1.5f + 0.5f).toInt()
|
||||
val borderWidth = (1f * density + 0.5f).toInt()
|
||||
val borderWidth = dpToPx(1f)
|
||||
val padding = resources.displayMetrics.widthPixels / 2 - iconW - borderWidth
|
||||
|
||||
fun ViewGroup.addViewAfterFirst(v: View) = addView(v, 1)
|
||||
|
|
|
@ -21,7 +21,7 @@ inline fun <R : Any?> ActMain.phoneTab(codePhone: (ActMainPhoneViews) -> R, code
|
|||
}
|
||||
|
||||
fun ActMain.initPhoneTablet() {
|
||||
val columnWMin = loadColumnMin(density)
|
||||
val columnWMin = loadColumnMin()
|
||||
val sw = resources.displayMetrics.widthPixels
|
||||
val tmpPhonePager: MyViewPager = findViewById(R.id.viewPager)
|
||||
val tmpTabletPager: RecyclerView = findViewById(R.id.rvPager)
|
||||
|
|
|
@ -531,7 +531,7 @@ class SideMenuAdapter(
|
|||
}
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.w(ex)
|
||||
log.w(ex,"getTimeZoneString failed.")
|
||||
return "(incorrect TimeZone)"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -98,7 +98,7 @@ internal fun ActPost.setAccountWithVisibilityConversion(a: SavedAccount) {
|
|||
states.visibility = a.visibility
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "setAccountWithVisibilityConversion failed.")
|
||||
}
|
||||
showVisibility()
|
||||
showQuotedRenote()
|
||||
|
|
|
@ -34,11 +34,11 @@ fun ActPost.decodeAttachments(sv: String) {
|
|||
try {
|
||||
attachmentList.add(PostAttachment(TootAttachment.decodeJson(it)))
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "can't parse TootAttachment.")
|
||||
}
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "decodeAttachments failed.")
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -66,7 +66,7 @@ private suspend fun checkExist(url: String?): Boolean {
|
|||
log.e(TootApiClient.formatResponse(response, "check_exist failed."))
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "checkExist failed.")
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
@ -126,7 +126,7 @@ fun ActPost.saveDraft() {
|
|||
|
||||
PostDraft.save(System.currentTimeMillis(), json)
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "saveDraft failed.")
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -221,7 +221,7 @@ fun ActPost.restoreDraft(draft: JsonObject) {
|
|||
}
|
||||
}
|
||||
} catch (ex: JsonException) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "can't parse tmpAttachmentList.")
|
||||
}
|
||||
|
||||
"OK"
|
||||
|
@ -346,7 +346,7 @@ fun ActPost.initializeFromRedraftStatus(account: SavedAccount, jsonText: String)
|
|||
}
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "can't initialize attachments from redraft.")
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -413,7 +413,7 @@ fun ActPost.initializeFromRedraftStatus(account: SavedAccount, jsonText: String)
|
|||
}
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "initializeFromRedraftStatus failed.")
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -441,7 +441,7 @@ fun ActPost.initializeFromEditStatus(account: SavedAccount, jsonText: String) {
|
|||
}
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "can't initialize attachments from edit status")
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -508,6 +508,6 @@ fun ActPost.initializeFromEditStatus(account: SavedAccount, jsonText: String) {
|
|||
}
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "initializeFromEditStatus failed.")
|
||||
}
|
||||
}
|
||||
|
|
|
@ -261,7 +261,7 @@ fun ActPost.initializeFromSharedIntent(sharedIntent: Intent) {
|
|||
appendContentText(sharedIntent)
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex,"initializeFromSharedIntent failed.")
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -100,7 +100,7 @@ fun ActPost.openMushroom() {
|
|||
|
||||
arMushroom.launch(chooser)
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "openMushroom failed.")
|
||||
showRecommendedPlugin(getString(R.string.plugin_not_installed))
|
||||
}
|
||||
}
|
||||
|
|
|
@ -138,10 +138,10 @@ fun ActPost.initializeFromReplyStatus(account: SavedAccount, jsonText: String) {
|
|||
states.visibility = sample
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "initializeFromReplyStatus: can't initialize visibility.")
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "initializeFromReplyStatus failed.")
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -72,6 +72,6 @@ fun ActPost.initializeFromScheduledStatus(account: SavedAccount, jsonText: Strin
|
|||
this.attachmentList.addAll(it)
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "initializeFromScheduledStatus failed.")
|
||||
}
|
||||
}
|
||||
|
|
|
@ -358,7 +358,7 @@ class TootApiClient(
|
|||
readBodyBytes(result, progressPath, jsonErrorParser)
|
||||
?: return if (isApiCancelled()) null else result
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "parseBytes failed.")
|
||||
result.parseErrorResponse(result.bodyString ?: NO_INFORMATION)
|
||||
}
|
||||
return result
|
||||
|
@ -375,7 +375,7 @@ class TootApiClient(
|
|||
|
||||
result.data = bodyString
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "parseString failed.")
|
||||
result.parseErrorResponse(result.bodyString ?: NO_INFORMATION)
|
||||
}
|
||||
return result
|
||||
|
@ -388,55 +388,64 @@ class TootApiClient(
|
|||
progressPath: String? = null,
|
||||
jsonErrorParser: (json: JsonObject) -> String? = DEFAULT_JSON_ERROR_PARSER,
|
||||
): TootApiResult? {
|
||||
val response = result.response!! // nullにならないはず
|
||||
|
||||
try {
|
||||
var bodyString = readBodyString(result, progressPath, jsonErrorParser)
|
||||
?: return if (isApiCancelled()) null else result
|
||||
|
||||
if (bodyString.isEmpty()) {
|
||||
when {
|
||||
bodyString == null ->
|
||||
return if (isApiCancelled()) null else result
|
||||
|
||||
// 204 no content は 空オブジェクトと解釈する
|
||||
result.data = JsonObject()
|
||||
} else if (reStartJsonArray.matcher(bodyString).find()) {
|
||||
result.data = bodyString.decodeJsonArray()
|
||||
} else if (reStartJsonObject.matcher(bodyString).find()) {
|
||||
val json = bodyString.decodeJsonObject()
|
||||
val errorMessage = jsonErrorParser(json)
|
||||
if (errorMessage != null) {
|
||||
result.error = errorMessage
|
||||
} else {
|
||||
result.data = json
|
||||
}
|
||||
} else {
|
||||
// HTMLならタグを除去する
|
||||
val ct = response.body?.contentType()
|
||||
if (ct?.subtype == "html") {
|
||||
val decoded = DecodeOptions().decodeHTML(bodyString).toString()
|
||||
.replace("""[\s ]+""".toRegex(), " ")
|
||||
bodyString = decoded
|
||||
bodyString.isEmpty() -> {
|
||||
result.data = JsonObject()
|
||||
}
|
||||
|
||||
val sb = StringBuilder()
|
||||
.append(context.getString(R.string.response_not_json))
|
||||
.append(' ')
|
||||
.append(bodyString)
|
||||
reStartJsonArray.matcher(bodyString).find() -> {
|
||||
result.data = bodyString.decodeJsonArray()
|
||||
}
|
||||
|
||||
if (sb.isNotEmpty()) sb.append(' ')
|
||||
sb.append("(HTTP ").append(response.code.toString())
|
||||
reStartJsonObject.matcher(bodyString).find() -> {
|
||||
val json = bodyString.decodeJsonObject()
|
||||
val errorMessage = jsonErrorParser(json)
|
||||
if (errorMessage != null) {
|
||||
result.error = errorMessage
|
||||
} else {
|
||||
result.data = json
|
||||
}
|
||||
}
|
||||
|
||||
val message = response.message
|
||||
if (message.isNotEmpty()) sb.append(' ').append(message)
|
||||
else -> {
|
||||
val response = result.response!! // nullにならないはず
|
||||
|
||||
sb.append(")")
|
||||
// HTMLならタグを除去する
|
||||
val ct = response.body?.contentType()
|
||||
if (ct?.subtype == "html") {
|
||||
val decoded = DecodeOptions().decodeHTML(bodyString).toString()
|
||||
.replace("""[\s ]+""".toRegex(), " ")
|
||||
bodyString = decoded
|
||||
}
|
||||
|
||||
val url = response.request.url.toString()
|
||||
if (url.isNotEmpty()) sb.append(' ').append(url)
|
||||
val sb = StringBuilder()
|
||||
.append(context.getString(R.string.response_not_json))
|
||||
.append(' ')
|
||||
.append(bodyString)
|
||||
|
||||
result.error = sb.toString()
|
||||
if (sb.isNotEmpty()) sb.append(' ')
|
||||
sb.append("(HTTP ").append(response.code.toString())
|
||||
|
||||
val message = response.message
|
||||
if (message.isNotEmpty()) sb.append(' ').append(message)
|
||||
|
||||
sb.append(")")
|
||||
|
||||
val url = response.request.url.toString()
|
||||
if (url.isNotEmpty()) sb.append(' ').append(url)
|
||||
|
||||
result.error = sb.toString()
|
||||
}
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "parseJson failed.")
|
||||
result.parseErrorResponse(result.bodyString ?: NO_INFORMATION)
|
||||
}
|
||||
return result
|
||||
|
@ -1254,7 +1263,7 @@ class TootApiClient(
|
|||
return Pair(null, null)
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "webSocket failed.")
|
||||
result.error =
|
||||
"${result.caption}: ${ex.withCaption(context.resources, R.string.network_error)}"
|
||||
}
|
||||
|
|
|
@ -66,7 +66,7 @@ open class TootApiResult(
|
|||
}
|
||||
|
||||
constructor(response: Response, error: String)
|
||||
: this(0, error, response)
|
||||
: this(0, error, response)
|
||||
|
||||
constructor(response: Response, bodyString: String, data: Any?) : this(
|
||||
0,
|
||||
|
@ -167,7 +167,7 @@ open class TootApiResult(
|
|||
sb.append(' ').append(caption)
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "parseErrorResponse failed.")
|
||||
}
|
||||
|
||||
this.error = sb.toString().replace("\n+".toRegex(), "\n")
|
||||
|
|
|
@ -24,7 +24,7 @@ class APAttachment(jsonArray: JsonArray?) {
|
|||
}
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "APAttachment ctor failed.")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,7 +6,6 @@ import jp.juggler.util.JsonArray
|
|||
import jp.juggler.util.JsonObject
|
||||
import jp.juggler.util.LogCategory
|
||||
import jp.juggler.util.cast
|
||||
import java.util.*
|
||||
|
||||
class APTag(parser: TootParser, jsonArray: JsonArray?) {
|
||||
|
||||
|
@ -61,7 +60,7 @@ class APTag(parser: TootParser, jsonArray: JsonArray?) {
|
|||
}
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "APTag ctor failed.")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -23,7 +23,6 @@ inline fun <reified T> parseItem(
|
|||
return try {
|
||||
factory(src)
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "${T::class.simpleName} parse failed.")
|
||||
null
|
||||
}
|
||||
|
@ -156,7 +155,6 @@ inline fun <reified V> parseProfileEmoji2(
|
|||
val item = try {
|
||||
factory(v, key)
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "parseProfileEmoji2 failed.")
|
||||
null
|
||||
}
|
||||
|
@ -180,7 +178,6 @@ inline fun <P, reified T> parseItem(
|
|||
return try {
|
||||
factory(parser, src)
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "${T::class.simpleName} parse failed.")
|
||||
null
|
||||
}
|
||||
|
@ -196,7 +193,6 @@ inline fun <reified T> parseItem(
|
|||
return try {
|
||||
factory(serviceType, src)
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "${T::class.simpleName} parse failed.")
|
||||
null
|
||||
}
|
||||
|
|
|
@ -675,7 +675,6 @@ open class TootAccount(parser: TootParser, src: JsonObject) : HostAndDomain {
|
|||
return try {
|
||||
Source(src)
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e("parseSource failed.")
|
||||
null
|
||||
}
|
||||
|
|
|
@ -45,7 +45,6 @@ class TootFilter(src: JsonObject) : TimelineItem() {
|
|||
try {
|
||||
result.add(TootFilter(it))
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "TootFilter parse failed.")
|
||||
}
|
||||
}
|
||||
|
|
|
@ -435,12 +435,12 @@ class TootInstance(parser: TootParser, src: JsonObject) {
|
|||
handleRequest(req)
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex, "handleRequest failed.")
|
||||
log.e(ex, "handleRequest failed.")
|
||||
tiError(ex.withCaption("handleRequest failed."))
|
||||
}
|
||||
runCatching { req.cont.resumeWith(Result.success(r)) }
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex, "requestQueue.take failed.")
|
||||
log.e(ex, "requestQueue.take failed.")
|
||||
delay(3000L)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -52,8 +52,9 @@ object TootPayload {
|
|||
// 2022/3/19 fedibird.com から来る? 投稿の編集らしい?
|
||||
"status.update",
|
||||
|
||||
// 2017/8/24 18:37 mastodon.juggler.jpでここを通った
|
||||
"update" -> parser.status(src)
|
||||
// 2017/8/24 18:37 mastodon.juggler.jpでここを通った
|
||||
"update",
|
||||
-> parser.status(src)
|
||||
|
||||
// 2017/8/24 18:37 mastodon.juggler.jpでここを通った
|
||||
"notification" -> parser.notification(src)
|
||||
|
@ -86,7 +87,7 @@ object TootPayload {
|
|||
// ここを通るケースはまだ確認できていない
|
||||
log.e("unknown payload(3). message=$parentText")
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "parsePayload failed.")
|
||||
}
|
||||
|
||||
return null
|
||||
|
|
|
@ -297,7 +297,7 @@ class TootPolls(
|
|||
src
|
||||
)
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex,"parse failed.")
|
||||
null
|
||||
}
|
||||
}
|
||||
|
|
|
@ -565,7 +565,7 @@ class TootStatus(parser: TootParser, src: JsonObject) : TimelineItem() {
|
|||
it
|
||||
)
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "TootStatus ctor failed. enquete (NoteStock)")
|
||||
null
|
||||
}
|
||||
}
|
||||
|
@ -799,7 +799,7 @@ class TootStatus(parser: TootParser, src: JsonObject) : TimelineItem() {
|
|||
)
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "TootStatus ctor failed. enquete")
|
||||
null
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
package jp.juggler.subwaytooter.api.entity
|
||||
|
||||
import jp.juggler.util.LogCategory
|
||||
|
||||
enum class TootVisibility(
|
||||
val id: Int,
|
||||
val order: Int, // 公開範囲の広い方とWeb設定に合わせる方が大きい
|
||||
|
@ -105,6 +107,7 @@ enum class TootVisibility(
|
|||
}
|
||||
|
||||
companion object {
|
||||
private val log = LogCategory("TootVisivbility")
|
||||
|
||||
fun parseMastodon(a: String?): TootVisibility? {
|
||||
for (v in values()) {
|
||||
|
@ -162,7 +165,7 @@ enum class TootVisibility(
|
|||
currentVisibility.order > maxVisibility.order
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
TootStatus.log.trace(ex)
|
||||
log.e(ex, "isVisibilitySpoilRequired failed.")
|
||||
false
|
||||
}
|
||||
}
|
||||
|
|
|
@ -235,7 +235,6 @@ object AppDataExporter {
|
|||
reader.endArray()
|
||||
db.execSQL("COMMIT TRANSACTION")
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "importTable failed.")
|
||||
try {
|
||||
db.execSQL("ROLLBACK TRANSACTION")
|
||||
|
@ -343,7 +342,6 @@ object AppDataExporter {
|
|||
try {
|
||||
result.add(Column(appState, item))
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "column load failed.")
|
||||
throw ex
|
||||
}
|
||||
|
@ -436,7 +434,7 @@ object AppDataExporter {
|
|||
}
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "saveBackgroundImage failed.")
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -470,7 +468,7 @@ object AppDataExporter {
|
|||
column.columnBgImage = Uri.fromFile(file).toString()
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "restoreBackgroundImage failed.")
|
||||
}
|
||||
|
||||
return true
|
||||
|
|
|
@ -195,7 +195,7 @@ fun Column.removeNotifications() {
|
|||
try {
|
||||
onNotificationCleared(context, accessInfo.db_id)
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex, "onNotificationCleared failed.")
|
||||
log.e(ex, "onNotificationCleared failed.")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -167,7 +167,7 @@ fun Column.initFilter() {
|
|||
}
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex,"initFilter failed.")
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -175,7 +175,7 @@ object ColumnSpec {
|
|||
else -> true
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "isSameSpec failed.")
|
||||
false
|
||||
}
|
||||
}
|
||||
|
|
|
@ -108,7 +108,7 @@ fun Column.mergeStreamingMessage() {
|
|||
} catch (ex: Throwable) {
|
||||
// IDを取得できないタイプのオブジェクトだった
|
||||
// ストリームに来るのは通知かステータスだから、多分ここは通らない
|
||||
log.trace(ex)
|
||||
log.e(ex, "mergeStreamingMessage failed.")
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -9,7 +9,6 @@ import jp.juggler.subwaytooter.columnviewholder.setListItemTop
|
|||
import jp.juggler.subwaytooter.notification.injectData
|
||||
import jp.juggler.subwaytooter.pref.PrefI
|
||||
import jp.juggler.util.*
|
||||
import java.lang.StringBuilder
|
||||
|
||||
@Suppress("ClassNaming")
|
||||
class ColumnTask_Gap(
|
||||
|
@ -56,7 +55,7 @@ class ColumnTask_Gap(
|
|||
try {
|
||||
column.updateRelation(client, listTmp, column.whoAccount, parser)
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "updateRelation failed.")
|
||||
}
|
||||
|
||||
ctClosed.set(true)
|
||||
|
@ -924,7 +923,7 @@ class ColumnTask_Gap(
|
|||
|
||||
val (apiResult, searchResult) = client.requestMastodonSearch(
|
||||
parser,
|
||||
q= column.searchQuery,
|
||||
q = column.searchQuery,
|
||||
resolve = column.searchResolve,
|
||||
extra = "type=$type&offset=$offset",
|
||||
)
|
||||
|
|
|
@ -66,7 +66,7 @@ class ColumnTask_Loading(
|
|||
try {
|
||||
column.updateRelation(client, listTmp, column.whoAccount, parser)
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "updateRelation failed.")
|
||||
}
|
||||
ctClosed.set(true)
|
||||
runOnMainLooperDelayed(333L) {
|
||||
|
@ -1222,7 +1222,7 @@ class ColumnTask_Loading(
|
|||
|
||||
val (apiResult, searchResult) = client.requestMastodonSearch(
|
||||
parser,
|
||||
q=column.searchQuery,
|
||||
q = column.searchQuery,
|
||||
resolve = column.searchResolve,
|
||||
)
|
||||
if (searchResult != null) {
|
||||
|
|
|
@ -63,7 +63,7 @@ class ColumnTask_Refresh(
|
|||
try {
|
||||
column.updateRelation(client, listTmp, column.whoAccount, parser)
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "updateRelation failed.")
|
||||
}
|
||||
ctClosed.set(true)
|
||||
runOnMainLooperDelayed(333L) {
|
||||
|
|
|
@ -348,7 +348,7 @@ class ColumnViewHolder(
|
|||
v.typeface = ActMain.timelineFont
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "can't change typeface.")
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -19,6 +19,8 @@ import org.jetbrains.anko.backgroundColor
|
|||
import org.jetbrains.anko.bottomPadding
|
||||
import org.jetbrains.anko.topPadding
|
||||
|
||||
private val log = LogCategory("ColumnViewHolderLifeCycle")
|
||||
|
||||
fun ColumnViewHolder.closeBitmaps() {
|
||||
try {
|
||||
ivColumnBackgroundImage.visibility = View.GONE
|
||||
|
@ -32,7 +34,7 @@ fun ColumnViewHolder.closeBitmaps() {
|
|||
|
||||
lastImageUri = null
|
||||
} catch (ex: Throwable) {
|
||||
ColumnViewHolder.log.trace(ex)
|
||||
log.e(ex, "closeBitmaps failed.")
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -71,12 +73,12 @@ fun ColumnViewHolder.loadBackgroundImage(iv: ImageView, url: String?) {
|
|||
},
|
||||
)
|
||||
} catch (ex: Throwable) {
|
||||
ColumnViewHolder.log.trace(ex)
|
||||
log.e(ex, "createResizedBitmap failed.")
|
||||
null
|
||||
}
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
ColumnViewHolder.log.w(ex, "loadBackgroundImage failed.")
|
||||
log.w(ex, "loadBackgroundImage failed.")
|
||||
null
|
||||
}
|
||||
if (bitmap != null) {
|
||||
|
@ -90,7 +92,7 @@ fun ColumnViewHolder.loadBackgroundImage(iv: ImageView, url: String?) {
|
|||
}
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
ColumnViewHolder.log.trace(ex)
|
||||
log.e(ex, "loadBackgroundImage failed.")
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -12,9 +12,12 @@ import jp.juggler.subwaytooter.column.toAdapterIndex
|
|||
import jp.juggler.subwaytooter.column.toListIndex
|
||||
import jp.juggler.subwaytooter.util.ScrollPosition
|
||||
import jp.juggler.subwaytooter.view.ListDivider
|
||||
import jp.juggler.util.LogCategory
|
||||
import jp.juggler.util.abs
|
||||
import java.io.Closeable
|
||||
|
||||
private val log = LogCategory("ColumnViewHolderLoading")
|
||||
|
||||
private class ErrorFlickListener(
|
||||
private val cvh: ColumnViewHolder,
|
||||
) : View.OnTouchListener, GestureDetector.OnGestureListener {
|
||||
|
@ -232,8 +235,7 @@ fun ColumnViewHolder.setScrollPosition(sp: ScrollPosition, deltaDp: Float = 0f)
|
|||
val state = ColumnViewHolder.fieldState.get(listView) as RecyclerView.State
|
||||
listLayoutManager.scrollVerticallyBy(dy, recycler, state)
|
||||
} catch (ex: Throwable) {
|
||||
ColumnViewHolder.log.trace(ex)
|
||||
ColumnViewHolder.log.e("can't access field in class ${RecyclerView::class.java.simpleName}")
|
||||
log.e("can't access field in class ${RecyclerView::class.java.simpleName}")
|
||||
}
|
||||
}, 20L)
|
||||
}
|
||||
|
|
|
@ -7,12 +7,11 @@ import android.view.animation.AlphaAnimation
|
|||
import android.view.animation.Animation
|
||||
import jp.juggler.subwaytooter.R
|
||||
import jp.juggler.subwaytooter.column.*
|
||||
import jp.juggler.util.AdapterChange
|
||||
import jp.juggler.util.isEnabledAlpha
|
||||
import jp.juggler.util.notZero
|
||||
import jp.juggler.util.vg
|
||||
import jp.juggler.util.*
|
||||
import org.jetbrains.anko.textColor
|
||||
|
||||
private val log = LogCategory("ColumnViewHolderShow")
|
||||
|
||||
// カラムヘッダなど、負荷が低い部分の表示更新
|
||||
fun ColumnViewHolder.showColumnHeader() {
|
||||
activity.handler.removeCallbacks(procShowColumnHeader)
|
||||
|
@ -85,14 +84,14 @@ fun ColumnViewHolder.showColumnCloseButton() {
|
|||
internal fun ColumnViewHolder.showContent(
|
||||
reason: String,
|
||||
changeList: List<AdapterChange>? = null,
|
||||
reset: Boolean = false
|
||||
reset: Boolean = false,
|
||||
) {
|
||||
// クラッシュレポートにadapterとリストデータの状態不整合が多かったので、
|
||||
// とりあえずリストデータ変更の通知だけは最優先で行っておく
|
||||
try {
|
||||
statusAdapter?.notifyChange(reason, changeList, reset)
|
||||
} catch (ex: Throwable) {
|
||||
ColumnViewHolder.log.trace(ex)
|
||||
log.e(ex, "notifyChange failed.")
|
||||
}
|
||||
|
||||
showColumnHeader()
|
||||
|
|
|
@ -13,7 +13,7 @@ import jp.juggler.util.scan
|
|||
|
||||
abstract class ViewHolderHeaderBase(
|
||||
val activity: ActMain,
|
||||
val viewRoot: View
|
||||
val viewRoot: View,
|
||||
) : RecyclerView.ViewHolder(viewRoot) {
|
||||
|
||||
companion object {
|
||||
|
@ -29,16 +29,18 @@ abstract class ViewHolderHeaderBase(
|
|||
if (v is Button) {
|
||||
// ボタンは太字なので触らない
|
||||
} else if (v is TextView) {
|
||||
v.typeface = ActMain.timelineFont
|
||||
if (!activity.timelineFontSizeSp.isNaN()) {
|
||||
v.textSize = activity.timelineFontSizeSp
|
||||
}
|
||||
|
||||
val fv = activity.timelineSpacing
|
||||
if (fv != null) v.setLineSpacing(0f, fv)
|
||||
v.typeface = ActMain.timelineFont
|
||||
|
||||
activity.timelineFontSizeSp
|
||||
.takeIf { it.isFinite() }
|
||||
?.let { v.textSize = it }
|
||||
|
||||
activity.timelineSpacing
|
||||
?.let { v.setLineSpacing(0f, it) }
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "can't initialize text styles.")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -128,7 +128,7 @@ class DlgDraftPicker : AdapterView.OnItemClickListener, AdapterView.OnItemLongCl
|
|||
} catch (ignored: CancellationException) {
|
||||
return@launchMain
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "failed to loading drafts.")
|
||||
activity.showToast(ex, "failed to loading drafts.")
|
||||
return@launchMain
|
||||
}
|
||||
|
|
|
@ -135,7 +135,7 @@ private class EmojiPicker(
|
|||
items.clear()
|
||||
items.addAll(newItems)
|
||||
} catch (ex: Throwable) {
|
||||
log.w(ex)
|
||||
log.w(ex, "loadRecents failed.")
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -175,13 +175,13 @@ private class EmojiPicker(
|
|||
val sv = list.toJsonArray().toString()
|
||||
appPref.edit().put(PrefS.spEmojiPickerRecent, sv).apply()
|
||||
} catch (ex: Throwable) {
|
||||
log.e(ex)
|
||||
log.e(ex, "can't save spEmojiPickerRecent")
|
||||
}
|
||||
// カテゴリ内のPickerItemの更新
|
||||
try {
|
||||
list.loadRecents()
|
||||
} catch (ex: Throwable) {
|
||||
log.e(ex)
|
||||
log.e(ex, "loadRecents failed.")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -506,7 +506,7 @@ private class EmojiPicker(
|
|||
try {
|
||||
addAll(createCustomEmojiCategories())
|
||||
} catch (ex: Throwable) {
|
||||
log.w(ex)
|
||||
log.w(ex, "createCustomEmojiCategories failed.")
|
||||
}
|
||||
|
||||
val categories = mutableListOf(
|
||||
|
@ -728,7 +728,7 @@ private class EmojiPicker(
|
|||
else -> log.w("handleTouch else $ev")
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex, "handleTouch failed. ev=$ev, wasIntercept=$wasIntercept")
|
||||
log.e(ex, "handleTouch failed. ev=$ev, wasIntercept=$wasIntercept")
|
||||
wasIntercept
|
||||
}
|
||||
|
||||
|
|
|
@ -140,7 +140,7 @@ object LoginForm {
|
|||
}
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "can't load server list.")
|
||||
}
|
||||
}.toList().sorted()
|
||||
|
||||
|
|
|
@ -1,10 +1,7 @@
|
|||
package jp.juggler.subwaytooter.itemviewholder
|
||||
|
||||
import android.app.AlertDialog
|
||||
import android.text.method.ScrollingMovementMethod
|
||||
import android.view.View
|
||||
import android.widget.EditText
|
||||
import android.widget.TextView
|
||||
import jp.juggler.subwaytooter.ActMain
|
||||
import jp.juggler.subwaytooter.ActMediaViewer
|
||||
import jp.juggler.subwaytooter.R
|
||||
|
@ -17,9 +14,10 @@ import jp.juggler.subwaytooter.pref.PrefB
|
|||
import jp.juggler.subwaytooter.table.ContentWarning
|
||||
import jp.juggler.subwaytooter.table.MediaShown
|
||||
import jp.juggler.subwaytooter.util.openCustomTab
|
||||
import jp.juggler.subwaytooter.view.MyTextView
|
||||
import jp.juggler.util.*
|
||||
|
||||
private val log = LogCategory("ItemViewHolderActions")
|
||||
|
||||
val defaultBoostedAction: ItemViewHolder.() -> Unit = {
|
||||
val pos = activity.nextPosition(column)
|
||||
val notification = (item as? TootNotification)
|
||||
|
@ -234,7 +232,7 @@ private fun ItemViewHolder.clickMedia(i: Int) {
|
|||
}
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
ItemViewHolder.log.trace(ex)
|
||||
log.e(ex, "clickMedia failed.")
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -37,6 +37,8 @@ import org.jetbrains.anko.backgroundColor
|
|||
import org.jetbrains.anko.textColor
|
||||
import kotlin.math.max
|
||||
|
||||
private val log = LogCategory("ItemViewHolderShow")
|
||||
|
||||
@SuppressLint("ClickableViewAccessibility")
|
||||
fun ItemViewHolder.bind(
|
||||
listAdapter: ItemListAdapter,
|
||||
|
@ -58,11 +60,7 @@ fun ItemViewHolder.bind(
|
|||
try {
|
||||
when (v) {
|
||||
// ボタンは太字なので触らない
|
||||
is CountImageButton -> {
|
||||
}
|
||||
// ボタンは太字なので触らない
|
||||
is Button -> {
|
||||
}
|
||||
is Button, is CountImageButton -> Unit
|
||||
|
||||
is TextView -> v.typeface = when {
|
||||
v === tvName ||
|
||||
|
@ -78,7 +76,7 @@ fun ItemViewHolder.bind(
|
|||
}
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
ItemViewHolder.log.trace(ex)
|
||||
log.e(ex, "can't change font.")
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -101,7 +99,7 @@ fun ItemViewHolder.bind(
|
|||
activity.closePopup()
|
||||
statusShowing?.let { status ->
|
||||
val popup =
|
||||
StatusButtonsPopup(activity, column, bSimpleList, this@bind)
|
||||
StatusButtonsPopup(activity, column, true, this@bind)
|
||||
activity.popupStatusButtons = popup
|
||||
popup.show(
|
||||
listAdapter.columnVh.listView,
|
||||
|
@ -781,7 +779,7 @@ fun ItemViewHolder.showScheduled(item: TootScheduled) {
|
|||
|
||||
btnShowMedia.visibility = if (!isShown) View.VISIBLE else View.GONE
|
||||
llMedia.visibility = if (!isShown) View.GONE else View.VISIBLE
|
||||
repeat(ItemViewHolder.MEDIA_VIEW_COUNT){idx->
|
||||
repeat(ItemViewHolder.MEDIA_VIEW_COUNT) { idx ->
|
||||
setMedia(mediaAttachments, idx)
|
||||
}
|
||||
|
||||
|
|
|
@ -21,6 +21,8 @@ import jp.juggler.util.*
|
|||
import org.jetbrains.anko.backgroundColor
|
||||
import org.jetbrains.anko.textColor
|
||||
|
||||
private val log = LogCategory("ItemViewHolderShowStatus")
|
||||
|
||||
fun ItemViewHolder.showStatusOrReply(
|
||||
item: TootStatus,
|
||||
colorBgArg: Int = 0,
|
||||
|
@ -280,7 +282,7 @@ private fun ItemViewHolder.showOpenSticker(who: TootAccount) {
|
|||
llOpenSticker.visibility = View.VISIBLE
|
||||
llOpenSticker.requestLayout()
|
||||
} catch (ex: Throwable) {
|
||||
ItemViewHolder.log.trace(ex)
|
||||
log.e(ex, "showOpenSticker failed.")
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -406,7 +408,7 @@ fun ItemViewHolder.setMedia(
|
|||
// tv.textSize = activity.timeline_font_size_sp
|
||||
// }
|
||||
// tv.setTextColor(content_color)
|
||||
it.setTag(R.id.text,desc)
|
||||
it.setTag(R.id.text, desc)
|
||||
it.text = activity.getString(
|
||||
R.string.media_description,
|
||||
idx + 1,
|
||||
|
|
|
@ -76,8 +76,7 @@ object MisskeyMarkdownDecoder {
|
|||
// 末尾の空白を取り除く
|
||||
this.removeEndWhitespaces()
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "decodeMarkdown failed")
|
||||
log.e(ex, "decodeMarkdown failed.")
|
||||
} finally {
|
||||
options.enlargeCustomEmoji = save
|
||||
}
|
||||
|
|
|
@ -75,13 +75,13 @@ class CheckerWakeLocks(contextArg: Context) {
|
|||
|
||||
@SuppressLint("WakelockTimeout")
|
||||
fun acquireWakeLocks() {
|
||||
PollingChecker.log.d("acquire power lock...")
|
||||
log.d("acquire power lock...")
|
||||
try {
|
||||
if (!powerLock.isHeld) {
|
||||
powerLock.acquire()
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
PollingChecker.log.trace(ex)
|
||||
log.e(ex, "can't update powerLock.")
|
||||
}
|
||||
|
||||
try {
|
||||
|
@ -89,18 +89,18 @@ class CheckerWakeLocks(contextArg: Context) {
|
|||
wifiLock.acquire()
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
PollingChecker.log.trace(ex)
|
||||
log.e(ex, "can't update wifiLock.")
|
||||
}
|
||||
}
|
||||
|
||||
fun releasePowerLocks() {
|
||||
PollingChecker.log.d("release power lock...")
|
||||
log.d("release power lock...")
|
||||
try {
|
||||
if (powerLock.isHeld) {
|
||||
powerLock.release()
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
PollingChecker.log.trace(ex)
|
||||
log.e(ex, "can't release powerLock.")
|
||||
}
|
||||
|
||||
try {
|
||||
|
@ -108,7 +108,7 @@ class CheckerWakeLocks(contextArg: Context) {
|
|||
wifiLock.release()
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
PollingChecker.log.trace(ex)
|
||||
log.e(ex, "can't release wifiLock.")
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
package jp.juggler.subwaytooter.notification
|
||||
|
||||
import android.annotation.TargetApi
|
||||
import android.app.NotificationChannel
|
||||
import android.app.NotificationManager
|
||||
import android.content.Context
|
||||
|
@ -10,7 +9,6 @@ object NotificationHelper {
|
|||
|
||||
private val log = LogCategory("NotificationHelper")
|
||||
|
||||
@TargetApi(26)
|
||||
fun createNotificationChannel(
|
||||
context: Context,
|
||||
channelId: String, // id
|
||||
|
@ -18,24 +16,21 @@ object NotificationHelper {
|
|||
description: String?, // The user-visible description of the channel.
|
||||
importance: Int,
|
||||
): NotificationChannel {
|
||||
val notification_manager =
|
||||
val notificationManager =
|
||||
context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager?
|
||||
?: throw NotImplementedError("missing NotificationManager system service")
|
||||
|
||||
var channel: NotificationChannel? = null
|
||||
try {
|
||||
channel = notification_manager.getNotificationChannel(channelId)
|
||||
val channel = try {
|
||||
notificationManager.getNotificationChannel(channelId)!!
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
}
|
||||
log.e(ex, "getNotificationChannel failed.")
|
||||
null
|
||||
} ?: NotificationChannel(channelId, name, importance)
|
||||
|
||||
if (channel == null) {
|
||||
channel = NotificationChannel(channelId, name, importance)
|
||||
}
|
||||
channel.name = name
|
||||
channel.importance = importance
|
||||
if (description != null) channel.description = description
|
||||
notification_manager.createNotificationChannel(channel)
|
||||
description?.let { channel.description = it }
|
||||
notificationManager.createNotificationChannel(channel)
|
||||
return channel
|
||||
}
|
||||
}
|
||||
|
|
|
@ -61,7 +61,7 @@ class PollingChecker(
|
|||
try {
|
||||
c.checkJob.cancel()
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "checkJob.cancel failed.")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -178,7 +178,7 @@ fun restartAllWorker(context: Context) {
|
|||
App1.prepare(context, "restartAllWorker")
|
||||
PollingWorker2.enqueuePolling(context)
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex, "restartAllWorker failed.")
|
||||
log.e(ex, "restartAllWorker failed.")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -233,7 +233,7 @@ fun checkNotificationImmediate(
|
|||
log.i("(Immediate)[${account.acct.pretty}]${state.desc}")
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex, "checkNotificationImmediate failed.")
|
||||
log.e(ex, "checkNotificationImmediate failed.")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -290,7 +290,7 @@ suspend fun checkNoticifationAll(
|
|||
}
|
||||
progress(tmpMap)
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex, "updateStatus")
|
||||
log.e(ex, "updateStatus")
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -308,7 +308,7 @@ suspend fun checkNoticifationAll(
|
|||
) { a, s -> updateStatus(a, s) }
|
||||
updateStatus(sa, PollingState.Complete)
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex, "updateStatus failed.")
|
||||
log.e(ex, "updateStatus failed.")
|
||||
val s = when (ex) {
|
||||
is CancellationException -> PollingState.Cancelled
|
||||
else -> PollingState.Error
|
||||
|
@ -323,7 +323,7 @@ suspend fun checkNoticifationAll(
|
|||
val tmpMap = statusMap.trans()
|
||||
progress(tmpMap)
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex, "checkNoticifationAll failed.")
|
||||
log.e(ex, "checkNoticifationAll failed.")
|
||||
}
|
||||
|
||||
if (timeoutAccounts.isNotEmpty()) {
|
||||
|
@ -352,7 +352,7 @@ fun checkNotificationImmediateAll(context: Context, onlySubscription: Boolean =
|
|||
onlySubscription = onlySubscription
|
||||
)
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex, "checkNotificationImmediateAll failed.")
|
||||
log.e(ex, "checkNotificationImmediateAll failed.")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -396,7 +396,7 @@ fun recycleClickedNotification(context: Context, uri: Uri) {
|
|||
NotificationTracking.updateRead(dbId, typeName)
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex, "recycleClickedNotification failed.")
|
||||
log.e(ex, "recycleClickedNotification failed.")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -101,8 +101,8 @@ class PollingWorker2(
|
|||
private suspend fun showMessage(text: String) =
|
||||
CheckerNotification.showMessage(applicationContext, text) {
|
||||
try {
|
||||
if(!isAppForehround()) error("app is not foreground.")
|
||||
setForegroundAsync(ForegroundInfo(NOTIFICATION_ID_POLLING_WORKER,it))
|
||||
if (!isAppForehround()) error("app is not foreground.")
|
||||
setForegroundAsync(ForegroundInfo(NOTIFICATION_ID_POLLING_WORKER, it))
|
||||
.await()
|
||||
} catch (ex: Throwable) {
|
||||
log.e(ex, "showMessage failed.")
|
||||
|
@ -145,10 +145,9 @@ class PollingWorker2(
|
|||
try {
|
||||
workImpl()
|
||||
} catch (ex: Throwable) {
|
||||
if (ex is CancellationException) {
|
||||
log.e("doWork cancelled.")
|
||||
} else {
|
||||
log.trace(ex, "doWork failed.")
|
||||
when (ex) {
|
||||
is CancellationException -> log.e("doWork cancelled.")
|
||||
else -> log.e(ex, "doWork failed.")
|
||||
}
|
||||
}
|
||||
return Result.success()
|
||||
|
|
|
@ -210,7 +210,7 @@ class PushSubscriptionHelper(
|
|||
val deviceId = try {
|
||||
loadFirebaseMessagingToken(context)
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "loadFirebaseMessagingToken failed.")
|
||||
return when (ex) {
|
||||
is CancellationException -> null
|
||||
else -> TootApiResult(error = context.getString(R.string.missing_fcm_device_id))
|
||||
|
@ -229,7 +229,7 @@ class PushSubscriptionHelper(
|
|||
deviceId
|
||||
) { a, s -> log.i("[${a.acct.pretty}]${s.desc}") }
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "loadInstallId failed.")
|
||||
return when (ex) {
|
||||
is CancellationException -> null
|
||||
else -> TootApiResult(error = context.getString(R.string.missing_install_id))
|
||||
|
@ -321,7 +321,7 @@ class PushSubscriptionHelper(
|
|||
val deviceId = try {
|
||||
loadFirebaseMessagingToken(context)
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "loadFirebaseMessagingToken failed.")
|
||||
return when (ex) {
|
||||
is CancellationException -> null
|
||||
else -> TootApiResult(error = context.getString(R.string.missing_fcm_device_id))
|
||||
|
@ -336,7 +336,7 @@ class PushSubscriptionHelper(
|
|||
deviceId
|
||||
) { a, s -> log.i("[${a.acct.pretty}]${s.desc}") }
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "loadInstallId failed.")
|
||||
return when (ex) {
|
||||
is CancellationException -> null
|
||||
else -> TootApiResult(error = context.getString(R.string.missing_install_id))
|
||||
|
|
|
@ -58,7 +58,7 @@ object NotestockHelper {
|
|||
if (src !is JsonObject) continue
|
||||
add(TootStatus(parser, src))
|
||||
} catch (ex: Throwable) {
|
||||
TootStatus.log.trace(ex)
|
||||
log.e(ex,"parse item failed.")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -68,7 +68,7 @@ object TootsearchHelper {
|
|||
val source = src.cast<JsonObject>()?.jsonObject("_source") ?: continue
|
||||
add(TootStatus(parser, source))
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex,"parse item failed.")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -40,7 +40,7 @@ class SvgEmojiSpan internal constructor(
|
|||
else -> try {
|
||||
SVG.getFromAsset(assetsManager, assetsName)
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "SVG.getFromAsset failed.")
|
||||
null
|
||||
}
|
||||
}
|
||||
|
@ -173,7 +173,7 @@ class SvgEmojiSpan internal constructor(
|
|||
Bitmap.createBitmap(dstSizeInt, dstSizeInt, Bitmap.Config.ARGB_8888)
|
||||
?.also { renderBitmap(it, svg, dstSize) }
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex, "bitmap allocation failed!")
|
||||
log.e(ex, "bitmap allocation failed.")
|
||||
null
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,7 +15,6 @@ import okhttp3.WebSocket
|
|||
import okhttp3.WebSocketListener
|
||||
import java.net.ProtocolException
|
||||
import java.net.SocketException
|
||||
import java.util.*
|
||||
import java.util.concurrent.ConcurrentHashMap
|
||||
import java.util.concurrent.atomic.AtomicBoolean
|
||||
import java.util.concurrent.atomic.AtomicReference
|
||||
|
@ -145,7 +144,7 @@ class StreamConnection(
|
|||
try {
|
||||
if (!it.isDispose.get()) it.onStatusRemoved(timelineHost, id)
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "onStatusRemoved failed.")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -277,7 +276,7 @@ class StreamConnection(
|
|||
column.replaceStatus(payload.id, payload.json)
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.e(ex)
|
||||
log.e(ex, "replaceStatus failed.")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -325,8 +324,7 @@ class StreamConnection(
|
|||
else -> handleMastodonMessage(obj, text)
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e("$name onMessage error. data=$text")
|
||||
log.e(ex, "$name onMessage error. data=$text")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -44,7 +44,7 @@ class StreamGroup(val spec: StreamSpec) {
|
|||
}
|
||||
dst.refCallback.get()?.let { block(it) }
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "eachCallback failed.")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -163,7 +163,7 @@ class StreamManager(val appState: AppState) {
|
|||
} catch (_: ClosedReceiveChannelException) {
|
||||
// 発生しない
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex, "error.")
|
||||
log.e(ex, "queue item handling failed.")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -66,7 +66,6 @@ class AcctColor {
|
|||
appDatabase.replace(table, null, cv)
|
||||
mMemoryCache.remove(key)
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "save failed.")
|
||||
}
|
||||
}
|
||||
|
@ -153,7 +152,6 @@ class AcctColor {
|
|||
}
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "load failed.")
|
||||
}
|
||||
|
||||
|
|
|
@ -72,7 +72,6 @@ object AcctSet : TableCompanion {
|
|||
}
|
||||
bOK = true
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "saveList failed.")
|
||||
}
|
||||
|
||||
|
@ -82,7 +81,6 @@ object AcctSet : TableCompanion {
|
|||
db.execSQL("ROLLBACK TRANSACTION")
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "saveList failed.")
|
||||
}
|
||||
}
|
||||
|
@ -125,7 +123,6 @@ object AcctSet : TableCompanion {
|
|||
return dst
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "searchPrefix failed.")
|
||||
}
|
||||
|
||||
|
|
|
@ -68,23 +68,16 @@ object FavMute : TableCompanion {
|
|||
}
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "acctSet load failed.")
|
||||
}
|
||||
}
|
||||
|
||||
fun contains(acct: Acct): Boolean {
|
||||
var found = false
|
||||
fun contains(acct: Acct): Boolean =
|
||||
try {
|
||||
appDatabase.query(table, null, "$COL_ACCT=?", arrayOf(acct.ascii), null, null, null)
|
||||
.use { cursor ->
|
||||
while (cursor.moveToNext()) {
|
||||
found = true
|
||||
}
|
||||
}
|
||||
?.use { it.moveToNext() }
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
}
|
||||
|
||||
return found
|
||||
}
|
||||
log.e(ex, "contains failed.")
|
||||
null
|
||||
} ?: false
|
||||
}
|
||||
|
|
|
@ -63,7 +63,7 @@ class HighlightWord {
|
|||
try {
|
||||
db.execSQL("alter table $table add column $COL_SPEECH integer default 0")
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "can't add $COL_SPEECH")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -77,9 +77,8 @@ class HighlightWord {
|
|||
}
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "load failed.")
|
||||
}
|
||||
|
||||
return null
|
||||
}
|
||||
|
||||
|
@ -93,14 +92,13 @@ class HighlightWord {
|
|||
null,
|
||||
null,
|
||||
null
|
||||
)
|
||||
.use { cursor ->
|
||||
if (cursor.moveToNext()) {
|
||||
return HighlightWord(cursor)
|
||||
}
|
||||
).use { cursor ->
|
||||
if (cursor.moveToNext()) {
|
||||
return HighlightWord(cursor)
|
||||
}
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "load failed. id=$id")
|
||||
}
|
||||
|
||||
return null
|
||||
|
@ -123,7 +121,7 @@ class HighlightWord {
|
|||
}
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "nameSet failed.")
|
||||
}
|
||||
|
||||
return if (dst.isEmpty) null else dst
|
||||
|
@ -152,7 +150,7 @@ class HighlightWord {
|
|||
}
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "hasTextToSpeechHighlightWord failed.")
|
||||
}
|
||||
hasTextToSpeechHighlightWordCache.set(cached)
|
||||
}
|
||||
|
|
|
@ -6,7 +6,6 @@ import android.database.sqlite.SQLiteDatabase
|
|||
import jp.juggler.subwaytooter.global.appDatabase
|
||||
import jp.juggler.util.LogCategory
|
||||
import jp.juggler.util.TableCompanion
|
||||
import java.util.*
|
||||
|
||||
object MutedApp : TableCompanion {
|
||||
|
||||
|
@ -102,7 +101,7 @@ object MutedApp : TableCompanion {
|
|||
}
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "nameSet failed.")
|
||||
}
|
||||
|
||||
return dst
|
||||
|
|
|
@ -100,7 +100,7 @@ object MutedWord : TableCompanion {
|
|||
}
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "nameSet failed.")
|
||||
}
|
||||
|
||||
return dst
|
||||
|
|
|
@ -170,9 +170,9 @@ class NotificationCache(private val account_db_id: Long) {
|
|||
} catch (ex: Throwable) {
|
||||
if (ex.message?.contains("empty cursor") == true) {
|
||||
// アカウント追加直後に起きるはず
|
||||
log.w(ex, "load failed.")
|
||||
log.w(ex, "empty cursor. (maybe first loading)")
|
||||
} else {
|
||||
log.trace(ex, "load failed.")
|
||||
log.e(ex, "load failed.")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -294,7 +294,7 @@ class NotificationCache(private val account_db_id: Long) {
|
|||
item[KEY_TIME_CREATED_AT] = parseNotificationTime(account, item)
|
||||
data.add(item)
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex, "${account.acct} parseNotificationTime failed.")
|
||||
log.e(ex, "${account.acct} parseNotificationTime failed.")
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -305,7 +305,7 @@ class NotificationCache(private val account_db_id: Long) {
|
|||
onError(result)
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex, "${account.acct} requestAsync failed.")
|
||||
log.e(ex, "${account.acct} requestAsync failed.")
|
||||
} finally {
|
||||
save()
|
||||
}
|
||||
|
@ -326,7 +326,7 @@ class NotificationCache(private val account_db_id: Long) {
|
|||
data.addAll(jsonList)
|
||||
normalize(account)
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex, "inject failed.")
|
||||
log.e(ex, "inject failed.")
|
||||
} finally {
|
||||
save()
|
||||
}
|
||||
|
|
|
@ -150,7 +150,7 @@ class NotificationTracking {
|
|||
try {
|
||||
db.execSQL("drop table if exists $table")
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex, "delete DB failed.")
|
||||
log.e(ex, "delete DB failed.")
|
||||
}
|
||||
onDBCreate(db)
|
||||
return
|
||||
|
@ -165,19 +165,19 @@ class NotificationTracking {
|
|||
try {
|
||||
db.execSQL("drop index if exists ${table}_a")
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "drop index failed.")
|
||||
}
|
||||
try {
|
||||
db.execSQL("alter table $table add column $COL_NOTIFICATION_TYPE text default ''")
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "can't add $COL_NOTIFICATION_TYPE")
|
||||
}
|
||||
try {
|
||||
db.execSQL(
|
||||
"create unique index if not exists ${table}_b on $table ($COL_ACCOUNT_DB_ID,$COL_NOTIFICATION_TYPE)"
|
||||
)
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "can't add index.")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -189,7 +189,7 @@ class NotificationTracking {
|
|||
|
||||
private fun <K : Any, V : Any> ConcurrentHashMap<K, V>.getOrCreate(
|
||||
key: K,
|
||||
creator: () -> V
|
||||
creator: () -> V,
|
||||
): V {
|
||||
var v = this[key]
|
||||
if (v == null) v = creator().also { this[key] = it }
|
||||
|
@ -205,7 +205,7 @@ class NotificationTracking {
|
|||
private fun saveCache(
|
||||
accountDbId: Long,
|
||||
notificationType: String,
|
||||
nt: NotificationTracking
|
||||
nt: NotificationTracking,
|
||||
) {
|
||||
cache.getOrCreate(accountDbId) {
|
||||
ConcurrentHashMap<String, NotificationTracking>()
|
||||
|
@ -275,7 +275,7 @@ class NotificationTracking {
|
|||
}
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex, "load failed.")
|
||||
log.e(ex, "load failed.")
|
||||
} finally {
|
||||
dst.dirty = false
|
||||
}
|
||||
|
|
|
@ -105,7 +105,7 @@ class PostDraft {
|
|||
}
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex, "hasDraft failed.")
|
||||
log.e(ex, "hasDraft failed.")
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
@ -124,7 +124,7 @@ class PostDraft {
|
|||
"$COL_TIME_SAVE desc"
|
||||
)
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex, "createCursor failed.")
|
||||
log.e(ex, "createCursor failed.")
|
||||
null
|
||||
}
|
||||
|
||||
|
@ -141,7 +141,7 @@ class PostDraft {
|
|||
dst.json = try {
|
||||
cursor.getString(colIdx.idx_json).decodeJsonObject()
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "loadFromCursor failed.")
|
||||
JsonObject()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -203,7 +203,7 @@ class SavedAccount(
|
|||
?.entries
|
||||
?.forEach { extraJson[it.key] = it.value }
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "ctor failed.")
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -217,7 +217,7 @@ class SavedAccount(
|
|||
try {
|
||||
appDatabase.delete(table, "$COL_ID=?", arrayOf(db_id.toString()))
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "SavedAccount.delete failed.")
|
||||
errorEx(ex, "SavedAccount.delete failed.")
|
||||
}
|
||||
}
|
||||
|
@ -513,7 +513,7 @@ class SavedAccount(
|
|||
try {
|
||||
db.execSQL("drop table if exists $table")
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "can't delete table $table.")
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -564,7 +564,6 @@ class SavedAccount(
|
|||
return try {
|
||||
SavedAccount(context, cursor)
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "parse failed.")
|
||||
null
|
||||
}
|
||||
|
@ -588,7 +587,7 @@ class SavedAccount(
|
|||
put(COL_MISSKEY_VERSION, misskeyVersion)
|
||||
}.let { appDatabase.insert(table, null, it) }
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "SavedAccount.insert failed.")
|
||||
errorEx(ex, "SavedAccount.insert failed.")
|
||||
}
|
||||
}
|
||||
|
@ -623,7 +622,6 @@ class SavedAccount(
|
|||
log.e("moveToFirst failed. db_id=$dbId")
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "loadAccount failed.")
|
||||
}
|
||||
|
||||
|
@ -647,7 +645,6 @@ class SavedAccount(
|
|||
}
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "loadAccountList failed.")
|
||||
context.showToast(
|
||||
true,
|
||||
|
@ -675,7 +672,6 @@ class SavedAccount(
|
|||
}
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "loadByTag failed.")
|
||||
errorEx(ex, "SavedAccount.loadByTag failed.")
|
||||
}
|
||||
|
@ -700,7 +696,6 @@ class SavedAccount(
|
|||
}
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "loadAccountByAcct failed.")
|
||||
}
|
||||
|
||||
|
@ -725,7 +720,6 @@ class SavedAccount(
|
|||
}
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "hasNonPseudoAccount failed.")
|
||||
}
|
||||
|
||||
|
@ -742,7 +736,6 @@ class SavedAccount(
|
|||
}
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "getCount failed.")
|
||||
errorEx(ex, "SavedAccount.getCount failed.")
|
||||
}
|
||||
|
@ -832,7 +825,6 @@ class SavedAccount(
|
|||
}
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "sweepBuggieData failed.")
|
||||
}
|
||||
|
||||
|
@ -840,7 +832,6 @@ class SavedAccount(
|
|||
try {
|
||||
appDatabase.delete(table, "$COL_ID=?", arrayOf(it.toString()))
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "sweepBuggieData failed.")
|
||||
}
|
||||
}
|
||||
|
@ -936,7 +927,7 @@ class SavedAccount(
|
|||
}
|
||||
return TootApiResult()
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "account confirmation failed.")
|
||||
return TootApiResult(ex.withCaption("account confirmation failed."))
|
||||
}
|
||||
}
|
||||
|
|
|
@ -62,7 +62,6 @@ object SubscriptionServerKey : TableCompanion {
|
|||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.e(ex, "query failed.")
|
||||
log.trace(ex)
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
@ -75,7 +74,6 @@ object SubscriptionServerKey : TableCompanion {
|
|||
appDatabase.replace(table, null, cv)
|
||||
} catch (ex: Throwable) {
|
||||
log.e(ex, "save failed.")
|
||||
log.trace(ex)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,7 +5,6 @@ import android.database.sqlite.SQLiteDatabase
|
|||
import jp.juggler.subwaytooter.global.appDatabase
|
||||
import jp.juggler.util.LogCategory
|
||||
import jp.juggler.util.TableCompanion
|
||||
import java.util.*
|
||||
|
||||
object TagSet : TableCompanion {
|
||||
|
||||
|
@ -77,13 +76,12 @@ object TagSet : TableCompanion {
|
|||
db.execSQL("BEGIN TRANSACTION")
|
||||
try {
|
||||
for (i in 0 until length) {
|
||||
val acct = srcList[i + offset] ?: continue
|
||||
val acct = srcList.elementAtOrNull(i + offset) ?: continue
|
||||
cv.put(COL_TAG, acct)
|
||||
db.replace(table, null, cv)
|
||||
}
|
||||
bOK = true
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "saveList failed.")
|
||||
}
|
||||
|
||||
|
@ -93,7 +91,6 @@ object TagSet : TableCompanion {
|
|||
db.execSQL("ROLLBACK TRANSACTION")
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "saveList failed.")
|
||||
}
|
||||
}
|
||||
|
@ -137,7 +134,6 @@ object TagSet : TableCompanion {
|
|||
}
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "searchPrefix failed.")
|
||||
}
|
||||
|
||||
|
|
|
@ -174,7 +174,6 @@ class UserRelation {
|
|||
}
|
||||
true
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "saveList failed.")
|
||||
false
|
||||
}
|
||||
|
@ -228,7 +227,6 @@ class UserRelation {
|
|||
}
|
||||
true
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "saveList failed.")
|
||||
false
|
||||
}
|
||||
|
@ -262,7 +260,6 @@ class UserRelation {
|
|||
}
|
||||
true
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "saveListMisskeyRelationApi failed.")
|
||||
false
|
||||
}
|
||||
|
@ -321,7 +318,6 @@ class UserRelation {
|
|||
}
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "load failed.")
|
||||
}
|
||||
return UserRelation()
|
||||
|
@ -369,7 +365,7 @@ class UserRelation {
|
|||
try {
|
||||
appDatabase.delete(table, "$COL_ID=$rowId", null)
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex,"deletePseudo failed. rowId=$rowId")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -113,8 +113,8 @@ fun Activity.openBrowser(uri: Uri?) {
|
|||
Intent(Intent.ACTION_VIEW, uri).apply { addCategory(Intent.CATEGORY_BROWSABLE) }
|
||||
)
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
showToast(ex, "can't open. ${intent.data}")
|
||||
log.e(ex, "openBrowser failed. uri=$uri")
|
||||
showToast(ex, "openBrowser failed. uri=$uri")
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -173,9 +173,9 @@ fun Activity.openCustomTab(url: String?, pref: SharedPreferences = pref()) {
|
|||
// Chromeがないようなのでcomponent指定なしでリトライ
|
||||
startCustomTabIntent(null)
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
val scheme = url.mayUri()?.scheme ?: url
|
||||
showToast(true, "can't open browser app for $scheme")
|
||||
val errMsg = "can't open browser app for ${url.mayUri()?.scheme?.notBlank() ?: url}"
|
||||
log.e(ex, errMsg)
|
||||
showToast(true, errMsg)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -345,7 +345,6 @@ fun openCustomTab(
|
|||
|
||||
activity.openCustomTab(url)
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, "openCustomTab failed. $url")
|
||||
}
|
||||
}
|
||||
|
|
|
@ -175,8 +175,8 @@ class AttachmentPicker(
|
|||
val intent = intentGetContent(true, activity.getString(titleId), mimeTypes)
|
||||
arAttachmentChooser.launch(intent)
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
activity.showToast(ex, "ACTION_GET_CONTENT failed.")
|
||||
log.e(ex, "openAttachmentChooser failed.")
|
||||
activity.showToast(ex, "openAttachmentChooser failed.")
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -198,8 +198,8 @@ class AttachmentPicker(
|
|||
|
||||
arCamera.launch(intent)
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
activity.showToast(ex, "opening camera app failed.")
|
||||
log.e(ex, "performCamera failed.")
|
||||
activity.showToast(ex, "performCamera failed.")
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -207,7 +207,7 @@ class AttachmentPicker(
|
|||
try {
|
||||
arCapture.launch(Intent(action))
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
log.e(ex, errorCaption)
|
||||
activity.showToast(ex, errorCaption)
|
||||
}
|
||||
}
|
||||
|
@ -230,8 +230,8 @@ class AttachmentPicker(
|
|||
arrayOf("image/*"))
|
||||
)
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex)
|
||||
activity.showToast(ex, "ACTION_GET_CONTENT failed.")
|
||||
log.e(ex, "openCustomThumbnail failed.")
|
||||
activity.showToast(ex, "openCustomThumbnail failed.")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -246,7 +246,7 @@ class AttachmentUploader(
|
|||
channel = null
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.e(ex)
|
||||
log.e(ex, "can't close channel.")
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -939,7 +939,7 @@ class AttachmentUploader(
|
|||
}
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
log.trace(ex, "setAttachmentDescription failed.")
|
||||
log.e(ex, "setAttachmentDescription failed.")
|
||||
TootApiResult(ex.withCaption("setAttachmentDescription failed."))
|
||||
}
|
||||
return Pair(result, resultAttachment)
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue