Add renaming filename patterns
This commit is contained in:
parent
cb8c919609
commit
b0479d0bd9
|
@ -27,6 +27,7 @@ import org.schabi.newpipe.extractor.stream_info.StreamInfo;
|
|||
import org.schabi.newpipe.extractor.stream_info.VideoStream;
|
||||
import org.schabi.newpipe.fragments.detail.SpinnerToolbarAdapter;
|
||||
import org.schabi.newpipe.settings.NewPipeSettings;
|
||||
import org.schabi.newpipe.util.FilenameUtils;
|
||||
import org.schabi.newpipe.util.PermissionHelper;
|
||||
import org.schabi.newpipe.util.ThemeHelper;
|
||||
import org.schabi.newpipe.util.Utils;
|
||||
|
@ -107,7 +108,7 @@ public class DownloadDialog extends DialogFragment implements RadioGroup.OnCheck
|
|||
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
nameEditText = ((EditText) view.findViewById(R.id.file_name));
|
||||
nameEditText.setText(createFileName(currentInfo.title));
|
||||
nameEditText.setText(FilenameUtils.createFilename(getContext(), currentInfo.title));
|
||||
selectedAudioIndex = Utils.getPreferredAudioFormat(getContext(), currentInfo.audio_streams);
|
||||
|
||||
streamsSpinner = (Spinner) view.findViewById(R.id.quality_spinner);
|
||||
|
@ -252,30 +253,12 @@ public class DownloadDialog extends DialogFragment implements RadioGroup.OnCheck
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* #143 #44 #42 #22: make sure that the filename does not contain illegal chars.
|
||||
* This should fix some of the "cannot download" problems.
|
||||
*/
|
||||
private String createFileName(String fileName) {
|
||||
// from http://eng-przemelek.blogspot.de/2009/07/how-to-create-valid-file-name.html
|
||||
|
||||
List<String> forbiddenCharsPatterns = new ArrayList<>();
|
||||
forbiddenCharsPatterns.add("[:]+"); // Mac OS, but it looks that also Windows XP
|
||||
forbiddenCharsPatterns.add("[\\*\"/\\\\\\[\\]\\:\\;\\|\\=\\,]+"); // Windows
|
||||
forbiddenCharsPatterns.add("[^\\w\\d\\.]+"); // last chance... only latin letters and digits
|
||||
String nameToTest = fileName;
|
||||
for (String pattern : forbiddenCharsPatterns) {
|
||||
nameToTest = nameToTest.replaceAll(pattern, "_");
|
||||
}
|
||||
return nameToTest;
|
||||
}
|
||||
|
||||
|
||||
private void downloadSelected() {
|
||||
String url, location;
|
||||
|
||||
String fileName = nameEditText.getText().toString().trim();
|
||||
if (fileName.isEmpty()) fileName = createFileName(currentInfo.title);
|
||||
if (fileName.isEmpty()) fileName = FilenameUtils.createFilename(getContext(), currentInfo.title);
|
||||
|
||||
boolean isAudio = radioVideoAudioGroup.getCheckedRadioButtonId() == R.id.audio_button;
|
||||
url = isAudio ? currentInfo.audio_streams.get(selectedAudioIndex).url : sortedStreamVideosList.get(selectedVideoIndex).url;
|
||||
|
|
|
@ -0,0 +1,39 @@
|
|||
package org.schabi.newpipe.util;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.preference.PreferenceManager;
|
||||
|
||||
import org.schabi.newpipe.R;
|
||||
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
public class FilenameUtils {
|
||||
|
||||
/**
|
||||
* #143 #44 #42 #22: make sure that the filename does not contain illegal chars.
|
||||
* @param context the context to retrieve strings and preferences from
|
||||
* @param title the title to create a filename from
|
||||
* @return the filename
|
||||
*/
|
||||
public static String createFilename(Context context, String title) {
|
||||
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
|
||||
final String key = context.getString(R.string.settings_file_charset_key);
|
||||
final String value = sharedPreferences.getString(key, context.getString(R.string.default_file_charset_value));
|
||||
Pattern pattern = Pattern.compile(value);
|
||||
|
||||
final String replacementChar = sharedPreferences.getString(context.getString(R.string.settings_file_replacement_character_key), "_");
|
||||
return createFilename(title, pattern, replacementChar);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a valid filename
|
||||
* @param title the title to create a filename from
|
||||
* @param invalidCharacters patter matching invalid characters
|
||||
* @param replacementChar the replacement
|
||||
* @return the filename
|
||||
*/
|
||||
private static String createFilename(String title, Pattern invalidCharacters, String replacementChar) {
|
||||
return title.replaceAll(invalidCharacters.pattern(), replacementChar);
|
||||
}
|
||||
}
|
|
@ -232,4 +232,22 @@
|
|||
</string-array>
|
||||
<string name="show_age_restricted_content" translatable="false">show_age_restricted_content</string>
|
||||
<string name="use_tor_key" translatable="false">use_tor</string>
|
||||
|
||||
<string name="settings_file_charset_key" translatable="false">file_rename</string>
|
||||
<string name="settings_file_replacement_character_key" translatable="false">file_replacement_character</string>
|
||||
<string name="settings_file_replacement_character_default_value" translatable="false">_</string>
|
||||
|
||||
<string-array
|
||||
translatable="false"
|
||||
name="settings_filename_charset">
|
||||
<item>@string/charset_letters_and_digits_value</item>
|
||||
<item>@string/charset_most_special_characters_value</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="settings_filename_charset_name">
|
||||
<item>@string/charset_letters_and_digits</item>
|
||||
<item>@string/charset_most_special_characters</item>
|
||||
</string-array>
|
||||
|
||||
<string name="default_file_charset_value" translatable="false">@string/charset_most_special_characters</string>
|
||||
</resources>
|
|
@ -190,6 +190,18 @@
|
|||
|
||||
<!-- End of GigaGet's Strings -->
|
||||
|
||||
<!-- Downloads -->
|
||||
<string name="settings_category_downloads" translatable="false">settings_category_downloads</string>
|
||||
<string name="settings_category_downloads_title">Download</string>
|
||||
<string name="settings_file_charset_title">Allowed characters in filenames</string>
|
||||
<string name="settings_file_replacement_character_summary">Invalid characters are replaced with this value</string>
|
||||
<string name="settings_file_replacement_character_title">Replacement character</string>
|
||||
|
||||
<string name="charset_letters_and_digits_value" translatable="false">[^\w\d]+</string>
|
||||
<string name="charset_most_special_characters_value" translatable="false">[\n\r|\\?*<":>/']+</string>
|
||||
<string name="charset_letters_and_digits">Letters and digits</string>
|
||||
<string name="charset_most_special_characters">Most special characters</string>
|
||||
|
||||
<!-- About -->
|
||||
<string name="title_activity_about">About NewPipe</string>
|
||||
<string name="action_settings">Settings</string>
|
||||
|
|
|
@ -133,10 +133,10 @@
|
|||
|
||||
</PreferenceCategory>
|
||||
|
||||
|
||||
<PreferenceCategory
|
||||
android:key="@string/settings_category_other"
|
||||
android:textAllCaps="true"
|
||||
android:title="@string/settings_category_other_title">
|
||||
android:key="@string/settings_category_downloads"
|
||||
android:title="@string/settings_category_downloads_title">
|
||||
|
||||
<Preference
|
||||
android:dialogTitle="@string/download_path_dialog_title"
|
||||
|
@ -150,6 +150,26 @@
|
|||
android:summary="@string/download_path_audio_summary"
|
||||
android:title="@string/download_path_audio_title"/>
|
||||
|
||||
<ListPreference
|
||||
android:key="@string/settings_file_charset_key"
|
||||
android:summary="%s"
|
||||
android:defaultValue="@string/default_file_charset_value"
|
||||
android:title="@string/settings_file_charset_title"
|
||||
android:entryValues="@array/settings_filename_charset"
|
||||
android:entries="@array/settings_filename_charset_name" />
|
||||
|
||||
<EditTextPreference
|
||||
android:key="@string/settings_file_replacement_character_key"
|
||||
android:summary="@string/settings_file_replacement_character_summary"
|
||||
android:defaultValue="@string/settings_file_replacement_character_default_value"
|
||||
android:title="@string/settings_file_replacement_character_title" />
|
||||
</PreferenceCategory>
|
||||
|
||||
<PreferenceCategory
|
||||
android:key="@string/settings_category_other"
|
||||
android:textAllCaps="true"
|
||||
android:title="@string/settings_category_other_title">
|
||||
|
||||
<CheckBoxPreference
|
||||
android:defaultValue="false"
|
||||
android:key="@string/autoplay_through_intent_key"
|
||||
|
|
Loading…
Reference in New Issue