/usr/lib/rhythmbox/plugins/rb/rb.py is in rhythmbox 2.96-0ubuntu4.1.
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 | # -*- Mode: python; coding: utf-8; tab-width: 8; indent-tabs-mode: t; -*-
#
# Copyright 2006, James Livingston <doclivingston@gmail.com>
# Copyright 2006, Ed Catmur <ed@catmur.co.uk>
# Copyright 2007, Jonathan Matthew
#
# This program 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 2, or (at your option)
# any later version.
#
# The Rhythmbox authors hereby grant permission for non-GPL compatible
# GStreamer plugins to be used and distributed together with GStreamer
# and Rhythmbox. This permission is above and beyond the permissions granted
# by the GPL license by which Rhythmbox is covered. If you modify this code
# you may extend this exception to your version of the code, but you are not
# obligated to do so. If you do not wish to do so, delete this exception
# statement from your version.
#
# This program 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 this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
import sys
import os.path
import os
import time
import thread
from gi.repository import RB
# rb classes
from Loader import Loader
from Loader import UpdateCheck
from Coroutine import Coroutine
from URLCache import URLCache
def try_load_icon(theme, icon, size, flags):
try:
return theme.load_icon(icon, size, flags)
except:
return None
def append_plugin_source_path(theme, iconpath):
# check for a Makefile.am in the dir the file was loaded from
fr = sys._getframe(1)
co = fr.f_code
filename = co.co_filename
# and if found, append the icon path
dir = filename[:filename.rfind(os.sep)]
if os.path.exists(dir + "/Makefile.am"):
icondir = dir + iconpath
theme.append_search_path(icondir)
def entry_equal(a, b):
if (a is None and b is None):
return True
if (a is None or b is None):
return False
return a.get_string(RB.RhythmDBPropType.LOCATION) == b.get_string(RB.RhythmDBPropType.LOCATION)
def find_plugin_file(plugin, filename):
info = plugin.plugin_info
data_dir = info.get_data_dir()
path = os.path.join(data_dir, filename)
print "looking for " + filename + " in " + data_dir
if os.path.exists(path):
return path
return RB.file(filename)
class _rbdebugfile:
def __init__(self, fn):
self.fn = fn
def write(self, data):
if data == '\n':
return
fr = sys._getframe(1)
co = fr.f_code
filename = co.co_filename
# strip off the cwd, for if running uninstalled
cwd = os.getcwd()
if cwd[-1] != os.sep:
cwd += os.sep
if filename[:len(cwd)] == cwd:
filename = filename[len(cwd):]
# add the class name to the method, if 'self' exists
methodname = co.co_name
if fr.f_locals.has_key('self'):
methodname = '%s.%s' % (fr.f_locals['self'].__class__.__name__, methodname)
ln = co.co_firstlineno + fr.f_lineno
RB.debug_real (methodname, filename, ln, True, str(data))
def close(self): pass
def flush(self): pass
def fileno(self): return self.fn
def isatty(self): return 0
def read(self, a): return ''
def readline(self): return ''
def readlines(self): return []
writelines = write
def seek(self, a): raise IOError, (29, 'Illegal seek')
def tell(self): raise IOError, (29, 'Illegal seek')
truncate = tell
sys.stdout = _rbdebugfile(sys.stdout.fileno())
|