Skip to content

Commit 0616325

Browse files
committed
fix for BibTeX files with windown stlye paths addressing #6
1 parent 8e753fe commit 0616325

File tree

3 files changed

+22
-47
lines changed

3 files changed

+22
-47
lines changed

AndroidManifest.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
33
package="com.cgogolin.library"
4-
android:versionCode="34"
4+
android:versionCode="44"
55
android:versionName="5.2">
66
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
77
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

src/com/cgogolin/library/BaseBibtexEntry.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,10 @@ public List<String> getFiles() {
4949
//{:path1/file1.end1:end1;:path2/file2.end1:end2;...}
5050
//{path1/file1.end1:end1;path2/file2.end1:end2;...}
5151
//{path1/file1.end1;path2/file2.end1;...}
52+
//{:path1\file1.end1:end1;:path2\file2.end1:end2;...}
53+
//{path1\file1.end1:end1;path2\file2.end1:end2;...}
54+
//{path1\file1.end1;path2\file2.end1;...}
55+
//whereby path can contains Windows drive letters such as 'c:\'.
5256
//Furthermore we assume that '\_' is an escape sequence for '_'.
5357
if ( getFile().equals("") ) return null;
5458
String[] rawFileString = getFile().split(";");

src/com/cgogolin/library/Library.java

Lines changed: 17 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
import java.util.ArrayList;
88
import java.util.List;
9+
import java.util.regex.Pattern;
910
import android.util.Log;
1011

1112
import android.app.Activity;
@@ -95,8 +96,7 @@ Uri getUriForActionViewIntent(String path) {
9596
}
9697
else {
9798
//New versions of Android want files to be shared through a content:// Uri and not via a file:// Uri
98-
//First we convert backslashes to slashes (windows vs. linux path convention) and then try to idenitfy the uri corresponding to the path in the bibtex file
99-
path = convertToLinuxPath(path);
99+
//First we convert backslashes to slashes and remove Windows style drive letters and then try to idenitfy the uri corresponding to the path in the bibtex file
100100
Uri uri = getUriInLibraryFolder(path);
101101
if(uri != null)
102102
{
@@ -115,9 +115,6 @@ Uri getUriForActionViewIntent(String path) {
115115
return uri;
116116
}
117117
}
118-
String convertToLinuxPath(String path) {
119-
return path.replace("\\","/");
120-
}
121118
@Override
122119
String getModifiedPath(String path) {
123120
if (android.os.Build.VERSION.SDK_INT < 21)
@@ -579,7 +576,7 @@ protected void onPreExecute() {
579576
}
580577
@Override
581578
protected Boolean doInBackground(String... path0) {
582-
String path = path0[0];
579+
String path = convertToLinuxLikePath(path0[0]);
583580
DocumentFile libraryFolderRootDir = DocumentFile.fromTreeUri(context, treeUri);
584581
DocumentFile currentDir = libraryFolderRootDir;
585582
DocumentFile file = null;
@@ -592,7 +589,9 @@ protected Boolean doInBackground(String... path0) {
592589
{
593590
//Log.i(getString(R.string.app_name), "found "+pathSegment);
594591
currentDir = file;
595-
relativePath = relativePath+"/"+pathSegment;
592+
if(!relativePath.equals(""))
593+
relativePath += "/";
594+
relativePath += pathSegment;
596595
}
597596
else
598597
{
@@ -605,48 +604,12 @@ protected Boolean doInBackground(String... path0) {
605604
String fileUriString = file.getUri().toString();
606605
uriTargetString = path.substring(0,path.lastIndexOf(relativePath));
607606
uriReplacementString = "";
608-
uriPrefixString = (uriTargetString.equals("") ? fileUriString : fileUriString.replace(Uri.encode(relativePath), ""));
607+
// uriPrefixString = (relativePath.equals("") ? fileUriString : fileUriString.replaceLast(Uri.encode(relativePath), ""));
608+
uriPrefixString = fileUriString.substring(0,fileUriString.lastIndexOf(Uri.encode(relativePath)));
609609
return true;
610610
}
611611
else
612612
return false;
613-
// Log.i(getString(R.string.app_name), "path="+path);
614-
// Log.i(getString(R.string.app_name), "relativePath="+relativePath);
615-
// Log.i(getString(R.string.app_name), "fileUriString="+fileUriString);
616-
// Log.i(getString(R.string.app_name), "libraryFolderRootUri="+treeUri.toString());
617-
// Log.i(getString(R.string.app_name), "from this we guess:");
618-
// Log.i(getString(R.string.app_name), "uriTargetString="+uriTargetString);
619-
// Log.i(getString(R.string.app_name), "uriReplacementString="+uriReplacementString);
620-
// Log.i(getString(R.string.app_name), "uriPrefixString="+uriPrefixString);
621-
// Log.i(getString(R.string.app_name), "getUriInLibraryFolder(path).toString()="+Uri.decode(getUriInLibraryFolder(path).toString()));
622-
// Log.i(getString(R.string.app_name), "compared to "+Uri.decode(fileUriString));
623-
// Log.i(getString(R.string.app_name), "and "+Uri.decode(file.getUri().toString()));
624-
625-
// Uri uri1 = file.getUri();
626-
// Uri uri2 = getUriInLibraryFolder(path);
627-
// Uri uri3 = Uri.parse(uri1.toString());
628-
629-
// Log.i(getString(R.string.app_name), "uri1.equals(uri2)="+uri1.equals(uri2));
630-
// Log.i(getString(R.string.app_name), "uri1.compareTo(uri2)="+uri1.compareTo(uri2));
631-
632-
// Log.i(getString(R.string.app_name), "uri1="+uri1.toString());
633-
// bibtexAdapter.checkCanWriteToUri(context, uri1);
634-
635-
// Log.i(getString(R.string.app_name), "uri2="+uri2.toString());
636-
// bibtexAdapter.checkCanWriteToUri(context, uri2);
637-
638-
// Log.i(getString(R.string.app_name), "uri3="+uri3.toString());
639-
// bibtexAdapter.checkCanWriteToUri(context, uri3);
640-
641-
// Log.i(getString(R.string.app_name), "checking if we can write to uri from file");
642-
// bibtexAdapter.checkCanWriteToUri(context, file.getUri());
643-
// Log.i(getString(R.string.app_name), "checking if we can write to uri from getUriInLibraryFolder(path)");
644-
// bibtexAdapter.checkCanWriteToUri(context, getUriInLibraryFolder(path));
645-
646-
// Log.i(getString(R.string.app_name), "checking if we can write to uri from file after converting to string and back");
647-
// bibtexAdapter.checkCanWriteToUri(context, Uri.parse(file.getUri().toString()));
648-
// Log.i(getString(R.string.app_name), "checking if we can write to uri from getUriInLibraryFolder(path) after converting to string and back");
649-
// bibtexAdapter.checkCanWriteToUri(context, Uri.parse(getUriInLibraryFolder(path).toString()));
650613
}
651614
@Override
652615
protected void onPostExecute(Boolean succees) {
@@ -728,12 +691,13 @@ public void onCancel(DialogInterface dialog) {
728691

729692
Uri getUriInLibraryFolder(String path)
730693
{
694+
path = convertToLinuxLikePath(path);
731695
//Some versions of Android suffer from this very stupid bug:
732696
//http://stackoverflow.com/questions/16475317/android-bug-string-substring5-replace-empty-string
733697
if(uriPrefixString == null || path == null)
734698
return null;
735699
else
736-
return Uri.parse(uriPrefixString + Uri.encode((uriTargetString == null || uriTargetString.equals("")) ? path : path.replace(uriTargetString, uriReplacementString)));
700+
return Uri.parse(uriPrefixString + Uri.encode((uriTargetString == null || uriTargetString.equals("")) ? path : path.replaceFirst(Pattern.quote(uriTargetString), uriReplacementString)));
737701
}
738702

739703

@@ -989,4 +953,11 @@ public void onDismiss(DialogInterface dialog) {
989953
}
990954
}
991955
}
956+
957+
String convertToLinuxLikePath(String path) {
958+
path = path.replace("\\","/");
959+
if(path.indexOf(":")>=0)
960+
path = path.substring(path.indexOf(":")+1);
961+
return path;
962+
}
992963
}

0 commit comments

Comments
 (0)