From 72afbaf9258049d2cf1dfd21dce1878b3370828a Mon Sep 17 00:00:00 2001 From: "Darryl L. Pierce" Date: Thu, 17 Jul 2025 07:06:48 -0400 Subject: [PATCH] Added an icon to indicate a file is downloading [#132] Also hid the filename to display the downloading progress bar. --- .../android/view/server/FileItemView.kt | 71 +++++++++++------- .../res/drawable-anydpi/ic_download_file.xml | 20 +++++ .../drawable-anydpi/ic_downloaded_file.xml | 11 +++ .../drawable-anydpi/ic_downloading_file.xml | 19 +++++ .../res/drawable-hdpi/ic_download_file.png | Bin 0 -> 953 bytes .../res/drawable-hdpi/ic_downloaded_file.png | Bin 0 -> 407 bytes .../res/drawable-hdpi/ic_downloading_file.png | Bin 0 -> 352 bytes .../res/drawable-mdpi/ic_download_file.png | Bin 0 -> 575 bytes .../res/drawable-mdpi/ic_downloaded_file.png | Bin 0 -> 280 bytes .../res/drawable-mdpi/ic_downloading_file.png | Bin 0 -> 263 bytes .../res/drawable-xhdpi/ic_download_file.png | Bin 0 -> 1109 bytes .../res/drawable-xhdpi/ic_downloaded_file.png | Bin 0 -> 455 bytes .../drawable-xhdpi/ic_downloading_file.png | Bin 0 -> 465 bytes .../res/drawable-xxhdpi/ic_download_file.png | Bin 0 -> 1854 bytes .../drawable-xxhdpi/ic_downloaded_file.png | Bin 0 -> 661 bytes .../drawable-xxhdpi/ic_downloading_file.png | Bin 0 -> 677 bytes .../download_file.imageset/Contents.json | 21 ++++++ .../reshot-icon-download-X8QHVZ4YUF.svg | 1 + .../downloaded_file.imageset/Contents.json | 21 ++++++ .../reshot-icon-book-SG9XMHP48E.svg | 10 +++ .../downloading_file.imageset/Contents.json | 21 ++++++ .../reshot-icon-download-2CGFX4ZBLJ.svg | 1 + .../Views/Servers/FileItemView.swift | 29 +++++-- .../variant/viewmodel/VariantViewModel.kt | 5 +- 24 files changed, 195 insertions(+), 35 deletions(-) create mode 100644 androidVariant/src/main/res/drawable-anydpi/ic_download_file.xml create mode 100644 androidVariant/src/main/res/drawable-anydpi/ic_downloaded_file.xml create mode 100644 androidVariant/src/main/res/drawable-anydpi/ic_downloading_file.xml create mode 100644 androidVariant/src/main/res/drawable-hdpi/ic_download_file.png create mode 100644 androidVariant/src/main/res/drawable-hdpi/ic_downloaded_file.png create mode 100644 androidVariant/src/main/res/drawable-hdpi/ic_downloading_file.png create mode 100644 androidVariant/src/main/res/drawable-mdpi/ic_download_file.png create mode 100644 androidVariant/src/main/res/drawable-mdpi/ic_downloaded_file.png create mode 100644 androidVariant/src/main/res/drawable-mdpi/ic_downloading_file.png create mode 100644 androidVariant/src/main/res/drawable-xhdpi/ic_download_file.png create mode 100644 androidVariant/src/main/res/drawable-xhdpi/ic_downloaded_file.png create mode 100644 androidVariant/src/main/res/drawable-xhdpi/ic_downloading_file.png create mode 100644 androidVariant/src/main/res/drawable-xxhdpi/ic_download_file.png create mode 100644 androidVariant/src/main/res/drawable-xxhdpi/ic_downloaded_file.png create mode 100644 androidVariant/src/main/res/drawable-xxhdpi/ic_downloading_file.png create mode 100644 iosVariant/iosVariant/Assets.xcassets/download_file.imageset/Contents.json create mode 100644 iosVariant/iosVariant/Assets.xcassets/download_file.imageset/reshot-icon-download-X8QHVZ4YUF.svg create mode 100644 iosVariant/iosVariant/Assets.xcassets/downloaded_file.imageset/Contents.json create mode 100644 iosVariant/iosVariant/Assets.xcassets/downloaded_file.imageset/reshot-icon-book-SG9XMHP48E.svg create mode 100644 iosVariant/iosVariant/Assets.xcassets/downloading_file.imageset/Contents.json create mode 100644 iosVariant/iosVariant/Assets.xcassets/downloading_file.imageset/reshot-icon-download-2CGFX4ZBLJ.svg diff --git a/androidVariant/src/main/java/org/comixedproject/variant/android/view/server/FileItemView.kt b/androidVariant/src/main/java/org/comixedproject/variant/android/view/server/FileItemView.kt index f998a02..7100e51 100644 --- a/androidVariant/src/main/java/org/comixedproject/variant/android/view/server/FileItemView.kt +++ b/androidVariant/src/main/java/org/comixedproject/variant/android/view/server/FileItemView.kt @@ -23,9 +23,6 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.AddCircle -import androidx.compose.material.icons.filled.Check import androidx.compose.material3.CardDefaults import androidx.compose.material3.ElevatedCard import androidx.compose.material3.Icon @@ -37,12 +34,14 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.res.painterResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import org.comixedproject.variant.android.DIRECTORY_LIST +import org.comixedproject.variant.android.R import org.comixedproject.variant.android.VariantTheme import org.comixedproject.variant.android.view.BYTES_PER_MB import org.comixedproject.variant.model.library.DirectoryEntry @@ -78,23 +77,39 @@ fun FileItemView( horizontalArrangement = Arrangement.SpaceBetween, modifier = Modifier.fillMaxWidth() ) { - if (comicBookFilenameList.contains(fileEntry.filename)) { - IconButton( - onClick = { - - }, - enabled = downloadingState.size < 5 - ) { - Icon(Icons.Filled.Check, contentDescription = fileEntry.title) + if (downloading == null) { + if (comicBookFilenameList.contains(fileEntry.filename)) { + IconButton( + onClick = { }, + enabled = downloadingState.size < 5 + ) { + Icon( + painterResource(id = R.drawable.ic_downloaded_file), + contentDescription = fileEntry.title + ) + } + } else { + IconButton( + onClick = { + onDownloadFile(fileEntry.path, fileEntry.filename) + }, + enabled = downloadingState.size < 5 + ) { + Icon( + painterResource(R.drawable.ic_download_file), + contentDescription = fileEntry.title + ) + } } } else { IconButton( - onClick = { - onDownloadFile(fileEntry.path, fileEntry.filename) - }, + onClick = { }, enabled = downloadingState.size < 5 ) { - Icon(Icons.Filled.AddCircle, contentDescription = fileEntry.title) + Icon( + painterResource(R.drawable.ic_downloading_file), + contentDescription = fileEntry.title + ) } } @@ -107,18 +122,19 @@ fun FileItemView( maxLines = 1, overflow = TextOverflow.Ellipsis ) - Text( - text = "${fileEntry.filename}", - style = MaterialTheme.typography.bodySmall, - fontWeight = FontWeight.Bold, - textAlign = TextAlign.Left, - maxLines = 1, - overflow = TextOverflow.Ellipsis - ) - downloading?.let { - val received = it.received - val total = it.total + if (downloading == null) { + Text( + text = "${fileEntry.filename}", + style = MaterialTheme.typography.bodySmall, + fontWeight = FontWeight.Bold, + textAlign = TextAlign.Left, + maxLines = 1, + overflow = TextOverflow.Ellipsis + ) + } else { + val received = downloading.received + val total = downloading.total val progress = when (received > 0) { true -> (received.toFloat() / total.toFloat()) false -> 0.0 @@ -146,9 +162,10 @@ fun FileItemView( @Composable @Preview fun FileItemViewPreview() { + val fileEntry = DIRECTORY_LIST.filter { !it.isDirectory }.first() VariantTheme { FileItemView( - DIRECTORY_LIST.filter { !it.isDirectory }.first(), + fileEntry, listOf(), listOf(), onDownloadFile = { _, _ -> }) diff --git a/androidVariant/src/main/res/drawable-anydpi/ic_download_file.xml b/androidVariant/src/main/res/drawable-anydpi/ic_download_file.xml new file mode 100644 index 0000000..fc2f641 --- /dev/null +++ b/androidVariant/src/main/res/drawable-anydpi/ic_download_file.xml @@ -0,0 +1,20 @@ + + + + + + diff --git a/androidVariant/src/main/res/drawable-anydpi/ic_downloaded_file.xml b/androidVariant/src/main/res/drawable-anydpi/ic_downloaded_file.xml new file mode 100644 index 0000000..a6137e1 --- /dev/null +++ b/androidVariant/src/main/res/drawable-anydpi/ic_downloaded_file.xml @@ -0,0 +1,11 @@ + + + diff --git a/androidVariant/src/main/res/drawable-anydpi/ic_downloading_file.xml b/androidVariant/src/main/res/drawable-anydpi/ic_downloading_file.xml new file mode 100644 index 0000000..b473b33 --- /dev/null +++ b/androidVariant/src/main/res/drawable-anydpi/ic_downloading_file.xml @@ -0,0 +1,19 @@ + + + + + + diff --git a/androidVariant/src/main/res/drawable-hdpi/ic_download_file.png b/androidVariant/src/main/res/drawable-hdpi/ic_download_file.png new file mode 100644 index 0000000000000000000000000000000000000000..120605185fa013840089cf17df70cac32b6409fc GIT binary patch literal 953 zcmV;q14jIbP)_u4-#8yjKnr!=Catp19UPKZ7Ak+_*1qDUFmPSbwmS$@B?!WDvb?*4h zac1X{9{AXq?|JV1?%cUMxm*U+>-9#hR{Pj!G-hzUjNf$%uOYLrO;oGZmd5QUDwRqN zMdzB$=HE1en0XFB^JPZ6-R{*QS!G~g;JD^b1&r*SCZ%B1t7yq>{GJ^g9PEYc^Q4zL zwComsmo$z7+k35(2-+Ty+klM2lvm#_$Rp2l#>#-^VcVn5kX}EU2z$ZnHp1{4!9_7uW@}( zeZl||cg%<%s67nWLT;Km8~y$Lht-Eq)QU+wrS>RfAwL$LkXI%q7XL|T)Wu>A{_qWkOzfjrEEf0o_4OTb_fdqnF6is-qp+p+XzvgvLc6?^?{bOoRx|lx?3O zvqqcxcR`R4ZkAoLxPB|b+Lxs57B)wxWlgiFvEol_KpeQ&FcD`aEg1qePrCZt0@$)I zhR}!xBms`OJ%vJ{NA*bn5<`a2v?~5+z;1&zP5q&c(kUq7zv~FCjke7gmM^y4w*Vji z41?YHnc5X-|09$0uG$IYeC&JzFIO1+Q(WiK3ju8Y@ssNgMMk>`d?peQ^7k_S?^C0{ zr{MZ+z_@AmXDF?N5rXcuskeO+8fFXkk_?M|#|UBXxnk`&W*@V59|(M79T8Y^HuU%$ zboa9e3Z6GL{L?8VtQ!F!VAclkK(0PnfdTqwFOSTe`h+2GgD4>RNuAQdE^;TiH2+>f z;;WG23-Dzw#S1vM`QjY+V(rX)qfMP-f#5M6l}B!siyjBMGhC4FV*{_LgU_`_#K(qu z#6Fi8-uc)+5o8tSNPC*-3MAzRtKV8EP7pJRo&AF5+fncX1fNFR7H)13wsL{%4^QVs bjZ1=m<{VSEx=lV|00000NkvXXu0mjfax}+a literal 0 HcmV?d00001 diff --git a/androidVariant/src/main/res/drawable-hdpi/ic_downloaded_file.png b/androidVariant/src/main/res/drawable-hdpi/ic_downloaded_file.png new file mode 100644 index 0000000000000000000000000000000000000000..0c1e302b3543ec484bb39e734fe595e06bfd8f82 GIT binary patch literal 407 zcmV;I0cie-P);w<{ z!AFyw8Ro}y1KA7)mWrY{hhNLG{HUtxQ_5ME1$OV6!Z6$g#M~~FG7ChBn9d5miK1xF z&T%0%eHJLs^D_d9m-^^k|f7Qt%wL{lXVg; zq-lC&)QX6JFp()9qDOf4FMwzd;rh@6nesrKJP;=j#K{A3@<5zC5GN1B=}$m-(ce+0 z4jhg4T^oJgegibdE9Dd2OS%(KpY9BV3BBt;4`P9EJN!wP*H$3xp^1^(5TkghE|9kB{{^d6F>hVH@_YaQ002ovPDHLkV1num Bv={&Y literal 0 HcmV?d00001 diff --git a/androidVariant/src/main/res/drawable-hdpi/ic_downloading_file.png b/androidVariant/src/main/res/drawable-hdpi/ic_downloading_file.png new file mode 100644 index 0000000000000000000000000000000000000000..926e45669edd4bb78083535d20e1f040f5dc6df3 GIT binary patch literal 352 zcmV-m0iXVfP)kfccu_FON8dhj&_A3>z*MI*MCzHPq&1NxCNiklT-elUm3 z&Yv$6vMk$bT}coG-84=2Ns@erVfeu7-pR7;_t<#dJ0?iO1ZkKc4HKkcf;3E!h6&QR zrJyzrVpAN%eqiIu`JW)fj1I9g$*ug(K;hTp#(4e^f1Mz#y;JPlX*CC+=zyDJVv`!* zC;MIi*K>hj_#raJjliF}|Hi#)DmXjL;qUJ1uCgV>`1w<`b z416n&^GO@i*wSa}aFBN}m0=@$jdAxBMbSU(Ii(AeA0W^3NA7bLa?O&}>@hA3FWTdN yDp3?YaUoY0$MG}wI}5pp;$qhtYVNp?aS4B&X({Dbp8yyD0000J%=P)*_T5E^XAdY9^V% z2Ss}7y;{0@rZYAcfnu?^QK?i~)oS$vzuz>jVbA2OJ~qnb@(Ggs#xZJb{7_^vnK=aX zB(PU1m0J0He#PqO1NY);bGh8C)eQgv4ebh}I7gC6tFfR4+6#?CjvcGkfU_yYWnUgZLObNzk_t3%EmLUv zPOTa-^H>G&l1%9|JO?V(rNFDvdVv2}mVpB3_NcGygSliEb&4MO5cVoUuye!kwOVaK#`xsFDZIF>@V{U# zDX{4|C9c9i!eU$p%MJ7rO1_|^%F#y8-uyuNUl@Y?_YMju+(W24KvmAqLk#k z>;})uT-Sb)xIofFjmIt)E$;!ut|Pilr_<9`W06XwW}v-unj8IJ0>P4wi@&8If0@~A zc9opbE?HeD(9s0!%+7k4@g+gnxXlv_IGc48dyxC6OXC_z@5x!c#UHV_0xG|QPpbd` N002ovPDHLkV1fXs64n3! literal 0 HcmV?d00001 diff --git a/androidVariant/src/main/res/drawable-mdpi/ic_downloaded_file.png b/androidVariant/src/main/res/drawable-mdpi/ic_downloaded_file.png new file mode 100644 index 0000000000000000000000000000000000000000..ce9f71e4d93942467cd9f8f97653cbd11bbdce69 GIT binary patch literal 280 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`Gj_dQ)4Ln`8u6B?LmYipg8lOM|| zD=(H*Q&TfOd6bQfjmg0HA%n(4)=4Z;7dW;k^vLjBk?%auG~waY7mt=Oh>D7q?Ga

5(yYV4 ZU^ek{>_PT#&w*ZL@O1TaS?83{1ON+hUX1_% literal 0 HcmV?d00001 diff --git a/androidVariant/src/main/res/drawable-mdpi/ic_downloading_file.png b/androidVariant/src/main/res/drawable-mdpi/ic_downloading_file.png new file mode 100644 index 0000000000000000000000000000000000000000..367821fcbf3097eb9fe990eaea470afc8d489132 GIT binary patch literal 263 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`Gj=R92;Ln`8u6BOhOq@|_(84?Ag zV<#moShVO+UQ&{gaEoJ3NoCi;6|5{!9ML#&qTq%UgLAAKH%2l{Ie+o`b#s@iu1pP* z940G-?=mfj5bx<<*PoG)krBac%<^LL${RNnOke!+U~*tSmDsj0d4ayy#jBH98}yEC zU{PsX*Qdl_vVrsD)2}Z+g)lla2RDi>UC`Zcuwdy@RmN527nP?9u)Sn_>1xi;%rH4s zXIEO1p@;siN(qJ;-ai{AMzWOz8h7q+iH)5re%EFeGsAC@p2A#~HOWAqF?hQAxvXRCazCf6%?0Bi>?3GbK*>T zbMhrKcV?0v_(*#1`Of#Mu)$!gT3wg$@;2y}~6LWAdJ)J8*YYTV3# z@T>+?K}o1FYz6OX4b(ah2<}jb3E2`({?zh|R zk~(<-LMwxkuhnW7l%Ez@!B$j1Y6Lp4q5MQZ@3d5q2Emug%?n8QmBynn7v&B`wOT!4 z^}M%G3Rt7TT$qz`O`wNobfuvH?3{8(1vKKkc3`+E&M3DJApJIaz&m->(E2#A5vl?E zrMw;>(HrW72DO!!1gfL;Nx)rNbztkti!iBE2YeM zlo+KJX39O~Oel$)jFNnydRp%T>^W;ltsIrO>hmd9Y))P&e+x3H&W zG2lqKzR;>hb!MxUekF%dnRm(_6)xI^ofPt#r=ROWj`!Ef&l)hQ0>)ruyT)D{;P z=T$Ebu0L~U19sg)bw~pAOih!EGy14b61W=3eTP%1=lGxwNx_k@rjr^usYMEJl4%J+q6?qq(5Eud%S-A3>`%aoS}Zm!V$ z(YK7|707+C^XPfPSVljx0ngpSq#IchKzk|coOjWZjSL;LndvAoZZza5QIB2{yM?rZ z$6;=aun%(tdi{%AfniU4z#13O``4xSKXfb60PhQpFJIy7uY7$+WnC#(U4laSS|0}= zf2=+i4gSHElE4r>Fh~QT+^nYhE|iNIb5}Wp*J~9O&1$M20Xe*Jd7a~f^;(4hq37Ni zI+!oEl$X_1pRitR@nKe85AqLo0Tvcw~K%6y=%Ul)~7LF-*D7en5P$>3Jxp@KF?=@Z+Gu>ejj!kPM zXibmTA#u=M)=7Ln?bWjj{xYJ^gajGMk9>^DsjN<^(ER_a&9(-SfVut5%9W5Y)ju;h z)Wb$2t3mq@KG!sE-k8L+e4@d#8b;<3wKdo%F~#{0`=-exHTZtTntzE}Dn54bcGNh8 bf4BJu+brpurYkyp00000NkvXXu0mjf-ryIW literal 0 HcmV?d00001 diff --git a/androidVariant/src/main/res/drawable-xhdpi/ic_downloaded_file.png b/androidVariant/src/main/res/drawable-xhdpi/ic_downloaded_file.png new file mode 100644 index 0000000000000000000000000000000000000000..e069f23d1142595165ef3a5b12b2e8707105140a GIT binary patch literal 455 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezr3(F!p)6IEGZjy`8n&>xhF$n{tQ$ zg1OUAskLm_X)ZCj z^UWOd^Pf#`eqVp^`#fK<2i@&w=AKD5id>-4rMvC3x5?TQc7`)`8f5RM@2*$=e4~Id zK5=n>X2b6TP26VFx%LYk5Vc4zUio1?%MZzdY~x0W84Rpm#NkN_8PlA=?4_wykk#PVqqhtw%5}6w>nP5@!+`(%}SX`rA$&OX_b-j8|9*C?GuVCl1 XdfGB+OSnETf*3qq{an^LB{Ts59+AKR literal 0 HcmV?d00001 diff --git a/androidVariant/src/main/res/drawable-xhdpi/ic_downloading_file.png b/androidVariant/src/main/res/drawable-xhdpi/ic_downloading_file.png new file mode 100644 index 0000000000000000000000000000000000000000..2106d77d3528dd5c7a5548d5ad0897ffa396d8b3 GIT binary patch literal 465 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezr3(FwXFFaSW-5dpqm2*I@^VR_$x8 zcXtRowyayMHZw--=E{79ysjN3sy~<(^)Cp}Uy%R0{=$JT7q%Ft>K*!jaAB(6|2dO= zCQm6dDRK!E5l@Xgx6tPN`5pFIN4_jswMswQ_wt)hJ2DK9#S}7FDo?l3i%K~iQ_QgC z1Sil3~o-N7)Z0o~odlcITSHm}@wDCWw8Mf+|};(sbVJ6iqB!5BR;7RyQ2NiXL5mT@K3I=_c6=$`vs59sNT13_q3KB$@0w)AMHD0$9A~2wzHPU?b}mc@p9dp z+l;?$6nuLAzr5d*uUD2nIajN*UN|nkb85cDUMZhBOBzCeQN`ft>gTe~DWM4fi-Oue literal 0 HcmV?d00001 diff --git a/androidVariant/src/main/res/drawable-xxhdpi/ic_download_file.png b/androidVariant/src/main/res/drawable-xxhdpi/ic_download_file.png new file mode 100644 index 0000000000000000000000000000000000000000..74f59e8df3019ebc32fd21264ec9404f0dfcd1b8 GIT binary patch literal 1854 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 literal 0 HcmV?d00001 diff --git a/iosVariant/iosVariant/Assets.xcassets/download_file.imageset/Contents.json b/iosVariant/iosVariant/Assets.xcassets/download_file.imageset/Contents.json new file mode 100644 index 0000000..73a0dda --- /dev/null +++ b/iosVariant/iosVariant/Assets.xcassets/download_file.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "reshot-icon-download-X8QHVZ4YUF.svg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iosVariant/iosVariant/Assets.xcassets/download_file.imageset/reshot-icon-download-X8QHVZ4YUF.svg b/iosVariant/iosVariant/Assets.xcassets/download_file.imageset/reshot-icon-download-X8QHVZ4YUF.svg new file mode 100644 index 0000000..607545e --- /dev/null +++ b/iosVariant/iosVariant/Assets.xcassets/download_file.imageset/reshot-icon-download-X8QHVZ4YUF.svg @@ -0,0 +1 @@ +11.download \ No newline at end of file diff --git a/iosVariant/iosVariant/Assets.xcassets/downloaded_file.imageset/Contents.json b/iosVariant/iosVariant/Assets.xcassets/downloaded_file.imageset/Contents.json new file mode 100644 index 0000000..db67733 --- /dev/null +++ b/iosVariant/iosVariant/Assets.xcassets/downloaded_file.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "reshot-icon-book-SG9XMHP48E.svg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iosVariant/iosVariant/Assets.xcassets/downloaded_file.imageset/reshot-icon-book-SG9XMHP48E.svg b/iosVariant/iosVariant/Assets.xcassets/downloaded_file.imageset/reshot-icon-book-SG9XMHP48E.svg new file mode 100644 index 0000000..42644df --- /dev/null +++ b/iosVariant/iosVariant/Assets.xcassets/downloaded_file.imageset/reshot-icon-book-SG9XMHP48E.svg @@ -0,0 +1,10 @@ + + + + + + diff --git a/iosVariant/iosVariant/Assets.xcassets/downloading_file.imageset/Contents.json b/iosVariant/iosVariant/Assets.xcassets/downloading_file.imageset/Contents.json new file mode 100644 index 0000000..3600d1c --- /dev/null +++ b/iosVariant/iosVariant/Assets.xcassets/downloading_file.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "reshot-icon-download-2CGFX4ZBLJ.svg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iosVariant/iosVariant/Assets.xcassets/downloading_file.imageset/reshot-icon-download-2CGFX4ZBLJ.svg b/iosVariant/iosVariant/Assets.xcassets/downloading_file.imageset/reshot-icon-download-2CGFX4ZBLJ.svg new file mode 100644 index 0000000..3c9a759 --- /dev/null +++ b/iosVariant/iosVariant/Assets.xcassets/downloading_file.imageset/reshot-icon-download-2CGFX4ZBLJ.svg @@ -0,0 +1 @@ +Artboard-154 \ No newline at end of file diff --git a/iosVariant/iosVariant/Views/Servers/FileItemView.swift b/iosVariant/iosVariant/Views/Servers/FileItemView.swift index fa922e0..265e334 100644 --- a/iosVariant/iosVariant/Views/Servers/FileItemView.swift +++ b/iosVariant/iosVariant/Views/Servers/FileItemView.swift @@ -28,7 +28,7 @@ struct FileItemView: View { var onDownloadFile: (String, String) -> Void - var isDownloaded: Bool { + var downloaded: Bool { return comicBookFiles.contains(entry.filename) } @@ -52,11 +52,23 @@ struct FileItemView: View { var body: some View { HStack { - if isDownloaded { + if downloaded { Button { } label: { - Image(systemName: "checkmark.circle.fill") + Image("downloaded_file") + .resizable() + .scaledToFit() + .frame(width: 32) + } + } else if downloading { + Button { + + } label: { + Image("downloading_file") + .resizable() + .scaledToFit() + .frame(width: 32) } } else { Button { @@ -66,7 +78,10 @@ struct FileItemView: View { ) onDownloadFile(entry.path, entry.filename) } label: { - Image(systemName: "plus.circle.fill") + Image("download_file") + .resizable() + .scaledToFit() + .frame(width: 32) } } @@ -74,14 +89,14 @@ struct FileItemView: View { Text(entry.title) .font(.headline) - Text(entry.filename) - .font(.subheadline) - if downloading { HStack { Text("\(fileSize) MB") ProgressView(value: downloadProgress) } + } else { + Text(entry.filename) + .font(.subheadline) } } } diff --git a/shared/src/commonMain/kotlin/org/comixedproject/variant/viewmodel/VariantViewModel.kt b/shared/src/commonMain/kotlin/org/comixedproject/variant/viewmodel/VariantViewModel.kt index 17d2834..8e5db88 100644 --- a/shared/src/commonMain/kotlin/org/comixedproject/variant/viewmodel/VariantViewModel.kt +++ b/shared/src/commonMain/kotlin/org/comixedproject/variant/viewmodel/VariantViewModel.kt @@ -254,9 +254,10 @@ open class VariantViewModel( } val finalState = - _browsingState.value.downloadingState.filter { !(it.path == path) } + _browsingState.value.downloadingState.filter { !(it.path.equals(path)) } .toMutableList() doUpdateDownloadingState(finalState) + loadLibraryContents() } } @@ -330,8 +331,10 @@ open class VariantViewModel( path.directoryFiles() .filter { if (!ignored.contains(it.name)) { + Log.debug(TAG, "File is not ignored: ${it.name}") true } else { + Log.debug(TAG, "File is ignored: ${it.name}") false } }