mirror of
https://github.com/libre-tube/LibreTube.git
synced 2025-04-28 07:50:31 +05:30
Merge pull request #6952 from Bnyro/master
fix: backup file names contain (for some file systems) invalid char ':'
This commit is contained in:
commit
83d257d513
@ -201,7 +201,7 @@ object ImportHelper {
|
||||
|
||||
val playlistName = lines[1].split(",").reversed().getOrNull(2)
|
||||
// the playlist name can be undefined in some cases, e.g. watch later lists
|
||||
playlist.name = playlistName ?: TextUtils.defaultPlaylistName
|
||||
playlist.name = playlistName ?: TextUtils.getFileSafeTimeStampNow()
|
||||
|
||||
// start directly at the beginning if header playlist info such as name is missing
|
||||
val startIndex = if (playlistName == null) {
|
||||
@ -235,7 +235,7 @@ object ImportHelper {
|
||||
|
||||
ImportFormat.URLSORIDS -> {
|
||||
activity.contentResolver.openInputStream(uri)?.use { inputStream ->
|
||||
val playlist = PipedImportPlaylist(name = TextUtils.defaultPlaylistName)
|
||||
val playlist = PipedImportPlaylist(name = TextUtils.getFileSafeTimeStampNow())
|
||||
|
||||
playlist.videos = inputStream.bufferedReader().readLines()
|
||||
.flatMap { it.split(",") }
|
||||
|
@ -26,7 +26,7 @@ class DownloadPlaylistDialog : DialogFragment() {
|
||||
super.onCreate(savedInstanceState)
|
||||
|
||||
playlistId = requireArguments().getString(IntentData.playlistId)!!
|
||||
playlistName = requireArguments().getString(IntentData.playlistName) ?: TextUtils.defaultPlaylistName
|
||||
playlistName = requireArguments().getString(IntentData.playlistName) ?: TextUtils.getFileSafeTimeStampNow()
|
||||
playlistType = requireArguments().serializable(IntentData.playlistType)!!
|
||||
}
|
||||
|
||||
|
@ -20,7 +20,7 @@ class ImportTempPlaylistDialog : DialogFragment() {
|
||||
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
|
||||
val title = arguments?.getString(IntentData.playlistName)
|
||||
?.takeIf { it.isNotEmpty() }
|
||||
?: TextUtils.defaultPlaylistName
|
||||
?: TextUtils.getFileSafeTimeStampNow()
|
||||
val videoIds = arguments?.getStringArray(IntentData.videoIds).orEmpty()
|
||||
|
||||
return MaterialAlertDialogBuilder(requireContext())
|
||||
|
@ -17,17 +17,15 @@ import com.github.libretube.ui.base.BasePreferenceFragment
|
||||
import com.github.libretube.ui.dialogs.BackupDialog
|
||||
import com.github.libretube.ui.dialogs.BackupDialog.Companion.BACKUP_DIALOG_REQUEST_KEY
|
||||
import com.github.libretube.ui.dialogs.RequireRestartDialog
|
||||
import com.github.libretube.util.TextUtils
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
import kotlinx.serialization.json.Json
|
||||
import java.time.LocalDateTime
|
||||
import java.time.format.DateTimeFormatter
|
||||
|
||||
class BackupRestoreSettings : BasePreferenceFragment() {
|
||||
private val backupDateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd-HH:mm:ss")
|
||||
private var backupFile = BackupFile()
|
||||
private var importFormat: ImportFormat = ImportFormat.NEWPIPE
|
||||
|
||||
@ -159,8 +157,8 @@ class BackupRestoreSettings : BasePreferenceFragment() {
|
||||
) { _, resultBundle ->
|
||||
val encodedBackupFile = resultBundle.getString(IntentData.backupFile)!!
|
||||
backupFile = Json.decodeFromString(encodedBackupFile)
|
||||
val timestamp = backupDateTimeFormatter.format(LocalDateTime.now())
|
||||
createBackupFile.launch("libretube-backup-$timestamp.json")
|
||||
val timestamp = TextUtils.getFileSafeTimeStampNow()
|
||||
createBackupFile.launch("libretube-backup-${timestamp}.json")
|
||||
}
|
||||
val advancedBackup = findPreference<Preference>("backup")
|
||||
advancedBackup?.setOnPreferenceClickListener {
|
||||
|
@ -18,7 +18,6 @@ import java.time.ZoneId
|
||||
import java.time.format.DateTimeFormatter
|
||||
import java.time.format.FormatStyle
|
||||
import java.time.temporal.ChronoUnit
|
||||
import java.util.Date
|
||||
import kotlin.time.Duration
|
||||
import kotlinx.datetime.LocalDate as KotlinLocalDate
|
||||
|
||||
@ -38,7 +37,10 @@ object TextUtils {
|
||||
*/
|
||||
private val MEDIUM_DATE_FORMATTER = DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM)
|
||||
|
||||
val defaultPlaylistName get() = Date().toString()
|
||||
/**
|
||||
* Date time formatter which doesn't use any forbidden characters for file names like ':'
|
||||
*/
|
||||
private val SAFE_FILENAME_DATETIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd-HH_mm_ss")
|
||||
|
||||
/**
|
||||
* Localize the date from a date string, using the medium format.
|
||||
@ -163,4 +165,11 @@ object TextUtils {
|
||||
}
|
||||
return listOfNotNull(uploader, viewsString, uploadDate).joinToString(SEPARATOR)
|
||||
}
|
||||
|
||||
/**
|
||||
* Timestamp of the current time which doesn't use any forbidden characters for file names like ':'
|
||||
*/
|
||||
fun getFileSafeTimeStampNow(): String {
|
||||
return SAFE_FILENAME_DATETIME_FORMATTER.format(LocalDateTime.now())
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user