04 июля | 2024г. | 21:36:49


АвторТема: Tweak Enigma 2 (без обсуждения)  (Прочитано 5928 раз)

0 Пользователей и 2 Гостей смотрят эту тему.

Оффлайн ака Учкун

  • Рыцарь Джедай
  • *****
  • Забанен!
  • Сообщений: 1098
  • Поблагодарили: 4787
  • Уважение: +49
Grizli предложил организовать такой твик и меня это заинтересовало.
Смысл твика:

Если в скине в разделе ChannelSelection использован виджет "Title", то название окна выбора каналов внутри фаворитов выглядит так:
Выбор канала (ТВ) - Фавориты / Название_фаворита
Так вот grizli предложил оставить только Название_фаворита, что будет куда логичнее, смотрибельнее, да и место освободится рядом для чего-то еще.....

Покажу на примере как это сделать.

Вот как выглядит это окно (обращаем внимание на название окна) до организации данного твика



То есть пока название окна выглядит так
Выбор канала (ТВ) - Фавориты /Любимое ТВ

Открываем файл ChannelSelection.py, находящийся в имидже по пути:
Спойлер   :
/usr/lib/enigma2/python/Screens/
Находим класс ChannelSelectionBase, то есть:
Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.И в этом классе внутри инструкции инициализации, то есть здесь:
Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.находим строчку:
Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.и переделаем ее в такой вид:
Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.
Далее находим def getServiceName(self, ref):, а в ней строчку:
Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.и переделаем ее так:
Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.
И наконец добираемся до самой нужной инструкции def buildTitleString(self):, которая собственно и создает название окна выбора каналов. Здесь находим строчку:
Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.И переделаем ее тоже:
Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.


Внимание! При всех изменениях в питоновском файле не забываем о "золотом" правиле об отступах-табуляциях!
Также не забываем, что редактировать файлы питона можно только на самых продвинутых текстовых редакторах.
При нарушении любого из этих правил, просто испортите файл и будете зеленеть
....

На всякий случай прописываю здесь тот самый измененный класс (вернее часть класса) из опенпли 4.0...

