From e59782e54e843ad2d24217a27ae4a671fa9efdfa Mon Sep 17 00:00:00 2001 From: Adrian Ulrich Date: Tue, 15 Jan 2013 18:07:31 +0100 Subject: [PATCH] implement ugly ghost-path detector --- assets/about.html | 2 +- res/values/translatable.xml | 2 + .../android/vanilla/MediaUtils.java | 42 ++++++++++++++++++- .../android/vanilla/PlaybackService.java | 4 +- 4 files changed, 46 insertions(+), 4 deletions(-) diff --git a/assets/about.html b/assets/about.html index 29174730..4005b496 100644 --- a/assets/about.html +++ b/assets/about.html @@ -19,7 +19,7 @@ function show(n) {

Vanilla Music

-

Version: 0.9.15 released November 10, 2012

+

Version: 0.9.16 released December 14, 2012

Website: https://github.com/adrian-bl/vanilla
Issue tracker: https://github.com/adrian-bl/vanilla/issues

Contributors

diff --git a/res/values/translatable.xml b/res/values/translatable.xml index 97d1e317..f0efa906 100644 --- a/res/values/translatable.xml +++ b/res/values/translatable.xml @@ -235,4 +235,6 @@ THE SOFTWARE. Show queue Queue Toggle controls + TRNS! FP Start + Browsing files starts at this directory diff --git a/src/ch/blinkenlights/android/vanilla/MediaUtils.java b/src/ch/blinkenlights/android/vanilla/MediaUtils.java index c0e5db1e..46a5620f 100644 --- a/src/ch/blinkenlights/android/vanilla/MediaUtils.java +++ b/src/ch/blinkenlights/android/vanilla/MediaUtils.java @@ -34,6 +34,8 @@ import java.util.Collections; import java.util.List; import java.util.Random; import junit.framework.Assert; +import android.os.Environment; +import android.util.Log; /** * Provides some static Song/MediaStore-related utility functions. @@ -512,6 +514,43 @@ public class MediaUtils { return file.delete(); } + + /** + * This is an ugly hack: The tries to 'guess' if given path + * is also accessible using a fuse mount + */ + private static String sanitizeMediaPath(String path) { + Log.v("Vanilla", "Input path is: "+path); + + String exPath = Environment.getExternalStorageDirectory().getAbsolutePath(); + File exStorage = new File(exPath+"/Android"); + long exLastmod = exStorage.lastModified(); + + if(exLastmod != 0) { + String pfx = path; + while(true) { + if((new File(pfx+"/Android")).lastModified() == exLastmod) { + String guessPath = exPath + path.substring(pfx.length()); + if( (new File(guessPath)).exists() ) { + Log.v("Vanilla", "OLD="+path); + Log.v("Vanilla", "NEW="+guessPath); + path = guessPath; + break; + } + } + + pfx = (new File(pfx)).getParent(); + if(pfx == null) + break; /* hit root */ + } + } + + Log.v("Vanilla", "Returning "+path); + return path; + } + + + /** * Build a query that will contain all the media under the given path. * @@ -523,9 +562,10 @@ public class MediaUtils { { // It would be better to use selectionArgs to pass path here, but there // doesn't appear to be any way to pass the * when using it. + Log.v("Vanilla", "buildFileQuery "+path); StringBuilder selection = new StringBuilder(); selection.append("_data GLOB "); - DatabaseUtils.appendEscapedSQLString(selection, path); + DatabaseUtils.appendEscapedSQLString(selection, sanitizeMediaPath(path)); // delete the quotation mark added by the escape method selection.deleteCharAt(selection.length() - 1); selection.append("*' AND is_music"); diff --git a/src/ch/blinkenlights/android/vanilla/PlaybackService.java b/src/ch/blinkenlights/android/vanilla/PlaybackService.java index 3fae0e3b..f3f855c0 100644 --- a/src/ch/blinkenlights/android/vanilla/PlaybackService.java +++ b/src/ch/blinkenlights/android/vanilla/PlaybackService.java @@ -562,7 +562,7 @@ public final class PlaybackService extends Service public void prepareMediaPlayer(MediaPlayer mp, String path) throws IOException{ mp.setDataSource(path); - + /* Hashtable tags = (new Bastp()).getTags(path); float adjust = 1.0f; @@ -577,10 +577,10 @@ public final class PlaybackService extends Service adjust = (float)Math.pow(10, (rg_float/20) ); Toast.makeText(this, path+"\n"+" PX "+rg_raw+" adj = "+adjust, Toast.LENGTH_LONG).show(); - } mp.setVolume(adjust, adjust); + */ mp.prepare(); }