Merge commit 'dm/experimental' into test_0413
authorschon <schon@dev03-server>
Wed, 13 Apr 2011 11:30:39 +0000 (20:30 +0900)
committerschon <schon@dev03-server>
Wed, 13 Apr 2011 11:30:39 +0000 (20:30 +0900)
1  2 
data/setup.xml
lib/dvb/dvb.cpp
lib/dvb/frontend.cpp
lib/python/Components/Scanner.py
lib/python/Screens/DefaultWizard.py
lib/python/Screens/InfoBarGenerics.py
lib/python/Screens/TaskView.py

diff --combined data/setup.xml
                        <item level="0" text="Aspect Ratio">config.av.aspectratio</item>
                        <item level="0" text="TV System">config.av.tvsystem</item>
                        <item level="1" text="WSS on 4:3">config.av.wss</item>
 -                      <item level="1" text="AC3 default">config.av.defaultac3</item>
 -                      <item level="1" text="General AC3 delay (ms)">config.av.generalAC3delay</item>
 +                      <item level="1" text="Dolby Digital default">config.av.defaultac3</item>
 +                      <item level="1" text="General Dolby Digital delay (ms)">config.av.generalAC3delay</item>
                        <item level="1" text="General PCM delay (ms)">config.av.generalPCMdelay</item>
 -                      <item level="1" text="AC3 downmix" requires="CanDownmixAC3">config.av.downmix_ac3</item>
 +                      <item level="1" text="Dolby Digital downmix" requires="CanDownmixAC3">config.av.downmix_ac3</item>
                        <item level="1" text="Auto scart switching" requires="ScartSwitch">config.av.vcrswitch</item>
                </setup>
                <setup key="usage" title="Customize">
                        <item level="2" text="Load Length of Movies in Movielist">config.usage.load_length_of_movies_in_moviellist</item>
                        <item level="1" text="Show positioner movement">config.usage.showdish</item>
                        <item level="1" text="Enable multiple bouquets">config.usage.multibouquet</item>
+                       <item level="1" text="Multi-EPG bouquet selection">config.usage.multiepg_ask_bouquet</item>
                        <item level="1" text="Change bouquets in quickzap">config.usage.quickzap_bouquet_change</item>
                        <item level="1" text="Alternative radio mode">config.usage.e1like_radio_mode</item>
                        <item level="1" text="Action on long powerbutton press">config.usage.on_long_powerpress</item>
                        <item level="1" text="Action on short powerbutton press">config.usage.on_short_powerpress</item>
+                       <item level="1" text="Position of finished Timers in Timerlist">config.usage.timerlist_finished_timer_position</item>
                        <item level="0" text="Infobar timeout">config.usage.infobar_timeout</item>
                        <item level="1" text="12V output" requires="12V_Output">config.usage.output_12V</item>
                        <item level="0" text="Show event-progress in channel selection">config.usage.show_event_progress_in_servicelist</item>
diff --combined lib/dvb/dvb.cpp
index 61924ad,0b1bdc2..af46823
mode 100755,100644..100755
@@@ -145,19 -145,20 +145,20 @@@ eDVBAdapterLinux::eDVBAdapterLinux(int 
  #endif
                if (stat(filename, &s))
                        break;
-               ePtr<eDVBFrontend> fe;
+               eDVBFrontend *fe;
  
                {
                        int ok = 0;
-                       fe = new eDVBFrontend(m_nr, num_fe, ok);
+                       fe = new eDVBFrontend(m_nr, num_fe, ok, true);
                        if (ok)
-                               m_frontend.push_back(fe);
+                               m_simulate_frontend.push_back(ePtr<eDVBFrontend>(fe));
                }
                {
                        int ok = 0;
-                       fe = new eDVBFrontend(m_nr, num_fe, ok, true);
+                       fe = new eDVBFrontend(m_nr, num_fe, ok, false, fe);
                        if (ok)
-                               m_simulate_frontend.push_back(fe);
+                               m_frontend.push_back(ePtr<eDVBFrontend>(fe));
                }
                ++num_fe;
        }