Спойлер   :
class ChannelSelectionBase(Screen):
   def __init__(self, session):
      Screen.__init__(self, session)

      self["key_red"] = Button(_("All"))
      self["key_green"] = Button(_("Satellites"))
      self["key_yellow"] = Button(_("Provider"))
      self["key_blue"] = Button(_("Favourites"))

      self["list"] = ServiceList()
      self.servicelist = self["list"]

      self.numericalTextInput = NumericalTextInput()
      self.numericalTextInput.setUseableChars(u'1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ')

      self.servicePathTV = [ ]
      self.servicePathRadio = [ ]
      self.servicePath = [ ]
      self.history = [ ]
      self.rootChanged = False
      self.startRoot = None

      self.mode = MODE_TV
      self.dopipzap = False

      self.pathChangeDisabled = False

      self["ChannelSelectBaseActions"] = NumberActionMap(["ChannelSelectBaseActions", "NumberActions", "InputAsciiActions"],
         {
            "ServiceDown": self.moveDown,
            "ServiceUp": self.moveUp,
            "ServicePageDown": self.movePageDown,
            "ServicePageUp": self.movePageUp,
            "showFavourites": self.showFavourites,
            "showAllServices": self.showAllServices,
            "showProviders": self.showProviders,
            "showSatellites": self.showSatellites,
            "nextBouquet": self.nextBouquet,
            "prevBouquet": self.prevBouquet,
            "nextMarker": self.nextMarker,
            "prevMarker": self.prevMarker,
            "gotAsciiCode": self.keyAsciiCode,
            "1": self.keyNumberGlobal,
            "2": self.keyNumberGlobal,
            "3": self.keyNumberGlobal,
            "4": self.keyNumberGlobal,
            "5": self.keyNumberGlobal,
            "6": self.keyNumberGlobal,
            "7": self.keyNumberGlobal,
            "8": self.keyNumberGlobal,
            "9": self.keyNumberGlobal,
            "0": self.keyNumber0
         }, -1)
      self.maintitle = ""
      self.recallBouquetMode()

   def movePageUp(self):
      self.servicelist.servicePageUp()

   def movePageDown(self):
      self.servicelist.servicePageDown()

   def getBouquetNumOffset(self, bouquet):
      if not config.usage.multibouquet.value:
         return 0
      str = bouquet.toString()
      offset = 0
      if 'userbouquet.' in bouquet.toCompareString():
         serviceHandler = eServiceCenter.getInstance()
         servicelist = serviceHandler.list(bouquet)
         if not servicelist is None:
            while True:
               serviceIterator = servicelist.getNext()
               if not serviceIterator.valid(): #check if end of list
                  break
               number = serviceIterator.getChannelNum()
               if number > 0:
                  offset = number - 1
                  break
      return offset         

   def recallBouquetMode(self):
      if self.mode == MODE_TV:
         self.service_types = service_types_tv
         if config.usage.multibouquet.value:
            self.bouquet_rootstr = '1:7:1:0:0:0:0:0:0:0:FROM BOUQUET "bouquets.tv" ORDER BY bouquet'
         else:
            self.bouquet_rootstr = '%s FROM BOUQUET "userbouquet.favourites.tv" ORDER BY bouquet'%(self.service_types)
      else:
         self.service_types = service_types_radio
         if config.usage.multibouquet.value:
            self.bouquet_rootstr = '1:7:1:0:0:0:0:0:0:0:FROM BOUQUET "bouquets.radio" ORDER BY bouquet'
         else:
            self.bouquet_rootstr = '%s FROM BOUQUET "userbouquet.favourites.radio" ORDER BY bouquet'%(self.service_types)
      self.bouquet_root = eServiceReference(self.bouquet_rootstr)

   def setTvMode(self):
      self.mode = MODE_TV
      self.servicePath = self.servicePathTV
      self.recallBouquetMode()
      title = self.maintitle
      pos = title.find(" (")
      if pos != -1:
         title = title[:pos]
      title += _(" (TV)")
      self.setTitle(title)

   def setRadioMode(self):
      self.mode = MODE_RADIO
      self.servicePath = self.servicePathRadio
      self.recallBouquetMode()
      title = self.maintitle
      pos = title.find(" (")
      if pos != -1:
         title = title[:pos]
      title += _(" (Radio)")
      self.setTitle(title)

   def setRoot(self, root, justSet=False):
      if self.startRoot is None:
         self.startRoot = self.getRoot()
      path = root.getPath()
      isBouquet = 'FROM BOUQUET' in path and (root.flags & eServiceReference.isDirectory)
      inBouquetRootList = 'FROM BOUQUET "bouquets.' in path #FIXME HACK
      if not inBouquetRootList and isBouquet:
         self.servicelist.setMode(ServiceList.MODE_FAVOURITES)
      else:
         self.servicelist.setMode(ServiceList.MODE_NORMAL)
      self.servicelist.setRoot(root, justSet)
      self.rootChanged = True
      self.buildTitleString()

   def removeModeStr(self, str):
      if self.mode == MODE_TV:
         pos = str.find(_(" (TV)"))
      else:
         pos = str.find(_(" (Radio)"))
      if pos != -1:
         return str[:pos]
      return str

   def getServiceName(self, ref):
      str = self.removeModeStr(ServiceReference(ref).getServiceName())
      if 'User - bouquets' in str:
         return ""
      if not str:
         pathstr = ref.getPath()
         if 'FROM PROVIDERS' in pathstr:
            return _("Provider")
         if 'FROM SATELLITES' in pathstr:
            return _("Satellites")
         if ') ORDER BY name' in pathstr:
            return _("All")
      return str

   def buildTitleString(self):
      titleStr = self.getTitle()
      pos = titleStr.find(']')
      if pos == -1:
         pos = titleStr.find(')')
      if pos != -1:
         titleStr = titleStr[:pos+1]
         Len = len(self.servicePath)
         if Len > 0:
            base_ref = self.servicePath[0]
            if Len > 1:
               end_ref = self.servicePath[Len-1]
            else:
               end_ref = None
            nameStr = self.getServiceName(base_ref)
            titleStr += ' - ' + nameStr
            if end_ref is not None:
               if Len > 2:
                  titleStr += '/../'
               else:
                  titleStr += ''
               nameStr = self.getServiceName(end_ref)
               titleStr += nameStr
            self.setTitle(titleStr)

А вот как теперь выглядит это окно после этого твика (вернее название окна выбора каналов):



То есть теперь вместо вот этой строчки
Выбор канала (ТВ) - Фавориты /Любимое ТВ
вот такая строчка
(ТВ) - Любимое ТВ


Еще раз уточняю, что данный твик будет работоспособен, если только на вашем скине в разделе "Channel Selection" использован виджет "Title".
Некоторые скиномастера не используют этот виджет.
Например насколько я знаю многоуважаемый Sirius0103 предпочитает вместо этого виджета использовать статический текст.
Если так, в таком скине этот твик не заработает.....


  • vu+ultimo 9995
Мои авторские работы  нельзя редактировать для выкладывания на паблик.
Но их можно выкладывать неизмененными на любых ресурсах с указанием авторства
Мои кошельки:
WMZ     Z356196865451 WMR     R105983132832

Теги:
 

Похожие темы

  Тема / Автор Ответов Последний ответ
59 Ответов
50683 Просмотров
Последний ответ 26 декабря | 2022г. | 20:04:44
от Glimmer Man
19 Ответов
7809 Просмотров
Последний ответ 10 декабря | 2012г. | 23:19:53
от azovsk
10 Ответов
5972 Просмотров
Последний ответ 18 января | 2013г. | 01:52:32
от 2boom
1 Ответов
1243 Просмотров
Последний ответ 10 января | 2016г. | 12:22:40
от Wolf
0 Ответов
2808 Просмотров
Последний ответ 29 января | 2016г. | 09:33:55
от Serjoga



X

Добро пожаловать!

Мы заметили, что у Вас установлено расширение AdBlock или ему подобное. Пожалуйста добавьте наш Клуб в белый список, внесите этим посильную лепту в его развитие. Спасибо!