02 июля | 2024г. | 18:15:53


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

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

Оффлайн bobafetАвтор темы

  • Младший Джедай
  • **
  • Сообщений: 55
  • Поблагодарили: 112
  • Уважение: +2
Поскольку многие пользователи Gi начинали с Drima 500 они привыкли к определённым фишкам присутствующим в Enigma 1 и отсутствующим в Enigma 2. Попробуем по возможности это исправить, а так же просто что то изменить для удобства юзера.
У всех файлов выложенных мной, ноги растут из темы "Тюнинг Энигма 2" автор Vlamo с соседнего ресурса. Так что все лавры ему, с моей стороны только прямые руки. До этого сами файлы в свободном доступе не выкладывались, а были только инструкции. Перед выкладкой все файлы проверяются на последнем имидже Black Hole, на остальных тоже должны работать норм, но всегда сохраняйте копии оригинальных файлов. После любых изменений файлов/для применения изменений рестартуем энигму.
Аttention Предполагается использование на имиджах без ежедневного обновления. Как пишет сообщество, на PLI твики либо вообще не работают, либо будут слетать после обновлений.

1. Задача: Сделать цифровое отображение количества каналов в пакетах после их названия как в Dreambox500s.
Добавляем отображение количества сервисов в папках Services и New в списке каналов для enigma2.
Решение: Меняем файл по пути /usr/lib/enigma2/python/Screens/ChannelSelection.py на тот что в прицепе.

2. Задача: В менюшке записи поменять 1,2 позицию местами
Решение: Меняем файл по пути /usr/lib/enigma2/python/Screens/InfoBarGenerics.py на тот что в прицепе.
Автор SatCat

P.S. Начало темы здесь  Black Hole Gi S8895 / Vu+ Uno (обсуждения) Пост 409
продолжение здесь Converters, Renders, Components (без обсуждения)   Пост 20
Администрация при необходимости перенесёт.






  • Gi 8895/Vu+ UNO
Gi 8895(Vu+ Uno) [orig], 36E, BH_latest, Mgcamd 1.35a, HDD 160Gb, USB 512Mb
TV LG 50PZ750S Full HD/3D, LG 32LE5500 Full HD
net_Asus RT-N65U_CFW-Padavan_latest, Switch D-Link DGS-1005D

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

  • Рыцарь Джедай
  • *****
  • Забанен!
  • Сообщений: 1098
  • Поблагодарили: 4787
  • Уважение: +49
Tweak Enigma 2 (без обсуждения)
« Ответ #1: 14 ноября | 2013г. | 15:03:29 »
0
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 Ответов
50645 Просмотров
Последний ответ 26 декабря | 2022г. | 20:04:44
от Glimmer Man
19 Ответов
7798 Просмотров
Последний ответ 10 декабря | 2012г. | 23:19:53
от azovsk
10 Ответов
5968 Просмотров
Последний ответ 18 января | 2013г. | 01:52:32
от 2boom
1 Ответов
1243 Просмотров
Последний ответ 10 января | 2016г. | 12:22:40
от Wolf
0 Ответов
2804 Просмотров
Последний ответ 29 января | 2016г. | 09:33:55
от Serjoga



X

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

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