@@@ -1186,22 -1187,8 +1187,22 @@@ void eDVBChannel::frontendStateChanged(
                }
        } else if (state == iDVBFrontend::stateFailed)
        {
 +#ifdef BUILD_VUPLUS /* ikseong  */
 +              if (m_current_frontend_parameters)
 +              {
 +                      eDebug("OURSTATE: lost lock, trying to retune");
 +                      ourstate = state_tuning;
 +                      m_frontend->get().tune(*m_current_frontend_parameters);
 +              } 
 +              else
 +              {
 +                      eDebug("OURSTATE: failed");
 +                      ourstate = state_failed;
 +              }
 +#else
                eDebug("OURSTATE: failed");
                ourstate = state_failed;
 +#endif                
        } else
                eFatal("state unknown");
  
diff --combined lib/dvb/frontend.cpp
index 47e1ab5,5718896..7777bf6
mode 100755,100644..100755
@@@ -453,8 -453,8 +453,8 @@@ DEFINE_REF(eDVBFrontend)
  
  int eDVBFrontend::PriorityOrder=0;
  
- eDVBFrontend::eDVBFrontend(int adap, int fe, int &ok, bool simulate)
-       :m_simulate(simulate), m_enabled(false), m_type(-1), m_dvbid(fe), m_slotid(fe)
+ eDVBFrontend::eDVBFrontend(int adap, int fe, int &ok, bool simulate, eDVBFrontend *simulate_fe)
+       :m_simulate(simulate), m_enabled(false), m_type(-1), m_simulate_fe(simulate_fe), m_dvbid(fe), m_slotid(fe)
        ,m_fd(-1), m_rotor_mode(false), m_need_rotor_workaround(false), m_can_handle_dvbs2(false)
        ,m_state(stateClosed), m_timeout(0), m_tuneTimer(0)
  #if HAVE_DVB_API_VERSION < 3
@@@ -490,11 -490,6 +490,11 @@@ void eDVBFrontend::reopenFrontend(
        openFrontend();
  }
  
 +#ifdef BUILD_VUPLUS /* ikseong */
 +int frontend0_fd;
 +int frontend1_fd;
 +#endif
 +
  int eDVBFrontend::openFrontend()
  {
        if (m_state != stateClosed)
  #else
        dvb_frontend_info fe_info;
  #endif
-       eDebugNoSimulate("opening frontend %d", m_dvbid);
-       if (m_fd < 0)
+       if (!m_simulate)
        {
-               if (!m_simulate || m_type == -1)
+               eDebug("opening frontend %d", m_dvbid);
+               if (m_fd < 0)
                {
                        m_fd = ::open(m_filename, O_RDWR|O_NONBLOCK);
                        if (m_fd < 0)
                                eWarning("failed! (%s) %m", m_filename);
                                return -1;
                        }
 +#ifdef BUILD_VUPLUS /* ikseong */
 +                      else
 +                      {                               
 +                              if (m_dvbid==0)
 +                                      frontend0_fd = m_fd;
 +                              else if (m_dvbid==1)
 +                                      frontend1_fd = m_fd;
 +                      }
 +#endif
                }
-       }
-       else
-               eWarning("frontend %d already opened", m_dvbid);
-       if (m_type == -1)
-       {
-               if (::ioctl(m_fd, FE_GET_INFO, &fe_info) < 0)
+               else
+                       eWarning("frontend %d already opened", m_dvbid);
+               if (m_type == -1)
                {
-                       eWarning("ioctl FE_GET_INFO failed");
-                       ::close(m_fd);
-                       m_fd = -1;
-                       return -1;
-               }
+                       if (::ioctl(m_fd, FE_GET_INFO, &fe_info) < 0)
+                       {
+                               eWarning("ioctl FE_GET_INFO failed");
+                               ::close(m_fd);
+                               m_fd = -1;
+                               return -1;
+                       }
  
-               switch (fe_info.type)
-               {
-               case FE_QPSK:
-                       m_type = iDVBFrontend::feSatellite;
-                       break;
-               case FE_QAM:
-                       m_type = iDVBFrontend::feCable;
-                       break;
-               case FE_OFDM:
-                       m_type = iDVBFrontend::feTerrestrial;
-                       break;
-               default:
-                       eWarning("unknown frontend type.");
-                       ::close(m_fd);
-                       m_fd = -1;
-                       return -1;
+                       switch (fe_info.type)
+                       {
+                       case FE_QPSK:
+                               m_type = iDVBFrontend::feSatellite;
+                               break;
+                       case FE_QAM:
+                               m_type = iDVBFrontend::feCable;
+                               break;
+                       case FE_OFDM:
+                               m_type = iDVBFrontend::feTerrestrial;
+                               break;
+                       default:
+                               eWarning("unknown frontend type.");
+                               ::close(m_fd);
+                               m_fd = -1;
+                               return -1;
+                       }
+                       if (m_simulate_fe)
+                               m_simulate_fe->m_type = m_type;
+                       eDebugNoSimulate("detected %s frontend", "satellite\0cable\0    terrestrial"+fe_info.type*10);
                }
-               eDebugNoSimulate("detected %s frontend", "satellite\0cable\0    terrestrial"+fe_info.type*10);
-       }
  
  #if HAVE_DVB_API_VERSION < 3
