mythbuntu-dev team mailing list archive
-
mythbuntu-dev team
-
Mailing list archive
-
Message #00081
[Merge] lp:~tgm4883/mythbuntu/mythbuntu-common2 into lp:~mythbuntu-dev/mythbuntu/mythbuntu-common
Thomas Mashos has proposed merging lp:~tgm4883/mythbuntu/mythbuntu-common2 into lp:~mythbuntu-dev/mythbuntu/mythbuntu-common.
Requested reviews:
mythbuntu-dev (mythbuntu-dev)
For more details, see:
https://code.launchpad.net/~tgm4883/mythbuntu/mythbuntu-common2/+merge/84648
Merged -repos into -common for inclusion by default
--
https://code.launchpad.net/~tgm4883/mythbuntu/mythbuntu-common2/+merge/84648
Your team mythbuntu-dev is requested to review the proposed merge of lp:~tgm4883/mythbuntu/mythbuntu-common2 into lp:~mythbuntu-dev/mythbuntu/mythbuntu-common.
=== modified file 'debian/changelog'
--- debian/changelog 2011-10-05 05:11:43 +0000
+++ debian/changelog 2011-12-06 18:33:26 +0000
@@ -1,8 +1,13 @@
mythbuntu-common (0.63) oneiric; urgency=low
+ [ Mario Limonciello ]
* Fix hang in installer plugin myth-drivers. (LP: #867856)
- -- Mario Limonciello <Mario_Limonciello@xxxxxxxx> Wed, 05 Oct 2011 00:11:38 -0500
+ [ Thomas Mashos ]
+ * Merged mythbuntu-repos into this package
+ * Added mythbuntu-repos to mythbuntu-common depends
+
+ -- Thomas Mashos <thomas@xxxxxxxxxx> Tue, 06 Dec 2011 10:29:59 -0800
mythbuntu-common (0.62) oneiric; urgency=low
=== modified file 'debian/control'
--- debian/control 2011-06-29 19:48:23 +0000
+++ debian/control 2011-12-06 18:33:26 +0000
@@ -19,7 +19,8 @@
python-gconf,
lsb-release,
software-properties-gtk,
- libdvdread4
+ libdvdread4,
+ mythbuntu-repos
XB-Python-Version: ${python:Versions}
Recommends: nvidia-common, mythbuntu-bare-client
Suggests: mythbuntu-bare-console
@@ -29,3 +30,11 @@
.
Depending upon the usage, this application may also be useful by other
projects needing to accomplish similar tasks.
+
+Package: mythbuntu-repos
+Architecture: all
+Depends: ${shlibs:Depends}, ${misc:Depends}, mythbuntu-control-centre
+Description: Mythbuntu repository installer
+ This package will install and configure the mythbuntu repositories. This
+ includes the MythTV-Updates, Mythbuntu-Updates, and XMLTV repositories.
+ (depending on user choice during install).
=== removed file 'debian/install'
--- debian/install 2011-06-29 19:21:50 +0000
+++ debian/install 1970-01-01 00:00:00 +0000
@@ -1,1 +0,0 @@
-debian/mythbuntu.make usr/share/mythbuntu
=== added file 'debian/mythbuntu-common.install'
--- debian/mythbuntu-common.install 1970-01-01 00:00:00 +0000
+++ debian/mythbuntu-common.install 2011-12-06 18:33:26 +0000
@@ -0,0 +1,2 @@
+debian/mythbuntu.make usr/share/mythbuntu
+
=== added file 'debian/mythbuntu-repos.install'
--- debian/mythbuntu-repos.install 1970-01-01 00:00:00 +0000
+++ debian/mythbuntu-repos.install 2011-12-06 18:33:26 +0000
@@ -0,0 +1,1 @@
+mythbuntu-repos/* /usr/share/mythbuntu/plugins/
=== added file 'debian/mythbuntu-repos.prerm'
--- debian/mythbuntu-repos.prerm 1970-01-01 00:00:00 +0000
+++ debian/mythbuntu-repos.prerm 2011-12-06 18:33:26 +0000
@@ -0,0 +1,22 @@
+#!/bin/sh
+
+case "$1" in
+ remove|purge)
+ release=$(lsb_release -c -s)
+ RMBLDS="`cat /usr/share/mythbuntu/plugins/mythbuntu-repos.db | grep $release | cut -f 2`"
+ for version in $RMBLDS
+ do
+ ## Fixes for 0.21 and 0.22 PPA's
+ if [ "$version" = "0.21" ]; then
+ version="fixes-0.21"
+ elif [ "$version" = "0.22" ]; then
+ version="trunk-0.22"
+ elif [ "$version" = "0.24.x" ]; then
+ version="0.24"
+ fi
+ apt-add-repository --remove ppa:mythbuntu/$version || true
+ done
+ apt-add-repository -r ppa:mythbuntu/testing || true
+ apt-add-repository -r ppa:mythbuntu/xmltv || true
+ ;;
+esac
=== added directory 'mythbuntu-repos'
=== added file 'mythbuntu-repos/mythbuntu-repos.db'
--- mythbuntu-repos/mythbuntu-repos.db 1970-01-01 00:00:00 +0000
+++ mythbuntu-repos/mythbuntu-repos.db 2011-12-06 18:33:26 +0000
@@ -0,0 +1,18 @@
+MYTHTV_RELEASE 0.24.1
+TRUNKPASS YouMustBeThisTallToRide
+
+karmic 0.22
+karmic 0.23
+karmic 0.23.1
+lucid 0.23
+lucid 0.23.1
+lucid 0.24.x
+lucid 0.25
+maverick 0.23.1
+maverick 0.24.x
+natty 0.24.x
+natty 0.25
+oneiric 0.24.x
+oneiric 0.25
+precise 0.24.x
+precise 0.25
=== added directory 'mythbuntu-repos/python'
=== added file 'mythbuntu-repos/python/mythbuntu_repos.py'
--- mythbuntu-repos/python/mythbuntu_repos.py 1970-01-01 00:00:00 +0000
+++ mythbuntu-repos/python/mythbuntu_repos.py 2011-12-06 18:33:26 +0000
@@ -0,0 +1,243 @@
+## -*- coding: utf-8 -*-
+#
+# «Mythbuntu Repos» - A Plugin for adding Mythbuntu Repos. (ie. -testing and
+# Auto-Builds)
+#
+# Copyright (C) 2009, Thomas Mashos, for Mythbuntu
+#
+#
+# Mythbuntu 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 of the License, or at your option)
+# any later 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 application; if not, write to the Free Software Foundation, Inc., 51
+# Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+################################################################################
+
+from MythbuntuControlCentre.plugin import MCCPlugin
+import os
+import re
+import commands
+import urllib2
+import shutil
+import subprocess
+import ConfigParser
+
+class MythbuntuReposPlugin(MCCPlugin):
+ """A Plugin for adding Mythbuntu Repos"""
+ #
+ #Load GUI & Calculate Changes
+ #
+
+ def __init__(self):
+ #Initialize parent class
+ information = {}
+ information["name"] = "Repositories"
+ information["icon"] = "emblem-downloads"
+ information["ui"] = "tab_repos"
+ MCCPlugin.__init__(self, information)
+ self.CONFIGFILE = "/etc/default/mythbuntu-repos"
+ self.USERHOME = os.path.expanduser("~")
+ self.DBLINK = "http://bazaar.launchpad.net/~mythbuntu/mythbuntu/mythbuntu-repos/download/head:/mythbunturepos.db-20110701013326-zkyc2b8dxf072vof-2/mythbuntu-repos.db"
+ if not os.path.isdir(self.USERHOME+"/.mythbuntu"):
+ os.mkdir(self.USERHOME+"/.mythbuntu")
+ if not os.path.isfile(self.USERHOME+"/.mythbuntu/mythbuntu-repos.db"):
+ try:
+ self.downloadFile(self.DBLINK, self.USERHOME+"/.mythbuntu/")
+ except:
+ shutil.copy("/usr/share/mythbuntu/plugins/mythbuntu-repos.db", self.USERHOME+"/.mythbuntu/")
+ self.config = ConfigParser.ConfigParser()
+
+ #Set mythtv versions
+ def captureState(self):
+ """Determines the state of the items on managed by this plugin
+ and stores it into the plugin's own internal structures"""
+ self.versions = []
+ for line in open("/etc/lsb-release").xreadlines():
+ if "DISTRIB_CODENAME" in line:
+ line = line.strip("\n")
+ throwaway, distro = line.split("=")
+ NumRepos = 0
+ for line in open(self.USERHOME+"/.mythbuntu/mythbuntu-repos.db").xreadlines():
+ if distro in line:
+ line = line.strip("\n")
+ release, version = line.split("\t")
+ self.versions.append(version)
+ NumRepos += 1
+ elif "MYTHTV_RELEASE" in line:
+ line = line.strip("\n")
+ VerName, self.CurVer = line.split("\t")
+ elif "TRUNKPASS" in line:
+ line = line.strip("\n")
+ discard, self.TRUNKPASS = line.split("\t")
+ self.changes = {}
+ rei = 0
+ while (rei <= NumRepos):
+ self.builder.get_object('repobox').remove_text(0)
+ rei = rei+1
+ for item in self.versions:
+ self.builder.get_object('repobox').append_text(item)
+ if os.path.exists(self.CONFIGFILE):
+ self.config.read(self.CONFIGFILE)
+ try:
+ self.changes['MythTVUpdatesActivated'] = self.config.getboolean("cfg", "ActivateMythTVUpdates")
+ except:
+ self.changes['MythTVUpdatesActivated'] = False
+ try:
+ self.changes['MythTVUpdatesRepo'] = self.config.get("cfg", "MythTVRepo")
+ except:
+ self.changes['MythTVUpdatesRepo'] = self.versions[0]
+ try:
+ self.changes['ActivateMythbuntuUpdates'] = self.config.getboolean("cfg", "ActivateMythbuntuUpdates")
+ except:
+ self.changes['ActivateMythbuntuUpdates'] = False
+ try:
+ self.changes['ActivateXMLTVUpdates'] = self.config.getboolean("cfg", "ActivateXMLTVUpdates")
+ except:
+ self.changes['ActivateXMLTVUpdates'] = False
+
+ def applyStateToGUI(self):
+ """Takes the current state information and sets the GUI
+ for this plugin"""
+ self.mythtv_updates_checkbox.set_active(self.changes['MythTVUpdatesActivated'])
+ self.repobox.set_sensitive(self.changes['MythTVUpdatesActivated'])
+ try:
+ self.repobox.set_active(self.versions.index(self.changes['MythTVUpdatesRepo']))
+ except ValueError:
+ self.repobox.set_active(0)
+ self.mythbuntu_updates_checkbox.set_active(self.changes['ActivateMythbuntuUpdates'])
+ self.xmltv_updates_checkbox.set_active(self.changes['ActivateXMLTVUpdates'])
+ self.trunk_pass_ok.hide()
+
+ def on_mythtv_updates_checkbox_toggled(self, widget, data=None):
+ """Show the repobox if this is checked"""
+ widget_was_visible = self.mythtv_updates_checkbox.get_active()
+ if widget_was_visible:
+ self.repobox.set_sensitive(True)
+ else:
+ self.repobox.set_sensitive(False)
+
+ def on_dev_password_entry_changed(self, widget, data=None):
+ """Require a password for using trunk"""
+ if self.dev_password_entry.get_text() == self.TRUNKPASS:
+ self.trunk_pass_error.hide()
+ self.trunk_pass_ok.show()
+ else:
+ self.trunk_pass_error.show()
+ self.trunk_pass_ok.hide()
+
+ def on_repobox_changed(self, widget, data=None):
+ """Check the version to know if it's trunk"""
+ if not self.repobox.get_active_text() == None:
+ SELVER = self.convertVersion(self.repobox.get_active_text())
+ if SELVER > self.CurVer:
+ self.trunk_block.show()
+ else:
+ self.trunk_block.hide()
+
+ def convertVersion(self, VERSION):
+ """Remove the trailing .x if it exists"""
+ if VERSION.endswith(".x"):
+ VERSION = VERSION.strip(".x")
+ return VERSION
+
+ def compareState(self):
+ """Determines what items have been modified on this plugin"""
+ MCCPlugin.clearParentState(self)
+ SENDLIST = False
+ SELVER = self.convertVersion(self.repobox.get_active_text())
+ if self.mythtv_updates_checkbox.get_active() != self.changes['MythTVUpdatesActivated'] and self.mythtv_updates_checkbox.get_active() == False:
+ self._markReconfigureRoot('MythTV-Updates-Activated', self.mythtv_updates_checkbox.get_active())
+ SENDLIST = True
+ if self.repobox.get_sensitive() == True:
+ if self.repobox.get_active_text() != self.changes['MythTVUpdatesRepo'] or self.mythtv_updates_checkbox.get_active() != self.changes['MythTVUpdatesActivated']:
+ if (SELVER > self.CurVer and self.dev_password_entry.get_text() == self.TRUNKPASS) or SELVER <= self.CurVer:
+ self._markReconfigureRoot('MythTV-Updates-Repo', self.repobox.get_active_text())
+ self._markReconfigureRoot('MythTV-Updates-Activated', self.mythtv_updates_checkbox.get_active())
+ SENDLIST = True
+ elif self.mythtv_updates_checkbox.get_active() == False:
+ self._markReconfigureRoot('MythTV-Updates-Activated', self.mythtv_updates_checkbox.get_active())
+ if self.mythbuntu_updates_checkbox.get_active() != self.changes['ActivateMythbuntuUpdates']:
+ self._markReconfigureRoot('Mythbuntu-Updates-Activated', self.mythbuntu_updates_checkbox.get_active())
+ if self.xmltv_updates_checkbox.get_active() != self.changes['ActivateXMLTVUpdates']:
+ self._markReconfigureRoot('XMLTV-Updates-Activated', self.xmltv_updates_checkbox.get_active())
+ if SENDLIST == True:
+ self._markReconfigureRoot('Repo-list', self.versions)
+
+ def refresh_button_clicked(self, widget, data=None):
+ """Download a new db file if requested"""
+ self.downloadFile(self.DBLINK, self.USERHOME+"/.mythbuntu/")
+ self.captureState()
+ self.applyStateToGUI()
+
+ def downloadFile(self, url, dest):
+ """Download files"""
+ file_name = url.split('/')[-1]
+ u = urllib2.urlopen(url)
+ f = open(dest+file_name, 'wb')
+ meta = u.info()
+ file_size = int(meta.getheaders("Content-Length")[0])
+
+ file_size_dl = 0
+ block_sz = 8192
+ while True:
+ buffer = u.read(block_sz)
+ if not buffer:
+ break
+
+ file_size_dl += len(buffer)
+ f.write(buffer)
+ status = r"%10d [%3.2f%%]" % (file_size_dl, file_size_dl * 100. / file_size)
+ status = status + chr(8)*(len(status)+1)
+ f.close()
+
+ #
+ # Process selected activities
+ #
+
+ def root_scripted_changes(self, reconfigure):
+ """System-wide changes that need root access to be applied.
+ This function is ran by the dbus backend"""
+ if os.path.exists(self.CONFIGFILE):
+ self.config.read("/etc/default/mythbuntu-repos")
+ else:
+ self.config.add_section("cfg")
+ if "Repo-list" in reconfigure:
+ for item in reconfigure["Repo-list"]:
+ if item.endswith(".x"):
+ item = item.strip(".x")
+ subprocess.call(["apt-add-repository", "-r", "-y", "ppa:mythbuntu/"+item])
+ if "MythTV-Updates-Activated" in reconfigure:
+ if reconfigure["MythTV-Updates-Activated"]:
+ repo = reconfigure["MythTV-Updates-Repo"]
+ self.config.set("cfg", "ActivateMythTVUpdates", True)
+ self.config.set("cfg", "MythTVRepo", repo)
+ if repo.endswith(".x"):
+ repo = repo.strip(".x")
+ subprocess.call(["apt-add-repository", "-y", "ppa:mythbuntu/"+repo])
+ else:
+ self.config.set("cfg", "ActivateMythTVUpdates", False)
+ if "Mythbuntu-Updates-Activated" in reconfigure:
+ if reconfigure["Mythbuntu-Updates-Activated"]:
+ subprocess.call(["apt-add-repository", "-y", "ppa:mythbuntu/testing"])
+ self.config.set("cfg", "ActivateMythbuntuUpdates", True)
+ else:
+ subprocess.call(["apt-add-repository", "-r", "-y", "ppa:mythbuntu/testing"])
+ self.config.set("cfg", "ActivateMythbuntuUpdates", False)
+ if "XMLTV-Updates-Activated" in reconfigure:
+ if reconfigure["XMLTV-Updates-Activated"]:
+ subprocess.call(["apt-add-repository", "-y", "ppa:mythbuntu/xmltv"])
+ self.config.set("cfg", "ActivateXMLTVUpdates", True)
+ else:
+ subprocess.call(["apt-add-repository", "-r", "-y", "ppa:mythbuntu/xmltv"])
+ self.config.set("cfg", "ActivateXMLTVUpdates", False)
+ with open('/etc/default/mythbuntu-repos', 'wb') as configfile:
+ self.config.write(configfile)
+
=== added directory 'mythbuntu-repos/ui'
=== added file 'mythbuntu-repos/ui/tab_repos.ui'
--- mythbuntu-repos/ui/tab_repos.ui 1970-01-01 00:00:00 +0000
+++ mythbuntu-repos/ui/tab_repos.ui 2011-12-06 18:33:26 +0000
@@ -0,0 +1,436 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <requires lib="gtk+" version="2.16"/>
+ <object class="GtkListStore" id="model1">
+ <columns>
+ <!-- column-name gchararray -->
+ <column type="gchararray"/>
+ </columns>
+ </object>
+ <object class="GtkListStore" id="model2">
+ <columns>
+ <!-- column-name gchararray -->
+ <column type="gchararray"/>
+ </columns>
+ </object>
+ <object class="GtkVBox" id="tab_repos">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="border_width">6</property>
+ <child>
+ <object class="GtkLabel" id="graphics_drivers_title">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.46000000834465027</property>
+ <property name="label" translatable="yes"><big><b>Repositories</b></big></property>
+ <property name="use_markup">True</property>
+ <property name="single_line_mode">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHSeparator" id="hseparator6">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="padding">6</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="vbox11">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">10</property>
+ <child>
+ <object class="GtkAlignment" id="alignment5">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkLabel" id="label1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="label" translatable="yes">The MythTV Updates repo will contain updated MythTV software for
+ the version selected below. It is automatically built each day when
+ there are upstream fixes available.</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkAlignment" id="alignment8">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="xscale">0</property>
+ <property name="left_padding">25</property>
+ <child>
+ <object class="GtkCheckButton" id="mythtv_updates_checkbox">
+ <property name="label" translatable="yes">Activate MythTV Updates repository</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_action_appearance">False</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="on_mythtv_updates_checkbox_toggled" swapped="no"/>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label3">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="label" translatable="yes">Select which version of MythTV you want to receive updates for.</property>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="hbox1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkAlignment" id="alignment1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">2.2351741291171123e-10</property>
+ <property name="xscale">0</property>
+ <property name="yscale">0</property>
+ <property name="left_padding">50</property>
+ <property name="right_padding">25</property>
+ <child>
+ <object class="GtkComboBox" id="repobox">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="model">model1</property>
+ <signal name="changed" handler="on_repobox_changed" swapped="no"/>
+ <child>
+ <object class="GtkCellRendererText" id="renderer1"/>
+ <attributes>
+ <attribute name="text">0</attribute>
+ </attributes>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkAlignment" id="alignment2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xscale">0</property>
+ <property name="yscale">0</property>
+ <child>
+ <object class="GtkButton" id="refreshbutton">
+ <property name="label" translatable="yes">Refresh</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_action_appearance">False</property>
+ <signal name="clicked" handler="refresh_button_clicked" swapped="no"/>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="trunk_block">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkAlignment" id="alignment7">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkLabel" id="trunk_warning">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="label" translatable="yes">Warning: You have selected the MythTV version currently in development!!
+ If you select this version, it is recommended that you subscribe to the
+ <a href="http://www.mythtv.org/mailman/listinfo/mythtv-dev/">mythtv developer</a> and <a href="http://www.mythtv.org/mailman/listinfo/mythtv-commits/">mythtv commits</a> mailing lists and be prepared for
+ severe breakage. If you wish to continue please enter
+ YouMustBeThisTallToRide below for the development version password.</property>
+ <property name="use_markup">True</property>
+ <property name="track_visited_links">False</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkAlignment" id="alignment9">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkHBox" id="hbox2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkAlignment" id="alignment10">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="xscale">0</property>
+ <property name="right_padding">10</property>
+ <child>
+ <object class="GtkLabel" id="label4">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes"> MythTV Development Version Password</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkAlignment" id="alignment11">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="xscale">0</property>
+ <child>
+ <object class="GtkEntry" id="dev_password_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">●</property>
+ <signal name="changed" handler="on_dev_password_entry_changed" swapped="no"/>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkImage" id="trunk_pass_ok">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="xpad">5</property>
+ <property name="stock">gtk-ok</property>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkImage" id="trunk_pass_error">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="xpad">5</property>
+ <property name="stock">gtk-dialog-error</property>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">4</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkAlignment" id="alignment4">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xscale">0</property>
+ <property name="yscale">0</property>
+ <child>
+ <object class="GtkLabel" id="label2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">The Mythbuntu Updates repo provides updates for Mythbuntu specific
+ software such as Mythbuntu Bare and Mythbuntu Log Grabber. It does not
+ contain MythTV updates.</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">5</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkAlignment" id="alignment12">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xscale">0</property>
+ <property name="yscale">0</property>
+ <property name="left_padding">25</property>
+ <child>
+ <object class="GtkCheckButton" id="mythbuntu_updates_checkbox">
+ <property name="label" translatable="yes">Activate Mythbuntu Updates repository</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_action_appearance">False</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">6</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkAlignment" id="alignment3">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xscale">0</property>
+ <property name="yscale">0</property>
+ <child>
+ <object class="GtkLabel" id="label5">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">The XMLTV Updates repo provides daily builds of XMLTV for schedule data.
+ If you do not know what XMLTV is you probably don't need to enable this.</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">7</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkAlignment" id="alignment13">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xscale">0</property>
+ <property name="yscale">0</property>
+ <property name="left_padding">25</property>
+ <child>
+ <object class="GtkCheckButton" id="xmltv_updates_checkbox">
+ <property name="label" translatable="yes">Activate XMLTV Updates repository</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_action_appearance">False</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">8</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkAlignment" id="alignment6">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkLabel" id="complete_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="label" translatable="yes">After hitting apply, to complete the transition to the Updates repositories,
+ please open update-manager (or synaptic) and click Check (or Reload) and
+ then install updates as you normally would.</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">9</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="padding">6</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+</interface>
Follow ups