diff --git a/client/src/app/+about/about-instance/instance-statistics.component.ts b/client/src/app/+about/about-instance/instance-statistics.component.ts
index cc918f856..bc257803f 100644
--- a/client/src/app/+about/about-instance/instance-statistics.component.ts
+++ b/client/src/app/+about/about-instance/instance-statistics.component.ts
@@ -1,6 +1,6 @@
import { Component, Input } from '@angular/core'
import { ServerStats } from '@peertube/peertube-models'
-import { BytesPipe } from '../../shared/shared-main/angular/bytes.pipe'
+import { BytesPipe } from '../../shared/shared-main/common/bytes.pipe'
import { GlobalIconComponent } from '../../shared/shared-icons/global-icon.component'
import { NgIf, DecimalPipe } from '@angular/common'
diff --git a/client/src/app/+accounts/account-video-channels/account-video-channels.component.ts b/client/src/app/+accounts/account-video-channels/account-video-channels.component.ts
index 34e03d6fd..f31382ff9 100644
--- a/client/src/app/+accounts/account-video-channels/account-video-channels.component.ts
+++ b/client/src/app/+accounts/account-video-channels/account-video-channels.component.ts
@@ -8,12 +8,12 @@ import { MiniatureDisplayOptions, VideoMiniatureComponent } from '../../shared/s
import { SubscribeButtonComponent } from '../../shared/shared-user-subscription/subscribe-button.component'
import { RouterLink } from '@angular/router'
import { ActorAvatarComponent } from '../../shared/shared-actor-image/actor-avatar.component'
-import { InfiniteScrollerDirective } from '../../shared/shared-main/angular/infinite-scroller.directive'
+import { InfiniteScrollerDirective } from '../../shared/shared-main/common/infinite-scroller.directive'
import { NgIf, NgFor } from '@angular/common'
import { AccountService } from '@app/shared/shared-main/account/account.service'
-import { VideoChannelService } from '@app/shared/shared-main/video-channel/video-channel.service'
+import { VideoChannelService } from '@app/shared/shared-main/channel/video-channel.service'
import { VideoService } from '@app/shared/shared-main/video/video.service'
-import { VideoChannel } from '@app/shared/shared-main/video-channel/video-channel.model'
+import { VideoChannel } from '@app/shared/shared-main/channel/video-channel.model'
import { Account } from '@app/shared/shared-main/account/account.model'
import { Video } from '@app/shared/shared-main/video/video.model'
diff --git a/client/src/app/+accounts/accounts.component.ts b/client/src/app/+accounts/accounts.component.ts
index add04037b..9a0ed81ff 100644
--- a/client/src/app/+accounts/accounts.component.ts
+++ b/client/src/app/+accounts/accounts.component.ts
@@ -5,8 +5,8 @@ import { AuthService, MarkdownService, MetaService, Notifier, RedirectService, R
import { Account } from '@app/shared/shared-main/account/account.model'
import { AccountService } from '@app/shared/shared-main/account/account.service'
import { DropdownAction } from '@app/shared/shared-main/buttons/action-dropdown.component'
-import { VideoChannel } from '@app/shared/shared-main/video-channel/video-channel.model'
-import { VideoChannelService } from '@app/shared/shared-main/video-channel/video-channel.service'
+import { VideoChannel } from '@app/shared/shared-main/channel/video-channel.model'
+import { VideoChannelService } from '@app/shared/shared-main/channel/video-channel.service'
import { VideoService } from '@app/shared/shared-main/video/video.service'
import { BlocklistService } from '@app/shared/shared-moderation/blocklist.service'
import { AccountReportComponent } from '@app/shared/shared-moderation/report-modals'
@@ -16,8 +16,8 @@ import { Subscription } from 'rxjs'
import { catchError, distinctUntilChanged, map, switchMap, tap } from 'rxjs/operators'
import { ActorAvatarComponent } from '../shared/shared-actor-image/actor-avatar.component'
import { CopyButtonComponent } from '../shared/shared-main/buttons/copy-button.component'
-import { ListOverflowComponent, ListOverflowItem } from '../shared/shared-main/misc/list-overflow.component'
-import { SimpleSearchInputComponent } from '../shared/shared-main/misc/simple-search-input.component'
+import { ListOverflowComponent, ListOverflowItem } from '../shared/shared-main/menu/list-overflow.component'
+import { SimpleSearchInputComponent } from '../shared/shared-main/search/simple-search-input.component'
import { AccountBlockBadgesComponent } from '../shared/shared-moderation/account-block-badges.component'
import { UserModerationDropdownComponent } from '../shared/shared-moderation/user-moderation-dropdown.component'
import { SubscribeButtonComponent } from '../shared/shared-user-subscription/subscribe-button.component'
diff --git a/client/src/app/+admin/admin.component.ts b/client/src/app/+admin/admin.component.ts
index 6ee2c02c2..d021ce52f 100644
--- a/client/src/app/+admin/admin.component.ts
+++ b/client/src/app/+admin/admin.component.ts
@@ -2,10 +2,10 @@ import { NgClass } from '@angular/common'
import { Component, OnInit } from '@angular/core'
import { RouterOutlet } from '@angular/router'
import { AuthService, ScreenService, ServerService } from '@app/core'
-import { ListOverflowItem } from '@app/shared/shared-main/misc/list-overflow.component'
-import { TopMenuDropdownParam } from '@app/shared/shared-main/misc/top-menu-dropdown.component'
+import { ListOverflowItem } from '@app/shared/shared-main/menu/list-overflow.component'
+import { TopMenuDropdownParam } from '@app/shared/shared-main/menu/top-menu-dropdown.component'
import { UserRight, UserRightType } from '@peertube/peertube-models'
-import { TopMenuDropdownComponent } from '../shared/shared-main/misc/top-menu-dropdown.component'
+import { TopMenuDropdownComponent } from '../shared/shared-main/menu/top-menu-dropdown.component'
@Component({
templateUrl: './admin.component.html',
diff --git a/client/src/app/+admin/config/edit-custom-config/edit-advanced-configuration.component.ts b/client/src/app/+admin/config/edit-custom-config/edit-advanced-configuration.component.ts
index fd5f915e2..870c647fd 100644
--- a/client/src/app/+admin/config/edit-custom-config/edit-advanced-configuration.component.ts
+++ b/client/src/app/+admin/config/edit-custom-config/edit-advanced-configuration.component.ts
@@ -1,7 +1,7 @@
import { Component, Input } from '@angular/core'
import { FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms'
-import { PeerTubeTemplateDirective } from '../../../shared/shared-main/angular/peertube-template.directive'
-import { HelpComponent } from '../../../shared/shared-main/misc/help.component'
+import { PeerTubeTemplateDirective } from '../../../shared/shared-main/common/peertube-template.directive'
+import { HelpComponent } from '../../../shared/shared-main/buttons/help.component'
import { NgClass, NgIf } from '@angular/common'
@Component({
diff --git a/client/src/app/+admin/config/edit-custom-config/edit-basic-configuration.component.ts b/client/src/app/+admin/config/edit-custom-config/edit-basic-configuration.component.ts
index 98510c7c3..b264d53e2 100644
--- a/client/src/app/+admin/config/edit-custom-config/edit-basic-configuration.component.ts
+++ b/client/src/app/+admin/config/edit-custom-config/edit-basic-configuration.component.ts
@@ -5,11 +5,11 @@ import { FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms'
import { MenuService, ThemeService } from '@app/core'
import { HTMLServerConfig } from '@peertube/peertube-models'
import { ConfigService } from '../shared/config.service'
-import { PeerTubeTemplateDirective } from '../../../shared/shared-main/angular/peertube-template.directive'
+import { PeerTubeTemplateDirective } from '../../../shared/shared-main/common/peertube-template.directive'
import { SelectOptionsComponent } from '../../../shared/shared-forms/select/select-options.component'
import { UserRealQuotaInfoComponent } from '../../shared/user-real-quota-info.component'
import { MarkdownTextareaComponent } from '../../../shared/shared-forms/markdown-textarea.component'
-import { HelpComponent } from '../../../shared/shared-main/misc/help.component'
+import { HelpComponent } from '../../../shared/shared-main/buttons/help.component'
import { PeertubeCheckboxComponent } from '../../../shared/shared-forms/peertube-checkbox.component'
import { SelectCustomValueComponent } from '../../../shared/shared-forms/select/select-custom-value.component'
import { NgFor, NgIf, NgClass } from '@angular/common'
diff --git a/client/src/app/+admin/config/edit-custom-config/edit-instance-information.component.ts b/client/src/app/+admin/config/edit-custom-config/edit-instance-information.component.ts
index 4a5360316..d7a8bc8a5 100644
--- a/client/src/app/+admin/config/edit-custom-config/edit-instance-information.component.ts
+++ b/client/src/app/+admin/config/edit-custom-config/edit-instance-information.component.ts
@@ -16,8 +16,8 @@ import { CustomMarkupHelpComponent } from '../../../shared/shared-custom-markup/
import { MarkdownTextareaComponent } from '../../../shared/shared-forms/markdown-textarea.component'
import { PeertubeCheckboxComponent } from '../../../shared/shared-forms/peertube-checkbox.component'
import { SelectCheckboxComponent } from '../../../shared/shared-forms/select/select-checkbox.component'
-import { PeerTubeTemplateDirective } from '../../../shared/shared-main/angular/peertube-template.directive'
-import { HelpComponent } from '../../../shared/shared-main/misc/help.component'
+import { PeerTubeTemplateDirective } from '../../../shared/shared-main/common/peertube-template.directive'
+import { HelpComponent } from '../../../shared/shared-main/buttons/help.component'
@Component({
selector: 'my-edit-instance-information',
diff --git a/client/src/app/+admin/config/edit-custom-config/edit-live-configuration.component.ts b/client/src/app/+admin/config/edit-custom-config/edit-live-configuration.component.ts
index 8e5e21323..99de24193 100644
--- a/client/src/app/+admin/config/edit-custom-config/edit-live-configuration.component.ts
+++ b/client/src/app/+admin/config/edit-custom-config/edit-live-configuration.component.ts
@@ -8,7 +8,7 @@ import { SelectCustomValueComponent } from '../../../shared/shared-forms/select/
import { RouterLink } from '@angular/router'
import { SelectOptionsComponent } from '../../../shared/shared-forms/select/select-options.component'
import { NgClass, NgIf, NgFor } from '@angular/common'
-import { PeerTubeTemplateDirective } from '../../../shared/shared-main/angular/peertube-template.directive'
+import { PeerTubeTemplateDirective } from '../../../shared/shared-main/common/peertube-template.directive'
import { PeertubeCheckboxComponent } from '../../../shared/shared-forms/peertube-checkbox.component'
@Component({
diff --git a/client/src/app/+admin/config/edit-custom-config/edit-vod-transcoding.component.ts b/client/src/app/+admin/config/edit-custom-config/edit-vod-transcoding.component.ts
index 89493f9c5..d554a6fca 100644
--- a/client/src/app/+admin/config/edit-custom-config/edit-vod-transcoding.component.ts
+++ b/client/src/app/+admin/config/edit-custom-config/edit-vod-transcoding.component.ts
@@ -8,7 +8,7 @@ import { SelectOptionsItem } from 'src/types/select-options-item.model'
import { PeertubeCheckboxComponent } from '../../../shared/shared-forms/peertube-checkbox.component'
import { SelectCustomValueComponent } from '../../../shared/shared-forms/select/select-custom-value.component'
import { SelectOptionsComponent } from '../../../shared/shared-forms/select/select-options.component'
-import { PeerTubeTemplateDirective } from '../../../shared/shared-main/angular/peertube-template.directive'
+import { PeerTubeTemplateDirective } from '../../../shared/shared-main/common/peertube-template.directive'
import { ConfigService } from '../shared/config.service'
import { EditConfigurationService, ResolutionOption } from './edit-configuration.service'
diff --git a/client/src/app/+admin/follows/followers-list/followers-list.component.ts b/client/src/app/+admin/follows/followers-list/followers-list.component.ts
index 09425ff94..de638f1b0 100644
--- a/client/src/app/+admin/follows/followers-list/followers-list.component.ts
+++ b/client/src/app/+admin/follows/followers-list/followers-list.component.ts
@@ -3,7 +3,7 @@ import { Component, OnInit } from '@angular/core'
import { ConfirmService, Notifier, RestPagination, RestTable } from '@app/core'
import { formatICU } from '@app/helpers'
import { ActorFollow } from '@peertube/peertube-models'
-import { AutoColspanDirective } from '../../../shared/shared-main/angular/auto-colspan.directive'
+import { AutoColspanDirective } from '../../../shared/shared-main/common/auto-colspan.directive'
import { DeleteButtonComponent } from '../../../shared/shared-main/buttons/delete-button.component'
import { ButtonComponent } from '../../../shared/shared-main/buttons/button.component'
import { NgbTooltip } from '@ng-bootstrap/ng-bootstrap'
diff --git a/client/src/app/+admin/follows/following-list/following-list.component.ts b/client/src/app/+admin/follows/following-list/following-list.component.ts
index 61aaf1865..b056c2f90 100644
--- a/client/src/app/+admin/follows/following-list/following-list.component.ts
+++ b/client/src/app/+admin/follows/following-list/following-list.component.ts
@@ -4,7 +4,7 @@ import { ConfirmService, Notifier, RestPagination, RestTable } from '@app/core'
import { ActorFollow } from '@peertube/peertube-models'
import { FollowModalComponent } from './follow-modal.component'
import { formatICU } from '@app/helpers'
-import { AutoColspanDirective } from '../../../shared/shared-main/angular/auto-colspan.directive'
+import { AutoColspanDirective } from '../../../shared/shared-main/common/auto-colspan.directive'
import { RedundancyCheckboxComponent } from '../shared/redundancy-checkbox.component'
import { DeleteButtonComponent } from '../../../shared/shared-main/buttons/delete-button.component'
import { AdvancedInputFilter, AdvancedInputFilterComponent } from '../../../shared/shared-forms/advanced-input-filter.component'
diff --git a/client/src/app/+admin/follows/video-redundancies-list/video-redundancies-list.component.ts b/client/src/app/+admin/follows/video-redundancies-list/video-redundancies-list.component.ts
index 1761b6000..fb478a260 100644
--- a/client/src/app/+admin/follows/video-redundancies-list/video-redundancies-list.component.ts
+++ b/client/src/app/+admin/follows/video-redundancies-list/video-redundancies-list.component.ts
@@ -6,7 +6,7 @@ import { VideoRedundanciesTarget, VideoRedundancy, VideosRedundancyStats } from
import { peertubeLocalStorage } from '@root-helpers/peertube-web-storage'
import { ChartModule } from 'primeng/chart'
import { VideoRedundancyInformationComponent } from './video-redundancy-information.component'
-import { AutoColspanDirective } from '../../../shared/shared-main/angular/auto-colspan.directive'
+import { AutoColspanDirective } from '../../../shared/shared-main/common/auto-colspan.directive'
import { DeleteButtonComponent } from '../../../shared/shared-main/buttons/delete-button.component'
import { TableExpanderIconComponent } from '../../../shared/shared-tables/table-expander-icon.component'
import { NgbTooltip } from '@ng-bootstrap/ng-bootstrap'
@@ -14,7 +14,7 @@ import { NgIf, NgFor } from '@angular/common'
import { TableModule } from 'primeng/table'
import { FormsModule } from '@angular/forms'
import { GlobalIconComponent } from '../../../shared/shared-icons/global-icon.component'
-import { BytesPipe } from '@app/shared/shared-main/angular/bytes.pipe'
+import { BytesPipe } from '@app/shared/shared-main/common/bytes.pipe'
import { RedundancyService } from '@app/shared/shared-main/video/redundancy.service'
@Component({
diff --git a/client/src/app/+admin/follows/video-redundancies-list/video-redundancy-information.component.ts b/client/src/app/+admin/follows/video-redundancies-list/video-redundancy-information.component.ts
index 169cdbdf7..7142cab44 100644
--- a/client/src/app/+admin/follows/video-redundancies-list/video-redundancy-information.component.ts
+++ b/client/src/app/+admin/follows/video-redundancies-list/video-redundancy-information.component.ts
@@ -1,6 +1,6 @@
import { Component, Input } from '@angular/core'
import { FileRedundancyInformation, StreamingPlaylistRedundancyInformation } from '@peertube/peertube-models'
-import { BytesPipe } from '../../../shared/shared-main/angular/bytes.pipe'
+import { BytesPipe } from '../../../shared/shared-main/common/bytes.pipe'
import { DatePipe } from '@angular/common'
@Component({
diff --git a/client/src/app/+admin/moderation/instance-blocklist/instance-account-blocklist.component.ts b/client/src/app/+admin/moderation/instance-blocklist/instance-account-blocklist.component.ts
index cb74aad76..219308a70 100644
--- a/client/src/app/+admin/moderation/instance-blocklist/instance-account-blocklist.component.ts
+++ b/client/src/app/+admin/moderation/instance-blocklist/instance-account-blocklist.component.ts
@@ -1,6 +1,6 @@
import { Component } from '@angular/core'
import { NgIf, DatePipe } from '@angular/common'
-import { AutoColspanDirective } from '../../../shared/shared-main/angular/auto-colspan.directive'
+import { AutoColspanDirective } from '../../../shared/shared-main/common/auto-colspan.directive'
import { ActorAvatarComponent } from '../../../shared/shared-actor-image/actor-avatar.component'
import { NgbTooltip } from '@ng-bootstrap/ng-bootstrap'
import { AdvancedInputFilterComponent } from '../../../shared/shared-forms/advanced-input-filter.component'
diff --git a/client/src/app/+admin/moderation/instance-blocklist/instance-server-blocklist.component.ts b/client/src/app/+admin/moderation/instance-blocklist/instance-server-blocklist.component.ts
index 7a5cdf5b7..7b4343c7d 100644
--- a/client/src/app/+admin/moderation/instance-blocklist/instance-server-blocklist.component.ts
+++ b/client/src/app/+admin/moderation/instance-blocklist/instance-server-blocklist.component.ts
@@ -1,7 +1,7 @@
import { Component } from '@angular/core'
import { BatchDomainsModalComponent } from '../../../shared/shared-moderation/batch-domains-modal.component'
import { NgIf, DatePipe } from '@angular/common'
-import { AutoColspanDirective } from '../../../shared/shared-main/angular/auto-colspan.directive'
+import { AutoColspanDirective } from '../../../shared/shared-main/common/auto-colspan.directive'
import { NgbTooltip } from '@ng-bootstrap/ng-bootstrap'
import { AdvancedInputFilterComponent } from '../../../shared/shared-forms/advanced-input-filter.component'
import { SharedModule } from 'primeng/api'
diff --git a/client/src/app/+admin/moderation/registration-list/registration-list.component.ts b/client/src/app/+admin/moderation/registration-list/registration-list.component.ts
index 62c6c9d66..4069c9b49 100644
--- a/client/src/app/+admin/moderation/registration-list/registration-list.component.ts
+++ b/client/src/app/+admin/moderation/registration-list/registration-list.component.ts
@@ -6,7 +6,7 @@ import { formatICU } from '@app/helpers'
import { UserRegistration, UserRegistrationState } from '@peertube/peertube-models'
import { AdminRegistrationService } from './admin-registration.service'
import { ProcessRegistrationModalComponent } from './process-registration-modal.component'
-import { AutoColspanDirective } from '../../../shared/shared-main/angular/auto-colspan.directive'
+import { AutoColspanDirective } from '../../../shared/shared-main/common/auto-colspan.directive'
import { UserEmailInfoComponent } from '../../shared/user-email-info.component'
import { TableExpanderIconComponent } from '../../../shared/shared-tables/table-expander-icon.component'
import { NgbTooltip } from '@ng-bootstrap/ng-bootstrap'
diff --git a/client/src/app/+admin/moderation/video-block-list/video-block-list.component.ts b/client/src/app/+admin/moderation/video-block-list/video-block-list.component.ts
index 33627395d..f04ac769b 100644
--- a/client/src/app/+admin/moderation/video-block-list/video-block-list.component.ts
+++ b/client/src/app/+admin/moderation/video-block-list/video-block-list.component.ts
@@ -8,7 +8,7 @@ import { buildVideoEmbedLink, decorateVideoLink } from '@peertube/peertube-core-
import { VideoBlacklist, VideoBlacklistType, VideoBlacklistType_Type } from '@peertube/peertube-models'
import { buildVideoOrPlaylistEmbed } from '@root-helpers/video'
import { EmbedComponent } from '../../../shared/shared-main/video/embed.component'
-import { AutoColspanDirective } from '../../../shared/shared-main/angular/auto-colspan.directive'
+import { AutoColspanDirective } from '../../../shared/shared-main/common/auto-colspan.directive'
import { VideoCellComponent } from '../../../shared/shared-tables/video-cell.component'
import { ActionDropdownComponent, DropdownAction } from '../../../shared/shared-main/buttons/action-dropdown.component'
import { TableExpanderIconComponent } from '../../../shared/shared-tables/table-expander-icon.component'
diff --git a/client/src/app/+admin/overview/users/user-edit/user-create.component.ts b/client/src/app/+admin/overview/users/user-edit/user-create.component.ts
index f67358415..d70721370 100644
--- a/client/src/app/+admin/overview/users/user-edit/user-create.component.ts
+++ b/client/src/app/+admin/overview/users/user-edit/user-create.component.ts
@@ -15,14 +15,14 @@ import {
import { FormReactiveService } from '@app/shared/shared-forms/form-reactive.service'
import { UserCreate, UserRole } from '@peertube/peertube-models'
import { UserEdit } from './user-edit'
-import { BytesPipe } from '../../../../shared/shared-main/angular/bytes.pipe'
+import { BytesPipe } from '../../../../shared/shared-main/common/bytes.pipe'
import { UserPasswordComponent } from './user-password.component'
import { PeertubeCheckboxComponent } from '../../../../shared/shared-forms/peertube-checkbox.component'
import { UserRealQuotaInfoComponent } from '../../../shared/user-real-quota-info.component'
import { SelectCustomValueComponent } from '../../../../shared/shared-forms/select/select-custom-value.component'
import { InputTextComponent } from '../../../../shared/shared-forms/input-text.component'
-import { PeerTubeTemplateDirective } from '../../../../shared/shared-main/angular/peertube-template.directive'
-import { HelpComponent } from '../../../../shared/shared-main/misc/help.component'
+import { PeerTubeTemplateDirective } from '../../../../shared/shared-main/common/peertube-template.directive'
+import { HelpComponent } from '../../../../shared/shared-main/buttons/help.component'
import { FormsModule, ReactiveFormsModule } from '@angular/forms'
import { ActorAvatarEditComponent } from '../../../../shared/shared-actor-image-edit/actor-avatar-edit.component'
import { NgIf, NgTemplateOutlet, NgClass, NgFor } from '@angular/common'
diff --git a/client/src/app/+admin/overview/users/user-edit/user-update.component.ts b/client/src/app/+admin/overview/users/user-edit/user-update.component.ts
index b91169c44..41348b3d8 100644
--- a/client/src/app/+admin/overview/users/user-edit/user-update.component.ts
+++ b/client/src/app/+admin/overview/users/user-edit/user-update.component.ts
@@ -12,14 +12,14 @@ import {
import { FormReactiveService } from '@app/shared/shared-forms/form-reactive.service'
import { User as UserType, UserAdminFlag, UserRole, UserUpdate } from '@peertube/peertube-models'
import { UserEdit } from './user-edit'
-import { BytesPipe } from '../../../../shared/shared-main/angular/bytes.pipe'
+import { BytesPipe } from '../../../../shared/shared-main/common/bytes.pipe'
import { UserPasswordComponent } from './user-password.component'
import { PeertubeCheckboxComponent } from '../../../../shared/shared-forms/peertube-checkbox.component'
import { UserRealQuotaInfoComponent } from '../../../shared/user-real-quota-info.component'
import { SelectCustomValueComponent } from '../../../../shared/shared-forms/select/select-custom-value.component'
import { InputTextComponent } from '../../../../shared/shared-forms/input-text.component'
-import { PeerTubeTemplateDirective } from '../../../../shared/shared-main/angular/peertube-template.directive'
-import { HelpComponent } from '../../../../shared/shared-main/misc/help.component'
+import { PeerTubeTemplateDirective } from '../../../../shared/shared-main/common/peertube-template.directive'
+import { HelpComponent } from '../../../../shared/shared-main/buttons/help.component'
import { FormsModule, ReactiveFormsModule } from '@angular/forms'
import { ActorAvatarEditComponent } from '../../../../shared/shared-actor-image-edit/actor-avatar-edit.component'
import { NgIf, NgTemplateOutlet, NgClass, NgFor } from '@angular/common'
diff --git a/client/src/app/+admin/overview/users/user-list/user-list.component.ts b/client/src/app/+admin/overview/users/user-list/user-list.component.ts
index 026fcfd47..3122fc00e 100644
--- a/client/src/app/+admin/overview/users/user-list/user-list.component.ts
+++ b/client/src/app/+admin/overview/users/user-list/user-list.component.ts
@@ -18,8 +18,8 @@ import { AdvancedInputFilter, AdvancedInputFilterComponent } from '../../../../s
import { PeertubeCheckboxComponent } from '../../../../shared/shared-forms/peertube-checkbox.component'
import { SelectCheckboxComponent } from '../../../../shared/shared-forms/select/select-checkbox.component'
import { GlobalIconComponent } from '../../../../shared/shared-icons/global-icon.component'
-import { AutoColspanDirective } from '../../../../shared/shared-main/angular/auto-colspan.directive'
-import { BytesPipe } from '../../../../shared/shared-main/angular/bytes.pipe'
+import { AutoColspanDirective } from '../../../../shared/shared-main/common/auto-colspan.directive'
+import { BytesPipe } from '../../../../shared/shared-main/common/bytes.pipe'
import { ActionDropdownComponent, DropdownAction } from '../../../../shared/shared-main/buttons/action-dropdown.component'
import {
AccountMutedStatus,
@@ -28,7 +28,7 @@ import {
} from '../../../../shared/shared-moderation/user-moderation-dropdown.component'
import { TableExpanderIconComponent } from '../../../../shared/shared-tables/table-expander-icon.component'
import { UserEmailInfoComponent } from '../../../shared/user-email-info.component'
-import { ProgressBarComponent } from '@app/shared/shared-main/misc/progress-bar.component'
+import { ProgressBarComponent } from '@app/shared/shared-main/common/progress-bar.component'
type UserForList = User & {
rawVideoQuota: number
diff --git a/client/src/app/+admin/overview/videos/video-list.component.ts b/client/src/app/+admin/overview/videos/video-list.component.ts
index eca0f43ca..63b314155 100644
--- a/client/src/app/+admin/overview/videos/video-list.component.ts
+++ b/client/src/app/+admin/overview/videos/video-list.component.ts
@@ -19,8 +19,8 @@ import { TableModule, TableRowExpandEvent } from 'primeng/table'
import { finalize } from 'rxjs/operators'
import { AdvancedInputFilter, AdvancedInputFilterComponent } from '../../../shared/shared-forms/advanced-input-filter.component'
import { GlobalIconComponent } from '../../../shared/shared-icons/global-icon.component'
-import { AutoColspanDirective } from '../../../shared/shared-main/angular/auto-colspan.directive'
-import { BytesPipe } from '../../../shared/shared-main/angular/bytes.pipe'
+import { AutoColspanDirective } from '../../../shared/shared-main/common/auto-colspan.directive'
+import { BytesPipe } from '../../../shared/shared-main/common/bytes.pipe'
import { ActionDropdownComponent, DropdownAction } from '../../../shared/shared-main/buttons/action-dropdown.component'
import { ButtonComponent } from '../../../shared/shared-main/buttons/button.component'
import { EmbedComponent } from '../../../shared/shared-main/video/embed.component'
diff --git a/client/src/app/+admin/plugins/plugin-list-installed/plugin-list-installed.component.ts b/client/src/app/+admin/plugins/plugin-list-installed/plugin-list-installed.component.ts
index 61407a7b3..6bea42fce 100644
--- a/client/src/app/+admin/plugins/plugin-list-installed/plugin-list-installed.component.ts
+++ b/client/src/app/+admin/plugins/plugin-list-installed/plugin-list-installed.component.ts
@@ -10,7 +10,7 @@ import { DeleteButtonComponent } from '../../../shared/shared-main/buttons/delet
import { ButtonComponent } from '../../../shared/shared-main/buttons/button.component'
import { EditButtonComponent } from '../../../shared/shared-main/buttons/edit-button.component'
import { PluginCardComponent } from '../shared/plugin-card.component'
-import { InfiniteScrollerDirective } from '../../../shared/shared-main/angular/infinite-scroller.directive'
+import { InfiniteScrollerDirective } from '../../../shared/shared-main/common/infinite-scroller.directive'
import { NgIf, NgFor } from '@angular/common'
import { PluginNavigationComponent } from '../shared/plugin-navigation.component'
diff --git a/client/src/app/+admin/plugins/plugin-search/plugin-search.component.ts b/client/src/app/+admin/plugins/plugin-search/plugin-search.component.ts
index fbb59628b..42c2c7766 100644
--- a/client/src/app/+admin/plugins/plugin-search/plugin-search.component.ts
+++ b/client/src/app/+admin/plugins/plugin-search/plugin-search.component.ts
@@ -9,8 +9,8 @@ import { logger } from '@root-helpers/logger'
import { ButtonComponent } from '../../../shared/shared-main/buttons/button.component'
import { EditButtonComponent } from '../../../shared/shared-main/buttons/edit-button.component'
import { PluginCardComponent } from '../shared/plugin-card.component'
-import { InfiniteScrollerDirective } from '../../../shared/shared-main/angular/infinite-scroller.directive'
-import { AutofocusDirective } from '../../../shared/shared-main/angular/autofocus.directive'
+import { InfiniteScrollerDirective } from '../../../shared/shared-main/common/infinite-scroller.directive'
+import { AutofocusDirective } from '../../../shared/shared-main/common/autofocus.directive'
import { GlobalIconComponent } from '../../../shared/shared-icons/global-icon.component'
import { NgIf, NgFor } from '@angular/common'
import { PluginNavigationComponent } from '../shared/plugin-navigation.component'
diff --git a/client/src/app/+admin/shared/user-real-quota-info.component.ts b/client/src/app/+admin/shared/user-real-quota-info.component.ts
index ae2bc5052..36860593b 100644
--- a/client/src/app/+admin/shared/user-real-quota-info.component.ts
+++ b/client/src/app/+admin/shared/user-real-quota-info.component.ts
@@ -1,7 +1,7 @@
import { Component, Input, OnInit } from '@angular/core'
import { ServerService } from '@app/core'
import { HTMLServerConfig, VideoResolution } from '@peertube/peertube-models'
-import { BytesPipe } from '../../shared/shared-main/angular/bytes.pipe'
+import { BytesPipe } from '../../shared/shared-main/common/bytes.pipe'
import { NgIf } from '@angular/common'
@Component({
diff --git a/client/src/app/+admin/system/runners/runner-job-list/runner-job-list.component.ts b/client/src/app/+admin/system/runners/runner-job-list/runner-job-list.component.ts
index b7655f451..fa5f67e03 100644
--- a/client/src/app/+admin/system/runners/runner-job-list/runner-job-list.component.ts
+++ b/client/src/app/+admin/system/runners/runner-job-list/runner-job-list.component.ts
@@ -9,7 +9,7 @@ import { SharedModule, SortMeta } from 'primeng/api'
import { TableModule } from 'primeng/table'
import { AdvancedInputFilter, AdvancedInputFilterComponent } from '../../../../shared/shared-forms/advanced-input-filter.component'
import { GlobalIconComponent } from '../../../../shared/shared-icons/global-icon.component'
-import { AutoColspanDirective } from '../../../../shared/shared-main/angular/auto-colspan.directive'
+import { AutoColspanDirective } from '../../../../shared/shared-main/common/auto-colspan.directive'
import { ActionDropdownComponent, DropdownAction } from '../../../../shared/shared-main/buttons/action-dropdown.component'
import { ButtonComponent } from '../../../../shared/shared-main/buttons/button.component'
import { TableExpanderIconComponent } from '../../../../shared/shared-tables/table-expander-icon.component'
diff --git a/client/src/app/+admin/system/runners/runner-list/runner-list.component.ts b/client/src/app/+admin/system/runners/runner-list/runner-list.component.ts
index f3ed8804f..2e8736a2d 100644
--- a/client/src/app/+admin/system/runners/runner-list/runner-list.component.ts
+++ b/client/src/app/+admin/system/runners/runner-list/runner-list.component.ts
@@ -4,7 +4,7 @@ import { ConfirmService, Notifier, RestPagination, RestTable } from '@app/core'
import { Runner } from '@peertube/peertube-models'
import { RunnerService } from '../runner.service'
import { DatePipe } from '@angular/common'
-import { AutoColspanDirective } from '../../../../shared/shared-main/angular/auto-colspan.directive'
+import { AutoColspanDirective } from '../../../../shared/shared-main/common/auto-colspan.directive'
import { ActionDropdownComponent, DropdownAction } from '../../../../shared/shared-main/buttons/action-dropdown.component'
import { NgbTooltip } from '@ng-bootstrap/ng-bootstrap'
import { TableModule } from 'primeng/table'
diff --git a/client/src/app/+admin/system/runners/runner-registration-token-list/runner-registration-token-list.component.ts b/client/src/app/+admin/system/runners/runner-registration-token-list/runner-registration-token-list.component.ts
index 59ee374ed..69f2ab1d5 100644
--- a/client/src/app/+admin/system/runners/runner-registration-token-list/runner-registration-token-list.component.ts
+++ b/client/src/app/+admin/system/runners/runner-registration-token-list/runner-registration-token-list.component.ts
@@ -4,7 +4,7 @@ import { ConfirmService, Notifier, RestPagination, RestTable } from '@app/core'
import { RunnerRegistrationToken } from '@peertube/peertube-models'
import { RunnerService } from '../runner.service'
import { DatePipe } from '@angular/common'
-import { AutoColspanDirective } from '../../../../shared/shared-main/angular/auto-colspan.directive'
+import { AutoColspanDirective } from '../../../../shared/shared-main/common/auto-colspan.directive'
import { CopyButtonComponent } from '../../../../shared/shared-main/buttons/copy-button.component'
import { ActionDropdownComponent, DropdownAction } from '../../../../shared/shared-main/buttons/action-dropdown.component'
import { ButtonComponent } from '../../../../shared/shared-main/buttons/button.component'
diff --git a/client/src/app/+error-page/error-page.component.ts b/client/src/app/+error-page/error-page.component.ts
index 8b37d14da..ea6ef2f35 100644
--- a/client/src/app/+error-page/error-page.component.ts
+++ b/client/src/app/+error-page/error-page.component.ts
@@ -1,9 +1,9 @@
+import { NgIf } from '@angular/common'
import { Component, OnInit } from '@angular/core'
import { Title } from '@angular/platform-browser'
import { Router } from '@angular/router'
+import { LoginLinkComponent } from '@app/shared/shared-main/users/login-link.component'
import { HttpStatusCode, HttpStatusCodeType } from '@peertube/peertube-models'
-import { LoginLinkComponent } from '../shared/shared-main/angular/login-link.component'
-import { NgIf } from '@angular/common'
@Component({
selector: 'my-error-page',
diff --git a/client/src/app/+login/login.component.html b/client/src/app/+login/login.component.html
index f31c785f0..34bf175a4 100644
--- a/client/src/app/+login/login.component.html
+++ b/client/src/app/+login/login.component.html
@@ -37,7 +37,7 @@
Sorry but there was an issue with the external login process. Please contact an administrator.
-
+
{{ error }}
diff --git a/client/src/app/+login/login.component.ts b/client/src/app/+login/login.component.ts
index b6ee6c018..5c150a452 100644
--- a/client/src/app/+login/login.component.ts
+++ b/client/src/app/+login/login.component.ts
@@ -10,7 +10,7 @@ import { getExternalAuthHref } from '@peertube/peertube-core-utils'
import { RegisteredExternalAuthConfig, ServerConfig, ServerErrorCode } from '@peertube/peertube-models'
import { GlobalIconComponent } from '../shared/shared-icons/global-icon.component'
import { InstanceBannerComponent } from '../shared/shared-instance/instance-banner.component'
-import { AutofocusDirective } from '../shared/shared-main/angular/autofocus.directive'
+import { AutofocusDirective } from '../shared/shared-main/common/autofocus.directive'
import { PluginSelectorDirective } from '../shared/shared-main/plugins/plugin-selector.directive'
import { FormsModule, ReactiveFormsModule } from '@angular/forms'
import { NgIf, NgClass, NgTemplateOutlet, NgFor } from '@angular/common'
diff --git a/client/src/app/+manage/video-channel-edit/video-channel-create.component.ts b/client/src/app/+manage/video-channel-edit/video-channel-create.component.ts
index ff641a4be..bd14ae77a 100644
--- a/client/src/app/+manage/video-channel-edit/video-channel-create.component.ts
+++ b/client/src/app/+manage/video-channel-edit/video-channel-create.component.ts
@@ -14,13 +14,13 @@ import { HttpStatusCode, VideoChannelCreate } from '@peertube/peertube-models'
import { VideoChannelEdit } from './video-channel-edit'
import { PeertubeCheckboxComponent } from '../../shared/shared-forms/peertube-checkbox.component'
import { MarkdownTextareaComponent } from '../../shared/shared-forms/markdown-textarea.component'
-import { HelpComponent } from '../../shared/shared-main/misc/help.component'
+import { HelpComponent } from '../../shared/shared-main/buttons/help.component'
import { ActorAvatarEditComponent } from '../../shared/shared-actor-image-edit/actor-avatar-edit.component'
import { ActorBannerEditComponent } from '../../shared/shared-actor-image-edit/actor-banner-edit.component'
import { FormsModule, ReactiveFormsModule } from '@angular/forms'
import { NgIf, NgClass } from '@angular/common'
-import { VideoChannel } from '@app/shared/shared-main/video-channel/video-channel.model'
-import { VideoChannelService } from '@app/shared/shared-main/video-channel/video-channel.service'
+import { VideoChannel } from '@app/shared/shared-main/channel/video-channel.model'
+import { VideoChannelService } from '@app/shared/shared-main/channel/video-channel.service'
@Component({
templateUrl: './video-channel-edit.component.html',
diff --git a/client/src/app/+manage/video-channel-edit/video-channel-edit.ts b/client/src/app/+manage/video-channel-edit/video-channel-edit.ts
index dd341f0c7..4c97d3265 100644
--- a/client/src/app/+manage/video-channel-edit/video-channel-edit.ts
+++ b/client/src/app/+manage/video-channel-edit/video-channel-edit.ts
@@ -1,5 +1,5 @@
import { FormReactive } from '@app/shared/shared-forms/form-reactive'
-import { VideoChannel } from '@app/shared/shared-main/video-channel/video-channel.model'
+import { VideoChannel } from '@app/shared/shared-main/channel/video-channel.model'
export abstract class VideoChannelEdit extends FormReactive {
videoChannel: VideoChannel
diff --git a/client/src/app/+manage/video-channel-edit/video-channel-update.component.ts b/client/src/app/+manage/video-channel-edit/video-channel-update.component.ts
index 9bb4730bd..8ab04370e 100644
--- a/client/src/app/+manage/video-channel-edit/video-channel-update.component.ts
+++ b/client/src/app/+manage/video-channel-edit/video-channel-update.component.ts
@@ -11,7 +11,7 @@ import {
VIDEO_CHANNEL_SUPPORT_VALIDATOR
} from '@app/shared/form-validators/video-channel-validators'
import { FormReactiveService } from '@app/shared/shared-forms/form-reactive.service'
-import { VideoChannelService } from '@app/shared/shared-main/video-channel/video-channel.service'
+import { VideoChannelService } from '@app/shared/shared-main/channel/video-channel.service'
import { shallowCopy } from '@peertube/peertube-core-utils'
import { VideoChannelUpdate } from '@peertube/peertube-models'
import { Subscription } from 'rxjs'
@@ -19,7 +19,7 @@ import { ActorAvatarEditComponent } from '../../shared/shared-actor-image-edit/a
import { ActorBannerEditComponent } from '../../shared/shared-actor-image-edit/actor-banner-edit.component'
import { MarkdownTextareaComponent } from '../../shared/shared-forms/markdown-textarea.component'
import { PeertubeCheckboxComponent } from '../../shared/shared-forms/peertube-checkbox.component'
-import { HelpComponent } from '../../shared/shared-main/misc/help.component'
+import { HelpComponent } from '../../shared/shared-main/buttons/help.component'
import { VideoChannelEdit } from './video-channel-edit'
@Component({
diff --git a/client/src/app/+my-account/my-account-blocklist/my-account-blocklist.component.ts b/client/src/app/+my-account/my-account-blocklist/my-account-blocklist.component.ts
index 8c339763d..4edebd632 100644
--- a/client/src/app/+my-account/my-account-blocklist/my-account-blocklist.component.ts
+++ b/client/src/app/+my-account/my-account-blocklist/my-account-blocklist.component.ts
@@ -1,6 +1,6 @@
import { Component } from '@angular/core'
import { NgIf, DatePipe } from '@angular/common'
-import { AutoColspanDirective } from '../../shared/shared-main/angular/auto-colspan.directive'
+import { AutoColspanDirective } from '../../shared/shared-main/common/auto-colspan.directive'
import { ActorAvatarComponent } from '../../shared/shared-actor-image/actor-avatar.component'
import { NgbTooltip } from '@ng-bootstrap/ng-bootstrap'
import { AdvancedInputFilterComponent } from '../../shared/shared-forms/advanced-input-filter.component'
diff --git a/client/src/app/+my-account/my-account-blocklist/my-account-server-blocklist.component.ts b/client/src/app/+my-account/my-account-blocklist/my-account-server-blocklist.component.ts
index 2f2186fa1..74decf0a0 100644
--- a/client/src/app/+my-account/my-account-blocklist/my-account-server-blocklist.component.ts
+++ b/client/src/app/+my-account/my-account-blocklist/my-account-server-blocklist.component.ts
@@ -1,7 +1,7 @@
import { Component } from '@angular/core'
import { BatchDomainsModalComponent } from '../../shared/shared-moderation/batch-domains-modal.component'
import { NgIf, DatePipe } from '@angular/common'
-import { AutoColspanDirective } from '../../shared/shared-main/angular/auto-colspan.directive'
+import { AutoColspanDirective } from '../../shared/shared-main/common/auto-colspan.directive'
import { NgbTooltip } from '@ng-bootstrap/ng-bootstrap'
import { AdvancedInputFilterComponent } from '../../shared/shared-forms/advanced-input-filter.component'
import { SharedModule } from 'primeng/api'
diff --git a/client/src/app/+my-account/my-account-import-export/my-account-export.component.ts b/client/src/app/+my-account/my-account-import-export/my-account-export.component.ts
index 2539496be..d21c1adf8 100644
--- a/client/src/app/+my-account/my-account-import-export/my-account-export.component.ts
+++ b/client/src/app/+my-account/my-account-import-export/my-account-export.component.ts
@@ -7,7 +7,7 @@ import { PeerTubeProblemDocument, ServerErrorCode, UserExport, UserExportState }
import { concatMap, from, of, switchMap, toArray } from 'rxjs'
import { PeertubeCheckboxComponent } from '../../shared/shared-forms/peertube-checkbox.component'
import { GlobalIconComponent } from '../../shared/shared-icons/global-icon.component'
-import { BytesPipe } from '../../shared/shared-main/angular/bytes.pipe'
+import { BytesPipe } from '../../shared/shared-main/common/bytes.pipe'
import { UserImportExportService } from './user-import-export.service'
@Component({
diff --git a/client/src/app/+my-account/my-account-import-export/my-account-import.component.ts b/client/src/app/+my-account/my-account-import-export/my-account-import.component.ts
index cd2c796d3..98228face 100644
--- a/client/src/app/+my-account/my-account-import-export/my-account-import.component.ts
+++ b/client/src/app/+my-account/my-account-import-export/my-account-import.component.ts
@@ -3,7 +3,7 @@ import { HttpErrorResponse } from '@angular/common/http'
import { Component, Input, OnDestroy, OnInit } from '@angular/core'
import { AuthService, CanComponentDeactivate, Notifier, ServerService } from '@app/core'
import { buildHTTPErrorResponse, genericUploadErrorHandler, getUploadXRetryConfig } from '@app/helpers'
-import { BytesPipe } from '@app/shared/shared-main/angular/bytes.pipe'
+import { BytesPipe } from '@app/shared/shared-main/common/bytes.pipe'
import { NgbTooltip } from '@ng-bootstrap/ng-bootstrap'
import { HttpStatusCode, UserImport, UserImportState } from '@peertube/peertube-models'
import { UploadState, UploaderX, UploadxService } from 'ngx-uploadx'
diff --git a/client/src/app/+my-account/my-account.component.ts b/client/src/app/+my-account/my-account.component.ts
index 7374bb977..9a7f586ed 100644
--- a/client/src/app/+my-account/my-account.component.ts
+++ b/client/src/app/+my-account/my-account.component.ts
@@ -2,7 +2,7 @@ import { NgClass } from '@angular/common'
import { Component, OnInit } from '@angular/core'
import { RouterOutlet } from '@angular/router'
import { AuthUser, PluginService, ScreenService } from '@app/core'
-import { TopMenuDropdownComponent, TopMenuDropdownParam } from '../shared/shared-main/misc/top-menu-dropdown.component'
+import { TopMenuDropdownComponent, TopMenuDropdownParam } from '../shared/shared-main/menu/top-menu-dropdown.component'
@Component({
templateUrl: './my-account.component.html',
diff --git a/client/src/app/+my-library/+my-video-channels/my-video-channels.component.ts b/client/src/app/+my-library/+my-video-channels/my-video-channels.component.ts
index 0604ae7df..8b074a3a6 100644
--- a/client/src/app/+my-library/+my-video-channels/my-video-channels.component.ts
+++ b/client/src/app/+my-library/+my-video-channels/my-video-channels.component.ts
@@ -3,8 +3,8 @@ import { Component } from '@angular/core'
import { RouterLink } from '@angular/router'
import { AuthService, ComponentPagination, ConfirmService, Notifier, ScreenService, hasMoreItems } from '@app/core'
import { formatICU } from '@app/helpers'
-import { VideoChannel } from '@app/shared/shared-main/video-channel/video-channel.model'
-import { VideoChannelService } from '@app/shared/shared-main/video-channel/video-channel.service'
+import { VideoChannel } from '@app/shared/shared-main/channel/video-channel.model'
+import { VideoChannelService } from '@app/shared/shared-main/channel/video-channel.service'
import { maxBy, minBy } from '@peertube/peertube-core-utils'
import { ChartData, ChartOptions, TooltipItem, TooltipModel } from 'chart.js'
import { ChartModule } from 'primeng/chart'
@@ -12,12 +12,12 @@ import { Subject, first, map, switchMap } from 'rxjs'
import { ActorAvatarComponent } from '../../shared/shared-actor-image/actor-avatar.component'
import { AdvancedInputFilterComponent } from '../../shared/shared-forms/advanced-input-filter.component'
import { GlobalIconComponent } from '../../shared/shared-icons/global-icon.component'
-import { DeferLoadingDirective } from '../../shared/shared-main/angular/defer-loading.directive'
-import { InfiniteScrollerDirective } from '../../shared/shared-main/angular/infinite-scroller.directive'
-import { NumberFormatterPipe } from '../../shared/shared-main/angular/number-formatter.pipe'
+import { DeferLoadingDirective } from '../../shared/shared-main/common/defer-loading.directive'
+import { InfiniteScrollerDirective } from '../../shared/shared-main/common/infinite-scroller.directive'
+import { NumberFormatterPipe } from '../../shared/shared-main/common/number-formatter.pipe'
import { DeleteButtonComponent } from '../../shared/shared-main/buttons/delete-button.component'
import { EditButtonComponent } from '../../shared/shared-main/buttons/edit-button.component'
-import { ChannelsSetupMessageComponent } from '../../shared/shared-main/misc/channels-setup-message.component'
+import { ChannelsSetupMessageComponent } from '../../shared/shared-main/channel/channels-setup-message.component'
type CustomChartData = (ChartData & { startDate: string, total: number })
diff --git a/client/src/app/+my-library/my-follows/my-followers.component.ts b/client/src/app/+my-library/my-follows/my-followers.component.ts
index 329870c8c..4c1d4741e 100644
--- a/client/src/app/+my-library/my-follows/my-followers.component.ts
+++ b/client/src/app/+my-library/my-follows/my-followers.component.ts
@@ -8,7 +8,7 @@ import { Subject } from 'rxjs'
import { ActorAvatarComponent } from '../../shared/shared-actor-image/actor-avatar.component'
import { AdvancedInputFilter, AdvancedInputFilterComponent } from '../../shared/shared-forms/advanced-input-filter.component'
import { GlobalIconComponent } from '../../shared/shared-icons/global-icon.component'
-import { InfiniteScrollerDirective } from '../../shared/shared-main/angular/infinite-scroller.directive'
+import { InfiniteScrollerDirective } from '../../shared/shared-main/common/infinite-scroller.directive'
import { formatICU } from '@app/helpers'
@Component({
diff --git a/client/src/app/+my-library/my-follows/my-subscriptions.component.ts b/client/src/app/+my-library/my-follows/my-subscriptions.component.ts
index bc802241b..4136c19c4 100644
--- a/client/src/app/+my-library/my-follows/my-subscriptions.component.ts
+++ b/client/src/app/+my-library/my-follows/my-subscriptions.component.ts
@@ -4,11 +4,11 @@ import { ComponentPagination, Notifier } from '@app/core'
import { SubscribeButtonComponent } from '../../shared/shared-user-subscription/subscribe-button.component'
import { RouterLink } from '@angular/router'
import { ActorAvatarComponent } from '../../shared/shared-actor-image/actor-avatar.component'
-import { InfiniteScrollerDirective } from '../../shared/shared-main/angular/infinite-scroller.directive'
+import { InfiniteScrollerDirective } from '../../shared/shared-main/common/infinite-scroller.directive'
import { AdvancedInputFilterComponent } from '../../shared/shared-forms/advanced-input-filter.component'
import { NgIf, NgFor } from '@angular/common'
import { GlobalIconComponent } from '../../shared/shared-icons/global-icon.component'
-import { VideoChannel } from '@app/shared/shared-main/video-channel/video-channel.model'
+import { VideoChannel } from '@app/shared/shared-main/channel/video-channel.model'
import { UserSubscriptionService } from '@app/shared/shared-user-subscription/user-subscription.service'
import { formatICU } from '@app/helpers'
diff --git a/client/src/app/+my-library/my-history/my-history.component.ts b/client/src/app/+my-library/my-history/my-history.component.ts
index d0574dc08..13a45c48a 100644
--- a/client/src/app/+my-library/my-history/my-history.component.ts
+++ b/client/src/app/+my-library/my-history/my-history.component.ts
@@ -3,7 +3,7 @@ import { Component, OnInit, ViewChild } from '@angular/core'
import { AuthService, ComponentPagination, ConfirmService, DisableForReuseHook, Notifier, User, UserService } from '@app/core'
import { formatICU, immutableAssign } from '@app/helpers'
import { DeleteButtonComponent } from '../../shared/shared-main/buttons/delete-button.component'
-import { PeerTubeTemplateDirective } from '../../shared/shared-main/angular/peertube-template.directive'
+import { PeerTubeTemplateDirective } from '../../shared/shared-main/common/peertube-template.directive'
import { FormsModule } from '@angular/forms'
import { InputSwitchComponent } from '../../shared/shared-forms/input-switch.component'
import { AdvancedInputFilterComponent } from '../../shared/shared-forms/advanced-input-filter.component'
diff --git a/client/src/app/+my-library/my-library.component.ts b/client/src/app/+my-library/my-library.component.ts
index ba35731ee..a11182d94 100644
--- a/client/src/app/+my-library/my-library.component.ts
+++ b/client/src/app/+my-library/my-library.component.ts
@@ -3,7 +3,7 @@ import { Component, OnInit } from '@angular/core'
import { RouterOutlet } from '@angular/router'
import { AuthService, AuthUser, ScreenService, ServerService } from '@app/core'
import { HTMLServerConfig } from '@peertube/peertube-models'
-import { TopMenuDropdownComponent, TopMenuDropdownParam } from '../shared/shared-main/misc/top-menu-dropdown.component'
+import { TopMenuDropdownComponent, TopMenuDropdownParam } from '../shared/shared-main/menu/top-menu-dropdown.component'
@Component({
templateUrl: './my-library.component.html',
diff --git a/client/src/app/+my-library/my-ownership/my-ownership.component.ts b/client/src/app/+my-library/my-ownership/my-ownership.component.ts
index 026e978c5..3c5beae0a 100644
--- a/client/src/app/+my-library/my-ownership/my-ownership.component.ts
+++ b/client/src/app/+my-library/my-ownership/my-ownership.component.ts
@@ -9,7 +9,7 @@ import { SharedModule, SortMeta } from 'primeng/api'
import { TableModule } from 'primeng/table'
import { ActorAvatarComponent } from '../../shared/shared-actor-image/actor-avatar.component'
import { GlobalIconComponent } from '../../shared/shared-icons/global-icon.component'
-import { AutoColspanDirective } from '../../shared/shared-main/angular/auto-colspan.directive'
+import { AutoColspanDirective } from '../../shared/shared-main/common/auto-colspan.directive'
import { ButtonComponent } from '../../shared/shared-main/buttons/button.component'
import { VideoCellComponent } from '../../shared/shared-tables/video-cell.component'
import { MyAcceptOwnershipComponent } from './my-accept-ownership/my-accept-ownership.component'
diff --git a/client/src/app/+my-library/my-video-channel-syncs/my-video-channel-syncs.component.ts b/client/src/app/+my-library/my-video-channel-syncs/my-video-channel-syncs.component.ts
index 2bc131aa9..c923e4e4c 100644
--- a/client/src/app/+my-library/my-video-channel-syncs/my-video-channel-syncs.component.ts
+++ b/client/src/app/+my-library/my-video-channel-syncs/my-video-channel-syncs.component.ts
@@ -1,17 +1,17 @@
-import { SortMeta, SharedModule } from 'primeng/api'
-import { mergeMap } from 'rxjs'
+import { DatePipe, NgClass, NgIf } from '@angular/common'
import { Component, OnInit } from '@angular/core'
-import { AuthService, Notifier, RestPagination, RestTable, ServerService } from '@app/core'
-import { HTMLServerConfig, VideoChannelSync, VideoChannelSyncState, VideoChannelSyncStateType } from '@peertube/peertube-models'
-import { ActorAvatarComponent } from '../../shared/shared-actor-image/actor-avatar.component'
-import { ActionDropdownComponent, DropdownAction } from '../../shared/shared-main/buttons/action-dropdown.component'
-import { NgbTooltip } from '@ng-bootstrap/ng-bootstrap'
import { RouterLink } from '@angular/router'
+import { AuthService, Notifier, RestPagination, RestTable, ServerService } from '@app/core'
+import { VideoChannelSyncService } from '@app/shared/shared-main/channel/video-channel-sync.service'
+import { VideoChannelService } from '@app/shared/shared-main/channel/video-channel.service'
+import { NgbTooltip } from '@ng-bootstrap/ng-bootstrap'
+import { HTMLServerConfig, VideoChannelSync, VideoChannelSyncState, VideoChannelSyncStateType } from '@peertube/peertube-models'
+import { SharedModule, SortMeta } from 'primeng/api'
import { TableModule } from 'primeng/table'
+import { mergeMap } from 'rxjs'
+import { ActorAvatarComponent } from '../../shared/shared-actor-image/actor-avatar.component'
import { GlobalIconComponent } from '../../shared/shared-icons/global-icon.component'
-import { NgIf, NgClass, DatePipe } from '@angular/common'
-import { VideoChannelSyncService } from '@app/shared/shared-main/video-channel-sync/video-channel-sync.service'
-import { VideoChannelService } from '@app/shared/shared-main/video-channel/video-channel.service'
+import { ActionDropdownComponent, DropdownAction } from '../../shared/shared-main/buttons/action-dropdown.component'
@Component({
templateUrl: './my-video-channel-syncs.component.html',
diff --git a/client/src/app/+my-library/my-video-channel-syncs/video-channel-sync-edit/video-channel-sync-edit.component.ts b/client/src/app/+my-library/my-video-channel-syncs/video-channel-sync-edit/video-channel-sync-edit.component.ts
index 1d75133d8..15edbb85b 100644
--- a/client/src/app/+my-library/my-video-channel-syncs/video-channel-sync-edit/video-channel-sync-edit.component.ts
+++ b/client/src/app/+my-library/my-video-channel-syncs/video-channel-sync-edit/video-channel-sync-edit.component.ts
@@ -1,18 +1,18 @@
-import { mergeMap } from 'rxjs'
-import { SelectChannelItem } from 'src/types'
+import { NgClass, NgIf } from '@angular/common'
import { Component, OnInit } from '@angular/core'
+import { FormsModule, ReactiveFormsModule } from '@angular/forms'
import { Router } from '@angular/router'
import { AuthService, Notifier } from '@app/core'
import { listUserChannelsForSelect } from '@app/helpers'
import { VIDEO_CHANNEL_EXTERNAL_URL_VALIDATOR } from '@app/shared/form-validators/video-channel-validators'
import { FormReactive } from '@app/shared/shared-forms/form-reactive'
import { FormReactiveService } from '@app/shared/shared-forms/form-reactive.service'
+import { VideoChannelSyncService } from '@app/shared/shared-main/channel/video-channel-sync.service'
+import { VideoChannelService } from '@app/shared/shared-main/channel/video-channel.service'
import { VideoChannelSyncCreate } from '@peertube/peertube-models'
+import { mergeMap } from 'rxjs'
+import { SelectChannelItem } from 'src/types'
import { SelectChannelComponent } from '../../../shared/shared-forms/select/select-channel.component'
-import { FormsModule, ReactiveFormsModule } from '@angular/forms'
-import { NgIf, NgClass } from '@angular/common'
-import { VideoChannelSyncService } from '@app/shared/shared-main/video-channel-sync/video-channel-sync.service'
-import { VideoChannelService } from '@app/shared/shared-main/video-channel/video-channel.service'
@Component({
selector: 'my-video-channel-sync-edit',
diff --git a/client/src/app/+my-library/my-video-imports/my-video-imports.component.ts b/client/src/app/+my-library/my-video-imports/my-video-imports.component.ts
index 41ddaf3de..f70e583a1 100644
--- a/client/src/app/+my-library/my-video-imports/my-video-imports.component.ts
+++ b/client/src/app/+my-library/my-video-imports/my-video-imports.component.ts
@@ -2,7 +2,7 @@ import { SortMeta, SharedModule } from 'primeng/api'
import { Component, OnInit } from '@angular/core'
import { Notifier, RestPagination, RestTable } from '@app/core'
import { VideoImport, VideoImportState, VideoImportStateType } from '@peertube/peertube-models'
-import { AutoColspanDirective } from '../../shared/shared-main/angular/auto-colspan.directive'
+import { AutoColspanDirective } from '../../shared/shared-main/common/auto-colspan.directive'
import { EditButtonComponent } from '../../shared/shared-main/buttons/edit-button.component'
import { DeleteButtonComponent } from '../../shared/shared-main/buttons/delete-button.component'
import { ButtonComponent } from '../../shared/shared-main/buttons/button.component'
diff --git a/client/src/app/+my-library/my-video-playlists/my-video-playlist-create.component.ts b/client/src/app/+my-library/my-video-playlists/my-video-playlist-create.component.ts
index 372cb5b8c..1133c9bb5 100644
--- a/client/src/app/+my-library/my-video-playlists/my-video-playlist-create.component.ts
+++ b/client/src/app/+my-library/my-video-playlists/my-video-playlist-create.component.ts
@@ -15,7 +15,7 @@ import { MyVideoPlaylistEdit } from './my-video-playlist-edit'
import { SelectChannelComponent } from '../../shared/shared-forms/select/select-channel.component'
import { SelectOptionsComponent } from '../../shared/shared-forms/select/select-options.component'
import { MarkdownTextareaComponent } from '../../shared/shared-forms/markdown-textarea.component'
-import { HelpComponent } from '../../shared/shared-main/misc/help.component'
+import { HelpComponent } from '../../shared/shared-main/buttons/help.component'
import { PreviewUploadComponent } from '../../shared/shared-forms/preview-upload.component'
import { FormsModule, ReactiveFormsModule } from '@angular/forms'
import { NgIf, NgClass } from '@angular/common'
diff --git a/client/src/app/+my-library/my-video-playlists/my-video-playlist-elements.component.ts b/client/src/app/+my-library/my-video-playlists/my-video-playlist-elements.component.ts
index 27b5158d3..c6f8760a3 100644
--- a/client/src/app/+my-library/my-video-playlists/my-video-playlist-elements.component.ts
+++ b/client/src/app/+my-library/my-video-playlists/my-video-playlist-elements.component.ts
@@ -5,7 +5,7 @@ import { ActivatedRoute, Router } from '@angular/router'
import { ComponentPagination, ConfirmService, HooksService, Notifier, ScreenService } from '@app/core'
import { VideoPlaylistType } from '@peertube/peertube-models'
import { VideoPlaylistElementMiniatureComponent } from '../../shared/shared-video-playlist/video-playlist-element-miniature.component'
-import { InfiniteScrollerDirective } from '../../shared/shared-main/angular/infinite-scroller.directive'
+import { InfiniteScrollerDirective } from '../../shared/shared-main/common/infinite-scroller.directive'
import { ActionDropdownComponent, DropdownAction } from '../../shared/shared-main/buttons/action-dropdown.component'
import { GlobalIconComponent } from '../../shared/shared-icons/global-icon.component'
import { VideoPlaylistMiniatureComponent } from '../../shared/shared-video-playlist/video-playlist-miniature.component'
diff --git a/client/src/app/+my-library/my-video-playlists/my-video-playlist-update.component.ts b/client/src/app/+my-library/my-video-playlists/my-video-playlist-update.component.ts
index a4e266561..f4447c43e 100644
--- a/client/src/app/+my-library/my-video-playlists/my-video-playlist-update.component.ts
+++ b/client/src/app/+my-library/my-video-playlists/my-video-playlist-update.component.ts
@@ -20,7 +20,7 @@ import { MarkdownTextareaComponent } from '../../shared/shared-forms/markdown-te
import { PreviewUploadComponent } from '../../shared/shared-forms/preview-upload.component'
import { SelectChannelComponent } from '../../shared/shared-forms/select/select-channel.component'
import { SelectOptionsComponent } from '../../shared/shared-forms/select/select-options.component'
-import { HelpComponent } from '../../shared/shared-main/misc/help.component'
+import { HelpComponent } from '../../shared/shared-main/buttons/help.component'
import { MyVideoPlaylistEdit } from './my-video-playlist-edit'
@Component({
diff --git a/client/src/app/+my-library/my-video-playlists/my-video-playlists.component.ts b/client/src/app/+my-library/my-video-playlists/my-video-playlists.component.ts
index 696967aeb..57e04d273 100644
--- a/client/src/app/+my-library/my-video-playlists/my-video-playlists.component.ts
+++ b/client/src/app/+my-library/my-video-playlists/my-video-playlists.component.ts
@@ -6,10 +6,10 @@ import { VideoPlaylistType } from '@peertube/peertube-models'
import { EditButtonComponent } from '../../shared/shared-main/buttons/edit-button.component'
import { DeleteButtonComponent } from '../../shared/shared-main/buttons/delete-button.component'
import { VideoPlaylistMiniatureComponent } from '../../shared/shared-video-playlist/video-playlist-miniature.component'
-import { InfiniteScrollerDirective } from '../../shared/shared-main/angular/infinite-scroller.directive'
+import { InfiniteScrollerDirective } from '../../shared/shared-main/common/infinite-scroller.directive'
import { RouterLink } from '@angular/router'
import { AdvancedInputFilterComponent } from '../../shared/shared-forms/advanced-input-filter.component'
-import { ChannelsSetupMessageComponent } from '../../shared/shared-main/misc/channels-setup-message.component'
+import { ChannelsSetupMessageComponent } from '../../shared/shared-main/channel/channels-setup-message.component'
import { NgIf, NgFor } from '@angular/common'
import { GlobalIconComponent } from '../../shared/shared-icons/global-icon.component'
import { VideoPlaylist } from '@app/shared/shared-video-playlist/video-playlist.model'
diff --git a/client/src/app/+my-library/my-videos/my-videos.component.ts b/client/src/app/+my-library/my-videos/my-videos.component.ts
index 492137826..4b28da7cf 100644
--- a/client/src/app/+my-library/my-videos/my-videos.component.ts
+++ b/client/src/app/+my-library/my-videos/my-videos.component.ts
@@ -18,7 +18,7 @@ import { concat, Observable } from 'rxjs'
import { tap, toArray } from 'rxjs/operators'
import { AdvancedInputFilter, AdvancedInputFilterComponent } from '../../shared/shared-forms/advanced-input-filter.component'
import { GlobalIconComponent } from '../../shared/shared-icons/global-icon.component'
-import { PeerTubeTemplateDirective } from '../../shared/shared-main/angular/peertube-template.directive'
+import { PeerTubeTemplateDirective } from '../../shared/shared-main/common/peertube-template.directive'
import { EditButtonComponent } from '../../shared/shared-main/buttons/edit-button.component'
import {
VideoActionsDisplayType,
diff --git a/client/src/app/+remote-interaction/remote-interaction.component.ts b/client/src/app/+remote-interaction/remote-interaction.component.ts
index c50064c4e..cd1a674d5 100644
--- a/client/src/app/+remote-interaction/remote-interaction.component.ts
+++ b/client/src/app/+remote-interaction/remote-interaction.component.ts
@@ -3,7 +3,7 @@ import { Component, OnInit } from '@angular/core'
import { ActivatedRoute, Router } from '@angular/router'
import { NgIf } from '@angular/common'
import { Video } from '@app/shared/shared-main/video/video.model'
-import { VideoChannel } from '@app/shared/shared-main/video-channel/video-channel.model'
+import { VideoChannel } from '@app/shared/shared-main/channel/video-channel.model'
import { SearchService } from '@app/shared/shared-search/search.service'
@Component({
diff --git a/client/src/app/+search/search.component.ts b/client/src/app/+search/search.component.ts
index cd320bb86..0f7a357de 100644
--- a/client/src/app/+search/search.component.ts
+++ b/client/src/app/+search/search.component.ts
@@ -6,7 +6,7 @@ import { AuthService, HooksService, MetaService, Notifier, ServerService, User,
import { immutableAssign, SimpleMemoize } from '@app/helpers'
import { validateHost } from '@app/shared/form-validators/host-validators'
import { HTMLServerConfig, SearchTargetType } from '@peertube/peertube-models'
-import { NumberFormatterPipe } from '../shared/shared-main/angular/number-formatter.pipe'
+import { NumberFormatterPipe } from '../shared/shared-main/common/number-formatter.pipe'
import { VideoPlaylistMiniatureComponent } from '../shared/shared-video-playlist/video-playlist-miniature.component'
import { MiniatureDisplayOptions, VideoMiniatureComponent } from '../shared/shared-video-miniature/video-miniature.component'
import { SubscribeButtonComponent } from '../shared/shared-user-subscription/subscribe-button.component'
@@ -14,8 +14,8 @@ import { ActorAvatarComponent } from '../shared/shared-actor-image/actor-avatar.
import { SearchFiltersComponent } from './search-filters.component'
import { NgbCollapse } from '@ng-bootstrap/ng-bootstrap'
import { NgIf, NgFor, NgTemplateOutlet } from '@angular/common'
-import { InfiniteScrollerDirective } from '../shared/shared-main/angular/infinite-scroller.directive'
-import { VideoChannel } from '@app/shared/shared-main/video-channel/video-channel.model'
+import { InfiniteScrollerDirective } from '../shared/shared-main/common/infinite-scroller.directive'
+import { VideoChannel } from '@app/shared/shared-main/channel/video-channel.model'
import { Video } from '@app/shared/shared-main/video/video.model'
import { VideoPlaylist } from '@app/shared/shared-video-playlist/video-playlist.model'
import { AdvancedSearch } from '@app/shared/shared-search/advanced-search.model'
diff --git a/client/src/app/+search/shared/channel-lazy-load.resolver.ts b/client/src/app/+search/shared/channel-lazy-load.resolver.ts
index 79fbbd095..58a09aa1f 100644
--- a/client/src/app/+search/shared/channel-lazy-load.resolver.ts
+++ b/client/src/app/+search/shared/channel-lazy-load.resolver.ts
@@ -1,7 +1,7 @@
import { Injectable } from '@angular/core'
import { Router } from '@angular/router'
import { AbstractLazyLoadResolver } from './abstract-lazy-load.resolver'
-import { VideoChannel } from '@app/shared/shared-main/video-channel/video-channel.model'
+import { VideoChannel } from '@app/shared/shared-main/channel/video-channel.model'
import { SearchService } from '@app/shared/shared-search/search.service'
@Injectable()
diff --git a/client/src/app/+signup/+register/register.component.ts b/client/src/app/+signup/+register/register.component.ts
index 1a7bf5498..60bb35c5e 100644
--- a/client/src/app/+signup/+register/register.component.ts
+++ b/client/src/app/+signup/+register/register.component.ts
@@ -7,14 +7,14 @@ import { HooksService } from '@app/core/plugins/hooks.service'
import { ServerConfig, ServerStats, UserRegister } from '@peertube/peertube-models'
import { SignupService } from '../shared/signup.service'
import { SignupSuccessBeforeEmailComponent } from '../shared/signup-success-before-email.component'
-import { LoaderComponent } from '../../shared/shared-main/loaders/loader.component'
+import { LoaderComponent } from '../../shared/shared-main/common/loader.component'
import { RegisterStepChannelComponent } from './steps/register-step-channel.component'
import { RegisterStepUserComponent } from './steps/register-step-user.component'
import { RegisterStepTermsComponent } from './steps/register-step-terms.component'
import { RegisterStepAboutComponent } from './steps/register-step-about.component'
import { SignupStepTitleComponent } from '../shared/signup-step-title.component'
import { CustomStepperComponent } from './custom-stepper.component'
-import { SignupLabelComponent } from '../../shared/shared-main/account/signup-label.component'
+import { SignupLabelComponent } from '../../shared/shared-main/users/signup-label.component'
import { NgIf } from '@angular/common'
import { InstanceAboutAccordionComponent } from '@app/shared/shared-instance/instance-about-accordion.component'
diff --git a/client/src/app/+signup/+register/steps/register-step-about.component.ts b/client/src/app/+signup/+register/steps/register-step-about.component.ts
index 28de76c37..40def0ed5 100644
--- a/client/src/app/+signup/+register/steps/register-step-about.component.ts
+++ b/client/src/app/+signup/+register/steps/register-step-about.component.ts
@@ -1,7 +1,7 @@
import { Component, Input } from '@angular/core'
import { ServerService } from '@app/core'
import { ServerStats } from '@peertube/peertube-models'
-import { DaysDurationFormatterPipe } from '../../../shared/shared-main/angular/days-duration-formatter.pipe'
+import { DaysDurationFormatterPipe } from '../../../shared/shared-main/date/days-duration-formatter.pipe'
import { NgIf } from '@angular/common'
import { InstanceBannerComponent } from '../../../shared/shared-instance/instance-banner.component'
diff --git a/client/src/app/+signup/+register/steps/register-step-channel.component.ts b/client/src/app/+signup/+register/steps/register-step-channel.component.ts
index 40e8bf013..fe21d09a9 100644
--- a/client/src/app/+signup/+register/steps/register-step-channel.component.ts
+++ b/client/src/app/+signup/+register/steps/register-step-channel.component.ts
@@ -6,7 +6,7 @@ import { SignupService } from '@app/+signup/shared/signup.service'
import { VIDEO_CHANNEL_DISPLAY_NAME_VALIDATOR, VIDEO_CHANNEL_NAME_VALIDATOR } from '@app/shared/form-validators/video-channel-validators'
import { FormReactive } from '@app/shared/shared-forms/form-reactive'
import { FormReactiveService } from '@app/shared/shared-forms/form-reactive.service'
-import { BytesPipe } from '../../../shared/shared-main/angular/bytes.pipe'
+import { BytesPipe } from '../../../shared/shared-main/common/bytes.pipe'
import { NgIf, NgClass } from '@angular/common'
@Component({
diff --git a/client/src/app/+signup/+register/steps/register-step-terms.component.ts b/client/src/app/+signup/+register/steps/register-step-terms.component.ts
index 6aaaaef1a..e219e2aa0 100644
--- a/client/src/app/+signup/+register/steps/register-step-terms.component.ts
+++ b/client/src/app/+signup/+register/steps/register-step-terms.component.ts
@@ -3,7 +3,7 @@ import { FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms'
import { FormReactive } from '@app/shared/shared-forms/form-reactive'
import { FormReactiveService } from '@app/shared/shared-forms/form-reactive.service'
import { REGISTER_REASON_VALIDATOR, REGISTER_TERMS_VALIDATOR } from '../shared'
-import { PeerTubeTemplateDirective } from '../../../shared/shared-main/angular/peertube-template.directive'
+import { PeerTubeTemplateDirective } from '../../../shared/shared-main/common/peertube-template.directive'
import { PeertubeCheckboxComponent } from '../../../shared/shared-forms/peertube-checkbox.component'
import { NgIf, NgClass } from '@angular/common'
diff --git a/client/src/app/+stats/video/video-stats.component.ts b/client/src/app/+stats/video/video-stats.component.ts
index 5bbd0fe1e..06d184447 100644
--- a/client/src/app/+stats/video/video-stats.component.ts
+++ b/client/src/app/+stats/video/video-stats.component.ts
@@ -21,10 +21,10 @@ import { NgbNav, NgbNavItem, NgbNavLink, NgbNavLinkBase, NgbNavContent, NgbNavOu
import { FormsModule } from '@angular/forms'
import { SelectOptionsComponent } from '../../shared/shared-forms/select/select-options.component'
import { EmbedComponent } from '../../shared/shared-main/video/embed.component'
-import { PeerTubeTemplateDirective } from '../../shared/shared-main/angular/peertube-template.directive'
-import { HelpComponent } from '../../shared/shared-main/misc/help.component'
+import { PeerTubeTemplateDirective } from '../../shared/shared-main/common/peertube-template.directive'
+import { HelpComponent } from '../../shared/shared-main/buttons/help.component'
import { NgFor, NgIf } from '@angular/common'
-import { NumberFormatterPipe } from '@app/shared/shared-main/angular/number-formatter.pipe'
+import { NumberFormatterPipe } from '@app/shared/shared-main/common/number-formatter.pipe'
import { VideoDetails } from '@app/shared/shared-main/video/video-details.model'
import { LiveVideoService } from '@app/shared/shared-video-live/live-video.service'
diff --git a/client/src/app/+video-channels/video-channel-playlists/video-channel-playlists.component.ts b/client/src/app/+video-channels/video-channel-playlists/video-channel-playlists.component.ts
index 3afc16a91..8c4d62d7d 100644
--- a/client/src/app/+video-channels/video-channel-playlists/video-channel-playlists.component.ts
+++ b/client/src/app/+video-channels/video-channel-playlists/video-channel-playlists.component.ts
@@ -2,10 +2,10 @@ import { Subject, Subscription } from 'rxjs'
import { AfterViewInit, Component, OnDestroy, OnInit } from '@angular/core'
import { ComponentPagination, hasMoreItems, HooksService, ScreenService } from '@app/core'
import { VideoPlaylistMiniatureComponent } from '../../shared/shared-video-playlist/video-playlist-miniature.component'
-import { InfiniteScrollerDirective } from '../../shared/shared-main/angular/infinite-scroller.directive'
+import { InfiniteScrollerDirective } from '../../shared/shared-main/common/infinite-scroller.directive'
import { NgIf, NgFor } from '@angular/common'
-import { VideoChannel } from '@app/shared/shared-main/video-channel/video-channel.model'
-import { VideoChannelService } from '@app/shared/shared-main/video-channel/video-channel.service'
+import { VideoChannel } from '@app/shared/shared-main/channel/video-channel.model'
+import { VideoChannelService } from '@app/shared/shared-main/channel/video-channel.service'
import { VideoPlaylist } from '@app/shared/shared-video-playlist/video-playlist.model'
import { VideoPlaylistService } from '@app/shared/shared-video-playlist/video-playlist.service'
diff --git a/client/src/app/+video-channels/video-channel-videos/video-channel-videos.component.ts b/client/src/app/+video-channels/video-channel-videos/video-channel-videos.component.ts
index 08ae5ad79..5ac6ca246 100644
--- a/client/src/app/+video-channels/video-channel-videos/video-channel-videos.component.ts
+++ b/client/src/app/+video-channels/video-channel-videos/video-channel-videos.component.ts
@@ -1,8 +1,8 @@
import { NgIf } from '@angular/common'
import { AfterViewInit, Component, OnDestroy, OnInit, ViewChild } from '@angular/core'
import { ComponentPaginationLight, DisableForReuseHook, HooksService, ScreenService } from '@app/core'
-import { VideoChannel } from '@app/shared/shared-main/video-channel/video-channel.model'
-import { VideoChannelService } from '@app/shared/shared-main/video-channel/video-channel.service'
+import { VideoChannel } from '@app/shared/shared-main/channel/video-channel.model'
+import { VideoChannelService } from '@app/shared/shared-main/channel/video-channel.service'
import { VideoService } from '@app/shared/shared-main/video/video.service'
import { VideoFilters } from '@app/shared/shared-video-miniature/video-filters.model'
import { MiniatureDisplayOptions } from '@app/shared/shared-video-miniature/video-miniature.component'
diff --git a/client/src/app/+video-channels/video-channels.component.ts b/client/src/app/+video-channels/video-channels.component.ts
index eb30614c9..4738d4650 100644
--- a/client/src/app/+video-channels/video-channels.component.ts
+++ b/client/src/app/+video-channels/video-channels.component.ts
@@ -3,8 +3,8 @@ import { Component, OnDestroy, OnInit, ViewChild } from '@angular/core'
import { ActivatedRoute, RouterLink, RouterLinkActive, RouterOutlet } from '@angular/router'
import { AuthService, Hotkey, HotkeysService, MarkdownService, MetaService, RestExtractor, ScreenService } from '@app/core'
import { Account } from '@app/shared/shared-main/account/account.model'
-import { VideoChannel } from '@app/shared/shared-main/video-channel/video-channel.model'
-import { VideoChannelService } from '@app/shared/shared-main/video-channel/video-channel.service'
+import { VideoChannel } from '@app/shared/shared-main/channel/video-channel.model'
+import { VideoChannelService } from '@app/shared/shared-main/channel/video-channel.service'
import { VideoService } from '@app/shared/shared-main/video/video.service'
import { BlocklistService } from '@app/shared/shared-moderation/blocklist.service'
import { SupportModalComponent } from '@app/shared/shared-support-modal/support-modal.component'
@@ -15,7 +15,7 @@ import { catchError, distinctUntilChanged, map, switchMap } from 'rxjs/operators
import { ActorAvatarComponent } from '../shared/shared-actor-image/actor-avatar.component'
import { GlobalIconComponent } from '../shared/shared-icons/global-icon.component'
import { CopyButtonComponent } from '../shared/shared-main/buttons/copy-button.component'
-import { ListOverflowComponent, ListOverflowItem } from '../shared/shared-main/misc/list-overflow.component'
+import { ListOverflowComponent, ListOverflowItem } from '../shared/shared-main/menu/list-overflow.component'
import { AccountBlockBadgesComponent } from '../shared/shared-moderation/account-block-badges.component'
@Component({
diff --git a/client/src/app/+videos/+video-edit/shared/caption/video-caption-edit-modal-content.component.ts b/client/src/app/+videos/+video-edit/shared/caption/video-caption-edit-modal-content.component.ts
index df33c07b5..185f733b4 100644
--- a/client/src/app/+videos/+video-edit/shared/caption/video-caption-edit-modal-content.component.ts
+++ b/client/src/app/+videos/+video-edit/shared/caption/video-caption-edit-modal-content.component.ts
@@ -6,7 +6,7 @@ import { FormReactive } from '@app/shared/shared-forms/form-reactive'
import { FormReactiveService } from '@app/shared/shared-forms/form-reactive.service'
import { PeertubeCheckboxComponent } from '@app/shared/shared-forms/peertube-checkbox.component'
import { TimestampInputComponent } from '@app/shared/shared-forms/timestamp-input.component'
-import { Nl2BrPipe } from '@app/shared/shared-main/angular/nl2br.pipe'
+import { Nl2BrPipe } from '@app/shared/shared-main/common/nl2br.pipe'
import { VideoCaptionEdit, VideoCaptionWithPathEdit } from '@app/shared/shared-main/video-caption/video-caption-edit.model'
import { VideoCaptionService } from '@app/shared/shared-main/video-caption/video-caption.service'
import { EmbedComponent } from '@app/shared/shared-main/video/embed.component'
diff --git a/client/src/app/+videos/+video-edit/shared/thumbnail-manager/thumbnail-manager.component.ts b/client/src/app/+videos/+video-edit/shared/thumbnail-manager/thumbnail-manager.component.ts
index f82f4f0a4..05bfb441e 100644
--- a/client/src/app/+videos/+video-edit/shared/thumbnail-manager/thumbnail-manager.component.ts
+++ b/client/src/app/+videos/+video-edit/shared/thumbnail-manager/thumbnail-manager.component.ts
@@ -11,7 +11,7 @@ import {
ServerService
} from '@app/core'
import { ReactiveFileComponent } from '@app/shared/shared-forms/reactive-file.component'
-import { BytesPipe } from '@app/shared/shared-main/angular/bytes.pipe'
+import { BytesPipe } from '@app/shared/shared-main/common/bytes.pipe'
import { EmbedComponent, EmbedVideoInput } from '@app/shared/shared-main/video/embed.component'
import { HTMLServerConfig } from '@peertube/peertube-models'
import { imageToDataURL } from '@root-helpers/images'
diff --git a/client/src/app/+videos/+video-edit/shared/video-edit.component.ts b/client/src/app/+videos/+video-edit/shared/video-edit.component.ts
index a24ae2628..bd89515b2 100644
--- a/client/src/app/+videos/+video-edit/shared/video-edit.component.ts
+++ b/client/src/app/+videos/+video-edit/shared/video-edit.component.ts
@@ -68,10 +68,10 @@ import { SelectOptionsComponent } from '../../../shared/shared-forms/select/sele
import { SelectTagsComponent } from '../../../shared/shared-forms/select/select-tags.component'
import { TimestampInputComponent } from '../../../shared/shared-forms/timestamp-input.component'
import { GlobalIconComponent } from '../../../shared/shared-icons/global-icon.component'
-import { PeerTubeTemplateDirective } from '../../../shared/shared-main/angular/peertube-template.directive'
+import { PeerTubeTemplateDirective } from '../../../shared/shared-main/common/peertube-template.directive'
import { DeleteButtonComponent } from '../../../shared/shared-main/buttons/delete-button.component'
import { EditButtonComponent } from '../../../shared/shared-main/buttons/edit-button.component'
-import { HelpComponent } from '../../../shared/shared-main/misc/help.component'
+import { HelpComponent } from '../../../shared/shared-main/buttons/help.component'
import { EmbedComponent } from '../../../shared/shared-main/video/embed.component'
import { LiveDocumentationLinkComponent } from '../../../shared/shared-video-live/live-documentation-link.component'
import { VideoCaptionAddModalComponent } from './caption/video-caption-add-modal.component'
diff --git a/client/src/app/+videos/+video-edit/shared/video-upload.service.ts b/client/src/app/+videos/+video-edit/shared/video-upload.service.ts
index 2011b4e70..d02da5c5d 100644
--- a/client/src/app/+videos/+video-edit/shared/video-upload.service.ts
+++ b/client/src/app/+videos/+video-edit/shared/video-upload.service.ts
@@ -3,7 +3,7 @@ import { Injectable } from '@angular/core'
import { AuthService, Notifier, ServerService } from '@app/core'
import { UploaderXFormData } from './uploaderx-form-data'
import { getUploadXRetryConfig } from '@app/helpers'
-import { BytesPipe } from '@app/shared/shared-main/angular/bytes.pipe'
+import { BytesPipe } from '@app/shared/shared-main/common/bytes.pipe'
import { VideoService } from '@app/shared/shared-main/video/video.service'
@Injectable()
diff --git a/client/src/app/+videos/+video-edit/video-add-components/video-go-live.component.ts b/client/src/app/+videos/+video-edit/video-add-components/video-go-live.component.ts
index 3246be2be..69182bdc4 100644
--- a/client/src/app/+videos/+video-edit/video-add-components/video-go-live.component.ts
+++ b/client/src/app/+videos/+video-edit/video-add-components/video-go-live.component.ts
@@ -16,7 +16,7 @@ import {
VideoPrivacy
} from '@peertube/peertube-models'
import { VideoSend } from './video-send'
-import { TimeDurationFormatterPipe } from '../../../shared/shared-main/angular/time-duration-formatter.pipe'
+import { TimeDurationFormatterPipe } from '../../../shared/shared-main/date/time-duration-formatter.pipe'
import { ButtonComponent } from '../../../shared/shared-main/buttons/button.component'
import { VideoEditComponent } from '../shared/video-edit.component'
import { SelectOptionsComponent } from '../../../shared/shared-forms/select/select-options.component'
diff --git a/client/src/app/+videos/+video-edit/video-add-components/video-import-torrent.component.ts b/client/src/app/+videos/+video-edit/video-add-components/video-import-torrent.component.ts
index 638693c1b..70030e303 100644
--- a/client/src/app/+videos/+video-edit/video-add-components/video-import-torrent.component.ts
+++ b/client/src/app/+videos/+video-edit/video-add-components/video-import-torrent.component.ts
@@ -14,8 +14,8 @@ import { VideoEditComponent } from '../shared/video-edit.component'
import { SelectOptionsComponent } from '../../../shared/shared-forms/select/select-options.component'
import { SelectChannelComponent } from '../../../shared/shared-forms/select/select-channel.component'
import { FormsModule, ReactiveFormsModule } from '@angular/forms'
-import { PeerTubeTemplateDirective } from '../../../shared/shared-main/angular/peertube-template.directive'
-import { HelpComponent } from '../../../shared/shared-main/misc/help.component'
+import { PeerTubeTemplateDirective } from '../../../shared/shared-main/common/peertube-template.directive'
+import { HelpComponent } from '../../../shared/shared-main/buttons/help.component'
import { NgbTooltip } from '@ng-bootstrap/ng-bootstrap'
import { GlobalIconComponent } from '../../../shared/shared-icons/global-icon.component'
import { DragDropDirective } from './drag-drop.directive'
diff --git a/client/src/app/+videos/+video-edit/video-add-components/video-import-url.component.ts b/client/src/app/+videos/+video-edit/video-add-components/video-import-url.component.ts
index bb8d15fce..167d4035a 100644
--- a/client/src/app/+videos/+video-edit/video-add-components/video-import-url.component.ts
+++ b/client/src/app/+videos/+video-edit/video-add-components/video-import-url.component.ts
@@ -15,8 +15,8 @@ import { ButtonComponent } from '../../../shared/shared-main/buttons/button.comp
import { SelectOptionsComponent } from '../../../shared/shared-forms/select/select-options.component'
import { SelectChannelComponent } from '../../../shared/shared-forms/select/select-channel.component'
import { FormsModule, ReactiveFormsModule } from '@angular/forms'
-import { PeerTubeTemplateDirective } from '../../../shared/shared-main/angular/peertube-template.directive'
-import { HelpComponent } from '../../../shared/shared-main/misc/help.component'
+import { PeerTubeTemplateDirective } from '../../../shared/shared-main/common/peertube-template.directive'
+import { HelpComponent } from '../../../shared/shared-main/buttons/help.component'
import { GlobalIconComponent } from '../../../shared/shared-icons/global-icon.component'
import { NgIf } from '@angular/common'
import { VideoCaptionService } from '@app/shared/shared-main/video-caption/video-caption.service'
diff --git a/client/src/app/+videos/+video-edit/video-add.component.ts b/client/src/app/+videos/+video-edit/video-add.component.ts
index 375ca9cb4..772f48e67 100644
--- a/client/src/app/+videos/+video-edit/video-add.component.ts
+++ b/client/src/app/+videos/+video-edit/video-add.component.ts
@@ -15,7 +15,7 @@ import { VideoImportTorrentComponent } from './video-add-components/video-import
import { VideoImportUrlComponent } from './video-add-components/video-import-url.component'
import { VideoUploadComponent } from './video-add-components/video-upload.component'
import { NgbNav, NgbNavItem, NgbNavLink, NgbNavLinkBase, NgbNavContent, NgbNavOutlet } from '@ng-bootstrap/ng-bootstrap'
-import { ChannelsSetupMessageComponent } from '../../shared/shared-main/misc/channels-setup-message.component'
+import { ChannelsSetupMessageComponent } from '../../shared/shared-main/channel/channels-setup-message.component'
import { UserQuotaComponent } from '../../shared/shared-main/users/user-quota.component'
import { NgIf, NgTemplateOutlet, NgClass } from '@angular/common'
diff --git a/client/src/app/+videos/+video-watch/shared/comment/video-comment-add.component.ts b/client/src/app/+videos/+video-watch/shared/comment/video-comment-add.component.ts
index ae2ad3c93..8286da82b 100644
--- a/client/src/app/+videos/+video-watch/shared/comment/video-comment-add.component.ts
+++ b/client/src/app/+videos/+video-watch/shared/comment/video-comment-add.component.ts
@@ -1,5 +1,4 @@
-import { Observable } from 'rxjs'
-import { getLocaleDirection, NgClass, NgIf, NgFor } from '@angular/common'
+import { getLocaleDirection, NgClass, NgFor, NgIf } from '@angular/common'
import {
Component,
ElementRef,
@@ -13,23 +12,24 @@ import {
SimpleChanges,
ViewChild
} from '@angular/core'
+import { FormsModule, ReactiveFormsModule } from '@angular/forms'
import { Notifier, User } from '@app/core'
import { VIDEO_COMMENT_TEXT_VALIDATOR } from '@app/shared/form-validators/video-comment-validators'
import { FormReactive } from '@app/shared/shared-forms/form-reactive'
import { FormReactiveService } from '@app/shared/shared-forms/form-reactive.service'
-import { NgbModal } from '@ng-bootstrap/ng-bootstrap'
-import { VideoCommentCreate } from '@peertube/peertube-models'
-import { LoginLinkComponent } from '../../../../shared/shared-main/angular/login-link.component'
-import { RemoteSubscribeComponent } from '../../../../shared/shared-user-subscription/remote-subscribe.component'
-import { GlobalIconComponent } from '../../../../shared/shared-icons/global-icon.component'
-import { PeerTubeTemplateDirective } from '../../../../shared/shared-main/angular/peertube-template.directive'
-import { HelpComponent } from '../../../../shared/shared-main/misc/help.component'
-import { TextareaAutoResizeDirective } from '../../../../shared/shared-forms/textarea-autoresize.directive'
-import { ActorAvatarComponent } from '../../../../shared/shared-actor-image/actor-avatar.component'
-import { FormsModule, ReactiveFormsModule } from '@angular/forms'
+import { LoginLinkComponent } from '@app/shared/shared-main/users/login-link.component'
import { Video } from '@app/shared/shared-main/video/video.model'
import { VideoComment } from '@app/shared/shared-video-comment/video-comment.model'
import { VideoCommentService } from '@app/shared/shared-video-comment/video-comment.service'
+import { NgbModal } from '@ng-bootstrap/ng-bootstrap'
+import { VideoCommentCreate } from '@peertube/peertube-models'
+import { Observable } from 'rxjs'
+import { ActorAvatarComponent } from '../../../../shared/shared-actor-image/actor-avatar.component'
+import { TextareaAutoResizeDirective } from '../../../../shared/shared-forms/textarea-autoresize.directive'
+import { GlobalIconComponent } from '../../../../shared/shared-icons/global-icon.component'
+import { HelpComponent } from '../../../../shared/shared-main/buttons/help.component'
+import { PeerTubeTemplateDirective } from '../../../../shared/shared-main/common/peertube-template.directive'
+import { RemoteSubscribeComponent } from '../../../../shared/shared-user-subscription/remote-subscribe.component'
@Component({
selector: 'my-video-comment-add',
diff --git a/client/src/app/+videos/+video-watch/shared/comment/video-comment.component.ts b/client/src/app/+videos/+video-watch/shared/comment/video-comment.component.ts
index 24fac1a04..a47e3df5d 100644
--- a/client/src/app/+videos/+video-watch/shared/comment/video-comment.component.ts
+++ b/client/src/app/+videos/+video-watch/shared/comment/video-comment.component.ts
@@ -11,7 +11,7 @@ import { VideoCommentThreadTree } from '@app/shared/shared-video-comment/video-c
import { VideoComment } from '@app/shared/shared-video-comment/video-comment.model'
import { User, UserRight } from '@peertube/peertube-models'
import { ActorAvatarComponent } from '../../../../shared/shared-actor-image/actor-avatar.component'
-import { FromNowPipe } from '../../../../shared/shared-main/angular/from-now.pipe'
+import { FromNowPipe } from '../../../../shared/shared-main/date/from-now.pipe'
import { UserModerationDropdownComponent } from '../../../../shared/shared-moderation/user-moderation-dropdown.component'
import { TimestampRouteTransformerDirective } from '../timestamp-route-transformer.directive'
import { VideoCommentAddComponent } from './video-comment-add.component'
diff --git a/client/src/app/+videos/+video-watch/shared/comment/video-comments.component.ts b/client/src/app/+videos/+video-watch/shared/comment/video-comments.component.ts
index e88b1699c..2eeda38bf 100644
--- a/client/src/app/+videos/+video-watch/shared/comment/video-comments.component.ts
+++ b/client/src/app/+videos/+video-watch/shared/comment/video-comments.component.ts
@@ -11,9 +11,9 @@ import { VideoCommentService } from '@app/shared/shared-video-comment/video-comm
import { NgbDropdown, NgbDropdownButtonItem, NgbDropdownItem, NgbDropdownMenu, NgbDropdownToggle } from '@ng-bootstrap/ng-bootstrap'
import { PeerTubeProblemDocument, ServerErrorCode, VideoCommentPolicy } from '@peertube/peertube-models'
import { Subject, Subscription } from 'rxjs'
-import { InfiniteScrollerDirective } from '../../../../shared/shared-main/angular/infinite-scroller.directive'
+import { InfiniteScrollerDirective } from '../../../../shared/shared-main/common/infinite-scroller.directive'
import { FeedComponent } from '../../../../shared/shared-main/feeds/feed.component'
-import { LoaderComponent } from '../../../../shared/shared-main/loaders/loader.component'
+import { LoaderComponent } from '../../../../shared/shared-main/common/loader.component'
import { VideoCommentAddComponent } from './video-comment-add.component'
import { VideoCommentComponent } from './video-comment.component'
diff --git a/client/src/app/+videos/+video-watch/shared/metadata/video-attributes.component.ts b/client/src/app/+videos/+video-watch/shared/metadata/video-attributes.component.ts
index 269ab8782..3ec01dc64 100644
--- a/client/src/app/+videos/+video-watch/shared/metadata/video-attributes.component.ts
+++ b/client/src/app/+videos/+video-watch/shared/metadata/video-attributes.component.ts
@@ -1,7 +1,7 @@
import { Component, Input, OnInit } from '@angular/core'
import { HooksService } from '@app/core'
import { VideoDetails } from '@app/shared/shared-main/video/video-details.model'
-import { TimeDurationFormatterPipe } from '../../../../shared/shared-main/angular/time-duration-formatter.pipe'
+import { TimeDurationFormatterPipe } from '../../../../shared/shared-main/date/time-duration-formatter.pipe'
import { GlobalIconComponent } from '../../../../shared/shared-icons/global-icon.component'
import { RouterLink } from '@angular/router'
import { NgIf, NgFor, DatePipe } from '@angular/common'
diff --git a/client/src/app/+videos/+video-watch/shared/player-widgets/video-transcription.component.ts b/client/src/app/+videos/+video-watch/shared/player-widgets/video-transcription.component.ts
index caae5fa9c..cab376156 100644
--- a/client/src/app/+videos/+video-watch/shared/player-widgets/video-transcription.component.ts
+++ b/client/src/app/+videos/+video-watch/shared/player-widgets/video-transcription.component.ts
@@ -23,7 +23,7 @@ import debug from 'debug'
import { debounceTime, distinctUntilChanged, Subject } from 'rxjs'
import { SelectOptionsItem } from 'src/types'
import { GlobalIconComponent } from '../../../../shared/shared-icons/global-icon.component'
-import { Nl2BrPipe } from '../../../../shared/shared-main/angular/nl2br.pipe'
+import { Nl2BrPipe } from '../../../../shared/shared-main/common/nl2br.pipe'
const debugLogger = debug('peertube:watch:VideoTranscriptionComponent')
diff --git a/client/src/app/+videos/+video-watch/shared/player-widgets/video-watch-playlist.component.ts b/client/src/app/+videos/+video-watch/shared/player-widgets/video-watch-playlist.component.ts
index 85601fd8a..f0fc359ca 100644
--- a/client/src/app/+videos/+video-watch/shared/player-widgets/video-watch-playlist.component.ts
+++ b/client/src/app/+videos/+video-watch/shared/player-widgets/video-watch-playlist.component.ts
@@ -8,7 +8,7 @@ import { VideoPlaylistPrivacy } from '@peertube/peertube-models'
import { VideoPlaylistElementMiniatureComponent } from '../../../../shared/shared-video-playlist/video-playlist-element-miniature.component'
import { GlobalIconComponent } from '../../../../shared/shared-icons/global-icon.component'
import { NgbTooltip } from '@ng-bootstrap/ng-bootstrap'
-import { InfiniteScrollerDirective } from '../../../../shared/shared-main/angular/infinite-scroller.directive'
+import { InfiniteScrollerDirective } from '../../../../shared/shared-main/common/infinite-scroller.directive'
import { NgIf, NgClass, NgFor } from '@angular/common'
import { VideoPlaylist } from '@app/shared/shared-video-playlist/video-playlist.model'
import { VideoPlaylistElement } from '@app/shared/shared-video-playlist/video-playlist-element.model'
diff --git a/client/src/app/+videos/video-list/overview/video-overview.component.ts b/client/src/app/+videos/video-list/overview/video-overview.component.ts
index 3aaf338ba..f5bf7dba0 100644
--- a/client/src/app/+videos/video-list/overview/video-overview.component.ts
+++ b/client/src/app/+videos/video-list/overview/video-overview.component.ts
@@ -7,7 +7,7 @@ import { VideosOverview } from './videos-overview.model'
import { ActorAvatarComponent } from '../../../shared/shared-actor-image/actor-avatar.component'
import { VideoMiniatureComponent } from '../../../shared/shared-video-miniature/video-miniature.component'
import { RouterLink } from '@angular/router'
-import { InfiniteScrollerDirective } from '../../../shared/shared-main/angular/infinite-scroller.directive'
+import { InfiniteScrollerDirective } from '../../../shared/shared-main/common/infinite-scroller.directive'
import { NgIf, NgFor } from '@angular/common'
@Component({
diff --git a/client/src/app/menu/menu.component.ts b/client/src/app/menu/menu.component.ts
index b77cbd298..6a436782e 100644
--- a/client/src/app/menu/menu.component.ts
+++ b/client/src/app/menu/menu.component.ts
@@ -18,9 +18,9 @@ import { scrollToTop } from '@app/helpers'
import { ActorAvatarComponent } from '@app/shared/shared-actor-image/actor-avatar.component'
import { InputSwitchComponent } from '@app/shared/shared-forms/input-switch.component'
import { GlobalIconComponent } from '@app/shared/shared-icons/global-icon.component'
-import { SignupLabelComponent } from '@app/shared/shared-main/account/signup-label.component'
-import { LoginLinkComponent } from '@app/shared/shared-main/angular/login-link.component'
import { PeertubeModalService } from '@app/shared/shared-main/peertube-modal/peertube-modal.service'
+import { LoginLinkComponent } from '@app/shared/shared-main/users/login-link.component'
+import { SignupLabelComponent } from '@app/shared/shared-main/users/signup-label.component'
import { NgbDropdown, NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap'
import { HTMLServerConfig, ServerConfig, UserRight, UserRightType, VideoConstant } from '@peertube/peertube-models'
import debug from 'debug'
diff --git a/client/src/app/menu/notification-dropdown.component.ts b/client/src/app/menu/notification-dropdown.component.ts
index aca938eb7..f22fe100b 100644
--- a/client/src/app/menu/notification-dropdown.component.ts
+++ b/client/src/app/menu/notification-dropdown.component.ts
@@ -3,7 +3,7 @@ import { Component, EventEmitter, OnDestroy, OnInit, Output, ViewChild } from '@
import { NavigationEnd, Router, RouterLink, RouterLinkActive } from '@angular/router'
import { Notifier, PeerTubeSocket, ScreenService } from '@app/core'
import { GlobalIconComponent } from '@app/shared/shared-icons/global-icon.component'
-import { LoaderComponent } from '@app/shared/shared-main/loaders/loader.component'
+import { LoaderComponent } from '@app/shared/shared-main/common/loader.component'
import { UserNotificationService } from '@app/shared/shared-main/users/user-notification.service'
import { UserNotificationsComponent } from '@app/shared/standalone-notifications/user-notifications.component'
import { NgbDropdown, NgbDropdownModule, NgbPopoverModule } from '@ng-bootstrap/ng-bootstrap'
diff --git a/client/src/app/shared/shared-abuse-list/abuse-list-table.component.ts b/client/src/app/shared/shared-abuse-list/abuse-list-table.component.ts
index 8fabe2abc..a348eabe7 100644
--- a/client/src/app/shared/shared-abuse-list/abuse-list-table.component.ts
+++ b/client/src/app/shared/shared-abuse-list/abuse-list-table.component.ts
@@ -9,7 +9,7 @@ import { AbuseMessageModalComponent } from './abuse-message-modal.component'
import { ModerationCommentModalComponent } from './moderation-comment-modal.component'
import { ProcessedAbuse } from './processed-abuse.model'
import { AbuseDetailsComponent } from './abuse-details.component'
-import { AutoColspanDirective } from '../shared-main/angular/auto-colspan.directive'
+import { AutoColspanDirective } from '../shared-main/common/auto-colspan.directive'
import { GlobalIconComponent } from '../shared-icons/global-icon.component'
import { VideoCellComponent } from '../shared-tables/video-cell.component'
import { ActorAvatarComponent } from '../shared-actor-image/actor-avatar.component'
diff --git a/client/src/app/shared/shared-actor-image/actor-avatar.component.ts b/client/src/app/shared/shared-actor-image/actor-avatar.component.ts
index 2956718b4..02b8ded73 100644
--- a/client/src/app/shared/shared-actor-image/actor-avatar.component.ts
+++ b/client/src/app/shared/shared-actor-image/actor-avatar.component.ts
@@ -3,7 +3,7 @@ import { Account } from '../shared-main/account/account.model'
import { objectKeysTyped } from '@peertube/peertube-core-utils'
import { RouterLink } from '@angular/router'
import { NgIf, NgClass, NgTemplateOutlet } from '@angular/common'
-import { VideoChannel } from '../shared-main/video-channel/video-channel.model'
+import { VideoChannel } from '../shared-main/channel/video-channel.model'
export type ActorAvatarInput = {
name: string
diff --git a/client/src/app/shared/shared-custom-markup/peertube-custom-tags/button-markup.component.ts b/client/src/app/shared/shared-custom-markup/peertube-custom-tags/button-markup.component.ts
index bea0eda98..49acba7da 100644
--- a/client/src/app/shared/shared-custom-markup/peertube-custom-tags/button-markup.component.ts
+++ b/client/src/app/shared/shared-custom-markup/peertube-custom-tags/button-markup.component.ts
@@ -1,7 +1,7 @@
import { ChangeDetectionStrategy, Component, Input } from '@angular/core'
import { CustomMarkupComponent } from './shared'
import { NgClass } from '@angular/common'
-import { VideoChannel } from '@app/shared/shared-main/video-channel/video-channel.model'
+import { VideoChannel } from '@app/shared/shared-main/channel/video-channel.model'
/*
* Markup component that creates a button
diff --git a/client/src/app/shared/shared-custom-markup/peertube-custom-tags/channel-miniature-markup.component.ts b/client/src/app/shared/shared-custom-markup/peertube-custom-tags/channel-miniature-markup.component.ts
index 39393c314..a4b54385b 100644
--- a/client/src/app/shared/shared-custom-markup/peertube-custom-tags/channel-miniature-markup.component.ts
+++ b/client/src/app/shared/shared-custom-markup/peertube-custom-tags/channel-miniature-markup.component.ts
@@ -9,7 +9,7 @@ import { RouterLink } from '@angular/router'
import { ActorAvatarComponent } from '../../shared-actor-image/actor-avatar.component'
import { NgIf } from '@angular/common'
import { VideoService } from '@app/shared/shared-main/video/video.service'
-import { VideoChannel } from '@app/shared/shared-main/video-channel/video-channel.model'
+import { VideoChannel } from '@app/shared/shared-main/channel/video-channel.model'
import { Video } from '@app/shared/shared-main/video/video.model'
import { FindInBulkService } from '@app/shared/shared-search/find-in-bulk.service'
diff --git a/client/src/app/shared/shared-forms/dynamic-form-field.component.ts b/client/src/app/shared/shared-forms/dynamic-form-field.component.ts
index a1ed2d154..5b17a3d0e 100644
--- a/client/src/app/shared/shared-forms/dynamic-form-field.component.ts
+++ b/client/src/app/shared/shared-forms/dynamic-form-field.component.ts
@@ -2,7 +2,7 @@ import { Component, Input } from '@angular/core'
import { FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms'
import { RegisterClientFormFieldOptions } from '@peertube/peertube-models'
import { MarkdownTextareaComponent } from './markdown-textarea.component'
-import { HelpComponent } from '../shared-main/misc/help.component'
+import { HelpComponent } from '../shared-main/buttons/help.component'
import { InputTextComponent } from './input-text.component'
import { PeertubeCheckboxComponent } from './peertube-checkbox.component'
import { NgIf, NgFor } from '@angular/common'
diff --git a/client/src/app/shared/shared-forms/peertube-checkbox.component.ts b/client/src/app/shared/shared-forms/peertube-checkbox.component.ts
index 6c78afa84..67a9d0eb7 100644
--- a/client/src/app/shared/shared-forms/peertube-checkbox.component.ts
+++ b/client/src/app/shared/shared-forms/peertube-checkbox.component.ts
@@ -1,8 +1,8 @@
import { AfterContentInit, Component, ContentChildren, forwardRef, Input, QueryList, TemplateRef } from '@angular/core'
import { ControlValueAccessor, NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms'
-import { HelpComponent } from '../shared-main/misc/help.component'
+import { HelpComponent } from '../shared-main/buttons/help.component'
import { NgIf, NgTemplateOutlet } from '@angular/common'
-import { PeerTubeTemplateDirective } from '../shared-main/angular/peertube-template.directive'
+import { PeerTubeTemplateDirective } from '../shared-main/common/peertube-template.directive'
@Component({
selector: 'my-peertube-checkbox',
diff --git a/client/src/app/shared/shared-forms/preview-upload.component.ts b/client/src/app/shared/shared-forms/preview-upload.component.ts
index 10c159d7f..0ce329971 100644
--- a/client/src/app/shared/shared-forms/preview-upload.component.ts
+++ b/client/src/app/shared/shared-forms/preview-upload.component.ts
@@ -5,7 +5,7 @@ import { imageToDataURL } from '@root-helpers/images'
import { HTMLServerConfig } from '@peertube/peertube-models'
import { NgIf, NgStyle } from '@angular/common'
import { ReactiveFileComponent } from './reactive-file.component'
-import { BytesPipe } from '../shared-main/angular/bytes.pipe'
+import { BytesPipe } from '../shared-main/common/bytes.pipe'
@Component({
selector: 'my-preview-upload',
diff --git a/client/src/app/shared/shared-forms/select/select-channel.component.ts b/client/src/app/shared/shared-forms/select/select-channel.component.ts
index 4b5f888ff..c1cc72fab 100644
--- a/client/src/app/shared/shared-forms/select/select-channel.component.ts
+++ b/client/src/app/shared/shared-forms/select/select-channel.component.ts
@@ -3,7 +3,7 @@ import { ControlValueAccessor, NG_VALUE_ACCESSOR, FormsModule } from '@angular/f
import { SelectChannelItem } from '../../../../types/select-options-item.model'
import { NgFor } from '@angular/common'
import { NgSelectModule } from '@ng-select/ng-select'
-import { VideoChannel } from '@app/shared/shared-main/video-channel/video-channel.model'
+import { VideoChannel } from '@app/shared/shared-main/channel/video-channel.model'
@Component({
selector: 'my-select-channel',
diff --git a/client/src/app/shared/shared-instance/instance-features-table.component.ts b/client/src/app/shared/shared-instance/instance-features-table.component.ts
index 53897b667..0348bca4c 100644
--- a/client/src/app/shared/shared-instance/instance-features-table.component.ts
+++ b/client/src/app/shared/shared-instance/instance-features-table.component.ts
@@ -2,12 +2,12 @@ import { Component, OnInit } from '@angular/core'
import { ServerService } from '@app/core'
import { formatICU } from '@app/helpers'
import { ServerConfig, ServerStats } from '@peertube/peertube-models'
-import { BytesPipe } from '../shared-main/angular/bytes.pipe'
-import { PeerTubeTemplateDirective } from '../shared-main/angular/peertube-template.directive'
-import { HelpComponent } from '../shared-main/misc/help.component'
+import { BytesPipe } from '../shared-main/common/bytes.pipe'
+import { PeerTubeTemplateDirective } from '../shared-main/common/peertube-template.directive'
+import { HelpComponent } from '../shared-main/buttons/help.component'
import { FeatureBooleanComponent } from './feature-boolean.component'
import { NgIf, NgFor } from '@angular/common'
-import { DaysDurationFormatterPipe } from '../shared-main/angular/days-duration-formatter.pipe'
+import { DaysDurationFormatterPipe } from '../shared-main/date/days-duration-formatter.pipe'
@Component({
selector: 'my-instance-features-table',
diff --git a/client/src/app/shared/shared-main/buttons/button.component.ts b/client/src/app/shared/shared-main/buttons/button.component.ts
index 1534343d1..f61c4abab 100644
--- a/client/src/app/shared/shared-main/buttons/button.component.ts
+++ b/client/src/app/shared/shared-main/buttons/button.component.ts
@@ -1,7 +1,7 @@
import { ChangeDetectionStrategy, Component, Input, OnChanges, OnInit, booleanAttribute } from '@angular/core'
import { GlobalIconName } from '@app/shared/shared-icons/global-icon.component'
import { GlobalIconComponent } from '../../shared-icons/global-icon.component'
-import { LoaderComponent } from '../loaders/loader.component'
+import { LoaderComponent } from '../common/loader.component'
import { RouterLink } from '@angular/router'
import { NgbTooltip } from '@ng-bootstrap/ng-bootstrap'
import { NgIf, NgClass, NgTemplateOutlet } from '@angular/common'
diff --git a/client/src/app/shared/shared-main/misc/help.component.html b/client/src/app/shared/shared-main/buttons/help.component.html
similarity index 100%
rename from client/src/app/shared/shared-main/misc/help.component.html
rename to client/src/app/shared/shared-main/buttons/help.component.html
diff --git a/client/src/app/shared/shared-main/misc/help.component.scss b/client/src/app/shared/shared-main/buttons/help.component.scss
similarity index 100%
rename from client/src/app/shared/shared-main/misc/help.component.scss
rename to client/src/app/shared/shared-main/buttons/help.component.scss
diff --git a/client/src/app/shared/shared-main/misc/help.component.ts b/client/src/app/shared/shared-main/buttons/help.component.ts
similarity index 97%
rename from client/src/app/shared/shared-main/misc/help.component.ts
rename to client/src/app/shared/shared-main/buttons/help.component.ts
index 17f97392c..8bf94276a 100644
--- a/client/src/app/shared/shared-main/misc/help.component.ts
+++ b/client/src/app/shared/shared-main/buttons/help.component.ts
@@ -4,7 +4,7 @@ import { ENHANCED_RULES, TEXT_RULES } from '@peertube/peertube-core-utils'
import { GlobalIconComponent } from '../../shared-icons/global-icon.component'
import { NgbPopover } from '@ng-bootstrap/ng-bootstrap'
import { NgIf, NgTemplateOutlet } from '@angular/common'
-import { PeerTubeTemplateDirective } from '../angular/peertube-template.directive'
+import { PeerTubeTemplateDirective } from '../common/peertube-template.directive'
@Component({
selector: 'my-help',
diff --git a/client/src/app/shared/shared-main/misc/channels-setup-message.component.html b/client/src/app/shared/shared-main/channel/channels-setup-message.component.html
similarity index 100%
rename from client/src/app/shared/shared-main/misc/channels-setup-message.component.html
rename to client/src/app/shared/shared-main/channel/channels-setup-message.component.html
diff --git a/client/src/app/shared/shared-main/misc/channels-setup-message.component.scss b/client/src/app/shared/shared-main/channel/channels-setup-message.component.scss
similarity index 100%
rename from client/src/app/shared/shared-main/misc/channels-setup-message.component.scss
rename to client/src/app/shared/shared-main/channel/channels-setup-message.component.scss
diff --git a/client/src/app/shared/shared-main/misc/channels-setup-message.component.ts b/client/src/app/shared/shared-main/channel/channels-setup-message.component.ts
similarity index 93%
rename from client/src/app/shared/shared-main/misc/channels-setup-message.component.ts
rename to client/src/app/shared/shared-main/channel/channels-setup-message.component.ts
index 9df43ca04..a87c8b88b 100644
--- a/client/src/app/shared/shared-main/misc/channels-setup-message.component.ts
+++ b/client/src/app/shared/shared-main/channel/channels-setup-message.component.ts
@@ -3,7 +3,7 @@ import { AuthService, User } from '@app/core'
import { RouterLink } from '@angular/router'
import { GlobalIconComponent } from '../../shared-icons/global-icon.component'
import { NgIf } from '@angular/common'
-import { VideoChannel } from '../video-channel/video-channel.model'
+import { VideoChannel } from './video-channel.model'
@Component({
selector: 'my-channels-setup-message',
diff --git a/client/src/app/shared/shared-main/video-channel-sync/video-channel-sync.service.ts b/client/src/app/shared/shared-main/channel/video-channel-sync.service.ts
similarity index 100%
rename from client/src/app/shared/shared-main/video-channel-sync/video-channel-sync.service.ts
rename to client/src/app/shared/shared-main/channel/video-channel-sync.service.ts
diff --git a/client/src/app/shared/shared-main/video-channel/video-channel.model.ts b/client/src/app/shared/shared-main/channel/video-channel.model.ts
similarity index 100%
rename from client/src/app/shared/shared-main/video-channel/video-channel.model.ts
rename to client/src/app/shared/shared-main/channel/video-channel.model.ts
diff --git a/client/src/app/shared/shared-main/video-channel/video-channel.service.ts b/client/src/app/shared/shared-main/channel/video-channel.service.ts
similarity index 100%
rename from client/src/app/shared/shared-main/video-channel/video-channel.service.ts
rename to client/src/app/shared/shared-main/channel/video-channel.service.ts
diff --git a/client/src/app/shared/shared-main/angular/auto-colspan.directive.ts b/client/src/app/shared/shared-main/common/auto-colspan.directive.ts
similarity index 100%
rename from client/src/app/shared/shared-main/angular/auto-colspan.directive.ts
rename to client/src/app/shared/shared-main/common/auto-colspan.directive.ts
diff --git a/client/src/app/shared/shared-main/angular/autofocus.directive.ts b/client/src/app/shared/shared-main/common/autofocus.directive.ts
similarity index 100%
rename from client/src/app/shared/shared-main/angular/autofocus.directive.ts
rename to client/src/app/shared/shared-main/common/autofocus.directive.ts
diff --git a/client/src/app/shared/shared-main/angular/bytes.pipe.ts b/client/src/app/shared/shared-main/common/bytes.pipe.ts
similarity index 100%
rename from client/src/app/shared/shared-main/angular/bytes.pipe.ts
rename to client/src/app/shared/shared-main/common/bytes.pipe.ts
diff --git a/client/src/app/shared/shared-main/angular/defer-loading.directive.ts b/client/src/app/shared/shared-main/common/defer-loading.directive.ts
similarity index 100%
rename from client/src/app/shared/shared-main/angular/defer-loading.directive.ts
rename to client/src/app/shared/shared-main/common/defer-loading.directive.ts
diff --git a/client/src/app/shared/shared-main/angular/infinite-scroller.directive.ts b/client/src/app/shared/shared-main/common/infinite-scroller.directive.ts
similarity index 100%
rename from client/src/app/shared/shared-main/angular/infinite-scroller.directive.ts
rename to client/src/app/shared/shared-main/common/infinite-scroller.directive.ts
diff --git a/client/src/app/shared/shared-main/angular/link.component.html b/client/src/app/shared/shared-main/common/link.component.html
similarity index 100%
rename from client/src/app/shared/shared-main/angular/link.component.html
rename to client/src/app/shared/shared-main/common/link.component.html
diff --git a/client/src/app/shared/shared-main/angular/link.component.scss b/client/src/app/shared/shared-main/common/link.component.scss
similarity index 100%
rename from client/src/app/shared/shared-main/angular/link.component.scss
rename to client/src/app/shared/shared-main/common/link.component.scss
diff --git a/client/src/app/shared/shared-main/angular/link.component.ts b/client/src/app/shared/shared-main/common/link.component.ts
similarity index 100%
rename from client/src/app/shared/shared-main/angular/link.component.ts
rename to client/src/app/shared/shared-main/common/link.component.ts
diff --git a/client/src/app/shared/shared-main/loaders/loader.component.ts b/client/src/app/shared/shared-main/common/loader.component.ts
similarity index 100%
rename from client/src/app/shared/shared-main/loaders/loader.component.ts
rename to client/src/app/shared/shared-main/common/loader.component.ts
diff --git a/client/src/app/shared/shared-main/angular/nl2br.pipe.ts b/client/src/app/shared/shared-main/common/nl2br.pipe.ts
similarity index 100%
rename from client/src/app/shared/shared-main/angular/nl2br.pipe.ts
rename to client/src/app/shared/shared-main/common/nl2br.pipe.ts
diff --git a/client/src/app/shared/shared-main/angular/number-formatter.pipe.ts b/client/src/app/shared/shared-main/common/number-formatter.pipe.ts
similarity index 100%
rename from client/src/app/shared/shared-main/angular/number-formatter.pipe.ts
rename to client/src/app/shared/shared-main/common/number-formatter.pipe.ts
diff --git a/client/src/app/shared/shared-main/angular/peertube-template.directive.ts b/client/src/app/shared/shared-main/common/peertube-template.directive.ts
similarity index 100%
rename from client/src/app/shared/shared-main/angular/peertube-template.directive.ts
rename to client/src/app/shared/shared-main/common/peertube-template.directive.ts
diff --git a/client/src/app/shared/shared-main/misc/progress-bar.component.html b/client/src/app/shared/shared-main/common/progress-bar.component.html
similarity index 100%
rename from client/src/app/shared/shared-main/misc/progress-bar.component.html
rename to client/src/app/shared/shared-main/common/progress-bar.component.html
diff --git a/client/src/app/shared/shared-main/misc/progress-bar.component.scss b/client/src/app/shared/shared-main/common/progress-bar.component.scss
similarity index 100%
rename from client/src/app/shared/shared-main/misc/progress-bar.component.scss
rename to client/src/app/shared/shared-main/common/progress-bar.component.scss
diff --git a/client/src/app/shared/shared-main/misc/progress-bar.component.ts b/client/src/app/shared/shared-main/common/progress-bar.component.ts
similarity index 100%
rename from client/src/app/shared/shared-main/misc/progress-bar.component.ts
rename to client/src/app/shared/shared-main/common/progress-bar.component.ts
diff --git a/client/src/app/shared/shared-main/date/date-toggle.component.ts b/client/src/app/shared/shared-main/date/date-toggle.component.ts
index 55d8370a8..f310f88ec 100644
--- a/client/src/app/shared/shared-main/date/date-toggle.component.ts
+++ b/client/src/app/shared/shared-main/date/date-toggle.component.ts
@@ -1,5 +1,5 @@
import { Component, Input, OnChanges } from '@angular/core'
-import { FromNowPipe } from '../angular/from-now.pipe'
+import { FromNowPipe } from './from-now.pipe'
@Component({
selector: 'my-date-toggle',
diff --git a/client/src/app/shared/shared-main/angular/days-duration-formatter.pipe.ts b/client/src/app/shared/shared-main/date/days-duration-formatter.pipe.ts
similarity index 100%
rename from client/src/app/shared/shared-main/angular/days-duration-formatter.pipe.ts
rename to client/src/app/shared/shared-main/date/days-duration-formatter.pipe.ts
diff --git a/client/src/app/shared/shared-main/angular/from-now.pipe.ts b/client/src/app/shared/shared-main/date/from-now.pipe.ts
similarity index 100%
rename from client/src/app/shared/shared-main/angular/from-now.pipe.ts
rename to client/src/app/shared/shared-main/date/from-now.pipe.ts
diff --git a/client/src/app/shared/shared-main/angular/time-duration-formatter.pipe.ts b/client/src/app/shared/shared-main/date/time-duration-formatter.pipe.ts
similarity index 100%
rename from client/src/app/shared/shared-main/angular/time-duration-formatter.pipe.ts
rename to client/src/app/shared/shared-main/date/time-duration-formatter.pipe.ts
diff --git a/client/src/app/shared/shared-main/main-providers.ts b/client/src/app/shared/shared-main/main-providers.ts
index 86a78da1d..78e63c851 100644
--- a/client/src/app/shared/shared-main/main-providers.ts
+++ b/client/src/app/shared/shared-main/main-providers.ts
@@ -1,14 +1,15 @@
import { DatePipe } from '@angular/common'
import { AccountService } from './account/account.service'
-import { FromNowPipe } from './angular/from-now.pipe'
-import { UserHistoryService } from './users/user-history.service'
-import { UserNotificationService } from './users/user-notification.service'
import { AUTH_INTERCEPTOR_PROVIDER } from './auth/auth-interceptor.service'
+import { VideoChannelSyncService } from './channel/video-channel-sync.service'
+import { VideoChannelService } from './channel/video-channel.service'
import { CustomPageService } from './custom-page/custom-page.service'
+import { FromNowPipe } from './date/from-now.pipe'
import { InstanceService } from './instance/instance.service'
import { ActorRedirectGuard } from './router/actor-redirect-guard.service'
+import { UserHistoryService } from './users/user-history.service'
+import { UserNotificationService } from './users/user-notification.service'
import { VideoCaptionService } from './video-caption/video-caption.service'
-import { VideoChannelService } from './video-channel/video-channel.service'
import { RedundancyService } from './video/redundancy.service'
import { VideoChapterService } from './video/video-chapter.service'
import { VideoFileTokenService } from './video/video-file-token.service'
@@ -38,6 +39,7 @@ export function getMainProviders () {
VideoChapterService,
CustomPageService,
ActorRedirectGuard,
- InstanceService
+ InstanceService,
+ VideoChannelSyncService
]
}
diff --git a/client/src/app/shared/shared-main/misc/list-overflow.component.html b/client/src/app/shared/shared-main/menu/list-overflow.component.html
similarity index 100%
rename from client/src/app/shared/shared-main/misc/list-overflow.component.html
rename to client/src/app/shared/shared-main/menu/list-overflow.component.html
diff --git a/client/src/app/shared/shared-main/misc/list-overflow.component.scss b/client/src/app/shared/shared-main/menu/list-overflow.component.scss
similarity index 100%
rename from client/src/app/shared/shared-main/misc/list-overflow.component.scss
rename to client/src/app/shared/shared-main/menu/list-overflow.component.scss
diff --git a/client/src/app/shared/shared-main/misc/list-overflow.component.ts b/client/src/app/shared/shared-main/menu/list-overflow.component.ts
similarity index 100%
rename from client/src/app/shared/shared-main/misc/list-overflow.component.ts
rename to client/src/app/shared/shared-main/menu/list-overflow.component.ts
diff --git a/client/src/app/shared/shared-main/misc/top-menu-dropdown.component.html b/client/src/app/shared/shared-main/menu/top-menu-dropdown.component.html
similarity index 100%
rename from client/src/app/shared/shared-main/misc/top-menu-dropdown.component.html
rename to client/src/app/shared/shared-main/menu/top-menu-dropdown.component.html
diff --git a/client/src/app/shared/shared-main/misc/top-menu-dropdown.component.scss b/client/src/app/shared/shared-main/menu/top-menu-dropdown.component.scss
similarity index 100%
rename from client/src/app/shared/shared-main/misc/top-menu-dropdown.component.scss
rename to client/src/app/shared/shared-main/menu/top-menu-dropdown.component.scss
diff --git a/client/src/app/shared/shared-main/misc/top-menu-dropdown.component.ts b/client/src/app/shared/shared-main/menu/top-menu-dropdown.component.ts
similarity index 100%
rename from client/src/app/shared/shared-main/misc/top-menu-dropdown.component.ts
rename to client/src/app/shared/shared-main/menu/top-menu-dropdown.component.ts
diff --git a/client/src/app/shared/shared-main/router/actor-redirect-guard.service.ts b/client/src/app/shared/shared-main/router/actor-redirect-guard.service.ts
index fc851fb9f..4ec9e2f62 100644
--- a/client/src/app/shared/shared-main/router/actor-redirect-guard.service.ts
+++ b/client/src/app/shared/shared-main/router/actor-redirect-guard.service.ts
@@ -3,7 +3,7 @@ import { catchError, map } from 'rxjs/operators'
import { Injectable } from '@angular/core'
import { ActivatedRouteSnapshot, Router } from '@angular/router'
import { AccountService } from '../account/account.service'
-import { VideoChannelService } from '../video-channel/video-channel.service'
+import { VideoChannelService } from '../channel/video-channel.service'
@Injectable()
export class ActorRedirectGuard {
diff --git a/client/src/app/shared/shared-main/misc/simple-search-input.component.html b/client/src/app/shared/shared-main/search/simple-search-input.component.html
similarity index 100%
rename from client/src/app/shared/shared-main/misc/simple-search-input.component.html
rename to client/src/app/shared/shared-main/search/simple-search-input.component.html
diff --git a/client/src/app/shared/shared-main/misc/simple-search-input.component.scss b/client/src/app/shared/shared-main/search/simple-search-input.component.scss
similarity index 100%
rename from client/src/app/shared/shared-main/misc/simple-search-input.component.scss
rename to client/src/app/shared/shared-main/search/simple-search-input.component.scss
diff --git a/client/src/app/shared/shared-main/misc/simple-search-input.component.ts b/client/src/app/shared/shared-main/search/simple-search-input.component.ts
similarity index 100%
rename from client/src/app/shared/shared-main/misc/simple-search-input.component.ts
rename to client/src/app/shared/shared-main/search/simple-search-input.component.ts
diff --git a/client/src/app/shared/shared-main/angular/login-link.component.html b/client/src/app/shared/shared-main/users/login-link.component.html
similarity index 100%
rename from client/src/app/shared/shared-main/angular/login-link.component.html
rename to client/src/app/shared/shared-main/users/login-link.component.html
diff --git a/client/src/app/shared/shared-main/angular/login-link.component.ts b/client/src/app/shared/shared-main/users/login-link.component.ts
similarity index 91%
rename from client/src/app/shared/shared-main/angular/login-link.component.ts
rename to client/src/app/shared/shared-main/users/login-link.component.ts
index 82107b07d..af91f154f 100644
--- a/client/src/app/shared/shared-main/angular/login-link.component.ts
+++ b/client/src/app/shared/shared-main/users/login-link.component.ts
@@ -1,8 +1,8 @@
-import { environment } from 'src/environments/environment'
import { Component, Input } from '@angular/core'
import { ServerService } from '@app/core'
import { PluginsManager } from '@root-helpers/plugins-manager'
-import { LinkComponent } from './link.component'
+import { environment } from 'src/environments/environment'
+import { LinkComponent } from '../common/link.component'
@Component({
selector: 'my-login-link',
diff --git a/client/src/app/shared/shared-main/account/signup-label.component.html b/client/src/app/shared/shared-main/users/signup-label.component.html
similarity index 100%
rename from client/src/app/shared/shared-main/account/signup-label.component.html
rename to client/src/app/shared/shared-main/users/signup-label.component.html
diff --git a/client/src/app/shared/shared-main/account/signup-label.component.ts b/client/src/app/shared/shared-main/users/signup-label.component.ts
similarity index 100%
rename from client/src/app/shared/shared-main/account/signup-label.component.ts
rename to client/src/app/shared/shared-main/users/signup-label.component.ts
diff --git a/client/src/app/shared/shared-main/users/user-notification.model.ts b/client/src/app/shared/shared-main/users/user-notification.model.ts
index 6870fb8cf..9989a68ed 100644
--- a/client/src/app/shared/shared-main/users/user-notification.model.ts
+++ b/client/src/app/shared/shared-main/users/user-notification.model.ts
@@ -1,7 +1,7 @@
import { AuthUser } from '@app/core'
import { Account } from '@app/shared/shared-main/account/account.model'
import { Actor } from '@app/shared/shared-main/account/actor.model'
-import { VideoChannel } from '@app/shared/shared-main/video-channel/video-channel.model'
+import { VideoChannel } from '@app/shared/shared-main/channel/video-channel.model'
import {
AbuseStateType,
ActorInfo,
diff --git a/client/src/app/shared/shared-main/users/user-quota.component.ts b/client/src/app/shared/shared-main/users/user-quota.component.ts
index 3e3ceabcf..73d9d6a41 100644
--- a/client/src/app/shared/shared-main/users/user-quota.component.ts
+++ b/client/src/app/shared/shared-main/users/user-quota.component.ts
@@ -2,8 +2,8 @@ import { NgIf } from '@angular/common'
import { Component, OnInit } from '@angular/core'
import { AuthService, UserService } from '@app/core'
import { first } from 'rxjs'
-import { BytesPipe } from '../angular/bytes.pipe'
-import { ProgressBarComponent } from '../misc/progress-bar.component'
+import { BytesPipe } from '../common/bytes.pipe'
+import { ProgressBarComponent } from '../common/progress-bar.component'
@Component({
selector: 'my-user-quota',
diff --git a/client/src/app/shared/shared-main/video/video-details.model.ts b/client/src/app/shared/shared-main/video/video-details.model.ts
index 11ad6adb1..31936edb2 100644
--- a/client/src/app/shared/shared-main/video/video-details.model.ts
+++ b/client/src/app/shared/shared-main/video/video-details.model.ts
@@ -1,5 +1,5 @@
import { Account } from '@app/shared/shared-main/account/account.model'
-import { VideoChannel } from '@app/shared/shared-main/video-channel/video-channel.model'
+import { VideoChannel } from '@app/shared/shared-main/channel/video-channel.model'
import {
VideoCommentPolicyType,
VideoConstant,
diff --git a/client/src/app/shared/shared-main/video/video.service.ts b/client/src/app/shared/shared-main/video/video.service.ts
index 455a0c780..c3e6f5722 100644
--- a/client/src/app/shared/shared-main/video/video.service.ts
+++ b/client/src/app/shared/shared-main/video/video.service.ts
@@ -33,8 +33,8 @@ import { catchError, concatMap, map, switchMap, toArray } from 'rxjs/operators'
import { environment } from '../../../../environments/environment'
import { Account } from '../account/account.model'
import { AccountService } from '../account/account.service'
-import { VideoChannel } from '../video-channel/video-channel.model'
-import { VideoChannelService } from '../video-channel/video-channel.service'
+import { VideoChannel } from '../channel/video-channel.model'
+import { VideoChannelService } from '../channel/video-channel.service'
import { VideoDetails } from './video-details.model'
import { VideoEdit } from './video-edit.model'
import { VideoPasswordService } from './video-password.service'
diff --git a/client/src/app/shared/shared-moderation/report-modals/account-report.component.ts b/client/src/app/shared/shared-moderation/report-modals/account-report.component.ts
index ae54cceee..8000dcb7b 100644
--- a/client/src/app/shared/shared-moderation/report-modals/account-report.component.ts
+++ b/client/src/app/shared/shared-moderation/report-modals/account-report.component.ts
@@ -9,7 +9,7 @@ import { NgbModalRef } from '@ng-bootstrap/ng-bootstrap/modal/modal-ref'
import { abusePredefinedReasonsMap } from '@peertube/peertube-core-utils'
import { AbusePredefinedReasonsString } from '@peertube/peertube-models'
import { AbuseService } from '../abuse.service'
-import { PeerTubeTemplateDirective } from '../../shared-main/angular/peertube-template.directive'
+import { PeerTubeTemplateDirective } from '../../shared-main/common/peertube-template.directive'
import { PeertubeCheckboxComponent } from '../../shared-forms/peertube-checkbox.component'
import { NgFor, NgIf, NgClass } from '@angular/common'
import { FormsModule, ReactiveFormsModule } from '@angular/forms'
diff --git a/client/src/app/shared/shared-moderation/report-modals/comment-report.component.ts b/client/src/app/shared/shared-moderation/report-modals/comment-report.component.ts
index 9a0956a70..470414427 100644
--- a/client/src/app/shared/shared-moderation/report-modals/comment-report.component.ts
+++ b/client/src/app/shared/shared-moderation/report-modals/comment-report.component.ts
@@ -9,7 +9,7 @@ import { NgbModalRef } from '@ng-bootstrap/ng-bootstrap/modal/modal-ref'
import { abusePredefinedReasonsMap } from '@peertube/peertube-core-utils'
import { AbusePredefinedReasonsString } from '@peertube/peertube-models'
import { AbuseService } from '../abuse.service'
-import { PeerTubeTemplateDirective } from '../../shared-main/angular/peertube-template.directive'
+import { PeerTubeTemplateDirective } from '../../shared-main/common/peertube-template.directive'
import { PeertubeCheckboxComponent } from '../../shared-forms/peertube-checkbox.component'
import { NgFor, NgIf, NgClass } from '@angular/common'
import { FormsModule, ReactiveFormsModule } from '@angular/forms'
diff --git a/client/src/app/shared/shared-moderation/report-modals/video-report.component.ts b/client/src/app/shared/shared-moderation/report-modals/video-report.component.ts
index 09ee2da5b..9fd788a36 100644
--- a/client/src/app/shared/shared-moderation/report-modals/video-report.component.ts
+++ b/client/src/app/shared/shared-moderation/report-modals/video-report.component.ts
@@ -11,7 +11,7 @@ import { AbusePredefinedReasonsString } from '@peertube/peertube-models'
import { AbuseService } from '../abuse.service'
import { TimestampInputComponent } from '../../shared-forms/timestamp-input.component'
import { EmbedComponent } from '../../shared-main/video/embed.component'
-import { PeerTubeTemplateDirective } from '../../shared-main/angular/peertube-template.directive'
+import { PeerTubeTemplateDirective } from '../../shared-main/common/peertube-template.directive'
import { PeertubeCheckboxComponent } from '../../shared-forms/peertube-checkbox.component'
import { NgFor, NgIf, NgClass } from '@angular/common'
import { FormsModule, ReactiveFormsModule } from '@angular/forms'
diff --git a/client/src/app/shared/shared-search/find-in-bulk.service.ts b/client/src/app/shared/shared-search/find-in-bulk.service.ts
index 62ec76986..443dd059c 100644
--- a/client/src/app/shared/shared-search/find-in-bulk.service.ts
+++ b/client/src/app/shared/shared-search/find-in-bulk.service.ts
@@ -5,7 +5,7 @@ import { Injectable } from '@angular/core'
import { buildBulkObservable } from '@app/helpers'
import { AdvancedSearch } from './advanced-search.model'
import { SearchService } from './search.service'
-import { VideoChannel } from '../shared-main/video-channel/video-channel.model'
+import { VideoChannel } from '../shared-main/channel/video-channel.model'
import { Video } from '../shared-main/video/video.model'
import { VideoPlaylist } from '../shared-video-playlist/video-playlist.model'
diff --git a/client/src/app/shared/shared-search/search.service.ts b/client/src/app/shared/shared-search/search.service.ts
index 49f726c55..e184682b6 100644
--- a/client/src/app/shared/shared-search/search.service.ts
+++ b/client/src/app/shared/shared-search/search.service.ts
@@ -12,9 +12,9 @@ import {
import { environment } from '../../../environments/environment'
import { AdvancedSearch } from './advanced-search.model'
import { Video } from '../shared-main/video/video.model'
-import { VideoChannel } from '../shared-main/video-channel/video-channel.model'
+import { VideoChannel } from '../shared-main/channel/video-channel.model'
import { VideoService } from '../shared-main/video/video.service'
-import { VideoChannelService } from '../shared-main/video-channel/video-channel.service'
+import { VideoChannelService } from '../shared-main/channel/video-channel.service'
import { VideoPlaylist } from '../shared-video-playlist/video-playlist.model'
import { VideoPlaylistService } from '../shared-video-playlist/video-playlist.service'
diff --git a/client/src/app/shared/shared-user-settings/user-video-settings.component.ts b/client/src/app/shared/shared-user-settings/user-video-settings.component.ts
index ad2dddf59..c5d3c2d49 100644
--- a/client/src/app/shared/shared-user-settings/user-video-settings.component.ts
+++ b/client/src/app/shared/shared-user-settings/user-video-settings.component.ts
@@ -10,8 +10,8 @@ import { NgIf } from '@angular/common'
import { RouterLink } from '@angular/router'
import { PeertubeCheckboxComponent } from '../shared-forms/peertube-checkbox.component'
import { SelectLanguagesComponent } from '../shared-forms/select/select-languages.component'
-import { PeerTubeTemplateDirective } from '../shared-main/angular/peertube-template.directive'
-import { HelpComponent } from '../shared-main/misc/help.component'
+import { PeerTubeTemplateDirective } from '../shared-main/common/peertube-template.directive'
+import { HelpComponent } from '../shared-main/buttons/help.component'
import { FormsModule, ReactiveFormsModule } from '@angular/forms'
@Component({
diff --git a/client/src/app/shared/shared-user-subscription/remote-subscribe.component.ts b/client/src/app/shared/shared-user-subscription/remote-subscribe.component.ts
index 359d6dc20..1eae1c7d1 100644
--- a/client/src/app/shared/shared-user-subscription/remote-subscribe.component.ts
+++ b/client/src/app/shared/shared-user-subscription/remote-subscribe.component.ts
@@ -4,8 +4,8 @@ import { FormReactive } from '@app/shared/shared-forms/form-reactive'
import { FormReactiveService } from '@app/shared/shared-forms/form-reactive.service'
import { logger } from '@root-helpers/logger'
import { USER_HANDLE_VALIDATOR } from '../form-validators/user-validators'
-import { PeerTubeTemplateDirective } from '../shared-main/angular/peertube-template.directive'
-import { HelpComponent } from '../shared-main/misc/help.component'
+import { PeerTubeTemplateDirective } from '../shared-main/common/peertube-template.directive'
+import { HelpComponent } from '../shared-main/buttons/help.component'
import { NgIf } from '@angular/common'
import { FormsModule, ReactiveFormsModule } from '@angular/forms'
diff --git a/client/src/app/shared/shared-user-subscription/subscribe-button.component.ts b/client/src/app/shared/shared-user-subscription/subscribe-button.component.ts
index 8b9b7b4cf..4c66483ed 100644
--- a/client/src/app/shared/shared-user-subscription/subscribe-button.component.ts
+++ b/client/src/app/shared/shared-user-subscription/subscribe-button.component.ts
@@ -3,11 +3,11 @@ import { Component, Input, OnChanges, OnInit } from '@angular/core'
import { AuthService, Notifier, RedirectService } from '@app/core'
import { FeedFormat } from '@peertube/peertube-models'
import { UserSubscriptionService } from './user-subscription.service'
-import { NumberFormatterPipe } from '../shared-main/angular/number-formatter.pipe'
+import { NumberFormatterPipe } from '../shared-main/common/number-formatter.pipe'
import { RemoteSubscribeComponent } from './remote-subscribe.component'
import { NgbDropdown, NgbDropdownToggle, NgbDropdownMenu } from '@ng-bootstrap/ng-bootstrap'
import { NgClass, NgIf, NgTemplateOutlet } from '@angular/common'
-import { VideoChannel } from '../shared-main/video-channel/video-channel.model'
+import { VideoChannel } from '../shared-main/channel/video-channel.model'
import { Account } from '../shared-main/account/account.model'
import { VideoService } from '../shared-main/video/video.service'
diff --git a/client/src/app/shared/shared-user-subscription/user-subscription.service.ts b/client/src/app/shared/shared-user-subscription/user-subscription.service.ts
index 242b95063..1bb96014b 100644
--- a/client/src/app/shared/shared-user-subscription/user-subscription.service.ts
+++ b/client/src/app/shared/shared-user-subscription/user-subscription.service.ts
@@ -8,9 +8,9 @@ import { buildBulkObservable } from '@app/helpers'
import { ActorFollow, ResultList, VideoChannel as VideoChannelServer, VideoSortField } from '@peertube/peertube-models'
import { environment } from '../../../environments/environment'
import { Video } from '../shared-main/video/video.model'
-import { VideoChannel } from '../shared-main/video-channel/video-channel.model'
+import { VideoChannel } from '../shared-main/channel/video-channel.model'
import { VideoService } from '../shared-main/video/video.service'
-import { VideoChannelService } from '../shared-main/video-channel/video-channel.service'
+import { VideoChannelService } from '../shared-main/channel/video-channel.service'
const debugLogger = debug('peertube:subscriptions:UserSubscriptionService')
diff --git a/client/src/app/shared/shared-video-comment/video-comment-list-admin-owner.component.ts b/client/src/app/shared/shared-video-comment/video-comment-list-admin-owner.component.ts
index 0d3c24e1a..8dff7ea9f 100644
--- a/client/src/app/shared/shared-video-comment/video-comment-list-admin-owner.component.ts
+++ b/client/src/app/shared/shared-video-comment/video-comment-list-admin-owner.component.ts
@@ -13,7 +13,7 @@ import { TableModule } from 'primeng/table'
import { ActorAvatarComponent } from '../shared-actor-image/actor-avatar.component'
import { AdvancedInputFilter, AdvancedInputFilterComponent } from '../shared-forms/advanced-input-filter.component'
import { GlobalIconComponent } from '../shared-icons/global-icon.component'
-import { AutoColspanDirective } from '../shared-main/angular/auto-colspan.directive'
+import { AutoColspanDirective } from '../shared-main/common/auto-colspan.directive'
import { ActionDropdownComponent, DropdownAction } from '../shared-main/buttons/action-dropdown.component'
import { ButtonComponent } from '../shared-main/buttons/button.component'
import { FeedComponent } from '../shared-main/feeds/feed.component'
diff --git a/client/src/app/shared/shared-video-miniature/download/video-files-download.component.ts b/client/src/app/shared/shared-video-miniature/download/video-files-download.component.ts
index dc6a3f11c..10022b90e 100644
--- a/client/src/app/shared/shared-video-miniature/download/video-files-download.component.ts
+++ b/client/src/app/shared/shared-video-miniature/download/video-files-download.component.ts
@@ -20,8 +20,8 @@ import { firstValueFrom } from 'rxjs'
import { tap } from 'rxjs/operators'
import { InputTextComponent } from '../../shared-forms/input-text.component'
import { GlobalIconComponent } from '../../shared-icons/global-icon.component'
-import { BytesPipe } from '../../shared-main/angular/bytes.pipe'
-import { NumberFormatterPipe } from '../../shared-main/angular/number-formatter.pipe'
+import { BytesPipe } from '../../shared-main/common/bytes.pipe'
+import { NumberFormatterPipe } from '../../shared-main/common/number-formatter.pipe'
import { VideoDetails } from '../../shared-main/video/video-details.model'
import { VideoService } from '../../shared-main/video/video.service'
diff --git a/client/src/app/shared/shared-video-miniature/download/video-generate-download.component.ts b/client/src/app/shared/shared-video-miniature/download/video-generate-download.component.ts
index 52bb04552..cc90474b0 100644
--- a/client/src/app/shared/shared-video-miniature/download/video-generate-download.component.ts
+++ b/client/src/app/shared/shared-video-miniature/download/video-generate-download.component.ts
@@ -10,7 +10,7 @@ import { getResolutionAndFPSLabel, maxBy } from '@peertube/peertube-core-utils'
import { VideoFile, VideoResolution, VideoSource } from '@peertube/peertube-models'
import { videoRequiresFileToken } from '@root-helpers/video'
import { GlobalIconComponent } from '../../shared-icons/global-icon.component'
-import { BytesPipe } from '../../shared-main/angular/bytes.pipe'
+import { BytesPipe } from '../../shared-main/common/bytes.pipe'
import { VideoDetails } from '../../shared-main/video/video-details.model'
@Component({
diff --git a/client/src/app/shared/shared-video-miniature/video-miniature.component.ts b/client/src/app/shared/shared-video-miniature/video-miniature.component.ts
index e106c89c6..fa3563a74 100644
--- a/client/src/app/shared/shared-video-miniature/video-miniature.component.ts
+++ b/client/src/app/shared/shared-video-miniature/video-miniature.component.ts
@@ -18,7 +18,7 @@ import { VideoActionsDisplayType, VideoActionsDropdownComponent } from './video-
import { RouterLink } from '@angular/router'
import { VideoViewsCounterComponent } from '../shared-video/video-views-counter.component'
import { DateToggleComponent } from '../shared-main/date/date-toggle.component'
-import { LinkComponent } from '../shared-main/angular/link.component'
+import { LinkComponent } from '../shared-main/common/link.component'
import { ActorAvatarComponent } from '../shared-actor-image/actor-avatar.component'
import { VideoThumbnailComponent } from '../shared-thumbnail/video-thumbnail.component'
import { NgClass, NgIf, NgFor } from '@angular/common'
diff --git a/client/src/app/shared/shared-video-miniature/videos-list.component.ts b/client/src/app/shared/shared-video-miniature/videos-list.component.ts
index cbd555a72..14db74ed9 100644
--- a/client/src/app/shared/shared-video-miniature/videos-list.component.ts
+++ b/client/src/app/shared/shared-video-miniature/videos-list.component.ts
@@ -19,7 +19,7 @@ import { logger } from '@root-helpers/logger'
import debug from 'debug'
import { Observable, Subject, Subscription, forkJoin, fromEvent, of } from 'rxjs'
import { concatMap, debounceTime, map, switchMap } from 'rxjs/operators'
-import { InfiniteScrollerDirective } from '../shared-main/angular/infinite-scroller.directive'
+import { InfiniteScrollerDirective } from '../shared-main/common/infinite-scroller.directive'
import { ButtonComponent } from '../shared-main/buttons/button.component'
import { FeedComponent } from '../shared-main/feeds/feed.component'
import { Syndication } from '../shared-main/feeds/syndication.model'
diff --git a/client/src/app/shared/shared-video-miniature/videos-selection.component.ts b/client/src/app/shared/shared-video-miniature/videos-selection.component.ts
index 4f06b1770..e9be233f5 100644
--- a/client/src/app/shared/shared-video-miniature/videos-selection.component.ts
+++ b/client/src/app/shared/shared-video-miniature/videos-selection.component.ts
@@ -7,10 +7,10 @@ import { ResultList, VideosExistInPlaylists, VideoSortField } from '@peertube/pe
import { MiniatureDisplayOptions, VideoMiniatureComponent } from './video-miniature.component'
import { FormsModule } from '@angular/forms'
import { PeertubeCheckboxComponent } from '../shared-forms/peertube-checkbox.component'
-import { InfiniteScrollerDirective } from '../shared-main/angular/infinite-scroller.directive'
+import { InfiniteScrollerDirective } from '../shared-main/common/infinite-scroller.directive'
import { NgIf, NgFor, NgTemplateOutlet } from '@angular/common'
import { Video } from '../shared-main/video/video.model'
-import { PeerTubeTemplateDirective } from '../shared-main/angular/peertube-template.directive'
+import { PeerTubeTemplateDirective } from '../shared-main/common/peertube-template.directive'
export type SelectionType = { [ id: number ]: boolean }
diff --git a/client/src/app/shared/shared-video-playlist/video-playlist-miniature.component.ts b/client/src/app/shared/shared-video-playlist/video-playlist-miniature.component.ts
index d13ca4511..90fddc165 100644
--- a/client/src/app/shared/shared-video-playlist/video-playlist-miniature.component.ts
+++ b/client/src/app/shared/shared-video-playlist/video-playlist-miniature.component.ts
@@ -2,9 +2,9 @@ import { LinkType } from 'src/types/link.type'
import { Component, Input, OnInit } from '@angular/core'
import { VideoPlaylist } from './video-playlist.model'
import { MarkdownService } from '@app/core'
-import { FromNowPipe } from '../shared-main/angular/from-now.pipe'
+import { FromNowPipe } from '../shared-main/date/from-now.pipe'
import { RouterLink } from '@angular/router'
-import { LinkComponent } from '../shared-main/angular/link.component'
+import { LinkComponent } from '../shared-main/common/link.component'
import { NgClass, NgIf } from '@angular/common'
@Component({
diff --git a/client/src/app/shared/shared-video-playlist/video-playlist.service.ts b/client/src/app/shared/shared-video-playlist/video-playlist.service.ts
index 7777f8a97..18ac930e7 100644
--- a/client/src/app/shared/shared-video-playlist/video-playlist.service.ts
+++ b/client/src/app/shared/shared-video-playlist/video-playlist.service.ts
@@ -23,8 +23,8 @@ import {
import { environment } from '../../../environments/environment'
import { VideoPlaylistElement } from './video-playlist-element.model'
import { VideoPlaylist } from './video-playlist.model'
-import { VideoChannel } from '../shared-main/video-channel/video-channel.model'
-import { VideoChannelService } from '../shared-main/video-channel/video-channel.service'
+import { VideoChannel } from '../shared-main/channel/video-channel.model'
+import { VideoChannelService } from '../shared-main/channel/video-channel.service'
import { AccountService } from '../shared-main/account/account.service'
import { Account } from '../shared-main/account/account.model'
diff --git a/client/src/app/shared/shared-video/video-views-counter.component.ts b/client/src/app/shared/shared-video/video-views-counter.component.ts
index 0871b7654..fc290d059 100644
--- a/client/src/app/shared/shared-video/video-views-counter.component.ts
+++ b/client/src/app/shared/shared-video/video-views-counter.component.ts
@@ -1,5 +1,5 @@
import { Component, Input } from '@angular/core'
-import { NumberFormatterPipe } from '../shared-main/angular/number-formatter.pipe'
+import { NumberFormatterPipe } from '../shared-main/common/number-formatter.pipe'
import { NgIf } from '@angular/common'
import { Video } from '../shared-main/video/video.model'
diff --git a/client/src/app/shared/standalone-notifications/user-notifications.component.ts b/client/src/app/shared/standalone-notifications/user-notifications.component.ts
index 53b996a77..a3f25fcc0 100644
--- a/client/src/app/shared/standalone-notifications/user-notifications.component.ts
+++ b/client/src/app/shared/standalone-notifications/user-notifications.component.ts
@@ -5,8 +5,8 @@ import { AbuseState } from '@peertube/peertube-models'
import { CommonModule } from '@angular/common'
import { GlobalIconComponent } from '../shared-icons/global-icon.component'
import { RouterLink } from '@angular/router'
-import { FromNowPipe } from '../shared-main/angular/from-now.pipe'
-import { InfiniteScrollerDirective } from '../shared-main/angular/infinite-scroller.directive'
+import { FromNowPipe } from '../shared-main/date/from-now.pipe'
+import { InfiniteScrollerDirective } from '../shared-main/common/infinite-scroller.directive'
import { UserNotificationService } from '../shared-main/users/user-notification.service'
import { UserNotification } from '../shared-main/users/user-notification.model'
diff --git a/client/src/app/shared/standalone-upload/upload-progress.component.ts b/client/src/app/shared/standalone-upload/upload-progress.component.ts
index 76997c037..ec82d0fbe 100644
--- a/client/src/app/shared/standalone-upload/upload-progress.component.ts
+++ b/client/src/app/shared/standalone-upload/upload-progress.component.ts
@@ -1,6 +1,6 @@
import { CommonModule } from '@angular/common'
import { Component, EventEmitter, Input, Output } from '@angular/core'
-import { ProgressBarComponent } from '../shared-main/misc/progress-bar.component'
+import { ProgressBarComponent } from '../shared-main/common/progress-bar.component'
@Component({
selector: 'my-upload-progress',
diff --git a/client/src/app/shared/standalone-watched-words/watched-words-list-admin-owner.component.ts b/client/src/app/shared/standalone-watched-words/watched-words-list-admin-owner.component.ts
index 6b441cb19..41808415b 100644
--- a/client/src/app/shared/standalone-watched-words/watched-words-list-admin-owner.component.ts
+++ b/client/src/app/shared/standalone-watched-words/watched-words-list-admin-owner.component.ts
@@ -8,7 +8,7 @@ import { SharedModule, SortMeta } from 'primeng/api'
import { TableModule } from 'primeng/table'
import { first } from 'rxjs'
import { GlobalIconComponent } from '../shared-icons/global-icon.component'
-import { AutoColspanDirective } from '../shared-main/angular/auto-colspan.directive'
+import { AutoColspanDirective } from '../shared-main/common/auto-colspan.directive'
import { ActionDropdownComponent, DropdownAction } from '../shared-main/buttons/action-dropdown.component'
import { ButtonComponent } from '../shared-main/buttons/button.component'
import { TableExpanderIconComponent } from '../shared-tables/table-expander-icon.component'