| 654 | } |
| 655 | |
| 656 | bool readBackground() { |
| 657 | FileReadDescriptor bg; |
| 658 | auto &backgroundKey = Window::Theme::IsNightMode() |
| 659 | ? _backgroundKeyNight |
| 660 | : _backgroundKeyDay; |
| 661 | if (!ReadEncryptedFile(bg, backgroundKey, _basePath, SettingsKey)) { |
| 662 | if (backgroundKey) { |
| 663 | ClearKey(backgroundKey, _basePath); |
| 664 | backgroundKey = 0; |
| 665 | writeSettings(); |
| 666 | } |
| 667 | return false; |
| 668 | } |
| 669 | |
| 670 | qint32 legacyId = 0; |
| 671 | bg.stream >> legacyId; |
| 672 | const auto paper = [&] { |
| 673 | if (legacyId == kWallPaperLegacySerializeTagId) { |
| 674 | quint64 id = 0; |
| 675 | quint64 accessHash = 0; |
| 676 | quint32 flags = 0; |
| 677 | QString slug; |
| 678 | bg.stream |
| 679 | >> id |
| 680 | >> accessHash |
| 681 | >> flags |
| 682 | >> slug; |
| 683 | return Data::WallPaper::FromLegacySerialized( |
| 684 | id, |
| 685 | accessHash, |
| 686 | flags, |
| 687 | slug); |
| 688 | } else if (legacyId == kWallPaperSerializeTagId) { |
| 689 | QByteArray serialized; |
| 690 | bg.stream >> serialized; |
| 691 | return Data::WallPaper::FromSerialized(serialized); |
| 692 | } else { |
| 693 | return Data::WallPaper::FromLegacyId(legacyId); |
| 694 | } |
| 695 | }(); |
| 696 | if (bg.stream.status() != QDataStream::Ok || !paper) { |
| 697 | return false; |
| 698 | } |
| 699 | |
| 700 | QByteArray imageData; |
| 701 | bg.stream >> imageData; |
| 702 | const auto isOldEmptyImage = (bg.stream.status() != QDataStream::Ok); |
| 703 | if (isOldEmptyImage |
| 704 | || Data::IsLegacy1DefaultWallPaper(*paper) |
| 705 | || (Data::IsLegacy2DefaultWallPaper(*paper) && bg.version < 1000000) |
| 706 | || (Data::IsLegacy3DefaultWallPaper(*paper) && bg.version < 1000000) |
| 707 | || (Data::IsLegacy4DefaultWallPaper(*paper) && bg.version < 1000000) |
| 708 | || Data::IsDefaultWallPaper(*paper)) { |
| 709 | _backgroundCanWrite = false; |
| 710 | if (isOldEmptyImage || bg.version < 1000000) { |
| 711 | Window::Theme::Background()->set(Data::DefaultWallPaper()); |
| 712 | } else { |
| 713 | Window::Theme::Background()->set(*paper); |
no test coverage detected