X-Git-Url: http://git.joshuawise.com/dumload.git/blobdiff_plain/ae61bba66016b9041ac9c09a3907e418e38f7edf..113e5e9f0483796238df53b9d6a55ad63ca15f4a:/src/com/joshuawise/dumload/Uploader.java diff --git a/src/com/joshuawise/dumload/Uploader.java b/src/com/joshuawise/dumload/Uploader.java index 763e3f0..6aa3317 100644 --- a/src/com/joshuawise/dumload/Uploader.java +++ b/src/com/joshuawise/dumload/Uploader.java @@ -1,30 +1,50 @@ +/* Uploader.java + * Back-end upload logic for Dumload. + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License, version 3, as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + package com.joshuawise.dumload; import java.io.InputStream; import java.io.OutputStream; -import com.jcraft.jsch.*; -import java.lang.Boolean; - -import android.app.Activity; -import android.app.Service; -import android.content.Intent; +import android.app.Notification; +import android.app.NotificationManager; import android.app.PendingIntent; +import android.app.Service; import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; import android.net.Uri; import android.os.Bundle; -import android.os.IBinder; -import android.widget.TextView; -import android.widget.Toast; -import android.util.Log; -import android.app.NotificationManager; -import android.app.Notification; import android.os.Handler; -import android.os.Messenger; +import android.os.IBinder; import android.os.Looper; import android.os.Message; +import android.os.Messenger; import android.os.SystemClock; +import android.preference.PreferenceManager; +import android.util.Log; import android.widget.RemoteViews; +import android.widget.Toast; + +import com.jcraft.jsch.Channel; +import com.jcraft.jsch.ChannelExec; +import com.jcraft.jsch.JSch; +import com.jcraft.jsch.Session; +import com.jcraft.jsch.UIKeyboardInteractive; +import com.jcraft.jsch.UserInfo; public class Uploader extends Service implements Runnable, UserInfo, UIKeyboardInteractive { private Uri uri; @@ -35,6 +55,7 @@ public class Uploader extends Service implements Runnable, UserInfo, UIKeyboardI private int thenotifid; private Notification thenotif; private String headline; + private String dest; private InputStream is; @@ -260,14 +281,13 @@ public class Uploader extends Service implements Runnable, UserInfo, UIKeyboardI mNotificationManager.notify(thenotifid, thenotif); } - @Override public void run() { Looper.prepare(); Log.e("Dumload.Uploader[thread]", "This brought to you from the new thread."); - set_up_notif("Dumload upload in progress"); + set_up_notif("Dumload upload: " + dest); try { say("Uploading "+(Integer.toString(is.available()))+" bytes"); @@ -276,12 +296,25 @@ public class Uploader extends Service implements Runnable, UserInfo, UIKeyboardI JSch jsch = new JSch(); jsch.setKnownHosts(homedir + "/known_hosts"); - Session s = jsch.getSession("joshua", "nyus.joshuawise.com", 22); + try { + jsch.addIdentity(homedir + "/id_dsa"); + } catch (java.lang.Exception e) { + } + try { + jsch.addIdentity(homedir + "/id_dsa_generated"); + } catch (java.lang.Exception e) { + } + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); + String server = prefs.getString("server", "").trim(); + String userName = prefs.getString("userName", "").trim(); + Integer port = Integer.valueOf(prefs.getString("port", "22")); + Log.d("dbg", userName + "@" + server + ":" + port); + Session s = jsch.getSession(userName, server, port); s.setUserInfo(this); s.connect(); Channel channel = s.openChannel("exec"); - ((ChannelExec)channel).setCommand("scp -t /tmp/lol"); + ((ChannelExec)channel).setCommand("scp -t "+dest); channel.connect(); OutputStream scp_out = channel.getOutputStream(); @@ -292,7 +325,13 @@ public class Uploader extends Service implements Runnable, UserInfo, UIKeyboardI /* Okay, BS out of the way. Now go send the file. */ expect_ack(scp_in); - scp_out.write(("C0644 " + (Integer.toString(is.available())) + " lol\n").getBytes()); + String stfu; + if (dest.lastIndexOf("/") > 0) + stfu = dest.substring(dest.lastIndexOf("/") + 1); + else + stfu = dest; + + scp_out.write(("C0644 " + (Integer.toString(is.available())) + " "+stfu+"\n").getBytes()); scp_out.flush(); expect_ack(scp_in); @@ -311,16 +350,32 @@ public class Uploader extends Service implements Runnable, UserInfo, UIKeyboardI is.close(); - update_notif("Disconnecting..."); + update_notif("Finishing file transfer..."); scp_out.write("\0".getBytes()); scp_out.flush(); expect_ack(scp_in); - sayNullNotification("Dumload upload complete", "Upload complete", "Dumload has finished uploading your file."); - channel.disconnect(); + + update_notif("Preparing to resize image..."); + + channel = s.openChannel("exec"); + ((ChannelExec)channel).setCommand("pscale "+dest); + channel.connect(); + + scp_in = channel.getInputStream(); + + update_notif("Resizing image..."); + while ((len = scp_in.read(buf, 0, buf.length)) > 0) + ; + + channel.disconnect(); + update_notif("Upload complete."); + + sayNullNotification("Dumload upload complete: " + dest, "Upload complete", "Uploaded: " + dest); + s.disconnect(); } catch (Exception e) { Log.e("Dumload.uploader[thread]", "JSchException: "+(e.toString())); @@ -340,8 +395,10 @@ public class Uploader extends Service implements Runnable, UserInfo, UIKeyboardI public void onStart(Intent i, int startId) { uri = i.getData(); + dest = i.getStringExtra("com.joshuawise.dumload.dest"); homedir = getApplicationContext().getFilesDir().getAbsolutePath(); int shits = 0; + int giggles = 1; super.onStart(i, startId);