@@ -589,134 +589,126 @@ protected void onPostExecute(String text) {
589
589
* Download the training Data and save this to external storage
590
590
*/
591
591
private class DownloadTrainingTask extends AsyncTask <String , Integer , Boolean > {
592
- String size ;
592
+ private String size ;
593
593
594
- @ Override
595
- protected void onPreExecute () {
596
- super .onPreExecute ();
597
- mProgressDialog = new ProgressDialog (MainActivity .this );
598
- mProgressDialog .setProgressStyle (ProgressDialog .STYLE_SPINNER );
599
- mProgressDialog .setIndeterminate (true );
600
- mProgressDialog .setCancelable (false );
601
- mProgressDialog .setTitle (getString (R .string .downloading ));
602
- mProgressDialog .setMessage (getString (R .string .downloading_language ));
603
- mProgressDialog .show ();
604
- }
594
+ @ Override
595
+ protected void onPreExecute () {
596
+ super .onPreExecute ();
597
+ mProgressDialog = new ProgressDialog (MainActivity .this );
598
+ mProgressDialog .setProgressStyle (ProgressDialog .STYLE_SPINNER );
599
+ mProgressDialog .setIndeterminate (true );
600
+ mProgressDialog .setCancelable (false );
601
+ mProgressDialog .setTitle (getString (R .string .downloading ));
602
+ mProgressDialog .setMessage (getString (R .string .downloading_language ));
603
+ mProgressDialog .show ();
604
+ }
605
605
606
- @ Override
607
- protected void onProgressUpdate (Integer ... values ) {
608
- super .onProgressUpdate (values );
606
+ @ Override
607
+ protected void onProgressUpdate (Integer ... values ) {
608
+ super .onProgressUpdate (values );
609
+ if (mProgressDialog != null ) {
609
610
int percentage = values [0 ];
610
- if (mProgressDialog != null ) {
611
- mProgressDialog .setMessage (percentage + getString (R .string .percentage_downloaded ) + size );
612
- mProgressDialog .show ();
613
- }
611
+ mProgressDialog .setMessage (percentage + getString (R .string .percentage_downloaded ) + size );
612
+ mProgressDialog .show ();
614
613
}
614
+ }
615
615
616
- @ Override
617
- protected void onPostExecute (Boolean bool ) {
618
- if (mProgressDialog != null ) {
619
- mProgressDialog .cancel ();
620
- mProgressDialog = null ;
621
- }
622
- initializeOCR (Utils .getTrainingDataLanguages (MainActivity .this ));
616
+ @ Override
617
+ protected void onPostExecute (Boolean success ) {
618
+ if (mProgressDialog != null ) {
619
+ mProgressDialog .dismiss ();
620
+ mProgressDialog = null ;
623
621
}
622
+ initializeOCR (Utils .getTrainingDataLanguages (MainActivity .this ));
623
+ }
624
624
625
- @ Override
626
- protected Boolean doInBackground (String ... languages ) {
627
- String dataType = languages [0 ];
628
- String lang = languages [1 ];
629
- return downloadTraningData (dataType , lang );
630
- }
625
+ @ Override
626
+ protected Boolean doInBackground (String ... languages ) {
627
+ String dataType = languages [0 ];
628
+ String lang = languages [1 ];
629
+ return downloadTrainingData (dataType , lang );
630
+ }
631
631
632
- /**
633
- * done the actual work of download
634
- *
635
- * @param dataType data type i.e best, fast, standard
636
- * @param lang language
637
- * @return true if success else false
638
- */
639
- private boolean downloadTraningData (String dataType , String lang ) {
640
- boolean result = true ;
641
- String downloadURL ;
642
- String location ;
643
-
644
- switch (dataType ) {
645
- case "best" :
646
- if (lang .equals ("akk" ))
647
- downloadURL = Constants .TESSERACT_DATA_DOWNLOAD_URL_AKK_BEST ;
648
- else if (lang .equals ("eqo" ))
649
- downloadURL = Constants .TESSERACT_DATA_DOWNLOAD_URL_EQU ;
650
- else
651
- downloadURL = String .format (Constants .TESSERACT_DATA_DOWNLOAD_URL_BEST , lang );
652
- break ;
653
- case "standard" :
654
- if (lang .equals ("akk" ))
655
- downloadURL = Constants .TESSERACT_DATA_DOWNLOAD_URL_AKK_STANDARD ;
656
- else if (lang .equals ("eqo" ))
657
- downloadURL = Constants .TESSERACT_DATA_DOWNLOAD_URL_EQU ;
658
- else
659
- downloadURL = String .format (Constants .TESSERACT_DATA_DOWNLOAD_URL_STANDARD , lang );
660
- break ;
661
- default :
662
- if (lang .equals ("akk" ))
663
- downloadURL = Constants .TESSERACT_DATA_DOWNLOAD_URL_AKK_FAST ;
664
- else if (lang .equals ("eqo" ))
665
- downloadURL = Constants .TESSERACT_DATA_DOWNLOAD_URL_EQU ;
666
- else
667
- downloadURL = String .format (Constants .TESSERACT_DATA_DOWNLOAD_URL_FAST , lang );
668
- }
632
+ /**
633
+ * Handles the actual work of downloading.
634
+ *
635
+ * @param dataType Data type i.e., best, fast, standard
636
+ * @param lang Language
637
+ * @return true if successful; false otherwise
638
+ */
639
+ private boolean downloadTrainingData (String dataType , String lang ) {
640
+ String downloadURL = getDownloadUrl (dataType , lang );
641
+ if (downloadURL == null ) {
642
+ return false ; // Invalid language or dataType
643
+ }
669
644
670
- URL url , base , next ;
671
- HttpURLConnection conn ;
672
- try {
673
- while (true ) {
674
- try {
675
- url = new URL (downloadURL );
676
- } catch (java .net .MalformedURLException ex ) {
677
-
678
- return false ;
679
- }
680
- conn = (HttpURLConnection ) url .openConnection ();
681
- conn .setInstanceFollowRedirects (false );
682
- switch (conn .getResponseCode ()) {
683
- case HttpURLConnection .HTTP_MOVED_PERM :
684
- case HttpURLConnection .HTTP_MOVED_TEMP :
685
- location = conn .getHeaderField ("Location" );
686
- base = new URL (downloadURL );
687
- next = new URL (base , location ); // Deal with relative URLs
688
- downloadURL = next .toExternalForm ();
689
- continue ;
690
- }
691
- break ;
692
- }
693
- conn .connect ();
645
+ try {
646
+ URL url = new URL (downloadURL );
647
+ HttpURLConnection conn = (HttpURLConnection ) url .openConnection ();
648
+ conn .setInstanceFollowRedirects (false );
649
+ downloadURL = followRedirects (conn , downloadURL );
694
650
695
- int totalContentSize = conn . getContentLength ();
696
- size = Utils . getSize ( totalContentSize );
651
+ conn = ( HttpURLConnection ) new URL ( downloadURL ). openConnection ();
652
+ conn . connect ( );
697
653
698
- InputStream input = new BufferedInputStream (url .openStream ());
654
+ int totalContentSize = conn .getContentLength ();
655
+ if (totalContentSize <= 0 ) {
656
+ return false ; // Invalid content length
657
+ }
658
+ size = Utils .getSize (totalContentSize );
699
659
700
- File destf = new File (currentDirectory , String .format (Constants .LANGUAGE_CODE , lang ));
701
- destf .createNewFile ();
702
- OutputStream output = new FileOutputStream (destf );
660
+ try (InputStream input = new BufferedInputStream (conn .getInputStream ());
661
+ OutputStream output = new FileOutputStream (new File (currentDirectory , String .format (Constants .LANGUAGE_CODE , lang )))) {
703
662
704
- byte [] data = new byte [1024 * 6 ];
705
- int count , downloaded = 0 ;
663
+ byte [] data = new byte [6 * 1024 ]; // 6KB buffer
664
+ int downloaded = 0 ;
665
+ int count ;
706
666
while ((count = input .read (data )) != -1 ) {
707
667
output .write (data , 0 , count );
708
668
downloaded += count ;
709
669
int percentage = (downloaded * 100 ) / totalContentSize ;
710
670
publishProgress (percentage );
711
671
}
712
672
output .flush ();
713
- output .close ();
714
- input .close ();
715
- } catch (Exception e ) {
716
- result = false ;
717
- e .printStackTrace ();
718
673
}
719
- return result ;
674
+ return true ; // Download successful
675
+ } catch (IOException e ) {
676
+ e .printStackTrace ();
677
+ return false ; // Handle exceptions
678
+ }
679
+ }
680
+
681
+ private String getDownloadUrl (String dataType , String lang ) {
682
+ switch (dataType ) {
683
+ case "best" :
684
+ return lang .equals ("akk" ) ? Constants .TESSERACT_DATA_DOWNLOAD_URL_AKK_BEST :
685
+ lang .equals ("eqo" ) ? Constants .TESSERACT_DATA_DOWNLOAD_URL_EQU :
686
+ String .format (Constants .TESSERACT_DATA_DOWNLOAD_URL_BEST , lang );
687
+ case "standard" :
688
+ return lang .equals ("akk" ) ? Constants .TESSERACT_DATA_DOWNLOAD_URL_AKK_STANDARD :
689
+ lang .equals ("eqo" ) ? Constants .TESSERACT_DATA_DOWNLOAD_URL_EQU :
690
+ String .format (Constants .TESSERACT_DATA_DOWNLOAD_URL_STANDARD , lang );
691
+ default : // Assuming "fast" is the default
692
+ return lang .equals ("akk" ) ? Constants .TESSERACT_DATA_DOWNLOAD_URL_AKK_FAST :
693
+ lang .equals ("eqo" ) ? Constants .TESSERACT_DATA_DOWNLOAD_URL_EQU :
694
+ String .format (Constants .TESSERACT_DATA_DOWNLOAD_URL_FAST , lang );
695
+ }
696
+ }
697
+
698
+ private String followRedirects (HttpURLConnection conn , String downloadURL ) throws IOException {
699
+ while (true ) {
700
+ int responseCode = conn .getResponseCode ();
701
+ if (responseCode == HttpURLConnection .HTTP_MOVED_PERM || responseCode == HttpURLConnection .HTTP_MOVED_TEMP ) {
702
+ String location = conn .getHeaderField ("Location" );
703
+ URL base = new URL (downloadURL );
704
+ downloadURL = new URL (base , location ).toExternalForm (); // Handle relative URLs
705
+ conn = (HttpURLConnection ) new URL (downloadURL ).openConnection (); // Re-open connection
706
+ } else {
707
+ break ; // No more redirects
708
+ }
720
709
}
710
+ return downloadURL ;
721
711
}
722
712
}
713
+
714
+ }
0 commit comments