amend last commit, use readline method
[blender-addons-contrib.git] / ui_splash_tips / __init__.py
1 # ##### BEGIN GPL LICENSE BLOCK #####
2 #
3 #  This program is free software; you can redistribute it and/or
4 #  modify it under the terms of the GNU General Public License
5 #  as published by the Free Software Foundation; either version 2
6 #  of the License, or (at your option) any later version.
7 #
8 #  This program is distributed in the hope that it will be useful,
9 #  but WITHOUT ANY WARRANTY; without even the implied warranty of
10 #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11 #  GNU General Public License for more details.
12 #
13 #  You should have received a copy of the GNU General Public License
14 #  along with this program; if not, write to the Free Software Foundation,
15 #  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
16 #
17 # ##### END GPL LICENSE BLOCK #####
18
19 # <pep8 compliant>
20
21 bl_info = {
22     "name": "Splash Startup Tips",
23     "description": "Show a tip on startup",
24     "blender": (2, 73, 0),
25     "location": "Splash Screen",
26     "warning": "",
27     "category": "UI",
28 }
29
30
31 def find_random_line(f):
32     import os
33
34     chunk_size = 16
35     with open(f, 'rb') as f_handle:
36         import random
37         f_handle.seek(0, os.SEEK_END)
38         size = f_handle.tell()
39         i = random.randint(1, size)
40
41         # find the line
42         while i != 0:
43             i -= chunk_size
44             if i < 0:
45                 i = 0
46             f_handle.seek(i, os.SEEK_SET)
47             d = f_handle.read(chunk_size)
48             i_newline = d.rfind(b'\n')
49             if i_newline == -1:
50                 pass
51             else:
52                 i += i_newline + 1
53                 break
54
55         f_handle.seek(i, os.SEEK_SET)
56         data = f_handle.readline()
57     return data
58
59
60 def find_random_tip():
61     import os
62
63     text = find_random_line(
64             os.path.join(os.path.dirname(__file__), "tips.txt"),
65             ).rstrip()
66
67     url_index = text.rfind(b' ~')
68     if url_index != -1:
69         text, url = text[:url_index], text[url_index + 2:]
70     else:
71         url = b''
72     print(text)
73     print(url)
74     return text.decode("utf-8"), url.decode("utf-8")
75
76
77 def menu_func(self, context):
78     url_prefix = "https://www.blender.org/manual"
79
80     layout = self.layout
81     tip, url = find_random_tip()
82     col = layout.row()
83     col.label(tip)
84     if url:
85         col.operator("wm.url_open", text="", icon='INFO').url = url_prefix + url
86     layout.separator()
87
88
89 import bpy
90
91
92 def register():
93     bpy.types.USERPREF_MT_splash_footer.append(menu_func)
94
95
96 def unregister():
97     bpy.types.USERPREF_MT_splash_footer.remove(menu_func)
98
99
100 if __name__ == "__main__":
101     register()