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 @@ + @@ -75,10 +76,12 @@ + + - + @@ -91,13 +94,17 @@ - + + + + + @@ -175,6 +182,8 @@ + + @@ -200,14 +209,13 @@ + + - + + - - - - @@ -231,6 +239,7 @@ + @@ -239,6 +248,14 @@ + + + + + + + + @@ -408,6 +425,8 @@ + + @@ -448,8 +467,6 @@ - - @@ -526,6 +543,7 @@ + @@ -536,10 +554,12 @@ + + diff --git a/data/lcd/Makefile.am b/data/lcd/Makefile.am deleted file mode 100644 index adc03b5c3..000000000 --- a/data/lcd/Makefile.am +++ /dev/null @@ -1,24 +0,0 @@ -installdir = $(pkgdatadir)/lcd - -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 \ - rec.png \ - hd.png \ - format.png \ - dolby.png \ - crypt.png \ - stop.png \ - slow.png \ - play.png \ - pause.png \ - forward.png \ - backward.png \ No newline at end of file diff --git a/data/lcd_picon_default.png b/data/lcd_picon_default.png new file mode 100644 index 000000000..20709aa0f Binary files /dev/null and b/data/lcd_picon_default.png differ diff --git a/data/menu.xml b/data/menu.xml index b6577b472..1ef11d908 100644 --- a/data/menu.xml +++ b/data/menu.xml @@ -13,15 +13,16 @@ .. code .. "exec"s code --> - - - + + - self.session.scart.VCRSbChanged(3) + self.session.scart.VCRSbChanged(3) + + + @@ -35,34 +36,27 @@ - - + - - - - - + + + - - + + + + + + - + @@ -88,13 +82,18 @@ self.session.openWithCallback(msgClosed, EpgLoadMsg) + + + + + - - + + @@ -102,61 +101,56 @@ from Plugins.SystemPlugins.HdmiCEC.plugin import HdmiCECSetupScreen self.session.open(HdmiCECSetupScreen) - - + - - - - - - - - - + + + + + + + + + from Plugins.SystemPlugins.SABnzbd.plugin import SABnzbdSetupScreen self.session.open(SABnzbdSetupScreen) - - - - - - - - - - + + + - + + - + - + - - - - - - - - + + + + + + + + + + + - + from Screens.FactoryReset import FactoryReset def msgClosed(ret): @@ -170,18 +164,13 @@ self.session.openWithCallback(msgClosed, FactoryReset) - - - - - 2 3 - 1 + 1 1 diff --git a/data/picon_default.png b/data/picon_default.png new file mode 100644 index 000000000..2de0cc4da Binary files /dev/null and b/data/picon_default.png differ diff --git a/data/prev.png b/data/prev.png deleted file mode 100644 index 928f11a9f..000000000 Binary files a/data/prev.png and /dev/null differ diff --git a/data/rc_models/Makefile.am b/data/rc_models/Makefile.am index bb56dadcf..083ee83b3 100644 --- a/data/rc_models/Makefile.am +++ b/data/rc_models/Makefile.am @@ -1 +1,100 @@ -SUBDIRS = et6x00 et9x00 et9500 vu tm gb ini3000 ini5000 ini7000 odin +if DM8000 +SUBDIRS = dmm0 +endif + +if DM7020HD +SUBDIRS = dmm1 +endif + +if DM800 +SUBDIRS = dmm2 +endif + +if DM800SE +SUBDIRS = dmm2 +endif + +if DM800HD +SUBDIRS = dmm2 +endif + +if EBOX5000 +SUBDIRS = ebox5000 +endif + +if ET4X00 +SUBDIRS = et4x00 +endif + +if ET5X00 +SUBDIRS = et6x00 +endif + +if ET6X00 +SUBDIRS = et6x00 et6500 +endif + +if ET9X00 +SUBDIRS = et9x00 et9500 +endif + +if GIGABLUE +SUBDIRS = gb +endif + +if IQON +SUBDIRS = iqon +endif + +if IXUSSONE +SUBDIRS = ixussone +endif + +if IXUSSZERO +SUBDIRS = ixusszero +endif + +if ODINM7 +SUBDIRS = odinm7 +endif + +if ODINM9 +SUBDIRS = odinm9 +endif + +if TECHNOMATE +SUBDIRS = tm +endif + +if VENTON +SUBDIRS = ini3000 ini5000 ini5000r ini7000 +endif + +if VUSOLO +SUBDIRS = vu +endif + +if VUSOLO2 +SUBDIRS = vu +endif + +if VUUNO +SUBDIRS = vu +endif + +if VUDUO +SUBDIRS = vu +endif + +if VUULTIMO +SUBDIRS = vu2 +endif + +if VUDUO2 +SUBDIRS = vu +endif + +if XP1000 +SUBDIRS = xp1000 +endif + diff --git a/data/rc_models/dmm0/Makefile.am b/data/rc_models/dmm0/Makefile.am new file mode 100644 index 000000000..134bd04ef --- /dev/null +++ b/data/rc_models/dmm0/Makefile.am @@ -0,0 +1,5 @@ +installdir = $(pkgdatadir)/rc_models/dmm0 + +dist_install_DATA = \ + rc.png \ + rcpositions.xml diff --git a/data/rc_models/dmm0/rc.png b/data/rc_models/dmm0/rc.png new file mode 100644 index 000000000..9f5457d13 Binary files /dev/null and b/data/rc_models/dmm0/rc.png differ diff --git a/data/rc_models/dmm0/rcpositions.xml b/data/rc_models/dmm0/rcpositions.xml new file mode 100644 index 000000000..871312797 --- /dev/null +++ b/data/rc_models/dmm0/rcpositions.xml @@ -0,0 +1,47 @@ + + +