-       if (m_type == iDVBFrontend::feSatellite)
-       {
-                       if (m_secfd < 0)
-                       {
-                               if (!m_simulate)
+               if (m_type == iDVBFrontend::feSatellite)
+               {
+                               if (m_secfd < 0)
                                {
-                                       m_secfd = ::open(m_sec_filename, O_RDWR);
-                                       if (m_secfd < 0)
+                                       if (!m_simulate)
                                        {
-                                               eWarning("failed! (%s) %m", m_sec_filename);
-                                               ::close(m_fd);
-                                               m_fd=-1;
-                                               return -1;
+                                               m_secfd = ::open(m_sec_filename, O_RDWR);
+                                               if (m_secfd < 0)
+                                               {
+                                                       eWarning("failed! (%s) %m", m_sec_filename);
+                                                       ::close(m_fd);
+                                                       m_fd=-1;
+                                                       return -1;
+                                               }
                                        }
                                }
-                       }
-                       else
-                               eWarning("sec %d already opened", m_dvbid);
-       }
+                               else
+                                       eWarning("sec %d already opened", m_dvbid);
+               }
  #endif
  
-       setTone(iDVBFrontend::toneOff);
-       setVoltage(iDVBFrontend::voltageOff);
-       if (!m_simulate)
-       {
                m_sn = eSocketNotifier::create(eApp, m_fd, eSocketNotifier::Read, false);
                CONNECT(m_sn->activated, eDVBFrontend::feEvent);
        }
  
+       setTone(iDVBFrontend::toneOff);
+       setVoltage(iDVBFrontend::voltageOff);
        return 0;
  }
  
