This file is indexed.

/usr/share/pyshared/gnomedvb/ui/widgets/ChannelsStore.py is in gnome-dvb-client 1:0.2.7-2.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
# -*- coding: utf-8 -*-
# Copyright (C) 2008,2009 Sebastian Pölsterl
#
# This file is part of GNOME DVB Daemon.
#
# GNOME DVB Daemon is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# GNOME DVB Daemon is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with GNOME DVB Daemon.  If not, see <http://www.gnu.org/licenses/>.

from gi.repository import Gtk
from gi.repository import GObject
import gnomedvb
from gnomedvb import global_error_handler
from gnomedvb.Callback import Callback
from cgi import escape
from gnomedvb import _

class ChannelsStore(Gtk.ListStore):

    (COL_NAME,
     COL_SID,) = range(2)
    
    __gsignals__ = {
        "loading-finished":  (GObject.SIGNAL_RUN_LAST, GObject.TYPE_NONE, []),
    }

    def __init__(self, device_group):
        """
        @param device_group: ID of device group the
        list of channels should be retrieved
        """
    
        Gtk.ListStore.__init__(self, str, long)
        
        self.set_sort_column_id(self.COL_NAME,
            Gtk.SortType.ASCENDING)
            
        self._add_channels(device_group)
        
    def _add_channels(self, device_group):
        channellist = device_group.get_channel_list()
        
        def append_channel(proxy, channels, user_data):
            for channel_id, name, is_radio in channels:
                self.append([name, channel_id])
            self.emit("loading-finished")
        
        channellist.get_channel_infos(result_handler=append_channel,
            error_handler=global_error_handler)


class ChannelsTreeStore(Gtk.TreeStore):

    (COL_GROUP_ID,
     COL_NAME,
     COL_SID,
     COL_GROUP,) = range(4)
    
    __gsignals__ = {
        "loading-finished":  (GObject.SIGNAL_RUN_LAST, GObject.TYPE_NONE, [int]),
    }
    
    def __init__(self, use_channel_groups=False):
        Gtk.TreeStore.__init__(self, int, str, long, GObject.GObject)
        
        self.set_sort_order(Gtk.SortType.ASCENDING)
        
        self._use_channel_groups = use_channel_groups
        self._manager = gnomedvb.DVBManagerClient ()
        self._manager.connect('group-added', self._on_manager_group_added)
        self._manager.connect('group-removed', self._on_manager_group_removed)
        self._add_channels()

    def _add_channels(self):
        def append_groups(dev_groups):
            for dev_group in dev_groups:
                self._append_group(dev_group)

        self._manager.get_registered_device_groups(result_handler=append_groups,
            error_handler=global_error_handler)
    
    def _append_group(self, dev_group):
        group_id = dev_group.get_id()
        group_name = dev_group.get_name()

        group_iter = self.append(None, [group_id, group_name, 0L, dev_group])
        channellist = dev_group.get_channel_list()
        
        d = Callback()
        if self._use_channel_groups:
            d.add_callback(self._append_channel_groups, channellist, group_id,
                group_iter, dev_group)
            self._manager.get_channel_groups(
                result_handler=lambda p,x,u: d.callback(x),
                error_handler=global_error_handler)
            # Put all available channels either in TV or radio group
            tv_group_iter = self.append(group_iter,
                [group_id, _("TV Channels"), 0L, dev_group])
            radio_group_iter = self.append(group_iter,
                [group_id, _("Radio Channels"), 0L, dev_group])
        else:
            # Do not distinguish between radio and TV
            tv_group_iter = group_iter
            radio_group_iter = group_iter

        d_all = Callback()
        d_all.add_callback(self._append_channels, group_id,
            dev_group, tv_group_iter, radio_group_iter)
        channellist.get_channel_infos(
            result_handler=lambda p,x,u: d_all.callback(x),
            error_handler=global_error_handler)
     
    def _append_channels(self, channels, group_id, dev_group, tv_group_iter, radio_group_iter):
        for channel_id, name, is_radio in channels:
            if is_radio:
                group_iter = radio_group_iter
            else:
                group_iter = tv_group_iter

            self.append(group_iter,
                [group_id,
                escape(name),
                channel_id,
                dev_group])
        self.emit("loading-finished", group_id)

    def _append_channel_groups(self, channel_groups, channellist, group_id, group_iter, dev_group):
        def append_channel(channels, chan_group_iter):
            for channel_id in channels:
                name, success = channellist.get_channel_name(channel_id)
                if success:
                    self.append(chan_group_iter,
                        [group_id,
                        escape(name),
                        channel_id,
                        dev_group])
        
        for chan_group_id, name in channel_groups:
            chan_group_iter = self.append(group_iter, [group_id, escape(name),
                0, dev_group])
            d = Callback()
            d.add_callback(append_channel, chan_group_iter)
            channellist.get_channels_of_group(chan_group_id,
                result_handler=lambda p,data,u: d.callback(data[1]),
                error_handler=global_error_handler)
                
        self.emit("loading-finished", group_id)
       
    def _on_manager_group_added(self, manager, group_id):
        group = manager.get_device_group(group_id)
        if group != None:
            self._append_group(group)
        
    def _on_manager_group_removed(self, manager, group_id):
        for row in self:
            if row[self.COL_GROUP_ID] == group_id:
                self.remove(row.iter)
                break
                
    def set_sort_order(self, order):
        self.set_sort_column_id(self.COL_NAME, order)