manabu-desktop 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/layouts/login.glade +24 -24
- data/layouts/main_menu.glade +32 -19
- data/layouts/roster.glade +203 -6
- data/layouts/student_registration.glade +307 -168
- data/layouts/toolbox.glade +2 -2
- data/lib/screens/base.rb +17 -5
- data/lib/screens/login.rb +15 -12
- data/lib/screens/main_menu.rb +29 -6
- data/lib/screens/roster.rb +73 -33
- data/lib/screens/student/registration.rb +73 -12
- data/lib/screens/toolbox.rb +12 -9
- data/lib/sessions.rb +20 -0
- data/lib/tools.rb +31 -8
- data/lib/windows.rb +26 -0
- data/manabu-desktop.gemspec +1 -1
- metadata +3 -2
data/lib/screens/main_menu.rb
CHANGED
@@ -1,28 +1,51 @@
|
|
1
1
|
require_relative 'base'
|
2
2
|
require_relative 'login'
|
3
|
+
require_relative '../sessions'
|
4
|
+
require_relative '../windows'
|
3
5
|
|
4
6
|
module ManabuDesktop
|
5
7
|
module Screens
|
6
8
|
class MainMenu < ManabuDesktop::Screens::Base
|
7
9
|
def initialize()
|
8
|
-
|
10
|
+
if ManabuDesktop::Windows.set_main_menu(self) == false
|
11
|
+
# TODO: handle multiple main menus..
|
12
|
+
STDERR.puts 'Tried to initialize multiple Main Menus!'
|
13
|
+
end
|
14
|
+
|
15
|
+
super('main_menu', :c)
|
9
16
|
|
10
|
-
connect_button = @builder.get_object('connect.
|
17
|
+
connect_button = @builder.get_object('connect.Button')
|
11
18
|
connect_button.set_label(I18n.t('main_menu.connect'))
|
12
|
-
connect_button.signal_connect('clicked') { ManabuDesktop::Screens::Login.new }
|
19
|
+
connect_button.signal_connect('clicked') { ManabuDesktop::Screens::Login.new() }
|
13
20
|
|
14
|
-
settings_button = @builder.get_object('settings.
|
21
|
+
settings_button = @builder.get_object('settings.Button')
|
15
22
|
settings_button.set_label(I18n.t('main_menu.settings'))
|
16
23
|
settings_button.signal_connect('clicked') { puts 'Settings coming soon' }
|
17
24
|
|
18
|
-
exit_button = @builder.get_object('exit.
|
25
|
+
exit_button = @builder.get_object('exit.Button')
|
19
26
|
exit_button.set_label(I18n.t('main_menu.exit'))
|
20
27
|
exit_button.signal_connect('clicked') do |_widget|
|
28
|
+
ManabuDesktop::Windows.destroy_all()
|
21
29
|
Gtk.main_quit()
|
22
|
-
@window.destroy()
|
23
30
|
end
|
31
|
+
|
32
|
+
@connections_list = @builder.get_object('connections.ListBox')
|
33
|
+
|
34
|
+
@status_bar = @builder.get_object('status.Statusbar')
|
35
|
+
@status_bar_context_id = @status_bar.get_context_id('Connection Status')
|
36
|
+
|
37
|
+
set_connections_status(ManabuDesktop::Sessions.session_count)
|
38
|
+
|
24
39
|
_show()
|
25
40
|
end
|
41
|
+
|
42
|
+
def set_status(status_text)
|
43
|
+
@status_bar.push(@status_bar_context_id, status_text)
|
44
|
+
end
|
45
|
+
|
46
|
+
def set_connections_status(num)
|
47
|
+
set_status("#{I18n.t('main_menu.num_connections')}: #{num}")
|
48
|
+
end
|
26
49
|
end
|
27
50
|
end
|
28
51
|
end
|
data/lib/screens/roster.rb
CHANGED
@@ -7,31 +7,36 @@ module ManabuDesktop
|
|
7
7
|
module Screens
|
8
8
|
class Roster < ManabuDesktop::Screens::Base
|
9
9
|
|
10
|
-
|
11
|
-
COLUMN_ID = 1
|
12
|
-
COLUMN_SURNAME = 2
|
13
|
-
COLUMN_NAME = 3
|
14
|
-
COLUMN_DOB = 4
|
15
|
-
COLUMN_SEX = 5
|
10
|
+
attr_reader :column_order
|
16
11
|
|
17
12
|
def initialize(client)
|
18
13
|
@client = client
|
19
14
|
super('roster')
|
20
15
|
|
21
|
-
|
22
|
-
toolbar = @builder.get_object('roster.toolbar')
|
16
|
+
setup_columns()
|
23
17
|
|
24
|
-
|
25
|
-
|
26
|
-
_create_columns(treeview)
|
27
|
-
|
28
|
-
_setup_toolbar(toolbar)
|
18
|
+
_setup_toolbar()
|
19
|
+
_setup_search_filters()
|
29
20
|
|
30
21
|
@window.show_all
|
31
22
|
_show()
|
32
23
|
end
|
33
24
|
|
25
|
+
# Set the order of the columns
|
26
|
+
# Possible columns:
|
27
|
+
# :id, :surname, :name, :middle_name, :surname_reading, :name_reading,
|
28
|
+
# :middle_name_reading, :gender, :dob, :enrollment
|
29
|
+
def setup_columns(order = [:id, :surname, :name, :gender, :dob, :enrollment])
|
30
|
+
@column_order = {select: 0}
|
31
|
+
order.each do |item|
|
32
|
+
@column_order[item] = @column_order.count
|
33
|
+
end
|
34
|
+
# @column_order << :controls # TODO: setup control column
|
35
|
+
_create_columns()
|
36
|
+
end
|
37
|
+
|
34
38
|
def _create_model()
|
39
|
+
# TODO: dynamically generate model based on selected columns/order
|
35
40
|
@model = Gtk::ListStore.new(TrueClass, Integer, String, String, String, String)
|
36
41
|
|
37
42
|
students = Manabu::Students.new(@client)
|
@@ -43,63 +48,98 @@ module ManabuDesktop
|
|
43
48
|
end
|
44
49
|
end
|
45
50
|
|
46
|
-
def _create_columns(
|
51
|
+
def _create_columns()
|
52
|
+
treeview = @builder.get_object('roster.TreeView')
|
53
|
+
_create_model()
|
54
|
+
treeview.set_model(@model)
|
47
55
|
renderer = Gtk::CellRendererToggle.new
|
48
56
|
renderer.signal_connect("toggled") { |_cell, path| _student_select(path) }
|
49
57
|
column = Gtk::TreeViewColumn.new(I18n.t("g.select"), renderer,
|
50
|
-
"active" =>
|
51
|
-
column.sort_column_id =
|
58
|
+
"active" => @column_order[:select])
|
59
|
+
column.sort_column_id = @column_order[:select]
|
52
60
|
treeview.append_column(column)
|
53
61
|
|
54
62
|
renderer = Gtk::CellRendererText.new()
|
55
63
|
column = Gtk::TreeViewColumn.new(I18n.t("student.id"), renderer,
|
56
|
-
"text" =>
|
57
|
-
column.sort_column_id =
|
64
|
+
"text" => @column_order[:id])
|
65
|
+
column.sort_column_id = @column_order[:id]
|
58
66
|
treeview.append_column(column)
|
59
67
|
|
60
68
|
renderer = Gtk::CellRendererText.new()
|
61
69
|
column = Gtk::TreeViewColumn.new(I18n.t("student.surname"), renderer,
|
62
|
-
"text" =>
|
63
|
-
column.sort_column_id =
|
70
|
+
"text" => @column_order[:surname])
|
71
|
+
column.sort_column_id = @column_order[:surname]
|
64
72
|
treeview.append_column(column)
|
65
73
|
|
66
74
|
renderer = Gtk::CellRendererText.new()
|
67
75
|
column = Gtk::TreeViewColumn.new(I18n.t("student.name"), renderer,
|
68
|
-
"text" =>
|
69
|
-
column.sort_column_id =
|
76
|
+
"text" => @column_order[:name])
|
77
|
+
column.sort_column_id = @column_order[:name]
|
70
78
|
treeview.append_column(column)
|
71
79
|
|
72
80
|
renderer = Gtk::CellRendererText.new()
|
73
81
|
column = Gtk::TreeViewColumn.new(I18n.t("student.dob"), renderer,
|
74
|
-
"text" =>
|
75
|
-
column.sort_column_id =
|
82
|
+
"text" => @column_order[:dob])
|
83
|
+
column.sort_column_id = @column_order[:dob]
|
76
84
|
treeview.append_column(column)
|
77
85
|
|
78
86
|
renderer = Gtk::CellRendererText.new()
|
79
|
-
column = Gtk::TreeViewColumn.new(I18n.t("student.
|
80
|
-
"text" =>
|
81
|
-
column.sort_column_id =
|
87
|
+
column = Gtk::TreeViewColumn.new(I18n.t("student.gender"), renderer,
|
88
|
+
"text" => @column_order[:gender])
|
89
|
+
column.sort_column_id = @column_order[:gender]
|
82
90
|
treeview.append_column(column)
|
83
91
|
end
|
84
92
|
|
85
93
|
def _student_select(path_str)
|
86
94
|
path = Gtk::TreePath.new(path_str)
|
87
95
|
iter = @model.get_iter(path)
|
88
|
-
|
96
|
+
selected = iter[@column_order[:select]]
|
89
97
|
# TODO: get student record and put in or remove from collection
|
90
|
-
|
91
|
-
iter[
|
98
|
+
selected ^= 1
|
99
|
+
iter[@column_order[:select]] = fixed
|
92
100
|
end
|
93
101
|
|
94
|
-
def _setup_toolbar(
|
102
|
+
def _setup_toolbar()
|
103
|
+
toolbar = @builder.get_object('roster.Toolbar')
|
104
|
+
# new button
|
95
105
|
register_student_button = Gtk::ToolButton.new(:stock_id => Gtk::Stock::NEW)
|
96
106
|
register_student_button.label = I18n.t('student.register')
|
97
|
-
register_student_button.signal_connect
|
107
|
+
register_student_button.signal_connect('clicked') do
|
98
108
|
ManabuDesktop::Screens::Student::Registration.new(@client, self)
|
99
109
|
end
|
100
|
-
|
110
|
+
|
111
|
+
# separator
|
112
|
+
sep = Gtk::SeparatorToolItem.new()
|
113
|
+
|
114
|
+
# search/filtering box
|
115
|
+
# search_container = Gtk::Box.new(:horizontal, 10)
|
116
|
+
# search_entry = Gtk::SearchEntry.new()
|
117
|
+
# search_bar = Gtk::SearchBar.new()
|
118
|
+
# search_bar.connect_entry(search_entry)
|
119
|
+
# search_bar.add(search_container)
|
120
|
+
|
101
121
|
toolbar.insert(register_student_button, 0)
|
102
122
|
toolbar.insert(sep, 1)
|
123
|
+
#toolbar.insert(search_container, 2)
|
124
|
+
end
|
125
|
+
|
126
|
+
def _setup_search_filters()
|
127
|
+
clear_filters_button = @builder.get_object('clear_filters.Button')
|
128
|
+
clear_filters_button.set_label(I18n.t('g.clear'))
|
129
|
+
|
130
|
+
enrollment_status_filters_toggleButton = \
|
131
|
+
@builder.get_object('enrollment_status_filters.ToggleButton')
|
132
|
+
enrollment_status_filters_toggleButton.set_label(I18n.t('enrollment.filter'))
|
133
|
+
enrollment_status_filters_popover = \
|
134
|
+
@builder.get_object('enrollment_status_filters.Popover')
|
135
|
+
|
136
|
+
enrollment_status_filters_popover.signal_connect('closed') {
|
137
|
+
enrollment_status_filters_toggleButton.active = false
|
138
|
+
}
|
139
|
+
enrollment_status_filters_toggleButton.signal_connect('toggled') {
|
140
|
+
enrollment_status_filters_popover.visible =
|
141
|
+
enrollment_status_filters_toggleButton.active?
|
142
|
+
}
|
103
143
|
end
|
104
144
|
end
|
105
145
|
end
|
@@ -1,6 +1,8 @@
|
|
1
1
|
require_relative '../base'
|
2
|
+
require_relative '../../tools'
|
2
3
|
require 'manabu/client'
|
3
4
|
require 'manabu/student'
|
5
|
+
require 'manabu/students'
|
4
6
|
|
5
7
|
module ManabuDesktop
|
6
8
|
module Screens
|
@@ -12,30 +14,89 @@ module ManabuDesktop
|
|
12
14
|
@parent = parent
|
13
15
|
|
14
16
|
super('student_registration')
|
15
|
-
|
16
|
-
|
17
|
+
|
18
|
+
# Name
|
19
|
+
@builder.get_object('surname.Label').set_label(
|
17
20
|
I18n.t('student.surname'))
|
18
|
-
@builder.get_object('
|
21
|
+
@surname_entry = @builder.get_object('surname.Entry')
|
22
|
+
@builder.get_object('name.Label').set_label(
|
19
23
|
I18n.t('student.name'))
|
20
|
-
@builder.get_object('
|
24
|
+
@name_entry = @builder.get_object('name.Entry')
|
25
|
+
@builder.get_object('middle_name.Label').set_label(
|
21
26
|
I18n.t('student.middle_name'))
|
27
|
+
@middle_name_entry = @builder.get_object('middle_name.Entry')
|
22
28
|
|
23
|
-
|
29
|
+
# Name readings
|
30
|
+
@builder.get_object('surname_reading.Label').set_label(
|
24
31
|
I18n.t('student.surname_reading'))
|
25
|
-
@builder.get_object('
|
32
|
+
@surname_reading_entry = @builder.get_object('surname_reading.Entry')
|
33
|
+
@builder.get_object('name_reading.Label').set_label(
|
26
34
|
I18n.t('student.name_reading'))
|
27
|
-
@builder.get_object('
|
35
|
+
@name_reading_entry = @builder.get_object('name_reading.Entry')
|
36
|
+
@builder.get_object('middle_name_reading.Label').set_label(
|
28
37
|
I18n.t('student.middle_name_reading'))
|
38
|
+
@middle_name_reading_entry = @builder.get_object('middle_name_reading.Entry')
|
39
|
+
|
40
|
+
# Gender
|
41
|
+
@builder.get_object('gender.Label').set_label(I18n.t('student.gender'))
|
42
|
+
gender_comboBoxText = @builder.get_object('gender.ComboBoxText')
|
43
|
+
gender_comboBoxText.append_text(' ')
|
44
|
+
gender_comboBoxText.append_text(I18n.t('student.male'))
|
45
|
+
gender_comboBoxText.append_text(I18n.t('student.female'))
|
29
46
|
|
47
|
+
# Birth date
|
48
|
+
@builder.get_object('birth_date.Label').set_label(I18n.t('student.dob'))
|
49
|
+
birth_date_picker_toggleButton = @builder.get_object('birth_date_picker.ToggleButton')
|
50
|
+
pixbuf = GdkPixbuf::Pixbuf.new(
|
51
|
+
file: ManabuDesktop::Tools.emojidex.emoji[:calendar].paths[:png][:hdpi])
|
52
|
+
@builder.get_object('birth_date_picker.Image').set_pixbuf(pixbuf)
|
53
|
+
birth_date_picker_popover = @builder.get_object('birth_date_picker.Popover')
|
54
|
+
birth_date_picker_popover.signal_connect('closed') {
|
55
|
+
birth_date_picker_toggleButton.active = false
|
56
|
+
}
|
57
|
+
birth_date_picker_calendar = @builder.get_object('birth_date_picker.Calendar')
|
58
|
+
birth_date_picker_calendar.signal_connect('day-selected') {
|
59
|
+
puts birth_date_picker_calendar.date
|
60
|
+
}
|
61
|
+
birth_date_picker_toggleButton.signal_connect('toggled') {
|
62
|
+
birth_date_picker_popover.visible = birth_date_picker_toggleButton.active?
|
63
|
+
}
|
30
64
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
65
|
+
|
66
|
+
# Registration
|
67
|
+
register_button = @builder.get_object('register.Button')
|
68
|
+
register_button.set_label(I18n.t('g.register'))
|
69
|
+
register_button.signal_connect('clicked') {
|
70
|
+
_register(@surname_entry.text, @name_entry.text, @middle_name_entry.text,
|
71
|
+
@surname_reading_entry.text, @name_reading_entry.text,
|
72
|
+
@middle_name_reading_entry.text,
|
73
|
+
nil, nil, nil, nil)
|
74
|
+
}
|
36
75
|
|
37
76
|
_show()
|
38
77
|
end
|
78
|
+
|
79
|
+
# Compose and send a registration request
|
80
|
+
def _register(surname, name, middle_name,
|
81
|
+
surname_reading, name_reading, middle_name_reading,
|
82
|
+
gender, dob, enrollment_status, picture_path)
|
83
|
+
student = Manabu::Student.new(@client)
|
84
|
+
student.surname = surname
|
85
|
+
student.name = name
|
86
|
+
student.middle_name = middle_name
|
87
|
+
student.surname_reading = surname_reading
|
88
|
+
student.name_reading = name_reading
|
89
|
+
student.middle_name_reading = middle_name_reading
|
90
|
+
# TODO: gender
|
91
|
+
# TODO: DOB
|
92
|
+
# TODO: enrollment_status
|
93
|
+
# TODO: picture
|
94
|
+
|
95
|
+
students = Manabu::Students.new(@client)
|
96
|
+
students.register(student)
|
97
|
+
|
98
|
+
@window.destroy
|
99
|
+
end
|
39
100
|
end
|
40
101
|
end
|
41
102
|
end
|
data/lib/screens/toolbox.rb
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
require_relative 'base'
|
2
2
|
require_relative 'roster'
|
3
|
+
require_relative '../tools'
|
3
4
|
require 'manabu/client'
|
4
|
-
require 'emojidex-rasters'
|
5
|
-
require 'emojidex/data/utf'
|
6
5
|
|
7
6
|
module ManabuDesktop
|
8
7
|
module Screens
|
@@ -19,7 +18,7 @@ module ManabuDesktop
|
|
19
18
|
|
20
19
|
@activities = [:Roster, :Courses, :Exams, :Administration]
|
21
20
|
|
22
|
-
icon_view = @builder.get_object('tools.
|
21
|
+
icon_view = @builder.get_object('tools.IconView')
|
23
22
|
icon_view.set_pixbuf_column(ICON_COL)
|
24
23
|
icon_view.set_text_column(LABEL_COL)
|
25
24
|
list = Gtk::ListStore.new(GdkPixbuf::Pixbuf, String, String)
|
@@ -41,18 +40,22 @@ module ManabuDesktop
|
|
41
40
|
end
|
42
41
|
|
43
42
|
def _create_ability_icon(ability, list, icon_view)
|
44
|
-
emojidex = Emojidex::Data::UTF.new
|
45
43
|
case ability
|
46
44
|
when :Roster
|
47
|
-
pixbuf = GdkPixbuf::Pixbuf.new(
|
45
|
+
pixbuf = GdkPixbuf::Pixbuf.new(
|
46
|
+
file: ManabuDesktop::Tools.emojidex.emoji[:student].paths[:png][:px64])
|
48
47
|
when :Courses
|
49
|
-
pixbuf = GdkPixbuf::Pixbuf.new(
|
48
|
+
pixbuf = GdkPixbuf::Pixbuf.new(
|
49
|
+
file: ManabuDesktop::Tools.emojidex.emoji[:notebook].paths[:png][:px64])
|
50
50
|
when :Exams
|
51
|
-
pixbuf = GdkPixbuf::Pixbuf.new(
|
51
|
+
pixbuf = GdkPixbuf::Pixbuf.new(
|
52
|
+
file: ManabuDesktop::Tools.emojidex.emoji[:white_check_mark].paths[:png][:px64])
|
52
53
|
when :Administration
|
53
|
-
pixbuf = GdkPixbuf::Pixbuf.new(
|
54
|
+
pixbuf = GdkPixbuf::Pixbuf.new(
|
55
|
+
file: ManabuDesktop::Tools.emojidex.emoji[:wrench].paths[:png][:px64])
|
54
56
|
else
|
55
|
-
pixbuf = GdkPixbuf::Pixbuf.new(
|
57
|
+
pixbuf = GdkPixbuf::Pixbuf.new(
|
58
|
+
file: ManabuDesktop::Tools.emojidex.emoji[:question].paths[:png][:px64])
|
56
59
|
end
|
57
60
|
|
58
61
|
iter = list.append
|
data/lib/sessions.rb
CHANGED
@@ -1,4 +1,24 @@
|
|
1
|
+
require_relative 'windows'
|
2
|
+
|
1
3
|
module ManabuDesktop
|
2
4
|
class Sessions
|
5
|
+
@@active_sessions = []
|
6
|
+
|
7
|
+
def self.get_sessions()
|
8
|
+
@@active_sessions
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.session_count
|
12
|
+
@@active_sessions.length
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.add_session(session_handle)
|
16
|
+
@@active_sessions << session_handle
|
17
|
+
main_menu = ManabuDesktop::Windows.get_main_menu()
|
18
|
+
main_menu.set_connections_status(session_count) unless main_menu == nil
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.remove_session(session_identifier)
|
22
|
+
end
|
3
23
|
end
|
4
24
|
end
|
data/lib/tools.rb
CHANGED
@@ -1,12 +1,35 @@
|
|
1
1
|
require 'i18n'
|
2
|
+
require 'emojidex-rasters'
|
3
|
+
require 'emojidex/data/utf'
|
2
4
|
|
3
|
-
|
5
|
+
module ManabuDesktop
|
6
|
+
class Tools
|
7
|
+
@@_initialized = false
|
8
|
+
@@_emojidex = nil
|
4
9
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
10
|
+
def self.init()
|
11
|
+
return if @@_initialized
|
12
|
+
|
13
|
+
I18n.load_path = Dir["#{__dir__}/../locales/*.yml"]
|
14
|
+
|
15
|
+
# TODO there must be a better way to determine language
|
16
|
+
@lang = (ENV['LANG'][0..1]).to_sym
|
17
|
+
if I18n.available_locales.include? @lang
|
18
|
+
I18n.locale = @lang
|
19
|
+
else
|
20
|
+
I18n.locale = :en
|
21
|
+
@lang = :en
|
22
|
+
end
|
23
|
+
|
24
|
+
@@_initialized = true
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.emojidex()
|
28
|
+
return @@_emojidex if @@_emojidex
|
29
|
+
@@_emojidex = Emojidex::Data::UTF.new
|
30
|
+
@@_emojidex
|
31
|
+
end
|
32
|
+
end
|
12
33
|
end
|
34
|
+
|
35
|
+
ManabuDesktop::Tools.init()
|
data/lib/windows.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
module ManabuDesktop
|
2
|
+
class Windows
|
3
|
+
@@main_menu = nil
|
4
|
+
@@window_list = []
|
5
|
+
|
6
|
+
def self.set_main_menu(handle)
|
7
|
+
return false if @@main_menu != nil
|
8
|
+
@@main_menu = handle
|
9
|
+
true
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.get_main_menu()
|
13
|
+
@@main_menu
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.add_window(handle)
|
17
|
+
@@window_list << handle
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.destroy_all()
|
21
|
+
@@window_list.each do |window|
|
22
|
+
window.destroy()
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/manabu-desktop.gemspec
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: manabu-desktop
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rei Kagetsuki
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-03-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: manabu
|
@@ -106,6 +106,7 @@ files:
|
|
106
106
|
- lib/sessions.rb
|
107
107
|
- lib/tools.rb
|
108
108
|
- lib/util/cache.rb
|
109
|
+
- lib/windows.rb
|
109
110
|
- manabu-desktop.gemspec
|
110
111
|
homepage: http://www.gakuengine.com
|
111
112
|
licenses:
|