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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
pub mod channel_view;
pub mod chat_panel;
pub mod collab_panel;
mod collab_titlebar_item;
mod face_pile;
pub mod notification_panel;
pub mod notifications;
mod panel_settings;

use std::sync::Arc;

pub use collab_panel::CollabPanel;
pub use collab_titlebar_item::CollabTitlebarItem;
use gpui::AppContext;
pub use panel_settings::{
    ChatPanelSettings, CollaborationPanelSettings, NotificationPanelSettings,
};
use settings::Settings;
use workspace::AppState;

// actions!(
//     collab,
//     [ToggleScreenSharing, ToggleMute, ToggleDeafen, LeaveCall]
// );

pub fn init(_app_state: &Arc<AppState>, cx: &mut AppContext) {
    CollaborationPanelSettings::register(cx);
    ChatPanelSettings::register(cx);
    NotificationPanelSettings::register(cx);

    // vcs_menu::init(cx);
    collab_titlebar_item::init(cx);
    collab_panel::init(cx);
    // chat_panel::init(cx);
    // notifications::init(&app_state, cx);

    // cx.add_global_action(toggle_screen_sharing);
    // cx.add_global_action(toggle_mute);
    // cx.add_global_action(toggle_deafen);
}

// pub fn toggle_screen_sharing(_: &ToggleScreenSharing, cx: &mut AppContext) {
//     let call = ActiveCall::global(cx).read(cx);
//     if let Some(room) = call.room().cloned() {
//         let client = call.client();
//         let toggle_screen_sharing = room.update(cx, |room, cx| {
//             if room.is_screen_sharing() {
//                 report_call_event_for_room(
//                     "disable screen share",
//                     room.id(),
//                     room.channel_id(),
//                     &client,
//                     cx,
//                 );
//                 Task::ready(room.unshare_screen(cx))
//             } else {
//                 report_call_event_for_room(
//                     "enable screen share",
//                     room.id(),
//                     room.channel_id(),
//                     &client,
//                     cx,
//                 );
//                 room.share_screen(cx)
//             }
//         });
//         toggle_screen_sharing.detach_and_log_err(cx);
//     }
// }

// pub fn toggle_mute(_: &ToggleMute, cx: &mut AppContext) {
//     let call = ActiveCall::global(cx).read(cx);
//     if let Some(room) = call.room().cloned() {
//         let client = call.client();
//         room.update(cx, |room, cx| {
//             let operation = if room.is_muted(cx) {
//                 "enable microphone"
//             } else {
//                 "disable microphone"
//             };
//             report_call_event_for_room(operation, room.id(), room.channel_id(), &client, cx);

//             room.toggle_mute(cx)
//         })
//         .map(|task| task.detach_and_log_err(cx))
//         .log_err();
//     }
// }

// pub fn toggle_deafen(_: &ToggleDeafen, cx: &mut AppContext) {
//     if let Some(room) = ActiveCall::global(cx).read(cx).room().cloned() {
//         room.update(cx, Room::toggle_deafen)
//             .map(|task| task.detach_and_log_err(cx))
//             .log_err();
//     }
// }

// fn notification_window_options(
//     screen: Rc<dyn Screen>,
//     window_size: Vector2F,
// ) -> WindowOptions<'static> {
//     const NOTIFICATION_PADDING: f32 = 16.;

//     let screen_bounds = screen.content_bounds();
//     WindowOptions {
//         bounds: WindowBounds::Fixed(RectF::new(
//             screen_bounds.upper_right()
//                 + vec2f(
//                     -NOTIFICATION_PADDING - window_size.x(),
//                     NOTIFICATION_PADDING,
//                 ),
//             window_size,
//         )),
//         titlebar: None,
//         center: false,
//         focus: false,
//         show: true,
//         kind: WindowKind::PopUp,
//         is_movable: false,
//         screen: Some(screen),
//     }
// }

// fn render_avatar<T: 'static>(
//     avatar: Option<Arc<ImageData>>,
//     avatar_style: &AvatarStyle,
//     container: ContainerStyle,
// ) -> AnyElement<T> {
//     avatar
//         .map(|avatar| {
//             Image::from_data(avatar)
//                 .with_style(avatar_style.image)
//                 .aligned()
//                 .contained()
//                 .with_corner_radius(avatar_style.outer_corner_radius)
//                 .constrained()
//                 .with_width(avatar_style.outer_width)
//                 .with_height(avatar_style.outer_width)
//                 .into_any()
//         })
//         .unwrap_or_else(|| {
//             Empty::new()
//                 .constrained()
//                 .with_width(avatar_style.outer_width)
//                 .into_any()
//         })
//         .contained()
//         .with_style(container)
//         .into_any()
// }

// fn is_channels_feature_enabled(cx: &gpui::WindowContext<'_>) -> bool {
//     cx.is_staff() || cx.has_flag::<ChannelsAlpha>()
// }