]> git.sesse.net Git - vlc/blobdiff - modules/access/dvb/scan.c
dvb: scanning ain't only -T, change dialog
[vlc] / modules / access / dvb / scan.c
index d8ec30ecfdd161ff2ac581e43f982a23f80e48e6..2d37c0f76b3d367546f47f66f087f1fdb9840afa 100644 (file)
@@ -30,7 +30,7 @@
 #include <vlc_common.h>
 #include <vlc_plugin.h>
 #include <vlc_access.h>
-#include <vlc_interface.h>
+#include <vlc_dialog.h>
 
 #ifdef HAVE_UNISTD_H
 #   include <unistd.h>
@@ -64,7 +64,7 @@
 #endif
 
 #ifdef ENABLE_HTTPD
-#   include "vlc_httpd.h"
+#   include <vlc_httpd.h>
 #endif
 
 #include "dvb.h"
@@ -126,7 +126,7 @@ int scan_Init( vlc_object_t *p_obj, scan_t *p_scan, const scan_parameter_t *p_pa
 
     p_scan->p_obj = VLC_OBJECT(p_obj);
     p_scan->i_index = 0;
-    p_scan->i_dialog_id = -1;
+    p_scan->p_dialog = NULL;
     TAB_INIT( p_scan->i_service, p_scan->pp_service );
     p_scan->parameter = *p_parameter;
     p_scan->i_time_start = mdate();
@@ -135,8 +135,8 @@ int scan_Init( vlc_object_t *p_obj, scan_t *p_scan, const scan_parameter_t *p_pa
 }
 void scan_Clean( scan_t *p_scan )
 {
-    if( p_scan->i_dialog_id >= 0 )
-        intf_UserHide( p_scan->p_obj, p_scan->i_dialog_id );
+    if( p_scan->p_dialog != NULL )
+        dialog_ProgressDestroy( p_scan->p_dialog );
 
     for( int i = 0; i < p_scan->i_service; i++ )
         scan_service_Delete( p_scan->pp_service[i] );
@@ -146,27 +146,40 @@ void scan_Clean( scan_t *p_scan )
 static int ScanDvbCNextFast( scan_t *p_scan, scan_configuration_t *p_cfg, double *pf_pos )
 {
     msg_Dbg( p_scan->p_obj, "Scan index %"PRId64, p_scan->i_index );
-    if( p_scan->i_index <= ( 10 ) )
-    {
-        p_cfg->i_frequency = 100500000 + ( ( p_scan->i_index ) * 700000);
-    } 
-    else if ( p_scan->i_index <= (10 + 9  ) )
-    {
-        p_cfg->i_frequency = 97000000 + ( ( p_scan->i_index - 20 ) * 800000);
-    }
-    else if ( p_scan->i_index <= (38 + 17 ) )
-    {
-        p_cfg->i_frequency = 14250000 + ( ( p_scan->i_index - 33 ) * 700000);
-    }
-    else if ( p_scan->i_index <= (72 + (90-21) ) )
+    /* values from dvb-scan utils frequency-files, sorted
+     * by how often they appear, hopefully speedups finding
+     * services */
+    static int frequencies[] = {
+     410, 426, 418, 394, 402, 362,
+     370, 354, 346, 442, 434, 386,
+     378, 450, 306, 162, 154, 474,
+     466, 458, 338, 754, 714, 586,
+     562, 546, 514, 490, 314, 170,
+     113, 770, 762, 746, 738, 730,
+     722, 706, 690, 682, 674, 666,
+     650, 642, 634, 554, 538, 530,
+     506, 498, 330, 322, 283, 850,
+     842, 834, 818, 810, 802, 794,
+     786, 778, 748, 732, 728, 724,
+     720, 698, 660, 658, 656, 610,
+     594, 578, 570, 522, 482, 377,
+     372, 347, 339, 323, 315, 299,
+     298, 291, 275, 267, 259, 255,
+     251, 243, 235, 232, 227, 219,
+     211, 203, 195, 187, 179, 171,
+     163, 155, 147, 146, 143, 139,
+     131, 123, 121
+    };
+
+    if( p_scan->i_index < (sizeof(frequencies)/sizeof(int)) )
     {
-        p_cfg->i_frequency = 13800000 + ( ( p_scan->i_index - (72 + 21 ) )  * 800000);
+        p_cfg->i_frequency = 1000000 * ( frequencies[ p_scan->i_index ] );
     }
     else
     {
         return VLC_EGENERIC;
     }
-    *pf_pos = (double)p_scan->i_index / ( (90-21+22-5+10+9));
+    *pf_pos = (double)p_scan->i_index / (sizeof(frequencies)/sizeof(int));
     return VLC_SUCCESS;
 
 }
@@ -317,10 +330,10 @@ int scan_Next( scan_t *p_scan, scan_configuration_t *p_cfg )
         if( i_eta >= 0 )
             msg_Info( p_scan->p_obj, "Scan ETA %s | %f", secstotimestr( psz_eta, i_eta/1000000 ), f_position * 100 );
 
-        if( p_scan->i_dialog_id < 0 )
-            p_scan->i_dialog_id = intf_UserProgress( p_scan->p_obj, _("Scanning DVB-T"), psz_text, 100.0 * f_position, -1 );
-        else
-            intf_ProgressUpdate( p_scan->p_obj, p_scan->i_dialog_id, psz_text, 100 * f_position, -1 );
+        if( p_scan->p_dialog == NULL )
+            p_scan->p_dialog = dialog_ProgressCreate( p_scan->p_obj, _("Scanning DVB"), psz_text, _("Cancel") );
+        if( p_scan->p_dialog != NULL )
+            dialog_ProgressSet( p_scan->p_dialog, psz_text, f_position );
         free( psz_text );
     }
 
@@ -330,7 +343,7 @@ int scan_Next( scan_t *p_scan, scan_configuration_t *p_cfg )
 
 bool scan_IsCancelled( scan_t *p_scan )
 {
-    return p_scan->i_dialog_id >= 0 && intf_ProgressIsCancelled( p_scan->p_obj, p_scan->i_dialog_id );
+    return p_scan->p_dialog && dialog_ProgressCancelled( p_scan->p_dialog );
 }
 
 static scan_service_t *ScanFindService( scan_t *p_scan, int i_service_start, int i_program )