@@@ -753,10 -738,6 +752,10 @@@ void eDVBFrontend::timeout(
        m_tuning = 0;
        if (m_state == stateTuning)
        {
 +#ifdef BUILD_VUPLUS /* ikseong  */
 +              eDVBFrontend *sec_fe = this;
 +              sec_fe->m_data[CSW] = sec_fe->m_data[UCSW] = sec_fe->m_data[TONEBURST] = -1; // reset diseqc
 +#endif
                m_state = stateFailed;
                m_stateChanged(this);
        }
@@@ -1,7 -1,7 +1,7 @@@
  from Plugins.Plugin import PluginDescriptor
  from Components.PluginComponent import plugins
  
 -from os import path as os_path, walk as os_walk
 +from os import path as os_path, walk as os_walk, system
  from mimetypes import guess_type, add_type
  
  add_type("application/x-debian-package", ".ipk")
@@@ -11,6 -11,8 +11,8 @@@ add_type("application/x-dream-package"
  add_type("application/x-dream-image", ".nfi")
  add_type("video/MP2T", ".ts")
  add_type("video/x-dvd-iso", ".iso")
+ add_type("video/x-matroska", ".mkv")
+ add_type("audio/x-matroska", ".mka")
  
  def getType(file):
        (type, _) = guess_type(file)
@@@ -126,8 -128,6 +128,8 @@@ def scanDevice(mountpoint)
        for p in paths_to_scan:
                path = os_path.join(mountpoint, p.path)
  
 +                cmd = "ls " + path
 +                system(cmd)
                for root, dirs, files in os_walk(path):
                        for f in files:
                                path = os_path.join(root, f)
index a2742ab,54e241d..fd2e54f
mode 100755,100644..100755
@@@ -25,9 -25,10 +25,10 @@@ class DefaultWizard(WizardLanguage, Dre
                self["arrowup2"] = MovingPixmap()
        
        def setDirectory(self):
-               os_system("mount %s %s" % (resolveFilename(SCOPE_DEFAULTPARTITION), resolveFilename(SCOPE_DEFAULTPARTITIONMOUNTDIR)))
                self.directory = resolveFilename(SCOPE_DEFAULTPARTITIONMOUNTDIR)
                self.xmlfile = "defaultwizard.xml"
+               if self.directory:
+                       os_system("mount %s %s" % (resolveFilename(SCOPE_DEFAULTPARTITION), self.directory))
          
        def markDone(self):
                config.misc.defaultchosen.value = 0
@@@ -37,7 -38,7 +38,7 @@@
        def statusCallback(self, status, progress):
                print "statusCallback:", status, progress
                if status == DreamInfoHandler.STATUS_DONE:
 -                      self["text"].setText(_("The installation of the default settings is finished. You can now continue configuring your Dreambox by pressing the OK button on the remote control."))
 +                      self["text"].setText(_("The installation of the default settings is finished. You can now continue configuring your STB by pressing the OK button on the remote control."))
                        self.markDone()
                        self.disableKeys = False
  
@@@ -103,12 -104,12 +104,12 @@@ def filescan(**kwargs)
                                        ScanPath(path = "dmpkg", with_subdirs = True), 
                                        ScanPath(path = "", with_subdirs = False), 
                                ], 
 -                      name = "Dream-Package", 
 +                      name = "STB-Package", 
                        description = _("Install settings, skins, software..."), 
                        openfnc = filescan_open, )
  
  print "add dreampackage scanner plugin"
 -plugins.addPlugin(PluginDescriptor(name="Dream-Package", where = PluginDescriptor.WHERE_FILESCAN, fnc = filescan, internal = True))
 +plugins.addPlugin(PluginDescriptor(name="STB-Package", where = PluginDescriptor.WHERE_FILESCAN, fnc = filescan, internal = True))
  print "added"
  
  wizardManager.registerWizard(DefaultWizard, config.misc.defaultchosen.value, priority = 6)
index d55e661,93a4788..07fbac8
mode 100755,100644..100755
@@@ -555,11 -555,35 +555,35 @@@ class InfoBarEPG
  
        def openMultiServiceEPG(self, withCallback=True):
                bouquets = self.servicelist.getBouquetList()
-               root = self.servicelist.getRoot()
                if bouquets is None:
                        cnt = 0
                else:
                        cnt = len(bouquets)
+               if config.usage.multiepg_ask_bouquet.value:
+                       self.openMultiServiceEPGAskBouquet(bouquets, cnt, withCallback)
+               else:
+                       self.openMultiServiceEPGSilent(bouquets, cnt, withCallback)
+       def openMultiServiceEPGAskBouquet(self, bouquets, cnt, withCallback):
+               if cnt > 1: # show bouquet list
+                       if withCallback:
+                               self.bouquetSel = self.session.openWithCallback(self.closed, BouquetSelector, bouquets, self.openBouquetEPG, enableWrapAround=True)
+                               self.dlg_stack.append(self.bouquetSel)
+                       else:
+                               self.bouquetSel = self.session.open(BouquetSelector, bouquets, self.openBouquetEPG, enableWrapAround=True)
+               elif cnt == 1:
+                       self.openBouquetEPG(bouquets[0][1], withCallback)
+       def openMultiServiceEPGSilent(self, bouquets, cnt, withCallback):
+               root = self.servicelist.getRoot()
+               rootstr = root.toCompareString()
+               current = 0
+               for bouquet in bouquets:
+                       if bouquet[1].toCompareString() == rootstr:
+                               break
+                       current += 1
+               if current >= cnt:
+                       current = 0
                if cnt > 1: # create bouquet list for bouq+/-
                        self.bouquetSel = SilentBouquetSelector(bouquets, True, self.servicelist.getBouquetNumOffset(root))
                if cnt >= 1:
@@@ -1630,11 -1654,6 +1654,11 @@@ class InfoBarInstantRecord
                dir = preferredInstantRecordPath()
                if not dir or not fileExists(dir, 'w'):
                        dir = defaultMoviePath()
 +#     ikseong
 +              if not fileExists("/hdd", 0):
 +                      print "not found /hdd"
 +                      system("ln -s /media/hdd /hdd")
 +#
                try:
                        stat = os_stat(dir)
                except:
index fbbbed7,5dd744f..dafc263
mode 100755,100644..100755
@@@ -2,6 -2,7 +2,7 @@@ from Screen import Scree
  from Components.ConfigList import ConfigListScreen
  from Components.config import config, ConfigSubsection, ConfigSelection, getConfigListEntry
  from Components.SystemInfo import SystemInfo
+ from Components.Task import job_manager
  from InfoBarGenerics import InfoBarNotifications
  import Screens.Standby
  from Tools import Notifications
@@@ -108,10 -109,13 +109,13 @@@ class JobView(InfoBarNotifications, Scr
                        self.close(False)
  
        def abort(self):
-               if self.job.status in (self.job.FINISHED, self.job.FAILED):
+               if self.job.status == self.job.NOT_STARTED:
+                       job_manager.active_jobs.remove(self.job)
                        self.close(False)
-               if self["cancelable"].boolean == True:
+               elif self.job.status == self.job.IN_PROGRESS and self["cancelable"].boolean == True:
                        self.job.cancel()
+               else:
+                       self.close(False)
  
        def performAfterEvent(self):
                self["config"].hide()
                from Screens.MessageBox import MessageBox
                if self.settings.afterEvent.getValue() == "deepstandby":
                        if not Screens.Standby.inTryQuitMainloop:
 -                              Notifications.AddNotificationWithCallback(self.sendTryQuitMainloopNotification, MessageBox, _("A sleep timer wants to shut down\nyour Dreambox. Shutdown now?"), timeout = 20)
 +                              Notifications.AddNotificationWithCallback(self.sendTryQuitMainloopNotification, MessageBox, _("A sleep timer wants to shut down\nyour STB. Shutdown now?"), timeout = 20)
                elif self.settings.afterEvent.getValue() == "standby":
                        if not Screens.Standby.inStandby:
 -                              Notifications.AddNotificationWithCallback(self.sendStandbyNotification, MessageBox, _("A sleep timer wants to set your\nDreambox to standby. Do that now?"), timeout = 20)
 +                              Notifications.AddNotificationWithCallback(self.sendStandbyNotification, MessageBox, _("A sleep timer wants to set your\nSTB to standby. Do that now?"), timeout = 20)
  
        def checkNotifications(self):
                InfoBarNotifications.checkNotifications(self)