Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

#! /usr/bin/env python3 

# -*- coding: utf-8 -*- 

 

#       Copyright 2011, Milan Boers 

#       Copyright 2011-2012, 2014 Marten de Vries 

# 

#       This file is part of OpenTeacher. 

# 

#       OpenTeacher is free software: you can redistribute it and/or modify 

#       it under the terms of the GNU General Public License as published by 

#       the Free Software Foundation, either version 3 of the License, or 

#       (at your option) any later version. 

# 

#       OpenTeacher is distributed in the hope that it will be useful, 

#       but WITHOUT ANY WARRANTY; without even the implied warranty of 

#       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 

#       GNU General Public License for more details. 

# 

#       You should have received a copy of the GNU General Public License 

#       along with OpenTeacher.  If not, see <http://www.gnu.org/licenses/>. 

 

import zipfile 

import copy 

import os 

 

class Lesson: 

        pass 

 

class OpenTeachingMediaSaverModule: 

        def __init__(self, moduleManager, *args, **kwargs): 

                super().__init__(*args, **kwargs) 

                self._mm = moduleManager 

 

                self.type = "save" 

                self.priorities = { 

                        "default": 112, 

                } 

 

                self.requires = ( 

                        self._mm.mods(type="otxxSaver"), 

                ) 

                self.uses = ( 

                        self._mm.mods(type="translator"), 

                        self._mm.mods(type="settings"), 

                ) 

                self.filesWithTranslations = ("otmd.py",) 

 

        def _retranslate(self): 

                try: 

                        translator = self._modules.default("active", type="translator") 

                except IndexError: 

exit                        _, ngettext = str, lambda a, b, n: a if n == 1 else b 

                else: 

                        _, ngettext = translator.gettextFunctions( 

                                self._mm.resourcePath("translations") 

                        ) 

 

                self.saves = {"media": { 

                        #TRANSLATORS: This is one of the file formats OpenTeacher 

                        #TRANSLATORS: saves to. 

                        "otmd": _("Open Teaching Media"), 

                }} 

                self._compressionSetting.update({ 

                        #TRANSLATORS: name of a setting 

                        "name": _("Enable compression"), 

                        #TRANSLATORS: setting category. 

                        "category": _("Input and output"), 

                        #TRANSLATORS: setting subcategory; .otmd is a file extension. 

                        "subcategory": _(".otmd saving"), 

                }) 

 

        def enable(self): 

                self._modules = set(self._mm.mods(type="modules")).pop() 

                self._otxxSaver = self._modules.default("active", type="otxxSaver") 

 

                try: 

                        self._settings = self._modules.default(type="settings") 

                except IndexError as e: 

                        self._compressionSetting = dict() 

                        self._compressionSetting["value"] = True 

                else: 

                        self._compressionSetting = self._settings.registerSetting(**{ 

                                "internal_name": "org.openteacher.savers.otmd.compression", 

                                "type": "boolean", 

                                "defaultValue": True, 

                                "advanced": True, 

                        }) 

 

                try: 

                        translator = self._modules.default("active", type="translator") 

                except IndexError: 

                        pass 

                else: 

                        translator.languageChanged.handle(self._retranslate) 

                self._retranslate() 

 

                self.active = True 

 

        def disable(self): 

                self.active = False 

 

                del self._modules 

                del self._otxxSaver 

                del self._settings 

                del self._compressionSetting 

                del self.saves 

 

        def save(self, type, lesson, path): 

                compression = zipfile.ZIP_STORED 

114                if self._compressionSetting["value"]: 

                        compression = zipfile.ZIP_DEFLATED 

 

                #prepare lesson structure for saving 

                lesson_clone = Lesson() 

                lesson_clone.list = copy.deepcopy(lesson.list) 

                lesson_clone.resources = {} 

                for item in lesson_clone.list["items"]: 

                        if not item["remote"]: 

                                zipName = os.path.join("resources", os.path.basename(item["filename"])) 

                                lesson_clone.resources[zipName] = item["filename"] 

                                item["filename"] = zipName 

 

                resourceFilenames = {} 

                for resourceName in lesson_clone.resources: 

                        resourceFilenames[resourceName] = resourceName 

 

                self._otxxSaver.save(lesson_clone, path, resourceFilenames, compression) 

                lesson.path = path 

 

def init(moduleManager): 

        return OpenTeachingMediaSaverModule(moduleManager)