From: <kro...@us...> - 2010-12-19 16:43:53
|
Revision: 4047 http://mp-plugins.svn.sourceforge.net/mp-plugins/?rev=4047&view=rev Author: kroko_koenig Date: 2010-12-19 16:43:47 +0000 (Sun, 19 Dec 2010) Log Message: ----------- add threads for sd download Modified Paths: -------------- trunk/plugins/AndroidRemote/Android/MediaPortalRemote/AndroidManifest.xml trunk/plugins/AndroidRemote/Android/MediaPortalRemote/readme trunk/plugins/AndroidRemote/Android/MediaPortalRemote/src/mediaportal/remote/MediaScannerNotifier.java trunk/plugins/AndroidRemote/Android/MediaPortalRemote/src/mediaportal/remote/MusicDir.java trunk/plugins/AndroidRemote/Android/MediaPortalRemote/src/mediaportal/remote/httpHandler.java trunk/plugins/AndroidRemote/Android/MediaPortalRemote/src/mediaportal/remote/main.java trunk/plugins/AndroidRemote/Android/MediaPortalRemote/src/mediaportal/remote/musicResults.java trunk/plugins/AndroidRemote/Android/MediaPortalRemote/src/mediaportal/remote/musicTab.java trunk/plugins/AndroidRemote/Release/AndroidRemote.mpe1 trunk/plugins/AndroidRemote/Server/AndroidRemote.suo Modified: trunk/plugins/AndroidRemote/Android/MediaPortalRemote/AndroidManifest.xml =================================================================== --- trunk/plugins/AndroidRemote/Android/MediaPortalRemote/AndroidManifest.xml 2010-12-19 13:44:24 UTC (rev 4046) +++ trunk/plugins/AndroidRemote/Android/MediaPortalRemote/AndroidManifest.xml 2010-12-19 16:43:47 UTC (rev 4047) @@ -20,7 +20,7 @@ <activity android:launchMode="singleInstance" android:name=".Remote_03"></activity> <activity android:name=".pictures" android:launchMode="singleInstance"></activity> <activity android:name=".picturesfullscreen" android:launchMode="singleInstance"></activity> - <activity android:launchMode="singleInstance" android:name=".MusicDir"></activity> + <activity android:launchMode="singleInstance" android:name=".musicDir"></activity> <activity android:name=".setup" android:launchMode="singleInstance"></activity> <activity android:name=".nowplaying" android:launchMode="singleInstance"></activity> <activity android:name=".nowplaylist" android:launchMode="singleInstance"></activity> Modified: trunk/plugins/AndroidRemote/Android/MediaPortalRemote/readme =================================================================== --- trunk/plugins/AndroidRemote/Android/MediaPortalRemote/readme 2010-12-19 13:44:24 UTC (rev 4046) +++ trunk/plugins/AndroidRemote/Android/MediaPortalRemote/readme 2010-12-19 16:43:47 UTC (rev 4047) @@ -39,8 +39,9 @@ ------------ Vibration feedback (not completed) switch WIFI on (just msg now) -gesture control for pictures (swipe) / alert dialog save files from Android to MP if the MP has no focus the remote doesnt work (normal) save huge files can cause out of memory, better save stream +playlist select on file (switch to file x) +progress task for downloads Modified: trunk/plugins/AndroidRemote/Android/MediaPortalRemote/src/mediaportal/remote/MediaScannerNotifier.java =================================================================== --- trunk/plugins/AndroidRemote/Android/MediaPortalRemote/src/mediaportal/remote/MediaScannerNotifier.java 2010-12-19 13:44:24 UTC (rev 4046) +++ trunk/plugins/AndroidRemote/Android/MediaPortalRemote/src/mediaportal/remote/MediaScannerNotifier.java 2010-12-19 16:43:47 UTC (rev 4047) @@ -5,6 +5,7 @@ import android.media.MediaScannerConnection; import android.media.MediaScannerConnection.MediaScannerConnectionClient; import android.net.Uri; +import android.util.Log; public class MediaScannerNotifier implements MediaScannerConnectionClient { private Context mContext; @@ -13,6 +14,9 @@ private String mMimeType; public MediaScannerNotifier(Context context, String path, String mimeType) { + + Log.d("MediaPortal", "MediaScanner " + path + " | " + mimeType); + mContext = context; mPath = path; mMimeType = mimeType; @@ -21,10 +25,17 @@ } public void onMediaScannerConnected() { + + Log.d("MediaPortal", "MediaScanner connected"); + mConnection.scanFile(mPath, mMimeType); + Log.d("MediaScanner", "scanner connected"); } public void onScanCompleted(String path, Uri uri) { + + Log.d("MediaPortal", "MediaScanner completed"); + // OPTIONAL: scan is complete, this will cause the viewer to render it try { if (uri != null) { Modified: trunk/plugins/AndroidRemote/Android/MediaPortalRemote/src/mediaportal/remote/MusicDir.java =================================================================== --- trunk/plugins/AndroidRemote/Android/MediaPortalRemote/src/mediaportal/remote/MusicDir.java 2010-12-19 13:44:24 UTC (rev 4046) +++ trunk/plugins/AndroidRemote/Android/MediaPortalRemote/src/mediaportal/remote/MusicDir.java 2010-12-19 16:43:47 UTC (rev 4047) @@ -46,12 +46,15 @@ import android.widget.AdapterView.OnItemClickListener; import android.widget.Toast; -public class MusicDir extends Activity { +public class musicDir extends Activity { + private Context myParent; + private Handler mHandler = new Handler(); private static Vibrator vibrate; private String actualDir = ""; + private String downloadFile = ""; private static ArrayList<ReceiveDirectoryXmlHandler.DirItems> musicList; private static ReceiveDirectoryXmlHandler.DirItems selectedItem; @@ -64,6 +67,8 @@ super.onCreate(savedInstanceState); setContentView(R.layout.music); + myParent = this.getApplicationContext(); + mHandler.removeCallbacks(mUpdateTimeTask); mHandler.postDelayed(mUpdateTimeTask, 100); @@ -97,24 +102,19 @@ + selectedItem.File.replaceAll( " ", "%20")); Toast.makeText( - MusicDir.this, + musicDir.this, selectedItem.File + " has been added", Toast.LENGTH_SHORT).show(); break; case 1: PostClear(); - Toast.makeText(MusicDir.this, + Toast.makeText(musicDir.this, "Playlist has been cleared", Toast.LENGTH_SHORT).show(); break; case 2: SavetoSDCard(selectedItem.File); - Toast.makeText( - MusicDir.this, - selectedItem.File - + " has been transferd", - Toast.LENGTH_SHORT).show(); break; } } @@ -182,14 +182,8 @@ private void SavetoSDCard(String File) { - httpHandler h = new httpHandler(); - h.DownloadFile(File , actualDir); - - String sd = Environment.getExternalStorageDirectory().toString(); - - @SuppressWarnings("unused") - MediaScannerNotifier not = new MediaScannerNotifier(this, sd + "/" - + File, "audio/mpeg"); + downloadFile = File; + new download().execute(); } private Runnable mUpdateTimeTask = new Runnable() { @@ -199,7 +193,7 @@ }; private class update extends AsyncTask<String, Void, Void> { - private final ProgressDialog dialog = new ProgressDialog(MusicDir.this); + private final ProgressDialog dialog = new ProgressDialog(musicDir.this); // can use UI thread here protected void onPreExecute() { @@ -224,15 +218,50 @@ } if (musicList.size() == 0) { - Toast.makeText(MusicDir.this, "TIME OUT SERVER", + Toast.makeText(musicDir.this, "TIME OUT SERVER", Toast.LENGTH_SHORT).show(); } else { GridView gridview = (GridView) findViewById(R.id.music_grid); - gridview.setAdapter(new ImageAdapter2(MusicDir.this)); + gridview.setAdapter(new ImageAdapter2(musicDir.this)); } } } + private class download extends AsyncTask<String, Void, Void> { + private final ProgressDialog dialog = new ProgressDialog(musicDir.this); + // can use UI thread here + protected void onPreExecute() { + this.dialog.setMessage("save to sd card..."); + this.dialog.show(); + } + + // automatically done on worker thread (separate from UI thread) + protected Void doInBackground(final String... args) { + Log.d("MediaPortal", "download starts"); + + httpHandler h = new httpHandler(); + h.DownloadFile(downloadFile , actualDir); + + return null; + } + + // can use UI thread here + protected void onPostExecute(final Void unused) { + if (this.dialog.isShowing()) { + this.dialog.dismiss(); + } + + Toast.makeText(musicDir.this, + selectedItem.File + " has been saved.", Toast.LENGTH_SHORT).show(); + + Log.d("MediaPortal", "download ends"); + + String sd = Environment.getExternalStorageDirectory().toString(); + @SuppressWarnings("unused") + MediaScannerNotifier not = new MediaScannerNotifier(myParent, sd + "/" + downloadFile, "audio/mpeg"); + } + } + private static void DoVibrate() { if (Settings.Vibrate) { vibrate.vibrate(100); Modified: trunk/plugins/AndroidRemote/Android/MediaPortalRemote/src/mediaportal/remote/httpHandler.java =================================================================== --- trunk/plugins/AndroidRemote/Android/MediaPortalRemote/src/mediaportal/remote/httpHandler.java 2010-12-19 13:44:24 UTC (rev 4046) +++ trunk/plugins/AndroidRemote/Android/MediaPortalRemote/src/mediaportal/remote/httpHandler.java 2010-12-19 16:43:47 UTC (rev 4047) @@ -16,6 +16,7 @@ import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Environment; +import android.util.Log; public class httpHandler { @@ -78,6 +79,7 @@ public void DownloadFileByID(String Filename, String ID) { + Log.d("MediaPortal", "get file: " + Filename); extStorageDirectory = Environment.getExternalStorageDirectory() .toString(); @@ -85,26 +87,33 @@ InputStream in = openHttpConnection("http://" + Settings.Server + ":" + Settings.Port + "/db_music/getfile?id=" + ID); - // BufferedInputStream bis = new BufferedInputStream(in); - ByteArrayBuffer baf = new ByteArrayBuffer(50); - // int current = 0; + if (in != null) { + // BufferedInputStream bis = new BufferedInputStream(in); + ByteArrayBuffer baf = new ByteArrayBuffer(50); + // int current = 0; - OutputStream outStream = null; - File file = new File(extStorageDirectory, Filename); - outStream = new FileOutputStream(file); - - byte[] bb = new byte[1024]; - int l = in.read(bb, 0, 1024); + OutputStream outStream = null; + File file = new File(extStorageDirectory, Filename); + outStream = new FileOutputStream(file); + + int size = 0; + + byte[] bb = new byte[1024]; + int l = in.read(bb, 0, 1024); - while (l > -0) { - //baf.append(bb, 0, l); - outStream.write(bb); - l = in.read(bb, 0, 1024); + while (l > -0) { + size += l; + //baf.append(bb, 0, l); + outStream.write(bb,0,l); + l = in.read(bb, 0, 1024); + } + + //outStream.write(baf.toByteArray()); + outStream.flush(); + outStream.close(); + + Log.d("MediaPortal", "finshed size: " + size); } - - //outStream.write(baf.toByteArray()); - outStream.flush(); - outStream.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block @@ -116,14 +125,15 @@ } public void DownloadFile(String Filename, String Path) { - + + Log.d("MediaPortal", "get file: " + Filename); extStorageDirectory = Environment.getExternalStorageDirectory() .toString(); try { InputStream in = openHttpConnection("http://" + Settings.Server - + ":" + Settings.Port + "/music/" + Path + Filename.replaceAll( - " ", "%20")); + + ":" + Settings.Port + "/music/" + Path + + Filename.replaceAll(" ", "%20")); if (in != null) { // BufferedInputStream bis = new BufferedInputStream(in); @@ -133,19 +143,24 @@ OutputStream outStream = null; File file = new File(extStorageDirectory, Filename); outStream = new FileOutputStream(file); + + int size = 0; byte[] bb = new byte[1024]; int l = in.read(bb, 0, 1024); while (l > -0) { - //baf.append(bb, 0, l); - outStream.write(bb); + size += l; + // baf.append(bb, 0, l); + outStream.write(bb, 0, l); l = in.read(bb, 0, 1024); } - //outStream.write(baf.toByteArray()); + // outStream.write(baf.toByteArray()); outStream.flush(); outStream.close(); + + Log.d("MediaPortal", "finshed size: " + size); } } catch (FileNotFoundException e) { Modified: trunk/plugins/AndroidRemote/Android/MediaPortalRemote/src/mediaportal/remote/main.java =================================================================== --- trunk/plugins/AndroidRemote/Android/MediaPortalRemote/src/mediaportal/remote/main.java 2010-12-19 13:44:24 UTC (rev 4046) +++ trunk/plugins/AndroidRemote/Android/MediaPortalRemote/src/mediaportal/remote/main.java 2010-12-19 16:43:47 UTC (rev 4047) @@ -226,8 +226,8 @@ final android.net.NetworkInfo wifi = connMgr .getNetworkInfo(ConnectivityManager.TYPE_WIFI); - final android.net.NetworkInfo mobile = connMgr - .getNetworkInfo(ConnectivityManager.TYPE_MOBILE); + //final android.net.NetworkInfo mobile = connMgr + // .getNetworkInfo(ConnectivityManager.TYPE_MOBILE); if (!wifi.isAvailable()) { Toast.makeText(this, "Warning : Wifi is not available !", Modified: trunk/plugins/AndroidRemote/Android/MediaPortalRemote/src/mediaportal/remote/musicResults.java =================================================================== --- trunk/plugins/AndroidRemote/Android/MediaPortalRemote/src/mediaportal/remote/musicResults.java 2010-12-19 13:44:24 UTC (rev 4046) +++ trunk/plugins/AndroidRemote/Android/MediaPortalRemote/src/mediaportal/remote/musicResults.java 2010-12-19 16:43:47 UTC (rev 4047) @@ -51,6 +51,8 @@ Artist,Album; } + private Context myParent; + private Handler mHandler = new Handler(); private static Vibrator vibrate; @@ -58,6 +60,8 @@ public static String Select = ""; public static SelectMode Mode; + private static String downloadFile = ""; + private static String downloadID = ""; ReceiveDbXmlHandler.DbItems selectedItem = null; final CharSequence[] items = { "Add to playlist", "Clear playlist", @@ -67,6 +71,8 @@ super.onCreate(savedInstanceState); setContentView(R.layout.music_results); + myParent = this.getApplicationContext(); + mHandler.removeCallbacks(mUpdateTimeTask); mHandler.postDelayed(mUpdateTimeTask, 100); @@ -103,8 +109,6 @@ break; case 2: SavetoSDCard(selectedItem); - Toast.makeText(musicResults.this, - selectedItem.Title + " has been transferd", Toast.LENGTH_SHORT).show(); break; } } @@ -146,16 +150,11 @@ post.Post(xml); } private void SavetoSDCard(ReceiveDbXmlHandler.DbItems Item) { - - String filename = Item.Artist + " - " + Item.Title + ".mp3"; - String id = Item.ID; + + downloadFile = Item.Artist + " - " + Item.Title + ".mp3";; + downloadID = Item.ID; - httpHandler h = new httpHandler(); - h.DownloadFileByID(filename,id); - - String sd = Environment.getExternalStorageDirectory().toString(); - @SuppressWarnings("unused") - MediaScannerNotifier not = new MediaScannerNotifier(this, sd + "/" + filename, "audio/mpeg"); + new download().execute(); } private Runnable mUpdateTimeTask = new Runnable() { @@ -201,6 +200,41 @@ } } } + private class download extends AsyncTask<String, Void, Void> { + private final ProgressDialog dialog = new ProgressDialog(musicResults.this); + + // can use UI thread here + protected void onPreExecute() { + this.dialog.setMessage("save to sd card..."); + this.dialog.show(); + } + + // automatically done on worker thread (separate from UI thread) + protected Void doInBackground(final String... args) { + Log.d("MediaPortal", "download starts"); + + httpHandler h = new httpHandler(); + h.DownloadFileByID(downloadFile,downloadID); + + return null; + } + + // can use UI thread here + protected void onPostExecute(final Void unused) { + if (this.dialog.isShowing()) { + this.dialog.dismiss(); + } + + Toast.makeText(musicResults.this, + selectedItem.Title + " has been saved.", Toast.LENGTH_SHORT).show(); + + Log.d("MediaPortal", "download ends"); + + String sd = Environment.getExternalStorageDirectory().toString(); + @SuppressWarnings("unused") + MediaScannerNotifier not = new MediaScannerNotifier(myParent, sd + "/" + downloadFile, "audio/mpeg"); + } + } private static void DoVibrate() { if (Settings.Vibrate) { Modified: trunk/plugins/AndroidRemote/Android/MediaPortalRemote/src/mediaportal/remote/musicTab.java =================================================================== --- trunk/plugins/AndroidRemote/Android/MediaPortalRemote/src/mediaportal/remote/musicTab.java 2010-12-19 13:44:24 UTC (rev 4046) +++ trunk/plugins/AndroidRemote/Android/MediaPortalRemote/src/mediaportal/remote/musicTab.java 2010-12-19 16:43:47 UTC (rev 4047) @@ -58,7 +58,7 @@ .setContent(intent); tabHost.addTab(spec); - intent = new Intent().setClass(this, MusicDir.class); + intent = new Intent().setClass(this, musicDir.class); spec = tabHost.newTabSpec("music") .setIndicator("Music", res.getDrawable(R.drawable.ic_tab4)) .setContent(intent); Modified: trunk/plugins/AndroidRemote/Release/AndroidRemote.mpe1 =================================================================== (Binary files differ) Modified: trunk/plugins/AndroidRemote/Server/AndroidRemote.suo =================================================================== (Binary files differ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |