Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Java - Mega.co.nz Downloader
Forum - Java - Mega.co.nz Downloader

Avatar
lillogoal (Member)
Rookie


Messaggi: 28
Iscritto: 26/04/2013

Segnala al moderatore
Postato alle 12:01
Mercoledì, 08/05/2013
Salve a tutti,
sto creando un downloader del nuovo hosting MEGA.CO.NZ di Kim Dotcom.
Ho un problema:vorrei visualizzare in un label la velocità di download e la dimensione rimasta da scaricare del file.
Tutto questo mentre sto scrivendo il file su disco.
Ecco il codice della void download:
Codice sorgente - presumibilmente Java

  1. public void download(String url, String path) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, InvalidAlgorithmParameterException, IOException, IllegalBlockSizeException, BadPaddingException, JSONException, InterruptedException{
  2.                
  3.                 print("Download started");
  4.                 JOptionPane.showMessageDialog(fr, "Download Iniziato", "Information", JOptionPane.INFORMATION_MESSAGE);
  5.  
  6.                 String[] s = url.split("!");
  7.                 String file_id = s[1];
  8.                 byte[] file_key = MegaCrypt.base64_url_decode_byte(s[2]);
  9.  
  10.                 int[] intKey = MegaCrypt.aByte_to_aInt(file_key);
  11.                 JSONObject json = new JSONObject();
  12.                 try {
  13.                         json.put("a", "g");
  14.                         json.put("g", "1");
  15.                         json.put("p", file_id);
  16.                 } catch (JSONException e) {
  17.                         e.printStackTrace();
  18.                 }
  19.                
  20.                 JSONObject file_data;
  21.                 file_data = new JSONObject(api_request(json.toString()));
  22.                
  23.                 int[] keyNOnce = new int[] { intKey[0] ^ intKey[4], intKey[1] ^ intKey[5], intKey[2] ^ intKey[6], intKey[3] ^ intKey[7], intKey[4], intKey[5] };
  24.                 byte[] key = MegaCrypt.aInt_to_aByte(keyNOnce[0], keyNOnce[1], keyNOnce[2], keyNOnce[3]);
  25.  
  26.                 int[] iiv = new int[] { keyNOnce[4], keyNOnce[5], 0, 0 };
  27.                 byte[] iv = MegaCrypt.aInt_to_aByte(iiv);
  28.  
  29.                 @SuppressWarnings("unused")
  30.                 int file_size = file_data.getInt("s");
  31.                 file_sizes = (((file_size) / 1024) / 1024);
  32.                 filesize.setText( (file_sizes) + "MB");
  33.                 filesize.setVisible(true);
  34.                              
  35.                 String attribs = (file_data.getString("at"));
  36.                 attribs = new String(MegaCrypt.aes_cbc_decrypt(MegaCrypt.base64_url_decode_byte(attribs), key));
  37.  
  38.                 file_name = attribs.substring(10,attribs.lastIndexOf("\""));
  39.                 print(file_name);
  40.                 filename.setText("Nome File:" + file_name);
  41.                 filename.setVisible(true);
  42.                 final IvParameterSpec ivSpec = new IvParameterSpec(iv);
  43.                 final SecretKeySpec skeySpec = new SecretKeySpec(key, "AES");
  44.                 Cipher cipher = Cipher.getInstance("AES/CTR/nopadding");
  45.                 cipher.init(Cipher.ENCRYPT_MODE, skeySpec, ivSpec);
  46.                 InputStream is = null;
  47.                 String file_url = file_data.getString("g");
  48.                 FileOutputStream fos = new FileOutputStream(path+File.separator+file_name);
  49.                 final OutputStream cos = new CipherOutputStream(fos, cipher);
  50.                 final Cipher decipher = Cipher.getInstance("AES/CTR/NoPadding");
  51.                 decipher.init(Cipher.ENCRYPT_MODE, skeySpec, ivSpec);
  52.                
  53. try {
  54.                         URLConnection urlConn = new URL(file_url).openConnection();
  55.                         print(file_url);
  56.                         is = urlConn.getInputStream();
  57.                         while ((read = is.read(buffer)) > 0)
  58.                         {
  59.                             cos.write(buffer, 0, read);
  60.                             speed = ((((file_size)/1024)/1024) - (((read)/1024)/1024));
  61.                             aString = Double.toString(speed);
  62.                             print(speed);
  63.                             System.out.println(read);+
  64.  
  65.                             dwspd.setText("Velocità Download" + speed);    
  66.                         }                
  67.                 } finally {
  68.                         try {
  69.                                 cos.close();
  70.                                 if (is != null) {
  71.                                         is.close();
  72.                                 }
  73.                         } finally {
  74.                                 if (fos != null) {
  75.                                         fos.close();
  76.                                 }
  77.                         }
  78.                 }
  79.                 JOptionPane.showMessageDialog(fr, "Download Completato", "Information", JOptionPane.INFORMATION_MESSAGE);
  80.                 print("Download finished");


dwspd è una label... e vorrei che ad ogni ciclo del while venga settata. però non si vede neanche... Solo quando finisce di scaricare il file viene settata con l'ultimo numero!
Colgo l'occasione per chiedere ... se qualcuno vuole realizzare questo progetto insieme a me ;)
Saluti
Lorenzo

Ultima modifica effettuata da lillogoal il 08/05/2013 alle 12:03
PM Quote
Avatar
LittleHacker (Member)
Guru


Messaggi: 1033
Iscritto: 28/04/2009

Segnala al moderatore
Postato alle 18:16
Mercoledì, 08/05/2013
Devi usare il multitasking!
Ecco un bel esempio: http://technology.amis.nl/2009/02/19/asynchronous-processi ..., qui vai ad inserire il codice che scrive sulla label la percentuale! :k:

PM Quote
Avatar
lillogoal (Member)
Rookie


Messaggi: 28
Iscritto: 26/04/2013

Segnala al moderatore
Postato alle 19:57
Mercoledì, 08/05/2013
Grazie mille, ci avevo pensato che fosse un problema di thread! Solo che non ho mai usato quelle classi.
Non è che potresti provare a farmelo nel mio caso? perchè ho cercato anche su internet ma non riesco bene a capire! :( grazie ancora

PM Quote
Avatar
LittleHacker (Member)
Guru


Messaggi: 1033
Iscritto: 28/04/2009

Segnala al moderatore
Postato alle 22:56
Mercoledì, 08/05/2013
Testo quotato

Postato originariamente da lillogoal:

Grazie mille, ci avevo pensato che fosse un problema di thread! Solo che non ho mai usato quelle classi.
Non è che potresti provare a farmelo nel mio caso? perchè ho cercato anche su internet ma non riesco bene a capire! :( grazie ancora



Non programmo più in java! Comunque puoi sempre aspettare la risposta dei più guru in JAVA! :k:

PM Quote
Avatar
lillogoal (Member)
Rookie


Messaggi: 28
Iscritto: 26/04/2013

Segnala al moderatore
Postato alle 13:03
Giovedì, 09/05/2013
Ti ringrazio lo stesso :) aspetto fiducioso altre risposte ;)

PM Quote
Avatar
lillogoal (Member)
Rookie


Messaggi: 28
Iscritto: 26/04/2013

Segnala al moderatore
Postato alle 18:33
Mercoledì, 15/05/2013
Potete chiudere ho risolto! Ho utilizzato lo SwingWorker semplice e intuitivo ;)

PM Quote