Jelajahi Sumber

Remove FileUtil.readerFolder and init()

To avoid reader folder null caused by no FileUtil initializing.
Wayne 5 tahun lalu
induk
melakukan
bcd04f52cb

+ 2 - 3
src/main/java/com/kdanmobile/reader/copyfile/CopyFileActivity.kt

@@ -24,10 +24,9 @@ abstract class CopyFileActivity : KdanBaseActivity(), ReadModuleKoinComponent {
     }
 
     private val viewModel: CopyFileViewModel by viewModel {
-        val kdanPdfReaderFolder = getKdanPdfReaderFolder()
-        FileUtil.init(kdanPdfReaderFolder)
+        val kdanPdfReaderFolder = getKdanPdfReaderFolder().apply { if (!exists()) mkdirs() }
         val info = CopyFileInfoFactory().createInfo(this, intent, kdanPdfReaderFolder)
-        parametersOf(applicationContext, info)
+        parametersOf(applicationContext, info, kdanPdfReaderFolder)
     }
 
     override fun onCreate(savedInstanceState: Bundle?) {

+ 3 - 10
src/main/java/com/kdanmobile/reader/copyfile/CopyFileTask.kt

@@ -7,7 +7,7 @@ import io.reactivex.Observer
 import java.io.*
 import java.lang.NullPointerException
 
-class CopyFileTask {
+class CopyFileTask(private val targetFolder: File) {
 
     interface ProgressListener {
         fun onCopySizeUpdated(currentCopySize: Long)
@@ -20,7 +20,6 @@ class CopyFileTask {
     }
 
     private val BUFFER_SIZE = 1024
-    private var targetFolder: File? = null
     private var copyMode = Mode.DO_NOTHING_IF_FILE_EXIST
     private var copySizeProgressListener: ProgressListener? = null
 
@@ -28,22 +27,17 @@ class CopyFileTask {
         this.copyMode = copyMode
     }
 
-    fun setTargetFolder(targetFolder: File?) {
-        this.targetFolder = targetFolder
-    }
-
     fun setCopySizeProgressListener(copySizeProgressListener: ProgressListener?) {
         this.copySizeProgressListener = copySizeProgressListener
     }
 
     private fun generateUniqueFile(fileName: String): File {
-        val readerFolder = FileUtil.getKdanPDFReaderFolder()
         val name = FileUtil.removeExtension(fileName)
         val extension = FileUtil.getExtension(fileName)
-        var file = File(readerFolder, "$name.$extension")
+        var file = File(targetFolder, "$name.$extension")
         var index = 2
         while (file.exists()) {
-            file = File(readerFolder, "$name($index).$extension")
+            file = File(targetFolder, "$name($index).$extension")
             index++
         }
         return file
@@ -51,7 +45,6 @@ class CopyFileTask {
 
     fun generateUniqueFilePath(source: CopyFileSource?): String? {
         if (copyMode == Mode.DO_NOTHING) return null
-        if (null == targetFolder) return null
         if (null == source) return null
 
         val srcFileName = source.getFileName()

+ 2 - 2
src/main/java/com/kdanmobile/reader/copyfile/CopyFileViewModel.kt

@@ -30,6 +30,7 @@ import java.lang.Exception
 
 class CopyFileViewModel(applicationContext: Context,
                         private val info: CopyFileInfo,
+                        private val copiedFileFolder: File,
                         private val eventManager: EventManager<Event> = EventManager()
 ): ViewModel(), EventBroadcaster<CopyFileViewModel.Event> by eventManager {
 
@@ -72,9 +73,8 @@ class CopyFileViewModel(applicationContext: Context,
         }
 
         val fullFileSize = Math.max(1, source?.getFileSize() ?: 1)
-        val task = CopyFileTask()
+        val task = CopyFileTask(copiedFileFolder)
         task.setCopyMode(CopyFileTask.Mode.CREATE_NEW_FILE)
-        task.setTargetFolder(FileUtil.getKdanPDFReaderFolder())
         dstFilePath = task.generateUniqueFilePath(source)
 
         copyFileDisposable = task.copyFile(source)

+ 3 - 2
src/main/java/com/kdanmobile/reader/koin/KoinModule.kt

@@ -11,12 +11,13 @@ import com.kdanmobile.reader.ReaderViewModel
 import com.kdanmobile.reader.thumb.PdfThumbViewModel
 import org.koin.android.viewmodel.dsl.viewModel
 import org.koin.dsl.module
+import java.io.File
 
 internal object KoinModule {
     val m = module {
         single { ReaderModelManager() }
-        viewModel { (applicationContext: Context, info: CopyFileInfo) ->
-            CopyFileViewModel(applicationContext, info)
+        viewModel { (applicationContext: Context, info: CopyFileInfo, copiedFileFolder: File) ->
+            CopyFileViewModel(applicationContext, info, copiedFileFolder)
         }
         viewModel { (uri: Uri) ->
             ReaderViewModel(

+ 0 - 14
src/main/java/com/kdanmobile/reader/thumb/FileUtil.kt

@@ -4,25 +4,11 @@ import java.io.*
 import kotlin.collections.ArrayList
 
 object FileUtil {
-    private var readerFolder: File? = null
     private const val EXTENSION_SEPARATOR = '.'
     private const val UNIX_SEPARATOR = '/'
     private const val NOT_FOUND = -1
     private const val WINDOWS_SEPARATOR = '\\'
 
-    @Synchronized
-    fun init(folder: File) {
-        if (!folder.exists() || !folder.isDirectory) {
-            folder.mkdirs()
-        }
-        readerFolder = folder
-    }
-
-    @Synchronized
-    fun getKdanPDFReaderFolder(): File? {
-        return readerFolder
-    }
-
     fun generateSelectedPagesString(selectPage: ArrayList<Int>): String {
         val pages = StringBuffer()
         for (n in selectPage) {

+ 3 - 1
src/main/java/com/kdanmobile/reader/thumb/PdfThumbDialogFragment.kt

@@ -43,6 +43,7 @@ abstract class PdfThumbDialogFragment:
     abstract fun getPadding(): Int
     abstract fun getColumns(): Int
     abstract fun getCreateExtractBlankFile(pdfFilename: String, selectPage: String): File
+    abstract fun getKdanPdfReaderFolder(): File
 
     private val readerViewModel: ReaderViewModel by sharedViewModel()
     private val viewModel: PdfThumbViewModel by viewModel { parametersOf(readerViewModel.readerModel) }
@@ -288,7 +289,8 @@ abstract class PdfThumbDialogFragment:
             getSubscribeRunnable().run()
         } else {
             val pagesForFile = FileUtil.generateSelectedPagesString(viewModel.getSelectPage())
-            val dst = FileUtil.createExtractBlankFile(viewModel.pdfInfoHandler.getOpenPdfFilename(), pagesForFile, FileUtil.getKdanPDFReaderFolder())
+            val dstFolder = getKdanPdfReaderFolder().apply{ if (!exists()) mkdirs() }
+            val dst = FileUtil.createExtractBlankFile(viewModel.pdfInfoHandler.getOpenPdfFilename(), pagesForFile, dstFolder)
             val runnable = Runnable {
                 val filePath = String.format("/%s/%s", dst.parentFile.name, dst.name)
                 val msg = getString(R.string.pdf_thumb_extract_page_suc_dialog_msg, filePath)