|  |  |  | @ -1,13 +1,17 @@ | 
			
		
	
		
			
				
					|  |  |  |  | package io.legado.app.help.book | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | import android.net.Uri | 
			
		
	
		
			
				
					|  |  |  |  | import androidx.documentfile.provider.DocumentFile | 
			
		
	
		
			
				
					|  |  |  |  | import io.legado.app.constant.BookSourceType | 
			
		
	
		
			
				
					|  |  |  |  | import io.legado.app.constant.BookType | 
			
		
	
		
			
				
					|  |  |  |  | import io.legado.app.data.entities.Book | 
			
		
	
		
			
				
					|  |  |  |  | import io.legado.app.data.entities.BookSource | 
			
		
	
		
			
				
					|  |  |  |  | import io.legado.app.help.config.AppConfig.defaultBookTreeUri | 
			
		
	
		
			
				
					|  |  |  |  | import io.legado.app.exception.NoStackTraceException | 
			
		
	
		
			
				
					|  |  |  |  | import io.legado.app.utils.isContentScheme | 
			
		
	
		
			
				
					|  |  |  |  | import io.legado.app.utils.getFile | 
			
		
	
		
			
				
					|  |  |  |  | import java.io.File | 
			
		
	
		
			
				
					|  |  |  |  | import splitties.init.appCtx | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | val Book.isAudio: Boolean | 
			
		
	
	
		
			
				
					|  |  |  | @ -50,10 +54,25 @@ val Book.isOnLineTxt: Boolean | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | fun Book.getLocalUri(): Uri { | 
			
		
	
		
			
				
					|  |  |  |  |     if (isLocal) { | 
			
		
	
		
			
				
					|  |  |  |  |         if (bookUrl.isContentScheme()) { | 
			
		
	
		
			
				
					|  |  |  |  |             return Uri.parse(bookUrl) | 
			
		
	
		
			
				
					|  |  |  |  |          val originBookUri = if (bookUrl.isContentScheme()) { | 
			
		
	
		
			
				
					|  |  |  |  |              Uri.parse(bookUrl) | 
			
		
	
		
			
				
					|  |  |  |  |          } else { | 
			
		
	
		
			
				
					|  |  |  |  |              Uri.fromFile(File(bookUrl)) | 
			
		
	
		
			
				
					|  |  |  |  |          } | 
			
		
	
		
			
				
					|  |  |  |  |         //不同的设备书籍保存路径可能不一样 优先尝试寻找当前保存路径下的文件 | 
			
		
	
		
			
				
					|  |  |  |  |         defaultBookTreeUri ?: return originBookUri | 
			
		
	
		
			
				
					|  |  |  |  |         val treeUri = Uri.parse(defaultBookTreeUri) | 
			
		
	
		
			
				
					|  |  |  |  |         return if (treeUri.isContentScheme()) { | 
			
		
	
		
			
				
					|  |  |  |  |             DocumentFile.fromTreeUri(appCtx, treeUri)?.run { | 
			
		
	
		
			
				
					|  |  |  |  |                 findFile(originName)?.let { | 
			
		
	
		
			
				
					|  |  |  |  |                     if (it.exists()) it.uri else originBookUri | 
			
		
	
		
			
				
					|  |  |  |  |                 } ?: originBookUri | 
			
		
	
		
			
				
					|  |  |  |  |             } ?: originBookUri | 
			
		
	
		
			
				
					|  |  |  |  |         } else { | 
			
		
	
		
			
				
					|  |  |  |  |             val treeFile = File(treeUri.path!!) | 
			
		
	
		
			
				
					|  |  |  |  |             val file = treeFile.getFile(originName) | 
			
		
	
		
			
				
					|  |  |  |  |             if (file.exists()) Uri.fromFile(file) else originBookUri | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  |         return Uri.fromFile(File(bookUrl)) | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  |     throw NoStackTraceException("不是本地书籍") | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
	
		
			
				
					|  |  |  | 
 |