diff --git a/.gitignore b/.gitignore
index 5fc91c28f..736fa741a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -34,5 +34,3 @@ py-compile
stamp-h1
*.tar.bz2
*.tar.gz
-
-data/skin_display.xml
\ No newline at end of file
diff --git a/AUTHORS b/AUTHORS
index e69de29bb..6f5fb174a 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -0,0 +1,2 @@
+The OpenVix team
+Originated from the UK
diff --git a/ChangeLog b/ChangeLog
index d33962649..f2463f0e0 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -101,3 +101,514 @@ openvix: build 227
openvix: build 228
openvix: build 229
openvix: build 230
+openvix: build 231
+openvix: build 232
+openvix: build 233
+openvix: build 234
+openvix: build 235
+openvix: build 236
+openvix: build 237
+openvix: build 238
+openvix: build 239
+openvix: build 240
+openvix: build 241
+openvix: build 242
+openvix: build 243
+openvix: build 244
+openvix: build 245
+openvix: build 246
+openvix: build 247
+openvix: build 248
+openvix: build 249
+openvix: build 250
+openvix: build 251
+openvix: build 252
+openvix: build 253
+openvix: build 254
+openvix: build 255
+openvix: build 256
+openvix: build 257
+openvix: build 258
+openvix: build 259
+openvix: build 260
+openvix: build 261
+openvix: build 262
+openvix: build 263
+openvix: build 264
+openvix: build 265
+openvix: build 266
+openvix: build 267
+openvix: build 268
+openvix: build 269
+openvix: build 270
+openvix: build 271
+openvix: build 272
+openvix: build 273
+openvix: build 274
+openvix: build 275
+openvix: build 276
+openvix: build 277
+openvix: build 278
+openvix: build 279
+openvix: build 280
+openvix: build 281
+openvix: build 282
+openvix: build 283
+openvix: build 284
+openvix: build 285
+openvix: build 286
+openvix: build 287
+openvix: build 288
+openvix: build 289
+openvix: build 290
+openvix: build 291
+openvix: build 292
+openvix: build 293
+openvix: build 294
+openvix: build 295
+openvix: build 296
+openvix: build 297
+openvix: build 298
+openvix: build 299
+openvix: build 300
+openvix: build 301
+openvix: build 302
+openvix: build 303
+openvix: build 304
+openvix: build 305
+openvix: build 306
+openvix: build 307
+openvix: build 308
+openvix: build 309
+openvix: build 310
+openvix: build 311
+openvix: build 312
+openvix: build 313
+openvix: build 314
+openvix: build 315
+openvix: build 316
+openvix: build 317
+openvix: build 318
+openvix: build 319
+openvix: build 320
+openvix: build 321
+openvix: build 322
+openvix: build 323
+openvix: build 324
+openvix: build 325
+openvix: build 326
+openvix: build 327
+openvix: build 328
+openvix: build 329
+openvix: build 330
+openvix: build 331
+openvix: build 332
+openvix: build 333
+openvix: build 334
+openvix: build 335
+openvix: build 336
+openvix: build 337
+openvix: build 338
+openvix: build 339
+openvix: build 340
+openvix: build 341
+openvix: build 342
+openvix: build 343
+openvix: build 344
+openvix: build 345
+openvix: build 346
+openvix: build 347
+openvix: build 348
+openvix: build 349
+openvix: build 350
+openvix: build 351
+openvix: build 352
+openvix: build 353
+openvix: build 354
+openvix: build 355
+openvix: build 356
+openvix: build 357
+openvix: build 358
+openvix: build 359
+openvix: build 360
+openvix: build 361
+openvix: build 362
+openvix: build 363
+openvix: build 364
+openvix: build 365
+openvix: build 366
+openvix: build 367
+openvix: build 368
+openvix: build 369
+openvix: build 370
+openvix: build 371
+openvix: build 372
+openvix: build 373
+openvix: build 374
+openvix: build 375
+openvix: build 376
+openvix: build 377
+openvix: build 378
+openvix: build 379
+openvix: build 380
+openvix: build 381
+openvix: build 382
+openvix: build 383
+openvix: build 384
+openvix: build 385
+openvix: build 386
+openvix: build 387
+openvix: build 388
+openvix: build 389
+openvix: build 390
+openvix: build 391
+openvix: build 392
+openvix: build 393
+openvix: build 394
+openvix: build 395
+openvix: build 396
+openvix: build 397
+openvix: build 398
+openvix: build 399
+openvix: build 400
+openvix: build 401
+openvix: build 402
+openvix: build 403
+openvix: build 404
+openvix: build 405
+openvix: build 406
+openvix: build 407
+openvix: build 408
+openvix: build 409
+openvix: build 410
+openvix: build 411
+openvix: build 412
+openvix: build 413
+openvix: build 414
+openvix: build 415
+openvix: build 416
+openvix: build 417
+openvix: build 418
+openvix: build 419
+openvix: build 420
+openvix: build 421
+openvix: build 422
+openvix: build 423
+openvix: build 424
+openvix: build 425
+openvix: build 426
+openvix: build 427
+openvix: build 428
+openvix: build 429
+openvix: build 430
+openvix: build 431
+openvix: build 432
+openvix: build 433
+openvix: build 434
+openvix: build 435
+openvix: build 436
+openvix: build 437
+openvix: build 438
+openvix: build 439
+openvix: build 440
+openvix: build 441
+openvix: build 442
+openvix: build 443
+openvix: build 444
+openvix: build 445
+openvix: build 446
+openvix: build 447
+openvix: build 448
+openvix: build 449
+openvix: build 450
+openvix: build 451
+openvix: build 452
+openvix: build 453
+openvix: build 454
+openvix: build 455
+openvix: build 456
+openvix: build 457
+openvix: build 458
+openvix: build 459
+openvix: build 460
+openvix: build 461
+openvix: build 463
+openvix: build 464
+openvix: build 465
+openvix: build 466
+openvix: build 467
+openvix: build 468
+openvix: build 469
+openvix: build 470
+openvix: build 471
+openvix: build 472
+openvix: build 473
+openvix: build 474
+openvix: build 475
+openvix: build 476
+openvix: build 477
+openvix: build 478
+openvix: build 479
+openvix: build 480
+openvix: build 481
+openvix: build 482
+openvix: build 483
+openvix: build 484
+openvix: build 485
+openvix: build 486
+openvix: build 487
+openvix: build 488
+openvix: build 489
+openvix: build 490
+openvix: build 491
+openvix: build 492
+openvix: build 493
+openvix: build 494
+openvix: build 495
+openvix: build 496
+openvix: build 497
+openvix: build 498
+openvix: build 499
+openvix: build 500
+openvix: build 501
+openvix: build 502
+openvix: build 503
+openvix: build 504
+openvix: build 505
+openvix: build 506
+openvix: build 507
+openvix: build 508
+openvix: build 509
+openvix: build 510
+openvix: build 511
+openvix: build 512
+openvix: build 513
+openvix: build 514
+openvix: build 515
+openvix: build 516
+openvix: build 517
+openvix: build 518
+openvix: build 519
+openvix: build 520
+openvix: build 521
+openvix: build 522
+openvix: build 523
+openvix: build 524
+openvix: build 525
+openvix: build 526
+openvix: build 527
+openvix: build 528
+openvix: build 529
+openvix: build 530
+openvix: build 531
+openvix: build 532
+openvix: build 533
+openvix: build 534
+openvix: build 535
+openvix: build 536
+openvix: build 537
+openvix: build 538
+openvix: build 539
+openvix: build 540
+openvix: build 541
+openvix: build 542
+openvix: build 543
+openvix: build 544
+openvix: build 545
+openvix: build 546
+openvix: build 547
+openvix: build 548
+openvix: build 549
+openvix: build 550
+openvix: build 551
+openvix: build 552
+openvix: build 553
+openvix: build 554
+openvix: build 555
+openvix: build 556
+openvix: build 557
+openvix: build 558
+openvix: build 559
+openvix: build 560
+openvix: build 561
+openvix: build 562
+openvix: build 563
+openvix: build 564
+openvix: build 565
+openvix: build 566
+openvix: build 567
+openvix: build 568
+openvix: build 569
+openvix: build 570
+openvix: build 571
+openvix: build 572
+openvix: build 573
+openvix: build 574
+openvix: build 575
+openvix: build 576
+openvix: build 577
+openvix: build 578
+openvix: build 579
+openvix: build 580
+openvix: build 581
+openvix: build 582
+openvix: build 583
+openvix: build 584
+openvix: build 585
+openvix: build 586
+openvix: build 587
+openvix: build 588
+openvix: build 589
+openvix: build 590
+openvix: build 592
+openvix: build 593
+openvix: build 594
+openvix: build 595
+openvix: build 596
+openvix: build 597
+openvix: build 598
+openvix: build 599
+openvix: build 600
+openvix: build 601
+openvix: build 602
+openvix: build 603
+openvix: build 604
+openvix: build 605
+openvix: build 606
+openvix: build 607
+openvix: build 608
+openvix: build 609
+openvix: build 610
+openvix: build 611
+openvix: build 612
+openvix: build 613
+openvix: build 614
+openvix: build 615
+openvix: build 616
+openvix: build 617
+openvix: build 618
+openvix: build 619
+openvix: build 620
+openvix: build 621
+openvix: build 622
+openvix: build 623
+openvix: build 624
+openvix: build 625
+openvix: build 626
+openvix: build 627
+openvix: build 628
+openvix: build 629
+openvix: build 630
+openvix: build 631
+openvix: build 632
+openvix: build 633
+openvix: build 634
+openvix: build 635
+openvix: build 636
+openvix: build 637
+openvix: build 638
+openvix: build 639
+openvix: build 640
+openvix: build 641
+openvix: build 642
+openvix: build 643
+openvix: build 644
+openvix: build 645
+openvix: build 646
+openvix: build 647
+openvix: build 648
+openvix: build 649
+openvix: build 650
+openvix: build 651
+openvix: build 652
+openvix: build 653
+openvix: build 654
+openvix: build 655
+openvix: build 656
+openvix: build 657
+openvix: build 658
+openvix: build 659
+openvix: build 660
+openvix: build 661
+openvix: build 662
+openvix: build 663
+openvix: build 664
+openvix: build 665
+openvix: build 666
+openvix: build 667
+openvix: build 668
+openvix: build 669
+openvix: build 670
+openvix: build 671
+openvix: build 672
+openvix: build 673
+openvix: build 674
+openvix: build 675
+openvix: build 676
+openvix: build 677
+openvix: build 678
+openvix: build 679
+openvix: build 680
+openvix: build 681
+openvix: build 682
+openvix: build 683
+openvix: build 684
+openvix: build 685
+openvix: build 686
+openvix: build 687
+openvix: build 688
+openvix: build 689
+openvix: build 690
+openvix: build 691
+openvix: build 692
+openvix: build 693
+openvix: build 694
+openvix: build 695
+openvix: build 696
+openvix: build 697
+openvix: build 698
+openvix: build 699
+openvix: build 700
+openvix: build 701
+openvix: build 702
+openvix: build 703
+openvix: build 704
+openvix: build 705
+openvix: build 706
+openvix: build 707
+openvix: build 708
+openvix: build 709
+openvix: build 710
+openvix: build 711
+openvix: build 712
+openvix: build 713
+openvix: build 714
+openvix: build 715
+openvix: build 716
+openvix: build 717
+openvix: build 718
+openvix: build 719
+openvix: build 720
+openvix: build 721
+openvix: build 722
+openvix: build 723
+openvix: build 724
+openvix: build 725
+openvix: build 726
+openvix: build 727
+openvix: build 728
+openvix: build 729
+openvix: build 730
+openvix: build 731
+openvix: build 732
+openvix: build 733
+openvix: build 734
+openvix: build 735
+openvix: build 736
+openvix: build 737
+openvix: build 738
+openvix: build 739
+openvix: build 740
+openvix: build 741
+openvix: build 742
+openvix: build 743
diff --git a/Makefile.am b/Makefile.am
index cae711463..d3b6f51d3 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -3,8 +3,8 @@ SUBDIRS = include lib main data po tools
ACLOCAL_AMFLAGS = -I m4
installdir = $(pkglibdir)/python
-install_PYTHON = \
- Navigation.py NavigationInstance.py RecordTimer.py SleepTimer.py ServiceReference.py \
+install_PYTHON = upgrade.py \
+ Navigation.py NavigationInstance.py RecordTimer.py PowerTimer.py ServiceReference.py \
keyids.py keymapparser.py mytest.py skin.py timer.py GlobalActions.py \
e2reactor.py
diff --git a/Navigation.py b/Navigation.py
index 05dac8973..11fb37eb3 100644
--- a/Navigation.py
+++ b/Navigation.py
@@ -2,10 +2,10 @@
from Components.ParentalControl import parentalControl
from Components.config import config
from Tools.BoundFunction import boundFunction
-from Tools.DreamboxHardware import setFPWakeuptime, getFPWakeuptime, getFPWasTimerWakeup
+from Tools.StbHardware import setFPWakeuptime, getFPWakeuptime, getFPWasTimerWakeup
from time import time
import RecordTimer
-import SleepTimer
+import PowerTimer
import Screens.Standby
import NavigationInstance
import ServiceReference
@@ -14,7 +14,7 @@
# TODO: remove pNavgation, eNavigation and rewrite this stuff in python.
class Navigation:
- def __init__(self, nextRecordTimerAfterEventActionAuto=False):
+ def __init__(self, nextRecordTimerAfterEventActionAuto=False, nextPowerManagerAfterEventActionAuto=False):
if NavigationInstance.instance is not None:
raise NavigationInstance.instance
@@ -30,37 +30,47 @@ def __init__(self, nextRecordTimerAfterEventActionAuto=False):
self.event = [ ]
self.record_event = [ ]
self.currentlyPlayingServiceReference = None
+ self.currentlyPlayingServiceOrGroup = None
self.currentlyPlayingService = None
self.RecordTimer = RecordTimer.RecordTimer()
+ self.PowerTimer = PowerTimer.PowerTimer()
+ self.__wasTimerWakeup = False
if getFPWasTimerWakeup():
- if nextRecordTimerAfterEventActionAuto:
- # We need to give the system the chance to fully startup,
- # before we initiate the standby command.
+ self.__wasTimerWakeup = True
+ if nextRecordTimerAfterEventActionAuto and abs(self.RecordTimer.getNextRecordingTime() - time()) <= 360:
+ print 'RECTIMER: wakeup to standby detected.'
+ f = open("/tmp/was_rectimer_wakeup", "w")
+ f.write('1')
+ f.close()
+ # as we woke the box to record, place the box in standby.
self.standbytimer = eTimer()
self.standbytimer.callback.append(self.gotostandby)
self.standbytimer.start(15000, True)
- # We need to give the systemclock the chance to sync with the transponder time,
- # before we will make the decision about whether or not we need to shutdown
- # after the upcoming recording has completed
- self.recordshutdowntimer = eTimer()
- self.recordshutdowntimer.callback.append(self.checkShutdownAfterRecording)
- self.recordshutdowntimer.start(30000, True)
- self.SleepTimer = SleepTimer.SleepTimer()
+
+ elif nextPowerManagerAfterEventActionAuto:
+ print 'POWERTIMER: wakeup to standby detected.'
+ f = open("/tmp/was_powertimer_wakeup", "w")
+ f.write('1')
+ f.close()
+ # as a PowerTimer WakeToStandby was actiond to it.
+ self.standbytimer = eTimer()
+ self.standbytimer.callback.append(self.gotostandby)
+ self.standbytimer.start(15000, True)
+
+ def wasTimerWakeup(self):
+ return self.__wasTimerWakeup
def gotostandby(self):
+ print 'TIMER: now entering standby'
from Tools import Notifications
Notifications.AddNotification(Screens.Standby.Standby)
- def checkShutdownAfterRecording(self):
- if len(self.getRecordings()) or abs(self.RecordTimer.getNextRecordingTime() - time()) <= 360:
- if not Screens.Standby.inTryQuitMainloop: # not a shutdown messagebox is open
- RecordTimer.RecordTimerEntry.TryQuitMainloop(False) # start shutdown handling
-
def dispatchEvent(self, i):
for x in self.event:
x(i)
if i == iPlayableService.evEnd:
self.currentlyPlayingServiceReference = None
+ self.currentlyPlayingServiceOrGroup = None
self.currentlyPlayingService = None
def dispatchRecordEvent(self, rec_service, event):
@@ -68,28 +78,35 @@ def dispatchRecordEvent(self, rec_service, event):
for x in self.record_event:
x(rec_service, event)
- def playService(self, ref, checkParentalControl = True, forceRestart = False):
+ def playService(self, ref, checkParentalControl=True, forceRestart=False):
oldref = self.currentlyPlayingServiceReference
if ref and oldref and ref == oldref and not forceRestart:
print "ignore request to play already running service(1)"
return 0
print "playing", ref and ref.toString()
- if path.exists("/proc/stb/lcd/symbol_signal") and config.lcd.mode.value == '1':
+ if path.exists("/proc/stb/lcd/symbol_signal") and config.lcd.mode.getValue() == '1':
try:
if ref.toString().find('0:0:0:0:0:0:0:0:0') == -1:
signal = 1
else:
signal = 0
- open("/proc/stb/lcd/symbol_signal", "w").write(str(signal))
+ f = open("/proc/stb/lcd/symbol_signal", "w")
+ f.write(str(signal))
+ f.close()
except:
- open("/proc/stb/lcd/symbol_signal", "w").write("0")
- elif path.exists("/proc/stb/lcd/symbol_signal") and config.lcd.mode.value == '0':
- open("/proc/stb/lcd/symbol_signal", "w").write("0")
+ f = open("/proc/stb/lcd/symbol_signal", "w")
+ f.write("0")
+ f.close()
+ elif path.exists("/proc/stb/lcd/symbol_signal") and config.lcd.mode.getValue() == '0':
+ f = open("/proc/stb/lcd/symbol_signal", "w")
+ f.write("0")
+ f.close()
if ref is None:
self.stopService()
return 0
- if not checkParentalControl or parentalControl.isServicePlayable(ref, boundFunction(self.playService, checkParentalControl = False)):
+ InfoBarInstance = InfoBar.instance
+ if not checkParentalControl or parentalControl.isServicePlayable(ref, boundFunction(self.playService, checkParentalControl=False, forceRestart=forceRestart)):
if ref.flags & eServiceReference.isGroup:
if not oldref:
oldref = eServiceReference()
@@ -106,23 +123,24 @@ def playService(self, ref, checkParentalControl = True, forceRestart = False):
if self.pnav:
self.pnav.stopService()
self.currentlyPlayingServiceReference = playref
- self.currentlyPlayingSelectedServiceReference = ref
- InfoBarInstance = InfoBar.instance
+ self.currentlyPlayingServiceOrGroup = ref
if InfoBarInstance is not None:
InfoBarInstance.servicelist.servicelist.setCurrent(ref)
if self.pnav.playService(playref):
print "Failed to start", playref
self.currentlyPlayingServiceReference = None
+ self.currentlyPlayingServiceOrGroup = None
return 0
- else:
- self.stopService()
+ elif oldref:
+ InfoBarInstance.servicelist.servicelist.setCurrent(oldref)
return 1
- def getCurrentlyPlayingServiceReference(self, selected = True):
- if selected and self.currentlyPlayingServiceReference:
- return self.currentlyPlayingSelectedServiceReference
+ def getCurrentlyPlayingServiceReference(self):
return self.currentlyPlayingServiceReference
+ def getCurrentlyPlayingServiceOrGroup(self):
+ return self.currentlyPlayingServiceOrGroup
+
def isMovieplayerActive(self):
MoviePlayerInstance = MoviePlayer.instance
if MoviePlayerInstance is not None and self.currentlyPlayingServiceReference.toString().find('0:0:0:0:0:0:0:0:0') != -1:
@@ -159,14 +177,18 @@ def stopService(self):
if self.pnav:
self.pnav.stopService()
self.currentlyPlayingServiceReference = None
+ self.currentlyPlayingServiceOrGroup = None
if path.exists("/proc/stb/lcd/symbol_signal"):
- open("/proc/stb/lcd/symbol_signal", "w").write("0")
+ f = open("/proc/stb/lcd/symbol_signal", "w")
+ f.write("0")
+ f.close()
def pause(self, p):
return self.pnav and self.pnav.pause(p)
def shutdown(self):
self.RecordTimer.shutdown()
+ self.PowerTimer.shutdown()
self.ServiceHandler = None
self.pnav = None
diff --git a/PowerTimer.py b/PowerTimer.py
new file mode 100644
index 000000000..fd4157d04
--- /dev/null
+++ b/PowerTimer.py
@@ -0,0 +1,574 @@
+import os
+from enigma import eActionMap, eEPGCache, quitMainloop, getMachineBrand, getMachineName
+
+from Components.config import config
+from Components.TimerSanityCheck import TimerSanityCheck
+from Components.Task import Task, Job, job_manager as JobManager
+
+from Screens.MessageBox import MessageBox
+import Screens.Standby
+from Tools import Directories, Notifications, ASCIItranslit
+from Tools.XMLTools import stringToXML
+
+import timer
+import xml.etree.cElementTree
+import NavigationInstance
+from ServiceReference import ServiceReference
+
+from time import localtime, strftime, ctime, time
+from bisect import insort
+import os
+
+# parses an event, and gives out a (begin, end, name, duration, eit)-tuple.
+# begin and end will be corrected
+def parseEvent(ev):
+ begin = ev.getBeginTime()
+ end = begin + ev.getDuration()
+ return (begin, end)
+
+class AFTEREVENT:
+ NONE = 0
+ WAKEUPTOSTANDBY = 1
+ STANDBY = 2
+ DEEPSTANDBY = 3
+
+class TIMERTYPE:
+ NONE = 0
+ WAKEUP = 1
+ WAKEUPTOSTANDBY = 2
+ AUTOSTANDBY = 3
+ AUTODEEPSTANDBY = 4
+ STANDBY = 5
+ DEEPSTANDBY = 6
+ REBOOT = 7
+ RESTART = 8
+
+# please do not translate log messages
+class PowerTimerEntry(timer.TimerEntry, object):
+ def __init__(self, begin, end, disabled = False, afterEvent = AFTEREVENT.NONE, timerType = TIMERTYPE.WAKEUP, checkOldTimers = False):
+ timer.TimerEntry.__init__(self, int(begin), int(end))
+ if checkOldTimers == True:
+ if self.begin < time() - 1209600:
+ self.begin = int(time())
+
+ if self.end < self.begin:
+ self.end = self.begin
+
+ self.dontSave = False
+ self.disabled = disabled
+ self.timer = None
+ self.__record_service = None
+ self.start_prepare = 0
+ self.timerType = timerType
+ self.afterEvent = afterEvent
+ self.autoincrease = False
+ self.autoincreasetime = 3600 * 24 # 1 day
+ self.autosleepinstandbyonly = 'no'
+ self.autosleepdelay = 60
+ self.autosleeprepeat = 'once'
+
+ self.log_entries = []
+ self.resetState()
+
+ def __repr__(self):
+ timertype = {
+ TIMERTYPE.WAKEUP: "wakeup",
+ TIMERTYPE.WAKEUPTOSTANDBY: "wakeuptostandby",
+ TIMERTYPE.AUTOSTANDBY: "autostandby",
+ TIMERTYPE.AUTODEEPSTANDBY: "autodeepstandby",
+ TIMERTYPE.STANDBY: "standby",
+ TIMERTYPE.DEEPSTANDBY: "deepstandby",
+ TIMERTYPE.REBOOT: "reboot",
+ TIMERTYPE.RESTART: "restart"
+ }[self.timerType]
+ if not self.disabled:
+ return "PowerTimerEntry(type=%s, begin=%s)" % (timertype, ctime(self.begin))
+ else:
+ return "PowerTimerEntry(type=%s, begin=%s Disabled)" % (timertype, ctime(self.begin))
+
+ def log(self, code, msg):
+ self.log_entries.append((int(time()), code, msg))
+
+ def do_backoff(self):
+ if self.backoff == 0:
+ self.backoff = 5*60
+ else:
+ self.backoff *= 2
+ if self.backoff > 1800:
+ self.backoff = 1800
+ self.log(10, "backoff: retry in %d minuets" % (int(self.backoff)/60))
+
+ def activate(self):
+ next_state = self.state + 1
+ self.log(5, "activating state %d" % next_state)
+
+ if next_state == 1 and (self.timerType == TIMERTYPE.AUTOSTANDBY or self.timerType == TIMERTYPE.AUTODEEPSTANDBY):
+ eActionMap.getInstance().bindAction('', -0x7FFFFFFF, self.keyPressed)
+ self.begin = time() + int(self.autosleepdelay)*60
+ if self.end <= self.begin:
+ self.end = self.begin
+
+ if next_state == self.StatePrepared:
+ self.log(6, "prepare ok, waiting for begin")
+ self.next_activation = self.begin
+ self.backoff = 0
+ return True
+
+ elif next_state == self.StateRunning:
+ self.wasPowerTimerWakeup = False
+ if os.path.exists("/tmp/was_timer_wakeup"):
+ self.wasPowerTimerWakeup = int(open("/tmp/was_powertimer_wakeup", "r").read()) and True or False
+ os.remove("/tmp/was_powertimer_wakeup")
+ # if this timer has been cancelled, just go to "end" state.
+ if self.cancelled:
+ return True
+
+ if self.failed:
+ return True
+
+ if self.timerType == TIMERTYPE.WAKEUP:
+ if Screens.Standby.inStandby:
+ Screens.Standby.inStandby.Power()
+ return True
+
+ elif self.timerType == TIMERTYPE.WAKEUPTOSTANDBY:
+ return True
+
+ elif self.timerType == TIMERTYPE.STANDBY:
+ if not Screens.Standby.inStandby: # not already in standby
+ Notifications.AddNotificationWithCallback(self.sendStandbyNotification, MessageBox, _("A finished powertimer wants to set your\n%s %s to standby. Do that now?") % (getMachineBrand(), getMachineName()), timeout = 180)
+ return True
+
+ elif self.timerType == TIMERTYPE.AUTOSTANDBY:
+ if not Screens.Standby.inStandby: # not already in standby
+ Notifications.AddNotificationWithCallback(self.sendStandbyNotification, MessageBox, _("A finished powertimer wants to set your\n%s %s to standby. Do that now?") % (getMachineBrand(), getMachineName()), timeout = 180)
+ if self.autosleeprepeat == "once":
+ eActionMap.getInstance().unbindAction('', self.keyPressed)
+ return True
+ else:
+ self.begin = time() + int(self.autosleepdelay)*60
+ if self.end <= self.begin:
+ self.end = self.begin
+ else:
+ self.begin = time() + int(self.autosleepdelay)*60
+ if self.end <= self.begin:
+ self.end = self.begin
+
+ elif self.timerType == TIMERTYPE.AUTODEEPSTANDBY:
+ if (NavigationInstance.instance.RecordTimer.isRecording() or abs(NavigationInstance.instance.RecordTimer.getNextRecordingTime() - time()) <= 900 or abs(NavigationInstance.instance.RecordTimer.getNextZapTime() - time()) <= 900) or (self.autosleepinstandbyonly == 'yes' and not Screens.Standby.inStandby):
+ self.do_backoff()
+ # retry
+ self.begin = time() + self.backoff
+ if self.end <= self.begin:
+ self.end = self.begin
+ return False
+ if not Screens.Standby.inTryQuitMainloop: # not a shutdown messagebox is open
+ if Screens.Standby.inStandby: # in standby
+ quitMainloop(1)
+ return True
+ else:
+ Notifications.AddNotificationWithCallback(self.sendTryQuitMainloopNotification, MessageBox, _("A finished powertimer wants to shutdown your %s %s.\nDo that now?") % (getMachineBrand(), getMachineName()), timeout = 180)
+ if self.autosleeprepeat == "once":
+ eActionMap.getInstance().unbindAction('', self.keyPressed)
+ return True
+ else:
+ self.begin = time() + int(self.autosleepdelay)*60
+ if self.end <= self.begin:
+ self.end = self.begin
+
+ elif self.timerType == TIMERTYPE.DEEPSTANDBY and self.wasPowerTimerWakeup:
+ return True
+
+ elif self.timerType == TIMERTYPE.DEEPSTANDBY and not self.wasPowerTimerWakeup:
+ if NavigationInstance.instance.RecordTimer.isRecording() or abs(NavigationInstance.instance.RecordTimer.getNextRecordingTime() - time()) <= 900 or abs(NavigationInstance.instance.RecordTimer.getNextZapTime() - time()) <= 900:
+ self.do_backoff()
+ # retry
+ self.begin = time() + self.backoff
+ if self.end <= self.begin:
+ self.end = self.begin
+ return False
+ if not Screens.Standby.inTryQuitMainloop: # not a shutdown messagebox is open
+ if Screens.Standby.inStandby: # in standby
+ quitMainloop(1)
+ else:
+ Notifications.AddNotificationWithCallback(self.sendTryQuitMainloopNotification, MessageBox, _("A finished powertimer wants to shutdown your %s %s.\nDo that now?") % (getMachineBrand(), getMachineName()), timeout = 180)
+ return True
+
+ elif self.timerType == TIMERTYPE.REBOOT:
+ if NavigationInstance.instance.RecordTimer.isRecording() or abs(NavigationInstance.instance.RecordTimer.getNextRecordingTime() - time()) <= 900 or abs(NavigationInstance.instance.RecordTimer.getNextZapTime() - time()) <= 900:
+ self.do_backoff()
+ # retry
+ self.begin = time() + self.backoff
+ if self.end <= self.begin:
+ self.end = self.begin
+ return False
+ if not Screens.Standby.inTryQuitMainloop: # not a shutdown messagebox is open
+ if Screens.Standby.inStandby: # in standby
+ quitMainloop(2)
+ else:
+ Notifications.AddNotificationWithCallback(self.sendTryToRebootNotification, MessageBox, _("A finished powertimer wants to reboot your %s %s.\nDo that now?") % (getMachineBrand(), getMachineName()), timeout = 180)
+ return True
+
+ elif self.timerType == TIMERTYPE.RESTART:
+ if NavigationInstance.instance.RecordTimer.isRecording() or abs(NavigationInstance.instance.RecordTimer.getNextRecordingTime() - time()) <= 900 or abs(NavigationInstance.instance.RecordTimer.getNextZapTime() - time()) <= 900:
+ self.do_backoff()
+ # retry
+ self.begin = time() + self.backoff
+ if self.end <= self.begin:
+ self.end = self.begin
+ return False
+ if not Screens.Standby.inTryQuitMainloop: # not a shutdown messagebox is open
+ if Screens.Standby.inStandby: # in standby
+ quitMainloop(3)
+ else:
+ Notifications.AddNotificationWithCallback(self.sendTryToRestartNotification, MessageBox, _("A finished powertimer wants to restart the user interface.\nDo that now?"), timeout = 180)
+ return True
+
+ elif next_state == self.StateEnded:
+ old_end = self.end
+ NavigationInstance.instance.PowerTimer.saveTimer()
+ if self.afterEvent == AFTEREVENT.STANDBY:
+ if not Screens.Standby.inStandby: # not already in standby
+ Notifications.AddNotificationWithCallback(self.sendStandbyNotification, MessageBox, _("A finished powertimer wants to set your\n%s %s to standby. Do that now?") % (getMachineBrand(), getMachineName()), timeout = 180)
+ elif self.afterEvent == AFTEREVENT.DEEPSTANDBY:
+ if NavigationInstance.instance.RecordTimer.isRecording() or abs(NavigationInstance.instance.RecordTimer.getNextRecordingTime() - time()) <= 900 or abs(NavigationInstance.instance.RecordTimer.getNextZapTime() - time()) <= 900:
+ self.do_backoff()
+ # retry
+ self.begin = time() + self.backoff
+ if self.end <= self.begin:
+ self.end = self.begin
+ return False
+ if not Screens.Standby.inTryQuitMainloop: # not a shutdown messagebox is open
+ if Screens.Standby.inStandby: # in standby
+ quitMainloop(1)
+ else:
+ Notifications.AddNotificationWithCallback(self.sendTryQuitMainloopNotification, MessageBox, _("A finished power timer wants to shut down\nyour %s %s. Shutdown now?") % (getMachineBrand(), getMachineName()), timeout = 180)
+ return True
+
+ def setAutoincreaseEnd(self, entry = None):
+ if not self.autoincrease:
+ return False
+ if entry is None:
+ new_end = int(time()) + self.autoincreasetime
+ else:
+ new_end = entry.begin -30
+
+ dummyentry = PowerTimerEntry(self.begin, new_end, disabled=True, afterEvent = self.afterEvent, timerType = self.timerType)
+ dummyentry.disabled = self.disabled
+ timersanitycheck = TimerSanityCheck(NavigationInstance.instance.PowerManager.timer_list, dummyentry)
+ if not timersanitycheck.check():
+ simulTimerList = timersanitycheck.getSimulTimerList()
+ if simulTimerList is not None and len(simulTimerList) > 1:
+ new_end = simulTimerList[1].begin
+ new_end -= 30 # 30 Sekunden Prepare-Zeit lassen
+ if new_end <= time():
+ return False
+ self.end = new_end
+ return True
+
+ def sendStandbyNotification(self, answer):
+ if answer:
+ Notifications.AddNotification(Screens.Standby.Standby)
+
+ def sendTryQuitMainloopNotification(self, answer):
+ if answer:
+ Notifications.AddNotification(Screens.Standby.TryQuitMainloop, 1)
+
+ def sendTryToRebootNotification(self, answer):
+ if answer:
+ Notifications.AddNotification(Screens.Standby.TryQuitMainloop, 2)
+
+ def sendTryToRestartNotification(self, answer):
+ if answer:
+ Notifications.AddNotification(Screens.Standby.TryQuitMainloop, 3)
+
+ def keyPressed(self, key, tag):
+ self.begin = time() + int(self.autosleepdelay)*60
+ if self.end <= self.begin:
+ self.end = self.begin
+
+ def getNextActivation(self):
+ if self.state == self.StateEnded or self.state == self.StateFailed:
+ return self.end
+
+ next_state = self.state + 1
+
+ return {self.StatePrepared: self.start_prepare,
+ self.StateRunning: self.begin,
+ self.StateEnded: self.end }[next_state]
+
+ def getNextWakeup(self):
+ if self.state == self.StateEnded or self.state == self.StateFailed:
+ return self.end
+
+ if (self.timerType != TIMERTYPE.WAKEUP and self.timerType != TIMERTYPE.WAKEUPTOSTANDBY and not self.afterEvent):
+ return -1
+ elif (self.timerType != TIMERTYPE.WAKEUP and self.timerType != TIMERTYPE.WAKEUPTOSTANDBY and self.afterEvent):
+ return self.end
+ next_state = self.state + 1
+ return {self.StatePrepared: self.start_prepare,
+ self.StateRunning: self.begin,
+ self.StateEnded: self.end }[next_state]
+
+ def timeChanged(self):
+ old_prepare = self.start_prepare
+ self.start_prepare = self.begin - self.prepare_time
+ self.backoff = 0
+
+ if int(old_prepare) > 60 and int(old_prepare) != int(self.start_prepare):
+ self.log(15, "time changed, start prepare is now: %s" % ctime(self.start_prepare))
+
+def createTimer(xml):
+ timertype = str(xml.get("timertype") or "wakeup")
+ timertype = {
+ "wakeup": TIMERTYPE.WAKEUP,
+ "wakeuptostandby": TIMERTYPE.WAKEUPTOSTANDBY,
+ "autostandby": TIMERTYPE.AUTOSTANDBY,
+ "autodeepstandby": TIMERTYPE.AUTODEEPSTANDBY,
+ "standby": TIMERTYPE.STANDBY,
+ "deepstandby": TIMERTYPE.DEEPSTANDBY,
+ "reboot": TIMERTYPE.REBOOT,
+ "restart": TIMERTYPE.RESTART
+ }[timertype]
+ begin = int(xml.get("begin"))
+ end = int(xml.get("end"))
+ repeated = xml.get("repeated").encode("utf-8")
+ disabled = long(xml.get("disabled") or "0")
+ afterevent = str(xml.get("afterevent") or "nothing")
+ afterevent = {
+ "nothing": AFTEREVENT.NONE,
+ "wakeuptostandby": AFTEREVENT.WAKEUPTOSTANDBY,
+ "standby": AFTEREVENT.STANDBY,
+ "deepstandby": AFTEREVENT.DEEPSTANDBY
+ }[afterevent]
+ autosleepinstandbyonly = str(xml.get("autosleepinstandbyonly") or "no")
+ autosleepdelay = str(xml.get("autosleepdelay") or "0")
+ autosleeprepeat = str(xml.get("autosleeprepeat") or "once")
+
+ entry = PowerTimerEntry(begin, end, disabled, afterevent, timertype)
+ entry.repeated = int(repeated)
+ entry.autosleepinstandbyonly = autosleepinstandbyonly
+ entry.autosleepdelay = int(autosleepdelay)
+ entry.autosleeprepeat = autosleeprepeat
+
+ for l in xml.findall("log"):
+ time = int(l.get("time"))
+ code = int(l.get("code"))
+ msg = l.text.strip().encode("utf-8")
+ entry.log_entries.append((time, code, msg))
+
+ return entry
+
+class PowerTimer(timer.Timer):
+ def __init__(self):
+ timer.Timer.__init__(self)
+
+ self.Filename = Directories.resolveFilename(Directories.SCOPE_CONFIG, "pm_timers.xml")
+
+ try:
+ self.loadTimer()
+ except IOError:
+ print "unable to load timers from file!"
+
+ def doActivate(self, w):
+ # when activating a timer which has already passed,
+ # simply abort the timer. don't run trough all the stages.
+ if w.shouldSkip():
+ w.state = PowerTimerEntry.StateEnded
+ else:
+ # when active returns true, this means "accepted".
+ # otherwise, the current state is kept.
+ # the timer entry itself will fix up the delay then.
+ if w.activate():
+ w.state += 1
+
+ try:
+ self.timer_list.remove(w)
+ except:
+ print '[PowerManager]: Remove list failed'
+
+ # did this timer reached the last state?
+ if w.state < PowerTimerEntry.StateEnded:
+ # no, sort it into active list
+ insort(self.timer_list, w)
+ else:
+ # yes. Process repeated, and re-add.
+ if w.repeated:
+ w.processRepeated()
+ w.state = PowerTimerEntry.StateWaiting
+ self.addTimerEntry(w)
+ else:
+ # Remove old timers as set in config
+ self.cleanupDaily(config.recording.keep_timers.getValue())
+ insort(self.processed_timers, w)
+ self.stateChanged(w)
+
+ def loadTimer(self):
+ # TODO: PATH!
+ if not Directories.fileExists(self.Filename):
+ return
+ try:
+ file = open(self.Filename, 'r')
+ doc = xml.etree.cElementTree.parse(file)
+ file.close()
+ except SyntaxError:
+ from Tools.Notifications import AddPopup
+ from Screens.MessageBox import MessageBox
+
+ AddPopup(_("The timer file (pm_timers.xml) is corrupt and could not be loaded."), type = MessageBox.TYPE_ERROR, timeout = 0, id = "TimerLoadFailed")
+
+ print "pm_timers.xml failed to load!"
+ try:
+ import os
+ os.rename(self.Filename, self.Filename + "_old")
+ except (IOError, OSError):
+ print "renaming broken timer failed"
+ return
+ except IOError:
+ print "pm_timers.xml not found!"
+ return
+
+ root = doc.getroot()
+
+ # put out a message when at least one timer overlaps
+ checkit = True
+ for timer in root.findall("timer"):
+ newTimer = createTimer(timer)
+ if (self.record(newTimer, True, dosave=False) is not None) and (checkit == True):
+ from Tools.Notifications import AddPopup
+ from Screens.MessageBox import MessageBox
+ AddPopup(_("Timer overlap in pm_timers.xml detected!\nPlease recheck it!"), type = MessageBox.TYPE_ERROR, timeout = 0, id = "TimerLoadFailed")
+ checkit = False # at moment it is enough when the message is displayed one time
+
+ def saveTimer(self):
+ list = []
+ list.append('\n')
+ list.append('\n')
+ for timer in self.timer_list + self.processed_timers:
+ if timer.dontSave:
+ continue
+ list.append('\n')
+
+ for time, code, msg in timer.log_entries:
+ list.append('')
+ list.append(str(stringToXML(msg)))
+ list.append('\n')
+
+ list.append('\n')
+
+ list.append('\n')
+
+ file = open(self.Filename + ".writing", "w")
+ for x in list:
+ file.write(x)
+ file.flush()
+
+ os.fsync(file.fileno())
+ file.close()
+ os.rename(self.Filename + ".writing", self.Filename)
+
+ def getNextZapTime(self):
+ now = time()
+ for timer in self.timer_list:
+ if timer.begin < now:
+ continue
+ return timer.begin
+ return -1
+
+ def getNextPowerManagerTimeOld(self):
+ now = time()
+ for timer in self.timer_list:
+ if timer.timerType != TIMERTYPE.AUTOSTANDBY and timer.timerType != TIMERTYPE.AUTODEEPSTANDBY:
+ next_act = timer.getNextWakeup()
+ if next_act < now:
+ continue
+ return next_act
+ return -1
+
+ def getNextPowerManagerTime(self):
+ nextrectime = self.getNextPowerManagerTimeOld()
+ faketime = time()+300
+ if config.timeshift.isRecording.getValue():
+ if nextrectime > 0 and nextrectime < faketime:
+ return nextrectime
+ else:
+ return faketime
+ else:
+ return nextrectime
+
+ def isNextPowerManagerAfterEventActionAuto(self):
+ now = time()
+ t = None
+ for timer in self.timer_list:
+ if timer.timerType == TIMERTYPE.WAKEUPTOSTANDBY or timer.afterEvent == AFTEREVENT.WAKEUPTOSTANDBY:
+ return True
+ return False
+
+ def record(self, entry, ignoreTSC=False, dosave=True): #wird von loadTimer mit dosave=False aufgerufen
+ entry.timeChanged()
+ print "[PowerTimer]",str(entry)
+ entry.Timer = self
+ self.addTimerEntry(entry)
+ if dosave:
+ self.saveTimer()
+ return None
+
+ def removeEntry(self, entry):
+ print "[PowerTimer] Remove",str(entry)
+
+ # avoid re-enqueuing
+ entry.repeated = False
+
+ # abort timer.
+ # this sets the end time to current time, so timer will be stopped.
+ entry.autoincrease = False
+ entry.abort()
+
+ if entry.state != entry.StateEnded:
+ self.timeChanged(entry)
+
+# print "state: ", entry.state
+# print "in processed: ", entry in self.processed_timers
+# print "in running: ", entry in self.timer_list
+ # disable timer first
+ if entry.state != 3:
+ entry.disable()
+ # autoincrease instanttimer if possible
+ if not entry.dontSave:
+ for x in self.timer_list:
+ if x.setAutoincreaseEnd():
+ self.timeChanged(x)
+ # now the timer should be in the processed_timers list. remove it from there.
+ if entry in self.processed_timers:
+ self.processed_timers.remove(entry)
+ self.saveTimer()
+
+ def shutdown(self):
+ self.saveTimer()
diff --git a/RecordTimer.py b/RecordTimer.py
old mode 100644
new mode 100755
index a77a3103f..094a4a4f8
--- a/RecordTimer.py
+++ b/RecordTimer.py
@@ -1,11 +1,10 @@
import os
-from enigma import eEPGCache, getBestPlayableServiceReference, \
- eServiceReference, iRecordableService, quitMainloop
+from enigma import eEPGCache, getBestPlayableServiceReference, eServiceReference, eServiceCenter, iRecordableService, quitMainloop, eActionMap, getMachineBrand, getMachineName
from Components.config import config
+from Components import Harddisk
from Components.UsageConfig import defaultMoviePath
from Components.TimerSanityCheck import TimerSanityCheck
-from Components.Task import Task, Job, job_manager as JobManager
from Screens.MessageBox import MessageBox
import Screens.Standby
@@ -19,12 +18,15 @@
from time import localtime, strftime, ctime, time
from bisect import insort
+from sys import maxint
+
+import os
# ok, for descriptions etc we have:
-# service reference (to get the service name)
-# name (title)
-# description (description)
-# event data (ONLY for time adjustments etc.)
+# service reference (to get the service name)
+# name (title)
+# description (description)
+# event data (ONLY for time adjustments etc.)
# parses an event, and gives out a (begin, end, name, duration, eit)-tuple.
@@ -41,8 +43,8 @@ def parseEvent(ev, description = True):
begin = ev.getBeginTime()
end = begin + ev.getDuration()
eit = ev.getEventId()
- begin -= config.recording.margin_before.value * 60
- end += config.recording.margin_after.value * 60
+ begin -= config.recording.margin_before.getValue() * 60
+ end += config.recording.margin_after.getValue() * 60
return (begin, end, name, description, eit)
class AFTEREVENT:
@@ -54,10 +56,9 @@ class AFTEREVENT:
def findSafeRecordPath(dirname):
if not dirname:
return None
- from Components import Harddisk
dirname = os.path.realpath(dirname)
mountpoint = Harddisk.findMountPoint(dirname)
- if mountpoint in ('/', '/media'):
+ if not os.path.ismount(mountpoint):
print '[RecordTimer] media is not mounted:', dirname
return None
if not os.path.isdir(dirname):
@@ -68,51 +69,22 @@ def findSafeRecordPath(dirname):
return None
return dirname
+# type 1 = digital television service
+# type 4 = nvod reference service (NYI)
+# type 17 = MPEG-2 HD digital television service
+# type 22 = advanced codec SD digital television
+# type 24 = advanced codec SD NVOD reference service (NYI)
+# type 25 = advanced codec HD digital television
+# type 27 = advanced codec HD NVOD reference service (NYI)
+# type 2 = digital radio sound service
+# type 10 = advanced codec digital radio sound service
+
+service_types_tv = '1:7:1:0:0:0:0:0:0:0:(type == 1) || (type == 17) || (type == 22) || (type == 25) || (type == 134) || (type == 195)'
+wasRecTimerWakeup = False
+
# please do not translate log messages
class RecordTimerEntry(timer.TimerEntry, object):
-######### the following static methods and members are only in use when the box is in (soft) standby
- receiveRecordEvents = False
-
- @staticmethod
- def shutdown():
- quitMainloop(1)
-
- @staticmethod
- def staticGotRecordEvent(recservice, event):
- if event == iRecordableService.evEnd:
- print "RecordTimer.staticGotRecordEvent(iRecordableService.evEnd)"
- recordings = NavigationInstance.instance.getRecordings()
- if not recordings: # no more recordings exist
- rec_time = NavigationInstance.instance.RecordTimer.getNextRecordingTime()
- if rec_time > 0 and (rec_time - time()) < 360:
- print "another recording starts in", rec_time - time(), "seconds... do not shutdown yet"
- else:
- print "no starting records in the next 360 seconds... immediate shutdown"
- RecordTimerEntry.shutdown() # immediate shutdown
- elif event == iRecordableService.evStart:
- print "RecordTimer.staticGotRecordEvent(iRecordableService.evStart)"
-
- @staticmethod
- def stopTryQuitMainloop():
- print "RecordTimer.stopTryQuitMainloop"
- NavigationInstance.instance.record_event.remove(RecordTimerEntry.staticGotRecordEvent)
- RecordTimerEntry.receiveRecordEvents = False
-
- @staticmethod
- def TryQuitMainloop(default_yes = True):
- if not RecordTimerEntry.receiveRecordEvents:
- print "RecordTimer.TryQuitMainloop"
- NavigationInstance.instance.record_event.append(RecordTimerEntry.staticGotRecordEvent)
- RecordTimerEntry.receiveRecordEvents = True
- # send fake event.. to check if another recordings are running or
- # other timers start in a few seconds
- RecordTimerEntry.staticGotRecordEvent(None, iRecordableService.evEnd)
- # send normal notification for the case the user leave the standby now..
- Notifications.AddNotification(Screens.Standby.TryQuitMainloop, 1, onSessionOpenCallback=RecordTimerEntry.stopTryQuitMainloop, default_yes = default_yes)
-
-#################################################################
-
- def __init__(self, serviceref, begin, end, name, description, eit, disabled = False, justplay = False, afterEvent = AFTEREVENT.AUTO, checkOldTimers = False, dirname = None, tags = None, descramble = True, record_ecm = False):
+ def __init__(self, serviceref, begin, end, name, description, eit, disabled = False, justplay = False, afterEvent = AFTEREVENT.AUTO, checkOldTimers = False, dirname = None, tags = None, descramble = 'notset', record_ecm = 'notset', isAutoTimer = False, always_zap = False):
timer.TimerEntry.__init__(self, int(begin), int(end))
if checkOldTimers == True:
if self.begin < time() - 1209600:
@@ -136,77 +108,92 @@ def __init__(self, serviceref, begin, end, name, description, eit, disabled = Fa
self.__record_service = None
self.start_prepare = 0
self.justplay = justplay
+ self.always_zap = always_zap
self.afterEvent = afterEvent
self.dirname = dirname
self.dirnameHadToFallback = False
self.autoincrease = False
self.autoincreasetime = 3600 * 24 # 1 day
self.tags = tags or []
- self.descramble = descramble
- self.record_ecm = record_ecm
+
+ if descramble == 'notset' and record_ecm == 'notset':
+ if config.recording.ecm_data.getValue() == 'descrambled+ecm':
+ self.descramble = True
+ self.record_ecm = True
+ elif config.recording.ecm_data.getValue() == 'scrambled+ecm':
+ self.descramble = False
+ self.record_ecm = True
+ elif config.recording.ecm_data.getValue() == 'normal':
+ self.descramble = True
+ self.record_ecm = False
+ else:
+ self.descramble = descramble
+ self.record_ecm = record_ecm
+
+ self.isAutoTimer = isAutoTimer
+ self.wasInStandby = False
self.log_entries = []
self.resetState()
def __repr__(self):
- return "RecordTimerEntry(name=%s, begin=%s, serviceref=%s, justplay=%s)" % (self.name, ctime(self.begin), self.service_ref, self.justplay)
+ if not self.disabled:
+ return "RecordTimerEntry(name=%s, begin=%s, serviceref=%s, justplay=%s, isAutoTimer=%s)" % (self.name, ctime(self.begin), self.service_ref, self.justplay, self.isAutoTimer)
+ else:
+ return "RecordTimerEntry(name=%s, begin=%s, serviceref=%s, justplay=%s, isAutoTimer=%s, Disabled)" % (self.name, ctime(self.begin), self.service_ref, self.justplay, self.isAutoTimer)
def log(self, code, msg):
self.log_entries.append((int(time()), code, msg))
print "[TIMER]", msg
def freespace(self):
- try:
- if not self.dirname:
+ self.MountPath = None
+ if not self.dirname:
+ dirname = findSafeRecordPath(defaultMoviePath())
+ else:
+ dirname = findSafeRecordPath(self.dirname)
+ if dirname is None:
dirname = findSafeRecordPath(defaultMoviePath())
- else:
- dirname = findSafeRecordPath(self.dirname)
- if dirname is None:
- dirname = findSafeRecordPath(defaultMoviePath())
- self.dirnameHadToFallback = True
- s = os.statvfs(dirname)
- if (s.f_bavail * s.f_bsize) / 1000000 < 1024:
- self.log(0, "Not enough free space to record")
- return False
- else:
- self.log(0, "Found enough free space to record")
- return True
- except:
- self.log(0, "failed to find mount to check for free space.")
+ self.dirnameHadToFallback = True
+ if not dirname:
+ return False
+
+ self.MountPath = dirname
+ mountwriteable = os.access(dirname, os.W_OK)
+ if not mountwriteable:
+ self.log(0, ("Mount '%s' is not writeable." % dirname))
+ return False
+
+ s = os.statvfs(dirname)
+ if (s.f_bavail * s.f_bsize) / 1000000 < 1024:
+ self.log(0, "Not enough free space to record")
return False
+ else:
+ self.log(0, "Found enough free space to record")
+ return True
def calculateFilename(self):
service_name = self.service_ref.getServiceName()
begin_date = strftime("%Y%m%d %H%M", localtime(self.begin))
- print "begin_date: ", begin_date
- print "service_name: ", service_name
- print "name:", self.name
- print "description: ", self.description
-
+# print "begin_date: ", begin_date
+# print "service_name: ", service_name
+# print "name:", self.name
+# print "description: ", self.description
+#
filename = begin_date + " - " + service_name
if self.name:
- if config.recording.filename_composition.value == "short":
+ if config.recording.filename_composition.getValue() == "short":
filename = strftime("%Y%m%d", localtime(self.begin)) + " - " + self.name
- elif config.recording.filename_composition.value == "long":
+ elif config.recording.filename_composition.getValue() == "long":
filename += " - " + self.name + " - " + self.description
else:
filename += " - " + self.name # standard
- if config.recording.ascii_filenames.value:
+ if config.recording.ascii_filenames.getValue():
filename = ASCIItranslit.legacyEncode(filename)
-
- if not self.dirname:
- dirname = findSafeRecordPath(defaultMoviePath())
- else:
- dirname = findSafeRecordPath(self.dirname)
- if dirname is None:
- dirname = findSafeRecordPath(defaultMoviePath())
- self.dirnameHadToFallback = True
- if not dirname:
- return None
- self.Filename = Directories.getRecordingFilename(filename, dirname)
+ self.Filename = Directories.getRecordingFilename(filename, self.MountPath)
self.log(0, "Filename calculated as: '%s'" % self.Filename)
return self.Filename
@@ -218,8 +205,6 @@ def tryPrepare(self):
self.do_backoff()
self.start_prepare = time() + self.backoff
return False
- if not self.freespace():
- return False
rec_ref = self.service_ref and self.service_ref.ref
if rec_ref and rec_ref.flags & eServiceReference.isGroup:
rec_ref = getBestPlayableServiceReference(rec_ref, eServiceReference())
@@ -240,7 +225,7 @@ def tryPrepare(self):
if evt:
self.description = evt.getShortDescription()
if self.description == "":
- description = evt.getExtendedDescription()
+ self.description = evt.getExtendedDescription()
event_id = evt.getEventId()
else:
event_id = -1
@@ -280,6 +265,31 @@ def activate(self):
self.log(5, "activating state %d" % next_state)
if next_state == self.StatePrepared:
+ if not self.justplay and not self.freespace():
+ Notifications.AddPopup(text = _("Write error while recording. Disk full?\n%s") % self.name, type = MessageBox.TYPE_ERROR, timeout = 5, id = "DiskFullMessage")
+ self.failed = True
+ self.next_activation = time()
+ self.end = time() + 5
+ self.backoff = 0
+ return True
+
+ if self.always_zap:
+ if Screens.Standby.inStandby:
+ self.wasInStandby = True
+ eActionMap.getInstance().bindAction('', -maxint - 1, self.keypress)
+ #set service to zap after standby
+ Screens.Standby.inStandby.prev_running_service = self.service_ref.ref
+ Screens.Standby.inStandby.paused_service = None
+ #wakeup standby
+ Screens.Standby.inStandby.Power()
+ self.log(5, "wakeup and zap to recording service")
+ else:
+ cur_zap_ref = NavigationInstance.instance.getCurrentlyPlayingServiceReference()
+ if cur_zap_ref and not cur_zap_ref.getPath():# we do not zap away if it is no live service
+ Notifications.AddNotification(MessageBox, _("In order to record a timer, the TV was switched to the recording service!\n"), type=MessageBox.TYPE_INFO, timeout=20)
+ self.failureCB(True)
+ self.log(5, "zap to recording service")
+
if self.tryPrepare():
self.log(6, "prepare ok, waiting for begin")
# create file to "reserve" the filename
@@ -292,25 +302,19 @@ def activate(self):
try:
Trashcan.instance.cleanIfIdle()
except Exception, e:
- print "[TIMER] Failed to call Trashcan.instance.cleanIfIdle()"
- print "[TIMER] Error:", e
+ print "[TIMER] Failed to call Trashcan.instance.cleanIfIdle()"
+ print "[TIMER] Error:", e
# fine. it worked, resources are allocated.
self.next_activation = self.begin
self.backoff = 0
return True
- if not self.freespace():
- Notifications.AddPopup(text = _("Write error while recording. Disk full?\n%s") % self.name, type = MessageBox.TYPE_ERROR, timeout = 5, id = "DiskFullMessage")
- self.state = 4
-# self.disabled = True
- self.failed = True
- return False
self.log(7, "prepare failed")
if self.first_try_prepare:
self.first_try_prepare = False
cur_ref = NavigationInstance.instance.getCurrentlyPlayingServiceReference()
if cur_ref and not cur_ref.getPath():
- if not config.recording.asktozap.value:
+ if not config.recording.asktozap.getValue():
self.log(8, "asking user to zap away")
Notifications.AddNotificationWithCallback(self.failureCB, MessageBox, _("A timer failed to record!\nDisable TV and try again?\n"), timeout=20)
else: # zap without asking
@@ -324,6 +328,13 @@ def activate(self):
return False
elif next_state == self.StateRunning:
+ global wasRecTimerWakeup
+ if os.path.exists("/tmp/was_rectimer_wakeup") and not wasRecTimerWakeup:
+ wasRecTimerWakeup = int(open("/tmp/was_rectimer_wakeup", "r").read()) and True or False
+ os.remove("/tmp/was_rectimer_wakeup")
+
+ self.autostate = Screens.Standby.inStandby
+
# if this timer has been cancelled, just go to "end" state.
if self.cancelled:
return True
@@ -333,9 +344,12 @@ def activate(self):
if self.justplay:
if Screens.Standby.inStandby:
+ self.wasInStandby = True
+ eActionMap.getInstance().bindAction('', -maxint - 1, self.keypress)
self.log(11, "wakeup and zap")
#set service to zap after standby
Screens.Standby.inStandby.prev_running_service = self.service_ref.ref
+ Screens.Standby.inStandby.paused_service = None
#wakeup standby
Screens.Standby.inStandby.Power()
else:
@@ -343,13 +357,36 @@ def activate(self):
NavigationInstance.instance.isMovieplayerActive()
from Screens.ChannelSelection import ChannelSelection
ChannelSelectionInstance = ChannelSelection.instance
+ self.service_types = service_types_tv
if ChannelSelectionInstance:
- ChannelSelectionInstance.clearPath()
- ChannelSelectionInstance.recallBouquetMode()
- if ChannelSelectionInstance.bouquet_root:
- ChannelSelectionInstance.enterPath(ChannelSelectionInstance.bouquet_root)
- ChannelSelectionInstance.enterPath(self.service_ref.ref)
- ChannelSelectionInstance.saveRoot()
+ if config.usage.multibouquet.getValue():
+ bqrootstr = '1:7:1:0:0:0:0:0:0:0:FROM BOUQUET "bouquets.tv" ORDER BY bouquet'
+ else:
+ bqrootstr = '%s FROM BOUQUET "userbouquet.favourites.tv" ORDER BY bouquet'%(self.service_types)
+ rootstr = ''
+ serviceHandler = eServiceCenter.getInstance()
+ rootbouquet = eServiceReference(bqrootstr)
+ bouquet = eServiceReference(bqrootstr)
+ bouquetlist = serviceHandler.list(bouquet)
+ if not bouquetlist is None:
+ while True:
+ bouquet = bouquetlist.getNext()
+ if bouquet.flags & eServiceReference.isDirectory:
+ ChannelSelectionInstance.clearPath()
+ ChannelSelectionInstance.setRoot(bouquet)
+ servicelist = serviceHandler.list(bouquet)
+ if not servicelist is None:
+ serviceIterator = servicelist.getNext()
+ while serviceIterator.valid():
+ if self.service_ref.ref == serviceIterator:
+ break
+ serviceIterator = servicelist.getNext()
+ if self.service_ref.ref == serviceIterator:
+ break
+ ChannelSelectionInstance.enterPath(rootbouquet)
+ ChannelSelectionInstance.enterPath(bouquet)
+ ChannelSelectionInstance.saveRoot()
+ ChannelSelectionInstance.saveChannel(self.service_ref.ref)
ChannelSelectionInstance.addToHistory(self.service_ref.ref)
NavigationInstance.instance.playService(self.service_ref.ref)
return True
@@ -365,7 +402,7 @@ def activate(self):
return False
return True
- elif next_state == self.StateEnded:
+ elif next_state == self.StateEnded or next_state == self.StateFailed:
old_end = self.end
if self.setAutoincreaseEnd():
self.log(12, "autoincrase recording %d minute(s)" % int((self.end - old_end)/60))
@@ -373,19 +410,31 @@ def activate(self):
return True
self.log(12, "stop recording")
if not self.justplay:
- NavigationInstance.instance.stopRecordService(self.record_service)
- self.record_service = None
- if self.afterEvent == AFTEREVENT.STANDBY:
+ if self.record_service:
+ NavigationInstance.instance.stopRecordService(self.record_service)
+ self.record_service = None
+
+ NavigationInstance.instance.RecordTimer.saveTimer()
+ if self.afterEvent == AFTEREVENT.STANDBY or (not wasRecTimerWakeup and self.autostate and self.afterEvent == AFTEREVENT.AUTO) or self.wasInStandby:
+ self.keypress() #this unbinds the keypress detection
if not Screens.Standby.inStandby: # not already in standby
- Notifications.AddNotificationWithCallback(self.sendStandbyNotification, MessageBox, _("A finished record timer wants to set your\nSTB_BOX to standby. Do that now?"), timeout = 20)
- elif self.afterEvent == AFTEREVENT.DEEPSTANDBY:
+ Notifications.AddNotificationWithCallback(self.sendStandbyNotification, MessageBox, _("A finished record timer wants to set your\n%s %s to standby. Do that now?") % (getMachineBrand(), getMachineName()), timeout = 180)
+ elif self.afterEvent == AFTEREVENT.DEEPSTANDBY or (wasRecTimerWakeup and self.afterEvent == AFTEREVENT.AUTO):
+ if (abs(NavigationInstance.instance.RecordTimer.getNextRecordingTime() - time()) <= 900 or abs(NavigationInstance.instance.RecordTimer.getNextZapTime() - time()) <= 900) or NavigationInstance.instance.RecordTimer.getStillRecording():
+ print '[Timer] Recording or Recording due is next 15 mins, not return to deepstandby'
+ return True
if not Screens.Standby.inTryQuitMainloop: # not a shutdown messagebox is open
if Screens.Standby.inStandby: # in standby
- RecordTimerEntry.TryQuitMainloop() # start shutdown handling without screen
+ quitMainloop(1)
else:
- Notifications.AddNotificationWithCallback(self.sendTryQuitMainloopNotification, MessageBox, _("A finished record timer wants to shut down\nyour STB_BOX. Shutdown now?"), timeout = 20)
+ Notifications.AddNotificationWithCallback(self.sendTryQuitMainloopNotification, MessageBox, _("A finished record timer wants to shut down\nyour %s %s. Shutdown now?") % (getMachineBrand(), getMachineName()), timeout = 180)
return True
+ def keypress(self, key=None, flag=1):
+ if flag and self.wasInStandby:
+ self.wasInStandby = False
+ eActionMap.getInstance().unbindAction('', self.keypress)
+
def setAutoincreaseEnd(self, entry = None):
if not self.autoincrease:
return False
@@ -414,16 +463,23 @@ def sendStandbyNotification(self, answer):
def sendTryQuitMainloopNotification(self, answer):
if answer:
Notifications.AddNotification(Screens.Standby.TryQuitMainloop, 1)
+ else:
+ global wasRecTimerWakeup
+ wasRecTimerWakeup = False
def getNextActivation(self):
+ self.isStillRecording = False
if self.state == self.StateEnded or self.state == self.StateFailed:
+ if self.end > time():
+ self.isStillRecording = True
return self.end
-
next_state = self.state + 1
-
+ if next_state == self.StateEnded or next_state == self.StateFailed:
+ if self.end > time():
+ self.isStillRecording = True
return {self.StatePrepared: self.start_prepare,
self.StateRunning: self.begin,
- self.StateEnded: self.end }[next_state]
+ self.StateEnded: self.end}[next_state]
def failureCB(self, answer):
if answer == True:
@@ -438,14 +494,14 @@ def timeChanged(self):
self.start_prepare = self.begin - self.prepare_time
self.backoff = 0
- if int(old_prepare) != int(self.start_prepare):
+ if int(old_prepare) > 60 and int(old_prepare) != int(self.start_prepare):
self.log(15, "record time changed, start prepare is now: %s" % ctime(self.start_prepare))
def gotRecordEvent(self, record, event):
# TODO: this is not working (never true), please fix. (comparing two swig wrapped ePtrs)
if self.__record_service.__deref__() != record.__deref__():
return
- self.log(16, "record event %d" % event)
+ # self.log(16, "record event %d" % event)
if event == iRecordableService.evRecordWriteError:
print "WRITE ERROR on recording, disk full?"
# show notification. the 'id' will make sure that it will be
@@ -457,7 +513,7 @@ def gotRecordEvent(self, record, event):
# TODO: this has to be done.
elif event == iRecordableService.evStart:
text = _("A recording has been started:\n%s") % self.name
- notify = config.usage.show_message_when_recording_starts.value and not Screens.Standby.inStandby
+ notify = config.usage.show_message_when_recording_starts.getValue() and not Screens.Standby.inStandby
if self.dirnameHadToFallback:
text = '\n'.join((text, _("Please note that the previously selected media could not be accessed and therefore the default directory is being used instead.")))
notify = True
@@ -469,13 +525,13 @@ def gotRecordEvent(self, record, event):
# we have record_service as property to automatically subscribe to record service events
def setRecordService(self, service):
if self.__record_service is not None:
- print "[remove callback]"
+# print "[remove callback]"
NavigationInstance.instance.record_event.remove(self.gotRecordEvent)
self.__record_service = service
if self.__record_service is not None:
- print "[add callback]"
+# print "[add callback]"
NavigationInstance.instance.record_event.append(self.gotRecordEvent)
record_service = property(lambda self: self.__record_service, setRecordService)
@@ -488,6 +544,7 @@ def createTimer(xml):
repeated = xml.get("repeated").encode("utf-8")
disabled = long(xml.get("disabled") or "0")
justplay = long(xml.get("justplay") or "0")
+ always_zap = long(xml.get("always_zap") or "0")
afterevent = str(xml.get("afterevent") or "nothing")
afterevent = {
"nothing": AFTEREVENT.NONE,
@@ -497,7 +554,7 @@ def createTimer(xml):
}[afterevent]
eit = xml.get("eit")
if eit and eit != "None":
- eit = long(eit);
+ eit = long(eit)
else:
eit = None
location = xml.get("location")
@@ -512,10 +569,11 @@ def createTimer(xml):
tags = None
descramble = int(xml.get("descramble") or "1")
record_ecm = int(xml.get("record_ecm") or "0")
+ isAutoTimer = int(xml.get("isAutoTimer") or "0")
name = xml.get("name").encode("utf-8")
#filename = xml.get("filename").encode("utf-8")
- entry = RecordTimerEntry(serviceref, begin, end, name, description, eit, disabled, justplay, afterevent, dirname = location, tags = tags, descramble = descramble, record_ecm = record_ecm)
+ entry = RecordTimerEntry(serviceref, begin, end, name, description, eit, disabled, justplay, afterevent, dirname = location, tags = tags, descramble = descramble, record_ecm = record_ecm, isAutoTimer = isAutoTimer, always_zap = always_zap)
entry.repeated = int(repeated)
for l in xml.findall("log"):
@@ -565,11 +623,16 @@ def doActivate(self, w):
w.state = RecordTimerEntry.StateWaiting
self.addTimerEntry(w)
else:
+ # check for disabled timers, if time as passed set to completed.
+ self.cleanupDisabled()
# Remove old timers as set in config
- self.cleanupDaily(config.recording.keep_timers.value)
+ self.cleanupDaily(config.recording.keep_timers.getValue())
insort(self.processed_timers, w)
self.stateChanged(w)
+ def isRecTimerWakeup(self):
+ return wasRecTimerWakeup
+
def isRecording(self):
isRunning = False
for timer in self.timer_list:
@@ -582,7 +645,9 @@ def loadTimer(self):
if not Directories.fileExists(self.Filename):
return
try:
- doc = xml.etree.cElementTree.parse(self.Filename)
+ file = open(self.Filename, 'r')
+ doc = xml.etree.cElementTree.parse(file)
+ file.close()
except SyntaxError:
from Tools.Notifications import AddPopup
from Screens.MessageBox import MessageBox
@@ -591,7 +656,6 @@ def loadTimer(self):
print "timers.xml failed to load!"
try:
- import os
os.rename(self.Filename, self.Filename + "_old")
except (IOError, OSError):
print "renaming broken timer failed"
@@ -613,54 +677,13 @@ def loadTimer(self):
checkit = False # at moment it is enough when the message is displayed one time
def saveTimer(self):
- #root_element = xml.etree.cElementTree.Element('timers')
- #root_element.text = "\n"
-
- #for timer in self.timer_list + self.processed_timers:
- # some timers (instant records) don't want to be saved.
- # skip them
- #if timer.dontSave:
- #continue
- #t = xml.etree.cElementTree.SubElement(root_element, 'timers')
- #t.set("begin", str(int(timer.begin)))
- #t.set("end", str(int(timer.end)))
- #t.set("serviceref", str(timer.service_ref))
- #t.set("repeated", str(timer.repeated))
- #t.set("name", timer.name)
- #t.set("description", timer.description)
- #t.set("afterevent", str({
- # AFTEREVENT.NONE: "nothing",
- # AFTEREVENT.STANDBY: "standby",
- # AFTEREVENT.DEEPSTANDBY: "deepstandby",
- # AFTEREVENT.AUTO: "auto"}))
- #if timer.eit is not None:
- # t.set("eit", str(timer.eit))
- #if timer.dirname is not None:
- # t.set("location", str(timer.dirname))
- #t.set("disabled", str(int(timer.disabled)))
- #t.set("justplay", str(int(timer.justplay)))
- #t.text = "\n"
- #t.tail = "\n"
-
- #for time, code, msg in timer.log_entries:
- #l = xml.etree.cElementTree.SubElement(t, 'log')
- #l.set("time", str(time))
- #l.set("code", str(code))
- #l.text = str(msg)
- #l.tail = "\n"
-
- #doc = xml.etree.cElementTree.ElementTree(root_element)
- #doc.write(self.Filename)
-
list = []
-
list.append('\n')
list.append('\n')
for timer in self.timer_list + self.processed_timers:
if timer.dontSave:
continue
-
list.append('\n')
- if config.recording.debug.value:
- for time, code, msg in timer.log_entries:
- list.append('')
- list.append(str(stringToXML(msg)))
- list.append('\n')
+ for time, code, msg in timer.log_entries:
+ list.append('')
+ list.append(str(stringToXML(msg)))
+ list.append('\n')
list.append('\n')
@@ -704,7 +728,6 @@ def saveTimer(self):
file.write(x)
file.flush()
- import os
os.fsync(file.fileno())
file.close()
os.rename(self.Filename + ".writing", self.Filename)
@@ -717,6 +740,18 @@ def getNextZapTime(self):
return timer.begin
return -1
+ def getStillRecording(self):
+ isStillRecording = False
+ now = time()
+ for timer in self.timer_list:
+ if timer.isStillRecording:
+ isStillRecording = True
+ break
+ elif (abs(timer.begin - now) <= 10):
+ isStillRecording = True
+ break
+ return isStillRecording
+
def getNextRecordingTimeOld(self):
now = time()
for timer in self.timer_list:
@@ -730,7 +765,7 @@ def getNextRecordingTime(self):
nextrectime = self.getNextRecordingTimeOld()
faketime = time()+300
- if config.timeshift.isRecording.value:
+ if config.timeshift.isRecording.getValue():
if nextrectime > 0 and nextrectime < faketime:
return nextrectime
else:
@@ -739,15 +774,11 @@ def getNextRecordingTime(self):
return nextrectime
def isNextRecordAfterEventActionAuto(self):
- now = time()
- t = None
for timer in self.timer_list:
- if timer.justplay or timer.begin < now:
+ if timer.justplay:
continue
- if t is None or t.begin == timer.begin:
- t = timer
- if t.afterEvent == AFTEREVENT.AUTO:
- return True
+ if timer.afterEvent == AFTEREVENT.AUTO or timer.afterEvent == AFTEREVENT.DEEPSTANDBY:
+ return True
return False
def record(self, entry, ignoreTSC=False, dosave=True): #wird von loadTimer mit dosave=False aufgerufen
@@ -755,7 +786,6 @@ def record(self, entry, ignoreTSC=False, dosave=True): #wird von loadTimer mit
if not timersanitycheck.check():
if ignoreTSC != True:
print "timer conflict detected!"
- print timersanitycheck.getSimulTimerList()
return timersanitycheck.getSimulTimerList()
else:
print "ignore timer conflict"
@@ -771,13 +801,19 @@ def record(self, entry, ignoreTSC=False, dosave=True): #wird von loadTimer mit
return None
def isInTimer(self, eventid, begin, duration, service):
+ returnValue = None
+ type = 0
time_match = 0
- chktime = None
- chktimecmp = None
- chktimecmp_end = None
+
+ isAutoTimer = False
+ bt = None
end = begin + duration
refstr = str(service)
for x in self.timer_list:
+ if x.isAutoTimer == 1:
+ isAutoTimer = True
+ else:
+ isAutoTimer = False
check = x.service_ref.ref.toString() == refstr
if not check:
sref = x.service_ref.ref
@@ -806,31 +842,64 @@ def isInTimer(self, eventid, begin, duration, service):
check = True
break
if check:
+ timer_end = x.end
+ if x.justplay and (timer_end - x.begin) <= 1:
+ timer_end += 60
if x.repeated != 0:
- if chktime is None:
- chktime = localtime(begin)
- chktimecmp = chktime.tm_wday * 1440 + chktime.tm_hour * 60 + chktime.tm_min
- chktimecmp_end = chktimecmp + (duration / 60)
- time = localtime(x.begin)
- for y in (0, 1, 2, 3, 4, 5, 6):
- if x.repeated & (1 << y) and (x.begin <= begin or begin <= x.begin <= end):
- timecmp = y * 1440 + time.tm_hour * 60 + time.tm_min
- if timecmp <= chktimecmp < (timecmp + ((x.end - x.begin) / 60)):
- time_match = ((timecmp + ((x.end - x.begin) / 60)) - chktimecmp) * 60
- elif chktimecmp <= timecmp < chktimecmp_end:
- time_match = (chktimecmp_end - timecmp) * 60
- else: #if x.eit is None:
- if begin <= x.begin <= end:
- diff = end - x.begin
- if time_match < diff:
- time_match = diff
- elif x.begin <= begin <= x.end:
- diff = x.end - begin
- if time_match < diff:
- time_match = diff
+ if bt is None:
+ bt = localtime(begin)
+ et = localtime(end)
+ bday = bt.tm_wday
+ begin2 = bday * 1440 + bt.tm_hour * 60 + bt.tm_min
+ end2 = et.tm_wday * 1440 + et.tm_hour * 60 + et.tm_min
+ if x.repeated & (1 << bday):
+ xbt = localtime(x.begin)
+ xet = localtime(timer_end)
+ xbegin = bday * 1440 + xbt.tm_hour * 60 + xbt.tm_min
+ xend = bday * 1440 + xet.tm_hour * 60 + xet.tm_min
+ if xend < xbegin:
+ xend += 1440
+ if begin2 < xbegin <= end2:
+ if xend < end2: # recording within event
+ time_match = (xend - xbegin) * 60
+ type = 3
+ else: # recording last part of event
+ time_match = (end2 - xbegin) * 60
+ type = 1
+ elif xbegin <= begin2 <= xend:
+ if xend < end2: # recording first part of event
+ time_match = (xend - begin2) * 60
+ type = 4
+ else: # recording whole event
+ time_match = (end2 - begin2) * 60
+ type = 2
+ else:
+ if begin < x.begin <= end:
+ if timer_end < end: # recording within event
+ time_match = timer_end - x.begin
+ type = 3
+ else: # recording last part of event
+ time_match = end - x.begin
+ type = 1
+ elif x.begin <= begin <= timer_end:
+ if timer_end < end: # recording first part of event
+ time_match = timer_end - begin
+ type = 4
+ if x.justplay:
+ type = 2
+ else: # recording whole event
+ time_match = end - begin
+ type = 2
+ if x.justplay:
+ type += 5
+ elif x.always_zap:
+ type += 10
+
if time_match:
- break
- return time_match
+ returnValue = (time_match, type, isAutoTimer)
+ if type in (2,7,12): # When full recording do not look further
+ break
+ return returnValue
def removeEntry(self, entry):
print "[Timer] Remove " + str(entry)
@@ -846,9 +915,9 @@ def removeEntry(self, entry):
if entry.state != entry.StateEnded:
self.timeChanged(entry)
- print "state: ", entry.state
- print "in processed: ", entry in self.processed_timers
- print "in running: ", entry in self.timer_list
+# print "state: ", entry.state
+# print "in processed: ", entry in self.processed_timers
+# print "in running: ", entry in self.timer_list
# autoincrease instanttimer if possible
if not entry.dontSave:
for x in self.timer_list:
diff --git a/ServiceReference.py b/ServiceReference.py
index 926acc0e5..a78191295 100644
--- a/ServiceReference.py
+++ b/ServiceReference.py
@@ -1,4 +1,5 @@
-from enigma import eServiceReference, eServiceCenter
+from enigma import eServiceReference, eServiceCenter, getBestPlayableServiceReference
+import NavigationInstance
class ServiceReference(eServiceReference):
def __init__(self, ref, reftype = eServiceReference.idInvalid, flags = 0, path = ''):
@@ -34,4 +35,25 @@ def getFlags(self):
def isRecordable(self):
ref = self.ref
- return ref.flags & eServiceReference.isGroup or (ref.type == eServiceReference.idDVB or ref.type == eServiceReference.idDVB + 0x100)
\ No newline at end of file
+ return ref.flags & eServiceReference.isGroup or (ref.type == eServiceReference.idDVB or ref.type == eServiceReference.idDVB + 0x100)
+
+def getPlayingref(ref):
+ playingref = None
+ if NavigationInstance.instance:
+ playingref = NavigationInstance.instance.getCurrentlyPlayingServiceReference()
+ if not playingref:
+ playingref = eServiceReference()
+ return playingref
+
+def isPlayableForCur(ref):
+ info = eServiceCenter.getInstance().info(ref)
+ return not not (info and info.isPlayable(ref, getPlayingref(ref)))
+
+def resolveAlternate(ref):
+ nref = None
+ if ref.flags & eServiceReference.isGroup:
+ nref = getBestPlayableServiceReference(ref, getPlayingref(ref))
+ if not nref:
+ nref = getBestPlayableServiceReference(ref,
+ eServiceReference(), True)
+ return nref
diff --git a/SleepTimer.py b/SleepTimer.py
deleted file mode 100644
index f0ce2119d..000000000
--- a/SleepTimer.py
+++ /dev/null
@@ -1,74 +0,0 @@
-import timer
-import time
-import math
-
-from Tools import Notifications
-
-from Components.config import config, ConfigYesNo, ConfigSelection, ConfigSubsection
-
-from Screens.MessageBox import MessageBox
-import Screens.Standby
-
-config.SleepTimer = ConfigSubsection()
-config.SleepTimer.ask = ConfigYesNo(default = True)
-config.SleepTimer.action = ConfigSelection(default = "shutdown", choices = [("shutdown", _("shutdown")), ("standby", _("standby"))])
-
-class SleepTimerEntry(timer.TimerEntry):
- def __init__(self, begin):
- timer.TimerEntry.__init__(self, int(begin), int(begin))
-
- self.prepare_time = 0
-
- def getNextActivation(self):
- return self.begin
-
- def activate(self):
- if self.state == self.StateRunning:
- if config.SleepTimer.action.value == "shutdown":
- if config.SleepTimer.ask.value and not Screens.Standby.inTryQuitMainloop:
- Notifications.AddNotificationWithCallback(self.shutdown, MessageBox, _("A sleep timer wants to shut down\nyour STB_BOX. Shutdown now?"), timeout = 20)
- else:
- self.shutdown(True)
- elif config.SleepTimer.action.value == "standby":
- if config.SleepTimer.ask.value and not Screens.Standby.inStandby:
- Notifications.AddNotificationWithCallback(self.standby, MessageBox, _("A sleep timer wants to set your\nSTB_BOX to standby. Do that now?"), timeout = 20)
- else:
- self.standby(True)
-
- return True
-
- def shouldSkip(self):
- return False
-
- def shutdown(self, answer):
- if answer is not None:
- if answer and not Screens.Standby.inTryQuitMainloop:
- Notifications.AddNotification(Screens.Standby.TryQuitMainloop, 1)
-
- def standby(self, answer):
- if answer is not None:
- if answer and not Screens.Standby.inStandby:
- Notifications.AddNotification(Screens.Standby.Standby)
-
-class SleepTimer(timer.Timer):
- def __init__(self):
- timer.Timer.__init__(self)
- self.defaultTime = 30
-
- def setSleepTime(self, sleeptime):
- self.clear()
- self.addTimerEntry(SleepTimerEntry(time.time() + 60 * sleeptime))
-
- def clear(self):
- self.timer_list = []
-
- def getCurrentSleepTime(self):
- llen = len(self.timer_list)
- idx = 0
- while idx < llen:
- timer = self.timer_list[idx]
- return int(math.ceil((timer.begin - time.time()) / 60))
- return self.defaultTime
-
- def isActive(self):
- return len(self.timer_list) > 0
diff --git a/configure.ac b/configure.ac
index 9c48a21fe..792f97a1e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -28,7 +28,12 @@ TUXBOX_APPS_DVB
AM_CONDITIONAL(HAVE_GIT_DIR, test -d "$srcdir/.git")
AM_CONDITIONAL(HAVE_FAKE_GIT_DIR, test -f "$srcdir/.git/last_commit_info")
-PKG_CHECK_MODULES(BASE, [freetype2 fribidi gstreamer-0.10 gstreamer-pbutils-0.10 libdvbsi++ libpng libxml-2.0 sigc++-1.2 libssl libcrypto])
+dnl versions of gstreamer and plugins-base
+AC_ARG_WITH(gstversion,
+ AS_HELP_STRING([--with-gstversion],[use gstreamer version (major.minor)]),
+ [GST_MAJORMINOR=$withval],[GST_MAJORMINOR=0.10])
+
+PKG_CHECK_MODULES(BASE, [freetype2 fribidi gstreamer-$GST_MAJORMINOR gstreamer-pbutils-$GST_MAJORMINOR libdvbsi++ libpng libxml-2.0 sigc++-1.2 libssl libcrypto])
PKG_CHECK_MODULES(LIBDDVD, libdreamdvd, HAVE_LIBDDVD="yes", HAVE_LIBDDVD="no")
AM_CONDITIONAL(HAVE_LIBDDVD, test "$HAVE_LIBDDVD" = "yes")
@@ -50,28 +55,92 @@ AC_ARG_WITH(boxtype,
AC_SUBST(BOXTYPE)
AC_DEFINE_UNQUOTED(BOXTYPE,"$BOXTYPE",[box type])
+AC_ARG_WITH(distro,
+ [ --with-distro=NAME distro name [[openvix,openaaf,...]]],
+ [DISTRO="$withval"],[DISTRO="opensif"])
+AC_SUBST(DISTRO)
+AC_DEFINE_UNQUOTED(DISTRO,"$DISTRO",[distro name])
+
+AC_ARG_WITH(machinebrand,
+ [ --with-machinebrand=NAME brand name [[Vu,Xtrend,...]]],
+ [MACHINE_BRAND="$withval"],[MACHINE_BRAND="Vu+"])
+AC_SUBST(MACHINE_BRAND)
+AC_DEFINE_UNQUOTED(MACHINE_BRAND,"$MACHINE_BRAND",[machine brand])
+
+AC_ARG_WITH(machinename,
+ [ --with-machinename=NAME machine name [[Solo,Ultimo,...]]],
+ [MACHINE_NAME="$withval"],[MACHINE_NAME="Ultimo"])
+AC_SUBST(MACHINE_NAME)
+AC_DEFINE_UNQUOTED(MACHINE_NAME,"$MACHINE_NAME",[machine name])
+
+AC_ARG_WITH(imageversion,
+ [ --with-imageversion=NAME version number [[3.0]]],
+ [IMAGEVERSION="$withval"],[IMAGEVERSION=""])
+AC_SUBST(IMAGEVERSION)
+AC_DEFINE_UNQUOTED(IMAGEVERSION,"$IMAGEVERSION",[version number])
+
+AC_ARG_WITH(imagebuild,
+ [ --with-imagebuild=NAME build number [[628]]],
+ [IMAGEBUILD="$withval"],[IMAGEBUILD=""])
+AC_SUBST(IMAGEBUILD)
+AC_DEFINE_UNQUOTED(IMAGEBUILD,"$IMAGEBUILD",[build number])
+
+AC_ARG_WITH(driverdate,
+ [ --with-driverdate=NAME driver date [[628]]],
+ [DRIVERDATE="$withval"],[DRIVERDATE=""])
+AC_SUBST(DRIVERDATE)
+AC_DEFINE_UNQUOTED(DRIVERDATE,"$DRIVERDATE",[driver date])
+
+AM_CONDITIONAL(AZBOX, test `echo "$BOXTYPE" | cut -b 1-5` == "azbox")
AM_CONDITIONAL(DREAMBOX, test `echo "$BOXTYPE" | cut -b 1-2` == "dm")
AM_CONDITIONAL(VUPLUS, test `echo "$BOXTYPE" | cut -b 1-2` == "vu")
AM_CONDITIONAL(XTREND, test `echo "$BOXTYPE" | cut -b 1-2` == "et")
AM_CONDITIONAL(TECHNOMATE, test `echo "$BOXTYPE" | cut -b 1-2` == "tm")
+AM_CONDITIONAL(IQON, test `echo "$BOXTYPE" | cut -b 1-4` == "iqon")
+AM_CONDITIONAL(INI, test `echo "$BOXTYPE" | cut -b 1-3` == "ini")
AM_CONDITIONAL(GIGABLUE, test `echo "$BOXTYPE" | cut -b 1-2` == "gb")
AM_CONDITIONAL(ODIN, test `echo "$BOXTYPE" | cut -b 1-4` == "odin")
AM_CONDITIONAL(VENTON, test `echo "$BOXTYPE" | cut -b 1-6` == "venton")
-AM_CONDITIONAL(VUUNO, test "$BOXTYPE" == vuuno)
-AM_CONDITIONAL(VUULTIMO, test "$BOXTYPE" == vuultimo)
-AM_CONDITIONAL(VUSOLO, test "$BOXTYPE" == vusolo)
-AM_CONDITIONAL(VUDUO, test "$BOXTYPE" == vuduo)
+AM_CONDITIONAL(DM8000, test "$BOXTYPE" == dm8000)
+AM_CONDITIONAL(DM7020HD, test "$BOXTYPE" == dm7020hd)
+AM_CONDITIONAL(DM800, test "$BOXTYPE" == dm800)
+AM_CONDITIONAL(DM800SE, test "$BOXTYPE" == dm800se)
+AM_CONDITIONAL(DM800HD, test "$BOXTYPE" == dm800hd)
+AM_CONDITIONAL(EBOX5000, test "$BOXTYPE" == ebox5000)
+AM_CONDITIONAL(ET4X00, test "$BOXTYPE" == et4x00)
AM_CONDITIONAL(ET5X00, test "$BOXTYPE" == et5x00)
AM_CONDITIONAL(ET6X00, test "$BOXTYPE" == et6x00)
AM_CONDITIONAL(ET9X00, test "$BOXTYPE" == et9x00)
-AM_CONDITIONAL(ODINM9, test "$BOXTYPE" == odinm9)
-AM_CONDITIONAL(TMTWIN, test "$BOXTYPE" == tmtwin)
AM_CONDITIONAL(GB800SOLO, test "$BOXTYPE" == gb800solo)
AM_CONDITIONAL(GB800SE, test "$BOXTYPE" == gb800se)
AM_CONDITIONAL(GB800UE, test "$BOXTYPE" == gb800ue)
AM_CONDITIONAL(GBQUAD, test "$BOXTYPE" == gbquad)
+AM_CONDITIONAL(INIHDE, test "$BOXTYPE" == inihde)
+AM_CONDITIONAL(INIHDP, test "$BOXTYPE" == inihdp)
+AM_CONDITIONAL(IQONIOS100HD, test "$BOXTYPE" == iqonios100hd)
+AM_CONDITIONAL(IQONIOS200HD, test "$BOXTYPE" == iqonios200hd)
+AM_CONDITIONAL(IQONIOS300HD, test "$BOXTYPE" == iqonios300hd)
+AM_CONDITIONAL(IXUSSONE, test "$BOXTYPE" == ixussone)
+AM_CONDITIONAL(IXUSSZERO, test "$BOXTYPE" == ixusszero)
+AM_CONDITIONAL(ODINM7, test "$BOXTYPE" == odinm7)
+AM_CONDITIONAL(ODINM9, test "$BOXTYPE" == odinm9)
+AM_CONDITIONAL(TMTWINOE, test "$BOXTYPE" == tmtwin)
+AM_CONDITIONAL(TM2TOE, test "$BOXTYPE" == tm2t)
+AM_CONDITIONAL(TMSINGLE, test "$BOXTYPE" == tmsingle)
+AM_CONDITIONAL(TMNANO, test "$BOXTYPE" == tmnano)
+AM_CONDITIONAL(VUUNO, test "$BOXTYPE" == vuuno)
+AM_CONDITIONAL(VUULTIMO, test "$BOXTYPE" == vuultimo)
+AM_CONDITIONAL(VUSOLO, test "$BOXTYPE" == vusolo)
+AM_CONDITIONAL(VUDUO, test "$BOXTYPE" == vuduo)
+AM_CONDITIONAL(VUSOLO2, test "$BOXTYPE" == vusolo2)
+AM_CONDITIONAL(VUDUO2, test "$BOXTYPE" == vuduo2)
AM_CONDITIONAL(VENTONHDX, test "$BOXTYPE" == ventonhdx)
-AM_CONDITIONAL(HAVE_TEMPFANCONTROL, test "$BOXTYPE" == dm8000 -o "$BOXTYPE" == dm800se -o "$BOXTYPE" == dm500hd)
+AM_CONDITIONAL(XP1000, test "$BOXTYPE" == xp1000)
+
+if test `echo "$BOXTYPE" | cut -b 1-2` == "dm"; then
+ AC_DEFINE(DREAMBOX, 1, [Dreambox hardware])
+ AC_DEFINE(KEY_PLAY_ACTUALLY_IS_KEY_PLAYPAUSE, 1,[define when rc sends a KEY_PLAY event for its KEY_PLAYPAUSE key])
+fi
AC_ARG_WITH(textlcd,
AC_HELP_STRING([--with-textlcd], [use ascii based lcd, yes or no]),
@@ -83,16 +152,6 @@ if test x"$withtextlcd" != xno ; then
fi
AM_CONDITIONAL(HAVE_TEXTLCD, test x"$withtextlcd" != xno)
-AC_ARG_WITH(fullgraphiclcd,
- AC_HELP_STRING([--with-fullgraphiclcd], [display right_half_vfd_icons from skin(for ultimo), yes or no]),
- [[withfullgraphiclcd=$withval]],
- [[withfullgraphiclcd=no]]
-)
-if test x"$withfullgraphiclcd" != xno ; then
- AC_DEFINE(HAVE_FULLGRAPHICLCD, 1,[Define when display right_half_vfd_icons from skin, for ultimo])
-fi
-AM_CONDITIONAL(HAVE_FULLGRAPHICLCD, test x"$withfullgraphiclcd" != xno)
-
AC_ARG_WITH(colorlcd,
AC_HELP_STRING([--with-colorlcd], [use 96x64 16bpp color display, yes or no]),
[[withcolorlcd=$withval]],
@@ -103,6 +162,66 @@ if test x"$withcolorlcd" != xno ; then
fi
AM_CONDITIONAL(HAVE_COLORLCD, test x"$withcolorlcd" != xno)
+AC_ARG_WITH(colorlcd128,
+ AC_HELP_STRING([--with-colorlcd128], [use 128x64 16bpp color display, yes or no]),
+ [[withcolorlcd128=$withval]],
+ [[withcolorlcd128=no]]
+)
+if test x"$withcolorlcd128" != xno ; then
+ AC_DEFINE(HAVE_COLORLCD128, 1,[Define when using a 128x64 color display device])
+fi
+AM_CONDITIONAL(HAVE_COLORLCD128, test x"$withcolorlcd" != xno)
+
+AC_ARG_WITH(colorlcd220,
+ AC_HELP_STRING([--with-colorlcd220], [use 220x176 16bpp color display, yes or no]),
+ [[withcolorlcd220=$withval]],
+ [[withcolorlcd220=no]]
+)
+if test x"$withcolorlcd220" != xno ; then
+ AC_DEFINE(HAVE_COLORLCD220, 1,[Define when using a 220x176 color display device])
+fi
+AM_CONDITIONAL(HAVE_COLORLCD220, test x"$withcolorlcd220" != xno)
+
+AC_ARG_WITH(bwlcd255,
+ AC_HELP_STRING([--with-bwlcd255], [use 255x64 1bpp black and white display, yes or no]),
+ [[withbwlcd255=$withval]],
+ [[withbwlcd255=no]]
+)
+if test x"$withbwlcd255" != xno ; then
+ AC_DEFINE(HAVE_BWLCD255, 1,[Define when using a 255x64 black and white display device])
+fi
+AM_CONDITIONAL(HAVE_BWLCD255, test x"$withbwlcd255" != xno)
+
+AC_ARG_WITH(bwlcd140,
+ AC_HELP_STRING([--with-bwlcd140], [use 140x32 1bpp black and white display, yes or no]),
+ [[withbwlcd140=$withval]],
+ [[withbwlcd140=no]]
+)
+if test x"$withbwlcd140" != xno ; then
+ AC_DEFINE(HAVE_BWLCD140, 1,[Define when using a 140x32 black and white display device])
+fi
+AM_CONDITIONAL(HAVE_BWLCD140, test x"$withbwlcd140" != xno)
+
+AC_ARG_WITH(fullgraphiclcd,
+ AC_HELP_STRING([--with-fullgraphiclcd], [display right_half_vfd_icons from skin(for ultimo), yes or no]),
+ [[withfullgraphiclcd=$withval]],
+ [[withfullgraphiclcd=no]]
+)
+if test x"$withfullgraphiclcd" != xno ; then
+ AC_DEFINE(HAVE_FULLGRAPHICLCD, 1,[Define when display right_half_vfd_icons from skin, for ultimo])
+fi
+AM_CONDITIONAL(HAVE_FULLGRAPHICLCD, test x"$withfullgraphiclcd" != xno)
+
+AC_ARG_WITH(gigabluelcd,
+ AC_HELP_STRING([--with-gigabluelcd], [use fix colour map in color display, yes or no]),
+ [[withgigabluelcd=$withval]],
+ [[withgigabluelcd=no]]
+)
+if test x"$withgigabluelcd" != xno ; then
+ AC_DEFINE(HAVE_GIGABLUELCD, 1,[Define when using a 220x176 color display device])
+fi
+AM_CONDITIONAL(HAVE_GIGABLUELCD, test x"$withgigabluelcd" != xno)
+
AC_ARG_WITH(oldpvr,
AC_HELP_STRING([--with-oldpvr], [use /dev/misc/pvr instead of /dev/dvb/adapterX/dvrX, yes or no]),
[[witholdpvr=$withval]],
@@ -113,29 +232,28 @@ if test x"$witholdpvr" != xno ; then
fi
AM_CONDITIONAL(HAVE_OLDPVR, test x"$witholdpvr" != xno)
-if test x"$BOXTYPE" == "xdm8000" -o x"$BOXTYPE" == "xdm7020hd" ; then
+if test "$BOXTYPE" == "et4x00" -o "$BOXTYPE" == "et5x00" -o "$BOXTYPE" == "et6x00" -o "$BOXTYPE" == "et9x00" ; then
AC_DEFINE(KEY_PLAY_ACTUALLY_IS_KEY_PLAYPAUSE, 1,[define when rc sends a KEY_PLAY event for its KEY_PLAYPAUSE key])
fi
-if test x"$BOXTYPE" == "xet5x00" -o x"$BOXTYPE" == "xet6x00" -o x"$BOXTYPE" == "xet9x00" -o x"$BOXTYPE" == "xodinm9" ; then
+if test "$BOXTYPE" == "odinm9"; then
AC_DEFINE(KEY_PLAY_ACTUALLY_IS_KEY_PLAYPAUSE, 1,[define when rc sends a KEY_PLAY event for its KEY_PLAYPAUSE key])
-# AC_DEFINE(FORCE_ADVANCED_REMOTE, 1,[define to fixup the input device identification when the remote control is actually an 'advanced' remote (with play/forward/rewind keys)])
+ AC_DEFINE(FORCE_NO_BLENDING_ACCELERATION, 1,[define when the framebuffer acceleration does not have alphablending support, though the autodetection might indicate that it does])
fi
-if test x"$BOXTYPE" == "xvuduo" -o x"$BOXTYPE" == "xvusolo" -o x"$BOXTYPE" == "xvuuno" -o x"$BOXTYPE" == "xvuultimo" -o x"$BOXTYPE" == "xtmtwin"; then
+if test "$BOXTYPE" == "vuduo" -o "$BOXTYPE" == "vusolo" -o "$BOXTYPE" == "vuduo2" -o "$BOXTYPE" == "vusolo2" -o "$BOXTYPE" == "vuuno" -o "$BOXTYPE" == "vuultimo" -o "$BOXTYPE" == "tmtwin" -o "$BOXTYPE" == "tm2t" -o "$BOXTYPE" == "tmsingle" -o "$BOXTYPE" == "tmnano" -o "$BOXTYPE" == "iqonios100hd" -o "$BOXTYPE" == "iqonios200hd" -o "$BOXTYPE" == "iqonios300hd"; then
AC_DEFINE(FORCE_NO_BLENDING_ACCELERATION, 1,[define when the framebuffer acceleration does not have alphablending support, though the autodetection might indicate that it does])
AC_DEFINE(FORCE_ADVANCED_REMOTE, 1,[define to fixup the input device identification when the remote control is actually an 'advanced' remote (with play/forward/rewind keys)])
fi
-if test x"$BOXTYPE" == "xgb800solo" -o x"$BOXTYPE" == "xgb800se" -o x"$BOXTYPE" == "xgb800ue" -o x"$BOXTYPE" == "xgbquad"; then
+if test "$BOXTYPE" == "gb800solo" -o "$BOXTYPE" == "gb800se" -o "$BOXTYPE" == "gb800ue" -o "$BOXTYPE" == "gbquad"; then
+ AC_DEFINE(KEY_PLAY_ACTUALLY_IS_KEY_PLAYPAUSE, 1,[define when rc sends a KEY_PLAY event for its KEY_PLAYPAUSE key])
AC_DEFINE(FORCE_NO_BLENDING_ACCELERATION, 1,[define when the framebuffer acceleration does not have alphablending support, though the autodetection might indicate that it does])
-# AC_DEFINE(FORCE_ADVANCED_REMOTE, 1,[define to fixup the input device identification when the remote control is actually an 'advanced' remote (with play/forward/rewind keys)])
fi
-if test x"$BOXTYPE" == "xventonhdx"; then
+if test "$BOXTYPE" == "inihde" -o "$BOXTYPE" == "ventonhdx"; then
AC_DEFINE(KEY_PLAY_ACTUALLY_IS_KEY_PLAYPAUSE, 1,[define when rc sends a KEY_PLAY event for its KEY_PLAYPAUSE key])
AC_DEFINE(FORCE_NO_BLENDING_ACCELERATION, 1,[define when the framebuffer acceleration does not have alphablending support, though the autodetection might indicate that it does])
- AC_DEFINE(FORCE_ADVANCED_REMOTE, 1,[define to fixup the input device identification when the remote control is actually an 'advanced' remote (with play/forward/rewind keys)])
fi
AC_ARG_WITH(libsdl,
@@ -195,31 +313,41 @@ AC_CONFIG_FILES([
Makefile
data/Makefile
data/fonts/Makefile
-data/countries/Makefile
-data/defaults/Makefile
-data/defaults/Dream/Makefile
-data/defaults/Dream/hdbouquets/Makefile
-data/defaults/Dream/sdbouquets/Makefile
data/extensions/Makefile
data/keymaps/Makefile
-data/lcd/Makefile
+data/displaytext/Makefile
+data/display96/Makefile
+data/display128/Makefile
+data/display140/Makefile
+data/display220/Makefile
+data/display255/Makefile
data/rc_models/Makefile
+data/rc_models/dmm0/Makefile
+data/rc_models/dmm1/Makefile
+data/rc_models/dmm2/Makefile
+data/rc_models/ebox5000/Makefile
+data/rc_models/et4x00/Makefile
data/rc_models/et6x00/Makefile
+data/rc_models/et6500/Makefile
data/rc_models/et9500/Makefile
data/rc_models/et9x00/Makefile
data/rc_models/gb/Makefile
data/rc_models/ini3000/Makefile
data/rc_models/ini5000/Makefile
+data/rc_models/ini5000r/Makefile
data/rc_models/ini7000/Makefile
-data/rc_models/odin/Makefile
+data/rc_models/iqon/Makefile
+data/rc_models/ixussone/Makefile
+data/rc_models/ixusszero/Makefile
+data/rc_models/odinm7/Makefile
+data/rc_models/odinm9/Makefile
data/rc_models/tm/Makefile
data/rc_models/vu/Makefile
-data/skin_default/Makefile
-data/skin_default/menu/Makefile
-data/skin_default/icons/Makefile
-data/skin_default/buttons/Makefile
-data/skin_default/spinner/Makefile
-data/skin_default/GraphEPG/Makefile
+data/rc_models/vu2/Makefile
+data/rc_models/xp1000/Makefile
+data/skin_default/sifteam_daemons/Makefile
+data/skin_default/sifteam_panel/Makefile
+data/skin_default/sifteam_others/Makefile
include/Makefile
lib/Makefile
lib/base/eenv.cpp
@@ -230,9 +358,6 @@ lib/python/Components/Renderer/Makefile
lib/python/Components/Sources/Makefile
lib/python/Screens/Makefile
lib/python/Plugins/Makefile
-lib/python/Plugins/DemoPlugins/Makefile
-lib/python/Plugins/DemoPlugins/TPMDemo/Makefile
-lib/python/Plugins/DemoPlugins/TestPlugin/Makefile
lib/python/Plugins/Extensions/Makefile
lib/python/Plugins/Extensions/CutListEditor/Makefile
lib/python/Plugins/Extensions/CutListEditor/meta/Makefile
@@ -254,8 +379,6 @@ lib/python/Plugins/Extensions/SocketMMI/src/Makefile
lib/python/Plugins/Extensions/TuxboxPlugins/Makefile
lib/python/Plugins/Extensions/TuxboxPlugins/meta/Makefile
lib/python/Plugins/SystemPlugins/CableScan/Makefile
-lib/python/Plugins/SystemPlugins/CleanupWizard/Makefile
-lib/python/Plugins/SystemPlugins/CleanupWizard/meta/Makefile
lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/Makefile
lib/python/Plugins/SystemPlugins/CommonInterfaceAssignment/meta/Makefile
lib/python/Plugins/SystemPlugins/DefaultServicesScanner/Makefile
@@ -269,8 +392,6 @@ lib/python/Plugins/SystemPlugins/HdmiCEC/Makefile
lib/python/Plugins/SystemPlugins/Hotplug/Makefile
lib/python/Plugins/SystemPlugins/Hotplug/meta/Makefile
lib/python/Plugins/SystemPlugins/Makefile
-lib/python/Plugins/SystemPlugins/TempFanControl/Makefile
-lib/python/Plugins/SystemPlugins/TempFanControl/meta/Makefile
lib/python/Plugins/SystemPlugins/NetworkWizard/Makefile
lib/python/Plugins/SystemPlugins/NetworkWizard/meta/Makefile
lib/python/Plugins/SystemPlugins/NFIFlash/Makefile
@@ -294,6 +415,9 @@ lib/python/Plugins/SystemPlugins/Videomode/meta/Makefile
lib/python/Plugins/SystemPlugins/WirelessLan/Makefile
lib/python/Plugins/SystemPlugins/WirelessLan/meta/Makefile
lib/python/Tools/Makefile
+lib/python/SIFTeam/Makefile
+lib/python/SIFTeam/Daemons/Makefile
+lib/python/SIFTeam/Extra/Makefile
po/Makefile
main/Makefile
tools/Makefile
diff --git a/data/Makefile.am b/data/Makefile.am
index b0a7012a9..69a2a4ab3 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -1,32 +1,42 @@
-SUBDIRS = countries fonts defaults extensions keymaps skin_default rc_models
+SUBDIRS = fonts extensions keymaps rc_models
dist_pkgdata_DATA = \
- defaultsatlists.xml \
- defaultwizard.xml \
- dreampackagewizard.xml \
encoding.conf \
keymap.xml \
menu.xml \
- prev.png \
black.mvi \
rcpositions.xml \
setup.xml \
- skin_default.xml \
skin_subtitles.xml \
- skin.xml \
startwizard.xml \
- tutorialwizard.xml \
+ userinterfacepositionerwizard.xml \
freesat.t1 \
freesat.t2 \
- unicable.xml
+ unicable.xml \
+ hd-testcard.mvi \
+ distro-logo.png \
+ distro-lcd-logo.png
if HAVE_TEXTLCD
-dist_pkgdata_DATA += skin_text.xml
-else
+SUBDIRS += displaytext
+endif
+
if HAVE_COLORLCD
-dist_pkgdata_DATA += skin_display96.xml
-else
-SUBDIRS += lcd
-dist_pkgdata_DATA += skin_display_picon.xml skin_display_no_picon.xml
+SUBDIRS += display96
endif
+
+if HAVE_COLORLCD128
+SUBDIRS += display128
+endif
+
+if HAVE_COLORLCD220
+SUBDIRS += display220
+endif
+
+if HAVE_BWLCD255
+SUBDIRS += display255
+endif
+
+if HAVE_BWLCD140
+SUBDIRS += display140
endif
diff --git a/data/countries/Makefile.am b/data/countries/Makefile.am
deleted file mode 100644
index cdc0e0d82..000000000
--- a/data/countries/Makefile.am
+++ /dev/null
@@ -1,39 +0,0 @@
-installdir = $(pkgdatadir)/countries
-
-dist_install_DATA = \
- ad.png \
- ae.png \
- bg.png \
- cz.png \
- de.png \
- dk.png \
- en.png \
- es.png \
- ee.png \
- fi.png \
- fr.png \
- gb.png \
- gr.png \
- hr.png \
- hu.png \
- il.png \
- ir.png \
- is.png \
- it.png \
- lt.png \
- lv.png \
- missing.png \
- nl.png \
- no.png \
- pl.png \
- pt.png \
- ro.png \
- ru.png \
- se.png \
- si.png \
- sk.png \
- th.png \
- tr.png \
- ua.png \
- x-fy.png \
- yu.png
diff --git a/data/countries/ae.png b/data/countries/ae.png
deleted file mode 100644
index 29b54f6f2..000000000
Binary files a/data/countries/ae.png and /dev/null differ
diff --git a/data/countries/bg.png b/data/countries/bg.png
deleted file mode 100644
index 1fc28b268..000000000
Binary files a/data/countries/bg.png and /dev/null differ
diff --git a/data/countries/cz.png b/data/countries/cz.png
deleted file mode 100644
index a9231e026..000000000
Binary files a/data/countries/cz.png and /dev/null differ
diff --git a/data/countries/de.png b/data/countries/de.png
deleted file mode 100644
index 048ba4d73..000000000
Binary files a/data/countries/de.png and /dev/null differ
diff --git a/data/countries/dk.png b/data/countries/dk.png
deleted file mode 100644
index 62d5ce69e..000000000
Binary files a/data/countries/dk.png and /dev/null differ
diff --git a/data/countries/ee.png b/data/countries/ee.png
deleted file mode 100644
index e8a82b5ca..000000000
Binary files a/data/countries/ee.png and /dev/null differ
diff --git a/data/countries/en.png b/data/countries/en.png
deleted file mode 100644
index 9d97f7640..000000000
Binary files a/data/countries/en.png and /dev/null differ
diff --git a/data/countries/fi.png b/data/countries/fi.png
deleted file mode 100644
index 7d142db85..000000000
Binary files a/data/countries/fi.png and /dev/null differ
diff --git a/data/countries/fr.png b/data/countries/fr.png
deleted file mode 100644
index b7fd82c34..000000000
Binary files a/data/countries/fr.png and /dev/null differ
diff --git a/data/countries/gb.png b/data/countries/gb.png
deleted file mode 100644
index 99923eab7..000000000
Binary files a/data/countries/gb.png and /dev/null differ
diff --git a/data/countries/gr.png b/data/countries/gr.png
deleted file mode 100644
index 116737484..000000000
Binary files a/data/countries/gr.png and /dev/null differ
diff --git a/data/countries/hu.png b/data/countries/hu.png
deleted file mode 100644
index 003daf31e..000000000
Binary files a/data/countries/hu.png and /dev/null differ
diff --git a/data/countries/is.png b/data/countries/is.png
deleted file mode 100644
index 91720b2ee..000000000
Binary files a/data/countries/is.png and /dev/null differ
diff --git a/data/countries/it.png b/data/countries/it.png
deleted file mode 100644
index 085642e34..000000000
Binary files a/data/countries/it.png and /dev/null differ
diff --git a/data/countries/lt.png b/data/countries/lt.png
deleted file mode 100644
index 492938072..000000000
Binary files a/data/countries/lt.png and /dev/null differ
diff --git a/data/countries/lv.png b/data/countries/lv.png
deleted file mode 100644
index 7fed984cc..000000000
Binary files a/data/countries/lv.png and /dev/null differ
diff --git a/data/countries/missing.png b/data/countries/missing.png
deleted file mode 100644
index 8b492f874..000000000
Binary files a/data/countries/missing.png and /dev/null differ
diff --git a/data/countries/nl.png b/data/countries/nl.png
deleted file mode 100644
index 04e9e9342..000000000
Binary files a/data/countries/nl.png and /dev/null differ
diff --git a/data/countries/no.png b/data/countries/no.png
deleted file mode 100644
index 1ff41d25b..000000000
Binary files a/data/countries/no.png and /dev/null differ
diff --git a/data/countries/pl.png b/data/countries/pl.png
deleted file mode 100644
index 73ccd755c..000000000
Binary files a/data/countries/pl.png and /dev/null differ
diff --git a/data/countries/ro.png b/data/countries/ro.png
deleted file mode 100644
index 4081c2248..000000000
Binary files a/data/countries/ro.png and /dev/null differ
diff --git a/data/countries/ru.png b/data/countries/ru.png
deleted file mode 100644
index c45143aa2..000000000
Binary files a/data/countries/ru.png and /dev/null differ
diff --git a/data/countries/se.png b/data/countries/se.png
deleted file mode 100644
index abb21b75a..000000000
Binary files a/data/countries/se.png and /dev/null differ
diff --git a/data/countries/sk.png b/data/countries/sk.png
deleted file mode 100644
index 305c02c6f..000000000
Binary files a/data/countries/sk.png and /dev/null differ
diff --git a/data/countries/th.png b/data/countries/th.png
deleted file mode 100644
index 91b84ef6e..000000000
Binary files a/data/countries/th.png and /dev/null differ
diff --git a/data/countries/tr.png b/data/countries/tr.png
deleted file mode 100644
index cfc245640..000000000
Binary files a/data/countries/tr.png and /dev/null differ
diff --git a/data/countries/ua.png b/data/countries/ua.png
deleted file mode 100644
index fa1926a2d..000000000
Binary files a/data/countries/ua.png and /dev/null differ
diff --git a/data/countries/x-fy.png b/data/countries/x-fy.png
deleted file mode 100644
index 8b3f0a30d..000000000
Binary files a/data/countries/x-fy.png and /dev/null differ
diff --git a/data/countries/yu.png b/data/countries/yu.png
deleted file mode 100644
index f51535d6e..000000000
Binary files a/data/countries/yu.png and /dev/null differ
diff --git a/data/defaults/Dream/Makefile.am b/data/defaults/Dream/Makefile.am
deleted file mode 100644
index ee66c93a8..000000000
--- a/data/defaults/Dream/Makefile.am
+++ /dev/null
@@ -1,20 +0,0 @@
-SUBDIRS = hdbouquets sdbouquets
-
-installdir = $(pkgdatadir)/defaults/Dream
-
-dist_install_DATA = \
- bouquets.tv \
- dm800se.info \
- dm500hd.info \
- dm7020hd.info \
- dm7025.info \
- dm8000.info \
- dm800.info \
- settings.800se \
- settings.500hd \
- settings.7020hd \
- settings.7025 \
- settings.800 \
- settings.8000 \
- settings.c \
- settings.t
diff --git a/data/defaults/Dream/bouquets.tv b/data/defaults/Dream/bouquets.tv
deleted file mode 100644
index fdce7554f..000000000
--- a/data/defaults/Dream/bouquets.tv
+++ /dev/null
@@ -1,2 +0,0 @@
-#NAME Bouquets (TV)
-#SERVICE: 1:7:1:0:0:0:0:0:0:0:userbouquet.favourites.tv
diff --git a/data/defaults/Dream/dm500hd.info b/data/defaults/Dream/dm500hd.info
deleted file mode 100644
index 29d14b6ae..000000000
--- a/data/defaults/Dream/dm500hd.info
+++ /dev/null
@@ -1,46 +0,0 @@
-
-
-
-
-
-
-
- Dream Multimedia GmbH
- Dream Multimedia Default
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/data/defaults/Dream/dm7020hd.info b/data/defaults/Dream/dm7020hd.info
deleted file mode 100644
index e0a1fbb58..000000000
--- a/data/defaults/Dream/dm7020hd.info
+++ /dev/null
@@ -1,46 +0,0 @@
-
-
-
-
-
-
-
- Dream Multimedia GmbH
- Dream Multimedia Default
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/data/defaults/Dream/dm7025.info b/data/defaults/Dream/dm7025.info
deleted file mode 100644
index 0211199bd..000000000
--- a/data/defaults/Dream/dm7025.info
+++ /dev/null
@@ -1,46 +0,0 @@
-
-
-
-
-
-
-
- Dream Multimedia GmbH
- Dream Multimedia Default
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/data/defaults/Dream/dm800.info b/data/defaults/Dream/dm800.info
deleted file mode 100644
index 39b0cb024..000000000
--- a/data/defaults/Dream/dm800.info
+++ /dev/null
@@ -1,46 +0,0 @@
-
-
-
-
-
-
-
- Dream Multimedia GmbH
- Dream Multimedia Default
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/data/defaults/Dream/dm8000.info b/data/defaults/Dream/dm8000.info
deleted file mode 100644
index f05222609..000000000
--- a/data/defaults/Dream/dm8000.info
+++ /dev/null
@@ -1,46 +0,0 @@
-
-
-
-
-
-
-
- Dream Multimedia GmbH
- Dream Multimedia Default
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/data/defaults/Dream/dm800se.info b/data/defaults/Dream/dm800se.info
deleted file mode 100644
index 1685ede22..000000000
--- a/data/defaults/Dream/dm800se.info
+++ /dev/null
@@ -1,46 +0,0 @@
-
-
-
-
-
-
-
- Dream Multimedia GmbH
- Dream Multimedia Default
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/data/defaults/Dream/hdbouquets/Makefile.am b/data/defaults/Dream/hdbouquets/Makefile.am
deleted file mode 100644
index 843a07d67..000000000
--- a/data/defaults/Dream/hdbouquets/Makefile.am
+++ /dev/null
@@ -1,4 +0,0 @@
-installdir = $(pkgdatadir)/defaults/Dream/hdbouquets
-
-dist_install_DATA = \
- userbouquet.favourites.tv
diff --git a/data/defaults/Dream/hdbouquets/userbouquet.favourites.tv b/data/defaults/Dream/hdbouquets/userbouquet.favourites.tv
deleted file mode 100644
index b6bc62fc1..000000000
--- a/data/defaults/Dream/hdbouquets/userbouquet.favourites.tv
+++ /dev/null
@@ -1,130 +0,0 @@
-#NAME Favourites (TV)
-#SERVICE 1:0:19:2B5C:3F3:1:C00000:0:0:0:
-#SERVICE 1:0:19:2B66:3F3:1:C00000:0:0:0:
-#SERVICE 1:0:1:6DCC:44D:1:C00000:0:0:0:
-#SERVICE 1:0:1:2EE3:441:1:C00000:0:0:0:
-#SERVICE 1:0:1:445C:453:1:C00000:0:0:0:
-#SERVICE 1:0:1:2EF4:441:1:C00000:0:0:0:
-#SERVICE 1:0:1:445D:453:1:C00000:0:0:0:
-#SERVICE 1:0:1:445E:453:1:C00000:0:0:0:
-#SERVICE 1:0:1:33:21:85:C00000:0:0:0:
-#SERVICE 1:0:1:701:5:85:C00000:0:0:0:
-#SERVICE 1:0:1:2F1C:441:1:C00000:0:0:0:
-#SERVICE 1:0:1:6D6E:437:1:C00000:0:0:0:
-#SERVICE 1:0:1:308:5:85:C00000:0:0:0:
-#SERVICE 1:0:1:2FC:5:85:C00000:0:0:0:
-#SERVICE 1:0:1:F98:454:1:C00000:0:0:0:
-#SERVICE 1:0:19:2B70:3F3:1:C00000:0:0:0:
-#SERVICE 1:0:1:6D67:437:1:C00000:0:0:0:
-#SERVICE 1:0:1:7031:41B:1:C00000:0:0:0:
-#SERVICE 1:0:1:7032:41B:1:C00000:0:0:0:
-#SERVICE 1:0:1:7033:41B:1:C00000:0:0:0:
-#SERVICE 1:0:1:6E46:431:1:C00000:0:0:0:
-#SERVICE 1:0:1:6DCE:44D:1:C00000:0:0:0:
-#SERVICE 1:0:1:6DD1:44D:1:C00000:0:0:0:
-#SERVICE 1:0:1:6DCF:44D:1:C00000:0:0:0:
-#SERVICE 1:0:1:6E42:431:1:C00000:0:0:0:
-#SERVICE 1:64:B:0:0:0:0:0:0:0::Doku/Wissen/Themen
-#DESCRIPTION Doku/Wissen/Themen
-#SERVICE 1:0:1:6F47:445:1:C00000:0:0:0:
-#SERVICE 1:0:1:6D6B:437:1:C00000:0:0:0:
-#SERVICE 1:0:1:2775:444:1:C00000:0:0:0:
-#SERVICE 1:0:1:293:5:85:C00000:0:0:0:
-#SERVICE 1:0:1:6D70:437:1:C00000:0:0:0:
-#SERVICE 1:0:1:49:5:85:C00000:0:0:0:
-#SERVICE 1:0:1:332D:45B:1:C00000:0:0:0:
-#SERVICE 1:0:1:3139:459:1:C00000:0:0:0:
-#SERVICE 1:0:1:2F5A:454:1:C00000:0:0:0:
-#SERVICE 1:64:A:0:0:0:0:0:0:0::Sport
-#DESCRIPTION Sport
-#SERVICE 1:0:1:384:21:85:C00000:0:0:0:
-#SERVICE 1:0:1:79E0:443:1:C00000:0:0:0:
-#SERVICE 1:64:1:0:0:0:0:0:0:0::Kinder
-#DESCRIPTION Kinder
-#SERVICE 1:0:1:2F08:441:1:C00000:0:0:0:
-#SERVICE 1:0:1:6D68:437:1:C00000:0:0:0:
-#SERVICE 1:0:1:7008:436:1:C00000:0:0:0:
-#SERVICE 1:0:1:6FE0:443:1:C00000:0:0:0:
-#SERVICE 1:64:2:0:0:0:0:0:0:0::Nachrichten
-#DESCRIPTION Nachrichten
-#SERVICE 1:0:1:2F3A:441:1:C00000:0:0:0:
-#SERVICE 1:0:1:445F:453:1:C00000:0:0:0:
-#SERVICE 1:0:1:79F4:443:1:C00000:0:0:0:
-#SERVICE 1:0:1:2753:402:1:C00000:0:0:0:
-#SERVICE 1:0:1:7035:41B:1:C00000:0:0:0:
-#SERVICE 1:64:3:0:0:0:0:0:0:0::Regional
-#DESCRIPTION Regional
-#SERVICE 1:0:1:3146:459:1:C00000:0:0:0:
-#SERVICE 1:0:1:300:7:85:C00000:0:0:0:
-#SERVICE 1:0:1:2778:444:1:C00000:0:0:0:
-#SERVICE 1:0:1:277A:444:1:C00000:0:0:0:
-#SERVICE 1:0:1:2779:444:1:C00000:0:0:0:
-#SERVICE 1:0:1:2777:444:1:C00000:0:0:0:
-#SERVICE 1:0:1:32D6:45D:1:C00000:0:0:0:
-#SERVICE 1:0:1:277D:444:1:C00000:0:0:0:
-#SERVICE 1:64:4:0:0:0:0:0:0:0::Musik
-#DESCRIPTION Musik
-#SERVICE 1:0:1:2774:444:1:C00000:0:0:0:
-#SERVICE 1:0:1:7004:436:1:C00000:0:0:0:
-#SERVICE 1:0:1:7001:436:1:C00000:0:0:0:
-#SERVICE 1:0:1:6FE1:443:1:C00000:0:0:0:
-#SERVICE 1:0:1:2FD:7:85:C00000:0:0:0:
-#SERVICE 1:0:1:32D5:45D:1:C00000:0:0:0:
-#SERVICE 1:0:1:332E:45B:1:C00000:0:0:0:
-#SERVICE 1:0:1:304:5:85:C00000:0:0:0:
-#SERVICE 1:0:1:702:5:85:C00000:0:0:0:
-#SERVICE 1:64:5:0:0:0:0:0:0:0::Reisen
-#DESCRIPTION Reisen
-#SERVICE 1:0:1:20:21:85:C00000:0:0:0:
-#SERVICE 1:64:9:0:0:0:0:0:0:0::Beratung
-#DESCRIPTION Beratung
-#SERVICE 1:0:1:295:21:85:C00000:0:0:0:
-#SERVICE 1:64:6:0:0:0:0:0:0:0::Einkaufen
-#DESCRIPTION Einkaufen
-#SERVICE 1:0:1:301:7:85:C00000:0:0:0:
-#SERVICE 1:0:1:28:21:85:C00000:0:0:0:
-#SERVICE 1:0:1:79EA:443:1:C00000:0:0:0:
-#SERVICE 1:0:1:2F44:454:1:C00000:0:0:0:
-#SERVICE 1:0:1:3148:459:1:C00000:0:0:0:
-#SERVICE 1:0:1:36:7:85:C00000:0:0:0:
-#SERVICE 1:0:1:307:7:85:C00000:0:0:0:
-#SERVICE 1:0:1:296:5:85:C00000:0:0:0:
-#SERVICE 1:0:1:383:21:85:C00000:0:0:0:
-#SERVICE 1:0:1:313C:459:1:C00000:0:0:0:
-#SERVICE 1:0:1:3159:459:1:C00000:0:0:0:
-#SERVICE 1:0:1:2E:21:85:C00000:0:0:0:
-#SERVICE 1:0:1:381:21:85:C00000:0:0:0:
-#SERVICE 1:64:7:0:0:0:0:0:0:0::High Definition
-#DESCRIPTION High Definition
-#SERVICE 1:0:19:6EEC:4B1:1:C00000:0:0:0:
-#SERVICE 1:0:19:EF12:421:1:C00000:0:0:0:
-#SERVICE 1:0:19:EF13:421:1:C00000:0:0:0:
-#SERVICE 1:64:0:0:0:0:0:0:0:0::Alternativen
-#DESCRIPTION Alternativen
-#SERVICE 1:0:1:6DCB:44D:1:C00000:0:0:0:
-#SERVICE 1:0:1:6E44:431:1:C00000:0:0:0:
-#SERVICE 1:0:1:6E45:431:1:C00000:0:0:0:
-#SERVICE 1:0:1:6E41:431:1:C00000:0:0:0:
-#SERVICE 1:0:1:6E40:431:1:C00000:0:0:0:
-#SERVICE 1:0:1:6E43:431:1:C00000:0:0:0:
-#SERVICE 1:0:1:6EE1:4B1:1:C00000:0:0:0:
-#SERVICE 1:0:1:6E2D:431:1:C00000:0:0:0:
-#SERVICE 1:0:1:6E2E:431:1:C00000:0:0:0:
-#SERVICE 1:0:1:6F46:445:1:C00000:0:0:0:
-#SERVICE 1:0:1:6E47:431:1:C00000:0:0:0:
-#SERVICE 1:0:1:6F76:457:1:C00000:0:0:0:
-#SERVICE 1:0:1:6E92:4B1:1:C00000:0:0:0:
-#SERVICE 1:0:1:6E93:4B1:1:C00000:0:0:0:
-#SERVICE 1:0:1:6F78:457:1:C00000:0:0:0:
-#SERVICE 1:0:1:6F79:457:1:C00000:0:0:0:
-#SERVICE 1:0:1:6E94:4B1:1:C00000:0:0:0:
-#SERVICE 1:0:1:6F77:457:1:C00000:0:0:0:
-#SERVICE 1:0:1:6EEB:4B1:1:C00000:0:0:0:
-#SERVICE 1:0:1:6E97:4B1:1:C00000:0:0:0:
-#SERVICE 1:0:1:6E96:4B1:1:C00000:0:0:0:
-#SERVICE 1:0:1:6E95:4B1:1:C00000:0:0:0:
-#SERVICE 1:64:8:0:0:0:0:0:0:0::Alternative SD services
-#DESCRIPTION Alternative SD services
-#SERVICE 1:0:1:6DCA:44D:1:C00000:0:0:0:
-#SERVICE 1:0:1:6D66:437:1:C00000:0:0:0:
-#SERVICE 1:0:1:7034:41B:1:C00000:0:0:0:
diff --git a/data/defaults/Dream/sdbouquets/Makefile.am b/data/defaults/Dream/sdbouquets/Makefile.am
deleted file mode 100644
index 50328e559..000000000
--- a/data/defaults/Dream/sdbouquets/Makefile.am
+++ /dev/null
@@ -1,4 +0,0 @@
-installdir = $(pkgdatadir)/defaults/Dream/sdbouquets
-
-dist_install_DATA = \
- userbouquet.favourites.tv
diff --git a/data/defaults/Dream/sdbouquets/userbouquet.favourites.tv b/data/defaults/Dream/sdbouquets/userbouquet.favourites.tv
deleted file mode 100644
index 1cea36695..000000000
--- a/data/defaults/Dream/sdbouquets/userbouquet.favourites.tv
+++ /dev/null
@@ -1,128 +0,0 @@
-#NAME Favourites (TV)
-#SERVICE 1:0:1:6DCA:44D:1:C00000:0:0:0:
-#SERVICE 1:0:1:6D66:437:1:C00000:0:0:0:
-#SERVICE 1:0:1:6DCC:44D:1:C00000:0:0:0:
-#SERVICE 1:0:1:2EE3:441:1:C00000:0:0:0:
-#SERVICE 1:0:1:445C:453:1:C00000:0:0:0:
-#SERVICE 1:0:1:2EF4:441:1:C00000:0:0:0:
-#SERVICE 1:0:1:445D:453:1:C00000:0:0:0:
-#SERVICE 1:0:1:445E:453:1:C00000:0:0:0:
-#SERVICE 1:0:1:33:21:85:C00000:0:0:0:
-#SERVICE 1:0:1:701:5:85:C00000:0:0:0:
-#SERVICE 1:0:1:2F1C:441:1:C00000:0:0:0:
-#SERVICE 1:0:1:6D6E:437:1:C00000:0:0:0:
-#SERVICE 1:0:1:308:5:85:C00000:0:0:0:
-#SERVICE 1:0:1:2FC:5:85:C00000:0:0:0:
-#SERVICE 1:0:1:F98:454:1:C00000:0:0:0:
-#SERVICE 1:0:1:7034:41B:1:C00000:0:0:0:
-#SERVICE 1:0:1:6D67:437:1:C00000:0:0:0:
-#SERVICE 1:0:1:7031:41B:1:C00000:0:0:0:
-#SERVICE 1:0:1:7032:41B:1:C00000:0:0:0:
-#SERVICE 1:0:1:7033:41B:1:C00000:0:0:0:
-#SERVICE 1:0:1:6E46:431:1:C00000:0:0:0:
-#SERVICE 1:0:1:6DCE:44D:1:C00000:0:0:0:
-#SERVICE 1:0:1:6DD1:44D:1:C00000:0:0:0:
-#SERVICE 1:0:1:6DCF:44D:1:C00000:0:0:0:
-#SERVICE 1:0:1:6E42:431:1:C00000:0:0:0:
-#SERVICE 1:64:B:0:0:0:0:0:0:0::Doku/Wissen/Themen
-#DESCRIPTION Doku/Wissen/Themen
-#SERVICE 1:0:1:6F47:445:1:C00000:0:0:0:
-#SERVICE 1:0:1:6D6B:437:1:C00000:0:0:0:
-#SERVICE 1:0:1:2775:444:1:C00000:0:0:0:
-#SERVICE 1:0:1:293:5:85:C00000:0:0:0:
-#SERVICE 1:0:1:6D70:437:1:C00000:0:0:0:
-#SERVICE 1:0:1:49:5:85:C00000:0:0:0:
-#SERVICE 1:0:1:332D:45B:1:C00000:0:0:0:
-#SERVICE 1:0:1:3139:459:1:C00000:0:0:0:
-#SERVICE 1:0:1:2F5A:454:1:C00000:0:0:0:
-#SERVICE 1:64:A:0:0:0:0:0:0:0::Sport
-#DESCRIPTION Sport
-#SERVICE 1:0:1:384:21:85:C00000:0:0:0:
-#SERVICE 1:0:1:79E0:443:1:C00000:0:0:0:
-#SERVICE 1:64:1:0:0:0:0:0:0:0::Kinder
-#DESCRIPTION Kinder
-#SERVICE 1:0:1:2F08:441:1:C00000:0:0:0:
-#SERVICE 1:0:1:6D68:437:1:C00000:0:0:0:
-#SERVICE 1:0:1:7008:436:1:C00000:0:0:0:
-#SERVICE 1:0:1:6FE0:443:1:C00000:0:0:0:
-#SERVICE 1:64:2:0:0:0:0:0:0:0::Nachrichten
-#DESCRIPTION Nachrichten
-#SERVICE 1:0:1:2F3A:441:1:C00000:0:0:0:
-#SERVICE 1:0:1:445F:453:1:C00000:0:0:0:
-#SERVICE 1:0:1:79F4:443:1:C00000:0:0:0:
-#SERVICE 1:0:1:2753:402:1:C00000:0:0:0:
-#SERVICE 1:0:1:7035:41B:1:C00000:0:0:0:
-#SERVICE 1:64:3:0:0:0:0:0:0:0::Regional
-#DESCRIPTION Regional
-#SERVICE 1:0:1:3146:459:1:C00000:0:0:0:
-#SERVICE 1:0:1:300:7:85:C00000:0:0:0:
-#SERVICE 1:0:1:2778:444:1:C00000:0:0:0:
-#SERVICE 1:0:1:277A:444:1:C00000:0:0:0:
-#SERVICE 1:0:1:2779:444:1:C00000:0:0:0:
-#SERVICE 1:0:1:2777:444:1:C00000:0:0:0:
-#SERVICE 1:0:1:32D6:45D:1:C00000:0:0:0:
-#SERVICE 1:0:1:277D:444:1:C00000:0:0:0:
-#SERVICE 1:64:4:0:0:0:0:0:0:0::Musik
-#DESCRIPTION Musik
-#SERVICE 1:0:1:2774:444:1:C00000:0:0:0:
-#SERVICE 1:0:1:7004:436:1:C00000:0:0:0:
-#SERVICE 1:0:1:7001:436:1:C00000:0:0:0:
-#SERVICE 1:0:1:6FE1:443:1:C00000:0:0:0:
-#SERVICE 1:0:1:2FD:7:85:C00000:0:0:0:
-#SERVICE 1:0:1:32D5:45D:1:C00000:0:0:0:
-#SERVICE 1:0:1:332E:45B:1:C00000:0:0:0:
-#SERVICE 1:0:1:304:5:85:C00000:0:0:0:
-#SERVICE 1:0:1:702:5:85:C00000:0:0:0:
-#SERVICE 1:64:5:0:0:0:0:0:0:0::Reisen
-#DESCRIPTION Reisen
-#SERVICE 1:0:1:20:21:85:C00000:0:0:0:
-#SERVICE 1:64:9:0:0:0:0:0:0:0::Beratung
-#DESCRIPTION Beratung
-#SERVICE 1:0:1:295:21:85:C00000:0:0:0:
-#SERVICE 1:64:6:0:0:0:0:0:0:0::Einkaufen
-#DESCRIPTION Einkaufen
-#SERVICE 1:0:1:301:7:85:C00000:0:0:0:
-#SERVICE 1:0:1:28:21:85:C00000:0:0:0:
-#SERVICE 1:0:1:79EA:443:1:C00000:0:0:0:
-#SERVICE 1:0:1:2F44:454:1:C00000:0:0:0:
-#SERVICE 1:0:1:3148:459:1:C00000:0:0:0:
-#SERVICE 1:0:1:36:7:85:C00000:0:0:0:
-#SERVICE 1:0:1:307:7:85:C00000:0:0:0:
-#SERVICE 1:0:1:296:5:85:C00000:0:0:0:
-#SERVICE 1:0:1:383:21:85:C00000:0:0:0:
-#SERVICE 1:0:1:313C:459:1:C00000:0:0:0:
-#SERVICE 1:0:1:3159:459:1:C00000:0:0:0:
-#SERVICE 1:0:1:2E:21:85:C00000:0:0:0:
-#SERVICE 1:0:1:381:21:85:C00000:0:0:0:
-#SERVICE 1:64:7:0:0:0:0:0:0:0::High Definition
-#DESCRIPTION High Definition
-#SERVICE 1:0:19:2B5C:3F3:1:C00000:0:0:0:
-#SERVICE 1:0:19:2B66:3F3:1:C00000:0:0:0:
-#SERVICE 1:0:19:2B70:3F3:1:C00000:0:0:0:
-#SERVICE 1:0:19:6EEC:4B1:1:C00000:0:0:0:
-#SERVICE 1:0:19:EF12:421:1:C00000:0:0:0:
-#SERVICE 1:0:19:EF13:421:1:C00000:0:0:0:
-#SERVICE 1:64:0:0:0:0:0:0:0:0::Alternativen
-#DESCRIPTION Alternativen
-#SERVICE 1:0:1:6DCB:44D:1:C00000:0:0:0:
-#SERVICE 1:0:1:6E44:431:1:C00000:0:0:0:
-#SERVICE 1:0:1:6E45:431:1:C00000:0:0:0:
-#SERVICE 1:0:1:6E41:431:1:C00000:0:0:0:
-#SERVICE 1:0:1:6E40:431:1:C00000:0:0:0:
-#SERVICE 1:0:1:6E43:431:1:C00000:0:0:0:
-#SERVICE 1:0:1:6EE1:4B1:1:C00000:0:0:0:
-#SERVICE 1:0:1:6E2D:431:1:C00000:0:0:0:
-#SERVICE 1:0:1:6E2E:431:1:C00000:0:0:0:
-#SERVICE 1:0:1:6F46:445:1:C00000:0:0:0:
-#SERVICE 1:0:1:6E47:431:1:C00000:0:0:0:
-#SERVICE 1:0:1:6F76:457:1:C00000:0:0:0:
-#SERVICE 1:0:1:6E92:4B1:1:C00000:0:0:0:
-#SERVICE 1:0:1:6E93:4B1:1:C00000:0:0:0:
-#SERVICE 1:0:1:6F78:457:1:C00000:0:0:0:
-#SERVICE 1:0:1:6F79:457:1:C00000:0:0:0:
-#SERVICE 1:0:1:6E94:4B1:1:C00000:0:0:0:
-#SERVICE 1:0:1:6F77:457:1:C00000:0:0:0:
-#SERVICE 1:0:1:6EEB:4B1:1:C00000:0:0:0:
-#SERVICE 1:0:1:6E97:4B1:1:C00000:0:0:0:
-#SERVICE 1:0:1:6E96:4B1:1:C00000:0:0:0:
-#SERVICE 1:0:1:6E95:4B1:1:C00000:0:0:0:
diff --git a/data/defaults/Dream/settings.500hd b/data/defaults/Dream/settings.500hd
deleted file mode 100644
index ae2963bbb..000000000
--- a/data/defaults/Dream/settings.500hd
+++ /dev/null
@@ -1 +0,0 @@
-config.misc.rcused=1
\ No newline at end of file
diff --git a/data/defaults/Dream/settings.7020hd b/data/defaults/Dream/settings.7020hd
deleted file mode 100644
index ae2963bbb..000000000
--- a/data/defaults/Dream/settings.7020hd
+++ /dev/null
@@ -1 +0,0 @@
-config.misc.rcused=1
\ No newline at end of file
diff --git a/data/defaults/Dream/settings.7025 b/data/defaults/Dream/settings.7025
deleted file mode 100644
index ae2963bbb..000000000
--- a/data/defaults/Dream/settings.7025
+++ /dev/null
@@ -1 +0,0 @@
-config.misc.rcused=1
\ No newline at end of file
diff --git a/data/defaults/Dream/settings.800 b/data/defaults/Dream/settings.800
deleted file mode 100644
index ae2963bbb..000000000
--- a/data/defaults/Dream/settings.800
+++ /dev/null
@@ -1 +0,0 @@
-config.misc.rcused=1
\ No newline at end of file
diff --git a/data/defaults/Dream/settings.8000 b/data/defaults/Dream/settings.8000
deleted file mode 100644
index 1fe4a4cd2..000000000
--- a/data/defaults/Dream/settings.8000
+++ /dev/null
@@ -1 +0,0 @@
-config.misc.rcused=0
\ No newline at end of file
diff --git a/data/defaults/Dream/settings.800se b/data/defaults/Dream/settings.800se
deleted file mode 100644
index ae2963bbb..000000000
--- a/data/defaults/Dream/settings.800se
+++ /dev/null
@@ -1 +0,0 @@
-config.misc.rcused=1
\ No newline at end of file
diff --git a/data/defaults/Dream/settings.c b/data/defaults/Dream/settings.c
deleted file mode 100644
index 72ab93823..000000000
--- a/data/defaults/Dream/settings.c
+++ /dev/null
@@ -1 +0,0 @@
-config.tv.lastroot=1:7:1:0:0:0:0:0:0:0:(type == 1) || (type == 17) || (type == 22) || (type == 25) || (type == 134) || (type == 195) ORDER BY name;
diff --git a/data/defaults/Dream/settings.t b/data/defaults/Dream/settings.t
deleted file mode 100644
index 72ab93823..000000000
--- a/data/defaults/Dream/settings.t
+++ /dev/null
@@ -1 +0,0 @@
-config.tv.lastroot=1:7:1:0:0:0:0:0:0:0:(type == 1) || (type == 17) || (type == 22) || (type == 25) || (type == 134) || (type == 195) ORDER BY name;
diff --git a/data/defaults/Makefile.am b/data/defaults/Makefile.am
deleted file mode 100644
index a02b0153e..000000000
--- a/data/defaults/Makefile.am
+++ /dev/null
@@ -1 +0,0 @@
-SUBDIRS = Dream
diff --git a/data/defaultsatlists.xml b/data/defaultsatlists.xml
deleted file mode 100644
index ff0ae8b7c..000000000
--- a/data/defaultsatlists.xml
+++ /dev/null
@@ -1,62 +0,0 @@
-
-
-
-packagelist = self.fillPackagesList()
-self.runWizard = (len(packagelist) > 0)
-self.condition = self.runWizard
-
-
-
-
-
-self.disableKeys = True
-
-
-
-
-
-
-
-
-
-
-
-if self.runWizard:
- self.condition = True
- for x in self.packagesConfig:
- if x.value:
- self.condition = False
- break
-else:
- self.condition = False
-
-
-
-
-self.disableKeys = False
-
-
-
-
-
-self.condition = False
-if self.runWizard:
- for x in self.packagesConfig:
- if x.value:
- self.condition = True
- break
-
-
-self.disableKeys = True
-self.installPackages(self.indexList)
-
-
-
-
-
-
-self.markDone()
-self.condition = False
-
-
-
diff --git a/data/defaultwizard.xml b/data/defaultwizard.xml
deleted file mode 100644
index 92231ff70..000000000
--- a/data/defaultwizard.xml
+++ /dev/null
@@ -1,63 +0,0 @@
-
-
-
-packagelist = self.fillPackagesList()
-self.runWizard = (len(packagelist) > 0)
-self.condition = self.runWizard
-
-
-
-
-
-self.disableKeys = True
-
-
-
-
-self.condition = self.runWizard or not self.silent
-
-
-
-
-
-
-if self.runWizard:
- self.condition = True
- for x in self.packagesConfig:
- if x.value:
- self.condition = False
- break
-else:
- self.condition = False
-
-
-
-
-self.disableKeys = False
-
-
-self.markDone()
-
-
-
-
-
-self.condition = False
-if self.runWizard:
- for x in self.packagesConfig:
- if x.value:
- self.condition = True
- break
-
-
-self.disableKeys = True
-self.installPackages(self.indexList)
-
-
-#print "len of packageslist", len(self.packageslist)
-#if (len(self.packageslist) == 1):
- #self.installPackage(0)
-
-
-
-
diff --git a/data/display128/Makefile.am b/data/display128/Makefile.am
new file mode 100644
index 000000000..88e42ddd1
--- /dev/null
+++ b/data/display128/Makefile.am
@@ -0,0 +1,2 @@
+installdir = $(pkgdatadir)/display
+dist_install_DATA = *.xml
diff --git a/data/skin_display96.xml b/data/display128/skin_display.xml
similarity index 98%
rename from data/skin_display96.xml
rename to data/display128/skin_display.xml
index 5daa49a47..21644a783 100644
--- a/data/skin_display96.xml
+++ b/data/display128/skin_display.xml
@@ -31,12 +31,11 @@
-
Reference
- Name
+ NameOnly
Name
@@ -85,7 +84,7 @@
- Position
+ VFDPosition
diff --git a/data/display140/Makefile.am b/data/display140/Makefile.am
new file mode 100644
index 000000000..a990e38f4
--- /dev/null
+++ b/data/display140/Makefile.am
@@ -0,0 +1,5 @@
+installdir = $(pkgdatadir)/display/skin_default
+dist_install_DATA = update.png txt.png tuner-d.png tuner-d-act.png tuner-c.png tuner-c-act.png tuner-b.png tuner-b-act.png tuner-a.png tuner-a-act.png stop.png slow.png rec.png play.png pause.png hd.png forward.png format.png dolby.png crypt.png backward.png
+
+datainstalldir = $(pkgdatadir)/display
+dist_datainstall_DATA = *.xml prev.png piconprev.png
diff --git a/data/display140/backward.png b/data/display140/backward.png
new file mode 100644
index 000000000..5a25bb63f
Binary files /dev/null and b/data/display140/backward.png differ
diff --git a/data/display140/crypt.png b/data/display140/crypt.png
new file mode 100644
index 000000000..1be23f623
Binary files /dev/null and b/data/display140/crypt.png differ
diff --git a/data/display140/dolby.png b/data/display140/dolby.png
new file mode 100644
index 000000000..f971cf0dc
Binary files /dev/null and b/data/display140/dolby.png differ
diff --git a/data/display140/format.png b/data/display140/format.png
new file mode 100644
index 000000000..46eef1642
Binary files /dev/null and b/data/display140/format.png differ
diff --git a/data/display140/forward.png b/data/display140/forward.png
new file mode 100644
index 000000000..b6db1524f
Binary files /dev/null and b/data/display140/forward.png differ
diff --git a/data/display140/hd.png b/data/display140/hd.png
new file mode 100644
index 000000000..3ac912f2c
Binary files /dev/null and b/data/display140/hd.png differ
diff --git a/data/display140/pause.png b/data/display140/pause.png
new file mode 100644
index 000000000..dd4bbd530
Binary files /dev/null and b/data/display140/pause.png differ
diff --git a/data/display140/piconprev.png b/data/display140/piconprev.png
new file mode 100644
index 000000000..9f688beed
Binary files /dev/null and b/data/display140/piconprev.png differ
diff --git a/data/display140/play.png b/data/display140/play.png
new file mode 100644
index 000000000..b3093f3cb
Binary files /dev/null and b/data/display140/play.png differ
diff --git a/data/display140/prev.png b/data/display140/prev.png
new file mode 100644
index 000000000..e7adb22d4
Binary files /dev/null and b/data/display140/prev.png differ
diff --git a/data/display140/rec.png b/data/display140/rec.png
new file mode 100644
index 000000000..f5129fd43
Binary files /dev/null and b/data/display140/rec.png differ
diff --git a/data/display140/skin_display.xml b/data/display140/skin_display.xml
new file mode 100644
index 000000000..ca3cce3d3
--- /dev/null
+++ b/data/display140/skin_display.xml
@@ -0,0 +1,428 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ VideoWidth
+ 721,1980
+
+
+
+ IsMultichannel
+
+
+
+ Blink
+
+
+ Blink
+
+
+ Blink
+
+
+
+
+ TunerUseMask
+ 1
+
+
+
+ TunerUseMask
+ 2
+
+
+
+ TunerUseMask
+ 4
+
+
+
+ TunerUseMask
+ 8
+
+
+
+ NUMBER
+ 0,0
+
+
+
+ NUMBER
+ 1,1
+
+
+
+ NUMBER
+ 2,2
+
+
+
+ NUMBER
+ 3,3
+
+
+
+
+
+
+ Name
+
+
+ Name
+
+
+ Progress
+
+
+ VFDRemaining
+ VFDNoSeconds
+
+
+
+
+
+
+ NameOnly
+
+
+ Progress
+
+
+ VFDRemaining
+ VFDNoSeconds
+
+
+
+
+
+
+
+
+
+
+ Name
+
+
+ VFDPosition
+
+
+ VFDPosition
+
+
+
+
+
+
+
+
+
+
+
+
+ RecordServiceName
+
+
+
+ Duration
+ AsLength
+
+
+ FileSize
+
+
+
+
+
+
+ Name
+
+
+ Name
+
+
+ Progress
+
+
+ VFDRemaining
+ VFDNoSeconds
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Format:%a %e %b %Y
+
+
+ Format:%H:%M
+
+
+ Blink
+
+
+ Blink
+
+
+ TunerUseMask
+ 1
+
+
+
+ TunerUseMask
+ 2
+
+
+
+ TunerUseMask
+ 4
+
+
+
+ TunerUseMask
+ 8
+
+
+
+ NUMBER
+ 0,0
+
+
+
+ NUMBER
+ 1,1
+
+
+
+ NUMBER
+ 2,2
+
+
+
+ NUMBER
+ 3,3
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Name
+
+
+ VFDPosition
+
+
+
+ VFDPosition
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data/display140/slow.png b/data/display140/slow.png
new file mode 100644
index 000000000..5df43a45a
Binary files /dev/null and b/data/display140/slow.png differ
diff --git a/data/display140/stop.png b/data/display140/stop.png
new file mode 100644
index 000000000..21c5d4088
Binary files /dev/null and b/data/display140/stop.png differ
diff --git a/data/display140/tuner-a-act.png b/data/display140/tuner-a-act.png
new file mode 100644
index 000000000..d8a2f990e
Binary files /dev/null and b/data/display140/tuner-a-act.png differ
diff --git a/data/display140/tuner-a.png b/data/display140/tuner-a.png
new file mode 100644
index 000000000..313077ab8
Binary files /dev/null and b/data/display140/tuner-a.png differ
diff --git a/data/display140/tuner-b-act.png b/data/display140/tuner-b-act.png
new file mode 100644
index 000000000..d9359ee80
Binary files /dev/null and b/data/display140/tuner-b-act.png differ
diff --git a/data/display140/tuner-b.png b/data/display140/tuner-b.png
new file mode 100644
index 000000000..339f5b4a2
Binary files /dev/null and b/data/display140/tuner-b.png differ
diff --git a/data/display140/tuner-c-act.png b/data/display140/tuner-c-act.png
new file mode 100644
index 000000000..5ab75be1b
Binary files /dev/null and b/data/display140/tuner-c-act.png differ
diff --git a/data/display140/tuner-c.png b/data/display140/tuner-c.png
new file mode 100644
index 000000000..2cb87abf7
Binary files /dev/null and b/data/display140/tuner-c.png differ
diff --git a/data/display140/tuner-d-act.png b/data/display140/tuner-d-act.png
new file mode 100644
index 000000000..95d5d6798
Binary files /dev/null and b/data/display140/tuner-d-act.png differ
diff --git a/data/display140/tuner-d.png b/data/display140/tuner-d.png
new file mode 100644
index 000000000..ce8bce719
Binary files /dev/null and b/data/display140/tuner-d.png differ
diff --git a/data/lcd/txt.png b/data/display140/txt.png
similarity index 100%
rename from data/lcd/txt.png
rename to data/display140/txt.png
diff --git a/data/display140/update.png b/data/display140/update.png
new file mode 100644
index 000000000..5686bf9e5
Binary files /dev/null and b/data/display140/update.png differ
diff --git a/data/display220/Makefile.am b/data/display220/Makefile.am
new file mode 100644
index 000000000..d5bdce323
--- /dev/null
+++ b/data/display220/Makefile.am
@@ -0,0 +1,5 @@
+installdir = $(pkgdatadir)/display/skin_default
+dist_install_DATA = *.png
+
+datainstalldir = $(pkgdatadir)/display
+dist_datainstall_DATA = *.xml
diff --git a/data/display220/backward.png b/data/display220/backward.png
new file mode 100644
index 000000000..0c307d0bf
Binary files /dev/null and b/data/display220/backward.png differ
diff --git a/data/lcd/crypt.png b/data/display220/crypt.png
similarity index 100%
rename from data/lcd/crypt.png
rename to data/display220/crypt.png
diff --git a/data/display220/dolby.png b/data/display220/dolby.png
new file mode 100644
index 000000000..f577392b1
Binary files /dev/null and b/data/display220/dolby.png differ
diff --git a/data/display220/format.png b/data/display220/format.png
new file mode 100644
index 000000000..ddf702985
Binary files /dev/null and b/data/display220/format.png differ
diff --git a/data/display220/forward.png b/data/display220/forward.png
new file mode 100644
index 000000000..ab493d99f
Binary files /dev/null and b/data/display220/forward.png differ
diff --git a/data/display220/hd.png b/data/display220/hd.png
new file mode 100644
index 000000000..e8098dc13
Binary files /dev/null and b/data/display220/hd.png differ
diff --git a/data/display220/pause.png b/data/display220/pause.png
new file mode 100644
index 000000000..5ba601e61
Binary files /dev/null and b/data/display220/pause.png differ
diff --git a/data/display220/play.png b/data/display220/play.png
new file mode 100644
index 000000000..a2ca76208
Binary files /dev/null and b/data/display220/play.png differ
diff --git a/data/display220/rec.png b/data/display220/rec.png
new file mode 100644
index 000000000..559b098be
Binary files /dev/null and b/data/display220/rec.png differ
diff --git a/data/display220/skin_display.xml b/data/display220/skin_display.xml
new file mode 100644
index 000000000..c9ac0ae82
--- /dev/null
+++ b/data/display220/skin_display.xml
@@ -0,0 +1,453 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ VideoWidth
+ 721,1980
+
+
+
+ IsMultichannel
+
+
+
+
+
+ TunerUseMask
+ 1
+
+
+
+ TunerUseMask
+ 2
+
+
+
+ TunerUseMask
+ 4
+
+
+
+ TunerUseMask
+ 8
+
+
+
+ NUMBER
+ 0,0
+
+
+
+ NUMBER
+ 1,1
+
+
+
+ NUMBER
+ 2,2
+
+
+
+ NUMBER
+ 3,3
+
+
+
+
+
+
+ Name
+
+
+ Name
+
+
+ Progress
+
+
+ VFDRemaining
+ VFDNoSeconds
+
+
+
+
+
+
+ NameOnly
+
+
+ Name
+
+
+ Progress
+
+
+ VFDRemaining
+ VFDNoSeconds
+
+
+
+
+
+
+
+
+
+
+
+ Name
+
+
+ VFDPosition
+
+
+ VFDPosition
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ RecordServiceName
+
+
+
+ Duration
+ AsLength
+
+
+ FileSize
+
+
+
+
+
+
+
+
+
+ Name
+
+
+ Name
+
+
+ Progress
+
+
+ VFDRemaining
+ VFDNoSeconds
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ FullDate
+
+
+ Format:%H:%M
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Name
+
+
+ VFDPosition
+
+
+
+ VFDPosition
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data/display220/skin_display_picon.xml b/data/display220/skin_display_picon.xml
new file mode 100644
index 000000000..0147d5142
--- /dev/null
+++ b/data/display220/skin_display_picon.xml
@@ -0,0 +1,411 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ VideoWidth
+ 721,1980
+
+
+
+ IsMultichannel
+
+
+
+
+
+ TunerUseMask
+ 1
+
+
+
+ TunerUseMask
+ 2
+
+
+
+ TunerUseMask
+ 4
+
+
+
+ TunerUseMask
+ 8
+
+
+
+ NUMBER
+ 0,0
+
+
+
+ NUMBER
+ 1,1
+
+
+
+ NUMBER
+ 2,2
+
+
+
+ NUMBER
+ 3,3
+
+
+
+
+
+
+ Reference
+
+
+
+
+
+
+ Reference
+
+
+
+
+
+
+
+
+
+ Name
+
+
+ VFDPosition
+
+
+ VFDPosition
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ RecordServiceName
+
+
+
+ Duration
+ AsLength
+
+
+ FileSize
+
+
+
+
+
+
+
+
+
+ Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ FullDate
+
+
+ Format:%H:%M
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Name
+
+
+ VFDPosition
+
+
+
+ VFDPosition
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data/display220/slow.png b/data/display220/slow.png
new file mode 100644
index 000000000..e6a81a9ad
Binary files /dev/null and b/data/display220/slow.png differ
diff --git a/data/display220/stop.png b/data/display220/stop.png
new file mode 100644
index 000000000..b7567fe3b
Binary files /dev/null and b/data/display220/stop.png differ
diff --git a/data/display220/tuner-a-act.png b/data/display220/tuner-a-act.png
new file mode 100644
index 000000000..79cf5515a
Binary files /dev/null and b/data/display220/tuner-a-act.png differ
diff --git a/data/display220/tuner-a.png b/data/display220/tuner-a.png
new file mode 100644
index 000000000..6639458a8
Binary files /dev/null and b/data/display220/tuner-a.png differ
diff --git a/data/display220/tuner-b-act.png b/data/display220/tuner-b-act.png
new file mode 100644
index 000000000..a8effd666
Binary files /dev/null and b/data/display220/tuner-b-act.png differ
diff --git a/data/display220/tuner-b.png b/data/display220/tuner-b.png
new file mode 100644
index 000000000..a7dcdd531
Binary files /dev/null and b/data/display220/tuner-b.png differ
diff --git a/data/display220/tuner-c-act.png b/data/display220/tuner-c-act.png
new file mode 100644
index 000000000..fd2e4735d
Binary files /dev/null and b/data/display220/tuner-c-act.png differ
diff --git a/data/display220/tuner-c.png b/data/display220/tuner-c.png
new file mode 100644
index 000000000..cec48eae5
Binary files /dev/null and b/data/display220/tuner-c.png differ
diff --git a/data/display220/tuner-d-act.png b/data/display220/tuner-d-act.png
new file mode 100644
index 000000000..a022923c3
Binary files /dev/null and b/data/display220/tuner-d-act.png differ
diff --git a/data/display220/tuner-d.png b/data/display220/tuner-d.png
new file mode 100644
index 000000000..441cea314
Binary files /dev/null and b/data/display220/tuner-d.png differ
diff --git a/data/display220/txt.png b/data/display220/txt.png
new file mode 100644
index 000000000..9df696c07
Binary files /dev/null and b/data/display220/txt.png differ
diff --git a/data/display220/update_stable.png b/data/display220/update_stable.png
new file mode 100644
index 000000000..f0b1024d1
Binary files /dev/null and b/data/display220/update_stable.png differ
diff --git a/data/display220/update_unstable.png b/data/display220/update_unstable.png
new file mode 100644
index 000000000..4b10a6699
Binary files /dev/null and b/data/display220/update_unstable.png differ
diff --git a/data/display255/Makefile.am b/data/display255/Makefile.am
new file mode 100644
index 000000000..a990e38f4
--- /dev/null
+++ b/data/display255/Makefile.am
@@ -0,0 +1,5 @@
+installdir = $(pkgdatadir)/display/skin_default
+dist_install_DATA = update.png txt.png tuner-d.png tuner-d-act.png tuner-c.png tuner-c-act.png tuner-b.png tuner-b-act.png tuner-a.png tuner-a-act.png stop.png slow.png rec.png play.png pause.png hd.png forward.png format.png dolby.png crypt.png backward.png
+
+datainstalldir = $(pkgdatadir)/display
+dist_datainstall_DATA = *.xml prev.png piconprev.png
diff --git a/data/lcd/backward.png b/data/display255/backward.png
similarity index 100%
rename from data/lcd/backward.png
rename to data/display255/backward.png
diff --git a/data/display255/crypt.png b/data/display255/crypt.png
new file mode 100644
index 000000000..e722ee29e
Binary files /dev/null and b/data/display255/crypt.png differ
diff --git a/data/lcd/dolby.png b/data/display255/dolby.png
similarity index 100%
rename from data/lcd/dolby.png
rename to data/display255/dolby.png
diff --git a/data/lcd/format.png b/data/display255/format.png
similarity index 100%
rename from data/lcd/format.png
rename to data/display255/format.png
diff --git a/data/lcd/forward.png b/data/display255/forward.png
similarity index 100%
rename from data/lcd/forward.png
rename to data/display255/forward.png
diff --git a/data/lcd/hd.png b/data/display255/hd.png
similarity index 100%
rename from data/lcd/hd.png
rename to data/display255/hd.png
diff --git a/data/lcd/pause.png b/data/display255/pause.png
similarity index 100%
rename from data/lcd/pause.png
rename to data/display255/pause.png
diff --git a/data/display255/piconprev.png b/data/display255/piconprev.png
new file mode 100644
index 000000000..9f688beed
Binary files /dev/null and b/data/display255/piconprev.png differ
diff --git a/data/lcd/play.png b/data/display255/play.png
similarity index 100%
rename from data/lcd/play.png
rename to data/display255/play.png
diff --git a/data/display255/prev.png b/data/display255/prev.png
new file mode 100644
index 000000000..e7adb22d4
Binary files /dev/null and b/data/display255/prev.png differ
diff --git a/data/lcd/rec.png b/data/display255/rec.png
similarity index 100%
rename from data/lcd/rec.png
rename to data/display255/rec.png
diff --git a/data/skin_display_no_picon.xml b/data/display255/skin_display.xml
similarity index 89%
rename from data/skin_display_no_picon.xml
rename to data/display255/skin_display.xml
index 289550254..b80a23a48 100644
--- a/data/skin_display_no_picon.xml
+++ b/data/display255/skin_display.xml
@@ -1,5 +1,4 @@
-
@@ -28,72 +27,72 @@
-
+
Blink
-
+
Blink
-
+
Blink
-
+
VideoWidth
721,1980
-
+
IsMultichannel
-
+
TunerUseMask
1
-
+
TunerUseMask
2
-
+
TunerUseMask
4
-
+
TunerUseMask
8
-
+
NUMBER
0,0
-
+
NUMBER
1,1
-
+
NUMBER
2,2
-
+
NUMBER
3,3
@@ -119,7 +118,7 @@
- Name
+ NameOnly
Name
@@ -138,7 +137,7 @@
-
+
Name
@@ -234,28 +233,28 @@
Format:%H:%M
-
+
Blink
-
+
Blink
-
+
TunerUseMask
1
-
+
TunerUseMask
2
-
+
TunerUseMask
4
-
+
TunerUseMask
8
@@ -333,11 +332,7 @@
-
-
-
-
-
+
@@ -350,6 +345,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data/skin_display_picon.xml b/data/display255/skin_display_picon.xml
similarity index 88%
rename from data/skin_display_picon.xml
rename to data/display255/skin_display_picon.xml
index c52304eb6..b23ac13c7 100644
--- a/data/skin_display_picon.xml
+++ b/data/display255/skin_display_picon.xml
@@ -1,5 +1,4 @@
-
@@ -28,72 +27,72 @@
-
+
Blink
-
+
Blink
-
+
Blink
-
+
VideoWidth
721,1980
-
+
IsMultichannel
-
+
TunerUseMask
1
-
+
TunerUseMask
2
-
+
TunerUseMask
4
-
+
TunerUseMask
8
-
+
NUMBER
0,0
-
+
NUMBER
1,1
-
+
NUMBER
2,2
-
+
NUMBER
3,3
@@ -104,13 +103,13 @@
Name
-
+
Reference
Name
-
+
VFDRemaining
VFDNoSeconds
@@ -122,15 +121,15 @@
- Name
+ NameOnly
-
+
Reference
Name
-
+
VFDRemaining
VFDNoSeconds
@@ -144,7 +143,7 @@
-
+
Name
@@ -188,13 +187,13 @@
Name
-
+
Reference
Name
-
+
VFDRemaining
VFDNoSeconds
@@ -243,28 +242,28 @@
Format:%H:%M
-
+
Blink
-
+
Blink
-
+
TunerUseMask
1
-
+
TunerUseMask
2
-
+
TunerUseMask
4
-
+
TunerUseMask
8
@@ -342,11 +341,7 @@
-
-
-
-
-
+
@@ -359,6 +354,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data/lcd/slow.png b/data/display255/slow.png
similarity index 100%
rename from data/lcd/slow.png
rename to data/display255/slow.png
diff --git a/data/lcd/stop.png b/data/display255/stop.png
similarity index 100%
rename from data/lcd/stop.png
rename to data/display255/stop.png
diff --git a/data/lcd/tuner-a-act.png b/data/display255/tuner-a-act.png
similarity index 100%
rename from data/lcd/tuner-a-act.png
rename to data/display255/tuner-a-act.png
diff --git a/data/lcd/tuner-a.png b/data/display255/tuner-a.png
similarity index 100%
rename from data/lcd/tuner-a.png
rename to data/display255/tuner-a.png
diff --git a/data/lcd/tuner-b-act.png b/data/display255/tuner-b-act.png
similarity index 100%
rename from data/lcd/tuner-b-act.png
rename to data/display255/tuner-b-act.png
diff --git a/data/lcd/tuner-b.png b/data/display255/tuner-b.png
similarity index 100%
rename from data/lcd/tuner-b.png
rename to data/display255/tuner-b.png
diff --git a/data/lcd/tuner-c-act.png b/data/display255/tuner-c-act.png
similarity index 100%
rename from data/lcd/tuner-c-act.png
rename to data/display255/tuner-c-act.png
diff --git a/data/lcd/tuner-c.png b/data/display255/tuner-c.png
similarity index 100%
rename from data/lcd/tuner-c.png
rename to data/display255/tuner-c.png
diff --git a/data/lcd/tuner-d-act.png b/data/display255/tuner-d-act.png
similarity index 100%
rename from data/lcd/tuner-d-act.png
rename to data/display255/tuner-d-act.png
diff --git a/data/lcd/tuner-d.png b/data/display255/tuner-d.png
similarity index 100%
rename from data/lcd/tuner-d.png
rename to data/display255/tuner-d.png
diff --git a/data/display255/txt.png b/data/display255/txt.png
new file mode 100644
index 000000000..9df696c07
Binary files /dev/null and b/data/display255/txt.png differ
diff --git a/data/lcd/update.png b/data/display255/update.png
similarity index 100%
rename from data/lcd/update.png
rename to data/display255/update.png
diff --git a/data/display96/Makefile.am b/data/display96/Makefile.am
new file mode 100644
index 000000000..88e42ddd1
--- /dev/null
+++ b/data/display96/Makefile.am
@@ -0,0 +1,2 @@
+installdir = $(pkgdatadir)/display
+dist_install_DATA = *.xml
diff --git a/data/skin_display.xml b/data/display96/skin_display.xml
similarity index 77%
rename from data/skin_display.xml
rename to data/display96/skin_display.xml
index caed5b24d..3dbf7112a 100644
--- a/data/skin_display.xml
+++ b/data/display96/skin_display.xml
@@ -1,5 +1,4 @@
-
@@ -22,7 +21,7 @@
-
+
@@ -32,19 +31,22 @@
-
- Name
+
+ Reference
+
+
+ NameOnly
-
+
Name
-
+
Progress
-
-
- Remaining
- NoSeconds
+
+
+ VFDRemaining
+ VFDNoSeconds
@@ -52,22 +54,22 @@
-
+
Name
-
+
Name
-
+
Progress
-
+
-
-
+
+
@@ -82,7 +84,7 @@
- Position
+ VFDPosition
@@ -128,27 +130,27 @@
-
-
-
+
+
+
-
+
-
-
+
+
-
+
@@ -164,32 +166,32 @@
-
-
-
+
+
+
-
-
-
-
+
+
+
+
-
-
+
+
-
-
+
+
-
-
+
+
diff --git a/data/displaytext/Makefile.am b/data/displaytext/Makefile.am
new file mode 100644
index 000000000..646101f47
--- /dev/null
+++ b/data/displaytext/Makefile.am
@@ -0,0 +1,3 @@
+installdir = $(pkgdatadir)/display
+
+dist_install_DATA = *.xml
diff --git a/data/skin_text.xml b/data/displaytext/skin_display.xml
similarity index 85%
rename from data/skin_text.xml
rename to data/displaytext/skin_display.xml
index 2c0ad3b53..9beaec732 100644
--- a/data/skin_text.xml
+++ b/data/displaytext/skin_display.xml
@@ -1,11 +1,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
- Name
+ NameOnly
config.usage.blinking_display_clock_during_recording,True,CheckSourceBoolean
@@ -39,7 +57,7 @@
- Summary
+ VFDPosition
diff --git a/data/distro-lcd-logo.png b/data/distro-lcd-logo.png
new file mode 100644
index 000000000..77afcfdff
Binary files /dev/null and b/data/distro-lcd-logo.png differ
diff --git a/data/distro-logo.png b/data/distro-logo.png
new file mode 100644
index 000000000..00ec72381
Binary files /dev/null and b/data/distro-logo.png differ
diff --git a/data/dreampackagewizard.xml b/data/dreampackagewizard.xml
deleted file mode 100644
index d3a25e778..000000000
--- a/data/dreampackagewizard.xml
+++ /dev/null
@@ -1,62 +0,0 @@
-
-
-
-packagelist = self.fillPackagesList()
-self.runWizard = (len(packagelist) > 0)
-self.condition = self.runWizard
-
-
-
-
-
-self.disableKeys = True
-
-
-
-
-self.condition = self.runWizard or not self.silent
-
-
-
-
-
-
-if self.runWizard:
- self.condition = True
- for x in self.packagesConfig:
- if x.value:
- self.condition = False
- break
-else:
- self.condition = False
-
-
-
-
-self.disableKeys = False
-
-
-self.markDone()
-
-
-
-
-
-self.condition = False
-if self.runWizard:
- for x in self.packagesConfig:
- if x.value:
- self.condition = True
- break
-
-
-self.disableKeys = True
-
-
-#print "len of packageslist", len(self.packageslist)
-#if (len(self.packageslist) == 1):
- #self.installPackage(0)
-
-
-
-
\ No newline at end of file
diff --git a/data/fonts/Makefile.am b/data/fonts/Makefile.am
index 84cc6db36..b4e2db227 100644
--- a/data/fonts/Makefile.am
+++ b/data/fonts/Makefile.am
@@ -1,8 +1,3 @@
installdir = $(datadir)/fonts
-dist_install_DATA = \
- ae_AlMateen.ttf \
- andale.ttf \
- lcd.ttf \
- md_khmurabi_10.ttf \
- nmsbd.ttf
+dist_install_DATA = *.ttf
diff --git a/data/fonts/tuxtxt.ttf b/data/fonts/tuxtxt.ttf
deleted file mode 100644
index 9be6547ed..000000000
Binary files a/data/fonts/tuxtxt.ttf and /dev/null differ
diff --git a/data/hd-testcard.mvi b/data/hd-testcard.mvi
new file mode 100644
index 000000000..2a62b78f5
Binary files /dev/null and b/data/hd-testcard.mvi differ
diff --git a/data/keymap.xml b/data/keymap.xml
index 505b6c9a3..dd4fb307b 100644
--- a/data/keymap.xml
+++ b/data/keymap.xml
@@ -35,6 +35,7 @@